From bed486f508089cfca6ca1f44164f64e669bc264e Mon Sep 17 00:00:00 2001 From: Dan Abramov Date: Sun, 3 Nov 2024 02:28:31 +0000 Subject: [PATCH] Stronger protection against touch races --- src/view/com/lightbox/ImageViewing/index.tsx | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/view/com/lightbox/ImageViewing/index.tsx b/src/view/com/lightbox/ImageViewing/index.tsx index df8f7df5df..714418e0af 100644 --- a/src/view/com/lightbox/ImageViewing/index.tsx +++ b/src/view/com/lightbox/ImageViewing/index.tsx @@ -72,6 +72,7 @@ function ImageViewing({ const [imageIndex, setImageIndex] = useState(initialImageIndex) const [showControls, setShowControls] = useState(true) const dismissSwipeTranslateY = useSharedValue(0) + const isFlyingAway = useSharedValue(false) const animatedHeaderStyle = useAnimatedStyle(() => { const show = showControls && dismissSwipeTranslateY.value === 0 @@ -98,10 +99,16 @@ function ImageViewing({ } }) + const containerStyle = useAnimatedStyle(() => { + if (openProgress.value < 1 || isFlyingAway.value) { + return {pointerEvents: 'none'} + } + return {pointerEvents: 'auto'} + }) + const activeImageStyle = useAnimatedStyle(() => { if (openProgress.value === 1 || dismissSwipeTranslateY.value !== 0) { return { - pointerEvents: 'auto', transform: [{translateY: dismissSwipeTranslateY.value}], } } @@ -114,12 +121,10 @@ function ImageViewing({ image.dimensions, ) return { - pointerEvents: 'none', transform: interpolatedTransform, } } return { - pointerEvents: 'auto', transform: [], } }) @@ -136,6 +141,7 @@ function ImageViewing({ .onEnd(e => { 'worklet' if (Math.abs(e.velocityY) > 1000) { + isFlyingAway.value = true dismissSwipeTranslateY.value = withDecay({ velocity: e.velocityY, velocityFactor: Math.max(3000 / Math.abs(e.velocityY), 1), // Speed up if it's too slow. @@ -198,7 +204,7 @@ function ImageViewing({ edges={edges} aria-modal accessibilityViewIsModal> - + @@ -245,7 +251,7 @@ function ImageViewing({ onPressShare={onPressShare} /> - + ) }