1
0
mirror of https://github.com/tooot-app/app synced 2025-06-05 22:19:13 +02:00

Improve loading remote images

This commit is contained in:
Zhiyuan Zheng
2021-05-30 22:12:22 +02:00
parent ecb9ce0c3a
commit 8aa84f7568
5 changed files with 32 additions and 33 deletions

View File

@ -1,5 +1,5 @@
import { useTheme } from '@utils/styles/ThemeManager'
import React, { useCallback, useMemo, useRef, useState } from 'react'
import React, { useCallback, useMemo, useState } from 'react'
import {
AccessibilityProps,
Image,
@ -52,32 +52,30 @@ const GracefullyImage = React.memo(
setImageDimensions
}: Props) => {
const { theme } = useTheme()
const originalFailed = useRef(false)
const [originalFailed, setOriginalFailed] = useState(false)
const [imageLoaded, setImageLoaded] = useState(false)
const source = useMemo(() => {
if (originalFailed.current) {
if (originalFailed) {
return { uri: uri.remote || undefined }
} else {
return { uri: uri.original }
}
}, [originalFailed.current])
const onLoad = useCallback(
({ nativeEvent }) => {
setImageLoaded(true)
setImageDimensions &&
setImageDimensions({
width: nativeEvent.source.width,
height: nativeEvent.source.height
})
},
[source.uri]
)
const onError = useCallback(() => {
if (!originalFailed.current) {
originalFailed.current = true
}, [originalFailed])
const onLoad = useCallback(() => {
setImageLoaded(true)
if (setImageDimensions && source.uri) {
Image.getSize(source.uri, (width, height) =>
setImageDimensions({ width, height })
)
}
}, [originalFailed.current])
}, [source.uri])
const onError = useCallback(() => {
if (!originalFailed) {
setOriginalFailed(true)
}
}, [originalFailed])
const previewView = useMemo(
() =>