@@ -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