UNPKG

antd-table-editable-af

Version:
59 lines (58 loc) 2.81 kB
import { FormItemProps, FormProps, TableProps } from 'antd'; import { ColumnType } from 'antd/lib/table'; import { HTMLAttributes, HTMLProps } from 'react'; export interface EditableTableProps<RecordType, EditorType extends string = any> extends TableProps<RecordType> { onSave?: (info: SaveInfoType<RecordType, EditorType>) => void; columns?: EditableColumn<RecordType, EditorType>[]; editorComponents?: Record<EditorType, React.FunctionComponent<any>>; eventName?: string; } export interface EditableColumn<RecordType, EditorType = any> extends ColumnType<RecordType> { /** 是否可编辑 */ editable?: boolean | ((value: any, record: RecordType, index: number) => boolean); /** 类型,为函数时可以判断在筛选中或在表格中 */ editorType?: Partial<EditorType>; /** 在表格中的 formItem 属性 */ formItemProps?: FormItemProps | ((value: any, record: RecordType, index: number) => FormItemProps); /** 在表格中的控件属性 */ fieldProps?: Record<string, any> | ((value: any, record: RecordType, index: number) => Record<string, any>); /** 转换值到表格中 */ valueFormatter?: (value: any, record: RecordType, index: number) => any; } export type SaveInfoType<RecordType, EditorType> = { /** * field = String(col.key ?? col.dataIndex) */ field: string; value: any; record: RecordType; index: number; editorType?: EditorType; }; export interface EditableCellProps<RecordType = any, EditorType = any> extends HTMLAttributes<HTMLTableCellElement> { editable: boolean; value?: any; record: RecordType; children: React.ReactNode[]; formItemProps?: FormItemProps | ((value: any, record: RecordType, index: number) => FormItemProps); fieldProps?: Record<string, any> | ((value: any, record: RecordType, index: number) => Record<string, any>); editorType: EditorType; index: number; field: string; render?: (value: any, record: RecordType, index: number) => React.ReactNode; editorComponents?: Record<string, React.FunctionComponent<CellEditorProps>>; cellComponent: Component<any>; onSave: (info: Omit<SaveInfoType<RecordType, EditorType>, 'record'>) => void; } export type EditableOnCellProps<RecordType> = Omit<EditableCellProps<RecordType>, 'editorComponents' | 'cellComponent'>; export type Component<P> = React.ComponentType<P> | React.ForwardRefExoticComponent<P> | React.FC<P> | keyof React.ReactHTML; export interface CellEditorProps { value: any; fieldProps?: Record<string, any>; cellProps: HTMLProps<HTMLTableCellElement>; render: (node: React.ReactNode, params?: { cellProps?: HTMLProps<HTMLTableCellElement>; formProps?: FormProps; formItemProps?: FormItemProps; }) => React.ReactNode; }