Jack Mallers
7 years ago
9 changed files with 277 additions and 56 deletions
@ -1,17 +1,44 @@ |
|||||
import React from 'react' |
import React from 'react' |
||||
import PropTypes from 'prop-types' |
import PropTypes from 'prop-types' |
||||
|
import QRCode from 'qrcode.react' |
||||
import styles from './WalletDetails.scss' |
import styles from './WalletDetails.scss' |
||||
|
|
||||
const WalletDetails = () => { |
const WalletDetails = ({ info, address }) => { |
||||
return ( |
return ( |
||||
<div className={styles.walletdetails}> |
<div className={styles.walletdetails}> |
||||
wallet details |
<div className={styles.inner}> |
||||
|
<div className={styles.left}> |
||||
|
<section> |
||||
|
<h4>Node Alias</h4> |
||||
|
<h1>Testing</h1> |
||||
|
</section> |
||||
|
<section> |
||||
|
<h4>Node Public Key</h4> |
||||
|
<p className={styles.copytext}>{info.data.identity_pubkey}</p> |
||||
|
</section> |
||||
|
<section> |
||||
|
<h4>Deposit Address</h4> |
||||
|
<div className={styles.qrcode}> |
||||
|
<QRCode value={address} /> |
||||
|
</div> |
||||
|
<p className={styles.copytext}>{address}</p> |
||||
|
</section> |
||||
|
</div> |
||||
|
<div className={styles.right}> |
||||
|
<section> |
||||
|
<h2> |
||||
|
Network |
||||
|
</h2> |
||||
|
</section> |
||||
|
</div> |
||||
|
</div> |
||||
</div> |
</div> |
||||
) |
) |
||||
} |
} |
||||
|
|
||||
WalletDetails.propTypes = { |
WalletDetails.propTypes = { |
||||
|
info: PropTypes.object.isRequired, |
||||
|
address: PropTypes.string.isRequired |
||||
} |
} |
||||
|
|
||||
export default WalletDetails |
export default WalletDetails |
||||
|
@ -0,0 +1,70 @@ |
|||||
|
@import '../../variables.scss'; |
||||
|
|
||||
|
.walletdetails { |
||||
|
} |
||||
|
|
||||
|
.inner { |
||||
|
width: 75%; |
||||
|
margin: 0 auto; |
||||
|
display: flex; |
||||
|
flex-direction: row; |
||||
|
} |
||||
|
|
||||
|
.left, .right { |
||||
|
padding: 50px 0; |
||||
|
width: 100%; |
||||
|
|
||||
|
section { |
||||
|
position: relative; |
||||
|
margin: 0 20px; |
||||
|
padding: 20px 0; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.left { |
||||
|
border-right: 1px solid $darkgrey; |
||||
|
|
||||
|
section { |
||||
|
border-bottom: 1px solid $main; |
||||
|
|
||||
|
h4 { |
||||
|
text-transform: uppercase; |
||||
|
letter-spacing: 1.5px; |
||||
|
font-size: 10px; |
||||
|
margin-bottom: 15px; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
h1 { |
||||
|
font-family: 'Roboto'; |
||||
|
font-weight: 300; |
||||
|
font-size: 24px; |
||||
|
} |
||||
|
|
||||
|
.qrcode { |
||||
|
text-align: center; |
||||
|
margin: 20px 0; |
||||
|
} |
||||
|
|
||||
|
.copytext { |
||||
|
font-family: 'Roboto'; |
||||
|
text-align: center; |
||||
|
font-size: 14px; |
||||
|
font-weight: 200; |
||||
|
border-radius: 7px; |
||||
|
background: $lightgrey; |
||||
|
border: 1px solid $darkestgrey; |
||||
|
padding: 10px; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.right { |
||||
|
section { |
||||
|
h2 { |
||||
|
text-transform: uppercase; |
||||
|
font-family: 'Roboto'; |
||||
|
font-weight: 300; |
||||
|
font-size: 24px; |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,61 @@ |
|||||
|
import React from 'react' |
||||
|
import PropTypes from 'prop-types' |
||||
|
import ReactModal from 'react-modal' |
||||
|
import copy from 'copy-to-clipboard' |
||||
|
import QRCode from 'qrcode.react' |
||||
|
import { showNotification } from 'notifications' |
||||
|
import styles from './ReceiveModal.scss' |
||||
|
|
||||
|
const ReceiveModal = ({ isOpen, hideActivityModal, pubkey, address }) => { |
||||
|
const customStyles = { |
||||
|
overlay: { |
||||
|
cursor: 'pointer' |
||||
|
}, |
||||
|
content: { |
||||
|
top: 'auto', |
||||
|
left: '20%', |
||||
|
right: '0', |
||||
|
bottom: 'auto', |
||||
|
width: '40%', |
||||
|
margin: '50px auto' |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
const copyOnClick = data => { |
||||
|
copy(data) |
||||
|
showNotification('Noice', 'Successfully copied to clipboard') |
||||
|
} |
||||
|
|
||||
|
return ( |
||||
|
<ReactModal |
||||
|
isOpen |
||||
|
ariaHideApp |
||||
|
shouldCloseOnOverlayClick |
||||
|
contentLabel='No Overlay Click Modal' |
||||
|
onRequestClose={() => hideActivityModal()} |
||||
|
parentSelector={() => document.body} |
||||
|
style={customStyles} |
||||
|
> |
||||
|
<div className={styles.container}> |
||||
|
<section> |
||||
|
<h4>Node Public Key (<span onClick={() => copyOnClick(pubkey)}>Copy</span>)</h4> |
||||
|
<p>{pubkey}</p> |
||||
|
</section> |
||||
|
|
||||
|
<section> |
||||
|
<h4>Deposit Address (<span onClick={() => copyOnClick(address)}>Copy</span>)</h4> |
||||
|
<p>{address}</p> |
||||
|
<div className={styles.qrcode}> |
||||
|
<QRCode value={address} /> |
||||
|
</div> |
||||
|
</section> |
||||
|
</div> |
||||
|
</ReactModal> |
||||
|
) |
||||
|
} |
||||
|
|
||||
|
ReceiveModal.propTypes = { |
||||
|
|
||||
|
} |
||||
|
|
||||
|
export default ReceiveModal |
@ -0,0 +1,38 @@ |
|||||
|
@import '../../variables.scss'; |
||||
|
|
||||
|
.container { |
||||
|
section { |
||||
|
margin: 25px 0; |
||||
|
padding: 25px; |
||||
|
border-bottom: 1px solid $darkestgrey; |
||||
|
|
||||
|
h4 { |
||||
|
font-size: 14px; |
||||
|
font-weight: bold; |
||||
|
text-transform: uppercase; |
||||
|
letter-spacing: 1.5px; |
||||
|
margin-bottom: 10px; |
||||
|
|
||||
|
span { |
||||
|
color: $blue; |
||||
|
cursor: pointer; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.qrcode { |
||||
|
text-align: center; |
||||
|
margin-top: 20px; |
||||
|
} |
||||
|
|
||||
|
p { |
||||
|
font-family: 'Roboto'; |
||||
|
text-align: center; |
||||
|
font-size: 14px; |
||||
|
font-weight: 200; |
||||
|
border-radius: 7px; |
||||
|
background: $lightgrey; |
||||
|
border: 1px solid $main; |
||||
|
padding: 10px; |
||||
|
} |
||||
|
} |
||||
|
} |
@ -1,54 +1,84 @@ |
|||||
import React from 'react' |
import React, { Component } from 'react' |
||||
import PropTypes from 'prop-types' |
import PropTypes from 'prop-types' |
||||
import copy from 'copy-to-clipboard' |
import { FaQrcode } from 'react-icons/lib/fa' |
||||
import { showNotification } from 'notifications' |
|
||||
import CryptoIcon from 'components/CryptoIcon' |
import CryptoIcon from 'components/CryptoIcon' |
||||
import { btc, usd } from 'utils' |
import { btc, usd } from 'utils' |
||||
|
import ReceiveModal from './ReceiveModal' |
||||
import styles from './Wallet.scss' |
import styles from './Wallet.scss' |
||||
|
|
||||
const Wallet = ({ ticker, currentTicker, balance, address, pubkey, showModal }) => { |
class Wallet extends Component { |
||||
const copyOnClick = data => { |
constructor(props) { |
||||
copy(data) |
super(props) |
||||
showNotification('Noice', 'Successfully copied to clipboard') |
|
||||
|
this.state = { |
||||
|
modalOpen: false |
||||
|
} |
||||
} |
} |
||||
|
|
||||
return ( |
render() { |
||||
<div className={styles.wallet} onClick={() => showModal('WALLET_DETAILS', {})}> |
const { |
||||
<div className={styles.content}> |
ticker, |
||||
<div className={styles.left}> |
currentTicker, |
||||
<div className={styles.leftContent}> |
balance, |
||||
<CryptoIcon currency={ticker.crypto} /> |
address, |
||||
<div className={styles.details}> |
info, |
||||
<h1>{btc.satoshisToBtc(parseFloat(balance.walletBalance) + parseFloat(balance.channelBalance))} BTC</h1> |
showModal |
||||
<span>{btc.satoshisToBtc(balance.walletBalance)} available</span> |
} = this.props |
||||
<span>{btc.satoshisToBtc(balance.channelBalance)} in channels</span> |
|
||||
|
const { modalOpen } = this.state |
||||
|
|
||||
|
return ( |
||||
|
<div className={styles.wallet}> |
||||
|
{ |
||||
|
(modalOpen && |
||||
|
<ReceiveModal |
||||
|
isOpen={modalOpen} |
||||
|
hideActivityModal={() => this.setState({ modalOpen: false })} |
||||
|
pubkey={info.data.identity_pubkey} |
||||
|
address={address} |
||||
|
/>) |
||||
|
} |
||||
|
<div className={styles.content}> |
||||
|
<div className={styles.left}> |
||||
|
<div className={styles.leftContent}> |
||||
|
<CryptoIcon currency={ticker.crypto} /> |
||||
|
<div className={styles.details}> |
||||
|
<h1>{btc.satoshisToBtc(parseFloat(balance.walletBalance) + parseFloat(balance.channelBalance))} BTC</h1> |
||||
|
<span>{btc.satoshisToBtc(balance.walletBalance)} available</span> |
||||
|
<span>{btc.satoshisToBtc(balance.channelBalance)} in channels</span> |
||||
|
</div> |
||||
</div> |
</div> |
||||
</div> |
</div> |
||||
</div> |
<div className={styles.right}> |
||||
<div className={styles.right}> |
<div className={styles.rightContent}> |
||||
<div className={styles.rightContent}> |
<div onClick={() => this.setState({ modalOpen: true })}> |
||||
<div className={styles.data}> |
<FaQrcode /> |
||||
<h2>Node public key (<span onClick={() => copyOnClick(pubkey)}>copy</span>)</h2> |
Address |
||||
<p>{pubkey}</p> |
</div> |
||||
</div> |
|
||||
<div className={styles.data}> |
|
||||
<h2>Deposit address (<span onClick={() => copyOnClick(address)}>copy</span>)</h2> |
|
||||
<p>{address}</p> |
|
||||
</div> |
</div> |
||||
</div> |
</div> |
||||
</div> |
</div> |
||||
</div> |
</div> |
||||
</div> |
) |
||||
) |
} |
||||
} |
} |
||||
|
// const Wallet = ({ ticker, currentTicker, balance, address, info, showModal }) => {
|
||||
|
// const copyOnClick = data => {
|
||||
|
// copy(data)
|
||||
|
// showNotification('Noice', 'Successfully copied to clipboard')
|
||||
|
// }
|
||||
|
|
||||
|
// return (
|
||||
|
// )
|
||||
|
// }
|
||||
|
|
||||
Wallet.propTypes = { |
Wallet.propTypes = { |
||||
ticker: PropTypes.object.isRequired, |
ticker: PropTypes.object.isRequired, |
||||
currentTicker: PropTypes.object.isRequired, |
currentTicker: PropTypes.object.isRequired, |
||||
balance: PropTypes.object.isRequired, |
balance: PropTypes.object.isRequired, |
||||
address: PropTypes.string.isRequired, |
address: PropTypes.string.isRequired, |
||||
pubkey: PropTypes.string.isRequired, |
info: PropTypes.object.isRequired, |
||||
showModal: PropTypes.func.isRequired |
showModal: PropTypes.func.isRequired |
||||
} |
} |
||||
|
|
||||
export default Wallet |
export default Wallet |
||||
|
Loading…
Reference in new issue