From 495b05f63fa8f4199ae19f75194ad067830b29ac Mon Sep 17 00:00:00 2001 From: yun-zhi-ztl Date: Sat, 14 Mar 2026 19:41:33 +0800 Subject: [PATCH] fix(dialog): keep modals centered on long pages --- web/src/shared/ui/dialog.tsx | 74 +++++++++++++++++++++--------------- 1 file changed, 43 insertions(+), 31 deletions(-) diff --git a/web/src/shared/ui/dialog.tsx b/web/src/shared/ui/dialog.tsx index 9b000382..1512c46d 100644 --- a/web/src/shared/ui/dialog.tsx +++ b/web/src/shared/ui/dialog.tsx @@ -28,6 +28,20 @@ const Dialog = ({ open: controlledOpen, onOpenChange, children }: DialogProps) = const open = controlledOpen ?? uncontrolledOpen const handleOpenChange = onOpenChange ?? setUncontrolledOpen + React.useEffect(() => { + if (!open || typeof document === 'undefined') { + return undefined + } + + const { body } = document + const previousOverflow = body.style.overflow + body.style.overflow = 'hidden' + + return () => { + body.style.overflow = previousOverflow + } + }, [open]) + return ( {children} @@ -96,39 +110,37 @@ const DialogContent = React.forwardRef -
-
e.stopPropagation()} - {...props} +
e.stopPropagation()} + {...props} + > + {children} + -
+ + + +
)