import React from 'react'; import { Field, FieldConfig, FieldConfigs, FieldError, FieldProps, IField } from '../common'; export interface FormFieldConfig extends FieldConfig { type: 'form'; fields: FieldConfigs[]; primaryField?: string; insertText?: string; removeText?: string; initialValues?: any; mode?: 'show'; modeValue?: string; canInsert?: boolean; canRemove?: boolean; canSort?: boolean; canCollapse?: boolean; stringify?: string[]; unstringify?: string[]; } export interface IFormField { insertText: string; onInsert?: () => Promise; canCollapse?: boolean; children: React.ReactNode[]; } export interface IFormFieldItem { index: number; isLastIndex: boolean; title: string; removeText: string; onRemove?: () => Promise; onSort?: (sortType: 'up' | 'down') => Promise; canCollapse?: boolean; children: React.ReactNode[]; } export interface IFormFieldItemField { index: number; label: string; subLabel?: React.ReactNode; required: boolean; status: 'normal' | 'error' | 'loading'; description?: string; message?: string; extra?: string; layout: 'horizontal' | 'vertical' | 'inline'; fieldType: string; children: React.ReactNode; } interface FormState { didMount: boolean; formDataList: { status: 'normal' | 'error' | 'loading'; message?: string; }[][]; showItem: boolean; showIndex: number; } export default class FormField extends Field, FormState> implements IField> { getALLComponents: (type: any) => typeof Field; formFieldsList: Array | null>>; formFieldsMountedList: Array>; constructor(props: FieldProps); didMount: () => Promise; validate: (value: Array) => Promise; set: (value: any) => Promise; get: () => Promise; handleMount: (index: number, formFieldIndex: number) => Promise; handleInsert: () => Promise; handleRemove: (index: number) => Promise; handleSort: (index: number, sortType: 'up' | 'down') => Promise; handleChange: (index: number, formFieldIndex: number, value: any) => Promise; /** * 处理set、unset、append、splice、sort后的操作 */ handleValueCallback: (index: number, formFieldIndex: number, validation: true | FieldError[]) => Promise; handleValueSet: (index: number, formFieldIndex: number, path: string, value: any, validation: true | FieldError[], options?: { noPathCombination?: boolean; }) => Promise; handleValueUnset: (index: number, formFieldIndex: number, path: string, validation: true | FieldError[], options?: { noPathCombination?: boolean; }) => Promise; handleValueListAppend: (index: number, formFieldIndex: number, path: string, value: any, validation: true | FieldError[], options?: { noPathCombination?: boolean; }) => Promise; handleValueListSplice: (index: number, formFieldIndex: number, path: string, _index: number, count: number, validation: true | FieldError[], options?: { noPathCombination?: boolean; }) => Promise; handleValueListSort: (index: number, formFieldIndex: number, path: string, _index: number, sortType: 'up' | 'down', validation: true | FieldError[], options?: { noPathCombination?: boolean; }) => Promise; /** * 用于展示子表单组件中的每一子项中的每一个子表单项组件 * @param props * @returns */ renderItemFieldComponent: (props: IFormFieldItemField) => JSX.Element; /** * 用于展示子表单组件中的每一个子项 * @param props * @returns */ renderItemComponent: (props: IFormFieldItem) => JSX.Element; /** * 用于展示子表单组件 * @param _props * @returns */ renderComponent: (_props: IFormField) => JSX.Element; render: () => JSX.Element; } export {};