import { ReactNode } from 'react' import { FormProps, RowProps, DescriptionsProps } from 'antd' import { DescriptionsItemProps } from 'antd/es/descriptions/Item' import { ProFieldValueFieldType, ProFormRenderParams, ProFormProps, ProFormRenderDescriptionParams, ProFormInstance, } from '@fexd/pro-form' import { ShowModalConfig } from '@fexd/pro-utils' import { ProTableResponse } from '../queryField/types' export type ProTableEditFieldMode = 'view' | 'add' | 'edit' export interface ProTableEditFieldParams { [key: string]: any item: R | undefined form: ProFormInstance mode: ProTableEditFieldMode inTable?: boolean } export interface ProTableEditFieldType extends Omit { readonly?: boolean hook?: ( params: ProTableEditFieldParams, ) => Omit | void | undefined | null | boolean | ReactNode } export interface ProTableEditFieldsConfig { isAvailable: boolean fields: ProTableEditFieldType[] } export interface ProTableEditFieldRenderParams extends Omit, 'renderDescriptions' | 'fieldsMap'> { fieldsMap: Record fieldsConfig: ProTableEditFieldsConfig getField: (fieldName: string) => ProTableEditFieldType | undefined renderDescriptions: (param?: { group?: string configs?: ProFormRenderDescriptionParams['configs'] filter?: (item: ProTableEditFieldType) => boolean sort?: (prev: ProTableEditFieldType, next: ProTableEditFieldType) => number | undefined | void descriptionsProps?: DescriptionsProps descriptionsItemProps?: DescriptionsItemProps | ((field: ProTableEditFieldType) => DescriptionsItemProps) }) => ReactNode item?: Record mode: ProTableEditFieldMode } export interface ProTableEditFieldModalProps extends Omit {} // 编辑插件参数 export interface ProTableEditFieldConfig { /** 详情 */ onView?: (item: R, mode: 'view' | 'edit') => Promise | void> | void /** 增 */ onAdd?: (params: any) => Promise | void | boolean> | void | boolean /** 改 */ onEdit?: (params: any, item: R) => Promise | void | boolean> | void | boolean /** 编辑成功后刷新表格 */ refreshAfterEdit?: boolean /** 新增成功后刷新表格 */ refreshAfterAdd?: boolean /** 何时触发 onEdit */ whenToTriggerOnEdit?: 'changed' | 'always' /** 单独配置编辑表单,此项存在时,columns 内配置将失效 */ editFields?: ProTableEditFieldType[] | ((item: R | undefined, mode: ProTableEditFieldMode) => ProTableEditFieldType[]) /** 单独配置新增表单,此项存在时,columns 内配置将失效 */ addFields?: ProTableEditFieldType[] | ((item: undefined, mode: 'add') => ProTableEditFieldType[]) /** 单独配置浏览区域,此项存在时,columns 内配置将失效 */ viewFields?: ProTableEditFieldType[] | ((item: R, mode: 'view') => ProTableEditFieldType[]) editFieldModalProps?: | ProTableEditFieldModalProps | ((item: R, mode: ProTableEditFieldMode) => ProTableEditFieldModalProps) addFieldModalProps?: | ProTableEditFieldModalProps | ((item: R, mode: ProTableEditFieldMode) => ProTableEditFieldModalProps) viewFieldModalProps?: | ProTableEditFieldModalProps | ((item: R, mode: ProTableEditFieldMode) => ProTableEditFieldModalProps) editFieldFormProps?: ProFormProps | ((item: R, mode: ProTableEditFieldMode) => ProFormProps) addFieldFormProps?: ProFormProps | ((item: R, mode: ProTableEditFieldMode) => ProFormProps) viewFieldFormProps?: ProFormProps | ((item: R, mode: ProTableEditFieldMode) => ProFormProps) editFieldGutter?: RowProps['gutter'] | ((item: R | undefined, mode: ProTableEditFieldMode) => RowProps['gutter']) viewFieldGutter?: ProTableEditFieldConfig['editFieldGutter'] addFieldGutter?: ProTableEditFieldConfig['editFieldGutter'] /** 是否清空查询表单空参数 */ editFieldFilterEmptyParam?: boolean /** 是否清空查询表单空参数 */ addFieldFilterEmptyParam?: boolean editFieldColumns?: number | ((item: R | undefined, mode: ProTableEditFieldMode) => number) editFieldLayout?: FormProps['layout'] | ((item: R | undefined, mode: ProTableEditFieldMode) => FormProps['layout']) renderModalEditFields?: (renderParams: ProTableEditFieldRenderParams) => ReactNode addFieldLayout?: ProTableEditFieldConfig['editFieldLayout'] addFieldColumns?: ProTableEditFieldConfig['editFieldColumns'] renderModalAddFields?: ProTableEditFieldConfig['renderModalEditFields'] viewFieldLayout?: ProTableEditFieldConfig['editFieldLayout'] viewFieldColumns?: ProTableEditFieldConfig['editFieldColumns'] renderModalViewFields?: ProTableEditFieldConfig['renderModalEditFields'] }