···11+import {createContext} from 'react'
22+import {Gesture} from 'react-native-gesture-handler'
33+44+// Not really used but serves as a fallback for types.
55+const noopGesture = Gesture.Native()
66+77+export const TrendingGestureContext = createContext(noopGesture)
+11-2
src/view/shell/index.tsx
···11-import {useCallback, useEffect} from 'react'
11+import {useCallback, useEffect, useState} from 'react'
22import {BackHandler, useWindowDimensions, View} from 'react-native'
33import {Drawer} from 'react-native-drawer-layout'
44+import {Gesture} from 'react-native-gesture-handler'
45import {useSafeAreaInsets} from 'react-native-safe-area-context'
56import {StatusBar} from 'expo-status-bar'
67import {useNavigation, useNavigationState} from '@react-navigation/native'
···3334import {updateActiveViewAsync} from '../../../modules/expo-bluesky-swiss-army/src/VisibilityView'
3435import {Composer} from './Composer'
3536import {DrawerContent} from './Drawer'
3737+import {TrendingGestureContext} from './TrendingGestureContext'
36383739function ShellInner() {
3840 const t = useTheme()
···9294 }, [dedupe, navigation])
93959496 const swipeEnabled = !canGoBack && hasSession && !isDrawerSwipeDisabled
9797+ const [trendingScrollGesture] = useState(() => Gesture.Native())
9598 return (
9699 <>
97100 <View style={[a.h_full]}>
···101104 renderDrawerContent={renderDrawerContent}
102105 drawerStyle={{width: Math.min(400, winDim.width * 0.8)}}
103106 configureGestureHandler={handler => {
107107+ handler = handler.requireExternalGestureToFail(
108108+ trendingScrollGesture,
109109+ )
110110+104111 if (swipeEnabled) {
105112 if (isDrawerOpen) {
106113 return handler.activeOffsetX([-1, 1])
···138145 dim: 'rgba(10, 13, 16, 0.8)',
139146 }),
140147 }}>
141141- <TabsNavigator />
148148+ <TrendingGestureContext.Provider value={trendingScrollGesture}>
149149+ <TabsNavigator />
150150+ </TrendingGestureContext.Provider>
142151 </Drawer>
143152 </ErrorBoundary>
144153 </View>