diff --git a/src/components/clinical-dashboard/global-mockup-search-shell.tsx b/src/components/clinical-dashboard/global-mockup-search-shell.tsx index 589db61ba..44fa6f915 100644 --- a/src/components/clinical-dashboard/global-mockup-search-shell.tsx +++ b/src/components/clinical-dashboard/global-mockup-search-shell.tsx @@ -111,7 +111,6 @@ function GlobalMockupSearchShellClient({ useEffect(() => { reportPhoneScrollHideRef.current = phoneScrollHide.reportScroll; }, [phoneScrollHide.reportScroll]); - const scrollCaptureCleanupRef = useRef<(() => void) | null>(null); const visibleShellModes = useMemo(() => { const modes = visibleAppModeDefinitions(); if (!availableModeIds?.length) return modes; @@ -322,19 +321,15 @@ function GlobalMockupSearchShellClient({ phoneScrollHide.reportScroll(event.currentTarget.scrollTop); } + const isMedicationDetailRoute = /^\/medications\/[^/]+$/.test(pathname); + const shouldRenderClinicalDashboard = !isMedicationDetailRoute && (isHomeRoute || shouldRenderDashboardSearch); + // Page canvases can become nested scrollers when `overflow-x-hidden` pairs with // a flex height cap (overflow-y becomes auto per CSS). Capture descendant scroll // so the phone dock/header still hide while users scroll results. - const setMainRef = (main: HTMLDivElement | null) => { - mainRef.current = main; - - // Clean up any previous listener before attaching a new one. - if (scrollCaptureCleanupRef.current) { - scrollCaptureCleanupRef.current(); - scrollCaptureCleanupRef.current = null; - } - - if (!main) return; + useEffect(() => { + const main = mainRef.current; + if (!main) return undefined; const onScrollCapture = (event: Event) => { const target = event.target; @@ -344,11 +339,8 @@ function GlobalMockupSearchShellClient({ }; main.addEventListener("scroll", onScrollCapture, { capture: true, passive: true }); - scrollCaptureCleanupRef.current = () => main.removeEventListener("scroll", onScrollCapture, { capture: true }); - }; - - const isMedicationDetailRoute = /^\/medications\/[^/]+$/.test(pathname); - const shouldRenderClinicalDashboard = !isMedicationDetailRoute && (isHomeRoute || shouldRenderDashboardSearch); + return () => main.removeEventListener("scroll", onScrollCapture, { capture: true }); + }, [shouldRenderClinicalDashboard, chromeVisible]); if (shouldRenderClinicalDashboard) { return ( @@ -364,7 +356,7 @@ function GlobalMockupSearchShellClient({ if (!chromeVisible) { return (