90 lines
2.2 KiB
TypeScript
90 lines
2.2 KiB
TypeScript
import { ResourceField, FieldType } from './config';
|
||
|
||
export interface EnumOption {
|
||
key: string;
|
||
value: string;
|
||
}
|
||
|
||
export interface FieldOverride {
|
||
displayFormat?: string;
|
||
display?: boolean;
|
||
formatter?: (value: any) => string;
|
||
filterType?: "autocomplete" | "multiselect" | "number-range" | "date-range";
|
||
enumLabels?: Record<string, string>;
|
||
// New optional properties to support custom config extensions
|
||
path?: string;
|
||
refers?: string;
|
||
// Added support for overriding the base field type and label
|
||
type?: FieldType;
|
||
label?: string;
|
||
}
|
||
|
||
export interface ResourceOverride {
|
||
fields?: Record<string, FieldOverride>;
|
||
pagination?: boolean;
|
||
hidden?: boolean;
|
||
filterOptions?: {
|
||
mode?: "server" | "client";
|
||
fields?: string[];
|
||
};
|
||
enumOption?: EnumOption;
|
||
// New optional property for reference‑type resources
|
||
referenceOptions?: {
|
||
enumOption?: EnumOption;
|
||
autoComplete?: boolean;
|
||
prefetch?: boolean;
|
||
};
|
||
}
|
||
|
||
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;
|
||
default?: FieldComponent;
|
||
dateRange?: FieldComponent;
|
||
numberRange?: FieldComponent;
|
||
FormField?: React.ComponentType<any>;
|
||
GenericForm?: React.ComponentType<any>;
|
||
};
|
||
|
||
export interface CellRendererProps {
|
||
value: any;
|
||
row: any;
|
||
field: ResourceField;
|
||
fieldKey: string;
|
||
config: import('./config').ResourceConfig;
|
||
onNavigate?: (resourceName: string, id: string) => void;
|
||
isMobile?: boolean;
|
||
}
|
||
|
||
export type CellRenderer = React.ComponentType<CellRendererProps>;
|
||
|
||
export interface EnhancedTableComponents {
|
||
cellRenderers?: Partial<Record<FieldType, CellRenderer>>;
|
||
}
|
||
|
||
export interface FilterBarComponents {
|
||
filterInputs?: Record<string, React.ComponentType<{
|
||
field: ResourceField;
|
||
value: any;
|
||
onChange: (val: any) => void;
|
||
options: string[];
|
||
}>>;
|
||
}
|
||
|
||
export type { FieldType };
|