@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.19",
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
- const columnId =
2674
- Array.isArray(column.id) &&
2675
- column.id.length === 1
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 === columnId) {
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
- filterEditorProps = {
2711
- multiple:
2712
- column.filter.operator === 'inlist',
2713
- wrapMultiple:
2714
- column.filter.operator !== 'inlist',
2715
- placeholder: column.filter.placeholder
2716
- ? column.filter.placeholder
2717
- : 'All Options',
2718
- dataSource: selectedDataSource,
2719
- searchable:
2720
- column.filter.searchable !== false,
2721
- // Enable clear functionality even when searchable is false
2722
- allowClearWhenNotSearchable:
2723
- column.filter.searchable === false,
2724
- // Explicitly enable clear icon
2725
- clearIcon: true,
2726
- };
2727
-
2728
- // Debug: Check if fix is applied
2729
- if (column.filter.searchable === false) {
2730
- console.log(
2731
- 'Filter Debug - searchable=false:',
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
- ...filterDataSource.slice(0, filterIndex),
3240
+ setFilterDataSource(prevState => [
3241
+ ...prevState.slice(0, filterIndex),
3242
3242
  updatedFilter,
3243
- ...filterDataSource.slice(filterIndex + 1),
3243
+ ...prevState.slice(filterIndex + 1),
3244
3244
  ]);
3245
3245
  } else {
3246
- if (filterName.endsWith('.')) {
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,
@@ -55,8 +55,8 @@ const generateCacheKey = (url, method, formData) => {
55
55
  const shouldCache = (method, url) => {
56
56
  const normalizedMethod = method.toUpperCase();
57
57
 
58
- // Always cache GET requests
59
- if (normalizedMethod === 'GET') return true;
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) {