Skip to content

Commit de323e3

Browse files
committed
handle falsy query parameter values correctly
1 parent 3e93932 commit de323e3

5 files changed

Lines changed: 54 additions & 7 deletions

File tree

src/__test__/inMemoryPagination.test.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,3 +113,17 @@ test('query a property that is not configured, should do nothing', () => {
113113
expect(result.current.queryParameters.search).toBe('')
114114
expect(result.current.queryParameters.department).toBeUndefined()
115115
})
116+
117+
test('query property with empty value and different default value', () => {
118+
const { result } = renderHook(() =>
119+
useQueryAndPagination({
120+
defaultQueryParameters: { search: 'Default search' },
121+
})
122+
)
123+
124+
act(() => {
125+
result.current.actions.updateQuery({ search: '' })
126+
})
127+
128+
expect(result.current.queryParameters.search).toBe('')
129+
})

src/__test__/nextRouterPagination.test.tsx

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,3 +168,18 @@ test('query property with default value, should remove it from url', () => {
168168
expect(result.current.queryParameters.search).toBe('')
169169
expect(router.query.search).toBeUndefined()
170170
})
171+
172+
test('query property with empty value and different default value', () => {
173+
const { result } = renderHook(() =>
174+
useQueryAndPagination({
175+
defaultQueryParameters: { search: 'Default search' },
176+
})
177+
)
178+
179+
act(() => {
180+
result.current.actions.updateQuery({ search: '' })
181+
})
182+
183+
expect(result.current.queryParameters.search).toBe('')
184+
expect(router.query.search).toBe('')
185+
})

src/__test__/reactRouterPagination.test.tsx

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,3 +151,20 @@ test('query property with default value, should remove it from url', () => {
151151
expect(result.current.queryParameters.search).toBe('')
152152
expect(window.location.search).toBe('')
153153
})
154+
155+
test('query property with empty value and different default value', () => {
156+
const { result } = renderHook(
157+
() =>
158+
useQueryAndPagination({
159+
defaultQueryParameters: { search: 'Default search' },
160+
}),
161+
{ wrapper }
162+
)
163+
164+
act(() => {
165+
result.current.actions.updateQuery({ search: '' })
166+
})
167+
168+
expect(result.current.queryParameters.search).toBe('')
169+
expect(window.location.search).toBe('?search=')
170+
})

src/nextRouterPagination.tsx

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,10 @@ function extractCurrentQueryParameters(
2222
const result: QueryParameters = { ...defaultQueryParameters }
2323

2424
for (const parameter in defaultQueryParameters) {
25-
if (
26-
query[parameter] &&
27-
getSingleParameterValue(query[parameter]) !== undefined
28-
) {
29-
result[parameter] = getSingleParameterValue(query[parameter]) as string
25+
const queryParameter = getSingleParameterValue(query[parameter])
26+
27+
if (typeof queryParameter !== 'undefined') {
28+
result[parameter] = queryParameter
3029
}
3130
}
3231

src/reactRouterPagination.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,10 @@ function extractCurrentQueryParameters(
1515
const result: QueryParameters = { ...defaultQueryParameters }
1616

1717
for (const parameter in defaultQueryParameters) {
18-
if (query.get(parameter)) {
19-
result[parameter] = query.get(parameter) as string
18+
const queryParameter = query.get(parameter)
19+
20+
if (queryParameter !== null) {
21+
result[parameter] = queryParameter
2022
}
2123
}
2224

0 commit comments

Comments
 (0)