7 changed files with 200 additions and 4 deletions
@ -0,0 +1,71 @@ |
|||
import React from 'react'; |
|||
import ReactDOM from 'react-dom'; |
|||
|
|||
import Store from '../../../store'; |
|||
import { translate } from '../../../translate/translate'; |
|||
import QrReader from 'react-qr-reader' |
|||
import { |
|||
QRModalRender, |
|||
QRModalReaderRender |
|||
} from './qrModal.render'; |
|||
|
|||
class QRModal extends React.Component { |
|||
constructor(props) { |
|||
super(props); |
|||
|
|||
this.state = { |
|||
modalIsOpen: false, |
|||
error: "" |
|||
}; |
|||
|
|||
this.openModal = this.openModal.bind(this); |
|||
this.closeModal = this.closeModal.bind(this); |
|||
|
|||
this.handleScan = this.handleScan.bind(this); |
|||
this.handleError = this.handleError.bind(this); |
|||
|
|||
document.body.addEventListener('click', this.closeModal); |
|||
|
|||
} |
|||
|
|||
handleScan(data){ |
|||
if(data!==null) { |
|||
if(this.props.mode==="scan") { |
|||
this.props.setRecieverFromScan(data) |
|||
} |
|||
this.closeModal(); |
|||
} |
|||
return data; |
|||
} |
|||
handleError(err){ |
|||
this.setState({error: err}); |
|||
} |
|||
openModal() { |
|||
this.setState({modalIsOpen: true}); |
|||
if(this.props.mode==="scan") { |
|||
ReactDOM.render(<QrReader |
|||
delay={500} |
|||
style={{ height: 281, width: 500, }} |
|||
onError={this.handleError} |
|||
onScan={this.handleScan} |
|||
/>, document.getElementById('webcam')); |
|||
} |
|||
} |
|||
closeModal() { |
|||
this.setState({modalIsOpen: false}); |
|||
if(this.props.mode==="scan") { |
|||
ReactDOM.unmountComponentAtNode(document.getElementById('webcam')); |
|||
} |
|||
} |
|||
render() { |
|||
if(this.props.mode==="scan") { |
|||
return QRModalReaderRender.call(this); |
|||
} else { |
|||
return QRModalRender.call(this); |
|||
} |
|||
|
|||
|
|||
} |
|||
} |
|||
|
|||
export default QRModal; |
@ -0,0 +1,97 @@ |
|||
import React from 'react'; |
|||
import { translate } from '../../../translate/translate'; |
|||
import QRCode from 'qrcode.react'; |
|||
|
|||
export const QRModalRender = function () { |
|||
return ( |
|||
<span> |
|||
<span |
|||
className="label label-default margin-left-10 action" |
|||
title={ translate('INDEX.QRCODE') } |
|||
onClick={this.openModal}> |
|||
<i className="icon fa-qrcode" aria-hidden="true"></i> |
|||
</span> |
|||
<div |
|||
className={ 'modal modal-3d-sign ' + (this.state.modalIsOpen ? 'show in' : 'fade hide') } |
|||
id="QRModal" |
|||
aria-hidden="true" |
|||
aria-labelledby="QRModal" |
|||
role="dialog" |
|||
tabIndex="-1"> |
|||
<div className="modal-dialog modal-center modal-sm"> |
|||
<div className="modal-content"> |
|||
<div className="modal-header bg-orange-a400 wallet-send-header"> |
|||
<button |
|||
type="button" |
|||
className="close white" |
|||
aria-label="Close" |
|||
onClick={ this.closeModal }> |
|||
<span aria-hidden="true">×</span> |
|||
</button> |
|||
<h4 className="modal-title white text-left">{ translate('INDEX.SCAN_QR_CODE') }</h4> |
|||
</div> |
|||
<div className="modal-body"> |
|||
<div className="animsition vertical-align fade-in"> |
|||
<div className="page-content vertical-align-middle"> |
|||
<QRCode |
|||
value={this.props.content} |
|||
size={198} |
|||
/> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div className={ 'modal-backdrop ' + (this.state.modalIsOpen ? 'show in' : 'fade hide') }></div> |
|||
</span> |
|||
); |
|||
}; |
|||
|
|||
|
|||
export const QRModalReaderRender = function () { |
|||
return ( |
|||
<span> |
|||
<button type="button" |
|||
className="btn btn-default" |
|||
onClick={this.openModal}> |
|||
<i className="icon fa-qrcode" aria-hidden="true"></i> |
|||
{ translate('INDEX.SCAN_QRCODE_WEBCAM') } |
|||
</button> |
|||
<div |
|||
className={ 'modal modal-3d-sign ' + (this.state.modalIsOpen ? 'show in' : 'fade hide') } |
|||
id="QRReadModal" |
|||
aria-hidden="true" |
|||
aria-labelledby="QRReadModal" |
|||
role="dialog" |
|||
tabIndex="-1"> |
|||
<div className="modal-dialog modal-center modal-md"> |
|||
<div className="modal-content"> |
|||
<div className="modal-header bg-orange-a400 wallet-send-header"> |
|||
<button |
|||
type="button" |
|||
className="close white" |
|||
aria-label="Close" |
|||
onClick={ this.closeModal }> |
|||
<span aria-hidden="true">×</span> |
|||
</button> |
|||
<h4 className="modal-title white text-left">{ translate('INDEX.SCAN_QRCODE_WEBCAM') }</h4> |
|||
</div> |
|||
<div className="modal-body"> |
|||
<div className="animsition vertical-align fade-in"> |
|||
<div className="page-content vertical-align-middle"> |
|||
<div id="webcam"> |
|||
{this.state.error} |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div className={ 'modal-backdrop ' + (this.state.modalIsOpen ? 'show in' : 'fade hide') }></div> |
|||
</span> |
|||
); |
|||
}; |
|||
|
|||
|
Loading…
Reference in new issue