Skip to content

Commit d13d773

Browse files
introduce replace for users state in url
1 parent 955c998 commit d13d773

File tree

1 file changed

+38
-15
lines changed

1 file changed

+38
-15
lines changed

src/pages/users/Users.tsx

+38-15
Original file line numberDiff line numberDiff line change
@@ -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+
2332
const 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

Comments
 (0)