import { Alert } from 'react-native'; import * as Linking from 'expo-linking'; import * as Location from 'expo-location'; import * as Permissions from 'expo-permissions'; import * as ImagePicker from 'expo-image-picker'; export const getPermissionAsync = async ( permission: Permissions.PermissionType) => { const {status} = await Permissions.askAsync(permission); if (status !== 'granted') { const permissionName = permission.toLowerCase().replace('_', ' '); Alert.alert( `Cannot access ${permissionName}`, `If you would like to use this feature, you will need to enable ` + `the ${permissionName} permission in your phone's settings.`, [ { text: 'Let\'s go!', onPress: () => Linking.openURL('app-settings:'), }, { text: 'Nevermind', onPress: () => {}, style: 'cancel' }, ], { cancelable: true } ); return false; } return true; }; export const getLocationAsync = async ( onSend: (locations: { location: Location.LocationObjectCoords }[]) => void) => { const response = await Location.requestForegroundPermissionsAsync(); if (!response.granted) return; const location = await Location.getCurrentPositionAsync(); if (!location) return; onSend([{ location: location.coords }]); }; export const pickImageAsync = async (onSend: (images: {image: string}[]) => void) => { const response = await ImagePicker.requestMediaLibraryPermissionsAsync(); if (!response.granted) return; const result = await ImagePicker.launchImageLibraryAsync({ allowsEditing: true, aspect: [4, 3], }); if (result.canceled) return; const images = result.assets.map(({ uri: image }) => ({ image })); onSend(images); }; export const takePictureAsync = async (onSend: (images: {image: string}[]) => void) => { const response = await ImagePicker.requestCameraPermissionsAsync(); if (!response.granted) return; const result = await ImagePicker.launchCameraAsync({ allowsEditing: true, aspect: [4, 3], }); if (result.canceled) return; const images = result.assets.map(({ uri: image }) => ({ image })); onSend(images); };