46 lines
1.1 KiB
TypeScript
46 lines
1.1 KiB
TypeScript
import { ResourceField, FieldType } from './config';
|
|
|
|
export interface EnumOption {
|
|
key: string;
|
|
value: string;
|
|
}
|
|
|
|
export interface FieldOverride {
|
|
displayField?: string | string[];
|
|
display?: boolean;
|
|
formatter?: (value: any) => string;
|
|
filterType?: "autocomplete" | "multiselect" | "number-range" | "date-range";
|
|
enumLabels?: Record<string, string>;
|
|
}
|
|
|
|
export interface ResourceOverride {
|
|
fields?: Record<string, FieldOverride>;
|
|
pagination?: boolean;
|
|
hidden?: boolean;
|
|
filterOptions?: {
|
|
mode?: "server" | "client";
|
|
fields?: string[];
|
|
};
|
|
enumOption?: EnumOption;
|
|
}
|
|
|
|
export interface FieldComponentProps {
|
|
name: string;
|
|
field: ResourceField;
|
|
value: any;
|
|
onChange: (val: any) => void;
|
|
disabled?: boolean;
|
|
error?: string;
|
|
baseUrl?: string;
|
|
relationDataMap?: Record<string, any[]>;
|
|
uploadFile?: (file: File) => Promise<string | null>;
|
|
uploading?: boolean;
|
|
}
|
|
|
|
export type FieldComponent = React.ComponentType<FieldComponentProps>;
|
|
|
|
export type FieldComponents = Partial<Record<FieldType, FieldComponent>> & {
|
|
relation?: FieldComponent;
|
|
image?: FieldComponent;
|
|
};
|