From 7caf59b433902c70cf3ae18d6196248ba1bee9bc Mon Sep 17 00:00:00 2001 From: David Hill Date: Mon, 26 Jan 2026 16:45:59 +0000 Subject: [PATCH] fix(ui): prevent double-close and fix dialog replacement --- packages/ui/src/context/dialog.tsx | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/packages/ui/src/context/dialog.tsx b/packages/ui/src/context/dialog.tsx index 4d03b218d..299f6032a 100644 --- a/packages/ui/src/context/dialog.tsx +++ b/packages/ui/src/context/dialog.tsx @@ -28,15 +28,18 @@ const Context = createContext>() function init() { const [active, setActive] = createSignal() + let closing = false const close = () => { const current = active() - if (!current) return + if (!current || closing) return + closing = true current.onClose?.() current.setClosing(true) setTimeout(() => { current.dispose() setActive(undefined) + closing = false }, 100) } @@ -55,7 +58,13 @@ function init() { }) const show = (element: DialogElement, owner: Owner, onClose?: () => void) => { - close() + // Immediately dispose any existing dialog when showing a new one + const current = active() + if (current) { + current.dispose() + setActive(undefined) + } + closing = false const id = Math.random().toString(36).slice(2) let dispose: (() => void) | undefined