From 87c5516a9dac377ab3140830e5dadfa9a47cd108 Mon Sep 17 00:00:00 2001 From: fred <> Date: Thu, 10 Jul 2025 14:28:57 -0700 Subject: [PATCH] add ingredients working --- .../src/components/AddBulkIngredients.tsx | 59 ++++++++++----- .../src/components/AddIngredientsForm.tsx | 74 +++++++++---------- frontend/src/pages/AddRecipe.tsx | 23 +++++- 3 files changed, 99 insertions(+), 57 deletions(-) diff --git a/frontend/src/components/AddBulkIngredients.tsx b/frontend/src/components/AddBulkIngredients.tsx index 1447803..6ae34e6 100644 --- a/frontend/src/components/AddBulkIngredients.tsx +++ b/frontend/src/components/AddBulkIngredients.tsx @@ -1,16 +1,25 @@ -import React, { useState } from 'react'; +import React, { useState, useEffect } from 'react'; import { type Ingredient } from "../types/Recipe"; interface AddBulkIngredientsProps { - onChange?: (ingredients: { quantity: number; unit: string; name: string }[]) => void; + ingredients: Ingredient[]; + onChange?: (ingredients: Ingredient[]) => void; } -const AddBulkIngredients: React.FC = ({ onChange }) => { - const [ingredients, setIngredients] = useState<{ quantity: number; unit: string; name: string }[]>([]); +const AddBulkIngredients: React.FC = ({ ingredients, onChange }) => { + const [textValue, setTextValue] = useState(''); - const handleInputChange = (e: React.ChangeEvent) => { - const lines = e.target.value.split('\n').filter(line => line.trim() !== ''); + useEffect(() => { + const textRepresentation = ingredients.map(ingredient => + `${ingredient.quantity} ${ingredient.unit} ${ingredient.name}` + ).join('\n'); + setTextValue(textRepresentation); + }, [ingredients]); + + const parseAndUpdate = (value: string) => { + const lines = value.split('\n').filter(line => line.trim() !== ''); const pattern = /^([0-9/.]+)?\s*(\S+)\s*((\w+\s*)*)$/; + const parsedIngredients = lines.map(line => { const parts = line.match(pattern); let quantity = 0; @@ -28,22 +37,38 @@ const AddBulkIngredients: React.FC = ({ onChange }) => name: parts?.[3]?.trim() || '' }; }); - setIngredients(parsedIngredients); - if (onChange) onChange(parsedIngredients); // Notify parent of change + + if (onChange) onChange(parsedIngredients); + }; + + const handleInputChange = (e: React.ChangeEvent) => { + setTextValue(e.target.value); + }; + + const handleKeyDown = (e: React.KeyboardEvent) => { + if (e.key === 'Enter') { + parseAndUpdate(textValue); + } + }; + + const handleBlur = () => { + parseAndUpdate(textValue); }; return (
-

Please enter ingredients in the following order: Quantity, Unit, Name

{/* Prompt for correct input format */} -