diff --git a/docs/examples/tourism/search.js b/docs/examples/tourism/search.js index 6446f84601..3e2ad50654 100644 --- a/docs/examples/tourism/search.js +++ b/docs/examples/tourism/search.js @@ -4,7 +4,8 @@ var search = instantsearch({ appId: 'latency', apiKey: '6be0576ff61c053d5f9a3225e2a90f76', - indexName: 'airbnb' + indexName: 'airbnb', + urlSync: true }); search.addWidget( diff --git a/src/widgets/numeric-selector/__tests__/numeric-selector-test.js b/src/widgets/numeric-selector/__tests__/numeric-selector-test.js index 88ee660288..91f6203394 100644 --- a/src/widgets/numeric-selector/__tests__/numeric-selector-test.js +++ b/src/widgets/numeric-selector/__tests__/numeric-selector-test.js @@ -55,7 +55,6 @@ describe('numericSelector()', () => { helper = { addNumericRefinement: sinon.spy(), clearRefinements: sinon.spy(), - getRefinements: sinon.stub().returns([]), search: sinon.spy() }; results = { @@ -66,8 +65,31 @@ describe('numericSelector()', () => { helper.addNumericRefinement.reset(); }); - it('doesn\'t configure anything', () => { - expect(widget.getConfiguration).toEqual(undefined); + it('configures the right numericRefinement', () => { + expect(widget.getConfiguration({}, {})).toEqual({ + numericRefinements: { + aNumAttr: { + '=': [1] + } + } + }); + }); + + it('configures the right numericRefinement when present in the url', () => { + const urlState = { + numericRefinements: { + aNumAttr: { + '=': [2] + } + } + }; + expect(widget.getConfiguration({}, urlState)).toEqual({ + numericRefinements: { + aNumAttr: { + '=': [2] + } + } + }); }); it('calls twice ReactDOM.render(, container)', () => { @@ -82,10 +104,13 @@ describe('numericSelector()', () => { }); it('computes refined values and pass them to ', () => { - helper.getRefinements = sinon.stub().returns([{ - operator: '=', - value: [20] - }]); + helper.state = { + numericRefinements: { + aNumAttr: { + '=': [20] + } + } + }; expectedProps.currentValue = 20; widget.render({helper, results, state: helper.state}); expect(ReactDOM.render.firstCall.args[0]).toEqualJSX(); diff --git a/src/widgets/numeric-selector/numeric-selector.js b/src/widgets/numeric-selector/numeric-selector.js index 06369665b0..8381991aa3 100644 --- a/src/widgets/numeric-selector/numeric-selector.js +++ b/src/widgets/numeric-selector/numeric-selector.js @@ -5,7 +5,6 @@ import { getContainerNode } from '../../lib/utils.js'; import cx from 'classnames'; -import find from 'lodash/find'; import autoHideContainerHOC from '../../decorators/autoHideContainer.js'; import SelectorComponent from '../../components/Selector.js'; @@ -59,12 +58,16 @@ function numericSelector({ }; return { + getConfiguration(currentSearchParameters, searchParametersFromUrl) { + return { + numericRefinements: { + [attributeName]: { + [operator]: [this._getRefinedValue(searchParametersFromUrl)] + } + } + }; + }, init({helper}) { - const currentValue = this._getRefinedValue(helper); - if (currentValue !== undefined) { - helper.addNumericRefinement(attributeName, operator, currentValue); - } - this._refine = value => { helper.clearRefinements(attributeName); if (value !== undefined) { @@ -78,7 +81,7 @@ function numericSelector({ ReactDOM.render(