@visns-studio/visns-components 5.15.19 → 5.15.21
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/package.json
CHANGED
|
@@ -94,7 +94,7 @@
|
|
|
94
94
|
"react-dom": "^17.0.0 || ^18.0.0"
|
|
95
95
|
},
|
|
96
96
|
"name": "@visns-studio/visns-components",
|
|
97
|
-
"version": "5.15.
|
|
97
|
+
"version": "5.15.21",
|
|
98
98
|
"description": "Various packages to assist in the development of our Custom Applications.",
|
|
99
99
|
"main": "src/index.js",
|
|
100
100
|
"files": [
|
|
@@ -2670,21 +2670,20 @@ const DataGrid = forwardRef(
|
|
|
2670
2670
|
break;
|
|
2671
2671
|
default:
|
|
2672
2672
|
// Convert column.id to string if it's an array with single element
|
|
2673
|
-
|
|
2674
|
-
|
|
2675
|
-
|
|
2676
|
-
? column.id[0]
|
|
2677
|
-
: column.id;
|
|
2673
|
+
// Use the same naming logic as createFilterName for consistency
|
|
2674
|
+
const filterName = createFilterName(column);
|
|
2675
|
+
const columnId = filterName;
|
|
2678
2676
|
|
|
2679
2677
|
selectedDataSource = filterDataSource.reduce(
|
|
2680
2678
|
(acc, fds) => {
|
|
2681
|
-
if (fds.id ===
|
|
2679
|
+
if (fds.id === filterName) {
|
|
2682
2680
|
return fds.dataset;
|
|
2683
2681
|
}
|
|
2684
2682
|
return acc;
|
|
2685
2683
|
},
|
|
2686
2684
|
null
|
|
2687
2685
|
);
|
|
2686
|
+
|
|
2688
2687
|
break;
|
|
2689
2688
|
}
|
|
2690
2689
|
|
|
@@ -2707,36 +2706,31 @@ const DataGrid = forwardRef(
|
|
|
2707
2706
|
break;
|
|
2708
2707
|
case 'select':
|
|
2709
2708
|
filterEditor = SelectFilter;
|
|
2710
|
-
|
|
2711
|
-
|
|
2712
|
-
|
|
2713
|
-
|
|
2714
|
-
|
|
2715
|
-
|
|
2716
|
-
|
|
2717
|
-
:
|
|
2718
|
-
|
|
2719
|
-
|
|
2720
|
-
|
|
2721
|
-
|
|
2722
|
-
|
|
2723
|
-
|
|
2724
|
-
|
|
2725
|
-
|
|
2726
|
-
|
|
2727
|
-
|
|
2728
|
-
|
|
2729
|
-
|
|
2730
|
-
|
|
2731
|
-
|
|
2732
|
-
|
|
2733
|
-
columnName:
|
|
2734
|
-
column.name || 'unknown',
|
|
2735
|
-
props: filterEditorProps,
|
|
2736
|
-
visnsDataGridVersion: 'v1.0.18',
|
|
2737
|
-
}
|
|
2738
|
-
);
|
|
2709
|
+
// Only set filter editor if we have data or it's not a URL-based filter
|
|
2710
|
+
if (selectedDataSource || !column.filter.url) {
|
|
2711
|
+
filterEditorProps = {
|
|
2712
|
+
multiple:
|
|
2713
|
+
column.filter.operator === 'inlist',
|
|
2714
|
+
wrapMultiple:
|
|
2715
|
+
column.filter.operator !== 'inlist',
|
|
2716
|
+
placeholder: column.filter.placeholder
|
|
2717
|
+
? column.filter.placeholder
|
|
2718
|
+
: selectedDataSource ? 'All Options' : 'Loading...',
|
|
2719
|
+
dataSource: selectedDataSource,
|
|
2720
|
+
searchable:
|
|
2721
|
+
column.filter.searchable !== false,
|
|
2722
|
+
// Enable clear functionality even when searchable is false
|
|
2723
|
+
allowClearWhenNotSearchable:
|
|
2724
|
+
column.filter.searchable === false,
|
|
2725
|
+
// Explicitly enable clear icon
|
|
2726
|
+
clearIcon: true,
|
|
2727
|
+
};
|
|
2728
|
+
} else {
|
|
2729
|
+
// Show loading state for URL-based filters without data
|
|
2730
|
+
filterEditor = null;
|
|
2731
|
+
filterEditorProps = null;
|
|
2739
2732
|
}
|
|
2733
|
+
|
|
2740
2734
|
break;
|
|
2741
2735
|
default:
|
|
2742
2736
|
filterEditor = null;
|
|
@@ -3205,6 +3199,12 @@ const DataGrid = forwardRef(
|
|
|
3205
3199
|
});
|
|
3206
3200
|
}, [columns, filterDataSource, memoizedSettings]);
|
|
3207
3201
|
|
|
3202
|
+
// Force re-render when filterDataSource updates to ensure dropdown filters get their data
|
|
3203
|
+
const [renderKey, setRenderKey] = useState(0);
|
|
3204
|
+
useEffect(() => {
|
|
3205
|
+
setRenderKey(prev => prev + 1);
|
|
3206
|
+
}, [filterDataSource]);
|
|
3207
|
+
|
|
3208
3208
|
useEffect(() => {
|
|
3209
3209
|
if (setFilterData) {
|
|
3210
3210
|
setFilterData(filterValue);
|
|
@@ -3237,16 +3237,13 @@ const DataGrid = forwardRef(
|
|
|
3237
3237
|
...filterDataSource[filterIndex],
|
|
3238
3238
|
dataset: data,
|
|
3239
3239
|
};
|
|
3240
|
-
setFilterDataSource([
|
|
3241
|
-
...
|
|
3240
|
+
setFilterDataSource(prevState => [
|
|
3241
|
+
...prevState.slice(0, filterIndex),
|
|
3242
3242
|
updatedFilter,
|
|
3243
|
-
...
|
|
3243
|
+
...prevState.slice(filterIndex + 1),
|
|
3244
3244
|
]);
|
|
3245
3245
|
} else {
|
|
3246
|
-
|
|
3247
|
-
filterName = filterName.slice(0, -1);
|
|
3248
|
-
}
|
|
3249
|
-
|
|
3246
|
+
// Don't modify the filterName - keep it consistent with what createFilterName generates
|
|
3250
3247
|
const newFilter = {
|
|
3251
3248
|
id: filterName,
|
|
3252
3249
|
dataset: data,
|
package/src/components/Fetch.jsx
CHANGED
|
@@ -55,8 +55,8 @@ const generateCacheKey = (url, method, formData) => {
|
|
|
55
55
|
const shouldCache = (method, url) => {
|
|
56
56
|
const normalizedMethod = method.toUpperCase();
|
|
57
57
|
|
|
58
|
-
//
|
|
59
|
-
if (normalizedMethod === 'GET') return
|
|
58
|
+
// Don't cache GET requests
|
|
59
|
+
if (normalizedMethod === 'GET') return false;
|
|
60
60
|
|
|
61
61
|
// Cache specific safe POST endpoints that return reference data
|
|
62
62
|
const cacheableEndpoints = [
|
|
@@ -1218,7 +1218,7 @@ const GenericGrid = ({
|
|
|
1218
1218
|
// Fetch filter options from URL
|
|
1219
1219
|
const fetchFilterOptions = useCallback(async (filter) => {
|
|
1220
1220
|
if (!filter.url) return;
|
|
1221
|
-
|
|
1221
|
+
|
|
1222
1222
|
try {
|
|
1223
1223
|
const response = await CustomFetch(filter.url, 'POST', {});
|
|
1224
1224
|
if (response.data && response.data.data) {
|
|
@@ -1233,6 +1233,11 @@ const GenericGrid = ({
|
|
|
1233
1233
|
}
|
|
1234
1234
|
}, []);
|
|
1235
1235
|
|
|
1236
|
+
// Clear filter options when settings change to prevent stale data
|
|
1237
|
+
useEffect(() => {
|
|
1238
|
+
setFilterOptions({});
|
|
1239
|
+
}, [settings]);
|
|
1240
|
+
|
|
1236
1241
|
// Initialize settings filters and fetch options
|
|
1237
1242
|
useEffect(() => {
|
|
1238
1243
|
if (settings?.filters && settings.filters.length > 0) {
|