@trackunit/filters-filter-bar 1.8.152 → 1.8.156

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 (3) hide show
  1. package/index.cjs.js +59 -30
  2. package/index.esm.js +59 -30
  3. package/package.json +12 -12
package/index.cjs.js CHANGED
@@ -2154,34 +2154,34 @@ const useFilterBarPersistence = ({ name, setValue, refreshData, isDefaultValue,
2154
2154
  // Add this useEffect to detect external URL changes
2155
2155
  react.useEffect(() => {
2156
2156
  if (!inputLoadData && !inputSaveData) {
2157
- requestAnimationFrame(() => {
2158
- const currentSearchValue = search?.[name];
2159
- let currentSearchValueParsed;
2160
- let lastSearchUpdateRefParsed;
2161
- try {
2162
- currentSearchValueParsed = currentSearchValue ? decode(currentSearchValue) : undefined;
2163
- }
2164
- catch (error) {
2165
- // Invalid compressed data, treat as undefined
2166
- currentSearchValueParsed = undefined;
2167
- }
2168
- try {
2169
- lastSearchUpdateRefParsed = lastSearchUpdateRef.current ? decode(lastSearchUpdateRef.current) : undefined;
2170
- }
2171
- catch (error) {
2172
- // Invalid compressed data, treat as undefined
2173
- lastSearchUpdateRefParsed = undefined;
2174
- }
2175
- // H4sIADGRuGgAA3WTy07eQAxGXwVlXUtje27uruqWd0C2x1NaAa2AdoN49xq6-LOgUpQo0onny7H9ctzHsy591q8_73_dxXM8xNPT8fnl-KN3v-P4fHy5vj4-HQ96__5yd3e8fjqeQh_9Nt9v48fVfayr9f3b1YrHBH3f3GDBaj4Zui-HuvsADeO8KeFGrmYrj8hCbzTZrF0coRMRVEYHGcKAsW1Iw8qiF3ox06zbASth1t4GVsqCUvIxqO9R-EJ7w2aDJnjHCbV6JtmlgOSHQzB4DLvQtiwiRGB3aUk3h0lLgdyjFiyD8USPhd55BYzakkbaSbeA2jfmFaV7v9BMErKLguWpUNdQEKwTsqqXNETL_eRkbqojy1K0pCtVkK4LJM2VPtk6lQtdcIpSs2RGno9aQG0LSJrmvgrKHCeDFWWQN0iNNZMYgczFQNtH0VbqKifaq7uVBFdvBIgRIBoClcLXQFlC7VR7E7l2PdHKnH36kN5rJFY96Z0m3mhTKv-hG8cscytgU0vLnAOlTNAWdd_TR11y8m3dsxsGyJp_2XOg5hyZOxaP2Qu6nX137DbnW5L0_S-3p9CPk2hC09sG15SXgrKrHgQlpYe6ZKl9oScNb74IOmMmmbkSYmmHdYWZ7z3baWKpiWq0nA6u2fkEYFoOS-_OtibuIqfdaa0oDytgnB2saSC3YTSI0UKIc9nofWJf_wIRCrRd6AMAAA
2176
- // Check if this is an external URL change (not from our own updates)
2177
- // Only trigger refreshData if there's a meaningful change in the URL value
2178
- if (search?.[name] !== undefined && !dequal.dequal(currentSearchValueParsed, lastSearchUpdateRefParsed)) {
2179
- // This is an external URL change with actual data, trigger refreshData
2157
+ const currentSearchValue = search?.[name];
2158
+ let currentSearchValueParsed;
2159
+ let lastSearchUpdateRefParsed;
2160
+ try {
2161
+ currentSearchValueParsed = currentSearchValue ? decode(currentSearchValue) : undefined;
2162
+ }
2163
+ catch (_) {
2164
+ // Invalid compressed data, treat as undefined
2165
+ currentSearchValueParsed = undefined;
2166
+ }
2167
+ try {
2168
+ lastSearchUpdateRefParsed = lastSearchUpdateRef.current ? decode(lastSearchUpdateRef.current) : undefined;
2169
+ }
2170
+ catch (_) {
2171
+ // Invalid compressed data, treat as undefined
2172
+ lastSearchUpdateRefParsed = undefined;
2173
+ }
2174
+ // H4sIADGRuGgAA3WTy07eQAxGXwVlXUtje27uruqWd0C2x1NaAa2AdoN49xq6-LOgUpQo0onny7H9ctzHsy591q8_73_dxXM8xNPT8fnl-KN3v-P4fHy5vj4-HQ96__5yd3e8fjqeQh_9Nt9v48fVfayr9f3b1YrHBH3f3GDBaj4Zui-HuvsADeO8KeFGrmYrj8hCbzTZrF0coRMRVEYHGcKAsW1Iw8qiF3ox06zbASth1t4GVsqCUvIxqO9R-EJ7w2aDJnjHCbV6JtmlgOSHQzB4DLvQtiwiRGB3aUk3h0lLgdyjFiyD8USPhd55BYzakkbaSbeA2jfmFaV7v9BMErKLguWpUNdQEKwTsqqXNETL_eRkbqojy1K0pCtVkK4LJM2VPtk6lQtdcIpSs2RGno9aQG0LSJrmvgrKHCeDFWWQN0iNNZMYgczFQNtH0VbqKifaq7uVBFdvBIgRIBoClcLXQFlC7VR7E7l2PdHKnH36kN5rJFY96Z0m3mhTKv-hG8cscytgU0vLnAOlTNAWdd_TR11y8m3dsxsGyJp_2XOg5hyZOxaP2Qu6nX137DbnW5L0_S-3p9CPk2hC09sG15SXgrKrHgQlpYe6ZKl9oScNb74IOmMmmbkSYmmHdYWZ7z3baWKpiWq0nA6u2fkEYFoOS-_OtibuIqfdaa0oDytgnB2saSC3YTSI0UKIc9nofWJf_wIRCrRd6AMAAA
2175
+ // Check if this is an external URL change (not from our own updates)
2176
+ // Only trigger refreshData if there's a meaningful change in the URL value
2177
+ if (search?.[name] !== undefined && !dequal.dequal(lastSearchUpdateRefParsed, currentSearchValueParsed)) {
2178
+ // This is an external URL change with actual data, trigger refreshData
2179
+ void requestAnimationFrame(() => {
2180
2180
  if (refreshDataRef.current) {
2181
2181
  refreshDataRef.current();
2182
2182
  }
2183
- }
2184
- });
2183
+ });
2184
+ }
2185
2185
  }
2186
2186
  }, [search, name, inputLoadData, inputSaveData, decode]);
2187
2187
  const saveData = react.useCallback((filterBarConfig, filterBarDefinitions) => {
@@ -2320,13 +2320,17 @@ const useFilterBarPersistence = ({ name, setValue, refreshData, isDefaultValue,
2320
2320
  initialFilterBarConfig.setters[`set${stringTs.capitalize(key)}`] = (callback) => setValue(key, callback);
2321
2321
  });
2322
2322
  const urlObject = getFilterValuesToUrl(initialFilterBarConfig.values, updatedFilterDefinitionsValues, false, isDefaultValue);
2323
+ let needUpdate = false;
2323
2324
  const result = {};
2324
2325
  if (initialFilterBarConfig.name) {
2325
2326
  result[initialFilterBarConfig.name] = encode(urlObject);
2327
+ needUpdate = !dequal.dequal(lastSearchUpdateRef.current, result[initialFilterBarConfig.name]);
2326
2328
  // Update the ref BEFORE updating the URL to prevent false external change detection
2327
2329
  lastSearchUpdateRef.current = result[initialFilterBarConfig.name];
2328
2330
  }
2329
- updateSearch(result);
2331
+ if (needUpdate) {
2332
+ void updateSearch(result);
2333
+ }
2330
2334
  return initialFilterBarConfig;
2331
2335
  }, [name, setValue, loadValues, getFilterValuesToUrl, updateSearch, encode, isDefaultValue]);
2332
2336
  return react.useMemo(() => ({ loadData, saveData, getFilterValuesToUrl }), [loadData, saveData, getFilterValuesToUrl]);
@@ -2360,6 +2364,10 @@ const useGenericSetValue = () => {
2360
2364
  * @returns {object} An object containing filter bar configuration and actions.
2361
2365
  */
2362
2366
  const useFilterBar = ({ name, onValuesChange, filterBarDefinition, loadData: inputLoadData, saveData: inputSaveData, }) => {
2367
+ const filterBarDefinitionRef = react.useRef(filterBarDefinition);
2368
+ react.useEffect(() => {
2369
+ filterBarDefinitionRef.current = filterBarDefinition;
2370
+ }, [filterBarDefinition]);
2363
2371
  const lastName = react.useRef(name);
2364
2372
  const { setValue } = useGenericSetValue();
2365
2373
  const { isDefaultValue } = useIsDefaultValue();
@@ -2367,13 +2375,16 @@ const useFilterBar = ({ name, onValuesChange, filterBarDefinition, loadData: inp
2367
2375
  name,
2368
2376
  isDefaultValue: (key, value) => isDefaultValue(key, value, filterBarDefinition),
2369
2377
  setValue: (key, callback) => setValue(setFilterBarConfig, key, callback),
2370
- refreshData: () => setFilterBarConfig(loadData(sharedUtils.objectValues(filterBarDefinition))),
2378
+ refreshData: () => refreshData(),
2371
2379
  loadData: inputLoadData,
2372
2380
  saveData: inputSaveData,
2373
2381
  });
2374
2382
  const [filterBarConfig, setFilterBarConfig] = react.useState(() => {
2375
2383
  return loadData(sharedUtils.objectValues(filterBarDefinition));
2376
2384
  });
2385
+ const refreshData = react.useCallback(() => {
2386
+ setFilterBarConfig(loadData(sharedUtils.objectValues(filterBarDefinitionRef.current)));
2387
+ }, [loadData, setFilterBarConfig]);
2377
2388
  const setValueMemoized = react.useCallback((key, callback) => {
2378
2389
  setValue(setFilterBarConfig, key, callback);
2379
2390
  }, [setFilterBarConfig, setValue]);
@@ -2402,16 +2413,20 @@ const useFilterBar = ({ name, onValuesChange, filterBarDefinition, loadData: inp
2402
2413
  },
2403
2414
  immediate: true,
2404
2415
  });
2416
+ const loadDataRef = react.useRef(loadData);
2417
+ react.useEffect(() => {
2418
+ loadDataRef.current = loadData;
2419
+ }, [loadData]);
2405
2420
  react.useEffect(() => {
2406
2421
  if (lastName.current !== name) {
2407
- setFilterBarConfig(loadData(sharedUtils.objectValues(filterBarDefinition)));
2422
+ setFilterBarConfig(loadDataRef.current(sharedUtils.objectValues(filterBarDefinitionRef.current)));
2408
2423
  lastName.current = name;
2409
2424
  }
2410
- }, [filterBarDefinition, loadData, name]);
2425
+ }, [name]);
2411
2426
  return react.useMemo(() => {
2412
2427
  return {
2413
2428
  filterBarConfig: { ...filterBarConfig, ...filterMapActions, ...filterMapGetter },
2414
- filterBarDefinition,
2429
+ filterBarDefinition: Object.freeze(filterBarDefinition),
2415
2430
  name,
2416
2431
  onValuesChange: stableOnValuesChange,
2417
2432
  };
@@ -2437,12 +2452,18 @@ const useFilterBarAsync = ({ name, onValuesChange, filterBarDefinition, loadData
2437
2452
  }), [name]);
2438
2453
  const [filterBarConfig, setFilterBarConfig] = react.useState(initialFilterBarConfig);
2439
2454
  const { setValue } = useGenericSetValue();
2455
+ const refreshDataRef = react.useRef(() => {
2456
+ // default do nothing
2457
+ });
2440
2458
  const persistenceConfig = react.useMemo(() => ({
2441
2459
  name,
2442
2460
  isDefaultValue: (key, value) => isDefaultValue(key, value, filterBarDefinition, filterBarConfig.initialState),
2443
2461
  setValue: (key, callback) => setValue(setFilterBarConfig, key, callback),
2444
2462
  loadData: inputLoadData,
2445
2463
  saveData: inputSaveData,
2464
+ refreshData: () => {
2465
+ refreshDataRef.current();
2466
+ },
2446
2467
  }), [
2447
2468
  name,
2448
2469
  isDefaultValue,
@@ -2454,6 +2475,14 @@ const useFilterBarAsync = ({ name, onValuesChange, filterBarDefinition, loadData
2454
2475
  inputSaveData,
2455
2476
  ]);
2456
2477
  const { loadData, saveData } = useFilterBarPersistence(persistenceConfig);
2478
+ const refreshData = react.useCallback(() => {
2479
+ if (isDataLoaded) {
2480
+ setFilterBarConfig(loadData(sharedUtils.objectValues(internalFilterBarDefinitions)));
2481
+ }
2482
+ }, [loadData, setFilterBarConfig, internalFilterBarDefinitions, isDataLoaded]);
2483
+ react.useEffect(() => {
2484
+ refreshDataRef.current = refreshData;
2485
+ }, [refreshData]);
2457
2486
  const setValueMemoized = react.useCallback((key, callback) => {
2458
2487
  setValue(setFilterBarConfig, key, callback);
2459
2488
  }, [setFilterBarConfig, setValue]);
package/index.esm.js CHANGED
@@ -2152,34 +2152,34 @@ const useFilterBarPersistence = ({ name, setValue, refreshData, isDefaultValue,
2152
2152
  // Add this useEffect to detect external URL changes
2153
2153
  useEffect(() => {
2154
2154
  if (!inputLoadData && !inputSaveData) {
2155
- requestAnimationFrame(() => {
2156
- const currentSearchValue = search?.[name];
2157
- let currentSearchValueParsed;
2158
- let lastSearchUpdateRefParsed;
2159
- try {
2160
- currentSearchValueParsed = currentSearchValue ? decode(currentSearchValue) : undefined;
2161
- }
2162
- catch (error) {
2163
- // Invalid compressed data, treat as undefined
2164
- currentSearchValueParsed = undefined;
2165
- }
2166
- try {
2167
- lastSearchUpdateRefParsed = lastSearchUpdateRef.current ? decode(lastSearchUpdateRef.current) : undefined;
2168
- }
2169
- catch (error) {
2170
- // Invalid compressed data, treat as undefined
2171
- lastSearchUpdateRefParsed = undefined;
2172
- }
2173
- // H4sIADGRuGgAA3WTy07eQAxGXwVlXUtje27uruqWd0C2x1NaAa2AdoN49xq6-LOgUpQo0onny7H9ctzHsy591q8_73_dxXM8xNPT8fnl-KN3v-P4fHy5vj4-HQ96__5yd3e8fjqeQh_9Nt9v48fVfayr9f3b1YrHBH3f3GDBaj4Zui-HuvsADeO8KeFGrmYrj8hCbzTZrF0coRMRVEYHGcKAsW1Iw8qiF3ox06zbASth1t4GVsqCUvIxqO9R-EJ7w2aDJnjHCbV6JtmlgOSHQzB4DLvQtiwiRGB3aUk3h0lLgdyjFiyD8USPhd55BYzakkbaSbeA2jfmFaV7v9BMErKLguWpUNdQEKwTsqqXNETL_eRkbqojy1K0pCtVkK4LJM2VPtk6lQtdcIpSs2RGno9aQG0LSJrmvgrKHCeDFWWQN0iNNZMYgczFQNtH0VbqKifaq7uVBFdvBIgRIBoClcLXQFlC7VR7E7l2PdHKnH36kN5rJFY96Z0m3mhTKv-hG8cscytgU0vLnAOlTNAWdd_TR11y8m3dsxsGyJp_2XOg5hyZOxaP2Qu6nX137DbnW5L0_S-3p9CPk2hC09sG15SXgrKrHgQlpYe6ZKl9oScNb74IOmMmmbkSYmmHdYWZ7z3baWKpiWq0nA6u2fkEYFoOS-_OtibuIqfdaa0oDytgnB2saSC3YTSI0UKIc9nofWJf_wIRCrRd6AMAAA
2174
- // Check if this is an external URL change (not from our own updates)
2175
- // Only trigger refreshData if there's a meaningful change in the URL value
2176
- if (search?.[name] !== undefined && !dequal(currentSearchValueParsed, lastSearchUpdateRefParsed)) {
2177
- // This is an external URL change with actual data, trigger refreshData
2155
+ const currentSearchValue = search?.[name];
2156
+ let currentSearchValueParsed;
2157
+ let lastSearchUpdateRefParsed;
2158
+ try {
2159
+ currentSearchValueParsed = currentSearchValue ? decode(currentSearchValue) : undefined;
2160
+ }
2161
+ catch (_) {
2162
+ // Invalid compressed data, treat as undefined
2163
+ currentSearchValueParsed = undefined;
2164
+ }
2165
+ try {
2166
+ lastSearchUpdateRefParsed = lastSearchUpdateRef.current ? decode(lastSearchUpdateRef.current) : undefined;
2167
+ }
2168
+ catch (_) {
2169
+ // Invalid compressed data, treat as undefined
2170
+ lastSearchUpdateRefParsed = undefined;
2171
+ }
2172
+ // H4sIADGRuGgAA3WTy07eQAxGXwVlXUtje27uruqWd0C2x1NaAa2AdoN49xq6-LOgUpQo0onny7H9ctzHsy591q8_73_dxXM8xNPT8fnl-KN3v-P4fHy5vj4-HQ96__5yd3e8fjqeQh_9Nt9v48fVfayr9f3b1YrHBH3f3GDBaj4Zui-HuvsADeO8KeFGrmYrj8hCbzTZrF0coRMRVEYHGcKAsW1Iw8qiF3ox06zbASth1t4GVsqCUvIxqO9R-EJ7w2aDJnjHCbV6JtmlgOSHQzB4DLvQtiwiRGB3aUk3h0lLgdyjFiyD8USPhd55BYzakkbaSbeA2jfmFaV7v9BMErKLguWpUNdQEKwTsqqXNETL_eRkbqojy1K0pCtVkK4LJM2VPtk6lQtdcIpSs2RGno9aQG0LSJrmvgrKHCeDFWWQN0iNNZMYgczFQNtH0VbqKifaq7uVBFdvBIgRIBoClcLXQFlC7VR7E7l2PdHKnH36kN5rJFY96Z0m3mhTKv-hG8cscytgU0vLnAOlTNAWdd_TR11y8m3dsxsGyJp_2XOg5hyZOxaP2Qu6nX137DbnW5L0_S-3p9CPk2hC09sG15SXgrKrHgQlpYe6ZKl9oScNb74IOmMmmbkSYmmHdYWZ7z3baWKpiWq0nA6u2fkEYFoOS-_OtibuIqfdaa0oDytgnB2saSC3YTSI0UKIc9nofWJf_wIRCrRd6AMAAA
2173
+ // Check if this is an external URL change (not from our own updates)
2174
+ // Only trigger refreshData if there's a meaningful change in the URL value
2175
+ if (search?.[name] !== undefined && !dequal(lastSearchUpdateRefParsed, currentSearchValueParsed)) {
2176
+ // This is an external URL change with actual data, trigger refreshData
2177
+ void requestAnimationFrame(() => {
2178
2178
  if (refreshDataRef.current) {
2179
2179
  refreshDataRef.current();
2180
2180
  }
2181
- }
2182
- });
2181
+ });
2182
+ }
2183
2183
  }
2184
2184
  }, [search, name, inputLoadData, inputSaveData, decode]);
2185
2185
  const saveData = useCallback((filterBarConfig, filterBarDefinitions) => {
@@ -2318,13 +2318,17 @@ const useFilterBarPersistence = ({ name, setValue, refreshData, isDefaultValue,
2318
2318
  initialFilterBarConfig.setters[`set${capitalize(key)}`] = (callback) => setValue(key, callback);
2319
2319
  });
2320
2320
  const urlObject = getFilterValuesToUrl(initialFilterBarConfig.values, updatedFilterDefinitionsValues, false, isDefaultValue);
2321
+ let needUpdate = false;
2321
2322
  const result = {};
2322
2323
  if (initialFilterBarConfig.name) {
2323
2324
  result[initialFilterBarConfig.name] = encode(urlObject);
2325
+ needUpdate = !dequal(lastSearchUpdateRef.current, result[initialFilterBarConfig.name]);
2324
2326
  // Update the ref BEFORE updating the URL to prevent false external change detection
2325
2327
  lastSearchUpdateRef.current = result[initialFilterBarConfig.name];
2326
2328
  }
2327
- updateSearch(result);
2329
+ if (needUpdate) {
2330
+ void updateSearch(result);
2331
+ }
2328
2332
  return initialFilterBarConfig;
2329
2333
  }, [name, setValue, loadValues, getFilterValuesToUrl, updateSearch, encode, isDefaultValue]);
2330
2334
  return useMemo(() => ({ loadData, saveData, getFilterValuesToUrl }), [loadData, saveData, getFilterValuesToUrl]);
@@ -2358,6 +2362,10 @@ const useGenericSetValue = () => {
2358
2362
  * @returns {object} An object containing filter bar configuration and actions.
2359
2363
  */
2360
2364
  const useFilterBar = ({ name, onValuesChange, filterBarDefinition, loadData: inputLoadData, saveData: inputSaveData, }) => {
2365
+ const filterBarDefinitionRef = useRef(filterBarDefinition);
2366
+ useEffect(() => {
2367
+ filterBarDefinitionRef.current = filterBarDefinition;
2368
+ }, [filterBarDefinition]);
2361
2369
  const lastName = useRef(name);
2362
2370
  const { setValue } = useGenericSetValue();
2363
2371
  const { isDefaultValue } = useIsDefaultValue();
@@ -2365,13 +2373,16 @@ const useFilterBar = ({ name, onValuesChange, filterBarDefinition, loadData: inp
2365
2373
  name,
2366
2374
  isDefaultValue: (key, value) => isDefaultValue(key, value, filterBarDefinition),
2367
2375
  setValue: (key, callback) => setValue(setFilterBarConfig, key, callback),
2368
- refreshData: () => setFilterBarConfig(loadData(objectValues(filterBarDefinition))),
2376
+ refreshData: () => refreshData(),
2369
2377
  loadData: inputLoadData,
2370
2378
  saveData: inputSaveData,
2371
2379
  });
2372
2380
  const [filterBarConfig, setFilterBarConfig] = useState(() => {
2373
2381
  return loadData(objectValues(filterBarDefinition));
2374
2382
  });
2383
+ const refreshData = useCallback(() => {
2384
+ setFilterBarConfig(loadData(objectValues(filterBarDefinitionRef.current)));
2385
+ }, [loadData, setFilterBarConfig]);
2375
2386
  const setValueMemoized = useCallback((key, callback) => {
2376
2387
  setValue(setFilterBarConfig, key, callback);
2377
2388
  }, [setFilterBarConfig, setValue]);
@@ -2400,16 +2411,20 @@ const useFilterBar = ({ name, onValuesChange, filterBarDefinition, loadData: inp
2400
2411
  },
2401
2412
  immediate: true,
2402
2413
  });
2414
+ const loadDataRef = useRef(loadData);
2415
+ useEffect(() => {
2416
+ loadDataRef.current = loadData;
2417
+ }, [loadData]);
2403
2418
  useEffect(() => {
2404
2419
  if (lastName.current !== name) {
2405
- setFilterBarConfig(loadData(objectValues(filterBarDefinition)));
2420
+ setFilterBarConfig(loadDataRef.current(objectValues(filterBarDefinitionRef.current)));
2406
2421
  lastName.current = name;
2407
2422
  }
2408
- }, [filterBarDefinition, loadData, name]);
2423
+ }, [name]);
2409
2424
  return useMemo(() => {
2410
2425
  return {
2411
2426
  filterBarConfig: { ...filterBarConfig, ...filterMapActions, ...filterMapGetter },
2412
- filterBarDefinition,
2427
+ filterBarDefinition: Object.freeze(filterBarDefinition),
2413
2428
  name,
2414
2429
  onValuesChange: stableOnValuesChange,
2415
2430
  };
@@ -2435,12 +2450,18 @@ const useFilterBarAsync = ({ name, onValuesChange, filterBarDefinition, loadData
2435
2450
  }), [name]);
2436
2451
  const [filterBarConfig, setFilterBarConfig] = useState(initialFilterBarConfig);
2437
2452
  const { setValue } = useGenericSetValue();
2453
+ const refreshDataRef = useRef(() => {
2454
+ // default do nothing
2455
+ });
2438
2456
  const persistenceConfig = useMemo(() => ({
2439
2457
  name,
2440
2458
  isDefaultValue: (key, value) => isDefaultValue(key, value, filterBarDefinition, filterBarConfig.initialState),
2441
2459
  setValue: (key, callback) => setValue(setFilterBarConfig, key, callback),
2442
2460
  loadData: inputLoadData,
2443
2461
  saveData: inputSaveData,
2462
+ refreshData: () => {
2463
+ refreshDataRef.current();
2464
+ },
2444
2465
  }), [
2445
2466
  name,
2446
2467
  isDefaultValue,
@@ -2452,6 +2473,14 @@ const useFilterBarAsync = ({ name, onValuesChange, filterBarDefinition, loadData
2452
2473
  inputSaveData,
2453
2474
  ]);
2454
2475
  const { loadData, saveData } = useFilterBarPersistence(persistenceConfig);
2476
+ const refreshData = useCallback(() => {
2477
+ if (isDataLoaded) {
2478
+ setFilterBarConfig(loadData(objectValues(internalFilterBarDefinitions)));
2479
+ }
2480
+ }, [loadData, setFilterBarConfig, internalFilterBarDefinitions, isDataLoaded]);
2481
+ useEffect(() => {
2482
+ refreshDataRef.current = refreshData;
2483
+ }, [refreshData]);
2455
2484
  const setValueMemoized = useCallback((key, callback) => {
2456
2485
  setValue(setFilterBarConfig, key, callback);
2457
2486
  }, [setFilterBarConfig, setValue]);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trackunit/filters-filter-bar",
3
- "version": "1.8.152",
3
+ "version": "1.8.156",
4
4
  "repository": "https://github.com/Trackunit/manager",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "engines": {
@@ -12,17 +12,17 @@
12
12
  "tailwind-merge": "^2.0.0",
13
13
  "string-ts": "^2.0.0",
14
14
  "zod": "^3.23.8",
15
- "@trackunit/iris-app-api": "1.9.34",
16
- "@trackunit/react-core-hooks": "1.7.110",
17
- "@trackunit/react-filter-components": "1.7.146",
18
- "@trackunit/react-date-and-time-components": "1.10.146",
19
- "@trackunit/shared-utils": "1.9.96",
20
- "@trackunit/react-form-components": "1.8.143",
21
- "@trackunit/iris-app-runtime-core-api": "1.7.106",
22
- "@trackunit/geo-json-utils": "1.7.96",
23
- "@trackunit/i18n-library-translation": "1.7.114",
24
- "@trackunit/css-class-variance-utilities": "1.7.96",
25
- "@trackunit/react-components": "1.10.71",
15
+ "@trackunit/iris-app-api": "1.9.37",
16
+ "@trackunit/react-core-hooks": "1.7.113",
17
+ "@trackunit/react-filter-components": "1.7.150",
18
+ "@trackunit/react-date-and-time-components": "1.10.150",
19
+ "@trackunit/shared-utils": "1.9.99",
20
+ "@trackunit/react-form-components": "1.8.147",
21
+ "@trackunit/iris-app-runtime-core-api": "1.7.109",
22
+ "@trackunit/geo-json-utils": "1.7.99",
23
+ "@trackunit/i18n-library-translation": "1.7.117",
24
+ "@trackunit/css-class-variance-utilities": "1.7.99",
25
+ "@trackunit/react-components": "1.10.75",
26
26
  "@tanstack/react-router": "1.114.29"
27
27
  },
28
28
  "module": "./index.esm.js",