import * as React from 'react'; import { BaseProps } from '../../wui-core/src/iCore'; import { SpinProps } from '../../wui-spin/src/iSpin'; import { SelectValue, SelectProps } from '../../wui-select/src/iSelect'; import { InputNumberDefaultProps } from '../../wui-input-number/src/iInputNumber'; import { Key, DataIndex, FixedType, FilterTypes, FilterDropdownTypes, FilterDropdownAutoType, FilterDropdownDataType, FieldTypes, AlignTypes, GetRowKey, GetComponentProps, RowClassName, TriggerEventHandler, PanelRender, WrapperRener, DropEventHandler, PositonType, ScrollPositionType, ObjRenderType, EventHandler, DefaultRecordType, DropDataSourceType, FocusHandler, FilterDropdownKeysStrType, FilterDropdownKeysNumType, RenderExpandIcon, DropDataEventHandlers, AfterDragColWidthType, GetSelectedDataFuncType, InputValueType, SingleGetSelectedDataFuncType, SortDirectionsKey, SortColType } from './interface'; export type { Key, DataIndex, FixedType, FilterTypes, FilterDropdownTypes, FilterDropdownAutoType, FilterDropdownDataType, FieldTypes, AlignTypes, GetRowKey, GetComponentProps, RowClassName, TriggerEventHandler, PanelRender, WrapperRener, DropEventHandler, PositonType, ScrollPositionType, ObjRenderType, EventHandler, DefaultRecordType, DropDataSourceType, FocusHandler, FilterDropdownKeysStrType, FilterDropdownKeysNumType, RenderExpandIcon, DropDataEventHandlers, AfterDragColWidthType, GetSelectedDataFuncType, InputValueType, SingleGetSelectedDataFuncType, SortDirectionsKey, SortColType }; export type ShowRowNumType = { key?: string; fixed?: FixedType; width?: number | string; name?: string | React.ReactNode; type?: string; base?: number | string; }; export interface SorterType { compare?: (a: DefaultRecordType, b: DefaultRecordType) => number; multiple?: number; } export interface ColumnSharedType { title?: React.ReactNode | string; key?: Key; className?: string; fixed?: FixedType; } export interface ColumnGroupType extends ColumnSharedType { children: ColumnsType; } export interface ColumnType extends ColumnSharedType { dataIndex?: DataIndex; colSpan?: number; rowSpan?: number; children?: React.ReactNode | ColumnType[]; width?: number | string; columnType?: string; sumCol?: boolean; sumThousandth?: boolean; render?: (text: any, record: T, index: number, renderConfig?: Record) => React.ReactNode | any; notRowDrag?: boolean; onCell?: GetComponentProps; onCellClick?: (record: T, e: React.MouseEvent) => void; onHeadCellClick?: (record: T, e: React.MouseEvent) => void; filterType?: FilterTypes; filterDropdown?: FilterDropdownTypes; format?: string; filterDropdownAuto?: FilterDropdownAutoType; filterDropdownData?: FilterDropdownDataType[]; filterDropdownType?: number | string; filterDropdownIncludeKeys?: FilterDropdownKeysStrType[] | FilterDropdownKeysNumType[]; filterDropdownOptions?: any; filterInputNumberOptions?: InputNumberDefaultProps; mergeEndIndex?: number; sortEnable?: boolean; fieldType?: FieldTypes; fontColor?: string; bgColor?: string; titleAlign?: AlignTypes; contentAlign?: AlignTypes; textAlign?: AlignTypes; required?: boolean; isShow?: boolean; ifshow?: boolean; style?: React.CSSProperties; fieldid?: string; drgHover?: boolean; dragborder?: boolean; onHeaderCell?: GetComponentProps[number]>; filterDropdownFocus?: FocusHandler; draggable?: boolean; sorter?: ((a: DefaultRecordType, b: DefaultRecordType) => number) | SorterType | boolean; align?: AlignTypes; sortOrder?: boolean | string; order?: string | boolean | null; orderNum?: number; ellipsis?: boolean; dragIndex?: number; checked?: boolean; lockIndex?: number; parentIndex?: number; singleFilter?: boolean; onFilter?: (value?: string, record?: DefaultRecordType) => boolean; filterMultiple?: boolean; singleFind?: boolean; field?: DataIndex; sorterClick?: (column: ColumnType, tempType: string) => void; sortDirections?: SortDirectionsKey[]; sumRender?: (value?: number | string) => void; getMultiSorterValue?: (data?: DefaultRecordType, currentCol?: ColumnType) => void; } export interface InnerColumnType extends ColumnType { offsetWidth?: number | string; isLastLeft?: boolean; isFirstRight?: boolean; isAllLeft?: boolean; } export type ColumnsType = (ColumnGroupType | ColumnType)[]; export interface DropType { dragSource?: T; dragTarget?: T; } export type ExpandIconType = (record?: T, index?: number) => boolean; export interface RowSelectionType { type?: 'checkbox' | 'radio'; selectedRowKeys?: Key[]; defaultSelectedRowKeys?: Key[]; getCheckboxProps?: (record?: T, index?: number) => Record; onSelect?: (record?: T, selected?: boolean, selectedRows?: T[], nativeEvent?: React.MouseEvent) => void; onChange?: (selectedRowKeys?: Key[], selectedRows?: T[]) => void; checkStrictly?: boolean; onSelectAll?: (check?: boolean, selectedRows?: T[], changeRows?: T[]) => void; selections?: any[] | true; columnTitle?: React.ReactNode | string; columnWidth?: number | string; fixed?: FixedType; hideSelectAll?: boolean; renderCell?: (text: any, record: T, index: number, renderConfig?: Record) => React.ReactNode | any; } export interface TableProps extends BaseProps { data: T[]; prefixCls: string; expandIconAsCell: boolean; defaultExpandAllRows: boolean; expandedRowKeys: Key[]; columnKey: string; rowKey: string | GetRowKey; bordered: boolean; rowClassName: RowClassName; expandedRowClassName: RowClassName; onExpand: (expanded: boolean, record: T, index?: number) => void; onExpandedRowsChange: (expandedKeys: Key[]) => void; onRowClick: TriggerEventHandler; bodyStyle: React.CSSProperties; style: React.CSSProperties; childrenColumnName: string; indentSize: number; expandIconColumnIndex: number; showHeader: boolean; scroll: { x?: string | number | boolean | undefined; y?: string | number | undefined; }; rowRef: (record?: T, index?: number, indent?: number) => string | null; getBodyWrapper: WrapperRener; columns: ColumnType[]; minColumnWidth: number; syncHover: boolean; tabIndex: number; height: number | null | undefined; heightConsistent: boolean; syncFixedRowHeight: boolean; size: string; rowDraggAble: boolean; hideDragHandle: boolean; onDropRow: DropDataEventHandlers; onDragRowStart: DropEventHandler; onBodyScroll: (scrollTop: number) => void; bodyDisplayInRow: boolean; headerDisplayInRow: boolean; headerHeight: number | null | undefined; showRowNum: boolean | ShowRowNumType; onPaste: (event?: React.ClipboardEvent, positon?: PositonType) => void; originWidth: number | null | undefined; selectedRowKeys: Key[]; stripeLine: boolean; findRowKeys: Key[]; locale: string | Record; fillSpace: boolean; defaultExpandedRowKeys?: Key[]; useFixedHeader?: boolean; clsPrefix?: string; onRowHover?: (index: number, record: T, isHover: boolean) => void; onRowDoubleClick?: TriggerEventHandler; title?: PanelRender; footer?: PanelRender; emptyText?: React.ReactNode | (() => React.ReactNode); children?: JSX.Element[]; draggable?: boolean; filterable?: boolean; filterDelay?: number; onFilterChange?: (field?: DataIndex, value?: string, condition?: string) => void; onFilterClear?: (dataIndex?: DataIndex) => void; hoverContent?: (data?: T | null, index?: number | null) => JSX.Element | null; onBodyMouseLeave?: (event?: React.MouseEvent) => void; scrollTop?: number; lazyLoad?: undefined | ObjRenderType; ignoreScrollYChange?: boolean; onResize?: () => void; onDrop?: (event?: React.MouseEvent, DropType?: DropType) => void; onMouseDown?: (event?: React.MouseEvent) => void; dragborder?: boolean; onDropBorder?: (event?: React.MouseEvent, width?: number, column?: ColumnType, columns?: ColumnsType) => void; onDraggingBorder?: (event?: React.MouseEvent, width?: number, column?: ColumnType, columns?: ColumnsType) => void; afterDragColWidth?: (data: AfterDragColWidthType) => void; headerScroll?: boolean; headerEventNoStop?: boolean; onCopy?: (data?: DefaultRecordType, e?: React.ClipboardEventHandler) => void; resetScroll?: boolean; footerScroll?: boolean; hideHeaderScroll?: boolean; getCellClassName: (record?: T, index?: number, column?: T) => string; useDragHandle?: boolean; expandedRowRender?: (record: T, index?: number, indent?: number) => string | JSX.Element; expandRowByClick?: boolean; haveExpandIcon?: ExpandIconType; showExpandIcon?: boolean | ExpandIconType; expandedIcon?: JSX.Element; collapsedIcon?: React.ReactNode; expandIcon?: RenderExpandIcon; showSum?: boolean; handleScrollY?: (scrollTop?: number, treeType?: boolean, cb?: (scrollTop?: number) => void) => void; handleScrollX?: (scrollTop?: number, treeType?: boolean, cb?: (scrollTop?: number) => void) => void; onKeyTab?: (e?: React.FocusEvent) => void; onKeyUp?: (e?: React.KeyboardEvent) => void; onKeyDown?: (e?: React.KeyboardEvent) => void; onTableKeyDown?: (e?: React.KeyboardEvent) => void; focusable?: boolean; loading?: boolean | SpinProps; expandIconCellWidth?: number; onRow?: (record?: T, index?: number) => void; onHeaderRow?: (record?: T, index?: number) => void; onRowDragStart?: (options: Record) => void; onRowDragDrop?: (options: Record) => void; bodyClassName?: string; footerClassName?: string; emptyClassName?: string; fieldid?: string; onDragStart?: EventHandler; onDragEnter?: EventHandler; onDragOver?: EventHandler; setRowHeight?: (height?: number, index?: number, rowKey?: Key) => void; className?: string; currentIndex?: number; autoSelect?: boolean; tableLayout?: string; dataSource?: T[]; rowSelection?: RowSelectionType; expandable?: DefaultRecordType; pagination?: false | DefaultRecordType; onChange?: any; isBigData?: boolean; loadBuffer: number; isTree?: null | boolean; onDragEnd?: (event?: React.MouseEvent, DropType?: DropType, sortedColumns?: ColumnType[]) => void; filterCheckboxProps?: (column?: ColumnType) => Record; columnFilterAble?: boolean; checkMinSize?: number; lockable?: boolean; afterFilter?: (columns?: ColumnsType, tempColumns?: ColumnsType) => void; showFilterPopover?: boolean; autoCheckedByClickRows?: boolean; getSelectedDataFunc?: GetSelectedDataFuncType; multiSelectConfig?: ObjRenderType; _onDataChange?: (data?: T[]) => void; _checked?: boolean; _disabled?: boolean; selectedRowIndex: number | string | boolean; sort?: { mode?: string; backSource?: boolean; sortFun?: (sortCol?: SortColType[], data?: DefaultRecordType[], oldData?: DefaultRecordType[]) => void; }; sumClassName?: string; sortDirections?: SortDirectionsKey[]; scrollMode?: 'table' | 'sticky'; currentScrollColumn?: string; bigColumns?: boolean; columnsLoadBuffer?: number; filterColumnContent?: JSX.Element; filterColumnShowModal?: boolean; filterColumnOnHide?: () => void; filterColumnOnVisibleChange?: (flag: boolean) => void; filterColumnOpenCloumList?: () => void; antd?: boolean; selectType?: 'checkbox' | 'radio' | false; onExpandAll?: (expand: boolean, expandedRowKeys: any[]) => void; } export interface TableState { data: T[]; expandedRowKeys: Key[]; currentHoverKey?: null | number; scrollPosition?: ScrollPositionType; fixedColumnsHeadRowsHeight?: null | number; fixedColumnsBodyRowsHeight?: number[]; fixedColumnsExpandedRowsHeight: Record; scroll?: { x?: string | number | boolean | undefined; y?: string | number | undefined; } | undefined; cssRowHeight?: number; cssRowHeaderHeight?: number; currentHoverRecord?: T | null; currentHoverIndex?: number; copyCurrentHoverIndex?: number | null; copyCurrentHoverRecord?: T | null; contentWidthDiff?: number; lastShowIndex?: number; resizerVisible?: boolean; resizerLineHeight?: number; resizerLineLeft?: number; resizerDefaultWidth?: number; resizerMinWidth?: number; dataSource?: DropDataSourceType; renderFlag?: boolean; } export interface IAntdTableState extends Partial> { _selectedRowKeys: Key[]; _expandedRowKeys: Key[]; pagination?: boolean | DefaultRecordType; } export interface IBigDataXState extends Partial> { needRender: boolean; scrollTop: number; showCount: number; treeType: boolean; } export interface IBigColumnState extends Partial> { } export interface IDragColumnState extends Partial> { columns: ColumnType[]; } export interface IFilterColumnState extends Partial> { columns: ColumnType[]; tempColumns: ColumnType[]; srcColumns: ColumnType[]; showModal: boolean; searchStr: string; } export interface IMultiSelectXState extends Partial> { isControlled: boolean; selectedRowKeys: Key[]; data: T[]; disableKeys: Key[]; } export interface ISingleFilterState extends Partial> { data: T[]; flatColumns: ColumnType[]; columns: ColumnType[]; showTop: boolean; filterObj: ObjRenderType; } export interface ISingleFindState extends Partial> { data: T[]; flatColumns: ColumnType[]; columns: ColumnType[]; currentIndex: number; showTop: boolean; inputValue: ObjRenderType; } export interface ISingleSelectState extends Partial { data: DefaultRecordType[]; selectedRowKeys: Key[]; isControlled: boolean; } export interface ISortState extends Partial> { data: T[]; columns: ColumnType[]; flatColumns: ColumnType[]; oldData: T[]; } export interface IDragRowLineProps { container: React.ReactInstance; clsPrefix?: string; bigData?: boolean; data?: T[]; onRowDragStart: (option?: { dragStartKey?: Key; dragStartIndex?: number; }) => void; onRowDragDrop: (option?: { dragTargetKey?: Key; dragTargetIndex?: number; dropTargetKey?: Key; dropTargetIndex?: number; }) => void; useDragHandle: boolean; } export interface IDragRowLineState { visible: boolean; top: number; left: number; width: number; } export interface IDragResizerLineProps { container: React.ReactInstance; clsPrefix?: string; dataSource?: DropDataSourceType; onResizeEnd?: (event: React.MouseEvent, moveX: number, info?: DropDataSourceType) => void; onResizeCancel?: () => void; onChange?: (event: React.MouseEvent, moveX: number, info?: DropDataSourceType) => void; visible?: boolean; left?: number; height?: number; defaultWidth?: number; minWidth?: number; } export interface IDragResizerLineState { left: number | null | undefined; x: number; moveX: number; } export interface IFilterTypeProps { options?: SelectProps['data']; notFoundContent?: string; onFocus?: React.FocusEventHandler; rendertype: string; filterDropdown?: FilterDropdownTypes; filterDropdownType?: string; onFilterClear?: (dataIndex: DataIndex) => void; onFilterChange?: (field?: DataIndex, value?: string, condition?: string) => void; onChange?: any; onSelectDropdown?: any; filterdropdownoptions?: any; filterDropdownOptions?: any; filterInputNumberOptions?: InputNumberDefaultProps; filterDropdownIncludeKeys?: FilterDropdownKeysStrType[] | FilterDropdownKeysNumType[]; locale?: string | Record; dataIndex?: DataIndex; format?: any; className?: string; clsPrefix?: string; } export interface IFilterTypeState { value: string; text: string; selectValue: string; dateValue: string; open: boolean; condition: string; number: number; timeOpen: boolean; } export interface IFilterDropDownProps { locale?: string | Record; dataIndex?: DataIndex; dataText?: string; onSelectDropdown?: any; onClickClear?: Function; isShowCondition?: string; isShowClear?: string | boolean; filterDropdownType?: string | number; filterDropdownIncludeKeys?: FilterDropdownKeysStrType[] | FilterDropdownKeysNumType[]; } export interface IFilterDropDownState { selectValue: string[]; selectNumberValue: string[]; } export interface FilterColumnContainerProps { unDragArrLeft: ColumnType[]; dragArr: ColumnType[]; unDragArrRight: ColumnType[]; prefixCls: string; checkedColumItemClick: (da?: ColumnType) => void; lockable: boolean; lockClick: (da?: ColumnType) => void; onDragEnd: (dragIndex: number, hoverIndex: number) => void; filterCheckboxProps?: (_column?: ColumnType) => {}; } export interface FilterColumnCardProps { prefixCls: string; data: ColumnType; index: number; moveCard: (dragIndex: number, hoverIndex: number) => void; checkedColumItemClick: (da?: ColumnType) => void; lockable: boolean; lockClick: (da?: ColumnType) => void; filterCheckboxProps?: (_column?: ColumnType) => {}; }