Skip to content
This repository has been archived by the owner on Jul 11, 2023. It is now read-only.

Commit

Permalink
feat(requestBuilder): prevent needless extra requests for empty refin…
Browse files Browse the repository at this point in the history
…ements (#737)

* feat(requestBuilder): prevent needless extra requests for empty refinements

We are now moving towards passing empty arrays to refinements; so we need to make sure no extra requests are done.

* Update test/spec/requestBuilder.js

Co-Authored-By: Samuel Vaillant <samuel.vllnt@gmail.com>
  • Loading branch information
Haroenv and samouss committed Nov 18, 2019
1 parent 4bdc4a4 commit db0a392
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 3 deletions.
15 changes: 12 additions & 3 deletions src/SearchParameters/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -1245,13 +1245,19 @@ SearchParameters.prototype = {
* @return {string[]}
*/
getRefinedDisjunctiveFacets: function getRefinedDisjunctiveFacets() {
var self = this;

// attributes used for numeric filter can also be disjunctive
var disjunctiveNumericRefinedFacets = intersection(
Object.keys(this.numericRefinements),
Object.keys(this.numericRefinements).filter(function(facet) {
return Object.keys(self.numericRefinements[facet]).length > 0;
}),
this.disjunctiveFacets
);

return Object.keys(this.disjunctiveFacetsRefinements)
return Object.keys(this.disjunctiveFacetsRefinements).filter(function(facet) {
return self.disjunctiveFacetsRefinements[facet].length > 0;
})
.concat(disjunctiveNumericRefinedFacets)
.concat(this.getRefinedHierarchicalFacets());
},
Expand All @@ -1263,11 +1269,14 @@ SearchParameters.prototype = {
* @return {string[]}
*/
getRefinedHierarchicalFacets: function getRefinedHierarchicalFacets() {
var self = this;
return intersection(
// enforce the order between the two arrays,
// so that refinement name index === hierarchical facet index
this.hierarchicalFacets.map(function(facet) { return facet.name; }),
Object.keys(this.hierarchicalFacetsRefinements)
Object.keys(this.hierarchicalFacetsRefinements).filter(function(facet) {
return self.hierarchicalFacetsRefinements[facet].length > 0;
})
);
},
/**
Expand Down
20 changes: 20 additions & 0 deletions test/spec/requestBuilder.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
'use strict';

var requestBuilder = require('../../src/requestBuilder.js');
var SearchParameters = require('../../src/SearchParameters');
var getQueries = requestBuilder._getQueries;

test('The request builder should set analytics to subsequent queries', function() {
Expand Down Expand Up @@ -46,3 +47,22 @@ test('The request builder should should force clickAnalytics to false on subsequ
expect(queries[0].params.clickAnalytics).toBe(undefined);
expect(queries[1].params.clickAnalytics).toBe(false);
});

test('does only a single query if refinements are empty', function() {
var searchParams = new SearchParameters({
disjunctiveFacets: ['test_disjunctive', 'test_numeric'],
hierarchicalFacets: [{name: 'test_hierarchical', attributes: ['whatever']}],
disjunctiveFacetsRefinements: {
test_disjunctive: []
},
numericRefinements: {
test_numeric: {}
},
hierarchicalFacetsRefinements: {
test_hierarchical: []
}
});

var queries = getQueries(searchParams.index, searchParams);
expect(queries).toHaveLength(1);
});

0 comments on commit db0a392

Please sign in to comment.