diff --git a/dev/app.js b/dev/app.js index 843b3a6383..629db38996 100644 --- a/dev/app.js +++ b/dev/app.js @@ -284,7 +284,6 @@ search.addWidget( templates: { header: 'Price' }, - min: 100, max: 500, step: 10, tooltips: { diff --git a/src/widgets/range-slider/__tests__/range-slider-test.js b/src/widgets/range-slider/__tests__/range-slider-test.js index 7e5c7f0541..7bfa6804ae 100644 --- a/src/widgets/range-slider/__tests__/range-slider-test.js +++ b/src/widgets/range-slider/__tests__/range-slider-test.js @@ -83,13 +83,8 @@ describe('rangeSlider()', () => { }); }); - it('sets the right ranges', () => { - results = {}; - widget = rangeSlider({container, attributeName: 'aNumAttr', min: 100, max: 200}); - helper.setState(widget.getConfiguration()); - widget.init({helper}); - widget.render({results, helper}); - let props = { + context('render', () => { + const defaultProps = { cssClasses: { root: 'ais-range-slider', header: 'ais-range-slider--header', @@ -112,10 +107,45 @@ describe('rangeSlider()', () => { tooltips: true }; - expect(ReactDOM.render.calledOnce).toBe(true, 'ReactDOM.render called once'); - expect(autoHideContainer.calledOnce).toBe(true, 'autoHideContainer called once'); - expect(headerFooter.calledOnce).toBe(true, 'headerFooter called once'); - expect(ReactDOM.render.firstCall.args[0]).toEqualJSX(); + it('sets the right ranges', () => { + results = {}; + widget = rangeSlider({container, attributeName: 'aNumAttr', min: 100, max: 200}); + helper.setState(widget.getConfiguration()); + widget.init({helper}); + widget.render({results, helper}); + let props = defaultProps; + + expect(ReactDOM.render.calledOnce).toBe(true, 'ReactDOM.render called once'); + expect(autoHideContainer.calledOnce).toBe(true, 'autoHideContainer called once'); + expect(headerFooter.calledOnce).toBe(true, 'headerFooter called once'); + expect(ReactDOM.render.firstCall.args[0]).toEqualJSX(); + }); + + it('will use the results max when only min passed', () => { + results = { + disjunctiveFacets: [{ + name: 'aNumAttr', + stats: { + min: 1.99, + max: 4999.98 + } + }] + }; + widget = rangeSlider({container, attributeName: 'aNumAttr', min: 100}); + helper.setState(widget.getConfiguration()); + widget.init({helper}); + widget.render({results, helper}); + let props = { + ...defaultProps, + range: {min: 100, max: 5000}, + start: [100, Infinity] + }; + + expect(ReactDOM.render.calledOnce).toBe(true, 'ReactDOM.render called once'); + expect(autoHideContainer.calledOnce).toBe(true, 'autoHideContainer called once'); + expect(headerFooter.calledOnce).toBe(true, 'headerFooter called once'); + expect(ReactDOM.render.firstCall.args[0]).toEqualJSX(); + }); }); }); @@ -134,6 +164,57 @@ describe('rangeSlider()', () => { disjunctiveFacets: ['aNumAttr'] }); }); + + context('render', () => { + const defaultProps = { + cssClasses: { + root: 'ais-range-slider', + header: 'ais-range-slider--header', + body: 'ais-range-slider--body', + footer: 'ais-range-slider--footer' + }, + collapsible: false, + onChange: () => {}, + pips: true, + range: {max: 200, min: 100}, + shouldAutoHideContainer: false, + start: [100, 200], + step: 1, + templateProps: { + templates: {footer: '', header: ''}, + templatesConfig: undefined, + transformData: undefined, + useCustomCompileOptions: {footer: false, header: false} + }, + tooltips: true + }; + + it('will use the results min when only max passed', () => { + results = { + disjunctiveFacets: [{ + name: 'aNumAttr', + stats: { + min: 1.99, + max: 4999.98 + } + }] + }; + widget = rangeSlider({container, attributeName: 'aNumAttr', max: 100}); + helper.setState(widget.getConfiguration()); + widget.init({helper}); + widget.render({results, helper}); + let props = { + ...defaultProps, + range: {min: 1, max: 100}, + start: [-Infinity, 100] + }; + + expect(ReactDOM.render.calledOnce).toBe(true, 'ReactDOM.render called once'); + expect(autoHideContainer.calledOnce).toBe(true, 'autoHideContainer called once'); + expect(headerFooter.calledOnce).toBe(true, 'headerFooter called once'); + expect(ReactDOM.render.firstCall.args[0]).toEqualJSX(); + }); + }); }); context('without result', () => { @@ -183,15 +264,9 @@ describe('rangeSlider()', () => { results = { disjunctiveFacets: [{ name: 'aNumAttr', - data: { - 65: 1 - }, - exhaustive: true, stats: { min: 65, - max: 65, - avg: 65, - sum: 65 + max: 65 } }] }; @@ -234,34 +309,9 @@ describe('rangeSlider()', () => { results = { disjunctiveFacets: [{ name: 'aNumAttr', - data: { - 19.99: 610, - 39.99: 593, - 29.99: 488, - 49.99: 486, - 99.99: 430, - 14.99: 376, - 59.99: 323, - 34.99: 286, - 79.99: 282, - 9.99: 277, - 599.99: 105, - 999.99: 104, - 799.99: 96, - 899.99: 88, - 699.99: 84, - 1099.99: 53, - 1199.99: 49, - 649.99: 48, - 1299.99: 46, - 749.99: 34 - }, - exhaustive: true, stats: { min: 1.99, - max: 4999.98, - avg: 243.349, - sum: 2433490 + max: 4999.98 } }] }; diff --git a/src/widgets/range-slider/range-slider.js b/src/widgets/range-slider/range-slider.js index 35e5d57ea0..013536b143 100644 --- a/src/widgets/range-slider/range-slider.js +++ b/src/widgets/range-slider/range-slider.js @@ -156,24 +156,13 @@ function rangeSlider({ }, render({results, helper}) { let facet = find(results.disjunctiveFacets, {name: attributeName}); - let stats; - - if (userMin !== undefined || userMax !== undefined) { - stats = {}; - - if (userMin !== undefined) { - stats.min = userMin; - } + let stats = facet !== undefined && facet.stats !== undefined ? facet.stats : { + min: null, + max: null + }; - if (userMax !== undefined) { - stats.max = userMax; - } - } else { - stats = facet !== undefined && facet.stats !== undefined ? facet.stats : { - min: null, - max: null - }; - } + if (userMin !== undefined) stats.min = userMin; + if (userMax !== undefined) stats.max = userMax; let currentRefinement = this._getCurrentRefinement(helper);