import { ArrayElement } from '../utils/type'; import { BaseCheckboxProps } from '../checkbox/checkboxFoundation'; import BaseFoundation, { DefaultAdapter } from '../base/foundation'; import { strings } from './constants'; export interface BaseColumnProps { align?: BaseAlign; children?: Array>; className?: string; colSpan?: number; dataIndex?: string; defaultFilteredValue?: any[]; defaultSortOrder?: BaseSortOrder; filterChildrenRecord?: boolean; filterDropdown?: any; filterDropdownProps?: Record; filterDropdownVisible?: boolean; filterIcon?: any; filterMultiple?: boolean; filteredValue?: any[]; filters?: BaseFilter[]; fixed?: BaseFixed; key?: string | number; onCell?: BaseOnCell; onFilter?: BaseOnFilter; onFilterDropdownVisibleChange?: BaseOnFilterDropdownVisibleChange; onHeaderCell?: BaseOnHeaderCell; render?: (...args: any[]) => any; renderFilterDropdownItem?: (...args: any[]) => any; sortChildrenRecord?: boolean; sortOrder?: BaseSortOrder; sorter?: BaseSorter; title?: any; useFullRender?: boolean; width?: string | number; ellipsis?: BaseEllipsis; } export interface OnChangeExtra { changeType?: 'sorter' | 'filter' | 'pagination'; } interface MouseDownTarget { targetName: string; className: string; } export interface TableAdapter extends DefaultAdapter { resetScrollY: () => void; setSelectedRowKeys: (selectedRowKeys: BaseRowKeyType[]) => void; setDisabledRowKeys: (disabledRowKeys: BaseRowKeyType[]) => void; setCurrentPage: (currentPage: number) => void; setPagination: (pagination: BasePagination) => void; setGroups: (groups: Map) => void; setDataSource: (dataSource: RecordType[]) => void; setExpandedRowKeys: (expandedRowKeys: BaseRowKeyType[]) => void; setQuery: (query?: BaseColumnProps) => void; setQueries: (queries: BaseColumnProps[]) => void; setFlattenData: (flattenData: RecordType[]) => void; setAllRowKeys: (allRowKeys: BaseRowKeyType[]) => void; setHoveredRowKey: (hoveredRowKey: BaseRowKeyType) => void; setCachedFilteredSortedDataSource: (filteredSortedDataSource: RecordType[]) => void; setCachedFilteredSortedRowKeys: (filteredSortedRowKeys: BaseRowKeyType[]) => void; getCurrentPage: () => number; getCurrentPageSize: () => number; getCachedFilteredSortedDataSource: () => RecordType[]; getCachedFilteredSortedRowKeys: () => BaseRowKeyType[]; getCachedFilteredSortedRowKeysSet: () => Set; setAllDisabledRowKeys: (allDisabledRowKeys: BaseRowKeyType[]) => void; getAllDisabledRowKeys: () => BaseRowKeyType[]; getAllDisabledRowKeysSet: () => Set; notifyFilterDropdownVisibleChange: (visible: boolean, dataIndex: string) => void; notifyChange: (changeInfo: { pagination: BasePagination; filters: BaseChangeInfoFilter[]; sorter: BaseChangeInfoSorter; extra: OnChangeExtra; }) => void; notifyExpand: (expanded?: boolean, record?: BaseIncludeGroupRecord, mouseEvent?: any) => void; notifyExpandedRowsChange: (expandedRows: BaseIncludeGroupRecord[]) => void; notifySelect: (record?: BaseIncludeGroupRecord, selected?: boolean, selectedRows?: BaseIncludeGroupRecord[], nativeEvent?: any) => void; notifySelectAll: (selected?: boolean, selectedRows?: BaseIncludeGroupRecord[], changedRows?: BaseIncludeGroupRecord[], e?: any) => void; notifySelectInvert: (record?: RecordType[], selected?: boolean, selectedRows?: BaseIncludeGroupRecord[], nativeEvent?: any) => void; notifySelectionChange: (selectedRowKeys: BaseRowKeyType[], selectedRows: BaseIncludeGroupRecord[]) => void; isAnyColumnFixed: (columns?: BaseColumnProps[]) => boolean; useFixedHeader: () => boolean; setHeadWidths: (headWidths: Array, index?: number) => void; getHeadWidths: (index?: number) => number[]; getCellWidths: (flattenedColumns: BaseColumnProps[], flattenedWidths?: BaseHeadWidth[], ignoreScrollBarKey?: boolean) => number[]; mergedRowExpandable: (record: RecordType) => boolean; isAnyColumnUseFullRender: (columns: BaseColumnProps[]) => boolean; getNormalizeColumns: () => (columns: BaseColumnProps[], children: any) => BaseColumnProps[]; getHandleColumns: () => (queries: BaseColumnProps[], cachedColumns: BaseColumnProps[]) => BaseColumnProps[]; getMergePagination: () => (pagination: BasePagination) => BasePagination; setBodyHasScrollbar: (bodyHasScrollBar: boolean) => void; getTableLayout: () => 'fixed' | 'auto'; } declare class TableFoundation extends BaseFoundation> { memoizedWithFnsColumns: (queries: BaseColumnProps[], cachedColumns: BaseColumnProps[], rowSelectionUpdate: boolean, hideExpandedColumn: boolean, bodyHasScrollBar: boolean) => BaseColumnProps[]; memoizedFilterColumns: (columns: BaseColumnProps[], ignoreKeys?: string[]) => BaseColumnProps[]; memoizedFlattenFnsColumns: (columns: BaseColumnProps[], childrenColumnName?: string) => BaseColumnProps[]; memoizedPagination: (pagination: BasePagination) => BasePagination; /** * update columns in place, and use default values as initial values if the sorting and filtering columns have no values */ static initColumnsFilteredValueAndSorterOrder(columns: BaseColumnProps[]): BaseColumnProps[]; /** * init filteredValue of filtering column, use defaultFilteredValue or [] when it is undefined */ static initFilteredValue(column: BaseColumnProps): void; /** * init sortOrder of sorting column, use defaultSortOrder or [] when it is undefined */ static initSorterOrder(column: BaseColumnProps): void; mouseDownTarget: MouseDownTarget; constructor(adapter: TableAdapter); init(): void; initExpandedRowKeys({ groups }?: { groups?: Map; }): void; initSelectedRowKeys({ disabledRowKeys }: { disabledRowKeys?: BaseRowKeyType[]; }): void; /** * Get filtered and sorted data * @param {Object[]} dataSource * @param {Object[]} queries * @returns {Object[]} sortedDataSource */ getFilteredSortedDataSource(dataSource: RecordType[], queries: BaseColumnProps[]): RecordType[]; /** * get current page data * * @param {Array} dataSource * @param {object} pagination * @param {object} queries * @returns {{dataSource: RecordType[], groups: Map>, pagination: object, disabledRowKeys: string[], queries: BaseColumnProps[], allRowKeys: string[]}} */ getCurrentPageData(dataSource?: RecordType[], pagination?: BasePagination, queries?: BaseColumnProps[]): BasePageData; /** * group dataSource, return grouped row keys * * @param {*[]} dataSource * @param {Function|string} groupBy */ groupDataSource(dataSource: RecordType[], groupBy?: BaseGroupBy): { groups: Map; dataSource: any[]; }; /** * sort data * * @param {Array} dataSource * @param {Array} sorters * @returns {Array} */ sortDataSource(dataSource: RecordType[], sorters: BaseSorterInfo[]): RecordType[]; /** * set page number */ setPage: (currentPage: number, currentPageSize: number) => void; /** * filter data source * * @param {*[]} dataSource * @param {*[]} filters * @returns {*[]} */ filterDataSource(dataSource: RecordType[], filters: BaseChangeInfoFilter[]): RecordType[]; limitPageDataSource(dataSource: RecordType[], pagination: BasePagination): RecordType[]; normalizePagination(pagination: BasePagination, dataSource: RecordType[]): BasePagination; setAdapterPageData(pageData?: BasePageData): void; /** * Cache related data when initializing or updating the calculated dataSource * @param {*} filteredSortedDataSource */ setCachedFilteredSortedDataSource: (filteredSortedDataSource: RecordType[]) => void; destroy(): void; setAllDisabledRowKeys(disabledRowKeys: any): void; handleClick(e: any): void; handleMouseEnter(e: any): void; handleMouseLeave(e: any): void; stopPropagation(e: any): void; /** * Add non-repeating elements to the array itself */ _addNoDuplicatedItemsToArr(srcArr?: any[], ...objArrs: any[][]): any[]; _notifyChange(pagination: BasePagination, filters?: BaseChangeInfoFilter[], sorter?: BaseChangeInfoSorter, extra?: OnChangeExtra): void; _rowExpansionIsControlled(): boolean; _pagerIsControlled(): boolean; _selectionIsControlled(): boolean; /** * Determine whether the column sorting is controlled * Controlled: the column passed the sortOrder prop * @param {String} dataIndex * @returns {Boolean} */ _sorterIsControlled(dataIndex: string): boolean; /** * Determine whether the column is filtered and controlled * Controlled: the column passed the filteredValue prop * @param {String} dataIndex * @returns {Boolean} */ _filterIsControlled(dataIndex: string): boolean; _filterShowIsControlled(dataIndex?: string): boolean; _getSelectedRowKeys(): any[]; _getSelectedRowKeysSet(): any; _getDataSource(): any; _getRecord(realKey: string | number): any; _getRecordChildren(record: RecordType): any; _getPagination(): any; /** * Filters are considered valid if filteredValue exists */ _getAllFilters(queries?: BaseColumnProps[]): BaseChangeInfoFilter[]; _getAllSorters(queries?: BaseColumnProps[]): BaseColumnProps[]; _filterQueries(targetQuery: BaseColumnProps, queries: BaseColumnProps[], keys?: string[]): { filteredQueries: BaseColumnProps[]; filteredIndexes: number[]; }; _mergeToQueries(query: BaseColumnProps, queries: BaseColumnProps[], keys?: string[]): BaseColumnProps[]; /** * get record real key * @param {RecordType} record * @returns {string} */ getRecordKey(record: RecordType): string; isEmpty(dataSource: RecordType[]): boolean; handleSelectRow(realKey: BaseRowKeyType, selected: boolean, e: any): void; /** * select all rows * @param {*} selected The future state of the select all button * @param {*} e */ handleSelectAllRow(selected: boolean, e: any): void; /** * row keys => rows * @param {*} dataSource * @param {*} selectedRowKeys * @param {*} selectedRowKeysSet Recursive optimization */ getSelectedRows(dataSource: RecordType[], selectedRowKeys: BaseRowKeyType[], selectedRowKeysSet?: Set): BaseIncludeGroupRecord[]; getAllDisabledRowKeys(dataSource?: RecordType[], getCheckboxProps?: GetCheckboxProps): BaseRowKeyType[]; getAllRowKeys(dataSource: RecordType[]): BaseRowKeyType[]; /** * Check if the selected item is in allRowKeysSet * @param {Array} selectedRowKeys * @param {Set} allRowKeysSet */ hasRowSelected(selectedRowKeys: BaseRowKeyType[], allRowKeysSet: Set): boolean; /** * expand processing function * @param {Boolean} expanded * @param {String} realKey * @param {Event} domEvent */ handleRowExpanded(expanded: boolean, realKey: string, domEvent: any): void; /** * get state.groups * @returns {Map|Null} */ _getGroups(): any; /** * Determine whether you have selected all except for disabled * @param {Set} selectedRowKeysSet * @param {Set} disabledRowKeysSet * @param {Array} allKeys keys after sorted and filtered */ allIsSelected(selectedRowKeysSet: Set, disabledRowKeysSet: Set, allKeys: BaseRowKeyType[]): boolean; /** * This function is not used yet * @param {*} selectedRowKeys * @param {*} allKeys */ allIsNotSelected(selectedRowKeys: BaseRowKeyType[], allKeys: BaseRowKeyType[]): boolean; formatPaginationInfo(pagination?: BasePagination, defaultPageText?: string): string; toggleShowFilter(dataIndex: string, visible: boolean): void; /** * Called when the filter changes * @param {*} dataIndex * @param {*} data */ handleFilterSelect(dataIndex: string, data?: { filteredValue?: string[]; }): void; /** * Click the sort button to call * @param {*} column * @param {*} e */ handleSort(column: { dataIndex?: string; sortOrder?: BaseSortOrder; }, e: any, check?: boolean): void; handleMouseDown: (e: any) => void; /** * Recalculate the cached data after clicking filter or sorter * @param {*} queries */ handleClickFilterOrSorter(queries: BaseColumnProps[]): void; getQuery(dataIndex: string, queries?: BaseColumnProps[]): BaseColumnProps; getCellWidths(flattenedColumns: BaseColumnProps[], flattenedWidths?: BaseHeadWidth[], ignoreScrollBarKey?: boolean): number[]; setHeadWidths(headWidths: Array, index?: number): void; getHeadWidths(index: number): number[]; mergedRowExpandable(record: RecordType): boolean; setBodyHasScrollbar(bodyHasScrollbar: boolean): void; isSortOrderValid: (sortOrder: BaseSortOrder) => boolean; } export type BaseRowKeyType = string | number; export interface BasePagination { total?: number; currentPage?: number; pageSize?: number; position?: ArrayElement; defaultCurrentPage?: number; formatPageText?: any; } export interface BaseHeadWidth { width: number; key: string; } export interface BasePageData { dataSource?: RecordType[]; groups?: Map; pagination?: BasePagination; disabledRowKeys?: BaseRowKeyType[]; allRowKeys?: BaseRowKeyType[]; queries?: BaseColumnProps[]; } export type GetCheckboxProps = (record?: RecordType) => BaseCheckboxProps; export type BaseGroupBy = string | number | BaseGroupByFn; export type BaseGroupByFn = (record?: RecordType) => string | number; export interface BaseSorterInfo { [x: string]: any; dataIndex?: string; sortOrder?: BaseSortOrder; sorter?: BaseSorter; } export type BaseSortOrder = boolean | ArrayElement; export type BaseSorter = boolean | ((a?: RecordType, b?: RecordType, sortOrder?: 'ascend' | 'descend') => number); export interface BaseChangeInfoFilter { dataIndex?: string; value?: any; text?: any; filters?: BaseFilter[]; onFilter?: (filteredValue?: any, record?: RecordType) => boolean; filteredValue?: any[]; defaultFilteredValue?: any[]; children?: BaseFilter[]; filterChildrenRecord?: boolean; } export interface BaseFilter { value?: any; text?: any; children?: BaseFilter[]; } export type BaseFixed = ArrayElement; export type BaseAlign = ArrayElement; export type BaseOnCell = (record?: RecordType, rowIndex?: number) => BaseOnCellReturnObject; export interface BaseOnCellReturnObject { [x: string]: any; style?: Record; className?: string; onClick?: (e: any) => void; } export type BaseOnFilter = (filteredValue?: any, record?: RecordType) => boolean; export type BaseOnFilterDropdownVisibleChange = (visible?: boolean) => void; export type BaseOnHeaderCell = (record?: RecordType, columnIndex?: number) => BaseOnHeaderCellReturnObject; export interface BaseOnHeaderCellReturnObject { [x: string]: any; style?: Record; className?: string; onClick?: (e: any) => void; } export interface BaseChangeInfoSorter { [x: string]: any; dataIndex: string; sortOrder: BaseSortOrder; sorter: BaseSorter; } export type BaseIncludeGroupRecord = RecordType | { groupKey: string; }; export type BaseEllipsis = boolean | { showTitle: boolean; }; export default TableFoundation;