"use client"; import { useState, useEffect, useRef } from "react"; import type { Article, ArticleInput, ArticleFamily } from "@/src/types/article"; interface ArticleModalProps { article: Article | null; families: ArticleFamily[]; stabilimentoId: number; onClose: () => void; onSave: (article: Article) => void; } export default function ArticleModal({ article, families, stabilimentoId, onClose, onSave, }: ArticleModalProps) { const isEdit = article !== null; const modalRef = useRef(null); const [formData, setFormData] = useState({ codice: "", descrizione: "", barcode: "", id_famiglia: null, id_magazzino: null, prezzo: 0, quantita_minima: 0, quantita: 0, }); const [saving, setSaving] = useState(false); const [error, setError] = useState(null); useEffect(() => { if (article) { setFormData({ codice: article.codice, descrizione: article.descrizione, barcode: article.barcode || "", id_famiglia: article.id_famiglia, id_magazzino: article.id_magazzino, prezzo: article.prezzo, quantita_minima: article.quantita_minima, quantita: article.quantita, }); } }, [article]); useEffect(() => { function handleKeyDown(e: KeyboardEvent) { if (e.key === "Escape") { onClose(); } } function handleClickOutside(e: MouseEvent) { if (modalRef.current && !modalRef.current.contains(e.target as Node)) { onClose(); } } document.addEventListener("keydown", handleKeyDown); document.addEventListener("mousedown", handleClickOutside); return () => { document.removeEventListener("keydown", handleKeyDown); document.removeEventListener("mousedown", handleClickOutside); }; }, [onClose]); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(null); setSaving(true); try { const url = isEdit ? `/api/articoli/${article.id}` : "/api/articoli"; const method = isEdit ? "PUT" : "POST"; const res = await fetch(url, { method, headers: { "Content-Type": "application/json" }, body: JSON.stringify(formData), }); if (!res.ok) { const data = await res.json(); throw new Error(data.error || "Errore durante il salvataggio"); } const data = await res.json(); onSave(data.article); } catch (err) { setError(err instanceof Error ? err.message : "Errore sconosciuto"); } finally { setSaving(false); } }; const handleChange = ( e: React.ChangeEvent ) => { const { name, value, type } = e.target; setFormData((prev) => ({ ...prev, [name]: type === "number" ? value === "" ? 0 : parseFloat(value) : name === "id_famiglia" ? value === "" ? null : parseInt(value, 10) : value, })); }; return (
{/* Header */}

{isEdit ? "Modifica Articolo" : "Nuovo Articolo"}

{/* Form */}
{error && (
{error}
)} {/* Descrizione */}
{/* Codice e Barcode */}
{/* Famiglia */}
{/* Prezzo e Quantità minima */}
{/* Quantità iniziale (solo per nuovo articolo) */} {!isEdit && (
)} {/* Actions */}
); }