@zengrid/core 1.0.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/README.md +55 -0
- package/dist/README.md +55 -0
- package/dist/index.cjs.default.js +1 -0
- package/dist/index.cjs.js +9882 -0
- package/dist/index.cjs.mjs +2 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.esm.js +9847 -0
- package/dist/package.json +49 -0
- package/dist/src/a11y/aria-manager.d.ts +171 -0
- package/dist/src/a11y/aria-manager.d.ts.map +1 -0
- package/dist/src/a11y/focus-manager.d.ts +124 -0
- package/dist/src/a11y/focus-manager.d.ts.map +1 -0
- package/dist/src/a11y/index.d.ts +8 -0
- package/dist/src/a11y/index.d.ts.map +1 -0
- package/dist/src/data/data-accessor/array-accessor.d.ts +38 -0
- package/dist/src/data/data-accessor/array-accessor.d.ts.map +1 -0
- package/dist/src/data/data-accessor/column-store-accessor.d.ts +41 -0
- package/dist/src/data/data-accessor/column-store-accessor.d.ts.map +1 -0
- package/dist/src/data/data-accessor/data-accessor.interface.d.ts +41 -0
- package/dist/src/data/data-accessor/data-accessor.interface.d.ts.map +1 -0
- package/dist/src/data/data-accessor/index.d.ts +9 -0
- package/dist/src/data/data-accessor/index.d.ts.map +1 -0
- package/dist/src/data/data-accessor/sparse-matrix-accessor.d.ts +39 -0
- package/dist/src/data/data-accessor/sparse-matrix-accessor.d.ts.map +1 -0
- package/dist/src/data/data-manager.d.ts +161 -0
- package/dist/src/data/data-manager.d.ts.map +1 -0
- package/dist/src/data/data-source.interface.d.ts +82 -0
- package/dist/src/data/data-source.interface.d.ts.map +1 -0
- package/dist/src/data/grid-data-model.d.ts +102 -0
- package/dist/src/data/grid-data-model.d.ts.map +1 -0
- package/dist/src/data/index-map/index-map.d.ts +30 -0
- package/dist/src/data/index-map/index-map.d.ts.map +1 -0
- package/dist/src/data/index-map/index-map.interface.d.ts +49 -0
- package/dist/src/data/index-map/index-map.interface.d.ts.map +1 -0
- package/dist/src/data/index-map/index.d.ts +7 -0
- package/dist/src/data/index-map/index.d.ts.map +1 -0
- package/dist/src/data/index.d.ts +9 -0
- package/dist/src/data/index.d.ts.map +1 -0
- package/dist/src/editing/cell-editor.interface.d.ts +87 -0
- package/dist/src/editing/cell-editor.interface.d.ts.map +1 -0
- package/dist/src/editing/date-editor.d.ts +67 -0
- package/dist/src/editing/date-editor.d.ts.map +1 -0
- package/dist/src/editing/editor-manager.d.ts +141 -0
- package/dist/src/editing/editor-manager.d.ts.map +1 -0
- package/dist/src/editing/index.d.ts +15 -0
- package/dist/src/editing/index.d.ts.map +1 -0
- package/dist/src/editing/number-editor.d.ts +68 -0
- package/dist/src/editing/number-editor.d.ts.map +1 -0
- package/dist/src/editing/select-editor.d.ts +53 -0
- package/dist/src/editing/select-editor.d.ts.map +1 -0
- package/dist/src/editing/text-editor.d.ts +69 -0
- package/dist/src/editing/text-editor.d.ts.map +1 -0
- package/dist/src/events/event-emitter.d.ts +90 -0
- package/dist/src/events/event-emitter.d.ts.map +1 -0
- package/dist/src/events/grid-events.d.ts +277 -0
- package/dist/src/events/grid-events.d.ts.map +1 -0
- package/dist/src/events/index.d.ts +6 -0
- package/dist/src/events/index.d.ts.map +1 -0
- package/dist/src/features/autofill/autofill-manager.d.ts +103 -0
- package/dist/src/features/autofill/autofill-manager.d.ts.map +1 -0
- package/dist/src/features/autofill/index.d.ts +6 -0
- package/dist/src/features/autofill/index.d.ts.map +1 -0
- package/dist/src/features/column-resize/auto-fit-calculator.d.ts +52 -0
- package/dist/src/features/column-resize/auto-fit-calculator.d.ts.map +1 -0
- package/dist/src/features/column-resize/column-resize-manager.d.ts +114 -0
- package/dist/src/features/column-resize/column-resize-manager.d.ts.map +1 -0
- package/dist/src/features/column-resize/column-resize-manager.interface.d.ts +167 -0
- package/dist/src/features/column-resize/column-resize-manager.interface.d.ts.map +1 -0
- package/dist/src/features/column-resize/column-resize.styles.css +30 -0
- package/dist/src/features/column-resize/index.d.ts +15 -0
- package/dist/src/features/column-resize/index.d.ts.map +1 -0
- package/dist/src/features/column-resize/resize-constraint-manager.d.ts +52 -0
- package/dist/src/features/column-resize/resize-constraint-manager.d.ts.map +1 -0
- package/dist/src/features/column-resize/resize-handle-renderer.d.ts +41 -0
- package/dist/src/features/column-resize/resize-handle-renderer.d.ts.map +1 -0
- package/dist/src/features/column-resize/resize-preview.d.ts +32 -0
- package/dist/src/features/column-resize/resize-preview.d.ts.map +1 -0
- package/dist/src/features/column-resize/resize-state-manager.d.ts +75 -0
- package/dist/src/features/column-resize/resize-state-manager.d.ts.map +1 -0
- package/dist/src/features/column-resize/resize-strategies.d.ts +26 -0
- package/dist/src/features/column-resize/resize-strategies.d.ts.map +1 -0
- package/dist/src/features/column-resize/resize-test-helper.d.ts +71 -0
- package/dist/src/features/column-resize/resize-test-helper.d.ts.map +1 -0
- package/dist/src/features/column-resize/resize-zone-detector.d.ts +32 -0
- package/dist/src/features/column-resize/resize-zone-detector.d.ts.map +1 -0
- package/dist/src/features/copy-paste/clipboard-manager.d.ts +116 -0
- package/dist/src/features/copy-paste/clipboard-manager.d.ts.map +1 -0
- package/dist/src/features/copy-paste/index.d.ts +6 -0
- package/dist/src/features/copy-paste/index.d.ts.map +1 -0
- package/dist/src/features/filtering/adapters/adapter.interface.d.ts +100 -0
- package/dist/src/features/filtering/adapters/adapter.interface.d.ts.map +1 -0
- package/dist/src/features/filtering/adapters/graphql-adapter.d.ts +124 -0
- package/dist/src/features/filtering/adapters/graphql-adapter.d.ts.map +1 -0
- package/dist/src/features/filtering/adapters/index.d.ts +11 -0
- package/dist/src/features/filtering/adapters/index.d.ts.map +1 -0
- package/dist/src/features/filtering/adapters/rest-adapter.d.ts +108 -0
- package/dist/src/features/filtering/adapters/rest-adapter.d.ts.map +1 -0
- package/dist/src/features/filtering/adapters/sql-adapter.d.ts +123 -0
- package/dist/src/features/filtering/adapters/sql-adapter.d.ts.map +1 -0
- package/dist/src/features/filtering/adapters/types.d.ts +201 -0
- package/dist/src/features/filtering/adapters/types.d.ts.map +1 -0
- package/dist/src/features/filtering/column-filter.d.ts +117 -0
- package/dist/src/features/filtering/column-filter.d.ts.map +1 -0
- package/dist/src/features/filtering/filter-autocomplete.d.ts +78 -0
- package/dist/src/features/filtering/filter-autocomplete.d.ts.map +1 -0
- package/dist/src/features/filtering/filter-cache.d.ts +113 -0
- package/dist/src/features/filtering/filter-cache.d.ts.map +1 -0
- package/dist/src/features/filtering/filter-compiler.d.ts +66 -0
- package/dist/src/features/filtering/filter-compiler.d.ts.map +1 -0
- package/dist/src/features/filtering/filter-export-manager.d.ts +131 -0
- package/dist/src/features/filtering/filter-export-manager.d.ts.map +1 -0
- package/dist/src/features/filtering/filter-index-manager.d.ts +126 -0
- package/dist/src/features/filtering/filter-index-manager.d.ts.map +1 -0
- package/dist/src/features/filtering/filter-manager.d.ts +408 -0
- package/dist/src/features/filtering/filter-manager.d.ts.map +1 -0
- package/dist/src/features/filtering/filter-optimizer.d.ts +101 -0
- package/dist/src/features/filtering/filter-optimizer.d.ts.map +1 -0
- package/dist/src/features/filtering/filter-query-parser.d.ts +69 -0
- package/dist/src/features/filtering/filter-query-parser.d.ts.map +1 -0
- package/dist/src/features/filtering/index.d.ts +20 -0
- package/dist/src/features/filtering/index.d.ts.map +1 -0
- package/dist/src/features/filtering/range-filter-optimizer.d.ts +138 -0
- package/dist/src/features/filtering/range-filter-optimizer.d.ts.map +1 -0
- package/dist/src/features/filtering/substring-filter.d.ts +90 -0
- package/dist/src/features/filtering/substring-filter.d.ts.map +1 -0
- package/dist/src/features/filtering/types.d.ts +204 -0
- package/dist/src/features/filtering/types.d.ts.map +1 -0
- package/dist/src/features/formulas/formula-calculator.d.ts +151 -0
- package/dist/src/features/formulas/formula-calculator.d.ts.map +1 -0
- package/dist/src/features/formulas/index.d.ts +6 -0
- package/dist/src/features/formulas/index.d.ts.map +1 -0
- package/dist/src/features/hit-testing/index.d.ts +7 -0
- package/dist/src/features/hit-testing/index.d.ts.map +1 -0
- package/dist/src/features/hit-testing/spatial-hit-tester.d.ts +137 -0
- package/dist/src/features/hit-testing/spatial-hit-tester.d.ts.map +1 -0
- package/dist/src/features/loading/index.d.ts +5 -0
- package/dist/src/features/loading/index.d.ts.map +1 -0
- package/dist/src/features/loading/loading-indicator.d.ts +79 -0
- package/dist/src/features/loading/loading-indicator.d.ts.map +1 -0
- package/dist/src/features/loading/loading.styles.css +413 -0
- package/dist/src/features/pagination/index.d.ts +5 -0
- package/dist/src/features/pagination/index.d.ts.map +1 -0
- package/dist/src/features/pagination/pagination.styles.css +288 -0
- package/dist/src/features/pagination/paginator.d.ts +89 -0
- package/dist/src/features/pagination/paginator.d.ts.map +1 -0
- package/dist/src/features/selection/index.d.ts +7 -0
- package/dist/src/features/selection/index.d.ts.map +1 -0
- package/dist/src/features/selection/selection-manager.d.ts +167 -0
- package/dist/src/features/selection/selection-manager.d.ts.map +1 -0
- package/dist/src/features/sorting/index.d.ts +13 -0
- package/dist/src/features/sorting/index.d.ts.map +1 -0
- package/dist/src/features/sorting/row-sorter.interface.d.ts +63 -0
- package/dist/src/features/sorting/row-sorter.interface.d.ts.map +1 -0
- package/dist/src/features/sorting/single-column-sorter.d.ts +75 -0
- package/dist/src/features/sorting/single-column-sorter.d.ts.map +1 -0
- package/dist/src/features/sorting/sort-manager.d.ts +132 -0
- package/dist/src/features/sorting/sort-manager.d.ts.map +1 -0
- package/dist/src/features/undo-redo/index.d.ts +8 -0
- package/dist/src/features/undo-redo/index.d.ts.map +1 -0
- package/dist/src/features/undo-redo/undo-redo-manager.d.ts +215 -0
- package/dist/src/features/undo-redo/undo-redo-manager.d.ts.map +1 -0
- package/dist/src/grid.d.ts +412 -0
- package/dist/src/grid.d.ts.map +1 -0
- package/dist/src/i18n/index.d.ts +8 -0
- package/dist/src/i18n/index.d.ts.map +1 -0
- package/dist/src/i18n/locale-manager.d.ts +123 -0
- package/dist/src/i18n/locale-manager.d.ts.map +1 -0
- package/dist/src/i18n/rtl-support.d.ts +120 -0
- package/dist/src/i18n/rtl-support.d.ts.map +1 -0
- package/dist/src/index.d.ts +38 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/keyboard/index.d.ts +6 -0
- package/dist/src/keyboard/index.d.ts.map +1 -0
- package/dist/src/keyboard/keyboard-navigator.d.ts +171 -0
- package/dist/src/keyboard/keyboard-navigator.d.ts.map +1 -0
- package/dist/src/rendering/cache/index.d.ts +3 -0
- package/dist/src/rendering/cache/index.d.ts.map +1 -0
- package/dist/src/rendering/cache/renderer-cache.d.ts +100 -0
- package/dist/src/rendering/cache/renderer-cache.d.ts.map +1 -0
- package/dist/src/rendering/cache/renderer-cache.interface.d.ts +89 -0
- package/dist/src/rendering/cache/renderer-cache.interface.d.ts.map +1 -0
- package/dist/src/rendering/cell-pool/cell-pool.d.ts +36 -0
- package/dist/src/rendering/cell-pool/cell-pool.d.ts.map +1 -0
- package/dist/src/rendering/cell-pool/cell-pool.interface.d.ts +76 -0
- package/dist/src/rendering/cell-pool/cell-pool.interface.d.ts.map +1 -0
- package/dist/src/rendering/cell-pool/index.d.ts +6 -0
- package/dist/src/rendering/cell-pool/index.d.ts.map +1 -0
- package/dist/src/rendering/cell-positioner/cell-positioner.d.ts +46 -0
- package/dist/src/rendering/cell-positioner/cell-positioner.d.ts.map +1 -0
- package/dist/src/rendering/cell-positioner/cell-positioner.interface.d.ts +86 -0
- package/dist/src/rendering/cell-positioner/cell-positioner.interface.d.ts.map +1 -0
- package/dist/src/rendering/cell-positioner/index.d.ts +6 -0
- package/dist/src/rendering/cell-positioner/index.d.ts.map +1 -0
- package/dist/src/rendering/height-provider/height-provider.interface.d.ts +62 -0
- package/dist/src/rendering/height-provider/height-provider.interface.d.ts.map +1 -0
- package/dist/src/rendering/height-provider/index.d.ts +7 -0
- package/dist/src/rendering/height-provider/index.d.ts.map +1 -0
- package/dist/src/rendering/height-provider/uniform-height-provider.d.ts +31 -0
- package/dist/src/rendering/height-provider/uniform-height-provider.d.ts.map +1 -0
- package/dist/src/rendering/height-provider/variable-height-provider.d.ts +33 -0
- package/dist/src/rendering/height-provider/variable-height-provider.d.ts.map +1 -0
- package/dist/src/rendering/renderers/advanced-cell-renderer.d.ts +105 -0
- package/dist/src/rendering/renderers/advanced-cell-renderer.d.ts.map +1 -0
- package/dist/src/rendering/renderers/image-renderer.d.ts +60 -0
- package/dist/src/rendering/renderers/image-renderer.d.ts.map +1 -0
- package/dist/src/rendering/renderers/index.d.ts +13 -0
- package/dist/src/rendering/renderers/index.d.ts.map +1 -0
- package/dist/src/rendering/renderers/number-renderer.d.ts +71 -0
- package/dist/src/rendering/renderers/number-renderer.d.ts.map +1 -0
- package/dist/src/rendering/renderers/renderer-registry.d.ts +55 -0
- package/dist/src/rendering/renderers/renderer-registry.d.ts.map +1 -0
- package/dist/src/rendering/renderers/renderer.interface.d.ts +79 -0
- package/dist/src/rendering/renderers/renderer.interface.d.ts.map +1 -0
- package/dist/src/rendering/renderers/text-renderer.d.ts +20 -0
- package/dist/src/rendering/renderers/text-renderer.d.ts.map +1 -0
- package/dist/src/rendering/spatial-hit-tester.d.ts +108 -0
- package/dist/src/rendering/spatial-hit-tester.d.ts.map +1 -0
- package/dist/src/rendering/virtual-scroller/index.d.ts +6 -0
- package/dist/src/rendering/virtual-scroller/index.d.ts.map +1 -0
- package/dist/src/rendering/virtual-scroller/virtual-scroller.d.ts +56 -0
- package/dist/src/rendering/virtual-scroller/virtual-scroller.d.ts.map +1 -0
- package/dist/src/rendering/virtual-scroller/virtual-scroller.interface.d.ts +170 -0
- package/dist/src/rendering/virtual-scroller/virtual-scroller.interface.d.ts.map +1 -0
- package/dist/src/rendering/width-provider/index.d.ts +7 -0
- package/dist/src/rendering/width-provider/index.d.ts.map +1 -0
- package/dist/src/rendering/width-provider/uniform-width-provider.d.ts +31 -0
- package/dist/src/rendering/width-provider/uniform-width-provider.d.ts.map +1 -0
- package/dist/src/rendering/width-provider/variable-width-provider.d.ts +33 -0
- package/dist/src/rendering/width-provider/variable-width-provider.d.ts.map +1 -0
- package/dist/src/rendering/width-provider/width-provider.interface.d.ts +62 -0
- package/dist/src/rendering/width-provider/width-provider.interface.d.ts.map +1 -0
- package/dist/src/selection/hit-tester.d.ts +168 -0
- package/dist/src/selection/hit-tester.d.ts.map +1 -0
- package/dist/src/selection/hit-tester.interface.d.ts +108 -0
- package/dist/src/selection/hit-tester.interface.d.ts.map +1 -0
- package/dist/src/selection/index.d.ts +9 -0
- package/dist/src/selection/index.d.ts.map +1 -0
- package/dist/src/selection/range-utils.d.ts +219 -0
- package/dist/src/selection/range-utils.d.ts.map +1 -0
- package/dist/src/selection/range-utils.interface.d.ts +51 -0
- package/dist/src/selection/range-utils.interface.d.ts.map +1 -0
- package/dist/src/styles/grid.css +356 -0
- package/dist/src/styles.css +273 -0
- package/dist/src/touch/index.d.ts +6 -0
- package/dist/src/touch/index.d.ts.map +1 -0
- package/dist/src/touch/touch-handler.d.ts +167 -0
- package/dist/src/touch/touch-handler.d.ts.map +1 -0
- package/dist/src/types/index.d.ts +133 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types.d.ts +559 -0
- package/dist/src/types.d.ts.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filter Export Manager
|
|
3
|
+
*
|
|
4
|
+
* Manages filter state transformation and export to multiple formats.
|
|
5
|
+
* Orchestrates adapters and handles conversions between column-based and field-based filters.
|
|
6
|
+
*/
|
|
7
|
+
import type { ColumnDef, FilterModel } from '../../types';
|
|
8
|
+
import type { FieldFilterState, CustomOperator } from './types';
|
|
9
|
+
import type { FilterExportResult } from './adapters/types';
|
|
10
|
+
import type { FilterAdapter } from './adapters/adapter.interface';
|
|
11
|
+
import { type RESTAdapterOptions } from './adapters/rest-adapter';
|
|
12
|
+
import { type GraphQLAdapterOptions } from './adapters/graphql-adapter';
|
|
13
|
+
import { type SQLAdapterOptions } from './adapters/sql-adapter';
|
|
14
|
+
/**
|
|
15
|
+
* FilterExportManager configuration
|
|
16
|
+
*/
|
|
17
|
+
export interface FilterExportManagerOptions {
|
|
18
|
+
/**
|
|
19
|
+
* Column definitions (for field mapping)
|
|
20
|
+
*/
|
|
21
|
+
columns: ColumnDef[];
|
|
22
|
+
/**
|
|
23
|
+
* Adapter configurations
|
|
24
|
+
*/
|
|
25
|
+
adapters?: {
|
|
26
|
+
rest?: RESTAdapterOptions;
|
|
27
|
+
graphql?: GraphQLAdapterOptions;
|
|
28
|
+
sql?: SQLAdapterOptions;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Custom operators
|
|
32
|
+
*/
|
|
33
|
+
customOperators?: CustomOperator[];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* FilterExportManager - Manages filter transformation and export
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* const exportManager = new FilterExportManager({
|
|
41
|
+
* columns: [
|
|
42
|
+
* { field: 'id', header: 'ID' },
|
|
43
|
+
* { field: 'name', header: 'Name' },
|
|
44
|
+
* { field: 'age', header: 'Age' }
|
|
45
|
+
* ],
|
|
46
|
+
* adapters: {
|
|
47
|
+
* rest: { style: 'brackets' },
|
|
48
|
+
* graphql: { style: 'prisma' },
|
|
49
|
+
* sql: { paramStyle: 'named' }
|
|
50
|
+
* }
|
|
51
|
+
* });
|
|
52
|
+
*
|
|
53
|
+
* // Convert internal FilterModel[] to field-based format
|
|
54
|
+
* const fieldState = exportManager.convertFromModels(filterModels);
|
|
55
|
+
*
|
|
56
|
+
* // Export to all formats
|
|
57
|
+
* const exports = exportManager.export(fieldState);
|
|
58
|
+
* console.log(exports.rest.queryString); // ?filter[age][gt]=18
|
|
59
|
+
* console.log(exports.graphql.where); // { age: { gt: 18 } }
|
|
60
|
+
* console.log(exports.sql.whereClause); // age > :age
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export declare class FilterExportManager {
|
|
64
|
+
private columns;
|
|
65
|
+
private fieldToIndex;
|
|
66
|
+
private indexToField;
|
|
67
|
+
private adapters;
|
|
68
|
+
private customOperators;
|
|
69
|
+
constructor(options: FilterExportManagerOptions);
|
|
70
|
+
/**
|
|
71
|
+
* Build field name to index mappings
|
|
72
|
+
*/
|
|
73
|
+
private buildFieldMappings;
|
|
74
|
+
/**
|
|
75
|
+
* Initialize default adapters
|
|
76
|
+
*/
|
|
77
|
+
private initializeAdapters;
|
|
78
|
+
/**
|
|
79
|
+
* Register custom operators
|
|
80
|
+
*/
|
|
81
|
+
private registerCustomOperators;
|
|
82
|
+
/**
|
|
83
|
+
* Convert FilterModel[] (column-based) to FieldFilterState (field-based)
|
|
84
|
+
*
|
|
85
|
+
* This enables backend-friendly exports using field names instead of indices
|
|
86
|
+
*/
|
|
87
|
+
convertFromModels(models: FilterModel[]): FieldFilterState;
|
|
88
|
+
/**
|
|
89
|
+
* Convert FieldFilterState (field-based) to FilterModel[] (column-based)
|
|
90
|
+
*
|
|
91
|
+
* Reverse conversion for internal use
|
|
92
|
+
*/
|
|
93
|
+
convertToModels(state: FieldFilterState): FilterModel[];
|
|
94
|
+
/**
|
|
95
|
+
* Export filter state to all registered formats
|
|
96
|
+
*/
|
|
97
|
+
export(state: FieldFilterState): FilterExportResult;
|
|
98
|
+
/**
|
|
99
|
+
* Export to specific format
|
|
100
|
+
*/
|
|
101
|
+
exportAs<T>(state: FieldFilterState, adapterName: string): T;
|
|
102
|
+
/**
|
|
103
|
+
* Register custom adapter
|
|
104
|
+
*/
|
|
105
|
+
registerAdapter(name: string, adapter: FilterAdapter<any>): void;
|
|
106
|
+
/**
|
|
107
|
+
* Register custom operator
|
|
108
|
+
*/
|
|
109
|
+
registerOperator(operator: CustomOperator): void;
|
|
110
|
+
/**
|
|
111
|
+
* Update columns (rebuild mappings)
|
|
112
|
+
*/
|
|
113
|
+
setColumns(columns: ColumnDef[]): void;
|
|
114
|
+
/**
|
|
115
|
+
* Map internal operator to standard operator
|
|
116
|
+
*/
|
|
117
|
+
private mapOperatorToStandard;
|
|
118
|
+
/**
|
|
119
|
+
* Map standard operator to internal operator
|
|
120
|
+
*/
|
|
121
|
+
private mapOperatorToInternal;
|
|
122
|
+
/**
|
|
123
|
+
* Get all registered adapters
|
|
124
|
+
*/
|
|
125
|
+
getAdapters(): string[];
|
|
126
|
+
/**
|
|
127
|
+
* Get all custom operators
|
|
128
|
+
*/
|
|
129
|
+
getCustomOperators(): CustomOperator[];
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=filter-export-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter-export-manager.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/features/filtering/filter-export-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAkB,MAAM,aAAa,CAAC;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAgD,cAAc,EAAE,MAAM,SAAS,CAAC;AAC9G,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAqB,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,EAAwB,KAAK,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAC9F,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAElF;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC;;OAEG;IACH,OAAO,EAAE,SAAS,EAAE,CAAC;IAErB;;OAEG;IACH,QAAQ,CAAC,EAAE;QACT,IAAI,CAAC,EAAE,kBAAkB,CAAC;QAC1B,OAAO,CAAC,EAAE,qBAAqB,CAAC;QAChC,GAAG,CAAC,EAAE,iBAAiB,CAAC;KACzB,CAAC;IAEF;;OAEG;IACH,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;CACpC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,QAAQ,CAA8C;IAC9D,OAAO,CAAC,eAAe,CAA0C;gBAErD,OAAO,EAAE,0BAA0B;IAO/C;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAY1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAe1B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAM/B;;;;OAIG;IACH,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,gBAAgB;IAoC1D;;;;OAIG;IACH,eAAe,CAAC,KAAK,EAAE,gBAAgB,GAAG,WAAW,EAAE;IAsCvD;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG,kBAAkB;IA0BnD;;OAEG;IACH,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,GAAG,CAAC;IAQ5D;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,GAAG,IAAI;IAIhE;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAIhD;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI;IAKtC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAuB7B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAuB7B;;OAEG;IACH,WAAW,IAAI,MAAM,EAAE;IAIvB;;OAEG;IACH,kBAAkB,IAAI,cAAc,EAAE;CAGvC"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filter Index Manager using ColumnStore
|
|
3
|
+
*
|
|
4
|
+
* Provides vectorized filtering operations for high-performance
|
|
5
|
+
* numeric and typed column filtering.
|
|
6
|
+
*/
|
|
7
|
+
import { ColumnType } from '@zengrid/shared/data-structures/column-store';
|
|
8
|
+
/**
|
|
9
|
+
* Filter operation for vectorized filtering
|
|
10
|
+
*/
|
|
11
|
+
interface VectorizedFilterOperation {
|
|
12
|
+
/** Operation type */
|
|
13
|
+
type: 'gt' | 'gte' | 'lt' | 'lte' | 'eq' | 'neq' | 'between';
|
|
14
|
+
/** Filter value(s) */
|
|
15
|
+
value: number;
|
|
16
|
+
/** Secondary value for 'between' */
|
|
17
|
+
valueTo?: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* FilterIndexManager - Vectorized filtering with ColumnStore
|
|
21
|
+
*
|
|
22
|
+
* Uses column-oriented storage for 10-100x faster numeric filtering.
|
|
23
|
+
* Particularly effective for large datasets with numeric columns.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* const indexManager = new FilterIndexManager();
|
|
28
|
+
*
|
|
29
|
+
* // Index numeric column
|
|
30
|
+
* indexManager.indexColumn(0, rowCount, (row) => data[row].price, 'number');
|
|
31
|
+
*
|
|
32
|
+
* // Vectorized filter: price > 100
|
|
33
|
+
* const rows = indexManager.filter(0, { type: 'gt', value: 100 });
|
|
34
|
+
* // 10-100x faster than row-by-row scanning
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export declare class FilterIndexManager {
|
|
38
|
+
private columnIndexes;
|
|
39
|
+
private memoryUsage;
|
|
40
|
+
private maxMemoryMB;
|
|
41
|
+
constructor(options?: {
|
|
42
|
+
maxMemoryMB?: number;
|
|
43
|
+
});
|
|
44
|
+
/**
|
|
45
|
+
* Index a column for vectorized filtering
|
|
46
|
+
*
|
|
47
|
+
* @param col - Column index
|
|
48
|
+
* @param rowCount - Total row count
|
|
49
|
+
* @param getValue - Function to get value for each row
|
|
50
|
+
* @param type - Column data type
|
|
51
|
+
*/
|
|
52
|
+
indexColumn(col: number, rowCount: number, getValue: (row: number) => any, type?: ColumnType): void;
|
|
53
|
+
/**
|
|
54
|
+
* Vectorized filter operation
|
|
55
|
+
*
|
|
56
|
+
* Uses typed arrays for 10-100x faster filtering on numeric columns.
|
|
57
|
+
*
|
|
58
|
+
* @param col - Column index
|
|
59
|
+
* @param operation - Filter operation
|
|
60
|
+
* @returns Array of matching row indices
|
|
61
|
+
*/
|
|
62
|
+
filter(col: number, operation: VectorizedFilterOperation): number[] | null;
|
|
63
|
+
/**
|
|
64
|
+
* Get column aggregation (MIN, MAX, SUM, AVG)
|
|
65
|
+
*
|
|
66
|
+
* @param col - Column index
|
|
67
|
+
* @param operation - Aggregation operation
|
|
68
|
+
* @returns Aggregated value or null
|
|
69
|
+
*/
|
|
70
|
+
aggregate(col: number, operation: 'min' | 'max' | 'sum' | 'avg' | 'count'): number | null;
|
|
71
|
+
/**
|
|
72
|
+
* Update a single row value in the index
|
|
73
|
+
*
|
|
74
|
+
* @param col - Column index
|
|
75
|
+
* @param row - Row index
|
|
76
|
+
* @param value - New value
|
|
77
|
+
*/
|
|
78
|
+
updateRow(col: number, row: number, value: any): void;
|
|
79
|
+
/**
|
|
80
|
+
* Check if column is indexed
|
|
81
|
+
*
|
|
82
|
+
* @param col - Column index
|
|
83
|
+
* @returns true if column has vectorized index
|
|
84
|
+
*/
|
|
85
|
+
isIndexed(col: number): boolean;
|
|
86
|
+
/**
|
|
87
|
+
* Get column type
|
|
88
|
+
*
|
|
89
|
+
* @param col - Column index
|
|
90
|
+
* @returns Column type or null
|
|
91
|
+
*/
|
|
92
|
+
getColumnType(col: number): ColumnType | null;
|
|
93
|
+
/**
|
|
94
|
+
* Clear index for a column
|
|
95
|
+
*
|
|
96
|
+
* @param col - Column index
|
|
97
|
+
*/
|
|
98
|
+
clearColumn(col: number): void;
|
|
99
|
+
/**
|
|
100
|
+
* Clear all indexes
|
|
101
|
+
*/
|
|
102
|
+
clearAll(): void;
|
|
103
|
+
/**
|
|
104
|
+
* Get memory usage statistics
|
|
105
|
+
*/
|
|
106
|
+
getMemoryStats(): {
|
|
107
|
+
usedMB: number;
|
|
108
|
+
limitMB: number;
|
|
109
|
+
utilizationPercent: number;
|
|
110
|
+
indexedColumns: number;
|
|
111
|
+
};
|
|
112
|
+
/**
|
|
113
|
+
* Get all indexed columns
|
|
114
|
+
*/
|
|
115
|
+
getIndexedColumns(): number[];
|
|
116
|
+
/**
|
|
117
|
+
* Estimate memory size for a column
|
|
118
|
+
*
|
|
119
|
+
* @param rowCount - Number of rows
|
|
120
|
+
* @param type - Column type
|
|
121
|
+
* @returns Estimated size in MB
|
|
122
|
+
*/
|
|
123
|
+
private estimateColumnSize;
|
|
124
|
+
}
|
|
125
|
+
export {};
|
|
126
|
+
//# sourceMappingURL=filter-index-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter-index-manager.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/features/filtering/filter-index-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAEL,UAAU,EACX,MAAM,8CAA8C,CAAC;AAmBtD;;GAEG;AACH,UAAU,yBAAyB;IACjC,qBAAqB;IACrB,IAAI,EAAE,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,SAAS,CAAC;IAE7D,sBAAsB;IACtB,KAAK,EAAE,MAAM,CAAC;IAEd,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,aAAa,CAA4C;IACjE,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,WAAW,CAAS;gBAEhB,OAAO,GAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAO;IAIlD;;;;;;;OAOG;IACH,WAAW,CACT,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,GAAG,EAC9B,IAAI,GAAE,UAAsB,GAC3B,IAAI;IAqCP;;;;;;;;OAQG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,yBAAyB,GAAG,MAAM,EAAE,GAAG,IAAI;IA8F1E;;;;;;OAMG;IACH,SAAS,CACP,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GACjD,MAAM,GAAG,IAAI;IAShB;;;;;;OAMG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IASrD;;;;;OAKG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI/B;;;;;OAKG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAI7C;;;;OAIG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAS9B;;OAEG;IACH,QAAQ,IAAI,IAAI;IAKhB;;OAEG;IACH,cAAc,IAAI;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,cAAc,EAAE,MAAM,CAAC;KACxB;IASD;;OAEG;IACH,iBAAiB,IAAI,MAAM,EAAE;IAM7B;;;;;;OAMG;IACH,OAAO,CAAC,kBAAkB;CAyB3B"}
|
|
@@ -0,0 +1,408 @@
|
|
|
1
|
+
import type { FilterModel, FilterQuery, FilterExpression, ColumnDef } from '../../types';
|
|
2
|
+
import type { OperationMode } from '@zengrid/shared';
|
|
3
|
+
import type { EventEmitter } from '../../events/event-emitter';
|
|
4
|
+
import type { GridEvents } from '../../events/grid-events';
|
|
5
|
+
import { ColumnFilter } from './column-filter';
|
|
6
|
+
import { type FilterExportManagerOptions } from './filter-export-manager';
|
|
7
|
+
import type { FieldFilterState } from './types';
|
|
8
|
+
import type { FilterExportResult } from './adapters/types';
|
|
9
|
+
import type { ColumnType } from '@zengrid/shared/data-structures/column-store';
|
|
10
|
+
/**
|
|
11
|
+
* Filter manager options
|
|
12
|
+
*/
|
|
13
|
+
export interface FilterManagerOptions {
|
|
14
|
+
/**
|
|
15
|
+
* Total column count
|
|
16
|
+
*/
|
|
17
|
+
colCount: number;
|
|
18
|
+
/**
|
|
19
|
+
* Event emitter for grid events
|
|
20
|
+
*/
|
|
21
|
+
events?: EventEmitter<GridEvents>;
|
|
22
|
+
/**
|
|
23
|
+
* Callback to get cell value
|
|
24
|
+
*/
|
|
25
|
+
getValue: (row: number, col: number) => any;
|
|
26
|
+
/**
|
|
27
|
+
* Initial filter models
|
|
28
|
+
*/
|
|
29
|
+
initialFilters?: FilterModel[];
|
|
30
|
+
/**
|
|
31
|
+
* Filter mode: frontend, backend, or auto
|
|
32
|
+
* @default 'frontend'
|
|
33
|
+
*/
|
|
34
|
+
mode?: OperationMode;
|
|
35
|
+
/**
|
|
36
|
+
* Column names for SQL query field mapping
|
|
37
|
+
*/
|
|
38
|
+
columnNames?: string[];
|
|
39
|
+
/**
|
|
40
|
+
* Backend filtering callback
|
|
41
|
+
* Called when mode is 'backend' or 'auto' (with callback present)
|
|
42
|
+
*/
|
|
43
|
+
onFilterRequest?: (filter: FilterExpression) => Promise<void> | void;
|
|
44
|
+
/**
|
|
45
|
+
* Column definitions (for field-based filtering)
|
|
46
|
+
* Required for FilterExportManager
|
|
47
|
+
*/
|
|
48
|
+
columns?: ColumnDef[];
|
|
49
|
+
/**
|
|
50
|
+
* Enable automatic export transformation
|
|
51
|
+
* @default true
|
|
52
|
+
*/
|
|
53
|
+
enableExport?: boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Export manager configuration
|
|
56
|
+
*/
|
|
57
|
+
exportConfig?: Partial<FilterExportManagerOptions>;
|
|
58
|
+
/**
|
|
59
|
+
* Enable performance optimizations
|
|
60
|
+
* @default true
|
|
61
|
+
*/
|
|
62
|
+
enableOptimizations?: boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Enable result caching with LRU cache
|
|
65
|
+
* @default true
|
|
66
|
+
*/
|
|
67
|
+
enableCache?: boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Cache capacity (number of cached filter results)
|
|
70
|
+
* @default 100
|
|
71
|
+
*/
|
|
72
|
+
cacheCapacity?: number;
|
|
73
|
+
/**
|
|
74
|
+
* Enable vectorized filtering with ColumnStore
|
|
75
|
+
* @default true
|
|
76
|
+
*/
|
|
77
|
+
enableVectorization?: boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Enable range query optimization with SegmentTree
|
|
80
|
+
* @default true
|
|
81
|
+
*/
|
|
82
|
+
enableRangeOptimization?: boolean;
|
|
83
|
+
/**
|
|
84
|
+
* Maximum memory for indexes (in MB)
|
|
85
|
+
* @default 100
|
|
86
|
+
*/
|
|
87
|
+
maxIndexMemoryMB?: number;
|
|
88
|
+
/**
|
|
89
|
+
* Data version for cache invalidation
|
|
90
|
+
* Increment this when data changes
|
|
91
|
+
* @default 0
|
|
92
|
+
*/
|
|
93
|
+
dataVersion?: number;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* FilterManager - Manages filtering across all columns
|
|
97
|
+
*
|
|
98
|
+
* Supports both frontend and backend filtering with two input formats:
|
|
99
|
+
* 1. FilterModel[] - Traditional structured filters
|
|
100
|
+
* 2. FilterQuery - SQL-like queries with parameterization
|
|
101
|
+
*
|
|
102
|
+
* @example Traditional Filtering
|
|
103
|
+
* ```typescript
|
|
104
|
+
* const filterManager = new FilterManager({
|
|
105
|
+
* colCount: 10,
|
|
106
|
+
* getValue: (row, col) => data[row][col],
|
|
107
|
+
* mode: 'frontend'
|
|
108
|
+
* });
|
|
109
|
+
*
|
|
110
|
+
* // Add filter for column 0
|
|
111
|
+
* filterManager.setColumnFilter(0, [
|
|
112
|
+
* { operator: 'greaterThan', value: 100 },
|
|
113
|
+
* ]);
|
|
114
|
+
*
|
|
115
|
+
* // Test if row passes all filters
|
|
116
|
+
* const passes = filterManager.testRow(5);
|
|
117
|
+
*
|
|
118
|
+
* // Get visible row indices
|
|
119
|
+
* const visible = filterManager.getVisibleRows(1000);
|
|
120
|
+
* ```
|
|
121
|
+
*
|
|
122
|
+
* @example SQL-like Filtering
|
|
123
|
+
* ```typescript
|
|
124
|
+
* const filterManager = new FilterManager({
|
|
125
|
+
* colCount: 10,
|
|
126
|
+
* getValue: (row, col) => data[row][col],
|
|
127
|
+
* mode: 'frontend',
|
|
128
|
+
* columnNames: ['id', 'name', 'age', 'status']
|
|
129
|
+
* });
|
|
130
|
+
*
|
|
131
|
+
* // Apply SQL-like filter
|
|
132
|
+
* await filterManager.applyFilter({
|
|
133
|
+
* sql: "age > :minAge AND status = :status",
|
|
134
|
+
* params: { minAge: 18, status: 'active' }
|
|
135
|
+
* });
|
|
136
|
+
* ```
|
|
137
|
+
*
|
|
138
|
+
* @example Backend Filtering
|
|
139
|
+
* ```typescript
|
|
140
|
+
* const filterManager = new FilterManager({
|
|
141
|
+
* colCount: 10,
|
|
142
|
+
* getValue: (row, col) => data[row][col],
|
|
143
|
+
* mode: 'backend',
|
|
144
|
+
* onFilterRequest: async (filter) => {
|
|
145
|
+
* const data = await api.get('/data', {
|
|
146
|
+
* filter: filter.sql,
|
|
147
|
+
* params: filter.params
|
|
148
|
+
* });
|
|
149
|
+
* grid.setData(data);
|
|
150
|
+
* }
|
|
151
|
+
* });
|
|
152
|
+
* ```
|
|
153
|
+
*/
|
|
154
|
+
export declare class FilterManager {
|
|
155
|
+
private colCount;
|
|
156
|
+
private events?;
|
|
157
|
+
private getValue;
|
|
158
|
+
private columnFilters;
|
|
159
|
+
private filterState;
|
|
160
|
+
private mode;
|
|
161
|
+
private columnNames;
|
|
162
|
+
private parser;
|
|
163
|
+
private onFilterRequest?;
|
|
164
|
+
private currentExpression;
|
|
165
|
+
private exportManager;
|
|
166
|
+
private enableExport;
|
|
167
|
+
private filterCache;
|
|
168
|
+
private indexManager;
|
|
169
|
+
private rangeOptimizer;
|
|
170
|
+
private enableOptimizations;
|
|
171
|
+
private dataVersion;
|
|
172
|
+
private filterStateHash;
|
|
173
|
+
constructor(options: FilterManagerOptions);
|
|
174
|
+
/**
|
|
175
|
+
* Set filter for a column
|
|
176
|
+
* @param column - Column index
|
|
177
|
+
* @param conditions - Filter conditions
|
|
178
|
+
* @param logic - Logic operator ('AND' or 'OR')
|
|
179
|
+
*/
|
|
180
|
+
setColumnFilter(column: number, conditions: any[], logic?: 'AND' | 'OR'): void;
|
|
181
|
+
/**
|
|
182
|
+
* Set column filter from model
|
|
183
|
+
*/
|
|
184
|
+
private setColumnFilterFromModel;
|
|
185
|
+
/**
|
|
186
|
+
* Clear filter for a column
|
|
187
|
+
* @param column - Column index
|
|
188
|
+
*/
|
|
189
|
+
clearColumnFilter(column: number): void;
|
|
190
|
+
/**
|
|
191
|
+
* Clear all filters
|
|
192
|
+
*/
|
|
193
|
+
clearAll(): void;
|
|
194
|
+
/**
|
|
195
|
+
* Test if a row passes all filters
|
|
196
|
+
* @param row - Row index
|
|
197
|
+
* @returns True if row passes all filters
|
|
198
|
+
*/
|
|
199
|
+
testRow(row: number): boolean;
|
|
200
|
+
/**
|
|
201
|
+
* Get all visible row indices
|
|
202
|
+
* @param rowCount - Total row count
|
|
203
|
+
* @returns Array of visible row indices
|
|
204
|
+
*/
|
|
205
|
+
getVisibleRows(rowCount: number): number[];
|
|
206
|
+
/**
|
|
207
|
+
* Get filter statistics
|
|
208
|
+
* @param rowCount - Total row count
|
|
209
|
+
*/
|
|
210
|
+
getStats(rowCount: number): {
|
|
211
|
+
totalRows: number;
|
|
212
|
+
visibleRows: number;
|
|
213
|
+
hiddenRows: number;
|
|
214
|
+
activeFilters: number;
|
|
215
|
+
};
|
|
216
|
+
/**
|
|
217
|
+
* Get current filter state
|
|
218
|
+
*/
|
|
219
|
+
getFilterState(): FilterModel[];
|
|
220
|
+
/**
|
|
221
|
+
* Check if any filters are active
|
|
222
|
+
*/
|
|
223
|
+
hasActiveFilters(): boolean;
|
|
224
|
+
/**
|
|
225
|
+
* Get filter for specific column
|
|
226
|
+
* @param column - Column index
|
|
227
|
+
*/
|
|
228
|
+
getColumnFilter(column: number): ColumnFilter | undefined;
|
|
229
|
+
/**
|
|
230
|
+
* Emit filter change event
|
|
231
|
+
*/
|
|
232
|
+
private emitFilterChange;
|
|
233
|
+
/**
|
|
234
|
+
* Apply filter using SQL-like query or FilterModels
|
|
235
|
+
* Supports both frontend and backend filtering
|
|
236
|
+
*
|
|
237
|
+
* @example SQL Query (Frontend)
|
|
238
|
+
* ```typescript
|
|
239
|
+
* await filterManager.applyFilter({
|
|
240
|
+
* sql: "age > :minAge AND status = :status",
|
|
241
|
+
* params: { minAge: 18, status: 'active' }
|
|
242
|
+
* });
|
|
243
|
+
* ```
|
|
244
|
+
*
|
|
245
|
+
* @example SQL Query (Backend)
|
|
246
|
+
* ```typescript
|
|
247
|
+
* // With mode='backend', this will call onFilterRequest callback
|
|
248
|
+
* await filterManager.applyFilter({
|
|
249
|
+
* sql: "price BETWEEN :min AND :max",
|
|
250
|
+
* params: { min: 100, max: 500 }
|
|
251
|
+
* });
|
|
252
|
+
* ```
|
|
253
|
+
*
|
|
254
|
+
* @example FilterModels
|
|
255
|
+
* ```typescript
|
|
256
|
+
* await filterManager.applyFilter([
|
|
257
|
+
* {
|
|
258
|
+
* column: 2,
|
|
259
|
+
* conditions: [{ operator: 'greaterThan', value: 18 }],
|
|
260
|
+
* logic: 'AND'
|
|
261
|
+
* }
|
|
262
|
+
* ]);
|
|
263
|
+
* ```
|
|
264
|
+
*/
|
|
265
|
+
applyFilter(filter: FilterQuery | FilterModel[] | null): Promise<void>;
|
|
266
|
+
/**
|
|
267
|
+
* Parse filter input into FilterExpression
|
|
268
|
+
*/
|
|
269
|
+
private parseFilterInput;
|
|
270
|
+
/**
|
|
271
|
+
* Type guard for FilterQuery
|
|
272
|
+
*/
|
|
273
|
+
private isFilterQuery;
|
|
274
|
+
/**
|
|
275
|
+
* Apply frontend filtering (in-memory)
|
|
276
|
+
*/
|
|
277
|
+
private applyFrontendFilter;
|
|
278
|
+
/**
|
|
279
|
+
* Apply backend filtering (delegate to server)
|
|
280
|
+
*/
|
|
281
|
+
private applyBackendFilter;
|
|
282
|
+
/**
|
|
283
|
+
* Get current filter expression
|
|
284
|
+
*/
|
|
285
|
+
getCurrentExpression(): FilterExpression | null;
|
|
286
|
+
/**
|
|
287
|
+
* Update column names (for SQL query mapping)
|
|
288
|
+
*/
|
|
289
|
+
setColumnNames(names: string[]): void;
|
|
290
|
+
/**
|
|
291
|
+
* Get current filter state in field-based format
|
|
292
|
+
* Returns filter state using field names instead of column indices
|
|
293
|
+
*
|
|
294
|
+
* @returns Field-based filter state or null if no export manager
|
|
295
|
+
*/
|
|
296
|
+
getFieldFilterState(): FieldFilterState | null;
|
|
297
|
+
/**
|
|
298
|
+
* Get filter export in all formats (REST, GraphQL, SQL)
|
|
299
|
+
* Returns ready-to-use filter formats for backend consumption
|
|
300
|
+
*
|
|
301
|
+
* @returns Filter export result with all formats
|
|
302
|
+
*
|
|
303
|
+
* @example
|
|
304
|
+
* ```typescript
|
|
305
|
+
* const exports = filterManager.getFilterExport();
|
|
306
|
+
*
|
|
307
|
+
* // REST
|
|
308
|
+
* fetch(`/api/users?${exports.rest.queryString}`);
|
|
309
|
+
*
|
|
310
|
+
* // GraphQL
|
|
311
|
+
* graphqlClient.query({ query, variables: { where: exports.graphql.where } });
|
|
312
|
+
*
|
|
313
|
+
* // SQL
|
|
314
|
+
* db.query(`SELECT * FROM users WHERE ${exports.sql.whereClause}`, exports.sql.positionalParams);
|
|
315
|
+
* ```
|
|
316
|
+
*/
|
|
317
|
+
getFilterExport(): FilterExportResult | null;
|
|
318
|
+
/**
|
|
319
|
+
* Get filter export in specific format
|
|
320
|
+
*
|
|
321
|
+
* @param format - Adapter name ('rest', 'graphql', 'sql', or custom)
|
|
322
|
+
* @returns Filter export in specified format
|
|
323
|
+
*
|
|
324
|
+
* @example
|
|
325
|
+
* ```typescript
|
|
326
|
+
* const restExport = filterManager.getFilterExportAs<RESTFilterExport>('rest');
|
|
327
|
+
* fetch(`/api/users?${restExport.queryString}`);
|
|
328
|
+
* ```
|
|
329
|
+
*/
|
|
330
|
+
getFilterExportAs<T>(format: string): T | null;
|
|
331
|
+
/**
|
|
332
|
+
* Set filter from field-based format
|
|
333
|
+
* Converts field-based filter state to column-based FilterModels
|
|
334
|
+
*
|
|
335
|
+
* @param state - Field-based filter state
|
|
336
|
+
*
|
|
337
|
+
* @example
|
|
338
|
+
* ```typescript
|
|
339
|
+
* filterManager.setFieldFilter({
|
|
340
|
+
* root: {
|
|
341
|
+
* logic: 'AND',
|
|
342
|
+
* conditions: [
|
|
343
|
+
* { field: 'age', operator: 'gt', value: 18 },
|
|
344
|
+
* { field: 'status', operator: 'eq', value: 'active' }
|
|
345
|
+
* ]
|
|
346
|
+
* },
|
|
347
|
+
* activeFields: ['age', 'status'],
|
|
348
|
+
* timestamp: Date.now()
|
|
349
|
+
* });
|
|
350
|
+
* ```
|
|
351
|
+
*/
|
|
352
|
+
setFieldFilter(state: FieldFilterState): void;
|
|
353
|
+
/**
|
|
354
|
+
* Update columns (for export manager)
|
|
355
|
+
*/
|
|
356
|
+
setColumns(columns: ColumnDef[]): void;
|
|
357
|
+
/**
|
|
358
|
+
* Set data version (invalidates cache)
|
|
359
|
+
*
|
|
360
|
+
* @param version - New data version
|
|
361
|
+
*/
|
|
362
|
+
setDataVersion(version: number): void;
|
|
363
|
+
/**
|
|
364
|
+
* Index a column for optimized filtering
|
|
365
|
+
*
|
|
366
|
+
* @param col - Column index
|
|
367
|
+
* @param rowCount - Total row count
|
|
368
|
+
* @param type - Column data type
|
|
369
|
+
*/
|
|
370
|
+
indexColumn(col: number, rowCount: number, type?: ColumnType): void;
|
|
371
|
+
/**
|
|
372
|
+
* Get cache statistics
|
|
373
|
+
*/
|
|
374
|
+
getCacheStats(): {
|
|
375
|
+
hitCount: number;
|
|
376
|
+
missCount: number;
|
|
377
|
+
hitRate: number;
|
|
378
|
+
size: number;
|
|
379
|
+
capacity: number;
|
|
380
|
+
} | null;
|
|
381
|
+
/**
|
|
382
|
+
* Get index memory statistics
|
|
383
|
+
*/
|
|
384
|
+
getIndexMemoryStats(): {
|
|
385
|
+
usedMB: number;
|
|
386
|
+
limitMB: number;
|
|
387
|
+
utilizationPercent: number;
|
|
388
|
+
indexedColumns: number;
|
|
389
|
+
} | null;
|
|
390
|
+
/**
|
|
391
|
+
* Clear all caches and indexes
|
|
392
|
+
*/
|
|
393
|
+
clearOptimizations(): void;
|
|
394
|
+
/**
|
|
395
|
+
* Destroy filter manager
|
|
396
|
+
*/
|
|
397
|
+
destroy(): void;
|
|
398
|
+
/**
|
|
399
|
+
* Try optimized filtering using ColumnStore and SegmentTree
|
|
400
|
+
* Returns null if optimization not applicable
|
|
401
|
+
*/
|
|
402
|
+
private tryOptimizedFilter;
|
|
403
|
+
/**
|
|
404
|
+
* Update filter state hash for caching
|
|
405
|
+
*/
|
|
406
|
+
private updateFilterState;
|
|
407
|
+
}
|
|
408
|
+
//# sourceMappingURL=filter-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter-manager.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/features/filtering/filter-manager.ts"],"names":[],"mappings":"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"}
|