From 4290b02ca7a6180d734634535dbb0a4aac9cbf39 Mon Sep 17 00:00:00 2001 From: araemer Date: Sat, 25 Oct 2025 08:35:06 +0200 Subject: [PATCH] Add component for ingredient group list item --- frontend/src/App.css | 4 -- .../recipes/IngredientGroupListEditor.tsx | 51 +++++++++--------- .../recipes/IngredientGroupListItem.tsx | 54 +++++++++++++++++++ 3 files changed, 79 insertions(+), 30 deletions(-) create mode 100644 frontend/src/components/recipes/IngredientGroupListItem.tsx diff --git a/frontend/src/App.css b/frontend/src/App.css index a3b8351..51b7b09 100644 --- a/frontend/src/App.css +++ b/frontend/src/App.css @@ -73,10 +73,6 @@ @apply list-disc pl-6 mb-6; } - .ingredient-group-card { - @apply pb-4 border-b border-gray-400; - } - /* containers */ .circular-container { @apply flex-shrink-0 w-7 h-7 rounded-full bg-blue-300 text-white flex items-center justify-center shadow-sm; diff --git a/frontend/src/components/recipes/IngredientGroupListEditor.tsx b/frontend/src/components/recipes/IngredientGroupListEditor.tsx index 7f9196e..891a643 100644 --- a/frontend/src/components/recipes/IngredientGroupListEditor.tsx +++ b/frontend/src/components/recipes/IngredientGroupListEditor.tsx @@ -1,34 +1,45 @@ -/** - * Editor for ingredient groups - */ - import type {IngredientModel} from "../../models/IngredientModel" import type {IngredientGroupModel} from "../../models/IngredientGroupModel" import Button from "../basics/Button" -import {IngredientListEditor} from "./IngredientListEditor" import {Plus} from "lucide-react" import {ButtonType} from "../basics/BasicButtonDefinitions" +import IngredientGroupListItem from "./IngredientGroupListItem.tsx"; type IngredientGroupListEditorProps = { ingredientGroupList: IngredientGroupModel[] onChange: (ingredientGroupList: IngredientGroupModel[]) => void } +/** + * Editor for ingredient groups + * @param ingredientGroupList List model containing ingredient groups + * @param onChange Method to call on change + */ export function IngredientGroupListEditor({ingredientGroupList, onChange}: IngredientGroupListEditorProps) { + /** + * Update a member of the ingredient group list + * @param index Index of the ingredient group to change + * @param field Field name to change + * @param value New value + */ const handleUpdate = (index: number, field: keyof IngredientGroupModel, value: string | IngredientModel[]) => { const updated = ingredientGroupList.map((ingGrp, i) => i === index ? {...ingGrp, [field]: value} : ingGrp ) onChange(updated) } - const updateIngredientList = (index: number, ingredientList: IngredientModel[]) => { - handleUpdate(index, "ingredientList", ingredientList) - } + /** + * Add a new ingredient group to the list + */ const handleAdd = () => { onChange([...ingredientGroupList, {title: "", ingredientList: []}]) } + /** + * Remove an ingredient group from the list + * @param index Index of the group to remove + */ const handleRemove = (index: number) => { onChange(ingredientGroupList.filter((_, i) => i !== index)) } @@ -37,24 +48,12 @@ export function IngredientGroupListEditor({ingredientGroupList, onChange}: Ingre

Zutaten

{ingredientGroupList.map((ingGrp, index) => ( -
-
- handleUpdate(index, "title", e.target.value)} - /> -
- updateIngredientList(index, list)} - /> -
+ ))}