From 331c50672855e0c8a830aa59c5c2ce8b51b60f0c Mon Sep 17 00:00:00 2001 From: Eric Bailey Date: Tue, 15 Aug 2023 14:53:03 -0500 Subject: fix prefetching lightbox images (#1163) * fix prefetching lightbox images * use array signature * fix other RN native image usage * delay prefetching to allow UI to re-render --- .../components/ImageItem/ImageItem.android.tsx | 5 ++++- .../ImageViewing/components/ImageItem/ImageItem.ios.tsx | 5 ++++- src/view/com/util/post-embeds/index.tsx | 14 +++++--------- 3 files changed, 13 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.android.tsx b/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.android.tsx index b900f9afe..f5e858209 100644 --- a/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.android.tsx +++ b/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.android.tsx @@ -17,6 +17,7 @@ import { NativeSyntheticEvent, NativeMethodsMixin, } from 'react-native' +import {Image} from 'expo-image' import useImageDimensions from '../../hooks/useImageDimensions' import usePanResponder from '../../hooks/usePanResponder' @@ -41,6 +42,8 @@ type Props = { doubleTapToZoomEnabled?: boolean } +const AnimatedImage = Animated.createAnimatedComponent(Image) + const ImageItem = ({ imageSrc, onZoom, @@ -128,7 +131,7 @@ const ImageItem = ({ onScroll, onScrollEndDrag, })}> - - setLoaded(true)} diff --git a/src/view/com/util/post-embeds/index.tsx b/src/view/com/util/post-embeds/index.tsx index b1c1c6a2e..5d0090434 100644 --- a/src/view/com/util/post-embeds/index.tsx +++ b/src/view/com/util/post-embeds/index.tsx @@ -4,9 +4,10 @@ import { StyleProp, View, ViewStyle, - Image as RNImage, Text, + InteractionManager, } from 'react-native' +import {Image} from 'expo-image' import { AppBskyEmbedImages, AppBskyEmbedExternal, @@ -95,14 +96,9 @@ export function PostEmbeds({ const openLightbox = (index: number) => { store.shell.openLightbox(new ImagesLightbox(items, index)) } - const onPressIn = (index: number) => { - const firstImageToShow = items[index].uri - RNImage.prefetch(firstImageToShow) - items.forEach(item => { - if (firstImageToShow !== item.uri) { - // First image already prefetched above - RNImage.prefetch(item.uri) - } + const onPressIn = (_: number) => { + InteractionManager.runAfterInteractions(() => { + Image.prefetch(items.map(i => i.uri)) }) } -- cgit 1.4.1