From 43f0addb6b42daa9144cf42f0e9f6386cbb2325e Mon Sep 17 00:00:00 2001 From: Samuel Newman Date: Mon, 1 Sep 2025 21:12:51 +0300 Subject: [PATCH] kinda hacky solution for gesturedetector rerender problem --- src/view/com/pager/Pager.tsx | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) 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