diff --git a/src/view/com/pager/Pager.tsx b/src/view/com/pager/Pager.tsx
index 8cc3469032..80cc8f1167 100644
--- a/src/view/com/pager/Pager.tsx
+++ b/src/view/com/pager/Pager.tsx
@@ -1,7 +1,9 @@
import {
useCallback,
useContext,
+ useEffect,
useImperativeHandle,
+ useMemo,
useRef,
useState,
} from 'react'
@@ -139,10 +141,6 @@ export function Pager({
[parentOnPageScrollStateChanged],
)
- const drawerGesture = useContext(DrawerGestureContext) ?? Gesture.Native() // noop for web
- const nativeGesture =
- Gesture.Native().requireExternalGestureToFail(drawerGesture)
-
return (
{renderTabBar({
@@ -151,7 +149,7 @@ export function Pager({
dragProgress,
dragState,
})}
-
+
{children}
-
+
)
}
+function DrawerGestureRequireFail({children}: {children: React.ReactNode}) {
+ const drawerGesture = useContext(DrawerGestureContext)
+
+ const nativeGesture = useMemo(() => Gesture.Native(), [])
+
+ // the drawer gesture identity changes whenever the drawer opens/closes,
+ // but we don't want the GestureDetector to rerender when that happens
+ // therefore we just keep adding the gestures every time it changes to the same
+ // native gesture -sfn
+ useEffect(() => {
+ if (drawerGesture) {
+ nativeGesture.requireExternalGestureToFail(drawerGesture)
+ }
+
+ // TODO: figure out how to clean this up
+ }, [drawerGesture, nativeGesture])
+
+ return {children}
+}
+
function usePagerHandlers(
handlers: {
onPageScroll: (e: PagerViewOnPageScrollEventData) => void