diff options
author | dan <dan.abramov@gmail.com> | 2024-10-29 21:00:28 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-10-29 21:00:28 +0000 |
commit | ab492cd77a2588c58899793d5a51c7d4dd0a4968 (patch) | |
tree | 92ba094ba42e291913edb0f7e977a8c2216cfbb2 /src/view/com/lightbox/ImageViewing/hooks/useImageDimensions.ts | |
parent | 339f45ccbb043b9b2f46a459af4dfb368dfb705d (diff) | |
download | voidsky-ab492cd77a2588c58899793d5a51c7d4dd0a4968.tar.zst |
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
Diffstat (limited to 'src/view/com/lightbox/ImageViewing/hooks/useImageDimensions.ts')
-rw-r--r-- | src/view/com/lightbox/ImageViewing/hooks/useImageDimensions.ts | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/src/view/com/lightbox/ImageViewing/hooks/useImageDimensions.ts b/src/view/com/lightbox/ImageViewing/hooks/useImageDimensions.ts index cb46fd0d9..8b5bc1b87 100644 --- a/src/view/com/lightbox/ImageViewing/hooks/useImageDimensions.ts +++ b/src/view/com/lightbox/ImageViewing/hooks/useImageDimensions.ts @@ -8,6 +8,7 @@ import {useEffect, useState} from 'react' import {Image, ImageURISource} from 'react-native' + import {Dimensions, ImageSource} from '../@types' const CACHE_SIZE = 50 @@ -36,8 +37,9 @@ const imageDimensionsCache = createCache(CACHE_SIZE) const useImageDimensions = (image: ImageSource): Dimensions | null => { const [dimensions, setDimensions] = useState<Dimensions | null>(null) - // eslint-disable-next-line @typescript-eslint/no-shadow - const getImageDimensions = (image: ImageSource): Promise<Dimensions> => { + const getImageDimensions = ( + image: ImageSource, + ): Promise<Dimensions | null> => { return new Promise(resolve => { if (image.uri) { const source = image as ImageURISource @@ -51,16 +53,20 @@ const useImageDimensions = (image: ImageSource): Dimensions | null => { source.uri, source.headers, (width: number, height: number) => { - imageDimensionsCache.set(cacheKey, {width, height}) - resolve({width, height}) + if (width > 0 && height > 0) { + imageDimensionsCache.set(cacheKey, {width, height}) + resolve({width, height}) + } else { + resolve(null) + } }, () => { - resolve({width: 0, height: 0}) + resolve(null) }, ) } } else { - resolve({width: 0, height: 0}) + resolve(null) } }) } |