diff --git a/src/hooks/useResponsiveLayout.ts b/src/hooks/useResponsiveLayout.ts index 75e20ed9b5e0..3e1ea41357be 100644 --- a/src/hooks/useResponsiveLayout.ts +++ b/src/hooks/useResponsiveLayout.ts @@ -1,5 +1,5 @@ -import {navigationRef} from '@libs/Navigation/Navigation'; -import NAVIGATORS from '@src/NAVIGATORS'; +import {useEffect, useState} from 'react'; +import Navigation from '@libs/Navigation/Navigation'; import useWindowDimensions from './useWindowDimensions'; type ResponsiveLayoutResult = { @@ -7,15 +7,21 @@ type ResponsiveLayoutResult = { isSmallScreenWidth: boolean; isInModal: boolean; }; + /** * Hook to determine if we are on mobile devices or in the Modal Navigator */ export default function useResponsiveLayout(): ResponsiveLayoutResult { const {isSmallScreenWidth} = useWindowDimensions(); - const state = navigationRef?.current?.getRootState(); - const lastRoute = state?.routes?.at(-1); - const lastRouteName = lastRoute?.name; - const isInModal = lastRouteName === NAVIGATORS.LEFT_MODAL_NAVIGATOR || lastRouteName === NAVIGATORS.RIGHT_MODAL_NAVIGATOR; + + const [isInModal, setIsInModal] = useState(Navigation.isDisplayedInModal()); + + useEffect(() => { + Navigation.isNavigationReady().then(() => { + setIsInModal(Navigation.isDisplayedInModal()); + }); + }, []); + const shouldUseNarrowLayout = isSmallScreenWidth || isInModal; return {shouldUseNarrowLayout, isSmallScreenWidth, isInModal}; } diff --git a/src/libs/Navigation/Navigation.ts b/src/libs/Navigation/Navigation.ts index 1924e3c3d1fa..b94c2c5fad4a 100644 --- a/src/libs/Navigation/Navigation.ts +++ b/src/libs/Navigation/Navigation.ts @@ -351,6 +351,14 @@ function navigateWithSwitchPolicyID(params: SwitchPolicyIDParams) { return switchPolicyID(navigationRef.current, params); } +/** Check if the modal is being displayed */ +function isDisplayedInModal() { + const state = navigationRef?.current?.getRootState(); + const lastRoute = state?.routes?.at(-1); + const lastRouteName = lastRoute?.name; + return lastRouteName === NAVIGATORS.LEFT_MODAL_NAVIGATOR || lastRouteName === NAVIGATORS.RIGHT_MODAL_NAVIGATOR; +} + export default { setShouldPopAllStateOnUP, navigate, @@ -370,6 +378,7 @@ export default { parseHybridAppUrl, navigateWithSwitchPolicyID, resetToHome, + isDisplayedInModal, }; export {navigationRef};