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) {