bytesforce-form-render
Version:
通过 JSON Schema 生成标准 Form,常用于自定义搭建配置界面生成
151 lines (140 loc) • 4.31 kB
TypeScript
import * as React from 'react';
export interface Error {
/** 错误的数据路径 */
name: string;
/** 错误的内容 */
error: string[];
}
export interface FormParams {
formData?: any;
onChange?: (data: any) => void;
onValidate?: (valid: any) => void;
showValidate?: boolean;
/** 数据分析接口,表单展示完成渲染时触发 */
logOnMount?: (stats: any) => void;
/** 数据分析接口,表单提交成功时触发,获得本次表单填写的总时长 */
logOnSubmit?: (stats: any) => void;
}
export interface ValidateParams {
formData: any;
schema: any;
error: Error[];
[k: string]: any;
}
export interface ResetParams {
formData?: any;
submitData?: any;
errorFields?: Error[];
touchedKeys?: any[];
allTouched?: boolean;
[k: string]: any;
}
export interface FormInstance {
formData: any;
schema: any;
flatten: any;
touchedKeys: string[];
touchKey: (key: string) => void;
onItemChange: (path: string, value: any) => void;
setValueByPath: (path: string, value: any) => void;
getSchemaByPath: (path: string) => object;
setSchemaByPath: (path: string, value: any) => void;
setSchema: (settings: any) => void;
setValues: (formData: any) => void;
getValues: () => any;
resetFields: (options?: ResetParams) => void;
submit: () => Promise<void> | Promise<any[]>;
submitData: any;
errorFields: Error[];
isValidating: boolean;
outsideValidating: boolean;
isSubmitting: boolean;
endValidating: () => void;
endSubmitting: () => void;
setErrorFields: (error: Error[]) => void;
removeErrorField: (path: string) => void;
removeTouched: (path: string) => void;
changeTouchedKeys: (pathArray: string[]) => void;
isEditing: boolean;
setEditing: (status: boolean) => void;
syncStuff: (args: any) => void;
/** 折中升级方案中使用到,正常用不到 */
init: () => void;
/** 数据分析接口,表单展示完成渲染时触发 */
logOnMount: (args: any) => void;
/** 数据分析接口,表单提交成功时触发,获得本次表单填写的总时长 */
logOnSubmit: (args: any) => void;
_setErrors: (args: any) => void;
}
export type WatchProperties = {
[path: string]:
| {
handler: (value: any) => void;
immediate?: boolean;
}
| ((value: any) => void);
};
export interface FRProps {
/** 表单 id */
id?: string | number;
/** 表单顶层的className */
className?: string;
/** 表单顶层的样式 */
style?: any;
/** 表单 schema */
schema: any;
/** form单例 */
form: FormInstance;
/** 组件和schema的映射规则 */
mapping?: any;
/** 自定义组件 */
widgets?: any;
/** 表单提交前钩子 */
displayType?: string;
/** 只读模式 */
readOnly?: boolean;
/** 禁用模式 */
disabled?: boolean;
/** 标签宽度 */
labelWidth?: string | number;
/** antd的全局config */
configProvider?: any;
theme?: string | number;
/** 覆盖默认的校验信息 */
validateMessages?: any;
/** 显示当前表单内部状态 */
debug?: boolean;
/** 显示css布局提示线 */
debugCss?: boolean;
locale?: string;
column?: number;
debounceInput?: boolean;
size?: string;
// 数据会作为 beforeFinish 的第四个参数传入
config?: any;
// 类似于 vuejs 的 watch 的用法,监控值的变化,触发 callback
watch?: WatchProperties;
/** 对象组件是否折叠(全局的控制) */
allCollapsed?: boolean;
/** 表单的全局共享属性 */
globalProps?: any;
/** 表单首次加载钩子 */
onMount?: () => void;
/** 表单提交前钩子 */
beforeFinish?: (params: ValidateParams) => Error[] | Promise<Error[]>;
/** 表单提交后钩子 */
onFinish?: (formData: any, error: Error[]) => void;
/** 时时与外部更新同步的钩子 */
onValuesChange?: (changedValues: any, formData: any) => void;
/** 隐藏的数据是否去掉,默认不去掉(false) */
removeHiddenData?: boolean;
}
declare const FR: React.FC<FRProps>;
export declare function useForm(params?: FormParams): FormInstance;
export type ConnectedForm<T> = T & {
form: FormInstance;
};
export declare function connectForm<T extends {} = any>(
component: React.ComponentType<ConnectedForm<T>>
): React.ComponentType<T>;
export default FR;