diff options
Diffstat (limited to 'components/client-table-v3/types.ts')
| -rw-r--r-- | components/client-table-v3/types.ts | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/components/client-table-v3/types.ts b/components/client-table-v3/types.ts new file mode 100644 index 00000000..4f2d8c82 --- /dev/null +++ b/components/client-table-v3/types.ts @@ -0,0 +1,84 @@ +import { + ColumnDef, + RowData, + Table, + PaginationState, + SortingState, + ColumnFiltersState, + VisibilityState, + ColumnPinningState, + ColumnOrderState, + GroupingState, + ExpandedState, + RowSelectionState, + OnChangeFn, + Row, + Column, +} from "@tanstack/react-table"; + +// --- Column Meta --- +export interface ClientTableColumnMeta { + filterType?: "text" | "select" | "boolean" | "date-range"; // Added date-range + filterOptions?: { label: string; value: string }[]; + serverGroupable?: boolean; // For Pattern 2-B +} + +export type ClientTableColumnDef<TData extends RowData, TValue = unknown> = ColumnDef<TData, TValue> & { + meta?: ClientTableColumnMeta; +}; + +// --- Fetcher Types --- +export interface TableState { + pagination: PaginationState; + sorting: SortingState; + columnFilters: ColumnFiltersState; + globalFilter: string; + grouping: GroupingState; + expanded: ExpandedState; +} + +export interface FetcherResult<TData> { + data: TData[]; + totalRows: number; + pageCount?: number; + groups?: any[]; // For grouping response +} + +export type TableFetcher<TData> = ( + state: TableState, + additionalArgs?: any +) => Promise<FetcherResult<TData>>; + +// --- Component Props --- +export interface ClientVirtualTableProps<TData> { + table: Table<TData>; + isLoading?: boolean; + height?: string | number; + estimateRowHeight?: number; + className?: string; + + // UI Features + actions?: React.ReactNode; + customToolbar?: React.ReactNode; + enableExport?: boolean; + onExport?: (data: TData[]) => void; + + // Preset + enableUserPreset?: boolean; + tableKey?: string; + + // Styling + getRowClassName?: (originalRow: TData, index: number) => string; + onRowClick?: (row: Row<TData>, event: React.MouseEvent) => void; + + // Visuals + renderHeaderVisualFeedback?: (props: { + column: Column<TData, unknown>; + isPinned: boolean | string; + isSorted: boolean | string; + isFiltered: boolean; + isGrouped: boolean; + }) => React.ReactNode; +} + + |
