Fix types
This commit is contained in:
parent
9706d094e4
commit
cabf381256
@ -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,
|
||||
|
@ -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}
|
||||
|
@ -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';
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user