diff --git a/src/state/lightbox.tsx b/src/state/lightbox.tsx index cdebeeede4..1dae67932c 100644 --- a/src/state/lightbox.tsx +++ b/src/state/lightbox.tsx @@ -2,17 +2,10 @@ import React from 'react' import type {MeasuredDimensions} from 'react-native-reanimated' import {useNonReactiveCallback} from '#/lib/hooks/useNonReactiveCallback' -import {Dimensions} from '#/lib/media/types' - -type ImagesLightboxItem = { - uri: string - thumbUri: string - alt?: string - dimensions: Dimensions | null -} +import {ImageSource} from '#/view/com/lightbox/ImageViewing/@types' type Lightbox = { - images: ImagesLightboxItem[] + images: ImageSource[] thumbDims: MeasuredDimensions | null index: number } diff --git a/src/view/com/lightbox/Lightbox.tsx b/src/view/com/lightbox/Lightbox.tsx index df839e3e1a..5bce025946 100644 --- a/src/view/com/lightbox/Lightbox.tsx +++ b/src/view/com/lightbox/Lightbox.tsx @@ -10,6 +10,7 @@ import {saveImageToMediaLibrary, shareImageModal} from '#/lib/media/manip' import {colors, s} from '#/lib/styles' import {isIOS} from '#/platform/detection' import {useLightbox, useLightboxControls} from '#/state/lightbox' +import {ImageSource} from '#/view/com/lightbox/ImageViewing/@types' import {ScrollView} from '#/view/com/util/Views' import {Button} from '../util/forms/Button' import {Text} from '../util/text/Text' @@ -21,41 +22,15 @@ const SCREEN_HEIGHT = Dimensions.get('window').height export function Lightbox() { const {activeLightbox} = useLightbox() const {closeLightbox} = useLightboxControls() + const onClose = React.useCallback(() => { closeLightbox() }, [closeLightbox]) - if (!activeLightbox) { - return null - } - - return ( - ( - - )} - /> - ) -} - -function LightboxFooter({altText, uri}: {altText?: string; uri: string}) { const {_} = useLingui() - const [isAltExpanded, setAltExpanded] = React.useState(false) const [permissionResponse, requestPermission] = MediaLibrary.usePermissions({ granularPermissions: ['photo'], }) - const insets = useSafeAreaInsets() - const svMaxHeight = SCREEN_HEIGHT - insets.top - 50 - const isMomentumScrolling = React.useRef(false) - const saveImageToAlbumWithToasts = React.useCallback( async (uri: string) => { if (!permissionResponse || permissionResponse.granted === false) { @@ -75,7 +50,6 @@ function LightboxFooter({altText, uri}: {altText?: string; uri: string}) { } return } - try { await saveImageToMediaLibrary({uri}) Toast.show(_(msg`Saved to your camera roll`)) @@ -86,6 +60,42 @@ function LightboxFooter({altText, uri}: {altText?: string; uri: string}) { [permissionResponse, requestPermission, _], ) + if (!activeLightbox) { + return null + } + + return ( + ( + + )} + /> + ) +} + +function LightboxFooter({ + images, + index, + onPressSave, +}: { + images: ImageSource[] + index: number + onPressSave: (uri: string) => void +}) { + const {alt: altText, uri} = images[index] + const [isAltExpanded, setAltExpanded] = React.useState(false) + const insets = useSafeAreaInsets() + const svMaxHeight = SCREEN_HEIGHT - insets.top - 50 + const isMomentumScrolling = React.useRef(false) return ( saveImageToAlbumWithToasts(uri)}> + onPress={() => onPressSave(uri)}> Save