From 60de810d9a85db01c18f2c790f6af3b15105b9ee Mon Sep 17 00:00:00 2001 From: adamelmore <2363879+adamdottv@users.noreply.github.com> Date: Thu, 29 Jan 2026 20:07:35 -0600 Subject: [PATCH] fix(app): dialog not closing --- packages/ui/src/context/dialog.tsx | 34 ++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/packages/ui/src/context/dialog.tsx b/packages/ui/src/context/dialog.tsx index 299f6032a..afba5f648 100644 --- a/packages/ui/src/context/dialog.tsx +++ b/packages/ui/src/context/dialog.tsx @@ -28,18 +28,33 @@ const Context = createContext>() function init() { const [active, setActive] = createSignal() - let closing = false + const timer = { current: undefined as ReturnType | undefined } + const lock = { value: false } + + onCleanup(() => { + if (timer.current === undefined) return + clearTimeout(timer.current) + timer.current = undefined + }) const close = () => { const current = active() - if (!current || closing) return - closing = true + if (!current || lock.value) return + lock.value = true current.onClose?.() current.setClosing(true) - setTimeout(() => { + + const id = current.id + if (timer.current !== undefined) { + clearTimeout(timer.current) + timer.current = undefined + } + + timer.current = setTimeout(() => { + timer.current = undefined current.dispose() - setActive(undefined) - closing = false + if (active()?.id === id) setActive(undefined) + lock.value = false }, 100) } @@ -64,7 +79,12 @@ function init() { current.dispose() setActive(undefined) } - closing = false + + if (timer.current !== undefined) { + clearTimeout(timer.current) + timer.current = undefined + } + lock.value = false const id = Math.random().toString(36).slice(2) let dispose: (() => void) | undefined