Skip to content

Commit

Permalink
fix(rangeSlider): use stats min/max when only user min or max is prov…
Browse files Browse the repository at this point in the history
…ided (#1124)

fixes #1004
  • Loading branch information
vvo authored Jul 8, 2016
1 parent 8a27769 commit 4348463
Show file tree
Hide file tree
Showing 3 changed files with 100 additions and 62 deletions.
1 change: 0 additions & 1 deletion dev/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -284,7 +284,6 @@ search.addWidget(
templates: {
header: 'Price'
},
min: 100,
max: 500,
step: 10,
tooltips: {
Expand Down
138 changes: 94 additions & 44 deletions src/widgets/range-slider/__tests__/range-slider-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand All @@ -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(<Slider {...props} />);
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(<Slider {...props} />);
});

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(<Slider {...props} />);
});
});
});

Expand All @@ -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(<Slider {...props} />);
});
});
});

context('without result', () => {
Expand Down Expand Up @@ -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
}
}]
};
Expand Down Expand Up @@ -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
}
}]
};
Expand Down
23 changes: 6 additions & 17 deletions src/widgets/range-slider/range-slider.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down

0 comments on commit 4348463

Please sign in to comment.