From 13502c61d4ad4da0275623d0c915bff4993cb51c Mon Sep 17 00:00:00 2001 From: Felix Ruf Date: Fri, 19 Jul 2024 11:24:46 +0200 Subject: [PATCH] added filtering of dishes by diet --- src/Resources/src/enums/Diet.ts | 8 ++++++++ src/Resources/src/stores/dishesStore.ts | 10 ++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/Resources/src/enums/Diet.ts b/src/Resources/src/enums/Diet.ts index 919232180..e19a3cc87 100644 --- a/src/Resources/src/enums/Diet.ts +++ b/src/Resources/src/enums/Diet.ts @@ -3,3 +3,11 @@ export enum Diet { VEGETARIAN = 'vegetarian', MEAT = 'meat' } + +export function getDietTranslationMap() { + const dietTranslationMap = new Map(); + dietTranslationMap.set('vegetarisch', 'vegetarian'); + dietTranslationMap.set('vegan', 'vegan'); + dietTranslationMap.set('fleisch', 'meat'); + return dietTranslationMap; +} \ No newline at end of file diff --git a/src/Resources/src/stores/dishesStore.ts b/src/Resources/src/stores/dishesStore.ts index 5799f022c..472af4b1a 100644 --- a/src/Resources/src/stores/dishesStore.ts +++ b/src/Resources/src/stores/dishesStore.ts @@ -13,7 +13,7 @@ import { refThrottled } from '@vueuse/core'; import getDishesForCombi from '@/api/getDishesForCombi'; import { useCategories } from './categoriesStore'; import { isResponseArrayOkay, isResponseObjectOkay } from '@/api/isResponseOkay'; -import { Diet } from '@/enums/Diet'; +import { Diet, getDietTranslationMap } from '@/enums/Diet'; export interface Dish { id: number; @@ -100,16 +100,22 @@ export function useDishes() { }); /** - * Determines wether a dish contains the search string in its title or in the title of one of its variations + * Determines wether a dish contains the search string in its title or in the title of one of its variations or in its diet */ function dishContainsString(dish: Dish, searchStr: string) { return ( dish.titleDe.toLowerCase().includes(searchStr.toLowerCase()) || dish.titleEn.toLowerCase().includes(searchStr.toLowerCase()) || + dishContainsDiet(dish, searchStr) || dish.variations.map((variation) => dishContainsString(variation, searchStr)).includes(true) ); } + function dishContainsDiet(dish: Dish, searchStr: string) { + const translatedSearchStr = getDietTranslationMap().get(searchStr.toLowerCase().trim()) ?? searchStr.toLowerCase(); + return dish.diet.toString().toLowerCase().includes(translatedSearchStr); + } + /** * Fetches a list of dishes from the API and updates the DishesState */