Skip to content

Commit 958a151

Browse files
authored
fix(connectToggleRefinement): keep user provided, but falsy values (#3526)
This behaviour likely broke in v2 -> v3, since with v2 this works. The new "(falsy)" tests fail without my change.
1 parent e07c654 commit 958a151

File tree

2 files changed

+80
-2
lines changed

2 files changed

+80
-2
lines changed

src/connectors/toggleRefinement/__tests__/connectToggleRefinement-test.js

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,83 @@ See documentation: https://www.algolia.com/doc/api-reference/widgets/toggle-refi
423423
}
424424
});
425425

426+
it('sets user-provided "off" value by default (falsy)', () => {
427+
const makeWidget = connectToggleRefinement(() => {});
428+
const widget = makeWidget({
429+
attribute: 'whatever',
430+
off: false,
431+
});
432+
433+
const helper = jsHelper({}, '', widget.getConfiguration());
434+
widget.init({ helper, state: helper.state });
435+
436+
expect(helper.state.disjunctiveFacetsRefinements).toEqual(
437+
expect.objectContaining({
438+
whatever: ['false'],
439+
})
440+
);
441+
});
442+
443+
it('sets user-provided "off" value by default (truthy)', () => {
444+
const makeWidget = connectToggleRefinement(() => {});
445+
const widget = makeWidget({
446+
attribute: 'whatever',
447+
off: true,
448+
});
449+
450+
const helper = jsHelper({}, '', widget.getConfiguration());
451+
widget.init({ helper, state: helper.state });
452+
453+
expect(helper.state.disjunctiveFacetsRefinements).toEqual(
454+
expect.objectContaining({
455+
whatever: ['true'],
456+
})
457+
);
458+
});
459+
460+
it('sets user-provided "on" value on refine (falsy)', () => {
461+
let caughtRefine;
462+
const makeWidget = connectToggleRefinement(({ refine }) => {
463+
caughtRefine = refine;
464+
});
465+
const widget = makeWidget({
466+
attribute: 'whatever',
467+
on: false,
468+
});
469+
470+
const helper = jsHelper({ search() {} }, '', widget.getConfiguration());
471+
helper.search = jest.fn();
472+
473+
widget.init({ helper, state: helper.state });
474+
475+
expect(helper.state.disjunctiveFacetsRefinements).toEqual({});
476+
477+
widget.render({
478+
results: new SearchResults(helper.state, [
479+
{
480+
facets: {
481+
whatever: {
482+
true: 45,
483+
false: 40,
484+
},
485+
},
486+
nbHits: 85,
487+
},
488+
]),
489+
state: helper.state,
490+
helper,
491+
});
492+
493+
// toggle the value
494+
caughtRefine();
495+
496+
expect(helper.state.disjunctiveFacetsRefinements).toEqual(
497+
expect.objectContaining({
498+
whatever: ['false'],
499+
})
500+
);
501+
});
502+
426503
describe('routing', () => {
427504
const getInitializedWidget = (config = {}) => {
428505
const rendering = jest.fn();

src/connectors/toggleRefinement/connectToggleRefinement.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,9 @@ export default function connectToggleRefinement(renderFn, unmountFn) {
9797
}
9898

9999
const hasAnOffValue = userOff !== undefined;
100-
const on = userOn ? escapeRefinement(userOn) : undefined;
101-
const off = userOff ? escapeRefinement(userOff) : undefined;
100+
const hasAnOnValue = userOn !== undefined;
101+
const on = hasAnOnValue ? escapeRefinement(userOn) : undefined;
102+
const off = hasAnOffValue ? escapeRefinement(userOff) : undefined;
102103

103104
return {
104105
getConfiguration() {

0 commit comments

Comments
 (0)