Skip to content

Commit 8c248d8

Browse files
an unkown query property should not be saved in state
1 parent d6029a1 commit 8c248d8

2 files changed

Lines changed: 32 additions & 21 deletions

File tree

src/__test__/inMemoryPagination.test.ts

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -21,19 +21,19 @@ test('should change page', () => {
2121

2222
test('should change search', () => {
2323
const { result } = renderHook(() =>
24-
useQueryAndPagination({ defaultQueryParameters: { query: '' } })
24+
useQueryAndPagination({ defaultQueryParameters: { search: '' } })
2525
)
2626

2727
act(() => {
28-
result.current.actions.query({ query: 'Max' })
28+
result.current.actions.query({ search: 'Max' })
2929
})
3030

31-
expect(result.current.queryParameters.query).toBe('Max')
31+
expect(result.current.queryParameters.search).toBe('Max')
3232
})
3333

3434
test('on search change -> page should be reset', () => {
3535
const { result } = renderHook(() =>
36-
useQueryAndPagination({ defaultQueryParameters: { query: '' } })
36+
useQueryAndPagination({ defaultQueryParameters: { search: '' } })
3737
)
3838

3939
act(() => {
@@ -43,34 +43,34 @@ test('on search change -> page should be reset', () => {
4343
expect(result.current.page).toBe(2)
4444

4545
act(() => {
46-
result.current.actions.query({ query: 'Max' })
46+
result.current.actions.query({ search: 'Max' })
4747
})
4848

49-
expect(result.current.queryParameters.query).toBe('Max')
49+
expect(result.current.queryParameters.search).toBe('Max')
5050
expect(result.current.page).toBe(0)
5151
})
5252

5353
test('clear pagination should reset search and page', () => {
5454
const { result } = renderHook(() =>
55-
useQueryAndPagination({ defaultQueryParameters: { query: '' } })
55+
useQueryAndPagination({ defaultQueryParameters: { search: '' } })
5656
)
5757

5858
act(() => {
59-
result.current.actions.query({ query: 'Max' })
59+
result.current.actions.query({ search: 'Max' })
6060
})
6161

6262
act(() => {
6363
result.current.actions.setPage(2)
6464
})
6565

66-
expect(result.current.queryParameters.query).toBe('Max')
66+
expect(result.current.queryParameters.search).toBe('Max')
6767
expect(result.current.page).toBe(2)
6868

6969
act(() => {
7070
result.current.actions.clear()
7171
})
7272

73-
expect(result.current.queryParameters.query).toBe('')
73+
expect(result.current.queryParameters.search).toBe('')
7474
expect(result.current.page).toBe(0)
7575
})
7676

@@ -86,32 +86,30 @@ test('change default parameters', () => {
8686
test('query multiple different properties, should keep them all', () => {
8787
const { result } = renderHook(() =>
8888
useQueryAndPagination({
89-
defaultQueryParameters: { query: '', department: '' },
89+
defaultQueryParameters: { search: '', department: '' },
9090
})
9191
)
9292

9393
act(() => {
94-
result.current.actions.query({ query: 'Max' })
94+
result.current.actions.query({ search: 'Max' })
9595
result.current.actions.query({ department: 'IT' })
9696
})
9797

98-
expect(result.current.queryParameters.query).toBe('Max')
98+
expect(result.current.queryParameters.search).toBe('Max')
9999
expect(result.current.queryParameters.department).toBe('IT')
100100
})
101101

102102
test('query a property that is not configured, should do nothing', () => {
103103
const { result } = renderHook(() =>
104104
useQueryAndPagination({
105-
defaultQueryParameters: { query: '' },
105+
defaultQueryParameters: { search: '' },
106106
})
107107
)
108108

109109
act(() => {
110110
result.current.actions.query({ department: 'IT' })
111111
})
112112

113-
expect(result.current.queryParameters.query).toBe('')
113+
expect(result.current.queryParameters.search).toBe('')
114114
expect(result.current.queryParameters.department).toBeUndefined()
115115
})
116-
117-
// test('properties in the URL, that are not part of the configuration should be left untouched', () => {})

src/inMemoryPagination.tsx

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,26 @@ export const useQueryAndPagination: IUseQueryAndPagination = function (config) {
1717

1818
const query = useCallback((queryParameters: QueryParameters) => {
1919
setState((currentState) => {
20+
const updatedQueryParameters = {
21+
...currentState.queryParameters,
22+
...queryParameters,
23+
}
24+
25+
for (const parameter in queryParameters) {
26+
if (
27+
!!config?.defaultQueryParameters &&
28+
(config.defaultQueryParameters[parameter] === undefined ||
29+
config.defaultQueryParameters[parameter] ===
30+
queryParameters[parameter])
31+
) {
32+
delete updatedQueryParameters[parameter]
33+
}
34+
}
35+
2036
return {
2137
...currentState,
2238
page: 0,
23-
queryParameters: {
24-
...currentState.queryParameters,
25-
...queryParameters,
26-
},
39+
queryParameters: updatedQueryParameters,
2740
}
2841
})
2942
}, [])

0 commit comments

Comments
 (0)