mirror of
https://github.com/inaturalist/iNaturalistReactNative.git
synced 2026-06-22 06:28:42 -04:00
Save photo to device when first permission granted (#2751)
This commit is contained in:
committed by
GitHub
parent
e5bbd6b873
commit
cef619a009
@@ -21,6 +21,7 @@ import useLocationPermission from "sharedHooks/useLocationPermission.tsx";
|
||||
import useStore from "stores/useStore";
|
||||
|
||||
import CameraWithDevice from "./CameraWithDevice";
|
||||
import savePhotosToPhotoLibrary from "./helpers/savePhotosToPhotoLibrary";
|
||||
import saveRotatedPhotoToDocumentsDirectory from "./helpers/saveRotatedPhotoToDocumentsDirectory";
|
||||
import usePrepareStoreAndNavigate from "./hooks/usePrepareStoreAndNavigate";
|
||||
import useSavePhotoPermission from "./hooks/useSavePhotoPermission";
|
||||
@@ -37,6 +38,7 @@ const CameraContainer = ( ) => {
|
||||
const cameraUris = useStore( state => state.cameraUris );
|
||||
const sentinelFileName = useStore( state => state.sentinelFileName );
|
||||
const setSentinelFileName = useStore( state => state.setSentinelFileName );
|
||||
const addCameraRollUris = useStore( state => state.addCameraRollUris );
|
||||
|
||||
const { params } = useRoute( );
|
||||
const cameraType = params?.camera;
|
||||
@@ -260,8 +262,20 @@ const CameraContainer = ( ) => {
|
||||
requestLocationPermissions={requestLocationPermissions}
|
||||
/>
|
||||
{showPhotoPermissionsGate && renderSavePhotoPermissionGate( {
|
||||
onRequestGranted: ( ) => console.log( "granted in save photo permission gate" ),
|
||||
onRequestBlocked: ( ) => console.log( "blocked in save photo permission gate" ),
|
||||
onPermissionGranted: async ( ) => {
|
||||
const savedPhotoUris = await savePhotosToPhotoLibrary( cameraUris, userLocation );
|
||||
await logStageIfAICamera( "save_photos_to_photo_library_first_permission" );
|
||||
if ( savedPhotoUris.length > 0 ) {
|
||||
// Save these camera roll URIs, so later on observation editor can update
|
||||
// the EXIF metadata of these photos, once we retrieve a location.
|
||||
addCameraRollUris( savedPhotoUris );
|
||||
}
|
||||
await logStageIfAICamera( "request_save_photo_permission_complete" );
|
||||
await handleNavigation( {
|
||||
cameraUris,
|
||||
evidenceToAdd
|
||||
} );
|
||||
},
|
||||
onModalHide: async ( ) => {
|
||||
await logStageIfAICamera( "request_save_photo_permission_complete" );
|
||||
await handleNavigation( {
|
||||
|
||||
@@ -37,7 +37,6 @@ const useSavePhotoPermission = ( ) => {
|
||||
const renderPermissionsGate = useCallback( ( callbacks?: SavePhotoPermissionCallbacks ) => {
|
||||
const {
|
||||
onPermissionGranted,
|
||||
onPermissionDenied,
|
||||
onPermissionBlocked,
|
||||
onModalHide
|
||||
} = callbacks || { };
|
||||
@@ -53,18 +52,15 @@ const useSavePhotoPermission = ( ) => {
|
||||
withoutNavigation
|
||||
onModalHide={( ) => {
|
||||
setShowPermissionGate( false );
|
||||
if ( onModalHide ) onModalHide( );
|
||||
if ( !hasPermissions && onModalHide ) onModalHide( );
|
||||
}}
|
||||
onPermissionGranted={( ) => {
|
||||
onPhotoPermissionGranted={( ) => {
|
||||
setShowPermissionGate( false );
|
||||
setHasPermissions( true );
|
||||
setHasBlockedPermissions( false );
|
||||
if ( onPermissionGranted ) onPermissionGranted( );
|
||||
}}
|
||||
onPermissionDenied={( ) => {
|
||||
if ( onPermissionDenied ) onPermissionDenied( );
|
||||
}}
|
||||
onPermissionBlocked={( ) => {
|
||||
onPhotoPermissionBlocked={( ) => {
|
||||
setHasPermissions( false );
|
||||
setHasBlockedPermissions( true );
|
||||
setShowPermissionGate( true );
|
||||
@@ -72,7 +68,7 @@ const useSavePhotoPermission = ( ) => {
|
||||
}}
|
||||
/>
|
||||
);
|
||||
}, [showPermissionGate] );
|
||||
}, [showPermissionGate, hasPermissions] );
|
||||
|
||||
// This gets exported and used as a dependency, so it needs to have
|
||||
// referential stability
|
||||
|
||||
Reference in New Issue
Block a user