import CameraRoll from '@react-native-community/cameraroll'; import {useNavigation} from '@react-navigation/native'; import {Dispatch, RefObject, SetStateAction} from 'react'; import {Alert} from 'react-native'; import {RNCamera} from 'react-native-camera'; import ImagePicker from 'react-native-image-crop-picker'; import {ScreenType} from 'src/types'; import {ERROR_UPLOAD} from '../constants/strings'; /* * Captures a photo and pauses to shoe the preview of the picture taken */ export const takePicture = ( cameraRef: RefObject, setShowSaveButton: Dispatch>, setCapturedImage: Dispatch>, ) => { if (cameraRef !== null) { cameraRef.current?.pausePreview(); const options = { forceUpOrientation: true, quality: 0.5, base64: true, }; cameraRef.current?.takePictureAsync(options).then((response) => { setShowSaveButton(true); setCapturedImage(response.uri); }); } }; export const downloadImage = (capturedImageURI: string) => { CameraRoll.save(capturedImageURI, {album: 'Recents', type: 'photo'}) .then((_res) => Alert.alert('Saved to device!')) .catch((_err) => Alert.alert('Failed to save to device!')); }; export const navigateToImagePicker = ( navigation: any, screenType: ScreenType, title: string, ) => { ImagePicker.openPicker({ smartAlbums: [ 'Favorites', 'RecentlyAdded', 'SelfPortraits', 'Screenshots', 'UserLibrary', ], mediaType: 'any', }) .then((picture) => { if ('path' in picture) { navigation.navigate('ZoomInCropper', { screenType, title, image: picture, }); } }) .catch((err) => { if (err.code && err.code !== 'E_PICKER_CANCELLED') { Alert.alert(ERROR_UPLOAD); } }); };