import { FormItemProps, FormInstance } from 'antd/lib/form'; import { RowProps } from 'antd/lib/row'; import { ColProps } from 'antd/lib/col'; import { InputNumberProps } from 'antd/lib/input-number'; import { SwitchProps } from 'antd/lib/switch'; import { DatePickerProps, RangePickerProps } from 'antd/lib/date-picker'; import { PasswordProps, TextAreaProps, InputProps } from 'antd/lib/input'; import { SliderProps } from 'antd/lib/slider'; import { CascaderProps } from 'antd/lib/cascader'; import { TimePickerProps } from 'antd/lib/time-picker'; import { TimeRangePickerProps } from 'antd/lib/time-picker'; import { FormProps } from 'antd/lib/form'; import { CustomSelectProps } from './components/CustomSelect/index'; import { PicturesWallProps } from './components/PicturesWall/index'; import { CustomDraggerProps } from './components/CustomDragger'; import { CustomCheckGroupProps } from './components/CustomCheckGroup/index'; import { CustomRadioGroupProps } from './components/CustomRadioGroup/index'; import { InputNumberRangeProps } from './components/InputNumberRange/index'; import { PostProcess } from './components/FormMate/utils'; export type ComponentType = | 'plain' | 'custom' | 'date' | 'time' | 'datetime' | 'date-range' | 'time-range' | 'datetime-range' | 'number' | 'number-range' | 'select' | 'cascader' | 'password' | 'picture' | 'switch' | 'slider' | 'file-dragger' | 'check-group' | 'radio-group' /** string input, no whitespace */ | 'textarea' | 'email' | 'string'; export type DefaultTypeHintOptions = { [key in ComponentType]?: any; }; export type DefaultTypeRulesOptions = { [key in ComponentType]?: any; }; export type ComponentProps = | DatePickerProps | TimePickerProps | TimeRangePickerProps | RangePickerProps | InputNumberProps | InputNumberRangeProps | CustomSelectProps | CascaderProps | PasswordProps | PicturesWallProps | SwitchProps | SliderProps | CustomDraggerProps | CustomCheckGroupProps | CustomRadioGroupProps /** string input, no whitespace */ | TextAreaProps | InputProps; export interface CustomFormItemProps extends Omit { dense?: boolean; } /** * `children` prop is usable with `custom` type. */ export interface FormMateItemProps extends CustomFormItemProps { type?: ComponentType | T; componentProps?: ComponentProps | P; children?: FormItemProps['children']; } export interface FormMateDynamicProps extends FormMateItemProps { render?: (form: FormInstance) => boolean | null | undefined; } export type Filter = T extends U ? T : never; // Remove types from T that are not assignable to U export interface Grid { row?: RowProps; col?: ColProps | ((item: React.ReactNode, name: FormMateItemProps['name'], index?: number) => ColProps | void); } export interface FormMateProps extends Omit { formMate?: FormMateInstance; renderChildren?: (children: React.ReactNode) => React.ReactNode; /** item: 渲染子节点,name: 表单项字段名, index: 表单项索引,如果为动态类型,index 为 undefined */ renderItem?: (item: React.ReactNode, name: FormMateItemProps['name'], index?: number) => React.ReactNode; postInitialValues?: ( initialValues: Filter ) => Filter; grid?: Grid; type?: ComponentType; plainRender?: (item: { type: ComponentType; value: any; name: FormMateItemProps['name']; componentProps: ComponentProps; }) => React.ReactNode; } export interface FormMateInstance extends FormInstance { setInitialValues: (initialValues: Filter) => void; resetFieldsValue: () => void; } export interface FormMateInternalHook { setFieldsType: (types: any) => void; setPostProcess: (postProcess: PostProcess) => void; } export interface InternalFormMateInstance extends FormMateInstance { getFormMateInternalHook: (key: string) => FormMateInternalHook | null; }