import { FontAwesome, Ionicons, MaterialCommunityIcons, } from "@expo/vector-icons"; import { useNavigation } from "@react-navigation/native"; import { Camera } from "expo-camera"; import * as FileSystem from "expo-file-system"; import * as Permissions from "expo-permissions"; import React, { useEffect, useRef, useState } from "react"; import { SafeAreaView, Text, TouchableOpacity, View } from "react-native"; import { connect } from "react-redux"; import { createStructuredSelector } from "reselect"; import { selectCurrentCameraJob, selectCurrentCameraJobId, } from "../../redux/app/app.selectors"; import { addPhoto } from "../../redux/photos/photos.actions"; const mapStateToProps = createStructuredSelector({ cameraJobId: selectCurrentCameraJobId, cameraJob: selectCurrentCameraJob, }); const mapDispatchToProps = (dispatch) => ({ addPhoto: (photo) => dispatch(addPhoto(photo)), }); export function ScreenCamera({ cameraJobId, cameraJob, addPhoto }) { const navigation = useNavigation(); const [hasPermission, setHasPermission] = useState(null); const [rollPermision, setRollPermission] = useState(null); const [type, setType] = useState(Camera.Constants.Type.back); const cameraRef = useRef(null); useEffect(() => { (async () => { const { status } = await Camera.requestPermissionsAsync(); setHasPermission(status === "granted"); // camera roll const { cam_roll } = await Permissions.askAsync(Permissions.CAMERA_ROLL); setRollPermission(cam_roll === "granted"); })(); }, []); const handleCameraType = () => { setType( type === Camera.Constants.Type.back ? Camera.Constants.Type.front : Camera.Constants.Type.back ); }; const handleTakePicture = async () => { console.log("Taking the picture!"); if (cameraRef.current) { const options = { //quality: 0.5, //base64: true, //skipProcessing: true, }; let photo = await cameraRef.current.takePictureAsync(options); console.log("ScreenCamera -> photo", photo); const filename = photo.uri.substring(photo.uri.lastIndexOf("/") + 1); const newUri = FileSystem.documentDirectory + "photos/" + filename; await FileSystem.copyAsync({ from: photo.uri, to: newUri, }); addPhoto({ ...photo, id: filename, uri: newUri, jobId: cameraJobId }); } }; if (hasPermission === null) { return ; } if (hasPermission === false) { return No access to camera; } return ( navigation.push("CameraJobSearch")} style={{ display: "flex", width: "100%", alignSelf: "flex-start", alignItems: "center", backgroundColor: "rgba(112, 128, 144, 0.3)", fontSize: 20, fontWeight: "bold", }} > {cameraJob && cameraJob.ro_number} {cameraJob && `${cameraJob && cameraJob.ownr_fn} ${ cameraJob && cameraJob.ownr_ln }`} {cameraJobId} { navigation.push("MediaCache"); }} style={{ alignSelf: "flex-end", alignItems: "center", backgroundColor: "transparent", }} > ); } export default connect(mapStateToProps, mapDispatchToProps)(ScreenCamera);