import CameraRoll from '@react-native-community/cameraroll'; import {RefObject} from 'react'; import {Alert} from 'react-native'; import {RNCamera, TakePictureResponse} from 'react-native-camera'; import ImagePicker, {Image, Video} from 'react-native-image-crop-picker'; import {ERROR_UPLOAD} from '../constants/strings'; /* * Captures a photo and pauses to shoe the preview of the picture taken */ export const takePicture = ( cameraRef: RefObject, callback: (pic: TakePictureResponse) => void, ) => { if (cameraRef !== null) { cameraRef.current?.pausePreview(); const options = { forceUpOrientation: true, writeExif: false, }; cameraRef.current?.takePictureAsync(options).then((pic) => { callback(pic); }); } }; 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 = (callback: (pic: Image) => void) => { ImagePicker.openPicker({ smartAlbums: [ 'Favorites', 'RecentlyAdded', 'SelfPortraits', 'Screenshots', 'UserLibrary', ], mediaType: 'photo', }) .then((pic) => { if (pic.path && pic.filename) { callback(pic); } }) .catch((err) => { if (err.code && err.code !== 'E_PICKER_CANCELLED') { Alert.alert(ERROR_UPLOAD); } }); }; /** * This function opens the ImagePicker, only lets you select video files, * formats the file extension, then makes a call to the server to get the presigned URL, * after which it makes a POST request to the returned URL to upload the file directly to S3. * params: none * @returns: none */ export const navigateToVideoPicker = (callback: (vid: Video) => void) => { ImagePicker.openPicker({ mediaType: 'video', }) .then(async (vid) => { if (vid.path) { callback(vid); } }) .catch((err) => { if (err.code && err.code !== 'E_PICKER_CANCELLED') { Alert.alert(ERROR_UPLOAD); } }); };