You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

125 lines
3.4 KiB

import React from 'react'
import PropTypes from 'prop-types'
import copy from 'copy-to-clipboard'
import QRCode from 'qrcode.react'
import copyIcon from 'icons/copy.svg'
import Isvg from 'react-inlinesvg'
import x from 'icons/x.svg'
import { showNotification } from 'notifications'
import styles from './ReceiveModal.scss'
class ReceiveModal extends React.Component {
constructor(props) {
super(props)
this.state = {
qrCodeType: 1
}
}
render() {
const copyOnClick = data => {
copy(data)
showNotification('Noice', 'Successfully copied to clipboard')
}
const changeQrCode = () => {
const { qrCodeType } = this.state
if (qrCodeType === 1) {
this.setState({ qrCodeType: 2 })
} else {
this.setState({ qrCodeType: 1 })
}
}
const { isOpen, pubkey, address, alias, closeReceiveModal, network } = this.props
const { qrCodeType } = this.state
if (!isOpen) {
return null
}
return (
<div className={styles.container}>
<div className={styles.closeContainer}>
<span onClick={closeReceiveModal}>
<Isvg src={x} />
</span>
</div>
<div className={styles.content}>
<section className={styles.left}>
<header className={styles.header}>
<h2>{alias && alias.length ? alias : pubkey.substring(0, 10)}</h2>
<div className={styles.qrCodeOptions}>
<div className={qrCodeType === 1 && styles.active} onClick={changeQrCode}>
Node Pubkey
</div>
<div className={qrCodeType === 2 && styles.active} onClick={changeQrCode}>
Bitcoin Address
</div>
</div>
</header>
<div className={styles.qrCodeContainer}>
<QRCode
value={qrCodeType === 1 ? pubkey : address}
renderAs="svg"
size={150}
bgColor="transparent"
fgColor="white"
level="L"
/>
</div>
</section>
<section className={styles.right}>
<div className={styles.pubkey}>
<h4>Node Public Key</h4>
<p>
<span className={styles.data}>{pubkey}</span>
<span
onClick={() => copyOnClick(pubkey)}
className={`${styles.copy} hint--left`}
data-hint="Copy pubkey"
>
<Isvg src={copyIcon} />
</span>
</p>
</div>
<div className={styles.address}>
<h4>Bitcoin {network.name} Address</h4>
<p>
<span className={styles.data}>{address}</span>
<span
onClick={() => copyOnClick(address)}
className={`${styles.copy} hint--left`}
data-hint="Copy address"
>
<Isvg src={copyIcon} />
</span>
</p>
</div>
</section>
</div>
</div>
)
}
}
ReceiveModal.propTypes = {
network: PropTypes.shape({
name: PropTypes.string
}).isRequired,
isOpen: PropTypes.bool.isRequired,
pubkey: PropTypes.string,
address: PropTypes.string,
alias: PropTypes.string,
closeReceiveModal: PropTypes.func.isRequired
}
export default ReceiveModal