react-open-source-grid 1.5.0 → 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/components/AccessibilityDemo.d.ts +8 -0
- package/dist/assets/components/ApiReferencePage.d.ts +2 -0
- package/dist/assets/components/BenchmarkDemo.d.ts +2 -0
- package/dist/assets/components/CellRenderersDemo.d.ts +16 -0
- package/dist/assets/components/CodeBlock.d.ts +10 -0
- package/dist/assets/components/ColumnFiltersDemo.d.ts +5 -0
- package/dist/assets/components/CompleteApiReferencePage.d.ts +2 -0
- package/dist/assets/components/ContextMenuDemo.d.ts +12 -0
- package/dist/assets/components/DataGrid/ARCHITECTURE.md.d.ts +288 -0
- package/dist/assets/components/DataGrid/AdvancedFilterBuilder.d.ts +12 -0
- package/dist/assets/components/DataGrid/CellRenderers.d.ts +64 -0
- package/dist/assets/components/DataGrid/ColumnChooser.d.ts +12 -0
- package/dist/assets/components/DataGrid/ColumnFilters.d.ts +16 -0
- package/dist/assets/components/DataGrid/ContextMenu.d.ts +10 -0
- package/dist/assets/components/DataGrid/DataGrid.d.ts +22 -0
- package/dist/assets/components/DataGrid/DensityToggle.d.ts +23 -0
- package/dist/assets/components/DataGrid/DragHandle.d.ts +7 -0
- package/dist/assets/components/DataGrid/DraggableRow.d.ts +14 -0
- package/dist/assets/components/DataGrid/ExportMenu.d.ts +12 -0
- package/dist/assets/components/DataGrid/FacetedSearch.d.ts +29 -0
- package/dist/assets/components/DataGrid/FilteredSearchBar.d.ts +36 -0
- package/dist/assets/components/DataGrid/FocusTrap.d.ts +12 -0
- package/dist/assets/components/DataGrid/GridApiDemo.d.ts +6 -0
- package/dist/assets/components/DataGrid/GridBody.d.ts +42 -0
- package/dist/assets/components/DataGrid/GridFooter.d.ts +18 -0
- package/dist/assets/components/DataGrid/GridHeader.d.ts +18 -0
- package/dist/assets/components/DataGrid/GridPagination.d.ts +10 -0
- package/dist/assets/components/DataGrid/GroupByPanel.d.ts +9 -0
- package/dist/assets/components/DataGrid/GroupRow.d.ts +31 -0
- package/dist/assets/components/DataGrid/InfiniteScrollDataGrid.d.ts +39 -0
- package/dist/assets/components/DataGrid/LayoutPresetsManager.d.ts +11 -0
- package/dist/assets/components/DataGrid/MarketDataEngine.d.ts +165 -0
- package/dist/assets/components/DataGrid/MarketDataGrid.d.ts +33 -0
- package/dist/assets/components/DataGrid/MarketDataGridUtils.d.ts +13 -0
- package/dist/assets/components/DataGrid/ScreenReaderAnnouncer.d.ts +8 -0
- package/dist/assets/components/DataGrid/ServerSideDataSource.d.ts +136 -0
- package/dist/assets/components/DataGrid/ThemeSelector.d.ts +12 -0
- package/dist/assets/components/DataGrid/Tooltip.d.ts +15 -0
- package/dist/assets/components/DataGrid/TreeRow.d.ts +31 -0
- package/dist/assets/components/DataGrid/VirtualScroller.d.ts +35 -0
- package/dist/assets/components/DataGrid/WebSocketMockFeed.d.ts +121 -0
- package/dist/assets/components/DataGrid/aggregationUtils.d.ts +25 -0
- package/dist/assets/components/DataGrid/contextMenuUtils.d.ts +36 -0
- package/dist/assets/components/DataGrid/demos/TooltipDemo.d.ts +1 -0
- package/dist/assets/components/DataGrid/densityModes.d.ts +42 -0
- package/dist/assets/components/DataGrid/dragRowUtils.d.ts +98 -0
- package/dist/assets/components/DataGrid/exportUtils.d.ts +30 -0
- package/dist/assets/components/DataGrid/filterUtils.d.ts +17 -0
- package/dist/assets/components/DataGrid/gridApi.d.ts +142 -0
- package/dist/assets/components/DataGrid/gridApi.types.d.ts +348 -0
- package/dist/assets/components/DataGrid/gridReducer.d.ts +4 -0
- package/dist/assets/components/DataGrid/groupingUtils.d.ts +17 -0
- package/dist/assets/components/DataGrid/index.d.ts +41 -0
- package/dist/assets/components/DataGrid/layoutPersistence.d.ts +95 -0
- package/dist/assets/components/DataGrid/themes.d.ts +113 -0
- package/dist/assets/components/DataGrid/treeDataUtils.d.ts +97 -0
- package/dist/assets/components/DataGrid/types.d.ts +536 -0
- package/dist/assets/components/DataGrid/useContextMenu.d.ts +31 -0
- package/dist/assets/components/DataGrid/useDensityMode.d.ts +36 -0
- package/dist/assets/components/DataGrid/useFocusTrap.d.ts +14 -0
- package/dist/assets/components/DataGrid/useMarketData.d.ts +57 -0
- package/dist/assets/components/DataGrid/useScreenReaderAnnouncements.d.ts +23 -0
- package/dist/assets/components/DataGrid/useTooltip.d.ts +21 -0
- package/dist/assets/components/DemoGridPage.d.ts +2 -0
- package/dist/assets/components/DensityModeDemo.d.ts +12 -0
- package/dist/assets/components/FacetedSearchDemo.d.ts +8 -0
- package/dist/assets/components/FeatureGallery.d.ts +2 -0
- package/dist/assets/components/FilteredSearchDemo.d.ts +7 -0
- package/dist/assets/components/GridApiDemoPage.d.ts +2 -0
- package/dist/assets/components/HomePage.d.ts +1 -0
- package/dist/assets/components/InfiniteScrollDemo.d.ts +13 -0
- package/dist/assets/components/LayoutPersistenceDemo.d.ts +2 -0
- package/dist/assets/components/LiveMarketDemo.d.ts +18 -0
- package/dist/assets/components/MarketDataExamples.d.ts +42 -0
- package/dist/assets/components/RowDraggingDemo.d.ts +3 -0
- package/dist/assets/components/RowPinningDemo.d.ts +12 -0
- package/dist/assets/components/ThemesDemo.d.ts +17 -0
- package/dist/assets/components/TooltipDemo.d.ts +1 -0
- package/dist/assets/components/TreeDataDemo.d.ts +3 -0
- package/dist/assets/components/VirtualScrollDemo.d.ts +13 -0
- package/dist/assets/{index-BCK5Ko4P.js → index-bQ7aqGuU.js} +2 -2
- package/dist/assets/index.js +1 -1
- package/dist/assets/{layoutPersistence-BHB0W18y.js → layoutPersistence-B2lMGbE7.js} +1 -1
- package/dist/index.html +1 -1
- package/package.json +14 -4
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WebSocketMockFeed.ts
|
|
3
|
+
*
|
|
4
|
+
* Mock WebSocket server that simulates live market data feed.
|
|
5
|
+
* Generates realistic tick updates for testing market data mode.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Simulates 1000+ ticks/sec
|
|
9
|
+
* - Random price movements
|
|
10
|
+
* - Bid/Ask spreads
|
|
11
|
+
* - Volume tracking
|
|
12
|
+
* - Burst updates
|
|
13
|
+
* - Configurable update frequency
|
|
14
|
+
*/
|
|
15
|
+
export interface MockMarketData {
|
|
16
|
+
symbol: string;
|
|
17
|
+
price: number;
|
|
18
|
+
bid: number;
|
|
19
|
+
ask: number;
|
|
20
|
+
size: number;
|
|
21
|
+
volume: number;
|
|
22
|
+
change: number;
|
|
23
|
+
changePercent: number;
|
|
24
|
+
high: number;
|
|
25
|
+
low: number;
|
|
26
|
+
open: number;
|
|
27
|
+
lastUpdate: number;
|
|
28
|
+
}
|
|
29
|
+
export interface MockFeedConfig {
|
|
30
|
+
symbols?: string[];
|
|
31
|
+
updateFrequency?: number;
|
|
32
|
+
priceVolatility?: number;
|
|
33
|
+
burstProbability?: number;
|
|
34
|
+
burstSize?: number;
|
|
35
|
+
port?: number;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Mock WebSocket Feed
|
|
39
|
+
* Simulates a WebSocket server for market data
|
|
40
|
+
*/
|
|
41
|
+
export declare class WebSocketMockFeed {
|
|
42
|
+
private config;
|
|
43
|
+
private marketData;
|
|
44
|
+
private updateIntervals;
|
|
45
|
+
private clients;
|
|
46
|
+
private isRunning;
|
|
47
|
+
constructor(config?: MockFeedConfig);
|
|
48
|
+
/**
|
|
49
|
+
* Generate default symbol list
|
|
50
|
+
*/
|
|
51
|
+
private generateDefaultSymbols;
|
|
52
|
+
/**
|
|
53
|
+
* Initialize market data with random values
|
|
54
|
+
*/
|
|
55
|
+
private initializeMarketData;
|
|
56
|
+
/**
|
|
57
|
+
* Generate random price
|
|
58
|
+
*/
|
|
59
|
+
private randomPrice;
|
|
60
|
+
/**
|
|
61
|
+
* Update market data for a symbol
|
|
62
|
+
*/
|
|
63
|
+
private updateSymbol;
|
|
64
|
+
/**
|
|
65
|
+
* Trigger burst of rapid updates
|
|
66
|
+
*/
|
|
67
|
+
private triggerBurst;
|
|
68
|
+
/**
|
|
69
|
+
* Broadcast update to all connected clients
|
|
70
|
+
*/
|
|
71
|
+
private broadcastUpdate;
|
|
72
|
+
/**
|
|
73
|
+
* Start generating updates
|
|
74
|
+
*/
|
|
75
|
+
start(): void;
|
|
76
|
+
/**
|
|
77
|
+
* Stop generating updates
|
|
78
|
+
*/
|
|
79
|
+
stop(): void;
|
|
80
|
+
/**
|
|
81
|
+
* Register a mock WebSocket client
|
|
82
|
+
*/
|
|
83
|
+
connect(client: MockWebSocket): void;
|
|
84
|
+
/**
|
|
85
|
+
* Unregister a mock WebSocket client
|
|
86
|
+
*/
|
|
87
|
+
disconnect(client: MockWebSocket): void;
|
|
88
|
+
/**
|
|
89
|
+
* Get current market data snapshot
|
|
90
|
+
*/
|
|
91
|
+
getSnapshot(): MockMarketData[];
|
|
92
|
+
/**
|
|
93
|
+
* Get data for specific symbol
|
|
94
|
+
*/
|
|
95
|
+
getSymbolData(symbol: string): MockMarketData | undefined;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Mock WebSocket client interface
|
|
99
|
+
*/
|
|
100
|
+
export interface MockWebSocket {
|
|
101
|
+
readyState: number;
|
|
102
|
+
send: (data: string) => void;
|
|
103
|
+
onmessage: ((event: {
|
|
104
|
+
data: string;
|
|
105
|
+
}) => void) | null;
|
|
106
|
+
onopen: (() => void) | null;
|
|
107
|
+
onclose: (() => void) | null;
|
|
108
|
+
onerror: ((error: any) => void) | null;
|
|
109
|
+
close: () => void;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Create a mock WebSocket that connects to the feed
|
|
113
|
+
*/
|
|
114
|
+
export declare function createMockWebSocket(feed: WebSocketMockFeed): MockWebSocket;
|
|
115
|
+
/**
|
|
116
|
+
* Create and start a mock market data feed
|
|
117
|
+
*/
|
|
118
|
+
export declare function createMockFeed(config?: MockFeedConfig): {
|
|
119
|
+
feed: WebSocketMockFeed;
|
|
120
|
+
createConnection: () => MockWebSocket;
|
|
121
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Row, AggregateFunction, AggregateConfig, GroupedRow } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Compute a single aggregate value for a set of rows
|
|
4
|
+
*/
|
|
5
|
+
export declare const computeAggregate: (rows: Row[], field: string, func: AggregateFunction) => number | null;
|
|
6
|
+
/**
|
|
7
|
+
* Compute all configured aggregates for a set of rows
|
|
8
|
+
*/
|
|
9
|
+
export declare const computeAggregations: (rows: Row[], aggregateConfigs: AggregateConfig[]) => {
|
|
10
|
+
[key: string]: number | null;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Compute group-level aggregations for each group in grouped rows
|
|
14
|
+
*/
|
|
15
|
+
export declare const computeGroupAggregations: (groupedRows: (Row | GroupedRow)[], aggregateConfigs: AggregateConfig[]) => Map<string, {
|
|
16
|
+
[key: string]: number | null;
|
|
17
|
+
}>;
|
|
18
|
+
/**
|
|
19
|
+
* Format aggregate value for display
|
|
20
|
+
*/
|
|
21
|
+
export declare const formatAggregateValue: (value: number | null, func: AggregateFunction) => string;
|
|
22
|
+
/**
|
|
23
|
+
* Get display label for an aggregate function
|
|
24
|
+
*/
|
|
25
|
+
export declare const getAggregateLabel: (func: AggregateFunction) => string;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { Row, Column, FilterValue } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Context Menu Utility Functions
|
|
4
|
+
*
|
|
5
|
+
* Helper functions for context menu actions like copy, export, etc.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Copy selected cells to clipboard
|
|
9
|
+
*/
|
|
10
|
+
export declare const copyToClipboard: (selectedRows: Set<string | number>, columns: Column[], rows: Row[], includeHeaders?: boolean) => Promise<void>;
|
|
11
|
+
/**
|
|
12
|
+
* Copy a specific cell range to clipboard
|
|
13
|
+
*/
|
|
14
|
+
export declare const copyCellRange: (startRow: number, endRow: number, startCol: number, endCol: number, columns: Column[], rows: Row[], includeHeaders?: boolean) => Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* Export selected rows to CSV
|
|
17
|
+
*/
|
|
18
|
+
export declare const exportSelectedToCSV: (selectedRows: Set<string | number>, columns: Column[], rows: Row[], filename?: string) => void;
|
|
19
|
+
/**
|
|
20
|
+
* Calculate optimal column width based on content
|
|
21
|
+
*/
|
|
22
|
+
export declare const calculateOptimalWidth: (column: Column, rows: Row[], minWidth?: number, maxWidth?: number, padding?: number) => number;
|
|
23
|
+
/**
|
|
24
|
+
* Auto-size all columns
|
|
25
|
+
*/
|
|
26
|
+
export declare const autoSizeAllColumns: (columns: Column[], rows: Row[]) => {
|
|
27
|
+
[field: string]: number;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Create a "filter by value" filter configuration
|
|
31
|
+
*/
|
|
32
|
+
export declare const createFilterByValue: (value: unknown) => FilterValue;
|
|
33
|
+
/**
|
|
34
|
+
* Get unique values for a column (for filter suggestions)
|
|
35
|
+
*/
|
|
36
|
+
export declare const getUniqueColumnValues: (column: Column, rows: Row[], maxValues?: number) => unknown[];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const TooltipDemo: () => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DataGrid Density Mode System
|
|
3
|
+
* Provides Ultra Compact, Compact, Normal, and Comfortable display modes with CSS variables
|
|
4
|
+
*/
|
|
5
|
+
export type DensityMode = 'ultraCompact' | 'compact' | 'normal' | 'comfortable';
|
|
6
|
+
export interface DensityConfig {
|
|
7
|
+
mode: DensityMode;
|
|
8
|
+
rowHeight: string;
|
|
9
|
+
cellPadding: string;
|
|
10
|
+
headerPadding: string;
|
|
11
|
+
fontSize: string;
|
|
12
|
+
fontSizeSmall: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Density mode configurations
|
|
16
|
+
* Defines row height, padding, and font sizes for each density mode
|
|
17
|
+
*/
|
|
18
|
+
export declare const densityConfigs: Record<DensityMode, DensityConfig>;
|
|
19
|
+
/**
|
|
20
|
+
* Get density configuration by mode
|
|
21
|
+
*/
|
|
22
|
+
export declare function getDensityConfig(mode?: DensityMode): DensityConfig;
|
|
23
|
+
/**
|
|
24
|
+
* Generate CSS variables from density configuration
|
|
25
|
+
*/
|
|
26
|
+
export declare function generateDensityCSS(mode: DensityMode): Record<string, string>;
|
|
27
|
+
/**
|
|
28
|
+
* Get all density mode names
|
|
29
|
+
*/
|
|
30
|
+
export declare function getDensityModes(): DensityMode[];
|
|
31
|
+
/**
|
|
32
|
+
* Get display label for density mode
|
|
33
|
+
*/
|
|
34
|
+
export declare function getDensityLabel(mode: DensityMode): string;
|
|
35
|
+
/**
|
|
36
|
+
* Persist density mode to localStorage
|
|
37
|
+
*/
|
|
38
|
+
export declare function saveDensityMode(mode: DensityMode, key?: string): void;
|
|
39
|
+
/**
|
|
40
|
+
* Load density mode from localStorage
|
|
41
|
+
*/
|
|
42
|
+
export declare function loadDensityMode(key?: string): DensityMode | null;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import type { Row, TreeNode, GroupedRow } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Row Dragging / Reorder Utilities
|
|
4
|
+
*
|
|
5
|
+
* Utilities for implementing drag-and-drop row reordering functionality.
|
|
6
|
+
*/
|
|
7
|
+
export interface DragRowConfig {
|
|
8
|
+
enabled: boolean;
|
|
9
|
+
showDragHandle?: boolean;
|
|
10
|
+
allowCrossGroup?: boolean;
|
|
11
|
+
allowExternalDrop?: boolean;
|
|
12
|
+
onRowDrop?: (sourceIndex: number, targetIndex: number, row: Row) => void;
|
|
13
|
+
onRowMove?: (sourceIndex: number, targetIndex: number) => void;
|
|
14
|
+
onExternalDrop?: (data: any, targetIndex: number) => void;
|
|
15
|
+
dragHandlePosition?: 'left' | 'right';
|
|
16
|
+
}
|
|
17
|
+
export interface DragState {
|
|
18
|
+
isDragging: boolean;
|
|
19
|
+
draggedRowId: string | number | null;
|
|
20
|
+
draggedRowIndex: number | null;
|
|
21
|
+
dropTargetIndex: number | null;
|
|
22
|
+
dropPosition: 'before' | 'after' | null;
|
|
23
|
+
}
|
|
24
|
+
export declare const initialDragState: DragState;
|
|
25
|
+
/**
|
|
26
|
+
* Reorder rows array based on drag-and-drop indices
|
|
27
|
+
*/
|
|
28
|
+
export declare const reorderRows: <T extends Row>(rows: T[], sourceIndex: number, targetIndex: number) => T[];
|
|
29
|
+
/**
|
|
30
|
+
* Get the drop position (before/after) based on mouse position within the row
|
|
31
|
+
*/
|
|
32
|
+
export declare const getDropPosition: (event: React.DragEvent, rowElement: HTMLElement) => "before" | "after";
|
|
33
|
+
/**
|
|
34
|
+
* Calculate the target index based on drop position
|
|
35
|
+
*/
|
|
36
|
+
export declare const calculateTargetIndex: (dropTargetIndex: number, dropPosition: "before" | "after" | null, sourceIndex: number) => number;
|
|
37
|
+
/**
|
|
38
|
+
* Check if a row can be dropped at the target location
|
|
39
|
+
*/
|
|
40
|
+
export declare const canDropRow: (sourceIndex: number, targetIndex: number, _sourceRow: Row | TreeNode | GroupedRow, _targetRow: Row | TreeNode | GroupedRow, config: DragRowConfig) => boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Create drag data transfer object
|
|
43
|
+
*/
|
|
44
|
+
export declare const createDragData: (row: Row, rowIndex: number, tableId?: string) => string;
|
|
45
|
+
/**
|
|
46
|
+
* Parse drag data transfer object
|
|
47
|
+
*/
|
|
48
|
+
export declare const parseDragData: (dataTransfer: string) => {
|
|
49
|
+
row: Row;
|
|
50
|
+
rowIndex: number;
|
|
51
|
+
tableId?: string;
|
|
52
|
+
timestamp: number;
|
|
53
|
+
} | null;
|
|
54
|
+
/**
|
|
55
|
+
* Check if drag data is from the same table
|
|
56
|
+
*/
|
|
57
|
+
export declare const isSameTable: (dragData: ReturnType<typeof parseDragData>, currentTableId?: string) => boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Get visual drop indicator styles
|
|
60
|
+
*/
|
|
61
|
+
export declare const getDropIndicatorStyle: (isOver: boolean, position: "before" | "after" | null) => React.CSSProperties;
|
|
62
|
+
/**
|
|
63
|
+
* Handle drag start event
|
|
64
|
+
*/
|
|
65
|
+
export declare const handleDragStart: (event: React.DragEvent, row: Row, rowIndex: number, tableId?: string) => void;
|
|
66
|
+
/**
|
|
67
|
+
* Handle drag end event
|
|
68
|
+
*/
|
|
69
|
+
export declare const handleDragEnd: (event: React.DragEvent) => void;
|
|
70
|
+
/**
|
|
71
|
+
* Handle drag over event (required for drop to work)
|
|
72
|
+
*/
|
|
73
|
+
export declare const handleDragOver: (event: React.DragEvent) => void;
|
|
74
|
+
/**
|
|
75
|
+
* Validate drop operation
|
|
76
|
+
*/
|
|
77
|
+
export declare const validateDrop: (event: React.DragEvent, config: DragRowConfig, tableId?: string) => boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Get draggable row props
|
|
80
|
+
*/
|
|
81
|
+
export declare const getDraggableRowProps: (row: Row, rowIndex: number, isDragging: boolean, config: DragRowConfig, tableId?: string) => {
|
|
82
|
+
draggable: boolean;
|
|
83
|
+
onDragStart: (e: React.DragEvent) => void;
|
|
84
|
+
onDragEnd: (event: React.DragEvent) => void;
|
|
85
|
+
style: {
|
|
86
|
+
cursor: string;
|
|
87
|
+
opacity: number;
|
|
88
|
+
transition: string;
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
/**
|
|
92
|
+
* Get drop target props
|
|
93
|
+
*/
|
|
94
|
+
export declare const getDropTargetProps: (rowIndex: number, onDragOver: (e: React.DragEvent, index: number) => void, onDragLeave: () => void, onDrop: (e: React.DragEvent, index: number) => void) => {
|
|
95
|
+
onDragOver: (e: React.DragEvent) => void;
|
|
96
|
+
onDragLeave: () => void;
|
|
97
|
+
onDrop: (e: React.DragEvent) => void;
|
|
98
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { Column, Row } from './types';
|
|
2
|
+
export type ExportFormat = 'csv' | 'xlsx';
|
|
3
|
+
export type ExportScope = 'all' | 'filtered' | 'selected' | 'page';
|
|
4
|
+
export type ExcelStyling = 'basic' | 'professional';
|
|
5
|
+
export interface ExportOptions {
|
|
6
|
+
format: ExportFormat;
|
|
7
|
+
scope: ExportScope;
|
|
8
|
+
includeHeader?: boolean;
|
|
9
|
+
styling?: ExcelStyling;
|
|
10
|
+
filename?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Converts a dataset to CSV format and triggers download
|
|
14
|
+
*/
|
|
15
|
+
export declare const exportToCSV: (data: Row[], columns: Column[], filename?: string) => void;
|
|
16
|
+
/**
|
|
17
|
+
* Converts a dataset to XLSX format with optional styling and triggers download
|
|
18
|
+
*/
|
|
19
|
+
export declare const exportToXLSX: (data: Row[], columns: Column[], options?: {
|
|
20
|
+
filename?: string;
|
|
21
|
+
styling?: ExcelStyling;
|
|
22
|
+
}) => Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Generates a filename with timestamp
|
|
25
|
+
*/
|
|
26
|
+
export declare const generateFilename: (format: ExportFormat, scope: ExportScope) => string;
|
|
27
|
+
/**
|
|
28
|
+
* Handles the complete export process
|
|
29
|
+
*/
|
|
30
|
+
export declare const handleExport: (data: Row[], columns: Column[], options: ExportOptions) => Promise<void>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Row, FilterConfig } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Apply all filters to rows
|
|
4
|
+
*/
|
|
5
|
+
export declare const applyFilters: (rows: Row[], filterConfig: FilterConfig) => Row[];
|
|
6
|
+
/**
|
|
7
|
+
* Check if any filters are active
|
|
8
|
+
*/
|
|
9
|
+
export declare const hasActiveFilters: (filterConfig: FilterConfig) => boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Get count of active filters
|
|
12
|
+
*/
|
|
13
|
+
export declare const getActiveFilterCount: (filterConfig: FilterConfig) => number;
|
|
14
|
+
/**
|
|
15
|
+
* Clear all filters
|
|
16
|
+
*/
|
|
17
|
+
export declare const clearAllFilters: () => FilterConfig;
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Grid API Implementation
|
|
3
|
+
* Concrete implementation of the GridApi interface
|
|
4
|
+
*/
|
|
5
|
+
import type { Dispatch } from 'react';
|
|
6
|
+
import type { GridApi, RowNode, RowModel, ColumnState, RefreshCellsParams, RedrawRowsParams, CsvExportParams, ExcelExportParams, RowDataTransaction, RowNodeTransaction, StartEditingCellParams, ColKey } from './gridApi.types';
|
|
7
|
+
import type { Column, Row, FilterConfig, SortConfig, LayoutPreset } from './types';
|
|
8
|
+
import type { GridAction, GridState } from './gridReducer';
|
|
9
|
+
import { LayoutPersistenceManager } from './layoutPersistence';
|
|
10
|
+
/**
|
|
11
|
+
* Grid API Implementation
|
|
12
|
+
*/
|
|
13
|
+
export declare class GridApiImpl implements GridApi {
|
|
14
|
+
private state;
|
|
15
|
+
private dispatch;
|
|
16
|
+
private columns;
|
|
17
|
+
private rows;
|
|
18
|
+
private persistenceManager;
|
|
19
|
+
private destroyed;
|
|
20
|
+
private containerRef;
|
|
21
|
+
private eventListeners;
|
|
22
|
+
private setInternalRows?;
|
|
23
|
+
constructor(state: GridState, dispatch: Dispatch<GridAction>, columns: Column[], rows: Row[], containerRef: React.RefObject<HTMLDivElement | null>, persistenceManager?: LayoutPersistenceManager | null, setInternalRows?: (rows: Row[]) => void);
|
|
24
|
+
/**
|
|
25
|
+
* Update internal state reference (called by parent component on state change)
|
|
26
|
+
*/
|
|
27
|
+
updateState(state: GridState): void;
|
|
28
|
+
/**
|
|
29
|
+
* Update internal data references
|
|
30
|
+
*/
|
|
31
|
+
updateData(columns: Column[], rows: Row[]): void;
|
|
32
|
+
/**
|
|
33
|
+
* Update callback references
|
|
34
|
+
*/
|
|
35
|
+
updateCallbacks(setInternalRows?: (rows: Row[]) => void): void;
|
|
36
|
+
setRowData(rows: Row[]): void;
|
|
37
|
+
applyTransaction(transaction: RowDataTransaction): RowNodeTransaction;
|
|
38
|
+
applyTransactionAsync(transaction: RowDataTransaction): Promise<RowNodeTransaction>;
|
|
39
|
+
getModel(): RowModel;
|
|
40
|
+
getDisplayedRowCount(): number;
|
|
41
|
+
getDisplayedRowAtIndex(index: number): RowNode | null;
|
|
42
|
+
forEachNode(callback: (node: RowNode, index: number) => void): void;
|
|
43
|
+
forEachNodeAfterFilter(callback: (node: RowNode, index: number) => void): void;
|
|
44
|
+
forEachNodeAfterFilterAndSort(callback: (node: RowNode, index: number) => void): void;
|
|
45
|
+
getFirstDisplayedRow(): number;
|
|
46
|
+
getLastDisplayedRow(): number;
|
|
47
|
+
getColumnDefs(): Column[];
|
|
48
|
+
setColumnDefs(colDefs: Column[]): void;
|
|
49
|
+
getAllColumns(): Column[];
|
|
50
|
+
getDisplayedCenterColumns(): Column[];
|
|
51
|
+
getDisplayedLeftColumns(): Column[];
|
|
52
|
+
getDisplayedRightColumns(): Column[];
|
|
53
|
+
setColumnVisible(key: ColKey, visible: boolean): void;
|
|
54
|
+
setColumnsVisible(keys: ColKey[], visible: boolean): void;
|
|
55
|
+
setColumnPinned(key: ColKey, pinned: 'left' | 'right' | null): void;
|
|
56
|
+
autoSizeColumns(keys?: ColKey[]): void;
|
|
57
|
+
autoSizeAllColumns(): void;
|
|
58
|
+
moveColumn(key: ColKey, toIndex: number): void;
|
|
59
|
+
moveColumns(keys: ColKey[], toIndex: number): void;
|
|
60
|
+
getColumnState(): ColumnState[];
|
|
61
|
+
applyColumnState(state: ColumnState[]): void;
|
|
62
|
+
resetColumnState(): void;
|
|
63
|
+
getColumn(key: ColKey): Column | null;
|
|
64
|
+
isAnyFilterPresent(): boolean;
|
|
65
|
+
getFilterModel(): FilterConfig;
|
|
66
|
+
setFilterModel(model: FilterConfig): void;
|
|
67
|
+
onFilterChanged(): void;
|
|
68
|
+
destroyFilter(colKey: ColKey): void;
|
|
69
|
+
getFilterInstance(_colKey: ColKey): unknown;
|
|
70
|
+
clearAllFilters(): void;
|
|
71
|
+
getSortModel(): SortConfig[];
|
|
72
|
+
setSortModel(model: SortConfig[]): void;
|
|
73
|
+
onSortChanged(): void;
|
|
74
|
+
clearAllSorting(): void;
|
|
75
|
+
getSelectedNodes(): RowNode[];
|
|
76
|
+
getSelectedRows(): Row[];
|
|
77
|
+
selectAll(): void;
|
|
78
|
+
deselectAll(): void;
|
|
79
|
+
selectAllFiltered(): void;
|
|
80
|
+
deselectAllFiltered(): void;
|
|
81
|
+
getSelectedRowCount(): number;
|
|
82
|
+
ensureIndexVisible(index: number, position?: 'top' | 'middle' | 'bottom'): void;
|
|
83
|
+
ensureNodeVisible(node: RowNode, position?: 'top' | 'middle' | 'bottom'): void;
|
|
84
|
+
setFocusedCell(rowIndex: number, colKey: ColKey): void;
|
|
85
|
+
clearFocusedCell(): void;
|
|
86
|
+
getFocusedCell(): {
|
|
87
|
+
rowIndex: number;
|
|
88
|
+
column: Column;
|
|
89
|
+
} | null;
|
|
90
|
+
startEditingCell(params: StartEditingCellParams): void;
|
|
91
|
+
stopEditing(cancel?: boolean): void;
|
|
92
|
+
getEditingCells(): Array<{
|
|
93
|
+
rowIndex: number;
|
|
94
|
+
column: Column;
|
|
95
|
+
}>;
|
|
96
|
+
refreshCells(params?: RefreshCellsParams): void;
|
|
97
|
+
refreshHeader(): void;
|
|
98
|
+
refreshToolPanel(): void;
|
|
99
|
+
redrawRows(params?: RedrawRowsParams): void;
|
|
100
|
+
sizeColumnsToFit(): void;
|
|
101
|
+
doLayout(): void;
|
|
102
|
+
exportDataAsCsv(params?: CsvExportParams): void;
|
|
103
|
+
getDataAsCsv(params?: CsvExportParams): string;
|
|
104
|
+
exportDataAsExcel(params?: ExcelExportParams): void;
|
|
105
|
+
copySelectedRowsToClipboard(): void;
|
|
106
|
+
copySelectedRangeToClipboard(): void;
|
|
107
|
+
showLoadingOverlay(): void;
|
|
108
|
+
showNoRowsOverlay(): void;
|
|
109
|
+
hideOverlay(): void;
|
|
110
|
+
paginationGetCurrentPage(): number;
|
|
111
|
+
paginationGoToPage(page: number): void;
|
|
112
|
+
paginationGoToNextPage(): void;
|
|
113
|
+
paginationGoToPreviousPage(): void;
|
|
114
|
+
paginationGetTotalPages(): number;
|
|
115
|
+
paginationGetPageSize(): number;
|
|
116
|
+
paginationSetPageSize(size: number): void;
|
|
117
|
+
setRowGroupColumns(colKeys: ColKey[]): void;
|
|
118
|
+
addRowGroupColumn(colKey: ColKey): void;
|
|
119
|
+
removeRowGroupColumn(colKey: ColKey): void;
|
|
120
|
+
getRowGroupColumns(): Column[];
|
|
121
|
+
expandAll(): void;
|
|
122
|
+
collapseAll(): void;
|
|
123
|
+
onGroupExpandedOrCollapsed(node?: RowNode): void;
|
|
124
|
+
saveLayout(name: string): Promise<void>;
|
|
125
|
+
loadLayout(name: string): Promise<void>;
|
|
126
|
+
getLayoutState(): LayoutPreset['layout'];
|
|
127
|
+
applyLayoutState(layout: LayoutPreset['layout']): void;
|
|
128
|
+
destroy(): void;
|
|
129
|
+
isDestroyed(): boolean;
|
|
130
|
+
addEventListener(eventType: string, listener: (event: unknown) => void): void;
|
|
131
|
+
removeEventListener(eventType: string, listener: (event: unknown) => void): void;
|
|
132
|
+
private ensureNotDestroyed;
|
|
133
|
+
private createRowNode;
|
|
134
|
+
private resolveColKey;
|
|
135
|
+
private getDisplayedRows;
|
|
136
|
+
private getFilteredRows;
|
|
137
|
+
private applySorting;
|
|
138
|
+
private calculateColumnWidth;
|
|
139
|
+
private formatCsvValue;
|
|
140
|
+
private copyToClipboard;
|
|
141
|
+
private fireEvent;
|
|
142
|
+
}
|