@ant-design/pro-form
Version:
146 lines (145 loc) • 4.97 kB
TypeScript
import { Form } from 'antd';
import React from 'react';
interface ControlPropsType {
id: string;
value: any;
onChange: (value: any, ...args: any[]) => void;
}
export type WithControlPropsType<T = object> = T & Partial<ControlPropsType>;
interface ControlModelType {
value: any;
onChange: (value: any) => void;
}
interface FormControlProps {
valuePropName?: string;
trigger?: string;
}
interface FormControlMultiProps extends FormControlProps {
name: string;
}
type GetArrayFieldType<T extends readonly {
name: string;
}[]> = T[number]['name'];
export declare function useControlModel<T extends FormControlProps>({ value, onChange, id }: WithControlPropsType, model?: T): ControlModelType;
export declare function useControlModel<const T extends readonly string[]>({ value, onChange, id }: WithControlPropsType, model?: T): {
[P in T[number]]: ControlModelType;
};
export declare function useControlModel<const T extends readonly FormControlMultiProps[]>({ value, onChange, id }: WithControlPropsType, model?: T): {
[P in GetArrayFieldType<T>]: ControlModelType;
};
export type FormControlFC<P> = (props: WithControlPropsType<P>) => React.ReactNode;
type FormControlInjectProps = ReturnType<typeof Form.Item.useStatus> & {
id: string;
value: any;
onChange: (value: any) => void;
[x: string]: any;
};
/**
* 用在 ProForm.Item 或 Form.Item 于 表单项之间的,用于劫持渲染的函数
* ``` tsx
* <Form.Item name='name' label='名称'>
* <FormControlRender>
* {
* formItemProps => (
* <div>
* <span>prefix</span>
* <Input {...formItemProps} />
* </div>
* )
* }
* </FormControlRender>
* </Form.Item>
* ```
*/
export declare function FormControlRender(props: WithControlPropsType<{
children: (props: FormControlInjectProps) => React.ReactElement;
}>): React.ReactElement<any, string | React.JSXElementConstructor<any>>;
/**
* 提取props中的 value 和 onChange 属性
*/
export declare function pickControlProps(props: FormControlInjectProps): {
value: any;
onChange: (value: any) => void;
};
/**
* 提取props中的 value、onChange 和 id 属性
*/
export declare function pickControlPropsWithId(props: FormControlInjectProps): {
id: string;
value: any;
onChange: (value: any) => void;
};
/**
* 用于包裹ProForm.Item Form.Item,使其可以使用render props的形式
* @description 用法
* const FormItem = withFormItemRender(用于包裹ProForm.Item)
* ``` tsx
* <FormItem name='name' label='名称'>
* {
* formItemProps => (
* <div>
* <span>prefix</span>
* <Input {...formItemProps} />
* </div>
* )
* }
* </FormItem>
* ```
*/
export declare function withFormItemRender<T extends React.FC<any>>(Comp: T): React.FC<Omit<React.ComponentProps<T>, 'children'> & {
children: (formItemProps: FormControlInjectProps) => React.ReactNode;
}>;
/**
* 用 withFormItemRender 加工Form.Item,使其拥有render props能力,同时暴露出 status 属性方便自定义组件校验使用
*
* ``` tsx
* <FormItemRender name='name' label='名称'>
* {
* formItemProps => (
* <div>
* <h3>prefix</h3>
* <textarea {...formItemProps} style={{ borderColor: formItemProps.status === 'error' ? 'red' : undefined }} />
* </div>
* )
* }
* </FormItemRender>
* ```
*/
export declare const FormItemRender: React.FC<Omit<import("antd").FormItemProps<unknown>, "children"> & {
children: (formItemProps: FormControlInjectProps) => React.ReactNode;
}>;
/**
* 用 withFormItemRender 加工 ProForm.Item,使其拥有render props能力,同时暴露出 status 属性方便自定义组件校验使用
* ``` tsx
* <ProFormItemRender name='name' label='名称'>
* {
* formItemProps => (
* <div>
* <h3>prefix</h3>
* <textarea {...formItemProps} style={{ borderColor: formItemProps.status === 'error' ? 'red' : undefined }} />
* </div>
* )
* }
* </ProFormItemRender>
* ```
*/
export declare const ProFormItemRender: React.FC<Omit<import("antd").FormItemProps<any> & {
ignoreFormItem?: boolean | undefined;
valueType?: import("../../../../utils/src").ProFieldValueType | undefined;
transform?: import("../../../../utils/src").SearchTransformKeyFn | undefined;
dataFormat?: string | undefined;
lightProps?: import("src").LightWrapperProps | undefined;
proFormFieldKey?: any;
} & {
addonBefore?: React.ReactNode;
addonAfter?: React.ReactNode;
addonWarpStyle?: React.CSSProperties | undefined;
convertValue?: import("../../../../utils/src").SearchConvertKeyFn | undefined;
help?: React.ReactNode | ((params: {
errors: React.ReactNode[];
warnings: React.ReactNode[];
}) => React.ReactNode);
}, "children"> & {
children: (formItemProps: FormControlInjectProps) => React.ReactNode;
}>;
export {};