Skip to content

Commit 7ba746b

Browse files
committed
fix: update hook for filters
1 parent e122f5f commit 7ba746b

File tree

1 file changed

+14
-13
lines changed

1 file changed

+14
-13
lines changed

packages/module/src/Hooks/filters.ts

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,27 +16,28 @@ export const useDataViewFilters = <T extends object>({
1616
}: UseDataViewFiltersProps<T>) => {
1717
const isUrlSyncEnabled = useMemo(() => searchParams && !!setSearchParams, [ searchParams, setSearchParams ]);
1818

19-
const getInitialFilters = useCallback((): T => isUrlSyncEnabled ? Object.keys(initialFilters).reduce((loadedFilters, key) => {
20-
const urlValue = searchParams?.get(key);
21-
loadedFilters[key as keyof T] = urlValue
22-
? (urlValue as T[keyof T] | T[keyof T])
23-
: initialFilters[key as keyof T];
24-
return loadedFilters;
25-
// eslint-disable-next-line react-hooks/exhaustive-deps
26-
}, { ...initialFilters }) : initialFilters, [ isUrlSyncEnabled, JSON.stringify(initialFilters), searchParams?.toString() ]);
19+
const getInitialFilters = useCallback((): T => isUrlSyncEnabled
20+
? Object.keys(initialFilters).reduce((loadedFilters, key) => {
21+
const urlValue = searchParams?.get(key);
22+
const isArrayFilter = Array.isArray(initialFilters[key]);
2723

24+
// eslint-disable-next-line no-nested-ternary
25+
loadedFilters[key] = urlValue
26+
? (isArrayFilter && !Array.isArray(urlValue) ? [ urlValue ] : urlValue)
27+
: initialFilters[key];
28+
29+
return loadedFilters;
30+
}, { ...initialFilters })
31+
: initialFilters, [ isUrlSyncEnabled, initialFilters, searchParams ]);
2832
const [ filters, setFilters ] = useState<T>(getInitialFilters());
2933

3034
const updateSearchParams = useCallback(
3135
(newFilters: T) => {
3236
if (isUrlSyncEnabled) {
3337
const params = new URLSearchParams(searchParams);
3438
Object.entries(newFilters).forEach(([ key, value ]) => {
35-
if (value) {
36-
params.set(key, Array.isArray(value) ? value.join(',') : value);
37-
} else {
38-
params.delete(key);
39-
}
39+
params.delete(key);
40+
(Array.isArray(value) ? value : [ value ]).forEach((val) => value && params.append(key, val));
4041
});
4142
setSearchParams?.(params);
4243
}

0 commit comments

Comments
 (0)