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.
Files changed (42) hide show
  1. package/README.md +407 -43
  2. package/dist/{ag-grid-url-sync.js → core/ag-grid-url-sync.js} +4 -2
  3. package/dist/core/ag-grid-url-sync.js.map +1 -0
  4. package/dist/core/grid-integration.d.ts +9 -0
  5. package/dist/core/grid-integration.js +66 -0
  6. package/dist/core/grid-integration.js.map +1 -0
  7. package/dist/core/index.d.ts +6 -0
  8. package/dist/core/index.js +11 -0
  9. package/dist/core/index.js.map +1 -0
  10. package/dist/core/types.d.ts +112 -0
  11. package/dist/core/types.js +79 -0
  12. package/dist/core/types.js.map +1 -0
  13. package/dist/core/url-generator.d.ts +9 -0
  14. package/dist/core/url-generator.js +42 -0
  15. package/dist/core/url-generator.js.map +1 -0
  16. package/dist/core/url-parser.d.ts +9 -0
  17. package/dist/core/url-parser.js +85 -0
  18. package/dist/core/url-parser.js.map +1 -0
  19. package/dist/core/validation.d.ts +18 -0
  20. package/dist/core/validation.js +28 -0
  21. package/dist/core/validation.js.map +1 -0
  22. package/dist/index.d.ts +6 -3
  23. package/dist/index.js +11 -3
  24. package/dist/index.js.map +1 -1
  25. package/dist/react/index.d.ts +3 -0
  26. package/dist/react/index.js +2 -0
  27. package/dist/react/index.js.map +1 -0
  28. package/dist/react/types.d.ts +64 -0
  29. package/dist/react/types.js +2 -0
  30. package/dist/react/types.js.map +1 -0
  31. package/dist/react/use-ag-grid-url-sync.d.ts +10 -0
  32. package/dist/react/use-ag-grid-url-sync.js +215 -0
  33. package/dist/react/use-ag-grid-url-sync.js.map +1 -0
  34. package/package.json +95 -6
  35. package/dist/ag-grid-url-sync.js.map +0 -1
  36. package/dist/types.d.ts +0 -69
  37. package/dist/types.js +0 -31
  38. package/dist/types.js.map +0 -1
  39. package/dist/utils.d.ts +0 -36
  40. package/dist/utils.js +0 -188
  41. package/dist/utils.js.map +0 -1
  42. /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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"}