import { DragEndEvent, DragStartEvent } from '@dnd-kit/core'; import { Dispatch, ReactNode, SetStateAction } from 'react'; import { ColumnInstance, TableInstance, TableOptions } from 'react-table'; import { IBodyTranslations, ITableHeaderTranslations, ITableTranslations, IToolbarTranslations } from '.'; export type AnyRecord = Record; interface ToolbarSharedProps { readonly?: boolean; selectableRows?: "none" | "single" | "multiple"; customActionsNode?: ReactNode; handleCreate?: () => Promise | void; handleDelete?: (selectedRowIds: string[]) => Promise | void; handleEdit?: (selectedRow: T) => Promise | void; handleRefresh?: () => Promise | void; handleSearch?: (search: string, pageSize: number) => void; handleShowColumnsFilter?: () => void; showRowHeightMenu?: boolean; showSearch?: boolean; rowHeight?: RowHeight; } export type TableToolbarProps = { instance: TableInstance; translations: IToolbarTranslations; handleRowHeightChange: (newHeight: RowHeight) => Promise | void; } & ToolbarSharedProps; interface TableHeaderBodySharedProps { handleRowToggled?: (selectedRowIds: string[], row?: T) => void; instance: TableInstance; selectableRows: "none" | "single" | "multiple"; } export type TableHeaderProps = { translations: ITableHeaderTranslations; manualSortBy?: boolean; onManualSortBy?: (columnId: string, sortType: SortType) => void; } & TableHeaderBodySharedProps; export type TableBodyProps = { showRowSelectionHelper?: boolean; translations: IBodyTranslations; } & TableHeaderBodySharedProps; export type FilterCallback = (columnId: string, value: unknown) => void; export type TableColumnFilterProps = { translations: ITableHeaderTranslations; onApplyFilterValue?: FilterCallback; onCancelFilterValue?: FilterCallback; }; export type DataSyncOptionType = "no" | "clear" | "asc" | "desc"; export interface IFilterContext { allowToggleColumnVisibility: boolean; draggableRows: boolean; resizableColumns: boolean; filterSheetVisible: boolean; setFilterSheetVisible: (visible: boolean) => void; toggleFilterSheetVisible: () => void; dataSyncOption: DataSyncOptionType; setDataSyncOption: (dataSyncOption: DataSyncOptionType) => void; clearSortByFuncRef: React.MutableRefObject<(() => void) | null>; hasInsetTable?: boolean; renderInsetTable?: (row: AnyRecord) => ReactNode; filterColumn?: ColumnInstance; setFilterColumn: Dispatch | undefined>>; tableWidth: number; lastColumnWidthRef: React.MutableRefObject; setHiddenColumns: Dispatch>; } export type RowHeight = "compact" | "medium" | "large"; export type SortType = "asc" | "desc" | "unsorted"; export type ColumnFilter = { id: string; value: any; }; export type TableProps = { caption?: string; id?: string; manualPagination?: boolean; manualRowCount?: number; manualColumnFilters?: boolean; manualSortBy?: boolean; onManualSortBy?: (columnId: string, sortType: SortType) => void; showPagination?: boolean; pushPaginationDown?: boolean; draggableRows?: boolean; onDragStart?: (event: DragStartEvent, draggedRow: T) => void; onDragEnd?: (event: DragEndEvent, draggedRow: T, newData: T[]) => void; onDragCancel?: (event: DragStartEvent, draggedRow: T) => void; resizableColumns?: boolean; handlePageChange?: (pageIndex: number, pageSize: number) => void; allFilters?: ColumnFilter[]; itemsPerPageOptions?: number[]; initialStatePageIndex?: number; initialStatePageSize?: number; defaultSelectedRowIds?: string[]; showRowSeparator?: boolean; showRowSelectionHelper?: boolean; summary?: string; containerClassName?: string; translations?: ITableTranslations; } & ToolbarSharedProps & TableOptions & Pick & Pick, "handleRowToggled"> & Partial>; export {};