diff --git a/src/connectors/breadcrumb/__tests__/connectBreadcrumb-test.js b/src/connectors/breadcrumb/__tests__/connectBreadcrumb-test.js index 05ed133b09..e2e0fed69c 100644 --- a/src/connectors/breadcrumb/__tests__/connectBreadcrumb-test.js +++ b/src/connectors/breadcrumb/__tests__/connectBreadcrumb-test.js @@ -202,6 +202,49 @@ describe('connectBreadcrumb', () => { ]); }); + it('provides items from an empty results', () => { + const rendering = jest.fn(); + const makeWidget = connectBreadcrumb(rendering); + const widget = makeWidget({ + attributes: ['category', 'sub_category'], + }); + + const config = widget.getConfiguration({}); + const helper = jsHelper({}, '', config); + + helper.search = jest.fn(); + + helper.toggleRefinement('category', 'Decoration'); + + widget.init({ + helper, + state: helper.state, + createURL: () => '#', + }); + + const firstRenderingOptions = rendering.mock.calls[0][0]; + expect(firstRenderingOptions.items).toEqual([]); + + widget.render({ + results: new SearchResults(helper.state, [ + { + hits: [], + facets: {}, + }, + { + hits: [], + facets: {}, + }, + ]), + state: helper.state, + helper, + createURL: () => '#', + }); + + const secondRenderingOptions = rendering.mock.calls[1][0]; + expect(secondRenderingOptions.items).toEqual([]); + }); + it('provides the correct facet values when transformed', () => { const rendering = jest.fn(); const makeWidget = connectBreadcrumb(rendering); @@ -551,6 +594,7 @@ describe('connectBreadcrumb', () => { ], }); }); + it('Provides an additional configuration if the existing one is different', () => { const makeWidget = connectBreadcrumb(() => {}); const widget = makeWidget({ attributes: ['category', 'sub_category'] }); diff --git a/src/connectors/breadcrumb/connectBreadcrumb.js b/src/connectors/breadcrumb/connectBreadcrumb.js index f1ce40420e..eea3850e15 100644 --- a/src/connectors/breadcrumb/connectBreadcrumb.js +++ b/src/connectors/breadcrumb/connectBreadcrumb.js @@ -154,10 +154,9 @@ export default function connectBreadcrumb(renderFn, unmountFn) { render({ instantSearchInstance, results, state }) { const [{ name: facetName }] = state.hierarchicalFacets; - const facetsValues = results.getFacetValues(facetName); - const items = transformItems( - shiftItemsValues(prepareItems(facetsValues)) - ); + const facetValues = results.getFacetValues(facetName); + const data = Array.isArray(facetValues.data) ? facetValues.data : []; + const items = transformItems(shiftItemsValues(prepareItems(data))); renderFn( { @@ -179,16 +178,15 @@ export default function connectBreadcrumb(renderFn, unmountFn) { }; } -function prepareItems(obj) { - return obj.data.reduce((result, currentItem) => { +function prepareItems(data) { + return data.reduce((result, currentItem) => { if (currentItem.isRefined) { result.push({ name: currentItem.name, value: currentItem.path, }); if (Array.isArray(currentItem.data)) { - const children = prepareItems(currentItem); - result = result.concat(children); + result = result.concat(prepareItems(currentItem.data)); } } return result;