@@ -20,6 +20,15 @@ type UsersSearchParams = {
20
20
desc : boolean
21
21
}
22
22
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
+
23
32
const buildPage = ( pagination : PaginationState , sorting : SortingState ) : Page => {
24
33
return new Page ( pagination . pageIndex , pagination . pageSize , sorting [ 0 ] . id , sorting [ 0 ] . desc ? 'DESC' : 'ASC' )
25
34
}
@@ -28,16 +37,29 @@ const toPayload = (data: Page): PayloadAction<{ page: number; pageSize: number;
28
37
return { payload : { page : data . page , pageSize : data . pageSize , sort : data . sort , direction : data . direction } , type : '' }
29
38
}
30
39
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 */ ) => {
33
45
const getSearchParams = ( ) : UsersSearchParams => {
34
46
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 ,
39
60
}
40
61
}
62
+ const [ searchParams , setSearchParams ] = useSearchParams ( )
41
63
42
64
const [ pagination , setPagination ] = useState < PaginationState > ( {
43
65
pageIndex : getSearchParams ( ) . page ,
@@ -64,15 +86,16 @@ export const Users: React.FC = () => {
64
86
} , [ searchParams ] )
65
87
66
88
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
+ )
76
99
} , [ pagination , sorting ] )
77
100
78
101
if ( users . isLoading ) {
0 commit comments