zy-react-library/components/FormBuilder/FormItemsRenderer.d.ts

102 lines
3.2 KiB
TypeScript
Raw Normal View History

2025-10-22 14:43:42 +08:00
import type { ColProps } from "antd/es/col";
import type { FormItemProps, Rule } from "antd/es/form";
import type { NamePath } from "rc-field-form/lib/interface";
import type { FC, ReactNode } from "react";
import type { FORM_ITEM_RENDER_ENUM } from "../../enum/formItemRender";
/**
*
*/
export type FormItemRenderType
= | (typeof FORM_ITEM_RENDER_ENUM)[keyof typeof FORM_ITEM_RENDER_ENUM]
| ((props: any) => ReactNode);
/**
*
*/
export interface OptionItem {
/** ID字段 */
id?: any;
/** 名称字段 */
name?: string;
[key: string]: any;
}
/**
*
*/
export interface itemsFieldConfig {
/** 值字段的键名,默认为 'id' */
2025-10-22 14:43:42 +08:00
valueKey?: string;
/** 标签字段的键名,默认为 'name' */
2025-10-22 14:43:42 +08:00
labelKey?: string;
}
/**
*
*/
export type FormValues = Record<string, any>;
/**
*
*/
export interface FormOption {
/** 表单项字段名 */
name?: string | string[];
/** 表单项标签 */
label?: ReactNode;
/** 渲染类型 */
render?: FormItemRenderType;
/** 占据栅格列数,默认 12 */
span?: number | string;
/** 是否必填,默认 true支持函数动态计算 */
required?: boolean | ((formValues: FormValues) => boolean);
/** 验证规则 */
rules?: Rule | Rule[];
/** 占位符文本,默认会根据传入的 render 类型自动判断(请选择、请输入)和 label 组合 */
placeholder?: ReactNode;
/** 提示信息,传入将在 label 右侧生成图标展示 tooltip */
tip?: ReactNode;
/** 是否隐藏,默认 false支持函数动态计算 */
hidden?: boolean | ((formValues: FormValues) => boolean);
2025-10-28 12:30:57 +08:00
/** 是否自定义渲染,默认 false将不生成 Form.Item */
2025-10-22 14:43:42 +08:00
customizeRender?: boolean;
/** 选项数据(用于 select、radio、checkbox */
items?: OptionItem[];
/** 字段键配置 */
itemsField?: itemsFieldConfig;
/** 传递给表单控件的属性,支持函数动态计算 */
componentProps?: Record<string, any> | ((formValues: FormValues) => Record<string, any>);
/** 传递给 Form.Item 的属性,支持函数动态计算 */
formItemProps?: FormItemProps | ((formValues: FormValues) => FormItemProps);
2025-10-28 12:30:57 +08:00
/** label 栅格配置,默认直接使用外层的 labelCol如果 span 等于 24是外层的 labelCol.span 一半 */
2025-10-22 14:43:42 +08:00
labelCol?: ColProps;
2025-10-28 12:30:57 +08:00
/** wrapper 栅格配置,默认为 24 - labelCol.span */
2025-10-22 14:43:42 +08:00
wrapperCol?: ColProps;
/** 是否应该更新(用于表单联动) */
shouldUpdate?: boolean | ((prevValues: FormValues, nextValues: FormValues, info: { source?: string }) => boolean);
/** 依赖字段(用于表单联动) */
dependencies?: NamePath[];
}
/**
* FormItemsRenderer
*/
export interface FormItemsRendererProps {
/** 表单配置项数组 */
options: FormOption[];
/** 默认栅格占据列数,默认 12 */
span?: number;
/** 是否折叠仅显示前3项默认 false */
collapse?: boolean;
/** 自动生成必填规则,默认 true */
useAutoGenerateRequired?: boolean;
}
/**
*
*/
declare const FormItemsRenderer: FC<FormItemsRendererProps>;
export default FormItemsRenderer;