From ab492cd77a2588c58899793d5a51c7d4dd0a4968 Mon Sep 17 00:00:00 2001 From: dan Date: Tue, 29 Oct 2024 21:00:28 +0000 Subject: Show almost-instant preview when opening lightbox (#6000) * Plumb thumbUri down to the lightbox * Remove onLoad tracking from lightbox * Hook up placeholder URI to the image * Fix NaN causing crash on double tap while offline * Protect against NaNs in the future --- .../components/ImageItem/ImageItem.ios.tsx | 48 ++++++++++++---------- 1 file changed, 26 insertions(+), 22 deletions(-) (limited to 'src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.ios.tsx') diff --git a/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.ios.tsx b/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.ios.tsx index 383490f4f..c81943948 100644 --- a/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.ios.tsx +++ b/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.ios.tsx @@ -7,9 +7,8 @@ */ import React, {useState} from 'react' - -import {Dimensions, StyleSheet} from 'react-native' -import {Image} from 'expo-image' +import {ActivityIndicator, Dimensions, StyleSheet} from 'react-native' +import {Gesture, GestureDetector} from 'react-native-gesture-handler' import Animated, { interpolate, runOnJS, @@ -17,14 +16,12 @@ import Animated, { useAnimatedStyle, useSharedValue, } from 'react-native-reanimated' -import {useAnimatedScrollHandler} from '#/lib/hooks/useAnimatedScrollHandler_FIXED' -import {Gesture, GestureDetector} from 'react-native-gesture-handler' +import {Image} from 'expo-image' +import {useAnimatedScrollHandler} from '#/lib/hooks/useAnimatedScrollHandler_FIXED' +import {Dimensions as ImageDimensions, ImageSource} from '../../@types' import useImageDimensions from '../../hooks/useImageDimensions' -import {ImageSource, Dimensions as ImageDimensions} from '../../@types' -import {ImageLoading} from './ImageLoading' - const SWIPE_CLOSE_OFFSET = 75 const SWIPE_CLOSE_VELOCITY = 1 const SCREEN = Dimensions.get('screen') @@ -40,8 +37,6 @@ type Props = { showControls: boolean } -const AnimatedImage = Animated.createAnimatedComponent(Image) - const ImageItem = ({ imageSrc, onTap, @@ -51,7 +46,6 @@ const ImageItem = ({ }: Props) => { const scrollViewRef = useAnimatedRef() const translationY = useSharedValue(0) - const [loaded, setLoaded] = useState(false) const [scaled, setScaled] = useState(false) const imageDimensions = useImageDimensions(imageSrc) const maxZoomScale = imageDimensions @@ -141,18 +135,21 @@ const ImageItem = ({ showsHorizontalScrollIndicator={false} showsVerticalScrollIndicator={false} maximumZoomScale={maxZoomScale} - contentContainerStyle={styles.imageScrollContainer} onScroll={scrollHandler}> - {(!loaded || !imageDimensions) && } - setLoaded(true)} - enableLiveTextInteraction={showControls && !scaled} - /> + + + + ) @@ -170,6 +167,13 @@ const styles = StyleSheet.create({ width: SCREEN.width, height: SCREEN.height, }, + loading: { + position: 'absolute', + top: 0, + left: 0, + right: 0, + bottom: 0, + }, }) const getZoomRectAfterDoubleTap = ( -- cgit 1.4.1