@zengrid/core 1.2.0 → 1.2.2
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/index.cjs.js +10372 -7432
- package/dist/index.esm.js +10373 -7433
- package/dist/package.json +5 -2
- package/dist/src/data/data-accessor/array-accessor.d.ts.map +1 -1
- package/dist/src/data/data-manager.d.ts +5 -7
- package/dist/src/data/data-manager.d.ts.map +1 -1
- package/dist/src/datetime-core/popup/popup-manager.d.ts +4 -12
- package/dist/src/datetime-core/popup/popup-manager.d.ts.map +1 -1
- package/dist/src/events/grid-events.d.ts +3 -0
- package/dist/src/events/grid-events.d.ts.map +1 -1
- package/dist/src/features/filtering/filter-ast-compiler.d.ts +30 -0
- package/dist/src/features/filtering/filter-ast-compiler.d.ts.map +1 -0
- package/dist/src/features/filtering/filter-ast.d.ts +37 -0
- package/dist/src/features/filtering/filter-ast.d.ts.map +1 -0
- package/dist/src/features/filtering/filter-execution-error.d.ts +2 -0
- package/dist/src/features/filtering/filter-execution-error.d.ts.map +1 -0
- package/dist/src/features/filtering/filter-export-manager.d.ts +0 -8
- package/dist/src/features/filtering/filter-export-manager.d.ts.map +1 -1
- package/dist/src/features/filtering/filter-expression.d.ts +15 -0
- package/dist/src/features/filtering/filter-expression.d.ts.map +1 -0
- package/dist/src/features/filtering/filter-manager/filter-core.d.ts +73 -13
- package/dist/src/features/filtering/filter-manager/filter-core.d.ts.map +1 -1
- package/dist/src/features/filtering/filter-manager/filter-export.d.ts +3 -49
- package/dist/src/features/filtering/filter-manager/filter-export.d.ts.map +1 -1
- package/dist/src/features/filtering/filter-manager/filter-optimizer.d.ts.map +1 -1
- package/dist/src/features/filtering/filter-manager/filter-query.d.ts +19 -48
- package/dist/src/features/filtering/filter-manager/filter-query.d.ts.map +1 -1
- package/dist/src/features/filtering/filter-manager/index.d.ts +12 -129
- package/dist/src/features/filtering/filter-manager/index.d.ts.map +1 -1
- package/dist/src/features/filtering/filter-manager/types.d.ts +0 -11
- package/dist/src/features/filtering/filter-manager/types.d.ts.map +1 -1
- package/dist/src/features/filtering/filter-query-parser.d.ts +10 -50
- package/dist/src/features/filtering/filter-query-parser.d.ts.map +1 -1
- package/dist/src/features/filtering/filter-signature.d.ts +6 -0
- package/dist/src/features/filtering/filter-signature.d.ts.map +1 -0
- package/dist/src/features/filtering/index.d.ts +3 -0
- package/dist/src/features/filtering/index.d.ts.map +1 -1
- package/dist/src/features/query/query-signature.d.ts +3 -0
- package/dist/src/features/query/query-signature.d.ts.map +1 -0
- package/dist/src/features/query/query-state.d.ts +12 -0
- package/dist/src/features/query/query-state.d.ts.map +1 -0
- package/dist/src/features/sorting/sort-manager.d.ts +9 -23
- package/dist/src/features/sorting/sort-manager.d.ts.map +1 -1
- package/dist/src/features/sorting/sort-request.d.ts +5 -0
- package/dist/src/features/sorting/sort-request.d.ts.map +1 -0
- package/dist/src/grid/api/filter-api.d.ts +7 -3
- package/dist/src/grid/api/filter-api.d.ts.map +1 -1
- package/dist/src/grid/api/sort-api.d.ts.map +1 -1
- package/dist/src/grid/filter-ui.d.ts +35 -5
- package/dist/src/grid/filter-ui.d.ts.map +1 -1
- package/dist/src/grid/grid-context.d.ts +2 -0
- package/dist/src/grid/grid-context.d.ts.map +1 -1
- package/dist/src/grid/grid-core.d.ts +12 -3
- package/dist/src/grid/grid-core.d.ts.map +1 -1
- package/dist/src/grid/grid-setup.d.ts.map +1 -1
- package/dist/src/grid/options-manager.d.ts +14 -0
- package/dist/src/grid/options-manager.d.ts.map +1 -0
- package/dist/src/grid/plugin-host.d.ts +3 -2
- package/dist/src/grid/plugin-host.d.ts.map +1 -1
- package/dist/src/grid/query-mode.d.ts +4 -0
- package/dist/src/grid/query-mode.d.ts.map +1 -0
- package/dist/src/index.d.ts +2 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/overlay/index.d.ts +2 -0
- package/dist/src/overlay/index.d.ts.map +1 -0
- package/dist/src/overlay/overlay-manager.d.ts +46 -0
- package/dist/src/overlay/overlay-manager.d.ts.map +1 -0
- package/dist/src/plugins/async-filter-plugin.d.ts.map +1 -1
- package/dist/src/plugins/data-plugin.d.ts +14 -0
- package/dist/src/plugins/data-plugin.d.ts.map +1 -0
- package/dist/src/plugins/filter-plugin.d.ts +1 -1
- package/dist/src/plugins/filter-plugin.d.ts.map +1 -1
- package/dist/src/plugins/filter-ui/filter-ui-plugin.d.ts +1 -0
- package/dist/src/plugins/filter-ui/filter-ui-plugin.d.ts.map +1 -1
- package/dist/src/plugins/header/header-render-params.d.ts.map +1 -1
- package/dist/src/plugins/index.d.ts +2 -0
- package/dist/src/plugins/index.d.ts.map +1 -1
- package/dist/src/plugins/lifecycle/lifecycle-plugin.d.ts +3 -0
- package/dist/src/plugins/lifecycle/lifecycle-plugin.d.ts.map +1 -1
- package/dist/src/plugins/sort-plugin.d.ts +3 -2
- package/dist/src/plugins/sort-plugin.d.ts.map +1 -1
- package/dist/src/reactive/index.d.ts +1 -1
- package/dist/src/reactive/index.d.ts.map +1 -1
- package/dist/src/reactive/types.d.ts +16 -1
- package/dist/src/reactive/types.d.ts.map +1 -1
- package/dist/src/rendering/headers/renderers/sortable-header-renderer.d.ts +4 -1
- package/dist/src/rendering/headers/renderers/sortable-header-renderer.d.ts.map +1 -1
- package/dist/src/rendering/renderers/button/button-renderer.d.ts.map +1 -1
- package/dist/src/rendering/renderers/chip/chip-renderer.d.ts.map +1 -1
- package/dist/src/rendering/renderers/dropdown/dropdown-dom.d.ts +1 -1
- package/dist/src/rendering/renderers/dropdown/dropdown-dom.d.ts.map +1 -1
- package/dist/src/rendering/renderers/dropdown/dropdown-events.d.ts.map +1 -1
- package/dist/src/rendering/renderers/dropdown/dropdown-renderer.d.ts.map +1 -1
- package/dist/src/rendering/renderers/dropdown/dropdown-state.d.ts +10 -6
- package/dist/src/rendering/renderers/dropdown/dropdown-state.d.ts.map +1 -1
- package/dist/src/rendering/virtual-scroller/virtual-scroller.d.ts.map +1 -1
- package/dist/src/styles.css +93 -4
- package/dist/src/types/data.d.ts +35 -60
- package/dist/src/types/data.d.ts.map +1 -1
- package/dist/src/types/filter.d.ts +106 -35
- package/dist/src/types/filter.d.ts.map +1 -1
- package/dist/src/types/grid.d.ts +6 -50
- package/dist/src/types/grid.d.ts.map +1 -1
- package/dist/src/types/index.d.ts +1 -0
- package/dist/src/types/index.d.ts.map +1 -1
- package/dist/src/types/query.d.ts +24 -0
- package/dist/src/types/query.d.ts.map +1 -0
- package/dist/src/types/sort.d.ts +9 -6
- package/dist/src/types/sort.d.ts.map +1 -1
- package/dist/src/utils/stable-hash.d.ts +2 -0
- package/dist/src/utils/stable-hash.d.ts.map +1 -0
- package/package.json +8 -5
|
@@ -1,79 +1,50 @@
|
|
|
1
|
-
import type { FilterModel, FilterQuery
|
|
2
|
-
import type { OperationMode } from '@zengrid/shared';
|
|
1
|
+
import type { ColumnDef, FilterExpression, FilterModel, FilterQuery } from '../../../types';
|
|
3
2
|
import type { EventEmitter } from '../../../events/event-emitter';
|
|
4
3
|
import type { GridEvents } from '../../../events/grid-events';
|
|
4
|
+
import type { FilterExportResult } from '../adapters/types';
|
|
5
|
+
import type { FieldFilterState } from '../types';
|
|
5
6
|
import type { FilterCore } from './filter-core';
|
|
6
7
|
/**
|
|
7
|
-
* FilterQueryHandler - SQL-like query parsing and
|
|
8
|
-
*
|
|
9
|
-
* Handles SQL-like filter queries, mode switching (frontend/backend/auto),
|
|
10
|
-
* and filter expression management.
|
|
8
|
+
* FilterQueryHandler - SQL-like query parsing and expression management.
|
|
11
9
|
*/
|
|
12
10
|
export declare class FilterQueryHandler {
|
|
13
|
-
private mode;
|
|
14
11
|
private columnNames;
|
|
12
|
+
private columns?;
|
|
15
13
|
private parser;
|
|
16
|
-
private onFilterRequest?;
|
|
17
14
|
private currentExpression;
|
|
18
15
|
private events?;
|
|
19
16
|
private core;
|
|
20
|
-
|
|
17
|
+
private getFieldFilterState?;
|
|
18
|
+
private getFilterExport?;
|
|
19
|
+
constructor(core: FilterCore, columnNames: string[], columns?: ColumnDef[], events?: EventEmitter<GridEvents>, getFieldFilterState?: () => FieldFilterState | null, getFilterExport?: () => FilterExportResult | null);
|
|
21
20
|
/**
|
|
22
|
-
* Apply filter using SQL-like query or FilterModels
|
|
23
|
-
* Supports both frontend and backend filtering
|
|
24
|
-
*
|
|
25
|
-
* @example SQL Query (Frontend)
|
|
26
|
-
* ```typescript
|
|
27
|
-
* await filterManager.applyFilter({
|
|
28
|
-
* sql: "age > :minAge AND status = :status",
|
|
29
|
-
* params: { minAge: 18, status: 'active' }
|
|
30
|
-
* });
|
|
31
|
-
* ```
|
|
32
|
-
*
|
|
33
|
-
* @example SQL Query (Backend)
|
|
34
|
-
* ```typescript
|
|
35
|
-
* // With mode='backend', this will call onFilterRequest callback
|
|
36
|
-
* await filterManager.applyFilter({
|
|
37
|
-
* sql: "price BETWEEN :min AND :max",
|
|
38
|
-
* params: { min: 100, max: 500 }
|
|
39
|
-
* });
|
|
40
|
-
* ```
|
|
41
|
-
*
|
|
42
|
-
* @example FilterModels
|
|
43
|
-
* ```typescript
|
|
44
|
-
* await filterManager.applyFilter([
|
|
45
|
-
* {
|
|
46
|
-
* column: 2,
|
|
47
|
-
* conditions: [{ operator: 'greaterThan', value: 18 }],
|
|
48
|
-
* logic: 'AND'
|
|
49
|
-
* }
|
|
50
|
-
* ]);
|
|
51
|
-
* ```
|
|
21
|
+
* Apply filter using SQL-like query or FilterModels.
|
|
52
22
|
*/
|
|
53
23
|
applyFilter(filter: FilterQuery | FilterModel[] | null): Promise<void>;
|
|
54
24
|
/**
|
|
55
|
-
* Parse filter input into FilterExpression
|
|
25
|
+
* Parse filter input into FilterExpression.
|
|
56
26
|
*/
|
|
57
27
|
private parseFilterInput;
|
|
28
|
+
private buildCurrentExpression;
|
|
58
29
|
/**
|
|
59
|
-
* Type guard for FilterQuery
|
|
30
|
+
* Type guard for FilterQuery.
|
|
60
31
|
*/
|
|
61
32
|
private isFilterQuery;
|
|
62
33
|
/**
|
|
63
|
-
* Apply frontend filtering (in-memory)
|
|
34
|
+
* Apply frontend filtering (in-memory).
|
|
64
35
|
*/
|
|
65
36
|
private applyFrontendFilter;
|
|
66
37
|
/**
|
|
67
|
-
*
|
|
68
|
-
*/
|
|
69
|
-
private applyBackendFilter;
|
|
70
|
-
/**
|
|
71
|
-
* Get current filter expression
|
|
38
|
+
* Get current filter expression.
|
|
72
39
|
*/
|
|
73
40
|
getCurrentExpression(): FilterExpression | null;
|
|
74
41
|
/**
|
|
75
|
-
* Update column names (for SQL query mapping)
|
|
42
|
+
* Update column names (for SQL query mapping).
|
|
76
43
|
*/
|
|
77
44
|
setColumnNames(names: string[]): void;
|
|
45
|
+
/**
|
|
46
|
+
* Update column metadata used for AST target enrichment.
|
|
47
|
+
*/
|
|
48
|
+
setColumns(columns: ColumnDef[]): void;
|
|
78
49
|
}
|
|
79
50
|
//# sourceMappingURL=filter-query.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter-query.d.ts","sourceRoot":"","sources":["../../../../../src/features/filtering/filter-manager/filter-query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"filter-query.d.ts","sourceRoot":"","sources":["../../../../../src/features/filtering/filter-manager/filter-query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC5F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAI5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,WAAW,CAAW;IAC9B,OAAO,CAAC,OAAO,CAAC,CAAc;IAC9B,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,iBAAiB,CAAiC;IAC1D,OAAO,CAAC,MAAM,CAAC,CAA2B;IAC1C,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,mBAAmB,CAAC,CAAgC;IAC5D,OAAO,CAAC,eAAe,CAAC,CAAkC;gBAGxD,IAAI,EAAE,UAAU,EAChB,WAAW,EAAE,MAAM,EAAE,EACrB,OAAO,CAAC,EAAE,SAAS,EAAE,EACrB,MAAM,CAAC,EAAE,YAAY,CAAC,UAAU,CAAC,EACjC,mBAAmB,CAAC,EAAE,MAAM,gBAAgB,GAAG,IAAI,EACnD,eAAe,CAAC,EAAE,MAAM,kBAAkB,GAAG,IAAI;IAmBnD;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAuC5E;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,sBAAsB;IAgB9B;;OAEG;IACH,OAAO,CAAC,aAAa;IAIrB;;OAEG;YACW,mBAAmB;IAsBjC;;OAEG;IACH,oBAAoB,IAAI,gBAAgB,GAAG,IAAI;IAI/C;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IASrC;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI;CAGvC"}
|
|
@@ -1,67 +1,11 @@
|
|
|
1
|
-
import type { FilterModel, FilterQuery, FilterExpression, ColumnDef } from '../../../types';
|
|
2
1
|
import type { ColumnType } from '@zengrid/shared';
|
|
3
|
-
import type {
|
|
2
|
+
import type { ColumnDef, FilterAst, FilterExpression, FilterModel, FilterQuery } from '../../../types';
|
|
4
3
|
import type { FilterExportResult } from '../adapters/types';
|
|
5
|
-
import type { FilterManagerOptions } from './types';
|
|
6
4
|
import type { ColumnFilter } from '../column-filter';
|
|
5
|
+
import type { FieldFilterState } from '../types';
|
|
6
|
+
import type { FilterManagerOptions } from './types';
|
|
7
7
|
/**
|
|
8
|
-
* FilterManager - Manages filtering across all columns
|
|
9
|
-
*
|
|
10
|
-
* Supports both frontend and backend filtering with two input formats:
|
|
11
|
-
* 1. FilterModel[] - Traditional structured filters
|
|
12
|
-
* 2. FilterQuery - SQL-like queries with parameterization
|
|
13
|
-
*
|
|
14
|
-
* @example Traditional Filtering
|
|
15
|
-
* ```typescript
|
|
16
|
-
* const filterManager = new FilterManager({
|
|
17
|
-
* colCount: 10,
|
|
18
|
-
* getValue: (row, col) => data[row][col],
|
|
19
|
-
* mode: 'frontend'
|
|
20
|
-
* });
|
|
21
|
-
*
|
|
22
|
-
* // Add filter for column 0
|
|
23
|
-
* filterManager.setColumnFilter(0, [
|
|
24
|
-
* { operator: 'greaterThan', value: 100 },
|
|
25
|
-
* ]);
|
|
26
|
-
*
|
|
27
|
-
* // Test if row passes all filters
|
|
28
|
-
* const passes = filterManager.testRow(5);
|
|
29
|
-
*
|
|
30
|
-
* // Get visible row indices
|
|
31
|
-
* const visible = filterManager.getVisibleRows(1000);
|
|
32
|
-
* ```
|
|
33
|
-
*
|
|
34
|
-
* @example SQL-like Filtering
|
|
35
|
-
* ```typescript
|
|
36
|
-
* const filterManager = new FilterManager({
|
|
37
|
-
* colCount: 10,
|
|
38
|
-
* getValue: (row, col) => data[row][col],
|
|
39
|
-
* mode: 'frontend',
|
|
40
|
-
* columnNames: ['id', 'name', 'age', 'status']
|
|
41
|
-
* });
|
|
42
|
-
*
|
|
43
|
-
* // Apply SQL-like filter
|
|
44
|
-
* await filterManager.applyFilter({
|
|
45
|
-
* sql: "age > :minAge AND status = :status",
|
|
46
|
-
* params: { minAge: 18, status: 'active' }
|
|
47
|
-
* });
|
|
48
|
-
* ```
|
|
49
|
-
*
|
|
50
|
-
* @example Backend Filtering
|
|
51
|
-
* ```typescript
|
|
52
|
-
* const filterManager = new FilterManager({
|
|
53
|
-
* colCount: 10,
|
|
54
|
-
* getValue: (row, col) => data[row][col],
|
|
55
|
-
* mode: 'backend',
|
|
56
|
-
* onFilterRequest: async (filter) => {
|
|
57
|
-
* const data = await api.get('/data', {
|
|
58
|
-
* filter: filter.sql,
|
|
59
|
-
* params: filter.params
|
|
60
|
-
* });
|
|
61
|
-
* grid.setData(data);
|
|
62
|
-
* }
|
|
63
|
-
* });
|
|
64
|
-
* ```
|
|
8
|
+
* FilterManager - Manages filtering across all columns.
|
|
65
9
|
*/
|
|
66
10
|
export declare class FilterManager {
|
|
67
11
|
private core;
|
|
@@ -69,90 +13,38 @@ export declare class FilterManager {
|
|
|
69
13
|
private exporter;
|
|
70
14
|
private optimizer;
|
|
71
15
|
constructor(options: FilterManagerOptions);
|
|
72
|
-
/**
|
|
73
|
-
* Set filter for a column
|
|
74
|
-
*/
|
|
75
16
|
setColumnFilter(column: number, conditions: any[], logic?: 'AND' | 'OR'): void;
|
|
76
|
-
/**
|
|
77
|
-
* Clear filter for a column
|
|
78
|
-
*/
|
|
79
17
|
clearColumnFilter(column: number): void;
|
|
80
|
-
/**
|
|
81
|
-
* Clear all filters
|
|
82
|
-
*/
|
|
83
18
|
clearAll(): void;
|
|
84
|
-
/**
|
|
85
|
-
* Test if a row passes all filters
|
|
86
|
-
*/
|
|
87
19
|
testRow(row: number): boolean;
|
|
88
|
-
/**
|
|
89
|
-
* Get all visible row indices
|
|
90
|
-
*/
|
|
91
20
|
getVisibleRows(rowCount: number): number[];
|
|
92
|
-
/**
|
|
93
|
-
* Get filter statistics
|
|
94
|
-
*/
|
|
95
21
|
getStats(rowCount: number): {
|
|
96
22
|
totalRows: number;
|
|
97
23
|
visibleRows: number;
|
|
98
24
|
hiddenRows: number;
|
|
99
25
|
activeFilters: number;
|
|
100
26
|
};
|
|
101
|
-
/**
|
|
102
|
-
* Get current filter state
|
|
103
|
-
*/
|
|
104
27
|
getFilterState(): FilterModel[];
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
28
|
+
setFilterState(models: FilterModel[]): void;
|
|
29
|
+
getFilterAst(): FilterAst | null;
|
|
30
|
+
getAstProjectionWarnings(): string[];
|
|
31
|
+
getAstExecutionWarnings(): string[];
|
|
108
32
|
hasActiveFilters(): boolean;
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
33
|
+
hasStructuredFilters(): boolean;
|
|
34
|
+
isUsingAstExecution(): boolean;
|
|
35
|
+
hasUnexecutableFilters(): boolean;
|
|
112
36
|
getColumnFilter(column: number): ColumnFilter | undefined;
|
|
113
|
-
/**
|
|
114
|
-
* Apply filter using SQL-like query or FilterModels
|
|
115
|
-
*/
|
|
116
37
|
applyFilter(filter: FilterQuery | FilterModel[] | null): Promise<void>;
|
|
117
|
-
/**
|
|
118
|
-
* Get current filter expression
|
|
119
|
-
*/
|
|
120
38
|
getCurrentExpression(): FilterExpression | null;
|
|
121
|
-
/**
|
|
122
|
-
* Update column names (for SQL query mapping)
|
|
123
|
-
*/
|
|
124
39
|
setColumnNames(names: string[]): void;
|
|
125
|
-
/**
|
|
126
|
-
* Get current filter state in field-based format
|
|
127
|
-
*/
|
|
128
40
|
getFieldFilterState(): FieldFilterState | null;
|
|
129
|
-
/**
|
|
130
|
-
* Get filter export in all formats (REST, GraphQL, SQL)
|
|
131
|
-
*/
|
|
132
41
|
getFilterExport(): FilterExportResult | null;
|
|
133
|
-
/**
|
|
134
|
-
* Get filter export in specific format
|
|
135
|
-
*/
|
|
136
42
|
getFilterExportAs<T>(format: string): T | null;
|
|
137
|
-
/**
|
|
138
|
-
* Set filter from field-based format
|
|
139
|
-
*/
|
|
140
43
|
setFieldFilter(state: FieldFilterState): void;
|
|
141
|
-
/**
|
|
142
|
-
* Update columns (for export manager)
|
|
143
|
-
*/
|
|
144
44
|
setColumns(columns: ColumnDef[]): void;
|
|
145
|
-
|
|
146
|
-
* Set data version (invalidates cache)
|
|
147
|
-
*/
|
|
45
|
+
setColCount(colCount: number): void;
|
|
148
46
|
setDataVersion(version: number): void;
|
|
149
|
-
/**
|
|
150
|
-
* Index a column for optimized filtering
|
|
151
|
-
*/
|
|
152
47
|
indexColumn(col: number, rowCount: number, type?: ColumnType): void;
|
|
153
|
-
/**
|
|
154
|
-
* Get cache statistics
|
|
155
|
-
*/
|
|
156
48
|
getCacheStats(): {
|
|
157
49
|
hitCount: number;
|
|
158
50
|
missCount: number;
|
|
@@ -160,22 +52,13 @@ export declare class FilterManager {
|
|
|
160
52
|
size: number;
|
|
161
53
|
capacity: number;
|
|
162
54
|
} | null;
|
|
163
|
-
/**
|
|
164
|
-
* Get index memory statistics
|
|
165
|
-
*/
|
|
166
55
|
getIndexMemoryStats(): {
|
|
167
56
|
usedMB: number;
|
|
168
57
|
limitMB: number;
|
|
169
58
|
utilizationPercent: number;
|
|
170
59
|
indexedColumns: number;
|
|
171
60
|
} | null;
|
|
172
|
-
/**
|
|
173
|
-
* Clear all caches and indexes
|
|
174
|
-
*/
|
|
175
61
|
clearOptimizations(): void;
|
|
176
|
-
/**
|
|
177
|
-
* Destroy filter manager
|
|
178
|
-
*/
|
|
179
62
|
destroy(): void;
|
|
180
63
|
}
|
|
181
64
|
export type { FilterManagerOptions } from './types';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/filtering/filter-manager/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/filtering/filter-manager/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { FilterModel, ColumnDef } from '../../../types';
|
|
2
|
-
import type { OperationMode } from '@zengrid/shared';
|
|
3
2
|
import type { EventEmitter } from '../../../events/event-emitter';
|
|
4
3
|
import type { GridEvents } from '../../../events/grid-events';
|
|
5
4
|
import type { FilterExportManagerOptions } from '../filter-export-manager';
|
|
@@ -23,20 +22,10 @@ export interface FilterManagerOptions {
|
|
|
23
22
|
* Initial filter models
|
|
24
23
|
*/
|
|
25
24
|
initialFilters?: FilterModel[];
|
|
26
|
-
/**
|
|
27
|
-
* Filter mode: frontend, backend, or auto
|
|
28
|
-
* @default 'frontend'
|
|
29
|
-
*/
|
|
30
|
-
mode?: OperationMode;
|
|
31
25
|
/**
|
|
32
26
|
* Column names for SQL query field mapping
|
|
33
27
|
*/
|
|
34
28
|
columnNames?: string[];
|
|
35
|
-
/**
|
|
36
|
-
* Backend filtering callback
|
|
37
|
-
* Called when mode is 'backend' or 'auto' (with callback present)
|
|
38
|
-
*/
|
|
39
|
-
onFilterRequest?: (filter: any) => Promise<void> | void;
|
|
40
29
|
/**
|
|
41
30
|
* Column definitions (for field-based filtering)
|
|
42
31
|
* Required for FilterExportManager
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/features/filtering/filter-manager/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/features/filtering/filter-manager/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAE3E;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC;IAElC;;OAEG;IACH,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,GAAG,CAAC;IAE5C;;OAEG;IACH,cAAc,CAAC,EAAE,WAAW,EAAE,CAAC;IAE/B;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAEvB;;;OAGG;IACH,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IAEtB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC,0BAA0B,CAAC,CAAC;IAEnD;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;;OAGG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
|
|
@@ -1,69 +1,29 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { FilterExpression, FilterModel, FilterQuery } from '../../types';
|
|
2
2
|
/**
|
|
3
3
|
* FilterQueryParser - Parses SQL-like filter queries
|
|
4
4
|
*
|
|
5
|
-
* Converts SQL-like syntax to FilterExpression for both backend and frontend use
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* - Comparison: =, !=, <, >, <=, >=
|
|
9
|
-
* - String: LIKE, NOT LIKE
|
|
10
|
-
* - Range: BETWEEN, NOT BETWEEN
|
|
11
|
-
* - List: IN, NOT IN
|
|
12
|
-
* - Null: IS NULL, IS NOT NULL
|
|
13
|
-
* - Logic: AND, OR, NOT, ( )
|
|
14
|
-
*
|
|
15
|
-
* @example
|
|
16
|
-
* ```typescript
|
|
17
|
-
* const parser = new FilterQueryParser();
|
|
18
|
-
*
|
|
19
|
-
* // Simple query
|
|
20
|
-
* parser.parse({ sql: "age > 18" });
|
|
21
|
-
*
|
|
22
|
-
* // Parameterized query (recommended)
|
|
23
|
-
* parser.parse({
|
|
24
|
-
* sql: "age > :minAge AND status = :status",
|
|
25
|
-
* params: { minAge: 18, status: 'active' }
|
|
26
|
-
* });
|
|
27
|
-
*
|
|
28
|
-
* // Complex query
|
|
29
|
-
* parser.parse({
|
|
30
|
-
* sql: "age BETWEEN :min AND :max AND (name LIKE :search OR email LIKE :search)",
|
|
31
|
-
* params: { min: 18, max: 65, search: '%john%' }
|
|
32
|
-
* });
|
|
33
|
-
* ```
|
|
5
|
+
* Converts SQL-like syntax to FilterExpression for both backend and frontend use.
|
|
6
|
+
* Supported syntax is lowered into semantic AST nodes so frontend and backend
|
|
7
|
+
* now share the same canonical filter tree.
|
|
34
8
|
*/
|
|
35
9
|
export declare class FilterQueryParser {
|
|
10
|
+
private columnMap;
|
|
36
11
|
/**
|
|
37
12
|
* Set column name to index mapping
|
|
38
13
|
* Required for converting SQL field names to column indices
|
|
39
14
|
*/
|
|
40
|
-
setColumnMapping(
|
|
15
|
+
setColumnMapping(mapping: Record<string, number>): void;
|
|
41
16
|
/**
|
|
42
17
|
* Parse SQL-like filter query into FilterExpression
|
|
43
18
|
*/
|
|
44
19
|
parse(query: FilterQuery): FilterExpression;
|
|
45
|
-
/**
|
|
46
|
-
* Bind named parameters (:paramName) to their values
|
|
47
|
-
* Converts to positional placeholders (?)
|
|
48
|
-
*/
|
|
49
|
-
private bindNamedParameters;
|
|
50
|
-
/**
|
|
51
|
-
* Extract positional parameters from SQL
|
|
52
|
-
* Converts literal values to ? placeholders
|
|
53
|
-
*/
|
|
54
|
-
private extractPositionalParameters;
|
|
55
|
-
/**
|
|
56
|
-
* Check if a value is part of a SQL keyword
|
|
57
|
-
*/
|
|
58
|
-
private isPartOfKeyword;
|
|
59
20
|
/**
|
|
60
21
|
* Convert SQL query to FilterModels (for frontend filtering)
|
|
61
|
-
* This is a simplified conversion - complex queries may not convert perfectly
|
|
62
22
|
*/
|
|
63
23
|
parseToModels(query: FilterQuery, columnNames: string[]): FilterModel[];
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
private
|
|
24
|
+
private parseSemanticAst;
|
|
25
|
+
private resolveTarget;
|
|
26
|
+
private toPositionalQuery;
|
|
27
|
+
private toSqlParamValue;
|
|
68
28
|
}
|
|
69
29
|
//# sourceMappingURL=filter-query-parser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter-query-parser.d.ts","sourceRoot":"","sources":["../../../../src/features/filtering/filter-query-parser.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"filter-query-parser.d.ts","sourceRoot":"","sources":["../../../../src/features/filtering/filter-query-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAKV,gBAAgB,EAChB,WAAW,EAEX,WAAW,EACZ,MAAM,aAAa,CAAC;AAsCrB;;;;;;GAMG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,SAAS,CAAkC;IAEnD;;;OAGG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAIvD;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,WAAW,GAAG,gBAAgB;IAiB3C;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE;IAqBvE,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,iBAAiB;IAuCzB,OAAO,CAAC,eAAe;CAYxB"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { FilterAst, FilterModel } from '../../types';
|
|
2
|
+
type FilterExecutionMode = 'none' | 'column' | 'ast' | 'unexecutable';
|
|
3
|
+
export declare function getFilterAstSignature(ast: FilterAst | null | undefined): string;
|
|
4
|
+
export declare function buildFilterStateSignature(executionMode: FilterExecutionMode, models: readonly FilterModel[], ast?: FilterAst | null): string;
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=filter-signature.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter-signature.d.ts","sourceRoot":"","sources":["../../../../src/features/filtering/filter-signature.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1D,KAAK,mBAAmB,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,cAAc,CAAC;AAItE,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAa/E;AAED,wBAAgB,yBAAyB,CACvC,aAAa,EAAE,mBAAmB,EAClC,MAAM,EAAE,SAAS,WAAW,EAAE,EAC9B,GAAG,CAAC,EAAE,SAAS,GAAG,IAAI,GACrB,MAAM,CAUR"}
|
|
@@ -5,9 +5,12 @@ export { FilterCompiler } from './filter-compiler';
|
|
|
5
5
|
export type { FilterPredicate } from './filter-compiler';
|
|
6
6
|
export { ColumnFilter } from './column-filter';
|
|
7
7
|
export type { ColumnFilterOptions } from './column-filter';
|
|
8
|
+
export { FilterAstCompiler } from './filter-ast-compiler';
|
|
9
|
+
export type { FilterAstRowPredicate } from './filter-ast-compiler';
|
|
8
10
|
export { FilterManager } from './filter-manager';
|
|
9
11
|
export type { FilterManagerOptions } from './filter-manager';
|
|
10
12
|
export { FilterAutocomplete } from './filter-autocomplete';
|
|
13
|
+
export * from './filter-ast';
|
|
11
14
|
export { FilterOptimizer } from './filter-optimizer';
|
|
12
15
|
export { SubstringFilter } from './substring-filter';
|
|
13
16
|
export { FilterCache } from './filter-cache';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/features/filtering/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,YAAY,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGrD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAGhE,YAAY,EACV,sBAAsB,EACtB,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,YAAY,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAG1E,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/features/filtering/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,YAAY,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEnE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGrD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAGhE,YAAY,EACV,sBAAsB,EACtB,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,YAAY,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAG1E,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-signature.d.ts","sourceRoot":"","sources":["../../../../src/features/query/query-signature.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAkB,MAAM,aAAa,CAAC;AAM9D,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAmBnF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ColumnDef, FilterAst, QueryPaginationState, QueryState, SortState } from '../../types';
|
|
2
|
+
export interface BuildQueryStateOptions {
|
|
3
|
+
sortState?: SortState[] | null;
|
|
4
|
+
filterAst?: FilterAst | null;
|
|
5
|
+
pagination?: QueryPaginationState | null;
|
|
6
|
+
columns?: ColumnDef[];
|
|
7
|
+
}
|
|
8
|
+
export declare function buildQueryPaginationState(page: number, pageSize: number, offset?: number): QueryPaginationState;
|
|
9
|
+
export declare function buildRangeQueryPaginationState(startRow: number, endRow: number): QueryPaginationState;
|
|
10
|
+
export declare function buildStoreQueryPaginationState(page: number | null | undefined, pageSize: number | null | undefined): QueryPaginationState | null;
|
|
11
|
+
export declare function buildQueryState(options?: BuildQueryStateOptions): QueryState;
|
|
12
|
+
//# sourceMappingURL=query-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-state.d.ts","sourceRoot":"","sources":["../../../../src/features/query/query-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,SAAS,EACT,oBAAoB,EACpB,UAAU,EACV,SAAS,EACV,MAAM,aAAa,CAAC;AAGrB,MAAM,WAAW,sBAAsB;IACrC,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAC/B,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAC7B,UAAU,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACzC,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;CACvB;AAED,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,MAAM,SAAkB,GACvB,oBAAoB,CAMtB;AAED,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,oBAAoB,CAKtB;AAED,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAClC,oBAAoB,GAAG,IAAI,CAU7B;AAED,wBAAgB,eAAe,CAAC,OAAO,GAAE,sBAA2B,GAAG,UAAU,CAYhF"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { SortState, SortDirection
|
|
1
|
+
import type { SortState, SortDirection } from '../../types';
|
|
2
2
|
import type { EventEmitter } from '../../events/event-emitter';
|
|
3
3
|
import type { GridEvents } from '../../events/grid-events';
|
|
4
|
-
import type
|
|
4
|
+
import { type IndexMap } from '../../data/index-map';
|
|
5
5
|
/**
|
|
6
6
|
* Sort manager options
|
|
7
7
|
*/
|
|
@@ -27,20 +27,6 @@ export interface SortManagerOptions {
|
|
|
27
27
|
* Initial sort state
|
|
28
28
|
*/
|
|
29
29
|
initialSort?: SortState[];
|
|
30
|
-
/**
|
|
31
|
-
* Sort mode - determines where sorting is executed
|
|
32
|
-
* - 'frontend': Sort data in memory (default)
|
|
33
|
-
* - 'backend': Emit events only, application handles sorting
|
|
34
|
-
* - 'auto': Use backend mode if onSortRequest is provided, otherwise frontend
|
|
35
|
-
* @default 'frontend'
|
|
36
|
-
*/
|
|
37
|
-
sortMode?: SortMode;
|
|
38
|
-
/**
|
|
39
|
-
* Callback for backend sorting
|
|
40
|
-
* Called when sortMode is 'backend' or 'auto' (with callback present)
|
|
41
|
-
* Application should fetch sorted data and call grid.setData()
|
|
42
|
-
*/
|
|
43
|
-
onSortRequest?: (sortState: SortState[]) => Promise<void> | void;
|
|
44
30
|
}
|
|
45
31
|
/**
|
|
46
32
|
* SortManager - Manages sorting state and execution
|
|
@@ -73,8 +59,6 @@ export declare class SortManager {
|
|
|
73
59
|
private enableMultiSort;
|
|
74
60
|
private sortState;
|
|
75
61
|
private indexMap;
|
|
76
|
-
private sortMode;
|
|
77
|
-
private onSortRequest?;
|
|
78
62
|
constructor(options: SortManagerOptions);
|
|
79
63
|
/**
|
|
80
64
|
* Toggle sort on a column
|
|
@@ -114,16 +98,18 @@ export declare class SortManager {
|
|
|
114
98
|
* Execute the sort
|
|
115
99
|
*/
|
|
116
100
|
private executeSort;
|
|
101
|
+
private sortMultipleColumns;
|
|
102
|
+
private compareRows;
|
|
103
|
+
private compareValues;
|
|
104
|
+
private compareNumbers;
|
|
105
|
+
private compareStrings;
|
|
106
|
+
private compareBooleans;
|
|
107
|
+
private compareDates;
|
|
117
108
|
/**
|
|
118
109
|
* Update row count
|
|
119
110
|
* @param rowCount - New row count
|
|
120
111
|
*/
|
|
121
112
|
updateRowCount(rowCount: number): void;
|
|
122
|
-
/**
|
|
123
|
-
* Get current sort mode (resolved from 'auto')
|
|
124
|
-
* Returns the actual mode being used: 'frontend' or 'backend'
|
|
125
|
-
*/
|
|
126
|
-
getSortMode(): 'frontend' | 'backend';
|
|
127
113
|
/**
|
|
128
114
|
* Destroy sort manager
|
|
129
115
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sort-manager.d.ts","sourceRoot":"","sources":["../../../../src/features/sorting/sort-manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sort-manager.d.ts","sourceRoot":"","sources":["../../../../src/features/sorting/sort-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAIrE;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC;IAElC;;OAEG;IACH,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,GAAG,CAAC;IAE5C;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;OAEG;IACH,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAC,CAA2B;IAC1C,OAAO,CAAC,QAAQ,CAAoC;IACpD,OAAO,CAAC,eAAe,CAAU;IACjC,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,QAAQ,CAAyB;gBAE7B,OAAO,EAAE,kBAAkB;IAYvC;;;;OAIG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAE,OAAe,GAAG,IAAI;IA6D3D;;;OAGG;IACH,YAAY,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI;IAc1C;;OAEG;IACH,SAAS,IAAI,IAAI;IAajB;;OAEG;IACH,YAAY,IAAI,SAAS,EAAE;IAI3B;;;;OAIG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa;IAK5C;;OAEG;IACH,QAAQ,IAAI,OAAO;IAInB;;;OAGG;IACH,WAAW,IAAI,QAAQ,GAAG,IAAI;IAI9B;;OAEG;IACH,OAAO,CAAC,WAAW;IA6DnB,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,WAAW;IAkBnB,OAAO,CAAC,aAAa;IAkCrB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,YAAY;IAIpB;;;OAGG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAStC;;OAEG;IACH,OAAO,IAAI,IAAI;CAIhB"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ColumnDef } from '../../types/column';
|
|
2
|
+
import type { SortDescriptor, SortState } from '../../types/sort';
|
|
3
|
+
export declare function normalizeSortState(sortState: SortState[]): SortState[];
|
|
4
|
+
export declare function serializeSortState(sortState: SortState[], columns?: ColumnDef[]): SortDescriptor[];
|
|
5
|
+
//# sourceMappingURL=sort-request.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sort-request.d.ts","sourceRoot":"","sources":["../../../../src/features/sorting/sort-request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAiB,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAQjF,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CA6CtE;AAED,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,SAAS,EAAE,EACtB,OAAO,CAAC,EAAE,SAAS,EAAE,GACpB,cAAc,EAAE,CAOlB"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import type { FilterModel } from '../../types';
|
|
1
|
+
import type { FilterExpression, FilterModel } from '../../types';
|
|
2
|
+
import type { FilterExportResult } from '../../features/filtering/adapters/types';
|
|
3
|
+
import type { FieldFilterState } from '../../features/filtering/types';
|
|
2
4
|
import type { SlimGridContext } from '../grid-context';
|
|
3
5
|
export interface FilterApi {
|
|
4
6
|
set(column: number, operator: string, value: any): void;
|
|
@@ -6,12 +8,14 @@ export interface FilterApi {
|
|
|
6
8
|
operator: string;
|
|
7
9
|
value: any;
|
|
8
10
|
}>, logic?: 'AND' | 'OR'): void;
|
|
11
|
+
setFieldState(state: FieldFilterState): void;
|
|
9
12
|
clear(): void;
|
|
10
13
|
clearColumn(column: number): void;
|
|
11
14
|
getState(): FilterModel[];
|
|
12
15
|
setState(models: FilterModel[]): void;
|
|
13
|
-
getFieldState():
|
|
14
|
-
getExports():
|
|
16
|
+
getFieldState(): FieldFilterState | null;
|
|
17
|
+
getExports(): FilterExportResult | null;
|
|
18
|
+
getExpression(): FilterExpression | null;
|
|
15
19
|
getMode(): 'frontend' | 'backend';
|
|
16
20
|
setQuick(query: string, columns?: number[]): void;
|
|
17
21
|
clearQuick(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter-api.d.ts","sourceRoot":"","sources":["../../../../src/grid/api/filter-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"filter-api.d.ts","sourceRoot":"","sources":["../../../../src/grid/api/filter-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAClF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGvD,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI,CAAC;IACxD,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,GAAG,CAAA;KAAE,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC;IAC3G,aAAa,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC7C,KAAK,IAAI,IAAI,CAAC;IACd,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,IAAI,WAAW,EAAE,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IACtC,aAAa,IAAI,gBAAgB,GAAG,IAAI,CAAC;IACzC,UAAU,IAAI,kBAAkB,GAAG,IAAI,CAAC;IACxC,aAAa,IAAI,gBAAgB,GAAG,IAAI,CAAC;IACzC,OAAO,IAAI,UAAU,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAClD,UAAU,IAAI,IAAI,CAAC;IACnB,QAAQ,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;KAAE,CAAC;CACzD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,SAAS,CAiF/D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sort-api.d.ts","sourceRoot":"","sources":["../../../../src/grid/api/sort-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"sort-api.d.ts","sourceRoot":"","sources":["../../../../src/grid/api/sort-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGvD,MAAM,WAAW,OAAO;IACtB,KAAK,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IACpC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,IAAI,IAAI,CAAC;IACd,QAAQ,IAAI,SAAS,EAAE,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IACvC,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC;IACnC,QAAQ,IAAI;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,OAAO,IAAI,UAAU,GAAG,SAAS,CAAC;CACnC;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAmD3D"}
|