Skip to content

Commit 47f7768

Browse files
authored
Merge pull request #67 from lambda-curry/codegen-bot/fix-useFilterSync-functional-updates
2 parents 3c234af + 8100ef2 commit 47f7768

1 file changed

Lines changed: 10 additions & 6 deletions

File tree

packages/components/src/ui/utils/use-filter-sync.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,24 @@ import { dataTableRouterParsers } from '../../remix-hook-form/data-table-router-
1111
*
1212
* @returns A tuple containing the current filter state and a function to update it
1313
*/
14-
export function useFilterSync(): [BazzaFiltersState, (newFilters: BazzaFiltersState) => void] {
14+
export function useFilterSync(): [BazzaFiltersState, (newFilters: BazzaFiltersState | ((prev: BazzaFiltersState) => BazzaFiltersState)) => void] {
1515
const [searchParams, setSearchParams] = useSearchParams();
1616

1717
// Parse filters from URL
1818
const filtersFromUrl = dataTableRouterParsers.filters.parse(searchParams.get('filters'));
1919

2020
// Function to update filters in URL
21-
const setFilters = useCallback((newFilters: BazzaFiltersState) => {
21+
const setFilters = useCallback((newFilters: BazzaFiltersState | ((prev: BazzaFiltersState) => BazzaFiltersState)) => {
22+
// Handle functional updates by resolving the function with current filters
23+
const resolvedFilters = typeof newFilters === 'function'
24+
? newFilters(filtersFromUrl)
25+
: newFilters;
26+
2227
const newParams = new URLSearchParams(searchParams);
2328

2429
// Update or remove the filters parameter
25-
if (newFilters.length > 0) {
26-
const serialized = dataTableRouterParsers.filters.serialize(newFilters);
30+
if (resolvedFilters.length > 0) {
31+
const serialized = dataTableRouterParsers.filters.serialize(resolvedFilters);
2732
if (serialized !== null) {
2833
newParams.set('filters', serialized);
2934
}
@@ -33,8 +38,7 @@ export function useFilterSync(): [BazzaFiltersState, (newFilters: BazzaFiltersSt
3338

3439
// Update the URL with the new search parameters
3540
setSearchParams(newParams, { replace: true });
36-
}, [searchParams, setSearchParams]);
41+
}, [searchParams, setSearchParams, filtersFromUrl]);
3742

3843
return [filtersFromUrl, setFilters];
3944
}
40-

0 commit comments

Comments
 (0)