/* eslint-disable no-console */ import React from 'react'; import { StyleSheet, Text, View, TouchableOpacity, Slider } from 'react-native'; // eslint-disable-next-line import/no-unresolved import { RNCamera } from 'react-native-camera'; const flashModeOrder = { off: 'on', on: 'auto', auto: 'torch', torch: 'off', }; const wbOrder = { auto: 'sunny', sunny: 'cloudy', cloudy: 'shadow', shadow: 'fluorescent', fluorescent: 'incandescent', incandescent: 'auto', }; export default class CameraScreen extends React.Component { state = { flash: 'off', zoom: 0, autoFocus: 'on', depth: 0, type: 'back', whiteBalance: 'auto', ratio: '16:9', recordOptions: { mute: false, maxDuration: 5, quality: RNCamera.Constants.VideoQuality['288p'], }, isRecording: false, }; toggleFacing() { this.setState({ type: this.state.type === 'back' ? 'front' : 'back', }); } toggleFlash() { this.setState({ flash: flashModeOrder[this.state.flash], }); } toggleWB() { this.setState({ whiteBalance: wbOrder[this.state.whiteBalance], }); } toggleFocus() { this.setState({ autoFocus: this.state.autoFocus === 'on' ? 'off' : 'on', }); } zoomOut() { this.setState({ zoom: this.state.zoom - 0.1 < 0 ? 0 : this.state.zoom - 0.1, }); } zoomIn() { this.setState({ zoom: this.state.zoom + 0.1 > 1 ? 1 : this.state.zoom + 0.1, }); } setFocusDepth(depth) { this.setState({ depth, }); } takePicture = async function() { if (this.camera) { const data = await this.camera.takePictureAsync(); console.warn('takePicture ', data); } }; takeVideo = async function() { if (this.camera) { try { const promise = this.camera.recordAsync(this.state.recordOptions); if (promise) { this.setState({ isRecording: true }); const data = await promise; this.setState({ isRecording: false }); console.warn('takeVideo', data); } } catch (e) { console.error(e); } } }; renderCamera() { return ( { this.camera = ref; }} style={{ flex: 1, }} type={this.state.type} flashMode={this.state.flash} autoFocus={this.state.autoFocus} zoom={this.state.zoom} whiteBalance={this.state.whiteBalance} ratio={this.state.ratio} focusDepth={this.state.depth} permissionDialogTitle={'Permission to use camera'} permissionDialogMessage={'We need your permission to use your camera phone'} > FLIP FLASH: {this.state.flash} WB: {this.state.whiteBalance} {} : this.takeVideo.bind(this)} > {this.state.isRecording ? ( ) : ( REC )} {this.state.zoom !== 0 && ( Zoom: {this.state.zoom} )} + - AF : {this.state.autoFocus} SNAP ); } render() { return {this.renderCamera()}; } } const styles = StyleSheet.create({ container: { flex: 1, paddingTop: 10, backgroundColor: '#000', }, flipButton: { flex: 0.3, height: 40, marginHorizontal: 2, marginBottom: 10, marginTop: 20, borderRadius: 8, borderColor: 'white', borderWidth: 1, padding: 5, alignItems: 'center', justifyContent: 'center', }, flipText: { color: 'white', fontSize: 15, }, zoomText: { position: 'absolute', bottom: 70, zIndex: 2, left: 2, }, picButton: { backgroundColor: 'darkseagreen', }, });