diff --git a/packages/module/src/Hooks/filters.test.tsx b/packages/module/src/Hooks/filters.test.tsx index 22479ace..e6a654b8 100644 --- a/packages/module/src/Hooks/filters.test.tsx +++ b/packages/module/src/Hooks/filters.test.tsx @@ -77,8 +77,19 @@ describe('useDataViewFilters', () => { setSearchParams, }; const { result } = renderHook(() => useDataViewFilters(props)); - expect(result.current.filters).toEqual({ test: [ 'foo', 'bar' ] }); - }) + expect(result.current.filters).toEqual({ test: ['foo', 'bar'] }); + }); + it('should respect initial filters', () => { + const searchParams = new URLSearchParams(); + const setSearchParams = jest.fn(); + const props: UseDataViewFiltersProps<{ test: string[] }> = { + initialFilters: { test: ['foo'] }, + searchParams, + setSearchParams + }; + const { result } = renderHook(() => useDataViewFilters(props)); + expect(result.current.filters).toEqual({ test: ['foo'] }); + }); it('should reset filters to default values when clearAllFilters is called', () => { const { result } = renderHook(() => useDataViewFilters({ initialFilters })); diff --git a/packages/module/src/Hooks/filters.ts b/packages/module/src/Hooks/filters.ts index 8ba09333..6f0a6a06 100644 --- a/packages/module/src/Hooks/filters.ts +++ b/packages/module/src/Hooks/filters.ts @@ -19,12 +19,13 @@ export const useDataViewFilters = ({ const getInitialFilters = useCallback((): T => isUrlSyncEnabled ? Object.keys(initialFilters).reduce((loadedFilters, 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 - ? (isArrayFilter && !Array.isArray(urlValue) ? [ urlValue ] : urlValue) - : initialFilters[key]; + if (isArrayFilter) { + const urlValue = searchParams?.getAll(key) ?? []; + loadedFilters[key] = urlValue.length > 0 ? urlValue : initialFilters[key]; + } else { + const urlValue = searchParams?.get(key); + loadedFilters[key] = urlValue ? urlValue : initialFilters[key]; + } return loadedFilters; }, { ...initialFilters })