From aaf8043ffdf46f1a7dd104deac97d36eba22b937 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Tue, 23 Jul 2019 10:49:03 +0200 Subject: [PATCH] fix(connectToggleRefinement): cast currentRefinement to boolean (#2701) --- .../__tests__/connectToggleRefinement.js | 22 +++++++++++++++++++ .../src/connectors/connectToggleRefinement.js | 9 +++++--- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/packages/react-instantsearch-core/src/connectors/__tests__/connectToggleRefinement.js b/packages/react-instantsearch-core/src/connectors/__tests__/connectToggleRefinement.js index a837ab1edc..64284ff17c 100644 --- a/packages/react-instantsearch-core/src/connectors/__tests__/connectToggleRefinement.js +++ b/packages/react-instantsearch-core/src/connectors/__tests__/connectToggleRefinement.js @@ -53,6 +53,16 @@ describe('connectToggleRefinement', () => { expect(actual.currentRefinement).toBe(false); }); + it('expect `currentRefinement` to be `false` when searchState is a string considered falsy', () => { + const props = { attribute: 'shipping', value: true }; + const searchState = { toggle: { shipping: 'false' } }; + const searchResults = {}; + + const actual = getProvidedProps(props, searchState, searchResults); + + expect(actual.currentRefinement).toBe(false); + }); + it('expect `currentRefinement` to be `defaultRefinement`', () => { const props = { defaultRefinement: true, @@ -406,6 +416,18 @@ describe('connectToggleRefinement', () => { expect(actual.currentRefinement).toBe(false); }); + it('expect `currentRefinement` to be `false` when searchState is a string considered falsy', () => { + const props = { attribute: 'shipping', value: true }; + const searchState = createMultiIndexSearchState({ + toggle: { shipping: 'false' }, + }); + const searchResults = {}; + + const actual = getProvidedProps(props, searchState, searchResults); + + expect(actual.currentRefinement).toBe(false); + }); + it('expect `currentRefinement` to be `defaultRefinement`', () => { const props = { defaultRefinement: true, diff --git a/packages/react-instantsearch-core/src/connectors/connectToggleRefinement.js b/packages/react-instantsearch-core/src/connectors/connectToggleRefinement.js index 3f6fb497e3..bab566fbad 100644 --- a/packages/react-instantsearch-core/src/connectors/connectToggleRefinement.js +++ b/packages/react-instantsearch-core/src/connectors/connectToggleRefinement.js @@ -15,6 +15,8 @@ function getId(props) { const namespace = 'toggle'; +const falsyStrings = ['0', 'false', 'null', 'undefined']; + function getCurrentRefinement(props, searchState, context) { const currentRefinement = getCurrentRefinementValue( props, @@ -24,10 +26,11 @@ function getCurrentRefinement(props, searchState, context) { false ); - if (currentRefinement) { - return currentRefinement; + if (falsyStrings.indexOf(currentRefinement) !== -1) { + return false; } - return false; + + return Boolean(currentRefinement); } function refine(props, searchState, nextRefinement, context) {