@@ -20,6 +20,15 @@ type UsersSearchParams = {
2020 desc : boolean
2121}
2222
23+ const toString = ( params : UsersSearchParams ) => {
24+ return {
25+ page : `${ params . page } ` ,
26+ size : `${ params . size } ` ,
27+ sort : `${ params . sort } ` ,
28+ desc : `${ params . desc } ` ,
29+ }
30+ }
31+
2332const buildPage = ( pagination : PaginationState , sorting : SortingState ) : Page => {
2433 return new Page ( pagination . pageIndex , pagination . pageSize , sorting [ 0 ] . id , sorting [ 0 ] . desc ? 'DESC' : 'ASC' )
2534}
@@ -28,16 +37,29 @@ const toPayload = (data: Page): PayloadAction<{ page: number; pageSize: number;
2837 return { payload : { page : data . page , pageSize : data . pageSize , sort : data . sort , direction : data . direction } , type : '' }
2938}
3039
31- export const Users : React . FC = ( ) => {
32- const [ searchParams , setSearchParams ] = useSearchParams ( )
40+ export type UsersProps = {
41+ // props goes here...
42+ }
43+
44+ export const Users : React . FC < UsersProps > = ( /* props: UsersProps */ ) => {
3345 const getSearchParams = ( ) : UsersSearchParams => {
3446 return {
35- page : ( searchParams . get ( 'page' ) && parseInt ( searchParams . get ( 'page' ) ! ) ) || 0 ,
36- size : ( searchParams . get ( 'size' ) && parseInt ( searchParams . get ( 'size' ) ! ) ) || 5 ,
37- sort : ( searchParams . get ( 'sort' ) && searchParams . get ( 'sort' ) ! ) || '_id' ,
38- desc : ( searchParams . get ( 'desc' ) && searchParams . get ( 'desc' ) ! === 'true' ) || false ,
47+ page : searchParams . has ( 'page' ) ? parseInt ( searchParams . get ( 'page' ) ! ) : 0 ,
48+ size : searchParams . has ( 'size' ) ? parseInt ( searchParams . get ( 'size' ) ! ) : 5 ,
49+ sort : searchParams . has ( 'sort' ) ? searchParams . get ( 'sort' ) ! : '_id' ,
50+ desc : searchParams . has ( 'desc' ) ? searchParams . get ( 'desc' ) ! === 'true' : false ,
51+ }
52+ }
53+
54+ const createSearchParams = ( ) : UsersSearchParams => {
55+ return {
56+ page : pagination . pageIndex ,
57+ size : pagination . pageSize ,
58+ sort : sorting [ 0 ] . id ,
59+ desc : sorting [ 0 ] . desc ,
3960 }
4061 }
62+ const [ searchParams , setSearchParams ] = useSearchParams ( )
4163
4264 const [ pagination , setPagination ] = useState < PaginationState > ( {
4365 pageIndex : getSearchParams ( ) . page ,
@@ -64,15 +86,16 @@ export const Users: React.FC = () => {
6486 } , [ searchParams ] )
6587
6688 useEffect ( ( ) => {
67- const params : UsersSearchParams = {
68- page : pagination . pageIndex ,
69- size : pagination . pageSize ,
70- sort : sorting [ 0 ] . id ,
71- desc : sorting [ 0 ] . desc ,
72- }
73- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
74- // @ts -expect-error
75- setSearchParams ( params )
89+ const params = createSearchParams ( )
90+ setSearchParams (
91+ ( prevParams ) => {
92+ return new URLSearchParams ( {
93+ ...Object . fromEntries ( prevParams . entries ( ) ) ,
94+ ...toString ( params ) ,
95+ } )
96+ } ,
97+ { replace : true }
98+ )
7699 } , [ pagination , sorting ] )
77100
78101 if ( users . isLoading ) {
0 commit comments