@ackplus/react-tanstack-data-table
Version:
A powerful React data table component built with MUI and TanStack Table
100 lines (99 loc) • 2.83 kB
TypeScript
import { TableState } from './table.types';
export interface ServerExportColumn<T = any> {
id: string;
header: string;
accessor: keyof T | string;
formatter?: (value: any, row: T) => string;
}
export interface ExportOptions {
filename?: string;
format: 'csv' | 'excel';
includeHeaders?: boolean;
onlyVisibleColumns?: boolean;
onlyFilteredData?: boolean;
chunkSize?: number;
onProgress?: (progress: ExportProgress) => void;
onComplete?: (result: ExportResult) => void;
onError?: (error: ExportError) => void;
signal?: AbortSignal;
}
export interface ExportProgress {
processedRows: number;
totalRows: number;
percentage: number;
currentChunk: number;
totalChunks: number;
estimatedTimeRemaining?: number;
}
export interface ExportResult {
success: boolean;
filename: string;
totalRows: number;
totalColumns: number;
processingTime: number;
fileSize?: number;
}
export interface ExportError {
message: string;
code: 'CANCELLED' | 'MEMORY_ERROR' | 'PROCESSING_ERROR' | 'UNKNOWN';
details?: any;
}
export interface ExportConfig {
enabled: boolean;
formats: ('csv' | 'excel')[];
filename?: string;
includeHeaders?: boolean;
onlyVisibleColumns?: boolean;
onlyFilteredData?: boolean;
chunkSize?: number;
enableProgressTracking?: boolean;
maxMemoryThreshold?: number;
}
export interface ExportState {
isExporting: boolean;
progress?: ExportProgress;
controller?: AbortController;
startTime?: number;
}
export interface ChunkProcessingConfig {
chunkSize: number;
delayBetweenChunks: number;
useWebWorker: boolean;
}
export interface PinnedColumnStyleOptions {
width?: number | string;
isPinned?: 'left' | 'right' | false;
pinnedPosition?: number;
pinnedRightPosition?: number;
zIndex?: number;
disableStickyHeader?: boolean;
isLastLeftPinnedColumn?: boolean;
isFirstRightPinnedColumn?: boolean;
}
export interface SimpleExportOptions {
filename?: string;
format: 'csv' | 'excel';
includeHeaders?: boolean;
onlyVisibleColumns?: boolean;
onlySelectedRows?: boolean;
}
export interface SelectionExportData {
selectAllMatching?: boolean;
excludedIds?: string[];
selectedIds?: string[];
hasSelection?: boolean;
}
export interface ServerExportOptions extends SimpleExportOptions {
fetchData: (filters?: Partial<TableState>, selection?: SelectionExportData) => Promise<{
data: any[];
total: number;
}>;
currentFilters?: any;
pageSize?: number;
selection?: SelectionExportData;
}
export interface ExportCallbacks {
onProgress?: (progress: ExportProgress) => void;
onComplete?: (result: ExportResult) => void;
onError?: (error: ExportError) => void;
}