about summary refs log tree commit diff
path: root/src/view/com/lightbox/Lightbox.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/view/com/lightbox/Lightbox.tsx')
-rw-r--r--src/view/com/lightbox/Lightbox.tsx46
1 files changed, 6 insertions, 40 deletions
diff --git a/src/view/com/lightbox/Lightbox.tsx b/src/view/com/lightbox/Lightbox.tsx
index 677256191..003d01a94 100644
--- a/src/view/com/lightbox/Lightbox.tsx
+++ b/src/view/com/lightbox/Lightbox.tsx
@@ -1,59 +1,25 @@
-import React from 'react'
-import * as MediaLibrary from 'expo-media-library'
-import {msg} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
+import {useCallback} from 'react'
 
-import {saveImageToMediaLibrary, shareImageModal} from '#/lib/media/manip'
+import {shareImageModal} from '#/lib/media/manip'
+import {useSaveImageToMediaLibrary} from '#/lib/media/save-image'
 import {useLightbox, useLightboxControls} from '#/state/lightbox'
-import * as Toast from '../util/Toast'
 import ImageView from './ImageViewing'
 
 export function Lightbox() {
   const {activeLightbox} = useLightbox()
   const {closeLightbox} = useLightboxControls()
 
-  const onClose = React.useCallback(() => {
+  const onClose = useCallback(() => {
     closeLightbox()
   }, [closeLightbox])
 
-  const {_} = useLingui()
-  const [permissionResponse, requestPermission] = MediaLibrary.usePermissions({
-    granularPermissions: ['photo'],
-  })
-  const saveImageToAlbumWithToasts = React.useCallback(
-    async (uri: string) => {
-      if (!permissionResponse || permissionResponse.granted === false) {
-        Toast.show(
-          _(msg`Permission to access camera roll is required.`),
-          'info',
-        )
-        if (permissionResponse?.canAskAgain) {
-          requestPermission()
-        } else {
-          Toast.show(
-            _(
-              msg`Permission to access camera roll was denied. Please enable it in your system settings.`,
-            ),
-            'xmark',
-          )
-        }
-        return
-      }
-      try {
-        await saveImageToMediaLibrary({uri})
-        Toast.show(_(msg`Image saved`))
-      } catch (e: any) {
-        Toast.show(_(msg`Failed to save image: ${String(e)}`), 'xmark')
-      }
-    },
-    [permissionResponse, requestPermission, _],
-  )
+  const saveImageToAlbum = useSaveImageToMediaLibrary()
 
   return (
     <ImageView
       lightbox={activeLightbox}
       onRequestClose={onClose}
-      onPressSave={saveImageToAlbumWithToasts}
+      onPressSave={saveImageToAlbum}
       onPressShare={uri => shareImageModal({uri})}
     />
   )