@antdp/edit-table
Version:
基于antd封装的组件
149 lines (148 loc) • 5.34 kB
TypeScript
import React from 'react';
import { TableProps, TooltipProps, ButtonProps } from 'antd';
import { ColumnType } from 'antd/lib/table';
import { FieldProps } from 'rc-field-form/lib/Field';
import { RenderedCell } from 'rc-table/lib/interface';
import { Rule, ValidateErrorEntity } from 'rc-field-form/lib/interface';
import { ItemChildAttr, ItemChildType } from './utils';
import Store from './Store';
import { FormInstance, Meta } from 'rc-field-form/lib/interface';
import { ListProps } from 'rc-field-form/lib/List';
export interface OtherProps {
/** 编辑中字段 */
editingKey: any[];
/** 当前行 是否编辑 */
editable: boolean;
/** 处于编辑状态的 新增数据 key */
newAdd: any[];
/** 是否新增的 */
isNewAdd: boolean;
/** 保存 ,key:主键 ,record:行数据,index:下标 **/
save: (key: string | number, record: any, indx: number) => void;
/** 取消 , id:主键 */
cancel: (id: string | number) => void;
/** 删除 ,id:主键, rowItem 当前行数据 ,index:下标 */
onDelete: (id: string | number, rowItem: any, index: number) => void;
/** 编辑 按钮 ,record 当前行数 */
edit: (record: any) => void;
}
export interface ColumnsProps extends ColumnType<any> {
/** 是否编辑 */
editable?: boolean;
/** 自定义 渲染编辑组件 */
inputNode?: ((...arg: any[]) => React.ReactNode) | React.ReactNode;
/** 规则 */
rules?: Rule[];
/** formItem 表单 其他属性值*/
itemAttr?: Omit<FieldProps, 'rules' | 'label' | 'name'>;
/** formItem 表单 children 中组件参数*/
attr?: Partial<ItemChildAttr<any, any>>;
/**组件类型 */
type?: ItemChildType;
/** 错误提示 */
tip?: (errs: string) => React.ReactNode;
/** Tooltip 组件属性 */
tipAttr?: TooltipProps;
/** 是否是 List */
isList?: boolean;
/** list 组件参数 */
listAttr?: Omit<ListProps, 'children' | 'name'>;
/** 自定义 渲染(列原始默认的自定义渲染,加了个 other 参数,不是编辑状态下的表格渲染) , other 参数 只有操作列才有 */
render?: (value: any, record: any, index: number, other?: OtherProps) => React.ReactNode | RenderedCell<any>;
}
export interface EditableTableProps extends Omit<TableProps<any>, 'columns' | 'rowKey'> {
/** 列 **/
columns: ColumnsProps[];
/** 保存数据 */
onSave: (data: any[], row: any, record?: any, indx?: number) => void;
/** 保存数据之前校验 */
onBeforeSave?: (item: any, record: any, index: number) => boolean;
/**主键 */
rowKey: string;
/** 操作列是放在首位还是最后 */
optIsFirst?: boolean;
/** 是否需要操作列 */
isOpt?: boolean;
/** 操作配置 */
optConfig?: ColumnsProps;
/** 操作是否需要 删除 按钮 */
isOptDelete?: boolean;
/** 新增初始值 */
initValue?: any;
/** 是否存在新增按钮 */
isAdd?: boolean;
/** 新增之前判断 */
onBeforeAdd?: () => boolean;
/** 行报错信息 */
onErr?: (err: ValidateErrorEntity<any>) => void;
/** 表单值更新事件 */
onValuesChange?: (
/** 更新后的列表值 */
list: any[],
/** 当前更新字段值 */
value: any,
/** 当前行编辑字段值 */
allValue: any,
/** 当前编辑主键值 */
id: string | number,
/** 当前行的 form */
form: FormInstance) => void;
/** 是否可以多行编辑 */
multiple?: boolean;
/** 新增按钮配置 */
addBtnProps?: ButtonProps;
/** form 存储表单 */
store?: Store;
}
export interface RefEditTableProps {
/** 保存 */
save: (key: string, record: any, indx: number) => void;
/** 删除 */
onDelete: (id: string | number, rowItem: any, index: number) => void;
/** 编辑 */
edit: (record: any) => void;
/** 取消编辑 */
cancel: (key: string | number) => void;
/** 新增 */
add: () => void;
/** 是否编辑中 */
isEditing: (record: any) => boolean;
/** 编辑 id */
editingKey: (string | number)[];
/** 是否编辑 新增的数据 */
newAdd: (string | number)[];
/** 收集 所有 表单 */
forms: Store;
}
/** Item 组件 渲染的单个内部FromItem组件 */
export interface EditableCellItemProps extends Omit<FieldProps, 'label' | "children"> {
/** 当前行数据存储父级的name list时不用传 */
preName?: string;
/** 当前行的所有数据 */
itemValue?: any;
/** Tooltip 组件属性 */
tipAttr?: TooltipProps;
/** 错误提示 */
tip?: (errs: string) => React.ReactNode;
/** 进行覆写 方法时 新增一个 行参数 v */
children?: React.ReactNode | ((control: {
[name: string]: any;
}, meta: Meta, form: FormInstance<any>, v?: {
record: any;
}) => React.ReactNode);
}
export interface EditFormsProps {
/** 状态保存 */
formsRef: Store;
onValuesChange: (
/** 主键 */
id: string | number,
/** 当前行的 form */
form: FormInstance,
/** form onValuesChange 中参数 value */
value: any,
/** form onValuesChange 中参数 allValue */
allValue: any) => void;
dataSource: readonly any[];
rowKey: string | number;
}