import { useEffect, useState, useRef } from "react"; import AutocompleteInput from "./AutocompleteInput"; function RecipeFormDrawer({ open, onClose, onSubmit, editingRecipe = null, currentUser = null, allRecipes = [] }) { const [name, setName] = useState(""); const [mealType, setMealType] = useState("lunch"); const [timeMinutes, setTimeMinutes] = useState(15); const [madeBy, setMadeBy] = useState(""); const [tags, setTags] = useState(""); const [image, setImage] = useState(""); const [ingredients, setIngredients] = useState([""]); const [steps, setSteps] = useState([""]); // Extract unique made_by values for autocomplete const uniqueMadeBy = Array.from( new Set(allRecipes.map(r => r.made_by).filter(Boolean)) ).sort(); // Extract unique ingredients for autocomplete const uniqueIngredients = Array.from( new Set(allRecipes.flatMap(r => r.ingredients || []).filter(Boolean)) ).sort(); const lastIngredientRef = useRef(null); const lastStepRef = useRef(null); const isEditMode = !!editingRecipe; useEffect(() => { if (open) { if (isEditMode) { setName(editingRecipe.name || ""); setMealType(editingRecipe.meal_type || "lunch"); setTimeMinutes(editingRecipe.time_minutes || 15); setMadeBy(editingRecipe.made_by || ""); setTags((editingRecipe.tags || []).join(" ")); setImage(editingRecipe.image || ""); setIngredients(editingRecipe.ingredients || [""]); setSteps(editingRecipe.steps || [""]); } else { setName(""); setMealType("lunch"); setTimeMinutes(15); setMadeBy(currentUser?.username || ""); setTags(""); setImage(""); setIngredients([""]); setSteps([""]); } } }, [open, editingRecipe, isEditMode, currentUser]); if (!open) return null; const handleAddIngredient = () => { setIngredients((prev) => [...prev, ""]); setTimeout(() => { lastIngredientRef.current?.focus(); lastIngredientRef.current?.scrollIntoView({ behavior: 'smooth', block: 'center' }); }, 0); }; const handleChangeIngredient = (idx, value) => { setIngredients((prev) => prev.map((v, i) => (i === idx ? value : v))); }; const handleRemoveIngredient = (idx) => { setIngredients((prev) => prev.filter((_, i) => i !== idx || prev.length === 1)); }; const handleAddStep = () => { setSteps((prev) => [...prev, ""]); setTimeout(() => { lastStepRef.current?.focus(); lastStepRef.current?.scrollIntoView({ behavior: 'smooth', block: 'center' }); }, 0); }; const handleChangeStep = (idx, value) => { setSteps((prev) => prev.map((v, i) => (i === idx ? value : v))); }; const handleRemoveStep = (idx) => { setSteps((prev) => prev.filter((_, i) => i !== idx || prev.length === 1)); }; const handleImageChange = (e) => { const file = e.target.files?.[0]; if (file) { const reader = new FileReader(); reader.onloadend = () => { setImage(reader.result); }; reader.readAsDataURL(file); } }; const handleRemoveImage = () => { setImage(""); }; const handleSubmit = (e) => { e.preventDefault(); const cleanIngredients = ingredients.map((s) => s.trim()).filter(Boolean); const cleanSteps = steps.map((s) => s.trim()).filter(Boolean); const tagsArr = tags .split(" ") .map((t) => t.trim()) .filter(Boolean); const payload = { name, meal_type: mealType, time_minutes: Number(timeMinutes), tags: tagsArr, ingredients: cleanIngredients, steps: cleanSteps, made_by: madeBy.trim() || currentUser?.username || "", }; if (image) { payload.image = image; } onSubmit(payload); }; return (
e.stopPropagation()}>

{isEditMode ? "ערוך מתכון" : "מתכון חדש"}

setName(e.target.value)} required placeholder="שקשוקה חריפה, פסטה שמנת, חזה עוף בתנור..." />
setTimeMinutes(e.target.value)} required />
setMadeBy(e.target.value)} suggestions={uniqueMadeBy} placeholder="שם האדם שיצר את הגרסה הזו..." />
{image && (
preview
)}
setTags(e.target.value)} placeholder="מהיר טבעוני משפחתי..." />
{ingredients.map((val, idx) => (
handleChangeIngredient(idx, e.target.value)} onKeyDown={(e) => { if (e.key === 'Enter') { e.preventDefault(); handleAddIngredient(); } }} suggestions={uniqueIngredients} placeholder="למשל: 2 ביצים" />
))}
{steps.map((val, idx) => (
handleChangeStep(idx, e.target.value)} onKeyDown={(e) => { if (e.key === 'Enter') { e.preventDefault(); handleAddStep(); } }} placeholder="למשל: לחמם את התנור ל־180 מעלות" />
))}
); } export default RecipeFormDrawer;