Skip to content

Commit 7e61b01

Browse files
committed
fix(searchForFacetValues): only call client.search
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
1 parent 4f82be2 commit 7e61b01

File tree

12 files changed

+559
-912
lines changed

12 files changed

+559
-912
lines changed

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

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

381347
this.emit('searchForFacetValues', {
382348
state: state,
@@ -389,16 +355,16 @@ AlgoliaSearchHelper.prototype.searchForFacetValues = function (
389355
self._currentNbQueries--;
390356
if (self._currentNbQueries === 0) self.emit('searchQueueEmpty');
391357

392-
content = Array.isArray(content) ? content[0] : content;
358+
var result = content.results[0];
393359

394-
content.facetHits.forEach(function (f) {
360+
result.facetHits.forEach(function (f) {
395361
f.escapedValue = escapeFacetValue(f.value);
396362
f.isRefined = isDisjunctive
397363
? state.isDisjunctiveFacetRefined(facet, f.escapedValue)
398364
: state.isFacetRefined(facet, f.escapedValue);
399365
});
400366

401-
return content;
367+
return result;
402368
},
403369
function (e) {
404370
self._currentNbQueries--;

packages/algoliasearch-helper/src/requestBuilder.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -434,7 +434,6 @@ var requestBuilder = {
434434
: state;
435435
var searchForFacetSearchParameters = {
436436
facetQuery: query,
437-
facetName: facetName,
438437
};
439438
if (typeof maxFacetHits === 'number') {
440439
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)