Skip to content
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.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "itemsjs",
"version": "2.4.3",
"version": "2.4.4",
"description": "Created to perform fast search on small json dataset (up to 1000 elements).",
"type": "module",
"scripts": {
Expand Down
70 changes: 49 additions & 21 deletions src/lib.js
Original file line number Diff line number Diff line change
Expand Up @@ -89,42 +89,70 @@ export function search(items, input, configuration, fulltext, facets) {
);
}

// new filters to items
// -------------------------------------
let filtered_indexes = filtered_indexes_bitmap.array();
// Early exit: per_page = 0 and no need to materialize items (facet-only query)
if (
per_page === 0 &&
!is_all_filtered_items &&
!input.sort &&
!_ids
) {
const filtered_indexes = filtered_indexes_bitmap.array();

let filtered_items = filtered_indexes.map((_id) => {
return facets.get_item(_id);
});
const total_time = new Date().getTime() - total_time_start;

return {
pagination: {
per_page: per_page,
page: page,
total: filtered_indexes.length,
},
timings: {
total: total_time,
facets: facets_time,
search: search_time,
sorting: 0,
},
data: {
items: [],
allFilteredItems: null,
aggregations: getBuckets(
facet_result,
input,
configuration.aggregations,
),
},
};
}

/**
* sorting items
*/
let paginationApplied = false;
const sorting_start_time = new Date().getTime();
let sorting_time = 0;

// collect ids once; reuse in branches below
let filtered_indexes = filtered_indexes_bitmap.array();
let filtered_items;

if (input.sort) {
filtered_items = filtered_indexes.map((_id) => facets.get_item(_id));
filtered_items = sorted_items(
filtered_items,
input.sort,
configuration.sortings,
);
} else if (_ids) {
// when user passes explicit ids/_ids we only materialize items for the current page
filtered_indexes = _ids.filter((v) => filtered_indexes_bitmap.has(v));
const filtered_items_indexes = filtered_indexes.slice(
(page - 1) * per_page,
page * per_page,
);
filtered_items = filtered_items_indexes.map((_id) => facets.get_item(_id));
paginationApplied = true;
} else {
if (_ids) {
filtered_indexes = _ids.filter((v) => {
return filtered_indexes_bitmap.has(v);
});

const filtered_items_indexes = filtered_indexes.slice(
(page - 1) * per_page,
page * per_page,
);
filtered_items = filtered_items_indexes.map((_id) => {
return facets.get_item(_id);
});

paginationApplied = true;
}
filtered_items = filtered_indexes.map((_id) => facets.get_item(_id));
}
// pagination
if (!paginationApplied) {
Expand Down