@open-tender/utils
Version:
A library of utils for use with Open Tender applications that utilize our cloud-based Order API.
42 lines (41 loc) • 1.8 kB
JavaScript
import { containsAny, isoToDate } from '../utils';
export const useMenuItemsFilter = (requestedAt, selectedTagsNames, selectedAllergens, view_suspended_item, tagsFilter, allergensFilter) => {
const now = new Date();
const requestedDate = requestedAt === null || requestedAt === 'asap'
? now
: isoToDate(requestedAt);
const filterItems = (items) => {
if (!items)
return [];
return items.filter(item => {
var _a, _b;
// Filter by tags (included selected tags items)
if (selectedTagsNames.length && tagsFilter === 'SHOW_HIDE') {
const itemTags = Array.isArray(item.tags)
? item.tags
: ((_a = item.tags) === null || _a === void 0 ? void 0 : _a.split(', ')) || [];
if (!containsAny(itemTags, selectedTagsNames)) {
return false;
}
}
// Filter by allergens (exclude allergic items)
if (selectedAllergens.length && allergensFilter === 'SHOW_HIDE') {
const itemAllergens = Array.isArray(item.allergens)
? item.allergens
: ((_b = item.allergens) === null || _b === void 0 ? void 0 : _b.split(', ')) || [];
if (containsAny(itemAllergens, selectedAllergens)) {
return false;
}
}
// Filter by suspended until
if (item.suspend_until && view_suspended_item === 'HIDE') {
const suspendDate = new Date(item.suspend_until * 1000);
if (requestedDate < suspendDate) {
return false;
}
}
return true;
});
};
return { filterItems };
};