Skip to content

Commit 811456e

Browse files
committed
fix(searchForFacetValues): only call client.search (#6465)
This signature is the easiest to detect and makes the required signature of the searchClient simpler (only `search`, `getRecommendations` and `addAlgoliaAgent` are now used). In this PR I also fix the signature of `search` in `SearchClient` type to make this usage fit reality. BREAKING CHANGE: in helper.searchForFacetFalues only the method client.search is used, none of the previous fallbacks.
1 parent 5ecda9e commit 811456e

File tree

12 files changed

+538
-891
lines changed

12 files changed

+538
-891
lines changed

packages/algoliasearch-helper/src/algoliasearch.helper.js

Lines changed: 12 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -326,21 +326,6 @@ AlgoliaSearchHelper.prototype.searchForFacetValues = function (
326326
maxFacetHits,
327327
userState
328328
) {
329-
var clientHasSFFV =
330-
typeof this.client.searchForFacetValues === 'function' &&
331-
// v5 has a wrong sffv signature
332-
typeof this.client.searchForFacets !== 'function';
333-
var clientHasInitIndex = typeof this.client.initIndex === 'function';
334-
if (
335-
!clientHasSFFV &&
336-
!clientHasInitIndex &&
337-
typeof this.client.search !== 'function'
338-
) {
339-
throw new Error(
340-
'search for facet values (searchable) was called, but this client does not have a function client.searchForFacetValues or client.initIndex(index).searchForFacetValues'
341-
);
342-
}
343-
344329
var state = this.state.setQueryParameters(userState || {});
345330
var isDisjunctive = state.isDisjunctiveFacet(facet);
346331
var algoliaQuery = requestBuilder.getSearchForFacetQuery(
@@ -353,34 +338,15 @@ AlgoliaSearchHelper.prototype.searchForFacetValues = function (
353338
this._currentNbQueries++;
354339
// eslint-disable-next-line consistent-this
355340
var self = this;
356-
var searchForFacetValuesPromise;
357-
// newer algoliasearch ^3.27.1 - ~4.0.0
358-
if (clientHasSFFV) {
359-
searchForFacetValuesPromise = this.client.searchForFacetValues([
360-
{ indexName: state.index, params: algoliaQuery },
361-
]);
362-
// algoliasearch < 3.27.1
363-
} else if (clientHasInitIndex) {
364-
searchForFacetValuesPromise = this.client
365-
.initIndex(state.index)
366-
.searchForFacetValues(algoliaQuery);
367-
// algoliasearch ~5.0.0
368-
} else {
369-
// @MAJOR only use client.search
370-
delete algoliaQuery.facetName;
371-
searchForFacetValuesPromise = this.client
372-
.search([
373-
{
374-
type: 'facet',
375-
facet: facet,
376-
indexName: state.index,
377-
params: algoliaQuery,
378-
},
379-
])
380-
.then(function processResponse(response) {
381-
return response.results[0];
382-
});
383-
}
341+
342+
var searchForFacetValuesPromise = this.client.search([
343+
{
344+
type: 'facet',
345+
facet: facet,
346+
indexName: state.index,
347+
params: algoliaQuery,
348+
},
349+
]);
384350

385351
this.emit('searchForFacetValues', {
386352
state: state,
@@ -393,16 +359,16 @@ AlgoliaSearchHelper.prototype.searchForFacetValues = function (
393359
self._currentNbQueries--;
394360
if (self._currentNbQueries === 0) self.emit('searchQueueEmpty');
395361

396-
content = Array.isArray(content) ? content[0] : content;
362+
var result = content.results[0];
397363

398-
content.facetHits.forEach(function (f) {
364+
result.facetHits.forEach(function (f) {
399365
f.escapedValue = escapeFacetValue(f.value);
400366
f.isRefined = isDisjunctive
401367
? state.isDisjunctiveFacetRefined(facet, f.escapedValue)
402368
: state.isFacetRefined(facet, f.escapedValue);
403369
});
404370

405-
return content;
371+
return result;
406372
},
407373
function (e) {
408374
self._currentNbQueries--;

packages/algoliasearch-helper/src/requestBuilder.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -499,7 +499,6 @@ var requestBuilder = {
499499
: state;
500500
var searchForFacetSearchParameters = {
501501
facetQuery: query,
502-
facetName: facetName,
503502
};
504503
if (typeof maxFacetHits === 'number') {
505504
searchForFacetSearchParameters.maxFacetHits = maxFacetHits;

packages/algoliasearch-helper/test/spec/algoliasearch.helper/events.js

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,6 @@ function makeFakeClient() {
77
search: jest.fn(function () {
88
return new Promise(function () {});
99
}),
10-
searchForFacetValues: jest.fn(function () {
11-
return new Promise(function () {});
12-
}),
1310
};
1411
}
1512

@@ -297,7 +294,7 @@ test(
297294
helper.on('searchForFacetValues', searchedForFacetValues);
298295

299296
expect(searchedForFacetValues).toHaveBeenCalledTimes(0);
300-
expect(fakeClient.searchForFacetValues).toHaveBeenCalledTimes(0);
297+
expect(fakeClient.search).toHaveBeenCalledTimes(0);
301298

302299
helper.searchForFacetValues('city', 'NYC');
303300
expect(searchedForFacetValues).toHaveBeenCalledTimes(1);
@@ -306,7 +303,7 @@ test(
306303
facet: 'city',
307304
query: 'NYC',
308305
});
309-
expect(fakeClient.searchForFacetValues).toHaveBeenCalledTimes(1);
306+
expect(fakeClient.search).toHaveBeenCalledTimes(1);
310307
}
311308
);
312309

packages/algoliasearch-helper/test/spec/algoliasearch.helper/pendingSearch.js

Lines changed: 25 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
'use strict';
22

33
var algoliasearch = require('algoliasearch');
4-
var isV5 = (algoliasearch.apiClientVersion || '')[0] === '5';
54
algoliasearch = algoliasearch.algoliasearch || algoliasearch;
65

76
var algoliasearchHelper = require('../../../index');
@@ -72,85 +71,45 @@ test('When searchOnce with promises, hasPendingRequests is true', function (done
7271
triggerCb();
7372
});
7473

75-
if (!isV5) {
76-
test('When searchForFacetValues, hasPendingRequests is true (v3, v4)', function (done) {
77-
var client = algoliasearch('dsf', 'dsfdf');
74+
test('When searchForFacetValues, hasPendingRequests is true', function (done) {
75+
var client = algoliasearch('dsf', 'dsfdf');
7876

79-
let triggerCb;
80-
client.searchForFacetValues = function () {
81-
return new Promise(function (resolve) {
82-
triggerCb = function () {
83-
resolve([
77+
let triggerCb;
78+
client.search = function () {
79+
return new Promise(function (resolve) {
80+
triggerCb = function () {
81+
resolve({
82+
results: [
8483
{
8584
exhaustiveFacetsCount: true,
8685
facetHits: [],
8786
processingTimeMS: 3,
8887
},
89-
]);
90-
};
91-
});
92-
};
93-
94-
var helper = algoliasearchHelper(client, 'test_hotels-node');
95-
var countNoMoreSearch = 0;
96-
helper.on('searchQueueEmpty', function () {
97-
countNoMoreSearch += 1;
98-
});
99-
100-
expect(helper.hasPendingRequests()).toBe(false);
101-
102-
helper.searchForFacetValues('').then(function () {
103-
expect(helper.hasPendingRequests()).toBe(false);
104-
expect(countNoMoreSearch).toBe(1);
105-
done();
88+
],
89+
});
90+
};
10691
});
92+
};
10793

108-
expect(helper.hasPendingRequests()).toBe(true);
109-
expect(countNoMoreSearch).toBe(0);
110-
111-
triggerCb();
94+
var helper = algoliasearchHelper(client, 'test_hotels-node');
95+
var countNoMoreSearch = 0;
96+
helper.on('searchQueueEmpty', function () {
97+
countNoMoreSearch += 1;
11298
});
113-
} else {
114-
test('When searchForFacetValues, hasPendingRequests is true (v5)', function (done) {
115-
var client = algoliasearch('dsf', 'dsfdf');
116-
117-
let triggerCb;
118-
client.search = function () {
119-
return new Promise(function (resolve) {
120-
triggerCb = function () {
121-
resolve({
122-
results: [
123-
{
124-
exhaustiveFacetsCount: true,
125-
facetHits: [],
126-
processingTimeMS: 3,
127-
},
128-
],
129-
});
130-
};
131-
});
132-
};
13399

134-
var helper = algoliasearchHelper(client, 'test_hotels-node');
135-
var countNoMoreSearch = 0;
136-
helper.on('searchQueueEmpty', function () {
137-
countNoMoreSearch += 1;
138-
});
100+
expect(helper.hasPendingRequests()).toBe(false);
139101

102+
helper.searchForFacetValues('').then(function () {
140103
expect(helper.hasPendingRequests()).toBe(false);
104+
expect(countNoMoreSearch).toBe(1);
105+
done();
106+
});
141107

142-
helper.searchForFacetValues('').then(function () {
143-
expect(helper.hasPendingRequests()).toBe(false);
144-
expect(countNoMoreSearch).toBe(1);
145-
done();
146-
});
147-
148-
expect(helper.hasPendingRequests()).toBe(true);
149-
expect(countNoMoreSearch).toBe(0);
108+
expect(helper.hasPendingRequests()).toBe(true);
109+
expect(countNoMoreSearch).toBe(0);
150110

151-
triggerCb();
152-
});
153-
}
111+
triggerCb();
112+
});
154113

155114
test('When helper.search(), hasPendingRequests is true', function (done) {
156115
var testData = require('../../datasets/SearchParameters/search.dataset')();

0 commit comments

Comments
 (0)