From de323e3e992057628c1a89801a8d253603909a4b Mon Sep 17 00:00:00 2001 From: Lukas Weiss Date: Fri, 26 Aug 2022 15:47:56 +0200 Subject: [PATCH] handle falsy query parameter values correctly --- src/__test__/inMemoryPagination.test.ts | 14 ++++++++++++++ src/__test__/nextRouterPagination.test.tsx | 15 +++++++++++++++ src/__test__/reactRouterPagination.test.tsx | 17 +++++++++++++++++ src/nextRouterPagination.tsx | 9 ++++----- src/reactRouterPagination.tsx | 6 ++++-- 5 files changed, 54 insertions(+), 7 deletions(-) diff --git a/src/__test__/inMemoryPagination.test.ts b/src/__test__/inMemoryPagination.test.ts index 992dba2..5e76501 100644 --- a/src/__test__/inMemoryPagination.test.ts +++ b/src/__test__/inMemoryPagination.test.ts @@ -113,3 +113,17 @@ test('query a property that is not configured, should do nothing', () => { expect(result.current.queryParameters.search).toBe('') expect(result.current.queryParameters.department).toBeUndefined() }) + +test('query property with empty value and different default value', () => { + const { result } = renderHook(() => + useQueryAndPagination({ + defaultQueryParameters: { search: 'Default search' }, + }) + ) + + act(() => { + result.current.actions.updateQuery({ search: '' }) + }) + + expect(result.current.queryParameters.search).toBe('') +}) diff --git a/src/__test__/nextRouterPagination.test.tsx b/src/__test__/nextRouterPagination.test.tsx index b9a9624..91b6a30 100644 --- a/src/__test__/nextRouterPagination.test.tsx +++ b/src/__test__/nextRouterPagination.test.tsx @@ -168,3 +168,18 @@ test('query property with default value, should remove it from url', () => { expect(result.current.queryParameters.search).toBe('') expect(router.query.search).toBeUndefined() }) + +test('query property with empty value and different default value', () => { + const { result } = renderHook(() => + useQueryAndPagination({ + defaultQueryParameters: { search: 'Default search' }, + }) + ) + + act(() => { + result.current.actions.updateQuery({ search: '' }) + }) + + expect(result.current.queryParameters.search).toBe('') + expect(router.query.search).toBe('') +}) diff --git a/src/__test__/reactRouterPagination.test.tsx b/src/__test__/reactRouterPagination.test.tsx index c296785..1f8fb1f 100644 --- a/src/__test__/reactRouterPagination.test.tsx +++ b/src/__test__/reactRouterPagination.test.tsx @@ -151,3 +151,20 @@ test('query property with default value, should remove it from url', () => { expect(result.current.queryParameters.search).toBe('') expect(window.location.search).toBe('') }) + +test('query property with empty value and different default value', () => { + const { result } = renderHook( + () => + useQueryAndPagination({ + defaultQueryParameters: { search: 'Default search' }, + }), + { wrapper } + ) + + act(() => { + result.current.actions.updateQuery({ search: '' }) + }) + + expect(result.current.queryParameters.search).toBe('') + expect(window.location.search).toBe('?search=') +}) diff --git a/src/nextRouterPagination.tsx b/src/nextRouterPagination.tsx index 744826a..0c36b77 100644 --- a/src/nextRouterPagination.tsx +++ b/src/nextRouterPagination.tsx @@ -22,11 +22,10 @@ function extractCurrentQueryParameters( const result: QueryParameters = { ...defaultQueryParameters } for (const parameter in defaultQueryParameters) { - if ( - query[parameter] && - getSingleParameterValue(query[parameter]) !== undefined - ) { - result[parameter] = getSingleParameterValue(query[parameter]) as string + const queryParameter = getSingleParameterValue(query[parameter]) + + if (typeof queryParameter !== 'undefined') { + result[parameter] = queryParameter } } diff --git a/src/reactRouterPagination.tsx b/src/reactRouterPagination.tsx index 8d119b2..c2e800d 100644 --- a/src/reactRouterPagination.tsx +++ b/src/reactRouterPagination.tsx @@ -15,8 +15,10 @@ function extractCurrentQueryParameters( const result: QueryParameters = { ...defaultQueryParameters } for (const parameter in defaultQueryParameters) { - if (query.get(parameter)) { - result[parameter] = query.get(parameter) as string + const queryParameter = query.get(parameter) + + if (queryParameter !== null) { + result[parameter] = queryParameter } }