diff --git a/src/Mealz/MealBundle/Controller/DishController.php b/src/Mealz/MealBundle/Controller/DishController.php
index b0641766a..d9b739d2a 100644
--- a/src/Mealz/MealBundle/Controller/DishController.php
+++ b/src/Mealz/MealBundle/Controller/DishController.php
@@ -6,6 +6,7 @@
use App\Mealz\MealBundle\Entity\Dish;
use App\Mealz\MealBundle\Entity\DishCollection;
+use App\Mealz\MealBundle\Enum\Diet;
use App\Mealz\MealBundle\Repository\CategoryRepositoryInterface;
use App\Mealz\MealBundle\Repository\DishRepositoryInterface;
use App\Mealz\MealBundle\Service\ApiService;
@@ -88,6 +89,9 @@ public function new(Request $request): JsonResponse
if (true === $this->apiService->isParamValid($parameters, 'category', 'integer')) {
$dish->setCategory($this->categoryRepository->find($parameters['category']));
}
+ if (true === $this->apiService->isParamValid($parameters, 'diet', 'string')) {
+ $dish->setDiet(Diet::tryFrom($parameters['diet']));
+ }
$this->em->persist($dish);
$this->em->flush();
diff --git a/src/Mealz/MealBundle/Service/DishService.php b/src/Mealz/MealBundle/Service/DishService.php
index 4c3baa502..fdc38bfc8 100644
--- a/src/Mealz/MealBundle/Service/DishService.php
+++ b/src/Mealz/MealBundle/Service/DishService.php
@@ -7,6 +7,7 @@
use App\Mealz\MealBundle\Entity\Dish;
use App\Mealz\MealBundle\Entity\DishVariation;
use App\Mealz\MealBundle\Entity\Meal;
+use App\Mealz\MealBundle\Enum\Diet;
use App\Mealz\MealBundle\Repository\CategoryRepository;
use App\Mealz\MealBundle\Repository\DishRepository;
use Exception;
@@ -81,6 +82,9 @@ public function updateHelper(Dish $dish, array $parameters): void
if (true === $this->apiService->isParamValid($parameters, 'category', 'integer')) {
$dish->setCategory($this->categoryRepository->find($parameters['category']));
}
+ if (true === $this->apiService->isParamValid($parameters, 'diet', 'string')) {
+ $dish->setDiet(Diet::tryFrom($parameters['diet']));
+ }
}
public function getDishCount(): array
diff --git a/src/Resources/src/api/postCreateDish.ts b/src/Resources/src/api/postCreateDish.ts
index b6b2afa2a..49b66ec8a 100644
--- a/src/Resources/src/api/postCreateDish.ts
+++ b/src/Resources/src/api/postCreateDish.ts
@@ -1,5 +1,6 @@
import { IMessage } from '@/interfaces/IMessage';
import useApi from './api';
+import { Diet } from '@/enums/Diet';
export interface CreateDishDTO {
titleDe: string;
@@ -8,6 +9,7 @@ export interface CreateDishDTO {
descriptionDe?: string;
descriptionEn?: string;
category?: number;
+ diet?: Diet
}
/**
diff --git a/src/Resources/src/api/postCreateDishVariation.ts b/src/Resources/src/api/postCreateDishVariation.ts
index f01916e45..396943e36 100644
--- a/src/Resources/src/api/postCreateDishVariation.ts
+++ b/src/Resources/src/api/postCreateDishVariation.ts
@@ -1,9 +1,11 @@
import { IMessage } from '@/interfaces/IMessage';
import useApi from './api';
+import { Diet } from '@/enums/Diet';
export interface CreateDishVariationDTO {
titleDe?: string;
titleEn?: string;
+ diet?: Diet
}
/**
diff --git a/src/Resources/src/components/categories/CategoriesDropDown.vue b/src/Resources/src/components/categories/CategoriesDropDown.vue
index c7b5903c8..8de4dc373 100644
--- a/src/Resources/src/components/categories/CategoriesDropDown.vue
+++ b/src/Resources/src/components/categories/CategoriesDropDown.vue
@@ -10,7 +10,7 @@
{{ locale === 'en' ? selectedCategory.titleEn : selectedCategory.titleDe }}
@@ -21,24 +21,29 @@
aria-hidden="true"
/>
-
-
-
- {{ locale === 'en' ? category.titleEn : category.titleDe }}
-
-
-
+
+ {{ locale === 'en' ? category.titleEn : category.titleDe }}
+
+
+
+
diff --git a/src/Resources/src/components/dishes/DishesCreationPanel.vue b/src/Resources/src/components/dishes/DishesCreationPanel.vue
index b5fb61ce3..9bc58b95d 100644
--- a/src/Resources/src/components/dishes/DishesCreationPanel.vue
+++ b/src/Resources/src/components/dishes/DishesCreationPanel.vue
@@ -8,31 +8,31 @@
@@ -43,11 +43,18 @@
:sr="t('dish.popover.oneSizeServing')"
:initial="oneSizeServing"
class="my-auto ml-4"
- @toggle="(value) => setOneSizeServing(value)"
+ @toggle="(value) => dishInput.oneServingSize = value"
/>
-
+
+ {{ t('dish.diet.diet') }}
+
+
@@ -57,12 +64,14 @@ import { useI18n } from 'vue-i18n';
import SubmitButton from '../misc/SubmitButton.vue';
import InputLabel from '../misc/InputLabel.vue';
import { useDishes } from '@/stores/dishesStore';
-import { onMounted, ref } from 'vue';
+import { computed, onMounted, reactive, ref, watch } from 'vue';
import { CreateDishDTO } from '@/api/postCreateDish';
import CategoriesDropDown from '../categories/CategoriesDropDown.vue';
import { useCategories } from '@/stores/categoriesStore';
import Switch from '@/components/misc/Switch.vue';
import { SwitchGroup, SwitchLabel } from '@headlessui/vue';
+import ListOptionsDropDown from '@/components/misc/ListOptionsDropDown.vue';
+import { Diet } from '@/enums/Diet';
const { t } = useI18n();
const { createDish, updateDish } = useDishes();
@@ -76,6 +85,7 @@ const props = withDefaults(
descriptionEn?: string | null;
categoryId?: number | null;
oneSizeServing?: boolean;
+ diet?: Diet,
dishId?: number | null;
edit?: boolean;
}>(),
@@ -86,6 +96,7 @@ const props = withDefaults(
descriptionEn: null,
categoryId: null,
oneSizeServing: false,
+ diet: Diet.MEAT,
dishId: null,
edit: false
}
@@ -97,40 +108,61 @@ onMounted(async () => {
await fetchCategories();
});
-const titleDeInput = ref(props.titleDe);
-const titleEnInput = ref(props.titleEn);
-const descriptionDeInput = ref(props.descriptionDe);
-const descriptionEnInput = ref(props.descriptionEn);
+const dietOptions = computed(() => {
+ return [Diet.MEAT, Diet.VEGAN, Diet.VEGETARIAN].map(diet => {
+ return {
+ value: diet,
+ label: getDietOption(diet)
+ };
+ });
+});
+const dietInput = ref({
+ value: props.diet,
+ label: getDietOption(props.diet)
+});
+
const categoryDropDown = ref | null>(null);
-const oneSizeServingInput = ref(props.oneSizeServing);
+
const required = ref(false);
+const dishInput = reactive({
+ titleDe: props.titleDe,
+ titleEn: props.titleEn,
+ descriptionDe: props.descriptionDe,
+ descriptionEn: props.descriptionEn,
+ oneServingSize: props.oneSizeServing,
+ diet: props.diet,
+ category: null
+});
+
+watch(
+ () => categoryDropDown.value?.selectedCategory.id,
+ () => {
+ dishInput.category = categoryDropDown.value?.selectedCategory.id;
+ }
+);
+
+watch(
+ () => dietInput.value,
+ () => {
+ dishInput.diet = dietInput.value.value
+ }
+);
+
async function onSubmit() {
required.value = true;
- if (titleDeInput.value === '' || titleEnInput.value === '') {
+ if (dishInput.titleDe === '' || dishInput.titleEn === '') {
return;
}
if (props.edit === true) {
- await updateDish(props.dishId, createDishDtoObject());
+ await updateDish(props.dishId, dishInput);
} else {
- await createDish(createDishDtoObject());
+ await createDish(dishInput);
}
emit('closePanel');
}
-function createDishDtoObject() {
- const dish: CreateDishDTO = {
- titleDe: titleDeInput.value,
- titleEn: titleEnInput.value,
- oneServingSize: oneSizeServingInput.value,
- descriptionDe: descriptionDeInput.value,
- descriptionEn: descriptionEnInput.value,
- category: categoryDropDown.value?.selectedCategory.id
- };
- return dish;
-}
-
-function setOneSizeServing(state: boolean) {
- oneSizeServingInput.value = state;
+function getDietOption(diet: Diet): string {
+ return t(`dish.diet.${diet}`);
}
diff --git a/src/Resources/src/components/misc/ListOptionsDropDown.vue b/src/Resources/src/components/misc/ListOptionsDropDown.vue
new file mode 100644
index 000000000..da787ed0d
--- /dev/null
+++ b/src/Resources/src/components/misc/ListOptionsDropDown.vue
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+ {{ selectedOption.label }}
+
+
+
+
+
+
+
+ {{ option.label }}
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Resources/src/locales/de.json b/src/Resources/src/locales/de.json
index 39b24191a..ccce6814e 100644
--- a/src/Resources/src/locales/de.json
+++ b/src/Resources/src/locales/de.json
@@ -120,6 +120,12 @@
"edit": "Variation editieren",
"new": "Variation erstellen"
}
+ },
+ "diet": {
+ "diet": "Ernährungsweise",
+ "vegan": "Vegan",
+ "vegetarian": "Vegetarisch",
+ "meat": "Beinhaltet Fleisch"
}
},
"event": {
diff --git a/src/Resources/src/locales/en.json b/src/Resources/src/locales/en.json
index e18ce5f16..c4d4e01ca 100644
--- a/src/Resources/src/locales/en.json
+++ b/src/Resources/src/locales/en.json
@@ -120,6 +120,12 @@
"edit": "Edit Variation",
"new": "Create Variation"
}
+ },
+ "diet": {
+ "diet": "Diet",
+ "vegan": "Vegan",
+ "vegetarian": "Vegetarisch",
+ "meat": "Beinhaltet Fleisch"
}
},
"event": {