Skip to content

Commit 59c1ec7

Browse files
authored
Allow use of filter with ids (#146)
1 parent 0c2c004 commit 59c1ec7

File tree

2 files changed

+41
-6
lines changed

2 files changed

+41
-6
lines changed

src/lib.js

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,9 @@ export function search(items, input, configuration, fulltext, facets) {
1212
const page = parseInt(input.page || 1);
1313
const is_all_filtered_items = input.is_all_filtered_items || false;
1414

15-
if (
16-
configuration.native_search_enabled === false &&
17-
(input.query || input.filter)
18-
) {
15+
if (configuration.native_search_enabled === false && input.query) {
1916
throw new Error(
20-
'"query" and "filter" options are not working once native search is disabled',
17+
'The "query" option is not working once native search is disabled'
2118
);
2219
}
2320

@@ -34,6 +31,13 @@ export function search(items, input, configuration, fulltext, facets) {
3431
_ids = input._ids;
3532
} else if (input.ids) {
3633
_ids = facets.internal_ids_from_ids_map(input.ids);
34+
35+
if (input.filter) {
36+
_ids = items
37+
.filter((v) => _ids.includes(v._id))
38+
.filter(input.filter)
39+
.map((v) => v._id);
40+
}
3741
//console.log(_ids);
3842
query_ids = new FastBitSet(_ids);
3943
} else if (fulltext && (input.query || input.filter)) {

tests/searchSpec.js

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ describe('search', function () {
263263
} catch (err) {
264264
assert.equal(
265265
err.message,
266-
'"query" and "filter" options are not working once native search is disabled'
266+
'The "query" option is not working once native search is disabled'
267267
);
268268
}
269269

@@ -362,6 +362,37 @@ describe('custom fulltext integration', function () {
362362
assert.equal(result.data.items.length, 2);
363363
done();
364364
});
365+
it('makes faceted search after separated quasi fulltext with ids and filter', function test(done) {
366+
let i = 10;
367+
const temp_movies = movies.map((v) => {
368+
v.id = i;
369+
i += 10;
370+
return v;
371+
});
372+
373+
itemsjs = itemsJS(temp_movies, configuration);
374+
375+
let result = itemsjs.search({
376+
ids: [50, 20, 10],
377+
filter: function (v) {
378+
return v.id === 10;
379+
},
380+
});
381+
382+
assert.equal(result.data.items[0].id, 10);
383+
assert.equal(result.data.items[0]._id, 1);
384+
assert.equal(result.data.items.length, 1);
385+
386+
result = itemsjs.search({
387+
ids: [50, 20],
388+
filter: function (v) {
389+
return v.id === 10;
390+
},
391+
});
392+
393+
assert.equal(result.data.items.length, 0);
394+
done();
395+
});
365396

366397
it('makes faceted search after separated quasi fulltext with custom id field', function test(done) {
367398
let i = 10;

0 commit comments

Comments
 (0)