From fd2e94f3534ea459b08a4d6b9a6f0aaccfd2445e Mon Sep 17 00:00:00 2001 From: Hailey Date: Thu, 17 Oct 2024 14:28:38 -0700 Subject: Fix dragging up in flat list dialogs on Android (#5817) --- src/components/Dialog/index.tsx | 43 ++++++++++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 11 deletions(-) (limited to 'src/components/Dialog') diff --git a/src/components/Dialog/index.tsx b/src/components/Dialog/index.tsx index 46c072ce4..8b43a85e4 100644 --- a/src/components/Dialog/index.tsx +++ b/src/components/Dialog/index.tsx @@ -15,10 +15,12 @@ import { useKeyboardHandler, } from 'react-native-keyboard-controller' import {runOnJS} from 'react-native-reanimated' +import {ReanimatedScrollEvent} from 'react-native-reanimated/lib/typescript/reanimated2/hook/commonTypes' import {useSafeAreaInsets} from 'react-native-safe-area-context' import {msg} from '@lingui/macro' import {useLingui} from '@lingui/react' +import {ScrollProvider} from '#/lib/ScrollContext' import {logger} from '#/logger' import {isAndroid, isIOS} from '#/platform/detection' import {useA11y} from '#/state/a11y' @@ -228,6 +230,9 @@ export const ScrollableInner = React.forwardRef( nativeSnapPoint === BottomSheetSnapPoint.Full ? fullPadding : basePading const onScroll = (e: NativeSyntheticEvent) => { + if (!isAndroid) { + return + } const {contentOffset} = e.nativeEvent if (contentOffset.y > 0 && !disableDrag) { setDisableDrag(true) @@ -265,18 +270,34 @@ export const InnerFlatList = React.forwardRef< ListProps & {webInnerStyle?: StyleProp} >(function InnerFlatList({style, ...props}, ref) { const insets = useSafeAreaInsets() - const {nativeSnapPoint} = useDialogContext() + const {nativeSnapPoint, disableDrag, setDisableDrag} = useDialogContext() + + const onScroll = (e: ReanimatedScrollEvent) => { + 'worklet' + if (!isAndroid) { + return + } + const {contentOffset} = e + if (contentOffset.y > 0 && !disableDrag) { + runOnJS(setDisableDrag)(true) + } else if (contentOffset.y <= 1 && disableDrag) { + runOnJS(setDisableDrag)(false) + } + } + return ( - - } - ref={ref} - {...props} - style={[style]} - /> + + + } + ref={ref} + {...props} + style={[style]} + /> + ) }) -- cgit 1.4.1