/** * TODO: 支持批量上移下移 * TODO: 增强column的功能,支持nowrap,排序等功能 * TODO: 处理Table onChange 事件,完善排序,过滤状态的处理 * TODO: 性能优化 * TODO: 受控模式支持分页等请求 */ import React from 'react'; import { FormComponentProps } from 'antd/es/form'; import { PaginationProps } from 'antd/es/pagination'; import { QueryComponentProps } from '../query'; import { FatTableProps, IFatTable, Setter } from './type'; export interface Props extends FatTableProps, FormComponentProps, QueryComponentProps { } interface State { allReady?: boolean; loading?: boolean; error?: Error; selected: { keys: any[]; rows: T[]; }; pagination: PaginationProps; dataSource: T[]; filteredDataSource?: T[]; expandedKeys?: string[]; /** * 当前编辑id */ editing?: T; /** * snapshot, 用于保存编辑状态 */ snapshot?: T; /** * 保存错误 */ saveError?: Error; } export default class FatTableInner extends React.Component, State> implements IFatTable { static defaultProps: { searchText: string; idKey: string; namespace: string; offsetMode: boolean; fetchOnMount: boolean; enablePagination: boolean; defaultPagination: { current: number; pageSize: number; pageSizeOptions: string[]; showSizeChanger: boolean; showQuickJumper: boolean; total: number; }; enablePersist: boolean; confirmOnRemove: boolean; }; state: State; private defaultExpandedKeys?; private defaultValues; private tableInstance; private lastSearchParams?; static getDerivedStateFromProps(props: Props, state: State): { dataSource: T[]; pagination: { total: number; defaultCurrent?: number | undefined; disabled?: boolean | undefined; current?: number | undefined; defaultPageSize?: number | undefined; pageSize?: number | undefined; onChange?: ((page: number, pageSize?: number | undefined) => void) | undefined; hideOnSinglePage?: boolean | undefined; showSizeChanger?: boolean | undefined; pageSizeOptions?: string[] | undefined; onShowSizeChange?: ((current: number, size: number) => void) | undefined; showQuickJumper?: boolean | { goButton?: React.ReactNode; } | undefined; showTotal?: ((total: number, range: [number, number]) => React.ReactNode) | undefined; size?: string | undefined; simple?: boolean | undefined; style?: React.CSSProperties | undefined; locale?: Object | undefined; className?: string | undefined; prefixCls?: string | undefined; selectPrefixCls?: string | undefined; itemRender?: ((page: number, type: "page" | "prev" | "next" | "jump-prev" | "jump-next", originalElement: React.ReactElement React.ReactElement React.Component)> | null) | (new (props: any) => React.Component)>) => React.ReactNode) | undefined; role?: string | undefined; showLessItems?: boolean | undefined; }; } | null; constructor(props: Props); componentDidMount(): void; componentDidUpdate(prevProps: Props, prevState: State): void; componentWillUnmount(): void; render(): {} | null | undefined; setEditing: (record: T) => void; cancelEdit: () => void; /** * 将编辑数据保存到临时空间 */ setSnapshot: (setter: Setter) => void; save: () => Promise; /** * 获取当前请求参数 */ getParams(): P & { current: number; pageSize: number; }; /** * 处理表单提交 (清空已选) */ submit: (evt: React.FormEvent) => void; /** * 命令式触发请求 */ fetch: (validate?: boolean, resetPage?: boolean, extraParams?: Partial

| undefined) => void; /** * 获取已选中 */ getSelected: () => T[]; /** * 获取已选中的id */ getSelectedIds: () => any[]; /** * 清除已选中 */ clearSelected: () => void; /** * 获取当前dataSource */ getList: () => T[]; /** * 获取数据源长度 */ length: () => number; /** * 设置当前的dataSource */ setList: (list: T[]) => void; getDefaultValues(): Partial

; /** * 重置所有数据并重新获取 */ clearForm: () => void; removeSelected(): void; handleRemoveSelected: () => void; /** * 移除元素 */ remove(ids: any[]): void; /** * 根据id获取字段在全局的索引 * @returns [number, number] 全局索引,当前页面索引 */ getIndexById(id: any): [number, number]; /** * 是否可以上移 */ canShiftUp(id: any): boolean; /** * 是否可以下移 */ canShiftDown(id: any): boolean; shiftUp(id: any): Promise; shiftDown(id: any): Promise; /** * 移动元素 */ shift(id: any, dir?: 'up' | 'down'): Promise; /** * 查看替换 */ findAndReplace(id: string, replacer: (item: T) => T): void; /** * 批量更新 */ updateItems(updator: (list: T[]) => T[]): void; /** * 更新单个元素 */ updateItem: (item: T) => void; /** * 滚动到第一页 */ scrollToFirstPage(): void; /** * 滚动到最后一页 */ scrollToLastPage(): void; triggerAction(action: string, data: any): void; /** * 删除后同步列表状态 */ private syncAfterRemove; private removeSelectedKeys; private defaultRenderer; private renderHeader; /** * 表格渲染 * TODO: 支持传入props */ private renderBody; private renderExpanded; private renderFooter; /** * 扩展column的功能 */ private enhanceColumns; private onRow; /** * 设置dataSource */ private setDataSource; /** * 初始化状态 */ private initialState; private retry; /** * 选择全部 */ private handleSelectAll; /** * 处理树展开和关闭 */ private handleTreeExpand; private loadChildrenIfNeed; /** * 单选 */ private handleSelect; /** * 分页大小变化 */ private handleShowSizeChange; /** * 页面变化 */ private handlePageChange; private handleShift; private handleRemove; private handleResize; /** * 树过滤 */ private updateFilterStatus; private filterAndGetExpandedKeys; /** * 是否支持展开 */ private canExpand; /** * 结构性变动 */ private isStructuralChange; /** * 生成默认展开的keys */ private genDefaultExpandedKeys; /** * 搜索 * @param validate 开启验证 * @param resetPage 是否重置页码 */ private search; private getPagination; private getIds; /** * 远程获取单条数据 */ private fetchItem; /** * 获取列表 * FIXME: 如果后端返回的total有误,可能出现死循环加载的情况 */ private fetchList; } export {};