import React, { Component } from 'react' import PropTypes from 'prop-types' import {connect} from 'react-redux' import { hideQrScanner, qrCodeDetected} from '../../actions' import Instascan from 'instascan' class QrScanner extends Component { static propTypes = { visible: PropTypes.bool, hideQrScanner: PropTypes.func, qrCodeDetected: PropTypes.func, } constructor (props) { super(props) this.state = { msg: 'Place the QR code in front of your camera so we can read it...', } this.scanning = false } parseContent (content) { let type = 'unknown' let values = {} // Here we could add more cases // To parse other codes (transactions for ex.) if (content.split('ethereum:').length > 1) { type = 'address' values = {'address': content.split('ethereum:')[1] } } return {type, values} } componentDidUpdate () { if (this.props.visible && this.camera && !this.scanning) { const scanner = new Instascan.Scanner({ video: this.camera, backgroundScan: false, continuous: true, }) scanner.addListener('scan', (content) => { scanner.stop().then(_ => { const result = this.parseContent(content) if (result.type !== 'unknown') { console.log('QR-SCANNER: CODE DETECTED', result) this.props.qrCodeDetected(result) this.props.hideQrScanner() } else { this.setState({msg: 'Error: We couldn\'t identify that QR code'}) } }) }) Instascan.Camera.getCameras().then((cameras) => { if (cameras.length > 0) { scanner.start(cameras[0]) console.log('QR-SCANNER: started scanning with camera', cameras[0]) } else { console.log('QR-SCANNER: no cameras found') } }).catch(function (e) { console.error(e) }) this.scanning = true } } render () { const { visible } = this.props if (!visible) { return null } return (