From 17592d1f3598c14ebda2b61cfa85625e30d5db26 Mon Sep 17 00:00:00 2001 From: AV77web Date: Fri, 29 May 2026 16:59:26 +0200 Subject: [PATCH] correzione a modale di scarico e a drag & drop --- src/app/(main)/page.tsx | 8 ++++---- src/components/MovimentoModal.tsx | 22 +++++++++++++--------- src/components/TreeNode.tsx | 17 ++++++++++++++++- 3 files changed, 33 insertions(+), 14 deletions(-) diff --git a/src/app/(main)/page.tsx b/src/app/(main)/page.tsx index f8b2475..cecb2b7 100644 --- a/src/app/(main)/page.tsx +++ b/src/app/(main)/page.tsx @@ -10,18 +10,18 @@ export default function Home() { {/* Header */}

MagRicambi

-

Gestione magazzino ricambi

+

Gestione magazzino ricambi - Trascina articoli sulle macchine per assegnarli

{/* Contenuto principale: split 50/50 */}
{/* Colonna sinistra: Articoli */} -
+
- {/* Colonna destra: Macchine (placeholder) */} -
+ {/* Colonna destra: Macchine */} +
diff --git a/src/components/MovimentoModal.tsx b/src/components/MovimentoModal.tsx index 6560988..ee4ec4e 100644 --- a/src/components/MovimentoModal.tsx +++ b/src/components/MovimentoModal.tsx @@ -62,23 +62,17 @@ export default function MovimentoModal({ useEffect(() => { function handleKeyDown(e: KeyboardEvent) { - if (e.key === "Escape") onClose(); - } - - function handleClickOutside(e: MouseEvent) { - if (modalRef.current && !modalRef.current.contains(e.target as Node)) { + if (e.key === "Escape" && !showDestinazioneModal) { onClose(); } } document.addEventListener("keydown", handleKeyDown); - document.addEventListener("mousedown", handleClickOutside); return () => { document.removeEventListener("keydown", handleKeyDown); - document.removeEventListener("mousedown", handleClickOutside); }; - }, [onClose]); + }, [onClose, showDestinazioneModal]); const filteredMagazzini = selectedStabilimento ? magazzini.filter((m) => m.id_stabilimento === selectedStabilimento) @@ -156,11 +150,21 @@ export default function MovimentoModal({ } }; + const handleBackdropClick = (e: React.MouseEvent) => { + if (e.target === e.currentTarget && !showDestinazioneModal) { + onClose(); + } + }; + return ( -
+
e.stopPropagation()} > {/* Header */}
) => { e.preventDefault(); e.stopPropagation(); + e.dataTransfer.dropEffect = "move"; setIsDragOver(true); }; const handleDragLeave = (e: DragEvent) => { + const relatedTarget = e.relatedTarget as Node | null; + const currentTarget = e.currentTarget as Node; + + if (relatedTarget && currentTarget.contains(relatedTarget)) { + return; + } + e.preventDefault(); e.stopPropagation(); setIsDragOver(false); }; + const handleDragEnter = (e: DragEvent) => { + e.preventDefault(); + e.stopPropagation(); + setIsDragOver(true); + }; + const safeTextColor = getReadableTextColor(node.colore_testo); const getNodeTypeIcon = () => { @@ -155,8 +169,9 @@ export default function TreeNode({