UNPKG

es-grid-template

Version:

es-grid-template

483 lines (482 loc) 17.2 kB
/// <reference types="date-fns" /> import type { CheckboxProps, TablePaginationConfig } from 'rc-master-ui'; import type { ItemType } from 'rc-master-ui/es/menu/interface'; import type { OnChangeFn } from '@tanstack/react-table'; import type { ReactElement, ReactNode } from 'react'; import type { IOperator } from './hook/constant'; import type { ColorPickerProps } from 'antd'; export type ExtendedColumnFilter = { id: string; value: string; operator?: FilterOperator; }; export type OpetorState = ColumnOperator[]; export interface OpetorTableState { operator: OpetorState; } export interface ColumnOperator { id: string; operator: string; } export interface DensityOptions { enableOperator?: boolean; onOperatorChange?: OnChangeFn<OpetorState>; } export type Key = React.Key; export type PaginationConfig = TablePaginationConfig & { currentPage?: number; }; export type AnyObject = Record<PropertyKey, any>; export type IFormat = { thousandSeparator?: string; decimalSeparator?: string; decimalScale?: number | undefined; allowNegative?: boolean; prefix?: string | undefined; suffix?: string | undefined; fixedDecimalScale?: boolean; dateFormat?: string; datetimeFormat?: string; timeFormat?: string; weekFormat?: string; monthFormat?: string; yearFormat?: string; }; export type RowSelectMethod = 'all' | 'none' | 'invert' | 'single' | 'multiple'; export type EditType = 'text' | 'numeric' | 'asyncSelect' | 'date' | 'datetime' | 'time' | 'week' | 'month' | 'quarter' | 'year' | 'select' | 'checkbox' | 'currency' | 'image' | 'selectTable' | 'customSelect' | 'form' | 'color' | 'treeSelect' | 'file'; export type ITextAlign = 'center' | 'left' | 'right'; export type TypeFilter = 'Text' | 'Date' | 'Time' | 'Datetime' | 'DateRange' | 'Month' | 'Quarter' | 'Year' | 'Week' | 'Number' | 'NumberRange' | 'Dropdown' | 'DropTree' | 'Checkbox' | 'CheckboxTree' | 'CheckboxDropdown'; export type IColumnType = 'number' | 'time' | 'date' | 'week' | 'month' | 'file' | 'quarter' | 'year' | 'datetime' | 'string' | 'boolean' | 'checkbox' | 'color' | null | undefined; export type FilterOperator = 'equal' | 'notEqual' | 'greaterThan' | 'greaterThanOrEqual' | 'lessThan' | 'lessThanOrEqual' | 'startsWith' | 'endsWith' | 'contains'; export type FixedType = 'left' | 'right' | boolean; export type SelectMode = 'checkbox' | 'radio' | undefined; type IGrid = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24; export interface FieldNames { value?: string; label?: string; groupLabel?: string; options?: string; } export interface CommandItem { id: string; type?: string; visible?: boolean | ((record: any) => boolean); title: string; color?: 'blue' | 'purple' | 'cyan' | 'green' | 'magenta' | 'pink' | 'red' | 'orange' | 'yellow' | 'volcano' | 'geekblue' | 'lime' | 'gold'; tooltip?: string; icon?: ReactNode | ReactElement | (() => ReactNode | ReactElement); template?: ReactNode | ReactElement | ((record: any) => ReactNode | ReactElement); client?: boolean; confirmDialog?: boolean; } export type ColumnTemplate<RecordType> = { value: any; rowData: RecordType; index: number; field: string; }; export type ColumnTable<RecordType = AnyObject> = { field?: string; width?: number; maxWidth?: number; minWidth?: number; align?: ITextAlign; type?: IColumnType; haveSum?: boolean; isSummary?: boolean; summaryTemplate?: (data: number, key: string) => ReactElement | ReactNode; format?: IFormat | ((rowData: any) => IFormat); allowFiltering?: boolean; /** * @deprecated Please use `allowSorter` instead. * @since 1.0.0 */ sorter?: boolean; allowSorter?: boolean; operator?: FilterOperator; hideOperator?: boolean; placeholder?: string; showInColumnChoose?: boolean; typeFilter?: TypeFilter; source?: any[]; showFilterSearch?: boolean; headerText?: string; visible?: boolean; headerTooltip?: boolean | string | (() => ReactNode | ReactElement); columnGroupText?: string; textAlign?: ITextAlign; headerTextAlign?: ITextAlign; template?: ReactNode | ReactElement | ((args: ColumnTemplate<RecordType>) => ReactNode | ReactElement); showTooltip?: boolean; tooltipDescription?: ReactNode | ReactElement | ((value: any, record: RecordType, index: number) => ReactNode | ReactElement); headerTemplate?: React.ReactNode | React.ReactElement | ((column: ColumnTable<RecordType>) => React.ReactNode | React.ReactElement); commandItems?: CommandItem[]; children?: ColumnTable<RecordType>[]; editType?: EditType | ((rowData?: RecordType) => EditType); disable?: boolean | ((rowData: any) => boolean); editEnable?: boolean | ((rowData: any) => boolean); isClearable?: boolean; maxDate?: any; minDate?: any; maxTime?: any; minTime?: any; max?: number; min?: number; editSelectSettings?: IEditSelectSettings; editFromSettings?: IEditFromSettings; /** * @deprecated Please use `fixed` instead. * @since 1.6.5 */ fixedType?: FixedType; fixed?: FixedType; headerTextWrap?: boolean; ellipsis?: boolean; allowResizing?: boolean; }; export type ColumnsTable<RecordType = AnyObject> = ColumnTable<RecordType>[]; export type TableProps<RecordType = AnyObject> = { editAble?: boolean; infiniteScroll?: boolean; next?: () => void; locale?: Locale; groupAble?: boolean; groupColumns?: string[]; groupSetting?: IGroupSetting; onChooseColumns?: (props: IOnChooseColumns) => void; pagination?: false | PaginationConfig; showCustomTooltip?: boolean; sortMultiple?: boolean; dataSource: RecordType[]; columns: ColumnsTable<RecordType>; height?: number; format?: IFormat; t?: any; lang?: string; contextMenuItems?: ContextMenuItem[]; showDefaultContext?: boolean; contextMenuHidden?: string[] | ((args?: Omit<ContextInfo<RecordType>, 'item' | 'event'>) => string[]); contextMenuOpen?: (args: Omit<ContextInfo<RecordType>, 'item'>) => void; contextMenuClick?: (args: ContextInfo<RecordType>) => void; recordDoubleClick?: (args: RecordDoubleClickEventArgs<RecordType>) => void; toolbarItems?: ToolbarItem[]; showColumnChoose?: boolean; showAdvanceFilter?: boolean; onFilter?: (query: { field: string; key: string; operator: IOperator; predicate: 'and' | 'or'; value: any; }[]) => void; onSorter?: (args: Sorter[]) => void; selectionSettings?: SelectionSettings; rowSelection?: RowSelection<RecordType>; rowSelected?: (args: { type: string; rowData: RecordType; selected: RecordType | RecordType[]; }) => void; dataSourceFilter?: SourceFilter[]; onFilterClick?: (column: ColumnTable<RecordType>, callback: (key: string, data: any) => void) => void; loading?: boolean; allowResizing?: boolean; showToolbar?: boolean; onDataChange?: (data: RecordType[]) => void; defaultValue?: AnyObject | (() => AnyObject); summary?: boolean | ((data: readonly RecordType[]) => React.ReactNode); showEmptyText?: boolean; commandSettings?: CommandSettings; onCellPaste?: ICellPasteModel<RecordType>; onCellChange?: (args: CellChangeArgs<RecordType>, handleCallback: (rowData: any, index: any, value?: any) => void) => void; onCellClick?: (args: ICellClick, callback?: any) => void; rowEditable?: (rowData: RecordType) => boolean; validate?: any; onBlur?: (data: RecordType[]) => void; onExpandClick?: (args: { expandedKeys: string[]; key: string; rowData: any; }) => void; wrapSettings?: IWrapSettings; actionTemplate?: ReactNode | ReactElement | (() => ReactNode | ReactElement); commandClick?: (args: CommandClick) => void; expandable?: ExpandableConfig<RecordType>; fullScreen?: boolean; }; export type ExpandableConfig<RecordType> = { expandedRowKeys?: readonly Key[]; defaultExpandedRowKeys?: readonly Key[]; expandedRowRender?: ExpandedRowRender<RecordType>; columnTitle?: React.ReactNode; expandRowByClick?: boolean; expandIcon?: RenderExpandIcon<RecordType>; onExpand?: (expanded: boolean, record: RecordType) => void; onExpandedRowsChange?: (expandedKeys: readonly Key[]) => void; defaultExpandAllRows?: boolean; indentSize?: number; expandIconColumnIndex?: number; showExpandColumn?: boolean; expandedRowClassName?: string | RowClassName<RecordType>; childrenColumnName?: string; rowExpandable?: (record: RecordType) => boolean; columnWidth?: number | string; fixed?: FixedType; }; export type RenderExpandIcon<RecordType> = (props: RenderExpandIconProps<RecordType>) => React.ReactNode; export interface RenderExpandIconProps<RecordType> { prefixCls: string; expanded: boolean; record: RecordType; expandable: boolean; onExpand: TriggerEventHandler<RecordType>; } export type TriggerEventHandler<RecordType> = (record: RecordType, event: React.MouseEvent<HTMLElement>) => void; export type RowClassName<RecordType> = (record: RecordType, index: number, indent: number) => string; export type ExpandedRowRender<ValueType> = (record: ValueType, index: number, indent: number, expanded: boolean) => React.ReactNode; export type CommandClick = { id: string; rowId: string; rowData: any; index: number; rows?: any[]; }; export type IEditSelectSettings = { fieldKey?: string; options: any[] | ((rowData: any, field: string) => any[]); /** get value form other field **/ fieldValue?: string; /** get label form other field **/ fieldLabel?: string; /** cho phép nhập giá trị - onBlur: giá trị search được set thành value **/ searchTextAsValue?: boolean; inputKey?: string; filterKey?: string[]; selectMode?: SelectMode; getPasteValue?: (value: any) => Record<string, any> | null; validateOption?: (rowData: any, field: string) => any[]; defaultOptions?: any[]; defaultValue?: (value: any, rowData: any) => { value: any; label: string; [key: string]: string; } | null; formatOptionLabel?: (option: any) => ReactNode | ReactElement; loadOptions?: (search: string, callback: (newOptions: any[]) => void, args?: LoadOptionsArgs) => void; isMulti?: boolean; closeMenuOnSelect?: boolean; menuWidth?: number; menuHeight?: number; columns?: ColumnSelectTable[]; toolbarItems?: ToolbarItem[]; toolbarClick?: (props: ToolbarClick) => void; toolbarHeight?: number; hideSelectedOptions?: boolean; showItems?: number; isLengthSelected?: boolean; fieldNames?: FieldNames; filterOption?: boolean | FilterFunc<any>; }; export type IEditFromSettings = { fieldKey: string; formOpen?: (props: IFormOpen) => void; formClose?: (props: IFormOpen) => void; formatLabel?: (value: any) => string; menuWidth?: number; menuHeight?: number; labelWith?: number; items: any[]; layout?: { xl?: IGrid; lg?: IGrid; md?: IGrid; sm?: IGrid; xs?: IGrid; }; defaultValues?: Record<string, any>; schema?: any; }; export type IFormOpen = { value?: any; setValue?: any; getValues?: any; reset?: any; rowData?: any; }; export type FilterFunc<OptionType> = (inputValue: string, option?: OptionType) => boolean; export type ToolbarClick = { item: any; column: any; }; export type ColumnSelectTable = { field: string; dataIndex?: string; type?: IColumnType; headerText?: string; fixedType?: 'left' | 'right' | undefined; width?: number | undefined; minWidth?: number; maxWidth?: number; visible?: boolean; textAlign?: ITextAlign; headerTextAlign?: ITextAlign; template?: (props: ITemplateColumn) => ReactNode | ReactElement; headerTemplate?: any; ellipsis?: boolean | undefined; format?: IFormat; tooltipDescription?: string | ((rowData: any) => string | ReactNode); showTooltip?: boolean; showTooltipHeader?: boolean; }; export type ITemplateColumn = { value: any; column: any; rowData: any; field: number | string; index: number; }; export type RawValueType = string | number; export type ToolbarItem = { position?: 'Top' | 'Bottom'; align?: ITextAlign; onClick?: (args: any) => void; key?: React.Key; value?: RawValueType; label?: React.ReactNode; template?: React.ReactNode | React.ReactElement | (() => React.ReactNode | React.ReactElement); title?: React.ReactNode; disabled?: boolean; [key: string]: any; }; export type LoadOptionsArgs = { rowData?: any; }; export type IGroupSetting = { client?: boolean; onGroup?: (props: IOnGroup) => void; hiddenColumnGroup?: boolean; showGroupIcon?: boolean; unClearableLevel?: 1 | 2 | 3 | undefined; sumGroup?: boolean; }; type IOnGroup = { columnGrouped: string[]; columns: ColumnsTable; flattenColumns: ColumnsTable; }; export type IOnChooseColumns = { columns: ColumnsTable; showColumns: ColumnsTable; flattenColumns: ColumnsTable; }; export type ContextMenuItem = ItemType; export type CommandSettings = { client?: boolean; confirmDialog?: boolean; }; export interface ICellPasteModel<RecordType = AnyObject> { onPasted?: (args: IOnPastedProps, handleCallback: (callbackData: any[]) => void) => void; dataChange?: (data: RecordType[]) => void; getCallbackData?: (props: any) => void; maxRowsPaste?: number; } export type IOnPastedProps = { data: any[]; copyRows: any[]; pastedColumns: string[]; pasteData: any[]; type: 'onPaste' | 'onChange' | 'onCellPaste'; }; export type ICellClick = { index: number; indexCol?: number; rowId: string | number; type: 'Editing' | 'Default'; field: string; cellValue: any; rowData: any; }; export type CellChangeArgs<T> = { type: 'onPaste' | 'onChange' | 'onCellPaste'; value: any; option: AnyObject; rowData: T; rowsData: T[]; indexRow: number; rowId?: string; field: string | undefined; indexCol: any; sumValue?: any[]; }; export type IWrapMode = 'Header' | 'Both' | 'Content'; export type IWrapSettings = { wrapMode?: IWrapMode; }; export type SelectionSettings<T = AnyObject> = { mode?: 'checkbox' | 'radio'; type?: 'single' | 'multiple'; checkboxOnly?: boolean; columnWidth?: number; hideSelectAll?: boolean; selectedRowKeys?: Key[]; defaultSelectedRowKeys?: Key[]; getCheckboxProps?: (record: T) => Partial<Omit<CheckboxProps, 'checked' | 'defaultChecked'>>; }; export type SelectionSelectFn<T = AnyObject> = (record: T, selected: boolean, selectedRows: T[], nativeEvent: Event) => void; export type RowSelection<T> = { preserveSelectedRowKeys?: boolean; selectedRowKeys?: Key[]; defaultSelectedRowKeys?: Key[]; onChange?: (selectedRowKeys: Key[], selectedRows: T[], info: { type: RowSelectMethod; }, selectedRow: T) => void; getCheckboxProps?: (record: T) => Partial<Omit<CheckboxProps, 'checked' | 'defaultChecked'>>; onSelect?: SelectionSelectFn<T>; /** @deprecated This function is deprecated and should use `onChange` instead */ onSelectMultiple?: (selected: boolean, selectedRows: T[], changeRows: T[]) => void; /** @deprecated This function is deprecated and should use `onChange` instead */ onSelectAll?: (selected: boolean, selectedRows: T[], changeRows: T[]) => void; /** @deprecated This function is deprecated and should use `onChange` instead */ onSelectInvert?: (selectedRowKeys: Key[]) => void; /** @deprecated This function is deprecated and should use `onChange` instead */ onSelectNone?: () => void; fixed?: FixedType; columnTitle?: React.ReactNode | ((checkboxNode: React.ReactNode) => React.ReactNode); checkStrictly?: boolean; checkboxOnly?: boolean; arrowKey?: boolean; }; export type RecordDoubleClickEventArgs<RecordType> = { rowData: RecordType; rowIndex: number | undefined; e: React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>; }; export type SourceFilter = { key: string; data: any[]; loadOptions?: (search: string, callback: (newOptions: any[]) => void) => void; }; export type ContextInfo<RecordType> = { rowInfo: { rowData: RecordType | null; }; event: React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>; item: ItemType; }; export type Presets = Required<ColorPickerProps>['presets'][number]; export type RangeState = { rowRange: string[]; colRange: string[]; startRowIndex: number | undefined; endRowIndex: number | undefined; startColIndex: number | undefined; endColIndex: number | undefined; rowIds: string[]; colIds: string[]; }; export type Sorter = { columnKey: string; field: string; order: 'ascend' | 'descend'; }; export {};