import React, { useContext, useEffect, useState } from 'react'; import Icon from 'react-native-vector-icons/MaterialIcons'; import { Camera } from 'expo-camera'; import { BarCodeEvent, BarCodeScanner } from 'expo-barcode-scanner'; import { Linking, TouchableOpacity, View } from 'react-native'; import { Theme } from './ui/styleUtils'; import { Column, Button, Text } from './ui'; import { GlobalContext } from '../shared/GlobalContext'; import { useSelector } from '@xstate/react'; import { selectIsActive } from '../machines/app'; import { useTranslation } from 'react-i18next'; export const QrScanner: React.FC = (props) => { const { t } = useTranslation('QrScanner'); const { appService } = useContext(GlobalContext); const [hasPermission, setHasPermission] = useState(null); const [scanned, setScanned] = useState(false); const [type, setType] = useState(Camera.Constants.Type.back); const isActive = useSelector(appService, selectIsActive); const openSettings = () => { Linking.openSettings(); }; useEffect(() => { (async () => { const response = await Camera.requestCameraPermissionsAsync(); setHasPermission(response.granted); })(); }, []); useEffect(() => { if (isActive && hasPermission === false) { (async () => { const response = await Camera.requestCameraPermissionsAsync(); setHasPermission(response.granted); })(); } }, [isActive]); if (hasPermission === null) { return ; } if (hasPermission === false) { return ( {t('missingPermissionText')}