Skip to content

Commit 0e03367

Browse files
author
devgioele
committed
make abstract set query and pagination reference stable
1 parent c31c989 commit 0e03367

1 file changed

Lines changed: 49 additions & 22 deletions

File tree

src/engine/pagination.ts

Lines changed: 49 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { useCallback, useMemo } from 'react'
12
import { queryValueToIntOrUndefined } from '../utils'
23
import {
34
Query,
@@ -56,14 +57,21 @@ export const useAbstractQueryAndPagination = <
5657
defaultPagination?: Partial<PaginationQuery>,
5758
options?: Partial<AbstractQueryOptions>,
5859
) => {
59-
const mergedDefaultPagination = {
60-
...DEFAULT_PAGINATION,
61-
...defaultPagination,
62-
}
63-
const mergedDefaultQueryAndPagination = {
64-
...defaultQuery,
65-
...mergedDefaultPagination,
66-
}
60+
const mergedDefaultPagination = useMemo(
61+
() => ({
62+
...DEFAULT_PAGINATION,
63+
...defaultPagination,
64+
}),
65+
[defaultPagination],
66+
)
67+
68+
const mergedDefaultQueryAndPagination = useMemo(
69+
() => ({
70+
...defaultQuery,
71+
...mergedDefaultPagination,
72+
}),
73+
[defaultQuery, mergedDefaultPagination],
74+
)
6775

6876
const { query, setQuery } = useAbstractQuery(
6977
router,
@@ -83,12 +91,8 @@ export const useAbstractQueryAndPagination = <
8391
options,
8492
)
8593

86-
return {
87-
query,
88-
setQuery: (
89-
query: Partial<TQuery>,
90-
options?: Partial<ChangeQueryOptions>,
91-
) => {
94+
const setQueryWithoutPagination = useCallback(
95+
(query: Partial<TQuery>, options?: Partial<ChangeQueryOptions>) => {
9296
const mergedOptions = { ...DEFAULT_CHANGE_QUERY_OPTIONS, ...options }
9397
setQuery({
9498
...query,
@@ -97,7 +101,11 @@ export const useAbstractQueryAndPagination = <
97101
: undefined,
98102
})
99103
},
100-
resetQuery: (options?: Partial<ChangeQueryOptions>) => {
104+
[setQuery, mergedDefaultPagination.page],
105+
)
106+
107+
const resetQuery = useCallback(
108+
(options?: Partial<ChangeQueryOptions>) => {
101109
const mergedOptions = { ...DEFAULT_CHANGE_QUERY_OPTIONS, ...options }
102110
setQuery({
103111
...defaultQuery,
@@ -106,18 +114,37 @@ export const useAbstractQueryAndPagination = <
106114
: undefined,
107115
})
108116
},
109-
page: pagination.page,
110-
size: pagination.size,
111-
setPage: (page: PaginationQuery['page']) => {
117+
[defaultQuery, mergedDefaultPagination.page, setQuery],
118+
)
119+
120+
const setPage = useCallback(
121+
(page: PaginationQuery['page']) => {
112122
setPagination({ page })
113123
},
114-
setSize: (size: PaginationQuery['size']) => {
124+
[setPagination],
125+
)
126+
127+
const setSize = useCallback(
128+
(size: PaginationQuery['size']) => {
115129
setPagination({ size })
116130
},
131+
[setPagination],
132+
)
133+
134+
const resetQueryAndPagination = useCallback(() => {
135+
setQuery(mergedDefaultQueryAndPagination)
136+
}, [setQuery, mergedDefaultQueryAndPagination])
137+
138+
return {
139+
query,
140+
setQuery: setQueryWithoutPagination,
141+
resetQuery,
142+
page: pagination.page,
143+
size: pagination.size,
144+
setPage,
145+
setSize,
117146
setPagination,
118147
resetPagination,
119-
resetQueryAndPagination: () => {
120-
setQuery(mergedDefaultQueryAndPagination)
121-
},
148+
resetQueryAndPagination,
122149
}
123150
}

0 commit comments

Comments
 (0)