From 1a56527de83e6a9b0c79249bc73e097268e41eeb Mon Sep 17 00:00:00 2001 From: PeterYurkovich Date: Tue, 16 Jun 2026 07:43:30 -0400 Subject: [PATCH] fix: respect initial filters when array --- packages/module/src/Hooks/filters.test.tsx | 15 +++++++++++++-- packages/module/src/Hooks/filters.ts | 13 +++++++------ 2 files changed, 20 insertions(+), 8 deletions(-) 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 })