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 7 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('detects * as first value', function() {
Haroenv marked this conversation as resolved.
Show resolved Hide resolved
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');
});
});