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
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import { useState, useEffect, useRef, useCallback, useMemo } from 'react';
|
|
2
|
+
import { AGGridUrlSync } from '../core/ag-grid-url-sync.js';
|
|
3
|
+
import { parseUrlFilters as parseFilters } from '../core/url-parser.js';
|
|
4
|
+
import { DEFAULT_CONFIG } from '../core/validation.js';
|
|
5
|
+
/**
|
|
6
|
+
* React hook for AG Grid URL synchronization
|
|
7
|
+
*
|
|
8
|
+
* @param gridApi - AG Grid API instance (can be null during initialization)
|
|
9
|
+
* @param options - Configuration options for the hook
|
|
10
|
+
* @returns Hook API for URL synchronization
|
|
11
|
+
*/
|
|
12
|
+
export function useAGGridUrlSync(gridApi, options = {}) {
|
|
13
|
+
const { autoApplyOnMount = false, enabledWhenReady = true, ...coreOptions } = options;
|
|
14
|
+
// Internal state
|
|
15
|
+
const [isReady, setIsReady] = useState(false);
|
|
16
|
+
const [currentUrl, setCurrentUrl] = useState('');
|
|
17
|
+
const [hasFilters, setHasFilters] = useState(false);
|
|
18
|
+
// Refs to track state and prevent memory leaks
|
|
19
|
+
const urlSyncRef = useRef(null);
|
|
20
|
+
const autoAppliedRef = useRef(false);
|
|
21
|
+
const lastGridApiRef = useRef(null);
|
|
22
|
+
// Initialize or update URL sync instance when grid API changes
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
if (gridApi && enabledWhenReady) {
|
|
25
|
+
// Clean up previous instance if grid API changed
|
|
26
|
+
if (lastGridApiRef.current && lastGridApiRef.current !== gridApi) {
|
|
27
|
+
urlSyncRef.current?.destroy();
|
|
28
|
+
urlSyncRef.current = null;
|
|
29
|
+
autoAppliedRef.current = false;
|
|
30
|
+
}
|
|
31
|
+
// Create new instance if needed
|
|
32
|
+
if (!urlSyncRef.current) {
|
|
33
|
+
try {
|
|
34
|
+
urlSyncRef.current = new AGGridUrlSync(gridApi, coreOptions);
|
|
35
|
+
setIsReady(true);
|
|
36
|
+
lastGridApiRef.current = gridApi;
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
console.error('Failed to initialize AG Grid URL Sync:', error);
|
|
40
|
+
setIsReady(false);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
// Clean up when grid API is null or disabled
|
|
46
|
+
if (urlSyncRef.current) {
|
|
47
|
+
urlSyncRef.current.destroy();
|
|
48
|
+
urlSyncRef.current = null;
|
|
49
|
+
autoAppliedRef.current = false;
|
|
50
|
+
}
|
|
51
|
+
setIsReady(false);
|
|
52
|
+
lastGridApiRef.current = null;
|
|
53
|
+
}
|
|
54
|
+
}, [gridApi, enabledWhenReady, coreOptions]);
|
|
55
|
+
// Auto-apply URL filters on mount if enabled
|
|
56
|
+
useEffect(() => {
|
|
57
|
+
if (isReady &&
|
|
58
|
+
autoApplyOnMount &&
|
|
59
|
+
!autoAppliedRef.current &&
|
|
60
|
+
urlSyncRef.current) {
|
|
61
|
+
try {
|
|
62
|
+
urlSyncRef.current.applyFromUrl();
|
|
63
|
+
autoAppliedRef.current = true;
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
console.error('Failed to auto-apply URL filters:', error);
|
|
67
|
+
coreOptions.onParseError?.(error);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}, [isReady, autoApplyOnMount, coreOptions]);
|
|
71
|
+
// Update current URL and filter state on filter changes
|
|
72
|
+
useEffect(() => {
|
|
73
|
+
if (!isReady || !urlSyncRef.current || !gridApi) {
|
|
74
|
+
setCurrentUrl('');
|
|
75
|
+
setHasFilters(false);
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
const updateState = () => {
|
|
79
|
+
try {
|
|
80
|
+
const newUrl = urlSyncRef.current.generateUrl();
|
|
81
|
+
setCurrentUrl(newUrl);
|
|
82
|
+
// Check if there are active filters by comparing query params
|
|
83
|
+
const queryParams = urlSyncRef.current.getQueryParams();
|
|
84
|
+
const searchParams = new URLSearchParams(queryParams);
|
|
85
|
+
setHasFilters([...searchParams.entries()].length > 0); // Check if there are any query parameters
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
console.error('Failed to update URL state:', error);
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
// Attach event listener for filter changes
|
|
92
|
+
const onFilterChanged = () => updateState();
|
|
93
|
+
gridApi.addEventListener('filterChanged', onFilterChanged);
|
|
94
|
+
// Initial state update
|
|
95
|
+
updateState();
|
|
96
|
+
// Cleanup event listener on unmount or gridApi change
|
|
97
|
+
return () => {
|
|
98
|
+
gridApi.removeEventListener('filterChanged', onFilterChanged);
|
|
99
|
+
};
|
|
100
|
+
}, [isReady, gridApi]);
|
|
101
|
+
// Cleanup on unmount
|
|
102
|
+
useEffect(() => {
|
|
103
|
+
return () => {
|
|
104
|
+
if (urlSyncRef.current) {
|
|
105
|
+
urlSyncRef.current.destroy();
|
|
106
|
+
urlSyncRef.current = null;
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
}, []);
|
|
110
|
+
// Memoized API methods
|
|
111
|
+
const shareUrl = useCallback((baseUrl) => {
|
|
112
|
+
if (!urlSyncRef.current) {
|
|
113
|
+
return (baseUrl || (typeof window !== 'undefined' ? window.location.href : ''));
|
|
114
|
+
}
|
|
115
|
+
try {
|
|
116
|
+
return urlSyncRef.current.generateUrl(baseUrl);
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
console.error('Failed to generate share URL:', error);
|
|
120
|
+
return (baseUrl || (typeof window !== 'undefined' ? window.location.href : ''));
|
|
121
|
+
}
|
|
122
|
+
}, []);
|
|
123
|
+
const getQueryParams = useCallback(() => {
|
|
124
|
+
if (!urlSyncRef.current) {
|
|
125
|
+
return '';
|
|
126
|
+
}
|
|
127
|
+
try {
|
|
128
|
+
return urlSyncRef.current.getQueryParams();
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
console.error('Failed to get query params:', error);
|
|
132
|
+
return '';
|
|
133
|
+
}
|
|
134
|
+
}, []);
|
|
135
|
+
const applyUrlFilters = useCallback((url) => {
|
|
136
|
+
if (!urlSyncRef.current) {
|
|
137
|
+
console.warn('AG Grid URL Sync not ready');
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
try {
|
|
141
|
+
urlSyncRef.current.applyFromUrl(url);
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
console.error('Failed to apply URL filters:', error);
|
|
145
|
+
coreOptions.onParseError?.(error);
|
|
146
|
+
}
|
|
147
|
+
}, [coreOptions]);
|
|
148
|
+
const clearFilters = useCallback(() => {
|
|
149
|
+
if (!urlSyncRef.current) {
|
|
150
|
+
console.warn('AG Grid URL Sync not ready');
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
try {
|
|
154
|
+
urlSyncRef.current.clearFilters();
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
console.error('Failed to clear filters:', error);
|
|
158
|
+
}
|
|
159
|
+
}, []);
|
|
160
|
+
const parseUrlFilters = useCallback((url) => {
|
|
161
|
+
if (!gridApi) {
|
|
162
|
+
console.warn('AG Grid API not available');
|
|
163
|
+
return {};
|
|
164
|
+
}
|
|
165
|
+
try {
|
|
166
|
+
const config = {
|
|
167
|
+
gridApi,
|
|
168
|
+
paramPrefix: coreOptions.paramPrefix ?? DEFAULT_CONFIG.paramPrefix,
|
|
169
|
+
maxValueLength: coreOptions.maxValueLength ?? DEFAULT_CONFIG.maxValueLength,
|
|
170
|
+
onParseError: coreOptions.onParseError ?? (() => { })
|
|
171
|
+
};
|
|
172
|
+
return parseFilters(url, config);
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
console.error('Failed to parse URL filters:', error);
|
|
176
|
+
coreOptions.onParseError?.(error);
|
|
177
|
+
return {};
|
|
178
|
+
}
|
|
179
|
+
}, [coreOptions, gridApi]);
|
|
180
|
+
const applyFilters = useCallback((filters) => {
|
|
181
|
+
if (!urlSyncRef.current) {
|
|
182
|
+
console.warn('AG Grid URL Sync not ready');
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
try {
|
|
186
|
+
urlSyncRef.current.applyFilters(filters);
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
console.error('Failed to apply filters:', error);
|
|
190
|
+
}
|
|
191
|
+
}, []);
|
|
192
|
+
// Return the hook API
|
|
193
|
+
return useMemo(() => ({
|
|
194
|
+
shareUrl,
|
|
195
|
+
getQueryParams,
|
|
196
|
+
applyUrlFilters,
|
|
197
|
+
clearFilters,
|
|
198
|
+
isReady,
|
|
199
|
+
currentUrl,
|
|
200
|
+
hasFilters,
|
|
201
|
+
parseUrlFilters,
|
|
202
|
+
applyFilters
|
|
203
|
+
}), [
|
|
204
|
+
shareUrl,
|
|
205
|
+
getQueryParams,
|
|
206
|
+
applyUrlFilters,
|
|
207
|
+
clearFilters,
|
|
208
|
+
isReady,
|
|
209
|
+
currentUrl,
|
|
210
|
+
hasFilters,
|
|
211
|
+
parseUrlFilters,
|
|
212
|
+
applyFilters
|
|
213
|
+
]);
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=use-ag-grid-url-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-ag-grid-url-sync.js","sourceRoot":"","sources":["../../src/react/use-ag-grid-url-sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAEzE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAC3D,OAAO,EAAE,eAAe,IAAI,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAOtD;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAAuB,EACvB,UAAmC,EAAE;IAErC,MAAM,EACJ,gBAAgB,GAAG,KAAK,EACxB,gBAAgB,GAAG,IAAI,EACvB,GAAG,WAAW,EACf,GAAG,OAAO,CAAA;IAEX,iBAAiB;IACjB,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC7C,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAChD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEnD,+CAA+C;IAC/C,MAAM,UAAU,GAAG,MAAM,CAAuB,IAAI,CAAC,CAAA;IACrD,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IACpC,MAAM,cAAc,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAA;IAEnD,+DAA+D;IAC/D,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,IAAI,gBAAgB,EAAE,CAAC;YAChC,iDAAiD;YACjD,IAAI,cAAc,CAAC,OAAO,IAAI,cAAc,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;gBACjE,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,CAAA;gBAC7B,UAAU,CAAC,OAAO,GAAG,IAAI,CAAA;gBACzB,cAAc,CAAC,OAAO,GAAG,KAAK,CAAA;YAChC,CAAC;YAED,gCAAgC;YAChC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;gBACxB,IAAI,CAAC;oBACH,UAAU,CAAC,OAAO,GAAG,IAAI,aAAa,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;oBAC5D,UAAU,CAAC,IAAI,CAAC,CAAA;oBAChB,cAAc,CAAC,OAAO,GAAG,OAAO,CAAA;gBAClC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAA;oBAC9D,UAAU,CAAC,KAAK,CAAC,CAAA;gBACnB,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,6CAA6C;YAC7C,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;gBACvB,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,CAAA;gBAC5B,UAAU,CAAC,OAAO,GAAG,IAAI,CAAA;gBACzB,cAAc,CAAC,OAAO,GAAG,KAAK,CAAA;YAChC,CAAC;YACD,UAAU,CAAC,KAAK,CAAC,CAAA;YACjB,cAAc,CAAC,OAAO,GAAG,IAAI,CAAA;QAC/B,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,EAAE,WAAW,CAAC,CAAC,CAAA;IAE5C,6CAA6C;IAC7C,SAAS,CAAC,GAAG,EAAE;QACb,IACE,OAAO;YACP,gBAAgB;YAChB,CAAC,cAAc,CAAC,OAAO;YACvB,UAAU,CAAC,OAAO,EAClB,CAAC;YACD,IAAI,CAAC;gBACH,UAAU,CAAC,OAAO,CAAC,YAAY,EAAE,CAAA;gBACjC,cAAc,CAAC,OAAO,GAAG,IAAI,CAAA;YAC/B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAA;gBACzD,WAAW,CAAC,YAAY,EAAE,CAAC,KAAc,CAAC,CAAA;YAC5C,CAAC;QACH,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,EAAE,WAAW,CAAC,CAAC,CAAA;IAE5C,wDAAwD;IACxD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;YAChD,aAAa,CAAC,EAAE,CAAC,CAAA;YACjB,aAAa,CAAC,KAAK,CAAC,CAAA;YACpB,OAAM;QACR,CAAC;QAED,MAAM,WAAW,GAAG,GAAG,EAAE;YACvB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,UAAU,CAAC,OAAQ,CAAC,WAAW,EAAE,CAAA;gBAChD,aAAa,CAAC,MAAM,CAAC,CAAA;gBAErB,8DAA8D;gBAC9D,MAAM,WAAW,GAAG,UAAU,CAAC,OAAQ,CAAC,cAAc,EAAE,CAAA;gBACxD,MAAM,YAAY,GAAG,IAAI,eAAe,CAAC,WAAW,CAAC,CAAA;gBACrD,aAAa,CAAC,CAAC,GAAG,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA,CAAC,0CAA0C;YAClG,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAA;YACrD,CAAC;QACH,CAAC,CAAA;QAED,2CAA2C;QAC3C,MAAM,eAAe,GAAG,GAAG,EAAE,CAAC,WAAW,EAAE,CAAA;QAC3C,OAAO,CAAC,gBAAgB,CAAC,eAAe,EAAE,eAAe,CAAC,CAAA;QAE1D,uBAAuB;QACvB,WAAW,EAAE,CAAA;QAEb,sDAAsD;QACtD,OAAO,GAAG,EAAE;YACV,OAAO,CAAC,mBAAmB,CAAC,eAAe,EAAE,eAAe,CAAC,CAAA;QAC/D,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;IAEtB,qBAAqB;IACrB,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,GAAG,EAAE;YACV,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;gBACvB,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,CAAA;gBAC5B,UAAU,CAAC,OAAO,GAAG,IAAI,CAAA;YAC3B,CAAC;QACH,CAAC,CAAA;IACH,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,uBAAuB;IACvB,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,OAAgB,EAAU,EAAE;QACxD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO,CACL,OAAO,IAAI,CAAC,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CACvE,CAAA;QACH,CAAC;QACD,IAAI,CAAC;YACH,OAAO,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;QAChD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAA;YACrD,OAAO,CACL,OAAO,IAAI,CAAC,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CACvE,CAAA;QACH,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,MAAM,cAAc,GAAG,WAAW,CAAC,GAAW,EAAE;QAC9C,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO,EAAE,CAAA;QACX,CAAC;QACD,IAAI,CAAC;YACH,OAAO,UAAU,CAAC,OAAO,CAAC,cAAc,EAAE,CAAA;QAC5C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAA;YACnD,OAAO,EAAE,CAAA;QACX,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,MAAM,eAAe,GAAG,WAAW,CACjC,CAAC,GAAY,EAAQ,EAAE;QACrB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAA;YAC1C,OAAM;QACR,CAAC;QACD,IAAI,CAAC;YACH,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAA;YACpD,WAAW,CAAC,YAAY,EAAE,CAAC,KAAc,CAAC,CAAA;QAC5C,CAAC;IACH,CAAC,EACD,CAAC,WAAW,CAAC,CACd,CAAA;IAED,MAAM,YAAY,GAAG,WAAW,CAAC,GAAS,EAAE;QAC1C,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAA;YAC1C,OAAM;QACR,CAAC;QACD,IAAI,CAAC;YACH,UAAU,CAAC,OAAO,CAAC,YAAY,EAAE,CAAA;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAA;QAClD,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,MAAM,eAAe,GAAG,WAAW,CACjC,CAAC,GAAW,EAAe,EAAE;QAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAA;YACzC,OAAO,EAAE,CAAA;QACX,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG;gBACb,OAAO;gBACP,WAAW,EAAE,WAAW,CAAC,WAAW,IAAI,cAAc,CAAC,WAAW;gBAClE,cAAc,EACZ,WAAW,CAAC,cAAc,IAAI,cAAc,CAAC,cAAc;gBAC7D,YAAY,EAAE,WAAW,CAAC,YAAY,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;aACrD,CAAA;YACD,OAAO,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAA;YACpD,WAAW,CAAC,YAAY,EAAE,CAAC,KAAc,CAAC,CAAA;YAC1C,OAAO,EAAE,CAAA;QACX,CAAC;IACH,CAAC,EACD,CAAC,WAAW,EAAE,OAAO,CAAC,CACvB,CAAA;IAED,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,OAAoB,EAAQ,EAAE;QAC9D,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAA;YAC1C,OAAM;QACR,CAAC;QACD,IAAI,CAAC;YACH,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;QAC1C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAA;QAClD,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,sBAAsB;IACtB,OAAO,OAAO,CACZ,GAAG,EAAE,CAAC,CAAC;QACL,QAAQ;QACR,cAAc;QACd,eAAe;QACf,YAAY;QACZ,OAAO;QACP,UAAU;QACV,UAAU;QACV,eAAe;QACf,YAAY;KACb,CAAC,EACF;QACE,QAAQ;QACR,cAAc;QACd,eAAe;QACf,YAAY;QACZ,OAAO;QACP,UAAU;QACV,UAAU;QACV,eAAe;QACf,YAAY;KACb,CACF,CAAA;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,72 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ag-grid-url-sync",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "AG Grid URL Sync - Synchronize AG Grid text filters with URL parameters",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
7
|
+
"sideEffects": false,
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js",
|
|
12
|
+
"require": "./dist/index.js"
|
|
13
|
+
},
|
|
14
|
+
"./react": {
|
|
15
|
+
"types": "./dist/react/index.d.ts",
|
|
16
|
+
"import": "./dist/react/index.js",
|
|
17
|
+
"require": "./dist/react/index.js"
|
|
18
|
+
},
|
|
19
|
+
"./validation": {
|
|
20
|
+
"types": "./dist/core/validation.d.ts",
|
|
21
|
+
"import": "./dist/core/validation.js",
|
|
22
|
+
"require": "./dist/core/validation.js"
|
|
23
|
+
},
|
|
24
|
+
"./url-parser": {
|
|
25
|
+
"types": "./dist/core/url-parser.d.ts",
|
|
26
|
+
"import": "./dist/core/url-parser.js",
|
|
27
|
+
"require": "./dist/core/url-parser.js"
|
|
28
|
+
},
|
|
29
|
+
"./url-generator": {
|
|
30
|
+
"types": "./dist/core/url-generator.d.ts",
|
|
31
|
+
"import": "./dist/core/url-generator.js",
|
|
32
|
+
"require": "./dist/core/url-generator.js"
|
|
33
|
+
},
|
|
34
|
+
"./grid-integration": {
|
|
35
|
+
"types": "./dist/core/grid-integration.d.ts",
|
|
36
|
+
"import": "./dist/core/grid-integration.js",
|
|
37
|
+
"require": "./dist/core/grid-integration.js"
|
|
38
|
+
},
|
|
39
|
+
"./types": {
|
|
40
|
+
"types": "./dist/core/types.d.ts",
|
|
41
|
+
"import": "./dist/core/types.js",
|
|
42
|
+
"require": "./dist/core/types.js"
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"typesVersions": {
|
|
46
|
+
"*": {
|
|
47
|
+
".": [
|
|
48
|
+
"dist/index.d.ts"
|
|
49
|
+
],
|
|
50
|
+
"react": [
|
|
51
|
+
"dist/react/index.d.ts"
|
|
52
|
+
],
|
|
53
|
+
"validation": [
|
|
54
|
+
"dist/core/validation.d.ts"
|
|
55
|
+
],
|
|
56
|
+
"url-parser": [
|
|
57
|
+
"dist/core/url-parser.d.ts"
|
|
58
|
+
],
|
|
59
|
+
"url-generator": [
|
|
60
|
+
"dist/core/url-generator.d.ts"
|
|
61
|
+
],
|
|
62
|
+
"grid-integration": [
|
|
63
|
+
"dist/core/grid-integration.d.ts"
|
|
64
|
+
],
|
|
65
|
+
"types": [
|
|
66
|
+
"dist/core/types.d.ts"
|
|
67
|
+
]
|
|
68
|
+
}
|
|
69
|
+
},
|
|
7
70
|
"scripts": {
|
|
8
71
|
"lint": "eslint .",
|
|
9
72
|
"lint:fix": "eslint . --fix",
|
|
@@ -31,7 +94,8 @@
|
|
|
31
94
|
"sync",
|
|
32
95
|
"filter",
|
|
33
96
|
"share",
|
|
34
|
-
"typescript"
|
|
97
|
+
"typescript",
|
|
98
|
+
"react"
|
|
35
99
|
],
|
|
36
100
|
"author": "NearForm",
|
|
37
101
|
"license": "ISC",
|
|
@@ -47,7 +111,9 @@
|
|
|
47
111
|
"@commitlint/cli": "^19.8.1",
|
|
48
112
|
"@commitlint/config-conventional": "^19.8.1",
|
|
49
113
|
"@eslint/js": "^9.29.0",
|
|
114
|
+
"@testing-library/react": "^14.0.0",
|
|
50
115
|
"@types/jsdom": "^21.1.7",
|
|
116
|
+
"@types/react": "^18.0.0",
|
|
51
117
|
"@vitest/coverage-v8": "^3.2.4",
|
|
52
118
|
"ag-grid-community": "^33.3.2",
|
|
53
119
|
"bundlesize": "^0.18.2",
|
|
@@ -59,12 +125,19 @@
|
|
|
59
125
|
"jsdom": "^26.1.0",
|
|
60
126
|
"lint-staged": "^16.1.2",
|
|
61
127
|
"prettier": "^3.6.0",
|
|
128
|
+
"react": "^18.0.0",
|
|
62
129
|
"rimraf": "^6.0.1",
|
|
63
130
|
"typescript": "^5.8.3",
|
|
64
131
|
"vitest": "^3.2.4"
|
|
65
132
|
},
|
|
66
133
|
"peerDependencies": {
|
|
67
|
-
"ag-grid-community": ">=28.0.0"
|
|
134
|
+
"ag-grid-community": ">=28.0.0",
|
|
135
|
+
"react": ">=16.8.0"
|
|
136
|
+
},
|
|
137
|
+
"peerDependenciesMeta": {
|
|
138
|
+
"react": {
|
|
139
|
+
"optional": true
|
|
140
|
+
}
|
|
68
141
|
},
|
|
69
142
|
"lint-staged": {
|
|
70
143
|
"*.{js,jsx,ts,tsx}": "eslint --cache --fix"
|
|
@@ -75,12 +148,28 @@
|
|
|
75
148
|
"maxSize": "5KB"
|
|
76
149
|
},
|
|
77
150
|
{
|
|
78
|
-
"path": "./dist/ag-grid-url-sync.js",
|
|
151
|
+
"path": "./dist/core/ag-grid-url-sync.js",
|
|
79
152
|
"maxSize": "4KB"
|
|
80
153
|
},
|
|
81
154
|
{
|
|
82
|
-
"path": "./dist/
|
|
83
|
-
"maxSize": "
|
|
155
|
+
"path": "./dist/core/validation.js",
|
|
156
|
+
"maxSize": "2KB"
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"path": "./dist/core/url-parser.js",
|
|
160
|
+
"maxSize": "3KB"
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"path": "./dist/core/url-generator.js",
|
|
164
|
+
"maxSize": "2KB"
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
"path": "./dist/core/grid-integration.js",
|
|
168
|
+
"maxSize": "2KB"
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"path": "./dist/react/index.js",
|
|
172
|
+
"maxSize": "7KB"
|
|
84
173
|
}
|
|
85
174
|
]
|
|
86
175
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ag-grid-url-sync.js","sourceRoot":"","sources":["../src/ag-grid-url-sync.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EACL,eAAe,EACf,WAAW,EACX,cAAc,EACd,gBAAgB,EACjB,MAAM,YAAY,CAAA;AAEnB;;GAEG;AACH,MAAM,OAAO,aAAa;IAChB,MAAM,CAAgB;IAE9B;;;;OAIG;IACH,YAAY,OAAgB,EAAE,SAA8B,EAAE;QAC5D,IAAI,CAAC,MAAM,GAAG;YACZ,OAAO;YACP,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,cAAc,CAAC,WAAW;YAC7D,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,cAAc,CAAC,cAAc;YACtE,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;SAChD,CAAA;IACH,CAAC;IAED;;;;OAIG;IACH,WAAW,CAAC,OAAgB;QAC1B,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC/C,MAAM,GAAG,GAAG,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAA;QAC3C,OAAO,WAAW,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IACnD,CAAC;IAED;;;OAGG;IACH,cAAc;QACZ,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;QAC9B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAA;QAC3B,OAAO,MAAM,CAAC,MAAM,CAAA;IACtB,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,GAAY;QACvB,MAAM,UAAU,GAAG,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAA;QAC9C,MAAM,WAAW,GAAG,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAC5D,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAA;IAChC,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,WAAwB;QACnC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IAC5C,CAAC;IAED;;OAEG;IACH,YAAY;QACV,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;IACvB,CAAC;IAED;;OAEG;IACH,OAAO;QACL,2DAA2D;IAC7D,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAC3B,OAAgB,EAChB,MAA4B;IAE5B,OAAO,IAAI,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;AAC3C,CAAC"}
|
package/dist/types.d.ts
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import type { GridApi as AGGridApi } from 'ag-grid-community';
|
|
2
|
-
/**
|
|
3
|
-
* Configuration options for AG Grid URL Sync
|
|
4
|
-
*/
|
|
5
|
-
export interface AGGridUrlSyncConfig {
|
|
6
|
-
/**
|
|
7
|
-
* Prefix for URL parameters. Default: 'f_'
|
|
8
|
-
*/
|
|
9
|
-
paramPrefix?: string;
|
|
10
|
-
/**
|
|
11
|
-
* Maximum length for filter values. Default: 200
|
|
12
|
-
*/
|
|
13
|
-
maxValueLength?: number;
|
|
14
|
-
/**
|
|
15
|
-
* Optional error handler for parsing errors
|
|
16
|
-
*/
|
|
17
|
-
onParseError?: (error: Error) => void;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Supported filter operations
|
|
21
|
-
*/
|
|
22
|
-
export type FilterOperation = 'contains' | 'eq';
|
|
23
|
-
/**
|
|
24
|
-
* Filter state for a single column
|
|
25
|
-
*/
|
|
26
|
-
export interface ColumnFilter {
|
|
27
|
-
filterType: 'text';
|
|
28
|
-
type: FilterOperation;
|
|
29
|
-
filter: string;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Complete filter state mapping
|
|
33
|
-
*/
|
|
34
|
-
export interface FilterState {
|
|
35
|
-
[columnId: string]: ColumnFilter;
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Internal configuration with defaults
|
|
39
|
-
*/
|
|
40
|
-
export interface InternalConfig extends Required<AGGridUrlSyncConfig> {
|
|
41
|
-
gridApi: AGGridApi;
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Error types for URL sync operations
|
|
45
|
-
*/
|
|
46
|
-
export declare class URLSyncError extends Error {
|
|
47
|
-
constructor(message: string);
|
|
48
|
-
}
|
|
49
|
-
export declare class InvalidFilterError extends URLSyncError {
|
|
50
|
-
constructor(message: string);
|
|
51
|
-
}
|
|
52
|
-
export declare class InvalidURLError extends URLSyncError {
|
|
53
|
-
constructor(message: string);
|
|
54
|
-
}
|
|
55
|
-
export type ParsedFilterParam = {
|
|
56
|
-
columnName: string;
|
|
57
|
-
operation: 'contains' | 'equals';
|
|
58
|
-
value: string;
|
|
59
|
-
action: 'apply' | 'remove';
|
|
60
|
-
};
|
|
61
|
-
export type GridApi = AGGridApi;
|
|
62
|
-
export declare const OPERATION_MAP: {
|
|
63
|
-
readonly contains: "contains";
|
|
64
|
-
readonly eq: "equals";
|
|
65
|
-
};
|
|
66
|
-
export declare const REVERSE_OPERATION_MAP: {
|
|
67
|
-
readonly contains: "contains";
|
|
68
|
-
readonly equals: "eq";
|
|
69
|
-
};
|
package/dist/types.js
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Error types for URL sync operations
|
|
3
|
-
*/
|
|
4
|
-
export class URLSyncError extends Error {
|
|
5
|
-
constructor(message) {
|
|
6
|
-
super(message);
|
|
7
|
-
this.name = 'URLSyncError';
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
export class InvalidFilterError extends URLSyncError {
|
|
11
|
-
constructor(message) {
|
|
12
|
-
super(message);
|
|
13
|
-
this.name = 'InvalidFilterError';
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
export class InvalidURLError extends URLSyncError {
|
|
17
|
-
constructor(message) {
|
|
18
|
-
super(message);
|
|
19
|
-
this.name = 'InvalidURLError';
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
// Internal operation mapping
|
|
23
|
-
export const OPERATION_MAP = {
|
|
24
|
-
contains: 'contains',
|
|
25
|
-
eq: 'equals'
|
|
26
|
-
};
|
|
27
|
-
export const REVERSE_OPERATION_MAP = {
|
|
28
|
-
contains: 'contains',
|
|
29
|
-
equals: 'eq'
|
|
30
|
-
};
|
|
31
|
-
//# sourceMappingURL=types.js.map
|
package/dist/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAkDA;;GAEG;AACH,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,cAAc,CAAA;IAC5B,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,YAAY;IAClD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAA;IAClC,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,YAAY;IAC/C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAA;IAC/B,CAAC;CACF;AAYD,6BAA6B;AAC7B,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,QAAQ,EAAE,UAAU;IACpB,EAAE,EAAE,QAAQ;CACJ,CAAA;AAEV,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,IAAI;CACJ,CAAA"}
|
package/dist/utils.d.ts
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import type { FilterState, ColumnFilter, InternalConfig } from './types.js';
|
|
2
|
-
/**
|
|
3
|
-
* Default configuration values
|
|
4
|
-
*/
|
|
5
|
-
export declare const DEFAULT_CONFIG: {
|
|
6
|
-
readonly paramPrefix: "f_";
|
|
7
|
-
readonly maxValueLength: 200;
|
|
8
|
-
};
|
|
9
|
-
/**
|
|
10
|
-
* Validates a filter value against configuration constraints
|
|
11
|
-
*/
|
|
12
|
-
export declare function validateFilterValue(value: string, config: InternalConfig): string;
|
|
13
|
-
/**
|
|
14
|
-
* Parses a URL parameter into a column filter
|
|
15
|
-
*/
|
|
16
|
-
export declare function parseFilterParam(param: string, value: string, expectedPrefix?: string): ColumnFilter;
|
|
17
|
-
/**
|
|
18
|
-
* Converts URL search params into a filter state object
|
|
19
|
-
*/
|
|
20
|
-
export declare function parseUrlFilters(url: string, config: InternalConfig): FilterState;
|
|
21
|
-
/**
|
|
22
|
-
* Converts a filter state object into URL search parameters
|
|
23
|
-
*/
|
|
24
|
-
export declare function serializeFilters(filterState: FilterState, config: InternalConfig): URLSearchParams;
|
|
25
|
-
/**
|
|
26
|
-
* Generates a URL with the current filter state
|
|
27
|
-
*/
|
|
28
|
-
export declare function generateUrl(baseUrl: string, filterState: FilterState, config: InternalConfig): string;
|
|
29
|
-
/**
|
|
30
|
-
* Gets the current filter model from AG Grid
|
|
31
|
-
*/
|
|
32
|
-
export declare function getFilterModel(config: InternalConfig): FilterState;
|
|
33
|
-
/**
|
|
34
|
-
* Applies a filter state to AG Grid
|
|
35
|
-
*/
|
|
36
|
-
export declare function applyFilterModel(filterState: FilterState, config: InternalConfig): void;
|