Fix types

This commit is contained in:
Daniel Lautzenheiser 2022-11-05 12:30:54 -04:00
parent 9706d094e4
commit cabf381256
No known key found for this signature in database
GPG Key ID: D2F75F7DD915527E
5 changed files with 35 additions and 34 deletions

View File

@ -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,

View File

@ -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<string, unknown>) as Omit<Field, 'fields' | 'field'>;
}, {} as Record<string, unknown>) as RenderedField;
if ('fields' in field && field.fields) {
fieldWithWidgets = {
@ -205,9 +206,9 @@ function getWidget(
*/
return !widget.preview ? null : (
<PreviewHOC
previewComponent={widget.preview}
previewComponent={widget.preview as WidgetPreviewComponent}
key={key}
field={field}
field={field as RenderedField}
getAsset={getAsset}
config={config}
collection={collection}

View File

@ -1,10 +1,10 @@
import type {
EditorPlugin as MarkdownPlugin,
EditorType as MarkdownEditorType,
EditorPlugin as MarkdownPlugin,
EditorType as MarkdownEditorType
} from '@toast-ui/editor/types/editor';
import type { ToolbarItemOptions as MarkdownToolbarItemOptions } from '@toast-ui/editor/types/ui';
import type { PropertiesSchema } from 'ajv/dist/types/json-schema';
import type { FunctionComponent, ComponentType, ReactNode } from 'react';
import type { ComponentType, FunctionComponent, ReactNode } from 'react';
import type { t, TranslateProps as ReactPolyglotTranslateProps } from 'react-polyglot';
import type { MediaFile as BackendMediaFile } from './backend';
import type { EditorControlProps } from './components/Editor/EditorControlPane/EditorControl';
@ -106,13 +106,13 @@ export interface FieldsErrors {
[field: string]: FieldError[];
}
export interface FieldValidationMethodProps<T = unknown, F extends Field = Field> {
export interface FieldValidationMethodProps<T = unknown, F extends BaseField = UnknownField> {
field: F;
value: T | undefined | null;
t: t;
}
export type FieldValidationMethod<T = unknown, F extends Field = Field> = (
export type FieldValidationMethod<T = unknown, F extends BaseField = UnknownField> = (
props: FieldValidationMethodProps<T, F>,
) => false | FieldError | Promise<false | FieldError>;
@ -222,9 +222,9 @@ export type TranslatedProps<T> = T & ReactPolyglotTranslateProps;
export type GetAssetFunction = (path: string, field?: Field) => Promise<AssetProxy>;
export interface WidgetControlProps<T, F extends Field = Field, EF extends BaseField = Field> {
collection: Collection<EF>;
config: Config<EF>;
export interface WidgetControlProps<T, F extends BaseField = UnknownField> {
collection: Collection<F>;
config: Config<F>;
entry: Entry;
field: F;
fieldsErrors: FieldsErrors;
@ -252,11 +252,10 @@ export interface WidgetControlProps<T, F extends Field = Field, EF extends BaseF
export interface WidgetPreviewProps<
T = unknown,
F extends Field = Field,
EF extends BaseField = Field,
F extends BaseField = UnknownField
> {
config: Config<EF>;
collection: Collection<EF>;
config: Config<F>;
collection: Collection<F>;
entry: Entry;
field: RenderedField<F>;
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<unknown, string | React.JSXElementConstructor<any>>
| ComponentType<WidgetPreviewProps<T, F, EF>>;
| ComponentType<WidgetPreviewProps<T, F>>;
export type WidgetsFor<P = EntryData> = <K extends keyof P>(
name: K,
@ -284,7 +282,7 @@ export type WidgetsFor<P = EntryData> = <K extends keyof P>(
widgets: Record<keyof P[K], React.ReactNode>;
};
export interface TemplatePreviewProps<T = EntryData, EF extends BaseField = Field> {
export interface TemplatePreviewProps<T = EntryData, EF extends BaseField = UnknownField> {
collection: Collection<EF>;
fields: Field<EF>[];
entry: Entry<T>;
@ -295,28 +293,28 @@ export interface TemplatePreviewProps<T = EntryData, EF extends BaseField = Fiel
widgetsFor: WidgetsFor<T>;
}
export type TemplatePreviewComponent<T = EntryData, EF extends BaseField = Field> = ComponentType<
export type TemplatePreviewComponent<T = EntryData, EF extends BaseField = UnknownField> = ComponentType<
TemplatePreviewProps<T, EF>
>;
export interface WidgetOptions<T = unknown, F extends Field = Field> {
export interface WidgetOptions<T = unknown, F extends BaseField = UnknownField> {
validator?: Widget<T, F>['validator'];
getValidValue?: Widget<T, F>['getValidValue'];
schema?: Widget<T, F>['schema'];
}
export interface Widget<T = unknown, F extends Field = Field, EF extends BaseField = Field> {
control: ComponentType<WidgetControlProps<T, F, EF>>;
preview?: WidgetPreviewComponent<T, F, EF>;
export interface Widget<T = unknown, F extends BaseField = UnknownField> {
control: ComponentType<WidgetControlProps<T, F>>;
preview?: WidgetPreviewComponent<T, F>;
validator: FieldValidationMethod<T, F>;
getValidValue: (value: T | undefined | null) => T | undefined | null;
schema?: PropertiesSchema<unknown>;
}
export interface WidgetParam<T = unknown, F extends Field = Field, EF extends BaseField = Field> {
export interface WidgetParam<T = unknown, F extends BaseField = UnknownField> {
name: string;
controlComponent: Widget<T, F, EF>['control'];
previewComponent?: Widget<T, F, EF>['preview'];
controlComponent: Widget<T, F>['control'];
previewComponent?: Widget<T, F>['preview'];
options?: WidgetOptions<T, F>;
}
@ -480,7 +478,7 @@ export type AuthScope = 'repo' | 'public_repo';
export type SlugEncoding = 'unicode' | 'ascii';
export type RenderedField<T extends Field = Field> = Omit<T, 'fields'> & {
export type RenderedField<T extends BaseField = UnknownField> = Omit<T, 'fields'> & {
fields?: ReactNode[];
};
@ -850,7 +848,7 @@ export interface PreviewStyle {
}
export interface MarkdownPluginFactoryProps {
config: Config;
config: Config<MarkdownField>;
field: MarkdownField;
media: MediaHolder;
mode: 'editor' | 'preview';

View File

@ -121,7 +121,8 @@ export function getPreviewTemplate(name: string): TemplatePreviewComponent<Entry
/**
* Editor Widgets
*/
export function registerWidget(widgets: WidgetParam[]): void;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export function registerWidget(widgets: WidgetParam<any, any>[]): void;
export function registerWidget(widget: WidgetParam): void;
export function registerWidget<T = unknown>(
name: string,

View File

@ -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);
}