"use client"; import { useState } from "react"; import type { ArticoloAssegnatoMacchina } from "@/src/types/artMacchineParti"; interface ArticoliMacchinaModalProps { macchinaId: number; macchinaNome: string; articoli: ArticoloAssegnatoMacchina[]; onClose: () => void; onArticoloRimosso: () => void; } interface RimuoviModalState { articolo: ArticoloAssegnatoMacchina; quantita: number; opzione: "carico" | "elimina"; } export default function ArticoliMacchinaModal({ macchinaId, macchinaNome, articoli, onClose, onArticoloRimosso, }: ArticoliMacchinaModalProps) { const [rimuoviModal, setRimuoviModal] = useState(null); const [saving, setSaving] = useState(false); const [error, setError] = useState(null); const handleRimuoviClick = (articolo: ArticoloAssegnatoMacchina) => { setRimuoviModal({ articolo, quantita: 1, opzione: "carico", }); setError(null); }; const handleConfermaRimozione = async () => { if (!rimuoviModal) return; setSaving(true); setError(null); try { const res = await fetch( `/api/art-macchine-parti/${macchinaId}/${rimuoviModal.articolo.id_articolo}`, { method: "DELETE", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ quantita: rimuoviModal.quantita, opzione: rimuoviModal.opzione, }), } ); if (!res.ok) { const data = await res.json(); throw new Error(data.error || "Errore nella rimozione"); } setRimuoviModal(null); onArticoloRimosso(); } catch (err) { setError(err instanceof Error ? err.message : "Errore sconosciuto"); } finally { setSaving(false); } }; return (

Articoli Assegnati

{macchinaNome}

{articoli.length === 0 ? (
Nessun articolo assegnato
) : (
{articoli.map((art) => (

{art.descrizione}

{art.codice}

{art.quantita}
assegnati
))}
)}
Totale: {articoli.reduce((sum, a) => sum + a.quantita, 0)} pezzi in {articoli.length} articoli
{/* Modal conferma rimozione */} {rimuoviModal && (
!saving && setRimuoviModal(null)} />

Rimuovi Articolo

{rimuoviModal.articolo.descrizione}

{error && (
{error}
)}
setRimuoviModal({ ...rimuoviModal, quantita: Math.min( Math.max(1, parseInt(e.target.value) || 1), rimuoviModal.articolo.quantita ), }) } className="w-full px-3 py-2 bg-zinc-800 border border-zinc-700 rounded-lg text-white focus:outline-none focus:ring-2 focus:ring-teal-500" />
)}
); }