From 550f99e3a2ccda82793060627fdb8960c2c04d76 Mon Sep 17 00:00:00 2001 From: Martin Marosi Date: Tue, 1 Apr 2025 11:24:31 +0200 Subject: [PATCH] fix(filters): properly initialize array search param --- packages/module/src/Hooks/filters.test.tsx | 27 ++++++++++++++++++++++ packages/module/src/Hooks/filters.ts | 2 +- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/packages/module/src/Hooks/filters.test.tsx b/packages/module/src/Hooks/filters.test.tsx index d3ea7a87..22479ace 100644 --- a/packages/module/src/Hooks/filters.test.tsx +++ b/packages/module/src/Hooks/filters.test.tsx @@ -53,6 +53,33 @@ describe('useDataViewFilters', () => { expect(setSearchParams).toHaveBeenCalled(); }); + it('should sync with URL search params with non array value', () => { + const searchParams = new URLSearchParams(); + searchParams.set('test', 'foo'); + const setSearchParams = jest.fn(); + const props: UseDataViewFiltersProps<{ test: string }> = { + initialFilters: { test: '' }, + searchParams, + setSearchParams, + }; + const { result } = renderHook(() => useDataViewFilters(props)); + expect(result.current.filters).toEqual({ test: 'foo' }); + }) + it('should sync with URL search params with array value', () => { + + const searchParams = new URLSearchParams(); + searchParams.append('test', 'foo'); + searchParams.append('test', 'bar'); + const setSearchParams = jest.fn(); + const props: UseDataViewFiltersProps<{ test: string[] }> = { + initialFilters: { test: [] }, + searchParams, + setSearchParams, + }; + const { result } = renderHook(() => useDataViewFilters(props)); + expect(result.current.filters).toEqual({ test: [ 'foo', 'bar' ] }); + }) + it('should reset filters to default values when clearAllFilters is called', () => { const { result } = renderHook(() => useDataViewFilters({ initialFilters })); act(() => result.current.clearAllFilters()); diff --git a/packages/module/src/Hooks/filters.ts b/packages/module/src/Hooks/filters.ts index 177e5f30..8ba09333 100644 --- a/packages/module/src/Hooks/filters.ts +++ b/packages/module/src/Hooks/filters.ts @@ -18,8 +18,8 @@ export const useDataViewFilters = ({ const getInitialFilters = useCallback((): T => isUrlSyncEnabled ? Object.keys(initialFilters).reduce((loadedFilters, key) => { - const urlValue = searchParams?.get(key); const isArrayFilter = Array.isArray(initialFilters[key]); + const urlValue = isArrayFilter ? searchParams?.getAll(key) : searchParams?.get(key); // eslint-disable-next-line no-nested-ternary loadedFilters[key] = urlValue