diff --git a/modules/utils/__tests__/createSearch-test.js b/modules/utils/__tests__/createSearch-test.js index 0a887a0..59cb4a7 100644 --- a/modules/utils/__tests__/createSearch-test.js +++ b/modules/utils/__tests__/createSearch-test.js @@ -5,6 +5,11 @@ describe('createSearch', () => { expect(createSearch({ a: 'a', b: '' })).toEqual('?a=a&b'); }); + it('omits the trailing = for null/undefined values', () => { + expect(createSearch({ a: 'a', b: null })).toEqual('?a=a&b'); + expect(createSearch({ a: 'a', b: undefined })).toEqual('?a=a&b'); + }); + it('sorts keys', () => { expect(createSearch({ b: 'b', a: 'a', c: 'c' })).toEqual('?a=a&b=b&c=c'); }); diff --git a/modules/utils/createSearch.js b/modules/utils/createSearch.js index bfa8991..3e54201 100644 --- a/modules/utils/createSearch.js +++ b/modules/utils/createSearch.js @@ -1,12 +1,14 @@ export default function createSearch(query) { const keys = Object.keys(query).sort(); - const params = keys.reduce( + const pairs = keys.reduce( (memo, key) => memo.concat( - query[key] ? `${key}=${encodeURIComponent(query[key])}` : key + query[key] == null || query[key] === '' + ? key + : `${key}=${encodeURIComponent(query[key])}` ), [] ); - return params.length ? `?${params.join('&')}` : ''; + return pairs.length ? `?${pairs.join('&')}` : ''; }