diff --git a/src/components/Dialog/index.tsx b/src/components/Dialog/index.tsx index 46c072ce435..8b43a85e4d9 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]} + /> + ) })