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

feat(facets): when * is present, only send that parameter #874

Merged
merged 8 commits into from Oct 8, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 3 additions & 1 deletion index.d.ts
Expand Up @@ -523,14 +523,16 @@ declare namespace algoliasearchHelper {
export class SearchParameters implements PlainSearchParameters {
managedParameters: [
'index',

'facets',
'disjunctiveFacets',
'facetsRefinements',
'hierarchicalFacets',
'facetsExcludes',

'disjunctiveFacetsRefinements',
'numericRefinements',
'tagRefinements',
'hierarchicalFacets',
'hierarchicalFacetsRefinements'
];

Expand Down
14 changes: 11 additions & 3 deletions src/SearchParameters/index.js
Expand Up @@ -1312,9 +1312,17 @@ SearchParameters.prototype = {

managedParameters: [
'index',
'facets', 'disjunctiveFacets', 'facetsRefinements',
'facetsExcludes', 'disjunctiveFacetsRefinements',
'numericRefinements', 'tagRefinements', 'hierarchicalFacets', 'hierarchicalFacetsRefinements'

'facets',
'disjunctiveFacets',
'facetsRefinements',
'hierarchicalFacets',
'facetsExcludes',

'disjunctiveFacetsRefinements',
'numericRefinements',
'tagRefinements',
'hierarchicalFacetsRefinements'
],
getQueryParams: function getQueryParams() {
var managedParameters = this.managedParameters;
Expand Down
2 changes: 1 addition & 1 deletion src/requestBuilder.js
Expand Up @@ -60,7 +60,7 @@ var requestBuilder = {
var numericFilters = requestBuilder._getNumericFilters(state);
var tagFilters = requestBuilder._getTagFilters(state);
var additionalParams = {
facets: facets,
facets: facets.indexOf('*') > -1 ? ['*'] : facets,
tagFilters: tagFilters
};

Expand Down
61 changes: 61 additions & 0 deletions test/spec/requestBuilder.js
Expand Up @@ -66,3 +66,64 @@ test('does only a single query if refinements are empty', function() {
var queries = getQueries(searchParams.index, searchParams);
expect(queries).toHaveLength(1);
});

describe('wildcard facets', function() {
test('keeps as-is if no * present', function() {
var searchParams = new SearchParameters({
facets: ['test'],
disjunctiveFacets: ['test_disjunctive', 'test_numeric'],
hierarchicalFacets: [{name: 'test_hierarchical', attributes: ['whatever']}]
});

var queries = getQueries(searchParams.index, searchParams);

expect(queries.length).toBe(1);
expect(queries[0].params.facets).toEqual([
'test',
'test_disjunctive',
'test_numeric',
'whatever'
]);
});

test('keeps only *', function() {
var searchParams = new SearchParameters({
facets: ['test', '*'],
disjunctiveFacets: ['test_disjunctive', 'test_numeric'],
hierarchicalFacets: [{name: 'test_hierarchical', attributes: ['whatever']}]
});

var queries = getQueries(searchParams.index, searchParams);

expect(queries.length).toBe(1);
expect(queries[0].params.facets).toEqual(['*']);
});

test('keeps only * when first value', function() {
var searchParams = new SearchParameters({
facets: ['*', 'test'],
disjunctiveFacets: ['test_disjunctive', 'test_numeric'],
hierarchicalFacets: [{name: 'test_hierarchical', attributes: ['whatever']}]
});

var queries = getQueries(searchParams.index, searchParams);

expect(queries.length).toBe(1);
expect(queries[0].params.facets).toEqual(['*']);
});

test('only applies to first query', function() {
var searchParams = new SearchParameters({
facets: ['test', '*'],
disjunctiveFacets: ['test_disjunctive', 'test_numeric'],
hierarchicalFacets: [{name: 'test_hierarchical', attributes: ['whatever']}],
disjunctiveFacetsRefinements: {test_disjunctive: ['one', 'two']}
});

var queries = getQueries(searchParams.index, searchParams);

expect(queries.length).toBe(2);
expect(queries[0].params.facets).toEqual(['*']);
expect(queries[1].params.facets).toEqual('test_disjunctive');
});
});