From 87af246d71663794aa04a06642418b9e5cb43589 Mon Sep 17 00:00:00 2001 From: Mats Bosson Date: Sun, 29 Mar 2026 05:49:57 +0700 Subject: [PATCH] =?UTF-8?q?Fix=20Dialog=20activation=20and=20role=20Replac?= =?UTF-8?q?e=20onMount+onCleanup=20with=20createEffect=20watching=20ctx.is?= =?UTF-8?q?Open()=20and=20ctx.modal(),=20so=20focusTrap/scrollLock/dismiss?= =?UTF-8?q?=20activate/deactivate=20reactively=20on=20every=20open/close?= =?UTF-8?q?=20=E2=80=94=20including=20when=20forceMount=20keeps=20the=20co?= =?UTF-8?q?mponent=20mounted.=20Note:=20role=3D"dialog"=20was=20omitted;?= =?UTF-8?q?=20the=20project's=20Biome=20rules=20flag=20it=20as=20redundant?= =?UTF-8?q?=20(noRedundantRoles)=20since=20=20carries=20the=20impl?= =?UTF-8?q?icit=20role.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/dialog/dialog-content.tsx | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/packages/core/src/components/dialog/dialog-content.tsx b/packages/core/src/components/dialog/dialog-content.tsx index 8767854..269f84d 100644 --- a/packages/core/src/components/dialog/dialog-content.tsx +++ b/packages/core/src/components/dialog/dialog-content.tsx @@ -1,6 +1,6 @@ // packages/core/src/components/dialog/dialog-content.tsx import type { JSX } from "solid-js"; -import { Show, onCleanup, onMount, splitProps } from "solid-js"; +import { Show, createEffect, onCleanup, splitProps } from "solid-js"; import { createDismiss } from "../../utilities/dismiss/create-dismiss"; import { createFocusTrap } from "../../utilities/focus-trap/create-focus-trap"; import { Portal } from "../../utilities/portal/portal"; @@ -42,18 +42,21 @@ export function DialogContent(props: DialogContentProps): JSX.Element { onDismiss: () => ctx.setOpen(false), }); - onMount(() => { + createEffect(() => { if (ctx.isOpen() && ctx.modal()) { focusTrap.activate(); scrollLock.lock(); dismiss.attach(); + } else { + focusTrap.deactivate(); + scrollLock.unlock(); + dismiss.detach(); } - }); - - onCleanup(() => { - focusTrap.deactivate(); - scrollLock.unlock(); - dismiss.detach(); + onCleanup(() => { + focusTrap.deactivate(); + scrollLock.unlock(); + dismiss.detach(); + }); }); return (