ag-grid-url-sync 0.2.4 → 0.4.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.
Files changed (39) hide show
  1. package/README.md +395 -23
  2. package/dist/core/ag-grid-url-sync.d.ts +16 -1
  3. package/dist/core/ag-grid-url-sync.js +19 -41
  4. package/dist/core/ag-grid-url-sync.js.map +1 -1
  5. package/dist/core/grid-integration.js +5 -67
  6. package/dist/core/grid-integration.js.map +1 -1
  7. package/dist/core/index.d.ts +1 -0
  8. package/dist/core/index.js +1 -4
  9. package/dist/core/index.js.map +1 -1
  10. package/dist/core/serialization/formats.d.ts +29 -0
  11. package/dist/core/serialization/formats.js +68 -0
  12. package/dist/core/serialization/formats.js.map +1 -0
  13. package/dist/core/serialization/grouped.d.ts +36 -0
  14. package/dist/core/serialization/grouped.js +105 -0
  15. package/dist/core/serialization/grouped.js.map +1 -0
  16. package/dist/core/serialization/index.d.ts +7 -0
  17. package/dist/core/serialization/index.js +3 -0
  18. package/dist/core/serialization/index.js.map +1 -0
  19. package/dist/core/types.d.ts +75 -5
  20. package/dist/core/types.js +7 -115
  21. package/dist/core/types.js.map +1 -1
  22. package/dist/core/url-generator.js +44 -38
  23. package/dist/core/url-generator.js.map +1 -1
  24. package/dist/core/url-parser.js +8 -52
  25. package/dist/core/url-parser.js.map +1 -1
  26. package/dist/core/validation.d.ts +13 -2
  27. package/dist/core/validation.js +34 -72
  28. package/dist/core/validation.js.map +1 -1
  29. package/dist/core/view-storage.d.ts +63 -0
  30. package/dist/core/view-storage.js +112 -0
  31. package/dist/core/view-storage.js.map +1 -0
  32. package/dist/index.d.ts +3 -0
  33. package/dist/index.js +2 -5
  34. package/dist/index.js.map +1 -1
  35. package/dist/react/index.d.ts +1 -0
  36. package/dist/react/types.d.ts +108 -1
  37. package/dist/react/use-ag-grid-url-sync.js +440 -42
  38. package/dist/react/use-ag-grid-url-sync.js.map +1 -1
  39. package/package.json +101 -30
@@ -1,19 +1,35 @@
1
1
  import type { GridApi as AGGridApi, TextFilterModel, NumberFilterModel, DateFilterModel } from 'ag-grid-community';
2
+ /**
3
+ * Serialization modes for URL parameters
4
+ */
5
+ export type SerializationMode = 'individual' | 'grouped';
6
+ /**
7
+ * Serialization formats for grouped mode
8
+ */
9
+ export type SerializationFormat = 'querystring' | 'json' | 'base64';
2
10
  /**
3
11
  * Configuration options for AG Grid URL Sync
4
12
  *
5
13
  * @example
6
14
  * ```typescript
15
+ * // Individual mode (default - backward compatible)
7
16
  * const config: AGGridUrlSyncConfig = {
8
17
  * paramPrefix: 'filter_',
9
18
  * maxValueLength: 500,
10
19
  * onParseError: (error) => console.warn('Filter parse error:', error)
11
20
  * }
21
+ *
22
+ * // Grouped mode with base64 format
23
+ * const groupedConfig: AGGridUrlSyncConfig = {
24
+ * serialization: 'grouped',
25
+ * format: 'base64',
26
+ * groupedParam: 'filters'
27
+ * }
12
28
  * ```
13
29
  */
14
30
  export interface AGGridUrlSyncConfig {
15
31
  /**
16
- * Prefix for URL parameters
32
+ * Prefix for URL parameters (only used in individual mode)
17
33
  * @default 'f_'
18
34
  * @example 'filter_' results in URLs like '?filter_name_contains=john'
19
35
  */
@@ -28,6 +44,21 @@ export interface AGGridUrlSyncConfig {
28
44
  * Allows graceful error handling without breaking the application.
29
45
  */
30
46
  onParseError?: (error: Error) => void;
47
+ /**
48
+ * Serialization mode for URL parameters
49
+ * @default 'individual'
50
+ */
51
+ serialization?: SerializationMode;
52
+ /**
53
+ * Parameter name for grouped serialization
54
+ * @default 'grid_filters'
55
+ */
56
+ groupedParam?: string;
57
+ /**
58
+ * Serialization format for grouped mode
59
+ * @default 'querystring'
60
+ */
61
+ format?: SerializationFormat;
31
62
  }
32
63
  /**
33
64
  * Internal configuration with all required fields and runtime dependencies
@@ -39,19 +70,19 @@ export interface InternalConfig extends Required<AGGridUrlSyncConfig> {
39
70
  /**
40
71
  * Text-only filter operations for string-based filtering
41
72
  */
42
- export declare const TEXT_ONLY_OPERATIONS: readonly ["contains", "notContains", "startsWith", "endsWith"];
73
+ export declare const TEXT_ONLY_OPERATIONS: readonly ['contains', 'notContains', 'startsWith', 'endsWith'];
43
74
  /**
44
75
  * Number-only filter operations for numeric comparisons
45
76
  */
46
- export declare const NUMBER_ONLY_OPERATIONS: readonly ["lessThan", "lessThanOrEqual", "greaterThan", "greaterThanOrEqual", "inRange"];
77
+ export declare const NUMBER_ONLY_OPERATIONS: readonly ['lessThan', 'lessThanOrEqual', 'greaterThan', 'greaterThanOrEqual', 'inRange'];
47
78
  /**
48
79
  * Date-specific filter operations for temporal comparisons
49
80
  */
50
- export declare const DATE_ONLY_OPERATIONS: readonly ["dateBefore", "dateBeforeOrEqual", "dateAfter", "dateAfterOrEqual", "dateRange"];
81
+ export declare const DATE_ONLY_OPERATIONS: readonly ['dateBefore', 'dateBeforeOrEqual', 'dateAfter', 'dateAfterOrEqual', 'dateRange'];
51
82
  /**
52
83
  * Operations shared across multiple filter types
53
84
  */
54
- export declare const SHARED_OPERATIONS: readonly ["eq", "notEqual", "blank", "notBlank"];
85
+ export declare const SHARED_OPERATIONS: readonly ['eq', 'notEqual', 'blank', 'notBlank'];
55
86
  /**
56
87
  * All supported filter operations across text, number, and date filters
57
88
  */
@@ -195,6 +226,12 @@ export declare class InvalidURLError extends URLSyncError {
195
226
  export declare class InvalidDateError extends InvalidFilterError {
196
227
  constructor(message: string, cause?: Error);
197
228
  }
229
+ /**
230
+ * Error thrown when serialization/deserialization fails
231
+ */
232
+ export declare class InvalidSerializationError extends Error {
233
+ constructor(format: string, cause: Error);
234
+ }
198
235
  /**
199
236
  * Parsed filter parameter information for internal processing
200
237
  */
@@ -226,6 +263,39 @@ export interface RawAGGridFilter {
226
263
  dateFrom?: string;
227
264
  dateTo?: string;
228
265
  }
266
+ /**
267
+ * Grouped serialization result
268
+ */
269
+ export interface GroupedSerializationResult {
270
+ /** The parameter name for the grouped filters */
271
+ paramName: string;
272
+ /** The serialized filter value */
273
+ value: string;
274
+ }
275
+ /**
276
+ * Format-specific serializer interface
277
+ */
278
+ export interface FormatSerializer {
279
+ /** Serialize filter state to string */
280
+ serialize(filterState: FilterState): string;
281
+ /** Deserialize string to filter state */
282
+ deserialize(value: string): FilterState;
283
+ /** Format identifier */
284
+ format: SerializationFormat;
285
+ }
286
+ /**
287
+ * Detection result for grouped parameters
288
+ */
289
+ export interface GroupedDetectionResult {
290
+ /** Whether grouped serialization was detected */
291
+ isGrouped: boolean;
292
+ /** The parameter name if grouped */
293
+ paramName?: string;
294
+ /** The detected format if grouped */
295
+ format?: SerializationFormat;
296
+ /** The raw value if grouped */
297
+ value?: string;
298
+ }
229
299
  /**
230
300
  * Maps URL operation names to internal operation types
231
301
  */
@@ -1,18 +1,9 @@
1
- // ============================================================================
2
- // FILTER OPERATION DEFINITIONS
3
- // ============================================================================
4
- /**
5
- * Text-only filter operations for string-based filtering
6
- */
7
1
  export const TEXT_ONLY_OPERATIONS = [
8
2
  'contains',
9
3
  'notContains',
10
4
  'startsWith',
11
5
  'endsWith'
12
6
  ];
13
- /**
14
- * Number-only filter operations for numeric comparisons
15
- */
16
7
  export const NUMBER_ONLY_OPERATIONS = [
17
8
  'lessThan',
18
9
  'lessThanOrEqual',
@@ -20,9 +11,6 @@ export const NUMBER_ONLY_OPERATIONS = [
20
11
  'greaterThanOrEqual',
21
12
  'inRange'
22
13
  ];
23
- /**
24
- * Date-specific filter operations for temporal comparisons
25
- */
26
14
  export const DATE_ONLY_OPERATIONS = [
27
15
  'dateBefore',
28
16
  'dateBeforeOrEqual',
@@ -30,93 +18,48 @@ export const DATE_ONLY_OPERATIONS = [
30
18
  'dateAfterOrEqual',
31
19
  'dateRange'
32
20
  ];
33
- /**
34
- * Operations shared across multiple filter types
35
- */
36
21
  export const SHARED_OPERATIONS = [
37
22
  'eq',
38
23
  'notEqual',
39
24
  'blank',
40
25
  'notBlank'
41
26
  ];
42
- /**
43
- * Complete list of valid text filter operations
44
- */
45
27
  export const TEXT_FILTER_OPERATIONS = [
46
28
  ...TEXT_ONLY_OPERATIONS,
47
29
  ...SHARED_OPERATIONS
48
30
  ];
49
- /**
50
- * Complete list of valid number filter operations
51
- */
52
31
  export const NUMBER_FILTER_OPERATIONS = [
53
32
  ...NUMBER_ONLY_OPERATIONS,
54
33
  ...SHARED_OPERATIONS
55
34
  ];
56
- /**
57
- * Valid date filter operations as const array
58
- */
59
35
  export const DATE_FILTER_OPERATIONS = [
60
36
  ...DATE_ONLY_OPERATIONS,
61
37
  ...SHARED_OPERATIONS
62
38
  ];
63
- // ============================================================================
64
- // TYPE GUARDS
65
- // ============================================================================
66
- /**
67
- * Type guard to check if an operation is text-specific
68
- */
69
39
  export function isTextFilterOperation(op) {
70
40
  return TEXT_FILTER_OPERATIONS.includes(op);
71
41
  }
72
- /**
73
- * Type guard to check if an operation is number-specific
74
- */
75
42
  export function isNumberFilterOperation(op) {
76
43
  return NUMBER_FILTER_OPERATIONS.includes(op);
77
44
  }
78
- /**
79
- * Type guard to check if an operation is date-specific
80
- */
81
45
  export function isDateFilterOperation(op) {
82
46
  return DATE_FILTER_OPERATIONS.includes(op);
83
47
  }
84
- /**
85
- * Type guard to check if an operation requires a range (two values)
86
- */
87
48
  export function isRangeOperation(op) {
88
49
  return op === 'inRange' || op === 'dateRange';
89
50
  }
90
- /**
91
- * Type guard to check if an operation is a blank operation
92
- */
93
51
  export function isBlankOperation(op) {
94
52
  return op === 'blank' || op === 'notBlank';
95
53
  }
96
- /**
97
- * Type guard to check if a filter is a text filter
98
- */
99
54
  export function isTextFilter(filter) {
100
55
  return filter.filterType === 'text';
101
56
  }
102
- /**
103
- * Type guard to check if a filter is a number filter
104
- */
105
57
  export function isNumberFilter(filter) {
106
58
  return filter.filterType === 'number';
107
59
  }
108
- /**
109
- * Type guard to check if a filter is a date filter
110
- */
111
60
  export function isDateFilter(filter) {
112
61
  return filter.filterType === 'date';
113
62
  }
114
- // ============================================================================
115
- // ERROR TYPES
116
- // ============================================================================
117
- /**
118
- * Base error class for all URL sync operations
119
- */
120
63
  export class URLSyncError extends Error {
121
64
  cause;
122
65
  constructor(message, cause) {
@@ -125,96 +68,59 @@ export class URLSyncError extends Error {
125
68
  this.name = 'URLSyncError';
126
69
  }
127
70
  }
128
- /**
129
- * Error thrown when filter validation fails
130
- */
131
71
  export class InvalidFilterError extends URLSyncError {
132
72
  constructor(message, cause) {
133
73
  super(message, cause);
134
74
  this.name = 'InvalidFilterError';
135
75
  }
136
76
  }
137
- /**
138
- * Error thrown when URL parsing fails
139
- */
140
77
  export class InvalidURLError extends URLSyncError {
141
78
  constructor(message, cause) {
142
79
  super(message, cause);
143
80
  this.name = 'InvalidURLError';
144
81
  }
145
82
  }
146
- /**
147
- * Error thrown when date validation fails
148
- */
149
83
  export class InvalidDateError extends InvalidFilterError {
150
84
  constructor(message, cause) {
151
85
  super(message, cause);
152
86
  this.name = 'InvalidDateError';
153
87
  }
154
88
  }
155
- // ============================================================================
156
- // OPERATION MAPPINGS
157
- // ============================================================================
158
- /**
159
- * Operation Mapping Strategy:
160
- *
161
- * We use three different naming conventions for better user experience:
162
- *
163
- * 1. URL Parameters: Short, clean names for URLs (e.g., 'eq', 'neq', 'before', 'after')
164
- * 2. Internal Types: Consistent naming for our FilterOperation type
165
- * 3. AG Grid Operations: Exact names expected by AG Grid API (e.g., 'equals', 'notEqual', 'lessThan')
166
- *
167
- * This approach keeps URLs readable while maintaining compatibility with AG Grid.
168
- */
169
- /**
170
- * URL shorthand mappings for cleaner URLs.
171
- * Maps internal operation names to shorter URL parameter names.
172
- * Operations not listed here use their internal name as URL param.
173
- */
89
+ export class InvalidSerializationError extends Error {
90
+ constructor(format, cause) {
91
+ super(`Invalid ${format} serialization: ${cause.message}`);
92
+ this.name = 'InvalidSerializationError';
93
+ this.cause = cause;
94
+ }
95
+ }
174
96
  const URL_SHORTHAND_MAPPINGS = {
175
- // Shared operations
176
97
  notEqual: 'neq',
177
- // Number operations
178
98
  lessThan: 'lt',
179
99
  lessThanOrEqual: 'lte',
180
100
  greaterThan: 'gt',
181
101
  greaterThanOrEqual: 'gte',
182
102
  inRange: 'range',
183
- // Date operations
184
103
  dateBefore: 'before',
185
104
  dateBeforeOrEqual: 'beforeEq',
186
105
  dateAfter: 'after',
187
106
  dateAfterOrEqual: 'afterEq',
188
107
  dateRange: 'daterange'
189
108
  };
190
- /**
191
- * AG Grid operation name mappings.
192
- * Maps internal operation names to AG Grid API operation names.
193
- * Operations not listed here use their internal name for AG Grid.
194
- */
195
109
  const AG_GRID_NAME_MAPPINGS = {
196
- // Shared operations
197
110
  eq: 'equals',
198
- // Date operations (AG Grid uses generic names)
199
111
  dateBefore: 'lessThan',
200
112
  dateBeforeOrEqual: 'lessThanOrEqual',
201
113
  dateAfter: 'greaterThan',
202
114
  dateAfterOrEqual: 'greaterThanOrEqual',
203
115
  dateRange: 'inRange'
204
116
  };
205
- /**
206
- * Creates operation mapping tables for URL and AG Grid integration
207
- */
208
117
  function createOperationMaps() {
209
- // Get all unique operations across filter types
210
118
  const allOperations = [
211
119
  ...TEXT_FILTER_OPERATIONS,
212
120
  ...NUMBER_FILTER_OPERATIONS,
213
121
  ...DATE_FILTER_OPERATIONS
214
122
  ];
215
- // Remove duplicates (operations like 'eq', 'blank' appear in multiple arrays)
216
123
  const uniqueOperations = [...new Set(allOperations)];
217
- // Generate URL mappings (bidirectional)
218
124
  const operationMap = {};
219
125
  const internalToUrlMap = {};
220
126
  uniqueOperations.forEach(operation => {
@@ -222,7 +128,6 @@ function createOperationMaps() {
222
128
  operationMap[urlName] = operation;
223
129
  internalToUrlMap[operation] = urlName;
224
130
  });
225
- // Generate AG Grid mappings (bidirectional)
226
131
  const agGridMap = {};
227
132
  const reverseAgGridMap = {};
228
133
  uniqueOperations.forEach(operation => {
@@ -238,22 +143,9 @@ function createOperationMaps() {
238
143
  reverseAgGridMap
239
144
  };
240
145
  }
241
- // Generate all mappings dynamically
242
146
  const mappings = createOperationMaps();
243
- /**
244
- * Maps URL operation names to internal operation types
245
- */
246
147
  export const OPERATION_MAP = mappings.operationMap;
247
- /**
248
- * Maps internal operation types to URL operation names
249
- */
250
148
  export const INTERNAL_TO_URL_OPERATION_MAP = mappings.internalToUrlMap;
251
- /**
252
- * Maps internal operation types to AG Grid operation names
253
- */
254
149
  export const AG_GRID_OPERATION_NAMES = mappings.agGridMap;
255
- /**
256
- * Maps AG Grid operation names to internal operation types
257
- */
258
150
  export const REVERSE_AG_GRID_OPERATION_NAMES = mappings.reverseAgGridMap;
259
151
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AA+FA,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,UAAU;IACV,aAAa;IACb,YAAY;IACZ,UAAU;CACF,CAAA;AAKV,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,UAAU;IACV,iBAAiB;IACjB,aAAa;IACb,oBAAoB;IACpB,SAAS;CACD,CAAA;AAKV,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,YAAY;IACZ,mBAAmB;IACnB,WAAW;IACX,kBAAkB;IAClB,WAAW;CACH,CAAA;AAKV,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,IAAI;IACJ,UAAU;IACV,OAAO;IACP,UAAU;CACF,CAAA;AAcV,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,GAAG,oBAAoB;IACvB,GAAG,iBAAiB;CACZ,CAAA;AAKV,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,GAAG,sBAAsB;IACzB,GAAG,iBAAiB;CACZ,CAAA;AAKV,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,GAAG,oBAAoB;IACvB,GAAG,iBAAiB;CACZ,CAAA;AAyGV,MAAM,UAAU,qBAAqB,CACnC,EAAmB;IAEnB,OAAO,sBAAsB,CAAC,QAAQ,CAAC,EAAyB,CAAC,CAAA;AACnE,CAAC;AAKD,MAAM,UAAU,uBAAuB,CACrC,EAAmB;IAEnB,OAAO,wBAAwB,CAAC,QAAQ,CAAC,EAA2B,CAAC,CAAA;AACvE,CAAC;AAKD,MAAM,UAAU,qBAAqB,CACnC,EAAmB;IAEnB,OAAO,sBAAsB,CAAC,QAAQ,CAAC,EAAyB,CAAC,CAAA;AACnE,CAAC;AAKD,MAAM,UAAU,gBAAgB,CAAC,EAAmB;IAClD,OAAO,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,WAAW,CAAA;AAC/C,CAAC;AAKD,MAAM,UAAU,gBAAgB,CAAC,EAAmB;IAClD,OAAO,EAAE,KAAK,OAAO,IAAI,EAAE,KAAK,UAAU,CAAA;AAC5C,CAAC;AAKD,MAAM,UAAU,YAAY,CAAC,MAAoB;IAC/C,OAAO,MAAM,CAAC,UAAU,KAAK,MAAM,CAAA;AACrC,CAAC;AAKD,MAAM,UAAU,cAAc,CAC5B,MAAoB;IAEpB,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAA;AACvC,CAAC;AAKD,MAAM,UAAU,YAAY,CAAC,MAAoB;IAC/C,OAAO,MAAM,CAAC,UAAU,KAAK,MAAM,CAAA;AACrC,CAAC;AASD,MAAM,OAAO,YAAa,SAAQ,KAAK;IAGV,KAAK;IAFhC,YACE,OAAe,EACU,KAAa;QAEtC,KAAK,CAAC,OAAO,CAAC,CAAA;qBAFW,KAAK;QAG9B,IAAI,CAAC,IAAI,GAAG,cAAc,CAAA;IAC5B,CAAC;CACF;AAKD,MAAM,OAAO,kBAAmB,SAAQ,YAAY;IAClD,YAAY,OAAe,EAAE,KAAa;QACxC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QACrB,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAA;IAClC,CAAC;CACF;AAKD,MAAM,OAAO,eAAgB,SAAQ,YAAY;IAC/C,YAAY,OAAe,EAAE,KAAa;QACxC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QACrB,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAA;IAC/B,CAAC;CACF;AAKD,MAAM,OAAO,gBAAiB,SAAQ,kBAAkB;IACtD,YAAY,OAAe,EAAE,KAAa;QACxC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QACrB,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAA;IAChC,CAAC;CACF;AAKD,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IAClD,YAAY,MAAc,EAAE,KAAY;QACtC,KAAK,CAAC,WAAW,MAAM,mBAAmB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;QAC1D,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAA;QACvC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACpB,CAAC;CACF;AAkGD,MAAM,sBAAsB,GAAG;IAE7B,QAAQ,EAAE,KAAK;IAEf,QAAQ,EAAE,IAAI;IACd,eAAe,EAAE,KAAK;IACtB,WAAW,EAAE,IAAI;IACjB,kBAAkB,EAAE,KAAK;IACzB,OAAO,EAAE,OAAO;IAEhB,UAAU,EAAE,QAAQ;IACpB,iBAAiB,EAAE,UAAU;IAC7B,SAAS,EAAE,OAAO;IAClB,gBAAgB,EAAE,SAAS;IAC3B,SAAS,EAAE,WAAW;CACd,CAAA;AAOV,MAAM,qBAAqB,GAAG;IAE5B,EAAE,EAAE,QAAQ;IAEZ,UAAU,EAAE,UAAU;IACtB,iBAAiB,EAAE,iBAAiB;IACpC,SAAS,EAAE,aAAa;IACxB,gBAAgB,EAAE,oBAAoB;IACtC,SAAS,EAAE,SAAS;CACZ,CAAA;AAKV,SAAS,mBAAmB;IAE1B,MAAM,aAAa,GAAG;QACpB,GAAG,sBAAsB;QACzB,GAAG,wBAAwB;QAC3B,GAAG,sBAAsB;KAC1B,CAAA;IAGD,MAAM,gBAAgB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC,CAAA;IAGpD,MAAM,YAAY,GAAoC,EAAE,CAAA;IACxD,MAAM,gBAAgB,GAAG,EAAqC,CAAA;IAE9D,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;QACnC,MAAM,OAAO,GACX,sBAAsB,CACpB,SAAgD,CACjD,IAAI,SAAS,CAAA;QAChB,YAAY,CAAC,OAAO,CAAC,GAAG,SAAS,CAAA;QACjC,gBAAgB,CAAC,SAAS,CAAC,GAAG,OAAO,CAAA;IACvC,CAAC,CAAC,CAAA;IAGF,MAAM,SAAS,GAA2B,EAAE,CAAA;IAC5C,MAAM,gBAAgB,GAAoC,EAAE,CAAA;IAE5D,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;QACnC,MAAM,UAAU,GACd,qBAAqB,CAAC,SAA+C,CAAC;YACtE,SAAS,CAAA;QACX,SAAS,CAAC,SAAS,CAAC,GAAG,UAAU,CAAA;QACjC,gBAAgB,CAAC,UAAU,CAAC,GAAG,SAAS,CAAA;IAC1C,CAAC,CAAC,CAAA;IAEF,OAAO;QACL,YAAY;QACZ,gBAAgB;QAChB,SAAS;QACT,gBAAgB;KACR,CAAA;AACZ,CAAC;AAGD,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAA;AAKtC,MAAM,CAAC,MAAM,aAAa,GAAG,QAAQ,CAAC,YAAY,CAAA;AAKlD,MAAM,CAAC,MAAM,6BAA6B,GAAG,QAAQ,CAAC,gBAAgB,CAAA;AAKtE,MAAM,CAAC,MAAM,uBAAuB,GAAG,QAAQ,CAAC,SAAS,CAAA;AAKzD,MAAM,CAAC,MAAM,+BAA+B,GAAG,QAAQ,CAAC,gBAAgB,CAAA"}
@@ -1,96 +1,71 @@
1
1
  import { validateFilterValue } from './validation.js';
2
2
  import { INTERNAL_TO_URL_OPERATION_MAP } from './types.js';
3
+ import { serializeGrouped } from './serialization/grouped.js';
3
4
  const FILTER_TYPES = {
4
5
  TEXT: 'text',
5
6
  NUMBER: 'number',
6
7
  DATE: 'date'
7
8
  };
8
- /**
9
- * Serializes a single column filter to URL parameter
10
- */
11
9
  function serializeColumnFilter(columnName, filter, paramPrefix) {
12
10
  const urlOperation = INTERNAL_TO_URL_OPERATION_MAP[filter.type];
13
11
  if (!urlOperation)
14
12
  return '';
15
13
  const paramName = `${paramPrefix}${columnName}_${urlOperation}`;
16
- // Handle date range operations
17
14
  if (filter.type === 'dateRange' && filter.filterType === FILTER_TYPES.DATE) {
18
- // Type guard: ensure this is a DateColumnFilter with dateRange operation
19
15
  if ('filterTo' in filter && filter.filterTo !== undefined) {
20
- // Don't encode the comma for range values - handle this directly
21
16
  return `${paramName}=${filter.filter},${filter.filterTo}`;
22
17
  }
23
18
  return '';
24
19
  }
25
- // Handle number range operations
26
20
  if (filter.type === 'inRange' && filter.filterType === FILTER_TYPES.NUMBER) {
27
- // Type guard: ensure this is a NumberColumnFilter with inRange operation
28
21
  if ('filterTo' in filter && filter.filterTo !== undefined) {
29
- // Don't encode the comma for range values - handle this directly
30
22
  return `${paramName}=${filter.filter},${filter.filterTo}`;
31
23
  }
32
24
  return '';
33
25
  }
34
- // Handle blank operations (shared across text, number, and date)
35
26
  if (filter.type === 'blank' || filter.type === 'notBlank') {
36
27
  return `${paramName}=true`;
37
28
  }
38
- // Handle date operations (ISO date format preservation)
39
29
  if (filter.filterType === FILTER_TYPES.DATE) {
40
- return `${paramName}=${filter.filter}`; // ISO dates don't need URL encoding
30
+ return `${paramName}=${filter.filter}`;
41
31
  }
42
- // Handle number operations
43
32
  if (filter.filterType === FILTER_TYPES.NUMBER) {
44
33
  return `${paramName}=${filter.filter}`;
45
34
  }
46
- // Handle text operations (existing logic)
47
35
  if (filter.filterType === FILTER_TYPES.TEXT && filter.filter) {
48
- // Note: Validation should be done at the serializeFilters level, not here
49
36
  return `${paramName}=${encodeURIComponent(filter.filter.toString())}`;
50
37
  }
51
38
  return '';
52
39
  }
53
- /**
54
- * Helper function to append a serialized parameter to URLSearchParams
55
- */
56
40
  function appendSerializedParam(serialized, params, isRangeOperation = false) {
57
41
  const [paramName, paramValue] = serialized.split('=');
58
42
  if (paramName && paramValue) {
59
43
  if (isRangeOperation) {
60
- // For range operations (which contain commas), don't decode
61
44
  params.append(paramName, paramValue);
62
45
  }
63
46
  else {
64
- // For regular operations, decode special characters for text filters
65
47
  params.append(paramName, decodeURIComponent(paramValue));
66
48
  }
67
49
  }
68
50
  }
69
- /**
70
- * Converts a filter state object into URL search parameters
71
- */
72
51
  export function serializeFilters(filterState, config) {
73
52
  const params = new URLSearchParams();
74
53
  for (const [column, filter] of Object.entries(filterState)) {
75
- // Support text, number, and date filters
76
54
  if (filter.filterType !== FILTER_TYPES.TEXT &&
77
55
  filter.filterType !== FILTER_TYPES.NUMBER &&
78
56
  filter.filterType !== FILTER_TYPES.DATE)
79
57
  continue;
80
- // Apply validation for text filters before serialization
81
58
  if (filter.filterType === FILTER_TYPES.TEXT) {
82
59
  const validatedValue = validateFilterValue(filter.filter, config, filter.type);
83
60
  const updatedFilter = { ...filter, filter: validatedValue };
84
61
  const serialized = serializeColumnFilter(column, updatedFilter, config.paramPrefix);
85
62
  if (serialized) {
86
- appendSerializedParam(serialized, params, false); // Text filters are not range operations
63
+ appendSerializedParam(serialized, params, false);
87
64
  }
88
65
  }
89
66
  else {
90
- // Number and date filters don't need additional validation as they're already validated
91
67
  const serialized = serializeColumnFilter(column, filter, config.paramPrefix);
92
68
  if (serialized) {
93
- // Check if this is a range operation
94
69
  const isRangeOp = filter.type === 'inRange' || filter.type === 'dateRange';
95
70
  appendSerializedParam(serialized, params, isRangeOp);
96
71
  }
@@ -98,23 +73,30 @@ export function serializeFilters(filterState, config) {
98
73
  }
99
74
  return params;
100
75
  }
101
- /**
102
- * Generates a URL with the current filter state
103
- */
76
+ function getPreservedParams(url, config, excludeParam) {
77
+ const params = new URLSearchParams();
78
+ for (const [key, value] of url.searchParams.entries()) {
79
+ if ((excludeParam && key === excludeParam) ||
80
+ (config.paramPrefix && key.startsWith(config.paramPrefix))) {
81
+ continue;
82
+ }
83
+ params.set(key, value);
84
+ }
85
+ return params;
86
+ }
104
87
  export function generateUrl(baseUrl, filterState, config) {
105
88
  const url = new URL(baseUrl);
89
+ if (config.serialization === 'grouped') {
90
+ return generateGroupedUrl(baseUrl, filterState, config);
91
+ }
106
92
  const filterParams = serializeFilters(filterState, config);
107
- // Preserve existing non-filter parameters
108
- for (const [key, value] of url.searchParams.entries()) {
109
- if (!key.startsWith(config.paramPrefix)) {
110
- filterParams.append(key, value);
111
- }
93
+ const preservedParams = getPreservedParams(url, config);
94
+ for (const [key, value] of preservedParams.entries()) {
95
+ filterParams.append(key, value);
112
96
  }
113
97
  const queryString = filterParams.toString();
114
- // If no filters, return the base URL without query string or trailing slash
115
98
  if (!queryString) {
116
99
  let result = url.toString().replace(/\?$/, '');
117
- // Remove trailing slash for root paths when no query parameters
118
100
  if (result.endsWith('/') && result === url.origin + '/') {
119
101
  result = result.slice(0, -1);
120
102
  }
@@ -123,4 +105,28 @@ export function generateUrl(baseUrl, filterState, config) {
123
105
  url.search = queryString;
124
106
  return url.toString();
125
107
  }
108
+ function generateGroupedUrl(baseUrl, filterState, config) {
109
+ const url = new URL(baseUrl);
110
+ const groupedResult = serializeGrouped(filterState, config);
111
+ const preservedParams = getPreservedParams(url, config, config.groupedParam);
112
+ url.search = '';
113
+ for (const [key, value] of preservedParams.entries()) {
114
+ url.searchParams.set(key, value);
115
+ }
116
+ if (groupedResult.value) {
117
+ url.searchParams.set(groupedResult.paramName, groupedResult.value);
118
+ }
119
+ if (!groupedResult.value && url.searchParams.has(config.groupedParam)) {
120
+ url.searchParams.delete(config.groupedParam);
121
+ }
122
+ const queryString = url.searchParams.toString();
123
+ if (!queryString) {
124
+ let result = url.toString().replace(/\?$/, '');
125
+ if (result.endsWith('/') && result === url.origin + '/') {
126
+ result = result.slice(0, -1);
127
+ }
128
+ return result;
129
+ }
130
+ return url.toString();
131
+ }
126
132
  //# sourceMappingURL=url-generator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"url-generator.js","sourceRoot":"","sources":["../../src/core/url-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"url-generator.js","sourceRoot":"","sources":["../../src/core/url-generator.ts"],"names":[],"mappings":"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"}