From c08b3e4d75eaaaec09cbd895e0c05535a0d9a86b Mon Sep 17 00:00:00 2001 From: iam4x Date: Mon, 27 Mar 2017 17:50:16 +0200 Subject: [PATCH] feat(connectors.star-rating): provide `currentRefinement` value --- .../__tests__/connectStarRating-test.js | 46 +++++++++++++++++++ .../star-rating/connectStarRating.js | 4 ++ 2 files changed, 50 insertions(+) diff --git a/src/connectors/star-rating/__tests__/connectStarRating-test.js b/src/connectors/star-rating/__tests__/connectStarRating-test.js index ed7e362f80..b9c3a8aa88 100644 --- a/src/connectors/star-rating/__tests__/connectStarRating-test.js +++ b/src/connectors/star-rating/__tests__/connectStarRating-test.js @@ -168,4 +168,50 @@ describe('connectStarRating', () => { expect(helper.search.callCount).toBe(2); } }); + + it('provides the correct `currentRefinement` value', () => { + const rendering = jest.fn(); + const makeWidget = connectStarRating(rendering); + + const attributeName = 'grade'; + const widget = makeWidget({attributeName}); + + const config = widget.getConfiguration({}); + + const helper = jsHelper(fakeClient, '', config); + helper.search = jest.fn(); + + widget.init({ + helper, + state: helper.state, + createURL: () => '#', + onHistoryChange: () => {}, + }); + + const [[firstRenderingOptions]] = rendering.mock.calls; + expect(rendering).toBeCalled(); + expect(firstRenderingOptions.currentRefinement).toBe(null); + + firstRenderingOptions.refine('3'); + widget.render({ + results: new SearchResults(helper.state, [{ + facets: { + [attributeName]: {3: 50, 4: 900, 5: 100}, + }, + }, { + facets: { + [attributeName]: {0: 5, 1: 10, 2: 20, 3: 50, 4: 900, 5: 100}, + }, + }]), + state: helper.state, + helper, + createURL: () => '#', + }); + + const [, [secondRenderingOptions]] = rendering.mock.calls; + expect(secondRenderingOptions.currentRefinement).toEqual({ + count: 1050, isRefined: true, name: '3', + stars: [true, true, true, false, false], + }); + }); }); diff --git a/src/connectors/star-rating/connectStarRating.js b/src/connectors/star-rating/connectStarRating.js index a6178bd963..111a89b8f7 100644 --- a/src/connectors/star-rating/connectStarRating.js +++ b/src/connectors/star-rating/connectStarRating.js @@ -9,6 +9,7 @@ var customStarRating = connectStarRating(function render(params, isFirstRenderin // instantSearchInstance, // hasNoResults, // widgetParams, + // currentRefinement, // } }); search.addWidget( @@ -34,6 +35,7 @@ Full documentation available at https://community.algolia.com/instantsearch.js/c * @property {boolean} hasNoResults a boolean that indicates that the last search contains no results * @property {InstantSearch} instantSearchInstance the instance of instantsearch on which the widget is attached * @property {Object} widgetParams all original options forwarded to rendering + * @property {Object} currentRefinement the refinement currently applied */ /** @@ -70,6 +72,7 @@ export default function connectStarRating(renderFn) { refine: this._toggleRefinement, createURL: this._createURL(helper.state), widgetParams, + currentRefinement: null, }, true); }, @@ -115,6 +118,7 @@ export default function connectStarRating(renderFn) { refine: this._toggleRefinement, createURL: this._createURL(state), widgetParams, + currentRefinement: facetValues.find(({isRefined}) => isRefined), }, false); },