UNPKG

@trail-ui/react

Version:
118 lines (115 loc) 3.84 kB
import { RowData, AccessorKeyColumnDef, ColumnSort, Cell, Table } from '@tanstack/react-table'; import { SortOrder } from './constants.js'; import { StylesConfig } from 'react-select'; import { PaginationProps } from '../pagination/pagination.js'; import 'react/jsx-runtime'; declare module '@tanstack/react-table' { interface TableMeta<TData extends RowData> { updateData: (rowIndex: string, columnId: string, value: unknown) => void; } } type EditableTableColumnDef<TData> = Omit<AccessorKeyColumnDef<TData, any>, 'meta'> & { meta?: ColumnMeta<TData>; accessorKey: keyof TData | ''; }; type EditableTableProps<TData, IdType> = { tableId?: string; tableName: string; data: TData[]; columns: EditableTableColumnDef<TData>[]; isLoading: boolean; handleSaveData: (data: SaveData<TData, IdType>) => void; idSelector: (data: TData) => IdType; tableHeight?: string; checkBoxSelectedName: string; selectAllCheckBoxName?: string; tableInstanceRef?: any; setColumnFilters?: (value: any) => void; hiddenColumnIds?: string[]; isCellDisabled?: (data: TData, column: EditableTableColumnDef<TData>['id']) => boolean; serverPagination?: boolean; totalCount?: number; currentPage?: number; onPageChange?: (page: number) => void; currentPageSize?: number; onPageSizeChange?: (limit: number) => void; defaultSortingHeaders?: ColumnSort[]; handleSort?: (sortData: { columnId: string; order: SortOrder; }) => void; globalFilter?: string; setGlobalFilter?: (value: any) => void; paginationSizeOptions?: PaginationProps['sizeOptions']; }; type EditableTableCellProps<TData, IdType> = { cell: Cell<TData, unknown>; rowHeaderId?: string; checkBoxSelectedName?: string; isCellDisabled?: EditableTableProps<TData, IdType>['isCellDisabled']; }; interface SaveData<TData, IdType> { rowId: IdType; columnId: string; accessorKey: keyof TData | ''; value: string | number | boolean; } type ColumnMeta<TData> = CheckBoxMetaData<TData> | LinkMetaData | MultiSelectMetaData | TextInputMetaData | SelectMetaData | SwitchMetaData<TData>; interface CheckBoxMetaData<TData> { type: 'checkbox'; label?: (data: TData) => string; } interface LinkMetaData { type: 'link'; } interface MultiSelectMetaData { type: 'multiselect'; placeholder: string; label: string; options: { label: string; value: string | number; }[]; customStyles: StylesConfig<MultiSelectMetaData['options'][0], true>; } interface TextInputMetaData { type: 'text' | 'date' | 'number'; placeholder: string; label: string; step?: number; } interface SelectMetaData { type: 'select'; placeholder: string; label: string; options: { label: string; value: string; }[]; } interface SwitchMetaData<TData> { type: 'switch'; label?: (data: TData) => string; activeText?: string; inactiveText?: string; } interface Row<TData> { getValue(columnId: string): unknown; original: TData; } interface FocusData { rowIndex: number; columnIndex: number; isHeader: boolean; } interface FocusHandlerContextType { tableRef: React.RefObject<HTMLTableElement>; focusedCell: FocusData; setFocusedCell: (focusData: FocusData) => void; } interface TableContextType<TData, IdType> { handleSaveData: EditableTableProps<TData, IdType>['handleSaveData']; idSelector: EditableTableProps<TData, IdType>['idSelector']; table: Table<TData>; } export { CheckBoxMetaData, ColumnMeta, EditableTableCellProps, EditableTableColumnDef, EditableTableProps, FocusData, FocusHandlerContextType, LinkMetaData, MultiSelectMetaData, Row, SaveData, SelectMetaData, SwitchMetaData, TableContextType, TextInputMetaData };