From cabf3812560229c467998cf86e1c9ff1c01da8e6 Mon Sep 17 00:00:00 2001 From: Daniel Lautzenheiser Date: Sat, 5 Nov 2022 12:30:54 -0400 Subject: [PATCH] Fix types --- .../EditorControlPane/EditorControl.tsx | 3 +- .../EditorPreviewPane/EditorPreviewPane.tsx | 9 ++-- core/src/interface.ts | 50 +++++++++---------- core/src/lib/registry.ts | 3 +- core/src/lib/util/validation.util.ts | 4 +- 5 files changed, 35 insertions(+), 34 deletions(-) diff --git a/core/src/components/Editor/EditorControlPane/EditorControl.tsx b/core/src/components/Editor/EditorControlPane/EditorControl.tsx index 4c3547ca..60b1a8de 100644 --- a/core/src/components/Editor/EditorControlPane/EditorControl.tsx +++ b/core/src/components/Editor/EditorControlPane/EditorControl.tsx @@ -31,6 +31,7 @@ import type { GetAssetFunction, I18nSettings, TranslatedProps, + UnknownField, ValueOrNestedValue, Widget, } from '../../../interface'; @@ -206,7 +207,7 @@ const EditorControl = ({ collection, config, entry, - field, + field: field as UnknownField, fieldsErrors, submitted, getAsset: handleGetAsset, diff --git a/core/src/components/Editor/EditorPreviewPane/EditorPreviewPane.tsx b/core/src/components/Editor/EditorPreviewPane/EditorPreviewPane.tsx index e0f8ca4e..88219c86 100644 --- a/core/src/components/Editor/EditorPreviewPane/EditorPreviewPane.tsx +++ b/core/src/components/Editor/EditorPreviewPane/EditorPreviewPane.tsx @@ -33,6 +33,7 @@ import type { TemplatePreviewProps, TranslatedProps, ValueOrNestedValue, + WidgetPreviewComponent, } from '../../../interface'; import type { RootState } from '../../../store'; @@ -104,12 +105,12 @@ function getWidgetFor( } const value = values?.[field.name]; - let fieldWithWidgets: RenderedField = Object.entries(field).reduce((acc, [key, fieldValue]) => { + let fieldWithWidgets = Object.entries(field).reduce((acc, [key, fieldValue]) => { if (!['fields', 'fields'].includes(key)) { acc[key] = fieldValue; } return acc; - }, {} as Record) as Omit; + }, {} as Record) as RenderedField; if ('fields' in field && field.fields) { fieldWithWidgets = { @@ -205,9 +206,9 @@ function getWidget( */ return !widget.preview ? null : ( { +export interface FieldValidationMethodProps { field: F; value: T | undefined | null; t: t; } -export type FieldValidationMethod = ( +export type FieldValidationMethod = ( props: FieldValidationMethodProps, ) => false | FieldError | Promise; @@ -222,9 +222,9 @@ export type TranslatedProps = T & ReactPolyglotTranslateProps; export type GetAssetFunction = (path: string, field?: Field) => Promise; -export interface WidgetControlProps { - collection: Collection; - config: Config; +export interface WidgetControlProps { + collection: Collection; + config: Config; entry: Entry; field: F; fieldsErrors: FieldsErrors; @@ -252,11 +252,10 @@ export interface WidgetControlProps { - config: Config; - collection: Collection; + config: Config; + collection: Collection; entry: Entry; field: RenderedField; getAsset: GetAssetFunction; @@ -265,12 +264,11 @@ export interface WidgetPreviewProps< export type WidgetPreviewComponent< T = unknown, - F extends Field = Field, - EF extends BaseField = Field, + F extends BaseField = UnknownField > = // eslint-disable-next-line @typescript-eslint/no-explicit-any | React.ReactElement> - | ComponentType>; + | ComponentType>; export type WidgetsFor

= ( name: K, @@ -284,7 +282,7 @@ export type WidgetsFor

= ( widgets: Record; }; -export interface TemplatePreviewProps { +export interface TemplatePreviewProps { collection: Collection; fields: Field[]; entry: Entry; @@ -295,28 +293,28 @@ export interface TemplatePreviewProps; } -export type TemplatePreviewComponent = ComponentType< +export type TemplatePreviewComponent = ComponentType< TemplatePreviewProps >; -export interface WidgetOptions { +export interface WidgetOptions { validator?: Widget['validator']; getValidValue?: Widget['getValidValue']; schema?: Widget['schema']; } -export interface Widget { - control: ComponentType>; - preview?: WidgetPreviewComponent; +export interface Widget { + control: ComponentType>; + preview?: WidgetPreviewComponent; validator: FieldValidationMethod; getValidValue: (value: T | undefined | null) => T | undefined | null; schema?: PropertiesSchema; } -export interface WidgetParam { +export interface WidgetParam { name: string; - controlComponent: Widget['control']; - previewComponent?: Widget['preview']; + controlComponent: Widget['control']; + previewComponent?: Widget['preview']; options?: WidgetOptions; } @@ -480,7 +478,7 @@ export type AuthScope = 'repo' | 'public_repo'; export type SlugEncoding = 'unicode' | 'ascii'; -export type RenderedField = Omit & { +export type RenderedField = Omit & { fields?: ReactNode[]; }; @@ -850,7 +848,7 @@ export interface PreviewStyle { } export interface MarkdownPluginFactoryProps { - config: Config; + config: Config; field: MarkdownField; media: MediaHolder; mode: 'editor' | 'preview'; diff --git a/core/src/lib/registry.ts b/core/src/lib/registry.ts index 7e0a26c0..147ac64d 100644 --- a/core/src/lib/registry.ts +++ b/core/src/lib/registry.ts @@ -121,7 +121,8 @@ export function getPreviewTemplate(name: string): TemplatePreviewComponent[]): void; export function registerWidget(widget: WidgetParam): void; export function registerWidget( name: string, diff --git a/core/src/lib/util/validation.util.ts b/core/src/lib/util/validation.util.ts index 2ee42a60..f0e393ba 100644 --- a/core/src/lib/util/validation.util.ts +++ b/core/src/lib/util/validation.util.ts @@ -7,6 +7,7 @@ import type { FieldError, FieldValidationMethod, FieldValidationMethodProps, + UnknownField, ValueOrNestedValue, Widget, } from '../../interface'; @@ -76,7 +77,6 @@ export function validatePattern({ return false; } -// TODO Fix typings export async function validate( path: string, field: Field, @@ -94,7 +94,7 @@ export async function validate( ]; for (const validation of validations) { - const response = await validation({ field, value: validValue, t }); + const response = await validation({ field: field as UnknownField, value: validValue, t }); if (response) { errors.push(response); }