ag-grid-url-sync 0.1.1 → 0.2.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 +407 -43
- package/dist/{ag-grid-url-sync.js → core/ag-grid-url-sync.js} +4 -2
- package/dist/core/ag-grid-url-sync.js.map +1 -0
- package/dist/core/grid-integration.d.ts +9 -0
- package/dist/core/grid-integration.js +66 -0
- package/dist/core/grid-integration.js.map +1 -0
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.js +11 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/types.d.ts +112 -0
- package/dist/core/types.js +79 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/url-generator.d.ts +9 -0
- package/dist/core/url-generator.js +42 -0
- package/dist/core/url-generator.js.map +1 -0
- package/dist/core/url-parser.d.ts +9 -0
- package/dist/core/url-parser.js +85 -0
- package/dist/core/url-parser.js.map +1 -0
- package/dist/core/validation.d.ts +18 -0
- package/dist/core/validation.js +28 -0
- package/dist/core/validation.js.map +1 -0
- package/dist/index.d.ts +6 -3
- package/dist/index.js +11 -3
- package/dist/index.js.map +1 -1
- package/dist/react/index.d.ts +3 -0
- package/dist/react/index.js +2 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/types.d.ts +64 -0
- package/dist/react/types.js +2 -0
- package/dist/react/types.js.map +1 -0
- package/dist/react/use-ag-grid-url-sync.d.ts +10 -0
- package/dist/react/use-ag-grid-url-sync.js +215 -0
- package/dist/react/use-ag-grid-url-sync.js.map +1 -0
- package/package.json +95 -6
- package/dist/ag-grid-url-sync.js.map +0 -1
- package/dist/types.d.ts +0 -69
- package/dist/types.js +0 -31
- package/dist/types.js.map +0 -1
- package/dist/utils.d.ts +0 -36
- package/dist/utils.js +0 -188
- package/dist/utils.js.map +0 -1
- /package/dist/{ag-grid-url-sync.d.ts → core/ag-grid-url-sync.d.ts} +0 -0
package/dist/utils.js
DELETED
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
import { InvalidFilterError, InvalidURLError } from './types.js';
|
|
2
|
-
/**
|
|
3
|
-
* Default configuration values
|
|
4
|
-
*/
|
|
5
|
-
export const DEFAULT_CONFIG = {
|
|
6
|
-
paramPrefix: 'f_',
|
|
7
|
-
maxValueLength: 200
|
|
8
|
-
};
|
|
9
|
-
/**
|
|
10
|
-
* Operation mapping between URL parameters and AG Grid filter types
|
|
11
|
-
*/
|
|
12
|
-
const OPERATION_MAP = {
|
|
13
|
-
contains: 'contains',
|
|
14
|
-
eq: 'eq'
|
|
15
|
-
};
|
|
16
|
-
/**
|
|
17
|
-
* Validates a filter value against configuration constraints
|
|
18
|
-
*/
|
|
19
|
-
export function validateFilterValue(value, config) {
|
|
20
|
-
if (value.length > config.maxValueLength) {
|
|
21
|
-
throw new InvalidFilterError(`Filter value exceeds maximum length of ${config.maxValueLength} characters`);
|
|
22
|
-
}
|
|
23
|
-
return value;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Extracts column name and operation from a filter parameter
|
|
27
|
-
*/
|
|
28
|
-
function extractColumnAndOperation(param, expectedPrefix) {
|
|
29
|
-
const ensureTrailingUnderscore = (prefix) => prefix.endsWith('_') ? prefix : prefix + '_';
|
|
30
|
-
const sanitizedPrefix = expectedPrefix
|
|
31
|
-
? ensureTrailingUnderscore(expectedPrefix)
|
|
32
|
-
: ensureTrailingUnderscore(DEFAULT_CONFIG.paramPrefix);
|
|
33
|
-
const prefixToCheck = sanitizedPrefix.slice(0, -1);
|
|
34
|
-
if (!param.startsWith(prefixToCheck + '_')) {
|
|
35
|
-
throw new InvalidFilterError(`Invalid filter prefix in parameter: ${param}`);
|
|
36
|
-
}
|
|
37
|
-
// Remove prefix and find the last underscore to separate column from operation
|
|
38
|
-
const withoutPrefix = param.substring(prefixToCheck.length + 1);
|
|
39
|
-
const lastUnderscoreIndex = withoutPrefix.lastIndexOf('_');
|
|
40
|
-
if (lastUnderscoreIndex === -1) {
|
|
41
|
-
throw new InvalidFilterError(`Invalid filter parameter format: ${param}`);
|
|
42
|
-
}
|
|
43
|
-
const column = withoutPrefix.substring(0, lastUnderscoreIndex);
|
|
44
|
-
const operation = withoutPrefix.substring(lastUnderscoreIndex + 1);
|
|
45
|
-
if (!column.trim()) {
|
|
46
|
-
throw new InvalidFilterError(`Empty column name in parameter: ${param}`);
|
|
47
|
-
}
|
|
48
|
-
return { column, operation };
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Parses a URL parameter into a column filter
|
|
52
|
-
*/
|
|
53
|
-
export function parseFilterParam(param, value, expectedPrefix) {
|
|
54
|
-
const { operation } = extractColumnAndOperation(param, expectedPrefix);
|
|
55
|
-
const filterOp = OPERATION_MAP[operation];
|
|
56
|
-
if (!filterOp) {
|
|
57
|
-
throw new InvalidFilterError(`Unsupported filter operation: ${operation}`);
|
|
58
|
-
}
|
|
59
|
-
return {
|
|
60
|
-
filterType: 'text',
|
|
61
|
-
type: filterOp,
|
|
62
|
-
filter: value || ''
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Converts URL search params into a filter state object
|
|
67
|
-
*/
|
|
68
|
-
export function parseUrlFilters(url, config) {
|
|
69
|
-
try {
|
|
70
|
-
const urlObj = new URL(url);
|
|
71
|
-
const filterState = {};
|
|
72
|
-
for (const [param, value] of urlObj.searchParams.entries()) {
|
|
73
|
-
if (!param.startsWith(config.paramPrefix))
|
|
74
|
-
continue;
|
|
75
|
-
try {
|
|
76
|
-
// Extract column name and parse the filter parameter
|
|
77
|
-
const { column: columnName } = extractColumnAndOperation(param, config.paramPrefix);
|
|
78
|
-
const filterParam = parseFilterParam(param, value, config.paramPrefix);
|
|
79
|
-
const validatedValue = validateFilterValue(value, config);
|
|
80
|
-
filterState[columnName] = {
|
|
81
|
-
...filterParam,
|
|
82
|
-
filter: validatedValue
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
catch (err) {
|
|
86
|
-
if (config.onParseError) {
|
|
87
|
-
config.onParseError(err);
|
|
88
|
-
}
|
|
89
|
-
// Skip invalid filters but continue processing
|
|
90
|
-
continue;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
return filterState;
|
|
94
|
-
}
|
|
95
|
-
catch (err) {
|
|
96
|
-
throw new InvalidURLError(`Failed to parse URL: ${err.message}`);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Converts a filter state object into URL search parameters
|
|
101
|
-
*/
|
|
102
|
-
export function serializeFilters(filterState, config) {
|
|
103
|
-
const params = new URLSearchParams();
|
|
104
|
-
for (const [column, filter] of Object.entries(filterState)) {
|
|
105
|
-
if (filter.filterType !== 'text')
|
|
106
|
-
continue;
|
|
107
|
-
const operation = filter.type === 'contains' ? 'contains' : 'eq';
|
|
108
|
-
const paramName = `${config.paramPrefix}${column}_${operation}`;
|
|
109
|
-
const value = validateFilterValue(filter.filter, config);
|
|
110
|
-
// URLSearchParams already handles encoding, so don't double-encode
|
|
111
|
-
params.append(paramName, value);
|
|
112
|
-
}
|
|
113
|
-
return params;
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Generates a URL with the current filter state
|
|
117
|
-
*/
|
|
118
|
-
export function generateUrl(baseUrl, filterState, config) {
|
|
119
|
-
const url = new URL(baseUrl);
|
|
120
|
-
const filterParams = serializeFilters(filterState, config);
|
|
121
|
-
// Preserve existing non-filter parameters
|
|
122
|
-
for (const [key, value] of url.searchParams.entries()) {
|
|
123
|
-
if (!key.startsWith(config.paramPrefix)) {
|
|
124
|
-
filterParams.append(key, value);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
url.search = filterParams.toString();
|
|
128
|
-
return url.toString();
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Gets the current filter model from AG Grid
|
|
132
|
-
*/
|
|
133
|
-
export function getFilterModel(config) {
|
|
134
|
-
try {
|
|
135
|
-
const model = config.gridApi.getFilterModel();
|
|
136
|
-
const filterState = {};
|
|
137
|
-
if (!model || typeof model !== 'object') {
|
|
138
|
-
return filterState;
|
|
139
|
-
}
|
|
140
|
-
for (const [column, filter] of Object.entries(model)) {
|
|
141
|
-
if (!filter || typeof filter !== 'object')
|
|
142
|
-
continue;
|
|
143
|
-
const { filterType, type, filter: value } = filter;
|
|
144
|
-
if (filterType !== 'text' || !value)
|
|
145
|
-
continue;
|
|
146
|
-
if (type === 'contains' || type === 'equals') {
|
|
147
|
-
filterState[column] = {
|
|
148
|
-
filterType: 'text',
|
|
149
|
-
type: type === 'equals' ? 'eq' : 'contains',
|
|
150
|
-
filter: value
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
return filterState;
|
|
155
|
-
}
|
|
156
|
-
catch (error) {
|
|
157
|
-
if (config.onParseError) {
|
|
158
|
-
config.onParseError(error);
|
|
159
|
-
}
|
|
160
|
-
return {};
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
/**
|
|
164
|
-
* Applies a filter state to AG Grid
|
|
165
|
-
*/
|
|
166
|
-
export function applyFilterModel(filterState, config) {
|
|
167
|
-
try {
|
|
168
|
-
const model = {};
|
|
169
|
-
for (const [column, filter] of Object.entries(filterState)) {
|
|
170
|
-
if (filter &&
|
|
171
|
-
typeof filter === 'object' &&
|
|
172
|
-
filter.filterType === 'text') {
|
|
173
|
-
model[column] = {
|
|
174
|
-
filterType: filter.filterType,
|
|
175
|
-
type: filter.type === 'eq' ? 'equals' : filter.type,
|
|
176
|
-
filter: filter.filter
|
|
177
|
-
};
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
config.gridApi.setFilterModel(model);
|
|
181
|
-
}
|
|
182
|
-
catch (error) {
|
|
183
|
-
if (config.onParseError) {
|
|
184
|
-
config.onParseError(error);
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
//# sourceMappingURL=utils.js.map
|
package/dist/utils.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|