Skip to content

Commit 7e86be3

Browse files
committed
feat(connectors.refinement-list): provide currentRefinement to renderFn
1 parent 39af437 commit 7e86be3

File tree

2 files changed

+51
-0
lines changed

2 files changed

+51
-0
lines changed

src/connectors/refinement-list/__tests__/connectRefinementList-test.js

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,4 +245,52 @@ describe('connectRefinementList', () => {
245245
},
246246
]);
247247
});
248+
249+
it('provides the correct `currentRefinement` value', () => {
250+
const widget = makeWidget({attributeName: 'category'});
251+
252+
const helper = algoliasearchHelper(fakeClient, '', widget.getConfiguration({}));
253+
helper.search = sinon.stub();
254+
255+
helper.toggleRefinement('category', 'Decoration');
256+
257+
widget.init({
258+
helper,
259+
state: helper.state,
260+
createURL: () => '#',
261+
onHistoryChange: () => {},
262+
});
263+
264+
const firstRenderingOptions = rendering.lastCall.args[0];
265+
expect(firstRenderingOptions.currentRefinement).toBe(null);
266+
267+
widget.render({
268+
results: new SearchResults(helper.state, [{
269+
hits: [],
270+
facets: {
271+
category: {
272+
Decoration: 880,
273+
},
274+
},
275+
}, {
276+
facets: {
277+
category: {
278+
Decoration: 880,
279+
Outdoor: 47,
280+
},
281+
},
282+
}]),
283+
state: helper.state,
284+
helper,
285+
createURL: () => '#',
286+
});
287+
288+
const secondRenderingOptions = rendering.lastCall.args[0];
289+
expect(secondRenderingOptions.currentRefinement).toEqual({
290+
name: 'Decoration',
291+
highlighted: 'Decoration',
292+
count: 880,
293+
isRefined: true,
294+
});
295+
});
248296
});

src/connectors/refinement-list/connectRefinementList.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ var customRefinementList = connectRefinementList(function render(params) {
1212
// instantSearchInstance,
1313
// canRefine,
1414
// widgetParams,
15+
// currentRefinement,
1516
// }
1617
});
1718
search.addWidget(
@@ -52,6 +53,7 @@ export const checkUsage = ({attributeName, operator, usageMessage}) => {
5253
* @property {boolean} canRefine indicates if a refinement can be applied
5354
* @property {Object} widgetParams all original options forwarded to rendering
5455
* @property {InstantSearch} instantSearchInstance the instance of instantsearch on which the widget is attached
56+
* @property {Object} currentRefinement the refinement currently applied
5557
*/
5658

5759
/**
@@ -100,6 +102,7 @@ export default function connectRefinementList(renderFn) {
100102
isFromSearch,
101103
canRefine: isFromSearch || items.length > 0,
102104
widgetParams,
105+
currentRefinement: items.find(({isRefined}) => isRefined) || null,
103106
}, isFirstSearch);
104107
};
105108

0 commit comments

Comments
 (0)