ag-grid-url-sync 0.4.1 → 0.5.0
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 +51 -13
- package/dist/core/ag-grid-url-sync.d.ts +13 -0
- package/dist/core/ag-grid-url-sync.js +9 -2
- package/dist/core/ag-grid-url-sync.js.map +1 -1
- package/dist/core/individual-params.d.ts +19 -0
- package/dist/core/individual-params.js +260 -0
- package/dist/core/individual-params.js.map +1 -0
- package/dist/core/serialization/formats.d.ts +8 -9
- package/dist/core/serialization/formats.js +63 -46
- package/dist/core/serialization/formats.js.map +1 -1
- package/dist/core/serialization/grouped.d.ts +10 -5
- package/dist/core/serialization/grouped.js +4 -4
- package/dist/core/serialization/grouped.js.map +1 -1
- package/dist/core/types.d.ts +38 -5
- package/dist/core/types.js.map +1 -1
- package/dist/core/url-generator.d.ts +10 -7
- package/dist/core/url-generator.js +25 -119
- package/dist/core/url-generator.js.map +1 -1
- package/dist/core/url-parser.d.ts +19 -7
- package/dist/core/url-parser.js +28 -238
- package/dist/core/url-parser.js.map +1 -1
- package/dist/core/validation.d.ts +2 -2
- package/dist/core/validation.js.map +1 -1
- package/dist/react/types.d.ts +7 -1
- package/dist/react/use-ag-grid-url-sync.js +5 -12
- package/dist/react/use-ag-grid-url-sync.js.map +1 -1
- package/package.json +14 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formats.js","sourceRoot":"","sources":["../../../src/core/serialization/formats.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"formats.js","sourceRoot":"","sources":["../../../src/core/serialization/formats.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +1,26 @@
|
|
|
1
|
-
import type { FilterState, SerializationFormat, FormatSerializer, GroupedSerializationResult,
|
|
1
|
+
import type { FilterState, SerializationFormat, FormatSerializer, GroupedSerializationResult, ParseConfig } from '../types.js';
|
|
2
2
|
/**
|
|
3
3
|
* Serialize filter state using grouped serialization
|
|
4
4
|
* @param filterState - The filter state to serialize
|
|
5
|
-
* @param config -
|
|
5
|
+
* @param config - Parse configuration (does not need a grid)
|
|
6
6
|
* @returns Grouped serialization result with parameter name and value
|
|
7
7
|
*/
|
|
8
|
-
export declare function serializeGrouped(filterState: FilterState, config:
|
|
8
|
+
export declare function serializeGrouped(filterState: FilterState, config: ParseConfig): GroupedSerializationResult;
|
|
9
9
|
/**
|
|
10
10
|
* Deserialize grouped filter state from URL parameter value
|
|
11
11
|
* @param value - The serialized value from URL parameter
|
|
12
12
|
* @param format - The serialization format to use
|
|
13
|
-
* @param config -
|
|
13
|
+
* @param config - Parse configuration for error handling (does not need a grid)
|
|
14
14
|
* @returns Deserialized filter state
|
|
15
15
|
*/
|
|
16
|
-
export declare function deserializeGrouped(value: string, format: SerializationFormat, config:
|
|
16
|
+
export declare function deserializeGrouped(value: string, format: SerializationFormat, config: ParseConfig): FilterState;
|
|
17
17
|
/**
|
|
18
18
|
* Detect if a URL contains grouped serialization parameters
|
|
19
|
+
*
|
|
20
|
+
* @deprecated parseUrlFilters no longer uses this. It reads only
|
|
21
|
+
* `config.groupedParam` and decodes it with `config.format`, because a guessed
|
|
22
|
+
* format takes any non-empty value as grouped filters (#210). This function
|
|
23
|
+
* will be removed in v1.0.
|
|
19
24
|
* @param url - URL to analyze
|
|
20
25
|
* @param possibleParams - Array of possible grouped parameter names to check
|
|
21
26
|
* @returns Detection result with format and value if found
|
|
@@ -11,7 +11,7 @@ export function serializeGrouped(filterState, config) {
|
|
|
11
11
|
if (!serializer) {
|
|
12
12
|
throw new Error(`Unknown serialization format: ${config.format}`);
|
|
13
13
|
}
|
|
14
|
-
const value = serializer.serialize(filterState);
|
|
14
|
+
const value = serializer.serialize(filterState, config);
|
|
15
15
|
return {
|
|
16
16
|
paramName: config.groupedParam,
|
|
17
17
|
value
|
|
@@ -19,7 +19,7 @@ export function serializeGrouped(filterState, config) {
|
|
|
19
19
|
}
|
|
20
20
|
catch (error) {
|
|
21
21
|
const serializationError = new InvalidSerializationError(config.format, error);
|
|
22
|
-
config.onParseError(serializationError);
|
|
22
|
+
config.onParseError?.(serializationError);
|
|
23
23
|
return {
|
|
24
24
|
paramName: config.groupedParam,
|
|
25
25
|
value: ''
|
|
@@ -32,11 +32,11 @@ export function deserializeGrouped(value, format, config) {
|
|
|
32
32
|
if (!serializer) {
|
|
33
33
|
throw new Error(`Unknown serialization format: ${format}`);
|
|
34
34
|
}
|
|
35
|
-
return serializer.deserialize(value);
|
|
35
|
+
return serializer.deserialize(value, config);
|
|
36
36
|
}
|
|
37
37
|
catch (error) {
|
|
38
38
|
const serializationError = new InvalidSerializationError(format, error);
|
|
39
|
-
config.onParseError(serializationError);
|
|
39
|
+
config.onParseError?.(serializationError);
|
|
40
40
|
return {};
|
|
41
41
|
}
|
|
42
42
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grouped.js","sourceRoot":"","sources":["../../../src/core/serialization/grouped.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAA;AACvD,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EACjB,MAAM,cAAc,CAAA;AAKrB,MAAM,kBAAkB,GAAkD;IACxE,WAAW,EAAE,IAAI,qBAAqB,EAAE;IACxC,IAAI,EAAE,IAAI,cAAc,EAAE;IAC1B,MAAM,EAAE,IAAI,gBAAgB,EAAE;CAC/B,CAAA;AAQD,MAAM,UAAU,gBAAgB,CAC9B,WAAwB,EACxB,
|
|
1
|
+
{"version":3,"file":"grouped.js","sourceRoot":"","sources":["../../../src/core/serialization/grouped.ts"],"names":[],"mappings":"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"}
|
package/dist/core/types.d.ts
CHANGED
|
@@ -42,6 +42,10 @@ export interface AGGridUrlSyncConfig {
|
|
|
42
42
|
/**
|
|
43
43
|
* Optional error handler for parsing errors.
|
|
44
44
|
* Allows graceful error handling without breaking the application.
|
|
45
|
+
*
|
|
46
|
+
* In grouped mode, an error that comes from the grouped URL value is an
|
|
47
|
+
* `InvalidSerializationError`, and the original error is in `error.cause`.
|
|
48
|
+
* In individual mode, the same failure arrives with no wrapper.
|
|
45
49
|
*/
|
|
46
50
|
onParseError?: (error: Error) => void;
|
|
47
51
|
/**
|
|
@@ -60,10 +64,29 @@ export interface AGGridUrlSyncConfig {
|
|
|
60
64
|
*/
|
|
61
65
|
format?: SerializationFormat;
|
|
62
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* Configuration for URL parsing and serialization operations that don't require GridApi.
|
|
69
|
+
* Use this type when you only need to parse filters from URLs or serialize filters to URLs
|
|
70
|
+
* without actually applying them to a grid.
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```typescript
|
|
74
|
+
* // Parse filters without a grid instance
|
|
75
|
+
* const config: ParseConfig = {
|
|
76
|
+
* ...DEFAULT_CONFIG,
|
|
77
|
+
* onParseError: (error) => console.error(error)
|
|
78
|
+
* }
|
|
79
|
+
* const filters = parseUrlFilters(url, config)
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
export interface ParseConfig extends Required<AGGridUrlSyncConfig> {
|
|
83
|
+
/** AG Grid API instance - not read by parsing/serialization operations */
|
|
84
|
+
gridApi?: AGGridApi | null;
|
|
85
|
+
}
|
|
63
86
|
/**
|
|
64
87
|
* Internal configuration with all required fields and runtime dependencies
|
|
65
88
|
*/
|
|
66
|
-
export interface InternalConfig extends
|
|
89
|
+
export interface InternalConfig extends ParseConfig {
|
|
67
90
|
/** AG Grid API instance for filter operations */
|
|
68
91
|
gridApi: AGGridApi;
|
|
69
92
|
}
|
|
@@ -276,10 +299,20 @@ export interface GroupedSerializationResult {
|
|
|
276
299
|
* Format-specific serializer interface
|
|
277
300
|
*/
|
|
278
301
|
export interface FormatSerializer {
|
|
279
|
-
/**
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
302
|
+
/**
|
|
303
|
+
* Serialize filter state to string
|
|
304
|
+
* @param config - Caller's configuration. All serializers honour
|
|
305
|
+
* maxValueLength and onParseError. JSON and Base64 drop over-length text
|
|
306
|
+
* values and report them through onParseError (see #213, #207).
|
|
307
|
+
*/
|
|
308
|
+
serialize(filterState: FilterState, config?: ParseConfig): string;
|
|
309
|
+
/**
|
|
310
|
+
* Deserialize string to filter state
|
|
311
|
+
* @param config - Caller's configuration. All serializers honour
|
|
312
|
+
* maxValueLength and onParseError. JSON and Base64 drop over-length text
|
|
313
|
+
* values and report them through onParseError (see #213, #207).
|
|
314
|
+
*/
|
|
315
|
+
deserialize(value: string, config?: ParseConfig): FilterState;
|
|
283
316
|
/** Format identifier */
|
|
284
317
|
format: SerializationFormat;
|
|
285
318
|
}
|
package/dist/core/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import type { FilterState,
|
|
1
|
+
import type { FilterState, ParseConfig } from './types.js';
|
|
2
|
+
import { serializeFilters } from './individual-params.js';
|
|
3
|
+
export { serializeFilters };
|
|
2
4
|
/**
|
|
3
|
-
*
|
|
5
|
+
* Generates a URL with the current filter state.
|
|
6
|
+
* This function does not require a GridApi instance: leave `config.gridApi` out
|
|
7
|
+
* (or set it to `null`) when you only need to generate URLs without a grid.
|
|
8
|
+
*
|
|
9
|
+
* The host app's own params are kept, including repeated keys. Filter params
|
|
10
|
+
* from either mode are replaced.
|
|
4
11
|
*/
|
|
5
|
-
export declare function
|
|
6
|
-
/**
|
|
7
|
-
* Generates a URL with the current filter state
|
|
8
|
-
*/
|
|
9
|
-
export declare function generateUrl(baseUrl: string, filterState: FilterState, config: InternalConfig): string;
|
|
12
|
+
export declare function generateUrl(baseUrl: string, filterState: FilterState, config: ParseConfig): string;
|
|
@@ -1,132 +1,38 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { INTERNAL_TO_URL_OPERATION_MAP } from './types.js';
|
|
1
|
+
import { serializeFilters } from './individual-params.js';
|
|
3
2
|
import { serializeGrouped } from './serialization/grouped.js';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
};
|
|
9
|
-
function serializeColumnFilter(columnName, filter, paramPrefix) {
|
|
10
|
-
const urlOperation = INTERNAL_TO_URL_OPERATION_MAP[filter.type];
|
|
11
|
-
if (!urlOperation)
|
|
12
|
-
return '';
|
|
13
|
-
const paramName = `${paramPrefix}${columnName}_${urlOperation}`;
|
|
14
|
-
if (filter.type === 'dateRange' && filter.filterType === FILTER_TYPES.DATE) {
|
|
15
|
-
if ('filterTo' in filter && filter.filterTo !== undefined) {
|
|
16
|
-
return `${paramName}=${filter.filter},${filter.filterTo}`;
|
|
17
|
-
}
|
|
18
|
-
return '';
|
|
19
|
-
}
|
|
20
|
-
if (filter.type === 'inRange' && filter.filterType === FILTER_TYPES.NUMBER) {
|
|
21
|
-
if ('filterTo' in filter && filter.filterTo !== undefined) {
|
|
22
|
-
return `${paramName}=${filter.filter},${filter.filterTo}`;
|
|
23
|
-
}
|
|
24
|
-
return '';
|
|
25
|
-
}
|
|
26
|
-
if (filter.type === 'blank' || filter.type === 'notBlank') {
|
|
27
|
-
return `${paramName}=true`;
|
|
28
|
-
}
|
|
29
|
-
if (filter.filterType === FILTER_TYPES.DATE) {
|
|
30
|
-
return `${paramName}=${filter.filter}`;
|
|
31
|
-
}
|
|
32
|
-
if (filter.filterType === FILTER_TYPES.NUMBER) {
|
|
33
|
-
return `${paramName}=${filter.filter}`;
|
|
34
|
-
}
|
|
35
|
-
if (filter.filterType === FILTER_TYPES.TEXT && filter.filter) {
|
|
36
|
-
return `${paramName}=${encodeURIComponent(filter.filter.toString())}`;
|
|
37
|
-
}
|
|
38
|
-
return '';
|
|
39
|
-
}
|
|
40
|
-
function appendSerializedParam(serialized, params, isRangeOperation = false) {
|
|
41
|
-
const [paramName, paramValue] = serialized.split('=');
|
|
42
|
-
if (paramName && paramValue) {
|
|
43
|
-
if (isRangeOperation) {
|
|
44
|
-
params.append(paramName, paramValue);
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
params.append(paramName, decodeURIComponent(paramValue));
|
|
48
|
-
}
|
|
49
|
-
}
|
|
3
|
+
export { serializeFilters };
|
|
4
|
+
function isFilterParam(key, config) {
|
|
5
|
+
return (key === config.groupedParam ||
|
|
6
|
+
(Boolean(config.paramPrefix) && key.startsWith(config.paramPrefix)));
|
|
50
7
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
for (const [column, filter] of Object.entries(filterState)) {
|
|
54
|
-
if (filter.filterType !== FILTER_TYPES.TEXT &&
|
|
55
|
-
filter.filterType !== FILTER_TYPES.NUMBER &&
|
|
56
|
-
filter.filterType !== FILTER_TYPES.DATE)
|
|
57
|
-
continue;
|
|
58
|
-
if (filter.filterType === FILTER_TYPES.TEXT) {
|
|
59
|
-
const validatedValue = validateFilterValue(filter.filter, config, filter.type);
|
|
60
|
-
const updatedFilter = { ...filter, filter: validatedValue };
|
|
61
|
-
const serialized = serializeColumnFilter(column, updatedFilter, config.paramPrefix);
|
|
62
|
-
if (serialized) {
|
|
63
|
-
appendSerializedParam(serialized, params, false);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
const serialized = serializeColumnFilter(column, filter, config.paramPrefix);
|
|
68
|
-
if (serialized) {
|
|
69
|
-
const isRangeOp = filter.type === 'inRange' || filter.type === 'dateRange';
|
|
70
|
-
appendSerializedParam(serialized, params, isRangeOp);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
return params;
|
|
8
|
+
function getHostParams(url, config) {
|
|
9
|
+
return [...url.searchParams].filter(([key]) => !isFilterParam(key, config));
|
|
75
10
|
}
|
|
76
|
-
function
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
continue;
|
|
82
|
-
}
|
|
83
|
-
params.set(key, value);
|
|
11
|
+
function toUrlString(url, params) {
|
|
12
|
+
const queryString = params.toString();
|
|
13
|
+
if (queryString) {
|
|
14
|
+
url.search = queryString;
|
|
15
|
+
return url.toString();
|
|
84
16
|
}
|
|
85
|
-
|
|
17
|
+
url.search = '';
|
|
18
|
+
const result = url.toString();
|
|
19
|
+
return result === `${url.origin}/` ? result.slice(0, -1) : result;
|
|
86
20
|
}
|
|
87
21
|
export function generateUrl(baseUrl, filterState, config) {
|
|
88
22
|
const url = new URL(baseUrl);
|
|
23
|
+
const hostParams = getHostParams(url, config);
|
|
89
24
|
if (config.serialization === 'grouped') {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
for (const [key, value] of preservedParams.entries()) {
|
|
95
|
-
filterParams.append(key, value);
|
|
96
|
-
}
|
|
97
|
-
const queryString = filterParams.toString();
|
|
98
|
-
if (!queryString) {
|
|
99
|
-
let result = url.toString().replace(/\?$/, '');
|
|
100
|
-
if (result.endsWith('/') && result === url.origin + '/') {
|
|
101
|
-
result = result.slice(0, -1);
|
|
25
|
+
const params = new URLSearchParams(hostParams);
|
|
26
|
+
const groupedResult = serializeGrouped(filterState, config);
|
|
27
|
+
if (groupedResult.value) {
|
|
28
|
+
params.append(groupedResult.paramName, groupedResult.value);
|
|
102
29
|
}
|
|
103
|
-
return
|
|
30
|
+
return toUrlString(url, params);
|
|
104
31
|
}
|
|
105
|
-
|
|
106
|
-
|
|
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;
|
|
32
|
+
const params = serializeFilters(filterState, config);
|
|
33
|
+
for (const [key, value] of hostParams) {
|
|
34
|
+
params.append(key, value);
|
|
129
35
|
}
|
|
130
|
-
return url
|
|
36
|
+
return toUrlString(url, params);
|
|
131
37
|
}
|
|
132
38
|
//# sourceMappingURL=url-generator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"url-generator.js","sourceRoot":"","sources":["../../src/core/url-generator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"url-generator.js","sourceRoot":"","sources":["../../src/core/url-generator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAE7D,OAAO,EAAE,gBAAgB,EAAE,CAAA;AAQ3B,SAAS,aAAa,CAAC,GAAW,EAAE,MAAmB;IACrD,OAAO,CACL,GAAG,KAAK,MAAM,CAAC,YAAY;QAC3B,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CACpE,CAAA;AACH,CAAC;AAMD,SAAS,aAAa,CAAC,GAAQ,EAAE,MAAmB;IAClD,OAAO,CAAC,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAA;AAC7E,CAAC;AAMD,SAAS,WAAW,CAAC,GAAQ,EAAE,MAAuB;IACpD,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAA;IACrC,IAAI,WAAW,EAAE,CAAC;QAChB,GAAG,CAAC,MAAM,GAAG,WAAW,CAAA;QACxB,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAA;IACvB,CAAC;IAED,GAAG,CAAC,MAAM,GAAG,EAAE,CAAA;IACf,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAA;IAC7B,OAAO,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;AACnE,CAAC;AAUD,MAAM,UAAU,WAAW,CACzB,OAAe,EACf,WAAwB,EACxB,MAAmB;IAEnB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAA;IAC5B,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IAE7C,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QAEvC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,UAAU,CAAC,CAAA;QAC9C,MAAM,aAAa,GAAG,gBAAgB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;QAC3D,IAAI,aAAa,CAAC,KAAK,EAAE,CAAC;YACxB,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,aAAa,CAAC,KAAK,CAAC,CAAA;QAC7D,CAAC;QACD,OAAO,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IACjC,CAAC;IAGD,MAAM,MAAM,GAAG,gBAAgB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;IACpD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,UAAU,EAAE,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IAC3B,CAAC;IACD,OAAO,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;AACjC,CAAC"}
|
|
@@ -1,9 +1,21 @@
|
|
|
1
|
-
import type { FilterState,
|
|
1
|
+
import type { FilterState, ParseConfig } from './types.js';
|
|
2
|
+
import { parseFilterParam } from './individual-params.js';
|
|
3
|
+
export { parseFilterParam };
|
|
2
4
|
/**
|
|
3
|
-
*
|
|
5
|
+
* Converts URL search params into a filter state object.
|
|
6
|
+
* This function does not require a GridApi instance: leave `config.gridApi` out
|
|
7
|
+
* (or set it to `null`) when you only need to parse filters without a grid.
|
|
8
|
+
*
|
|
9
|
+
* Accepts an absolute URL, a relative path, a query string or a raw query
|
|
10
|
+
* string (see {@link toUrl}). A param that is not valid is skipped and reported
|
|
11
|
+
* through `onParseError`.
|
|
12
|
+
*
|
|
13
|
+
* If the URL has a non-empty `config.groupedParam`, it is decoded with
|
|
14
|
+
* `config.format` and the prefixed params are not read. This works in both
|
|
15
|
+
* serialization modes, so a grouped link opens in an app in individual mode
|
|
16
|
+
* when the param name and format match.
|
|
17
|
+
*
|
|
18
|
+
* @throws InvalidURLError if the input is an absolute URL that is not valid,
|
|
19
|
+
* or a host with no scheme
|
|
4
20
|
*/
|
|
5
|
-
export declare function
|
|
6
|
-
/**
|
|
7
|
-
* Converts URL search params into a filter state object
|
|
8
|
-
*/
|
|
9
|
-
export declare function parseUrlFilters(url: string, config: InternalConfig): FilterState;
|
|
21
|
+
export declare function parseUrlFilters(url: string, config: ParseConfig): FilterState;
|