Files

45 lines
1.3 KiB
TypeScript

import type { MenuCategory, MenuFilter, MenuItem } from '@/domain/menu/entities';
export function filterMenuCategories(
categories: MenuCategory[],
filter: MenuFilter
): MenuCategory[] {
const query = filter.searchQuery?.toLowerCase().trim() ?? '';
return categories
.map((category) => {
if (filter.categoryId && filter.categoryId !== 'All' && category.id !== filter.categoryId) {
return { ...category, items: [] };
}
let items = category.items;
if (query) {
items = items.filter(
(item) =>
item.name.toLowerCase().includes(query) ||
(item.description?.toLowerCase().includes(query) ?? false)
);
}
if (filter.vegetarianOnly) {
items = items.filter((item) => item.isVegetarian);
}
return { ...category, items };
})
.filter((category) => category.items.length > 0);
}
export function filterMenuItems(items: MenuItem[], filter: MenuFilter): MenuItem[] {
const query = filter.searchQuery?.toLowerCase().trim() ?? '';
return items.filter((item) => {
if (filter.vegetarianOnly && !item.isVegetarian) return false;
if (!query) return true;
return (
item.name.toLowerCase().includes(query) ||
(item.description?.toLowerCase().includes(query) ?? false)
);
});
}