summaryrefslogtreecommitdiff
path: root/components/client-table-v3/types.ts
diff options
context:
space:
mode:
Diffstat (limited to 'components/client-table-v3/types.ts')
-rw-r--r--components/client-table-v3/types.ts84
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;
+}
+
+