From 6e4b844f0e5d1757d0909e6ef723d279271d561f Mon Sep 17 00:00:00 2001 From: Haroen Viaene Date: Tue, 10 Jun 2025 15:46:14 +0200 Subject: [PATCH 1/4] feat(facetOrdering): implement hidden facets in SFFV We read the last results' facet ordering and apply hidden facets (not facet ordering) to the results array. nbHits does not need to be changed as search for facet values doesn't return that key. [CR-8645] --- .../src/algoliasearch.helper.js | 15 +++- .../searchForFacetValues.js | 78 +++++++++++++++++++ 2 files changed, 92 insertions(+), 1 deletion(-) diff --git a/packages/algoliasearch-helper/src/algoliasearch.helper.js b/packages/algoliasearch-helper/src/algoliasearch.helper.js index b034ee547f..41b835849f 100644 --- a/packages/algoliasearch-helper/src/algoliasearch.helper.js +++ b/packages/algoliasearch-helper/src/algoliasearch.helper.js @@ -437,6 +437,15 @@ AlgoliaSearchHelper.prototype.searchForFacetValues = function ( query: query, }); + var hide = + (this.lastResults && + this.lastResults.renderingContent && + this.lastResults.renderingContent.facetOrdering && + this.lastResults.renderingContent.facetOrdering.values && + this.lastResults.renderingContent.facetOrdering.values[facet] && + this.lastResults.renderingContent.facetOrdering.values[facet].hide) || + []; + return searchForFacetValuesPromise.then( function addIsRefined(content) { self._currentNbQueries--; @@ -444,7 +453,11 @@ AlgoliaSearchHelper.prototype.searchForFacetValues = function ( content = Array.isArray(content) ? content[0] : content; - content.facetHits.forEach(function (f) { + content.facetHits.forEach(function (f, i) { + if (hide.indexOf(f.value) > -1) { + content.facetHits.splice(i, 1); + return; + } f.escapedValue = escapeFacetValue(f.value); f.isRefined = isDisjunctive ? state.isDisjunctiveFacetRefined(facet, f.escapedValue) diff --git a/packages/algoliasearch-helper/test/spec/algoliasearch.helper/searchForFacetValues.js b/packages/algoliasearch-helper/test/spec/algoliasearch.helper/searchForFacetValues.js index 6606e6d0e0..9f3ef45d82 100644 --- a/packages/algoliasearch-helper/test/spec/algoliasearch.helper/searchForFacetValues.js +++ b/packages/algoliasearch-helper/test/spec/algoliasearch.helper/searchForFacetValues.js @@ -493,3 +493,81 @@ test('escaped value is marked as refined', function () { }); }); }); + +test('hides a facet value that is hidden according to `renderingContent`', function () { + var fakeClient = { + addAlgoliaAgent: function () {}, + search: function () { + return Promise.resolve({ + results: [ + { + renderingContent: { + facetOrdering: { + values: { + facet: { + hide: ['hidden'], + }, + }, + }, + }, + }, + ], + }); + }, + searchForFacetValues: function () { + return Promise.resolve([ + { + exhaustiveFacetsCount: true, + facetHits: [ + { + count: 318, + highlighted: 'something', + value: 'something', + }, + { + count: 1, + highlighted: 'hidden', + value: 'hidden', + }, + ], + processingTimeMS: 3, + }, + ]); + }, + }; + + var helper = algoliasearchHelper(fakeClient, 'index', { + disjunctiveFacets: ['facet'], + renderingContent: { + facetValues: [ + { + name: 'something', + isRefined: true, + }, + ], + }, + }); + + return new Promise(function (res) { + helper.search(); + helper.once('result', res); + }) + .then(function () { + return helper.searchForFacetValues('facet', 'k', 1); + }) + .then(function (content) { + expect(content).toEqual({ + exhaustiveFacetsCount: true, + processingTimeMS: 3, + facetHits: [ + { + count: 318, + highlighted: 'something', + isRefined: false, + escapedValue: 'something', + value: 'something', + }, + ], + }); + }); +}); From d0c68a7c6732e1b8f03c0fa82517be7ced13b1ce Mon Sep 17 00:00:00 2001 From: Haroen Viaene Date: Tue, 10 Jun 2025 15:51:30 +0200 Subject: [PATCH 2/4] index match --- .../src/algoliasearch.helper.js | 1 + .../searchForFacetValues.js | 87 +++++++++++++++++++ 2 files changed, 88 insertions(+) diff --git a/packages/algoliasearch-helper/src/algoliasearch.helper.js b/packages/algoliasearch-helper/src/algoliasearch.helper.js index 41b835849f..afa83cf321 100644 --- a/packages/algoliasearch-helper/src/algoliasearch.helper.js +++ b/packages/algoliasearch-helper/src/algoliasearch.helper.js @@ -439,6 +439,7 @@ AlgoliaSearchHelper.prototype.searchForFacetValues = function ( var hide = (this.lastResults && + this.lastResults.index === state.index && this.lastResults.renderingContent && this.lastResults.renderingContent.facetOrdering && this.lastResults.renderingContent.facetOrdering.values && diff --git a/packages/algoliasearch-helper/test/spec/algoliasearch.helper/searchForFacetValues.js b/packages/algoliasearch-helper/test/spec/algoliasearch.helper/searchForFacetValues.js index 9f3ef45d82..fcd8b402e3 100644 --- a/packages/algoliasearch-helper/test/spec/algoliasearch.helper/searchForFacetValues.js +++ b/packages/algoliasearch-helper/test/spec/algoliasearch.helper/searchForFacetValues.js @@ -501,6 +501,7 @@ test('hides a facet value that is hidden according to `renderingContent`', funct return Promise.resolve({ results: [ { + index: 'index', renderingContent: { facetOrdering: { values: { @@ -571,3 +572,89 @@ test('hides a facet value that is hidden according to `renderingContent`', funct }); }); }); + +test('does not hide if last results are for another index', function () { + var fakeClient = { + addAlgoliaAgent: function () {}, + search: function () { + return Promise.resolve({ + results: [ + { + index: 'index1', + renderingContent: { + facetOrdering: { + values: { + facet: { + hide: ['hidden'], + }, + }, + }, + }, + }, + ], + }); + }, + searchForFacetValues: function () { + return Promise.resolve([ + { + exhaustiveFacetsCount: true, + facetHits: [ + { + count: 318, + highlighted: 'something', + value: 'something', + }, + { + count: 1, + highlighted: 'hidden', + value: 'hidden', + }, + ], + processingTimeMS: 3, + }, + ]); + }, + }; + + var helper = algoliasearchHelper(fakeClient, 'index1', { + disjunctiveFacets: ['facet'], + renderingContent: { + facetValues: [ + { + name: 'something', + isRefined: true, + }, + ], + }, + }); + + return new Promise(function (res) { + helper.search(); + helper.once('result', res); + }) + .then(function () { + return helper.searchForFacetValues('facet', 'k', 1, { index: 'index2' }); + }) + .then(function (content) { + expect(content).toEqual({ + exhaustiveFacetsCount: true, + processingTimeMS: 3, + facetHits: [ + { + count: 318, + highlighted: 'something', + isRefined: false, + escapedValue: 'something', + value: 'something', + }, + { + count: 1, + highlighted: 'hidden', + isRefined: false, + escapedValue: 'hidden', + value: 'hidden', + }, + ], + }); + }); +}); From 6683d0b9f07079509f2621a36d7befd6aa8bf55f Mon Sep 17 00:00:00 2001 From: Haroen Viaene Date: Tue, 10 Jun 2025 15:52:13 +0200 Subject: [PATCH 3/4] correction --- .../test/spec/algoliasearch.helper/searchForFacetValues.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/algoliasearch-helper/test/spec/algoliasearch.helper/searchForFacetValues.js b/packages/algoliasearch-helper/test/spec/algoliasearch.helper/searchForFacetValues.js index fcd8b402e3..0331d4fb2c 100644 --- a/packages/algoliasearch-helper/test/spec/algoliasearch.helper/searchForFacetValues.js +++ b/packages/algoliasearch-helper/test/spec/algoliasearch.helper/searchForFacetValues.js @@ -580,7 +580,7 @@ test('does not hide if last results are for another index', function () { return Promise.resolve({ results: [ { - index: 'index1', + index: 'index', renderingContent: { facetOrdering: { values: { @@ -616,7 +616,7 @@ test('does not hide if last results are for another index', function () { }, }; - var helper = algoliasearchHelper(fakeClient, 'index1', { + var helper = algoliasearchHelper(fakeClient, 'index', { disjunctiveFacets: ['facet'], renderingContent: { facetValues: [ From 130f1bb788668e1d9374d3b8ba191ea3d41a62c6 Mon Sep 17 00:00:00 2001 From: Haroen Viaene Date: Tue, 10 Jun 2025 17:15:06 +0200 Subject: [PATCH 4/4] raise limit Less than a kb more, but it impacts all over --- bundlesize.config.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/bundlesize.config.json b/bundlesize.config.json index 77ad91a82e..5746533515 100644 --- a/bundlesize.config.json +++ b/bundlesize.config.json @@ -2,7 +2,7 @@ "files": [ { "path": "packages/algoliasearch-helper/dist/algoliasearch.helper.js", - "maxSize": "42 kB" + "maxSize": "42.25 kB" }, { "path": "packages/algoliasearch-helper/dist/algoliasearch.helper.min.js", @@ -18,19 +18,19 @@ }, { "path": "packages/react-instantsearch-core/dist/umd/ReactInstantSearchCore.min.js", - "maxSize": "51.75 kB" + "maxSize": "52 kB" }, { "path": "packages/react-instantsearch/dist/umd/ReactInstantSearch.min.js", - "maxSize": "65.75 kB" + "maxSize": "66 kB" }, { "path": "packages/vue-instantsearch/vue2/umd/index.js", - "maxSize": "69.25 kB" + "maxSize": "70 kB" }, { "path": "packages/vue-instantsearch/vue3/umd/index.js", - "maxSize": "69.75 kB" + "maxSize": "70 kB" }, { "path": "packages/vue-instantsearch/vue2/cjs/index.js",