packages/@fbcmobile-ui/Components/CameraModal.js (54 lines of code) (raw):

/** * Copyright (c) Facebook, Inc. and its affiliates. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. * * @flow strict-local * @format */ 'use strict'; import Modal from 'react-native-modalbox'; import QRCodeScanner from 'react-native-qrcode-scanner'; import React, {useState} from 'react'; import fbt from 'fbt'; import {ApplicationStyles} from '@fbcmobile/ui/Theme'; import {Dimensions, View} from 'react-native'; import {Toolbar} from 'react-native-material-ui'; type Props = { +fullSize?: boolean, +isOpen: boolean, +onScan: (qrCode: string) => void, +closeModal: () => void, }; const CameraModal = (props: Props) => { const [useFrontCamera, setUseFrontCamera] = useState(false); const max_height = Dimensions.get('window').height; const {fullSize, onScan, isOpen, closeModal} = props; const height = fullSize ? max_height : max_height / 1.5; return ( <Modal style={{height}} isOpen={isOpen} position={'center'} swipeToClose={false} backButtonClose={false} backdropPressToClose={false}> <Toolbar style={ApplicationStyles.screen.toolbar} centerElement={fbt( 'Scan QR code', 'Camera modal toolbar item', ).toString()} rightElement={{actions: ['switch-camera', 'close']}} onRightElementPress={e => { if (e.index === 0) { // switch camera setUseFrontCamera(!useFrontCamera); } else if (e.index === 1) { closeModal(); } }} /> <View style={{height, overflow: 'hidden'}}> <QRCodeScanner checkAndroid6Permissions cameraType={useFrontCamera ? 'front' : 'back'} onRead={e => { onScan(e.data); closeModal(); }} /> </View> </Modal> ); }; export default CameraModal;