From b2ffe65ecf10d07c49c24499b5b094f7dca89d07 Mon Sep 17 00:00:00 2001 From: atomiks Date: Thu, 23 Jan 2025 21:08:07 +1100 Subject: [PATCH] Revert to use open state --- packages/react/src/dialog/root/useDialogRoot.ts | 2 +- packages/react/src/menu/root/useMenuRoot.ts | 2 +- packages/react/src/select/positioner/useSelectPositioner.ts | 2 +- packages/react/src/utils/useScrollLock.ts | 3 +++ 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/react/src/dialog/root/useDialogRoot.ts b/packages/react/src/dialog/root/useDialogRoot.ts index dd5cd244db..3c3ea0e259 100644 --- a/packages/react/src/dialog/root/useDialogRoot.ts +++ b/packages/react/src/dialog/root/useDialogRoot.ts @@ -70,7 +70,7 @@ export function useDialogRoot(params: useDialogRoot.Parameters): useDialogRoot.R }, }); - useScrollLock(mounted && modal, popupElement); + useScrollLock(open && modal, popupElement); const handleFloatingUIOpenChange = ( nextOpen: boolean, diff --git a/packages/react/src/menu/root/useMenuRoot.ts b/packages/react/src/menu/root/useMenuRoot.ts index 561b2920ed..058d927800 100644 --- a/packages/react/src/menu/root/useMenuRoot.ts +++ b/packages/react/src/menu/root/useMenuRoot.ts @@ -76,7 +76,7 @@ export function useMenuRoot(parameters: useMenuRoot.Parameters): useMenuRoot.Ret const { mounted, setMounted, transitionStatus } = useTransitionStatus(open); - useScrollLock(mounted && modal, triggerElement); + useScrollLock(open && modal, triggerElement); const setOpen = useEventCallback( (nextOpen: boolean, event?: Event, reason?: OpenChangeReason) => { diff --git a/packages/react/src/select/positioner/useSelectPositioner.ts b/packages/react/src/select/positioner/useSelectPositioner.ts index b541ef840d..071a8421bf 100644 --- a/packages/react/src/select/positioner/useSelectPositioner.ts +++ b/packages/react/src/select/positioner/useSelectPositioner.ts @@ -10,7 +10,7 @@ export function useSelectPositioner( ): useSelectPositioner.ReturnValue { const { open, alignItemToTrigger, mounted, triggerElement, modal } = useSelectRootContext(); - useScrollLock((alignItemToTrigger || modal) && mounted, triggerElement); + useScrollLock((alignItemToTrigger || modal) && open, triggerElement); const positioning = useAnchorPositioning({ ...params, diff --git a/packages/react/src/utils/useScrollLock.ts b/packages/react/src/utils/useScrollLock.ts index 45ecff606d..35e47c51b9 100644 --- a/packages/react/src/utils/useScrollLock.ts +++ b/packages/react/src/utils/useScrollLock.ts @@ -149,6 +149,9 @@ export function useScrollLock(enabled = true, referenceElement?: Element | null) ); usePreventScroll({ + // react-aria will remove the scrollbar offset immediately upon close, since we use `open`, + // not `mounted`, to disable/enable the scroll lock. However since there are no inset + // scrollbars, no layouting issues occur. isDisabled: !isReactAriaHook, });