react-native-ajora
Version:
The most complete AI agent UI for React Native
116 lines (99 loc) • 3.04 kB
text/typescript
import * as Linking from "expo-linking";
import * as ImagePicker from "expo-image-picker";
import * as DocumentPicker from "expo-document-picker";
import { Alert } from "react-native";
import { Attachement } from "../hooks/useAjora";
export default async function getPermissionAsync(
permission: "camera" | "mediaLibrary" | "location"
) {
let status = "granted";
switch (permission) {
case "camera":
const cameraResponse = await ImagePicker.requestCameraPermissionsAsync();
status = cameraResponse.status;
break;
case "mediaLibrary":
const mediaResponse =
await ImagePicker.requestMediaLibraryPermissionsAsync();
status = mediaResponse.status;
break;
}
if (status !== "granted") {
const permissionName = permission.toLowerCase().replace("_", " ");
Alert.alert(
"Cannot be done 😞",
`If you would like to use this feature, you'll need to enable the ${permissionName} permission in your phone settings.`,
[
{
text: "Let's go!",
onPress: () => Linking.openURL("app-settings:"),
},
{ text: "Nevermind", onPress: () => {}, style: "cancel" },
],
{ cancelable: true }
);
return false;
}
return true;
}
export async function pickImageAsync(
onAttachement: (attachement: Attachement) => void
) {
const response = await ImagePicker.requestMediaLibraryPermissionsAsync();
if (!response.granted) return;
const result = await ImagePicker.launchImageLibraryAsync({
allowsEditing: false,
aspect: [4, 3],
});
if (result.canceled) return;
onAttachement({
displayName: result?.assets[0].fileName || "",
mimeType: result?.assets[0].mimeType || "",
fileUri: result?.assets[0].uri || "",
});
}
export async function takePictureAsync(
onAttachement: (attachement: Attachement) => void
) {
const response = await ImagePicker.requestCameraPermissionsAsync();
if (!response.granted) return;
const result = await ImagePicker.launchCameraAsync({
allowsEditing: false,
aspect: [4, 3],
});
if (result.canceled) return;
onAttachement({
displayName: result?.assets[0].fileName || "",
mimeType: result?.assets[0].mimeType || "",
fileUri: result?.assets[0].uri || "",
});
}
export async function filePickerAsync(
onAttachement: (attachement: Attachement) => void
) {
const result = await DocumentPicker.getDocumentAsync({
type: "application/pdf",
});
if (result.canceled) return;
const file = result.assets[0];
onAttachement({
displayName: file.name,
mimeType: file.mimeType,
fileUri: file.uri,
});
}
export async function audioPickerAsync(
onAttachement: (audios: Attachement) => void
) {
const result = await DocumentPicker.getDocumentAsync({
type: ["audio/*"],
copyToCacheDirectory: true,
});
if (result.canceled) return;
const audioFile = result.assets[0];
onAttachement({
displayName: audioFile.name,
mimeType: audioFile.mimeType,
fileUri: audioFile.uri,
});
}