1- import { useCallback } from 'react' ;
1+ import { useCallback , useMemo } from 'react' ;
22import { useSearchParams } from 'react-router' ;
33import { type DataTableRouterState , dataTableRouterParsers } from './data-table-router-parsers' ;
44
@@ -14,18 +14,20 @@ export function useDataTableUrlState() {
1414 const [ searchParams , setSearchParams ] = useSearchParams ( ) ;
1515
1616 // Parse URL search parameters using our custom parsers
17- const urlState : DataTableRouterState = {
18- search : dataTableRouterParsers . search . parse ( searchParams . get ( 'search' ) ) ,
19- filters : dataTableRouterParsers . filters . parse ( searchParams . get ( 'filters' ) ) ,
20- page : dataTableRouterParsers . page . parse ( searchParams . get ( 'page' ) ) ,
21- pageSize : dataTableRouterParsers . pageSize . parse ( searchParams . get ( 'pageSize' ) ) ,
22- sortField : dataTableRouterParsers . sortField . parse ( searchParams . get ( 'sortField' ) ) ,
23- // 'asc' or 'desc'
24- sortOrder : dataTableRouterParsers . sortOrder . parse ( searchParams . get ( 'sortOrder' ) ) ,
25- } ;
17+ const urlState : DataTableRouterState = useMemo (
18+ ( ) => ( {
19+ search : dataTableRouterParsers . search . parse ( searchParams . get ( 'search' ) ) ,
20+ filters : dataTableRouterParsers . filters . parse ( searchParams . get ( 'filters' ) ) ,
21+ page : dataTableRouterParsers . page . parse ( searchParams . get ( 'page' ) ) ,
22+ pageSize : dataTableRouterParsers . pageSize . parse ( searchParams . get ( 'pageSize' ) ) ,
23+ sortField : dataTableRouterParsers . sortField . parse ( searchParams . get ( 'sortField' ) ) ,
24+ // 'asc' or 'desc'
25+ sortOrder : dataTableRouterParsers . sortOrder . parse ( searchParams . get ( 'sortOrder' ) ) ,
26+ } ) ,
27+ [ searchParams ] ,
28+ ) ;
2629
2730 // Function to update URL search parameters
28- // biome-ignore lint/correctness/useExhaustiveDependencies: setSearchParams is stable; urlState is read at call time
2931 const setUrlState = useCallback (
3032 ( newState : Partial < DataTableRouterState > ) => {
3133 const updatedState = { ...urlState , ...newState } ;
@@ -65,7 +67,7 @@ export function useDataTableUrlState() {
6567 // Update the URL with the new search parameters
6668 setSearchParams ( newParams , { replace : true } ) ;
6769 } ,
68- [ setSearchParams ] ,
70+ [ setSearchParams , urlState ] ,
6971 ) ;
7072
7173 // Return the current URL state and the function to update it
0 commit comments