diff --git a/packages/drawer/src/utils/useIsDrawerOpen.tsx b/packages/drawer/src/utils/useIsDrawerOpen.tsx index 7010468b..09534beb 100644 --- a/packages/drawer/src/utils/useIsDrawerOpen.tsx +++ b/packages/drawer/src/utils/useIsDrawerOpen.tsx @@ -1,6 +1,7 @@ import * as React from 'react'; import { useNavigation, ParamListBase } from '@react-navigation/native'; import { DrawerNavigationProp } from '../types'; +import DrawerOpenContext from '../views/DrawerOpenContext'; /** * Hook to detect if the drawer is open in a parent navigator. @@ -10,6 +11,8 @@ export default function useIsDrawerOpen() { let drawer = navigation as DrawerNavigationProp; + const drawerOpenContext = React.useContext(DrawerOpenContext); + // The screen might be inside another navigator such as stack nested in drawer // We need to find the closest drawer navigator and add the listener there while (drawer && drawer.dangerouslyGetState().type !== 'drawer') { @@ -34,5 +37,9 @@ export default function useIsDrawerOpen() { return unsubscribe; }, [drawer, isDrawerOpen]); + if (drawerOpenContext !== null) { + return drawerOpenContext; + } + return isDrawerOpen; } diff --git a/packages/drawer/src/views/Drawer.tsx b/packages/drawer/src/views/Drawer.tsx index 270af45a..fb59e368 100644 --- a/packages/drawer/src/views/Drawer.tsx +++ b/packages/drawer/src/views/Drawer.tsx @@ -18,6 +18,7 @@ import { } from 'react-native-gesture-handler'; import Animated from 'react-native-reanimated'; import Overlay from './Overlay'; +import DrawerOpenContext from './DrawerOpenContext'; const { Clock, @@ -635,7 +636,9 @@ export default class DrawerView extends React.PureComponent { drawerStyle as any, ]} > - {renderDrawerContent({ progress: this.progress })} + + {renderDrawerContent({ progress: this.progress })} + diff --git a/packages/drawer/src/views/DrawerOpenContext.tsx b/packages/drawer/src/views/DrawerOpenContext.tsx new file mode 100644 index 00000000..6b64d1c0 --- /dev/null +++ b/packages/drawer/src/views/DrawerOpenContext.tsx @@ -0,0 +1,5 @@ +import * as React from 'react'; + +const DrawerOpenContext = React.createContext(null); + +export default DrawerOpenContext;