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

Commit fc183ec

Browse files
feat(facets): when * is present, only send that parameter (#874)
* feat(facets): add expandWildcardFacets parameter to process * in facets When * is present in facets, we don't need to request the individual facet values of each facet that's declared, as * will already request it. With a new parameter "expandWildcardFacets", we filter out all facets that aren't * itself or -something. The new parameter doesn't add "*" automatically, it still To decide: - is "-something" worth caring about? - when * isn't present, should no facets be requested or the default ones? - is this the right location, maybe the client cache should have similar logic instead? see: https://github.com/algolia/algoliasearch-helper-js/issues/391 * remove reference to non-existing - * don't inject * * rephrase * remove the parameter, by default! * Update src/requestBuilder.js * fix * Update test/spec/requestBuilder.js Co-authored-by: François Chalifour <[email protected]> Co-authored-by: François Chalifour <[email protected]>
1 parent 3648463 commit fc183ec

File tree

4 files changed

+76
-5
lines changed

4 files changed

+76
-5
lines changed

index.d.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -523,14 +523,16 @@ declare namespace algoliasearchHelper {
523523
export class SearchParameters implements PlainSearchParameters {
524524
managedParameters: [
525525
'index',
526+
526527
'facets',
527528
'disjunctiveFacets',
528529
'facetsRefinements',
530+
'hierarchicalFacets',
529531
'facetsExcludes',
532+
530533
'disjunctiveFacetsRefinements',
531534
'numericRefinements',
532535
'tagRefinements',
533-
'hierarchicalFacets',
534536
'hierarchicalFacetsRefinements'
535537
];
536538

src/SearchParameters/index.js

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1312,9 +1312,17 @@ SearchParameters.prototype = {
13121312

13131313
managedParameters: [
13141314
'index',
1315-
'facets', 'disjunctiveFacets', 'facetsRefinements',
1316-
'facetsExcludes', 'disjunctiveFacetsRefinements',
1317-
'numericRefinements', 'tagRefinements', 'hierarchicalFacets', 'hierarchicalFacetsRefinements'
1315+
1316+
'facets',
1317+
'disjunctiveFacets',
1318+
'facetsRefinements',
1319+
'hierarchicalFacets',
1320+
'facetsExcludes',
1321+
1322+
'disjunctiveFacetsRefinements',
1323+
'numericRefinements',
1324+
'tagRefinements',
1325+
'hierarchicalFacetsRefinements'
13181326
],
13191327
getQueryParams: function getQueryParams() {
13201328
var managedParameters = this.managedParameters;

src/requestBuilder.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ var requestBuilder = {
6060
var numericFilters = requestBuilder._getNumericFilters(state);
6161
var tagFilters = requestBuilder._getTagFilters(state);
6262
var additionalParams = {
63-
facets: facets,
63+
facets: facets.indexOf('*') > -1 ? ['*'] : facets,
6464
tagFilters: tagFilters
6565
};
6666

test/spec/requestBuilder.js

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,3 +66,64 @@ test('does only a single query if refinements are empty', function() {
6666
var queries = getQueries(searchParams.index, searchParams);
6767
expect(queries).toHaveLength(1);
6868
});
69+
70+
describe('wildcard facets', function() {
71+
test('keeps as-is if no * present', function() {
72+
var searchParams = new SearchParameters({
73+
facets: ['test'],
74+
disjunctiveFacets: ['test_disjunctive', 'test_numeric'],
75+
hierarchicalFacets: [{name: 'test_hierarchical', attributes: ['whatever']}]
76+
});
77+
78+
var queries = getQueries(searchParams.index, searchParams);
79+
80+
expect(queries.length).toBe(1);
81+
expect(queries[0].params.facets).toEqual([
82+
'test',
83+
'test_disjunctive',
84+
'test_numeric',
85+
'whatever'
86+
]);
87+
});
88+
89+
test('keeps only *', function() {
90+
var searchParams = new SearchParameters({
91+
facets: ['test', '*'],
92+
disjunctiveFacets: ['test_disjunctive', 'test_numeric'],
93+
hierarchicalFacets: [{name: 'test_hierarchical', attributes: ['whatever']}]
94+
});
95+
96+
var queries = getQueries(searchParams.index, searchParams);
97+
98+
expect(queries.length).toBe(1);
99+
expect(queries[0].params.facets).toEqual(['*']);
100+
});
101+
102+
test('keeps only * when first value', function() {
103+
var searchParams = new SearchParameters({
104+
facets: ['*', 'test'],
105+
disjunctiveFacets: ['test_disjunctive', 'test_numeric'],
106+
hierarchicalFacets: [{name: 'test_hierarchical', attributes: ['whatever']}]
107+
});
108+
109+
var queries = getQueries(searchParams.index, searchParams);
110+
111+
expect(queries.length).toBe(1);
112+
expect(queries[0].params.facets).toEqual(['*']);
113+
});
114+
115+
test('only applies to first query', function() {
116+
var searchParams = new SearchParameters({
117+
facets: ['test', '*'],
118+
disjunctiveFacets: ['test_disjunctive', 'test_numeric'],
119+
hierarchicalFacets: [{name: 'test_hierarchical', attributes: ['whatever']}],
120+
disjunctiveFacetsRefinements: {test_disjunctive: ['one', 'two']}
121+
});
122+
123+
var queries = getQueries(searchParams.index, searchParams);
124+
125+
expect(queries.length).toBe(2);
126+
expect(queries[0].params.facets).toEqual(['*']);
127+
expect(queries[1].params.facets).toEqual('test_disjunctive');
128+
});
129+
});

0 commit comments

Comments
 (0)