Skip to content

Commit e94752d

Browse files
francoischalifourHaroenv
authored andcommitted
feat(index): merge ruleContexts search parameter (#3944)
1 parent bcfa634 commit e94752d

File tree

2 files changed

+51
-1
lines changed

2 files changed

+51
-1
lines changed

src/lib/utils/__tests__/mergeSearchParameters-test.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -381,4 +381,31 @@ describe('mergeSearchParameters', () => {
381381
})
382382
);
383383
});
384+
385+
it('merges and dedupes `ruleContexts` parameters', () => {
386+
const actual = merge(
387+
algoliasearchHelper.SearchParameters.make({
388+
ruleContexts: ['ais-genre-comedy'],
389+
}),
390+
algoliasearchHelper.SearchParameters.make({
391+
ruleContexts: ['ais-genre-thriller', 'ais-genre-comedy'],
392+
}),
393+
algoliasearchHelper.SearchParameters.make({
394+
ruleContexts: ['ais-rating-4'],
395+
}),
396+
algoliasearchHelper.SearchParameters.make({
397+
ruleContexts: [],
398+
})
399+
);
400+
401+
expect(actual).toEqual(
402+
algoliasearchHelper.SearchParameters.make({
403+
ruleContexts: [
404+
'ais-genre-comedy',
405+
'ais-genre-thriller',
406+
'ais-rating-4',
407+
],
408+
})
409+
);
410+
});
384411
});

src/lib/utils/mergeSearchParameters.ts

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { SearchParameters } from 'algoliasearch-helper';
22
import findIndex from './findIndex';
3+
import uniq from './uniq';
34

45
type Merger = (
56
left: SearchParameters,
@@ -17,6 +18,7 @@ const mergeWithRest: Merger = (left, right) => {
1718
tagRefinements,
1819
hierarchicalFacets,
1920
hierarchicalFacetsRefinements,
21+
ruleContexts,
2022
...rest
2123
} = right;
2224

@@ -103,6 +105,23 @@ const mergeHierarchicalFacetsRefinements: Merger = (left, right) =>
103105
},
104106
});
105107

108+
const mergeRuleContexts: Merger = (left, right) => {
109+
const ruleContexts: string[] = uniq(
110+
([] as any)
111+
.concat(left.ruleContexts)
112+
.concat(right.ruleContexts)
113+
.filter(Boolean)
114+
);
115+
116+
if (ruleContexts.length > 0) {
117+
return left.setQueryParameters({
118+
ruleContexts,
119+
});
120+
}
121+
122+
return left;
123+
};
124+
106125
const merge = (...parameters: SearchParameters[]): SearchParameters =>
107126
parameters.reduce((left, right) => {
108127
const hierarchicalFacetsRefinementsMerged = mergeHierarchicalFacetsRefinements(
@@ -137,7 +156,11 @@ const merge = (...parameters: SearchParameters[]): SearchParameters =>
137156
facetRefinementsMerged,
138157
right
139158
);
140-
const facetsMerged = mergeFacets(disjunctiveFacetsMerged, right);
159+
const ruleContextsMerged = mergeRuleContexts(
160+
disjunctiveFacetsMerged,
161+
right
162+
);
163+
const facetsMerged = mergeFacets(ruleContextsMerged, right);
141164

142165
return mergeWithRest(facetsMerged, right);
143166
});

0 commit comments

Comments
 (0)