mirror of
https://github.com/fullstack-cash/fullstack-gatsby-theme-bch-wallet.git
synced 2026-09-21 16:52:06 -07:00
Merge branch 'master' into dh-slp-scans
This commit is contained in:
@@ -9,7 +9,9 @@ class TokenModal extends React.Component {
|
||||
constructor (props) {
|
||||
super(props)
|
||||
_this = this
|
||||
this.state = {}
|
||||
this.state = {
|
||||
copySuccess: ''
|
||||
}
|
||||
|
||||
this.modalFooter = (
|
||||
<>
|
||||
@@ -44,16 +46,31 @@ class TokenModal extends React.Component {
|
||||
<Col xs={12} sm={3}>
|
||||
<b>TokenId:</b>
|
||||
</Col>
|
||||
<Col xs={10} sm={8}>
|
||||
<Col xs={9} sm={7}>
|
||||
{token.tokenId}
|
||||
</Col>
|
||||
<Col xs={2} sm={1}>
|
||||
<FontAwesomeIcon
|
||||
className='icon btn-animation'
|
||||
size='lg'
|
||||
onClick={() => _this.copyToClipBoard('tokenId')}
|
||||
icon='copy'
|
||||
/>
|
||||
<Col
|
||||
xs={3}
|
||||
sm={2}
|
||||
className={
|
||||
_this.state.copySuccess ? 'nopadding' : ''
|
||||
}
|
||||
>
|
||||
{_this.state.copySuccess === 'tokenId'
|
||||
? (
|
||||
<div className='copied-text'>
|
||||
<span>Copied!</span>
|
||||
</div>
|
||||
)
|
||||
: (
|
||||
<FontAwesomeIcon
|
||||
className='icon btn-animation'
|
||||
style={{ cssFloat: 'right' }}
|
||||
size='lg'
|
||||
onClick={() => _this.copyToClipBoard('tokenId')}
|
||||
icon='copy'
|
||||
/>
|
||||
)}
|
||||
</Col>
|
||||
</Row>
|
||||
</Col>
|
||||
@@ -155,6 +172,19 @@ class TokenModal extends React.Component {
|
||||
textArea.select()
|
||||
document.execCommand('Copy')
|
||||
textArea.remove()
|
||||
|
||||
_this.handleCopySuccess(key)
|
||||
}
|
||||
|
||||
handleCopySuccess (key) {
|
||||
_this.setState({
|
||||
copySuccess: key
|
||||
})
|
||||
setTimeout(() => {
|
||||
_this.setState({
|
||||
copySuccess: ''
|
||||
})
|
||||
}, 1000)
|
||||
}
|
||||
}
|
||||
TokenModal.propTypes = {
|
||||
|
||||
@@ -95,4 +95,13 @@
|
||||
.txIdContainer button:focus {
|
||||
border: none;
|
||||
outline: none;
|
||||
}
|
||||
}
|
||||
|
||||
.copied-text{
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
color: var(--main-color);
|
||||
}
|
||||
.nopadding{
|
||||
padding: 0!important;
|
||||
}
|
||||
@@ -20,24 +20,31 @@ class Wallet extends React.Component {
|
||||
return (
|
||||
<Content>
|
||||
<InfoWallets />
|
||||
|
||||
{/* Show wallet info is this exists */}
|
||||
{_this.props.walletInfo.mnemonic && (
|
||||
<WalletInfo walletInfo={_this.props.walletInfo} />
|
||||
)}
|
||||
|
||||
<NewWallet
|
||||
updateBalance={_this.props.updateBalance}
|
||||
setWalletInfo={_this.props.setWalletInfo}
|
||||
setBchWallet={_this.props.setBchWallet}
|
||||
walletInfo={_this.props.walletInfo}
|
||||
/>
|
||||
{/** Shows the 'create' and 'import' cards
|
||||
* if there's not a wallet created
|
||||
*/}
|
||||
{!_this.props.walletInfo.mnemonic && (
|
||||
<>
|
||||
<NewWallet
|
||||
updateBalance={_this.props.updateBalance}
|
||||
setWalletInfo={_this.props.setWalletInfo}
|
||||
setBchWallet={_this.props.setBchWallet}
|
||||
walletInfo={_this.props.walletInfo}
|
||||
/>
|
||||
|
||||
<ImportWallet
|
||||
updateBalance={_this.props.updateBalance}
|
||||
setWalletInfo={_this.props.setWalletInfo}
|
||||
setBchWallet={_this.props.setBchWallet}
|
||||
walletInfo={_this.props.walletInfo}
|
||||
/>
|
||||
<ImportWallet
|
||||
updateBalance={_this.props.updateBalance}
|
||||
setWalletInfo={_this.props.setWalletInfo}
|
||||
setBchWallet={_this.props.setBchWallet}
|
||||
walletInfo={_this.props.walletInfo}
|
||||
/>
|
||||
</>
|
||||
)}
|
||||
|
||||
{this.props.importComponents}
|
||||
</Content>
|
||||
|
||||
@@ -28,7 +28,8 @@ class InfoWallets extends React.Component {
|
||||
<p>
|
||||
This is an open source, non-custodial web wallet
|
||||
supporting Bitcoin Cash (BCH) and SLP tokens. Web wallets
|
||||
offer user convenience, by they are inherently insecure.{' '}
|
||||
offer user convenience, but they are inherently insecure and
|
||||
bad for privacy.{' '}
|
||||
<b>Storing large amounts of money on a web wallet is not
|
||||
recommended!
|
||||
</b>
|
||||
|
||||
@@ -19,7 +19,8 @@ class WalletInfo extends React.Component {
|
||||
legacyAddress: '',
|
||||
hdPath: '',
|
||||
blurredMnemonic: true,
|
||||
blurredPrivateKey: true
|
||||
blurredPrivateKey: true,
|
||||
copySuccess: ''
|
||||
}
|
||||
}
|
||||
|
||||
@@ -50,43 +51,77 @@ class WalletInfo extends React.Component {
|
||||
<Row className='wallet-info-content mt-1 text-left'>
|
||||
<Col xs={8} sm={9} lg={10}>
|
||||
<span>
|
||||
<b>Mnemonic:</b> <span className={_this.state.blurredMnemonic ? 'blurred' : ''}> {_this.state.mnemonic} </span>
|
||||
<b>Mnemonic:</b>{' '}
|
||||
<span
|
||||
className={_this.state.blurredMnemonic ? 'blurred' : ''}
|
||||
>
|
||||
{' '}
|
||||
{_this.state.mnemonic}{' '}
|
||||
</span>
|
||||
</span>
|
||||
</Col>
|
||||
<Col xs={4} sm={3} lg={2} className='text-right'>
|
||||
<FontAwesomeIcon
|
||||
className='icon btn-animation'
|
||||
size='lg'
|
||||
onClick={() => _this.blurMnemonic()}
|
||||
icon={eyeIcon.mnemonic}
|
||||
/>
|
||||
<FontAwesomeIcon
|
||||
className='icon btn-animation ml-1'
|
||||
size='lg'
|
||||
onClick={() => _this.copyToClipBoard('mnemonic')}
|
||||
icon='copy'
|
||||
/>
|
||||
{_this.state.copySuccess === 'mnemonic'
|
||||
? (
|
||||
<div className='copied-text'>
|
||||
<span>Copied!</span>
|
||||
</div>
|
||||
)
|
||||
: (
|
||||
<>
|
||||
<FontAwesomeIcon
|
||||
className='icon btn-animation'
|
||||
size='lg'
|
||||
onClick={() => _this.blurMnemonic()}
|
||||
icon={eyeIcon.mnemonic}
|
||||
/>
|
||||
<FontAwesomeIcon
|
||||
className='icon btn-animation ml-1'
|
||||
size='lg'
|
||||
onClick={() => _this.copyToClipBoard('mnemonic')}
|
||||
icon='copy'
|
||||
/>
|
||||
</>
|
||||
)}
|
||||
</Col>
|
||||
</Row>
|
||||
<Row className='wallet-info-content mt-1 text-left'>
|
||||
<Col xs={8} sm={9} lg={10}>
|
||||
<span>
|
||||
<b>Private Key: </b> <span className={_this.state.blurredPrivateKey ? 'blurred' : ''}> {_this.state.privateKey} </span>
|
||||
<b>Private Key: </b>{' '}
|
||||
<span
|
||||
className={
|
||||
_this.state.blurredPrivateKey ? 'blurred' : ''
|
||||
}
|
||||
>
|
||||
{' '}
|
||||
{_this.state.privateKey}{' '}
|
||||
</span>
|
||||
</span>
|
||||
</Col>
|
||||
<Col xs={4} sm={3} lg={2} className='text-right'>
|
||||
<FontAwesomeIcon
|
||||
className='icon btn-animation'
|
||||
size='lg'
|
||||
onClick={() => _this.blurPrivateKey()}
|
||||
icon={eyeIcon.privateKey}
|
||||
/>
|
||||
<FontAwesomeIcon
|
||||
className='icon btn-animation ml-1'
|
||||
size='lg'
|
||||
onClick={() => _this.copyToClipBoard('privateKey')}
|
||||
icon='copy'
|
||||
/>
|
||||
{_this.state.copySuccess === 'privateKey'
|
||||
? (
|
||||
<div className='copied-text'>
|
||||
<span>Copied!</span>
|
||||
</div>
|
||||
)
|
||||
: (
|
||||
<>
|
||||
<FontAwesomeIcon
|
||||
className='icon btn-animation'
|
||||
size='lg'
|
||||
onClick={() => _this.blurPrivateKey()}
|
||||
icon={eyeIcon.privateKey}
|
||||
/>
|
||||
<FontAwesomeIcon
|
||||
className='icon btn-animation ml-1'
|
||||
size='lg'
|
||||
onClick={() => _this.copyToClipBoard('privateKey')}
|
||||
icon='copy'
|
||||
/>
|
||||
</>
|
||||
)}
|
||||
</Col>
|
||||
</Row>
|
||||
<Row className='wallet-info-content mt-1 text-left'>
|
||||
@@ -96,12 +131,20 @@ class WalletInfo extends React.Component {
|
||||
</span>
|
||||
</Col>
|
||||
<Col xs={4} sm={3} lg={2} className='text-right'>
|
||||
<FontAwesomeIcon
|
||||
className='icon btn-animation'
|
||||
size='lg'
|
||||
onClick={() => _this.copyToClipBoard('cashAddress')}
|
||||
icon='copy'
|
||||
/>
|
||||
{_this.state.copySuccess === 'cashAddress'
|
||||
? (
|
||||
<div className='copied-text'>
|
||||
<span>Copied!</span>
|
||||
</div>
|
||||
)
|
||||
: (
|
||||
<FontAwesomeIcon
|
||||
className='icon btn-animation'
|
||||
size='lg'
|
||||
onClick={() => _this.copyToClipBoard('cashAddress')}
|
||||
icon='copy'
|
||||
/>
|
||||
)}
|
||||
</Col>
|
||||
</Row>
|
||||
<Row className='wallet-info-content mt-1 text-left'>
|
||||
@@ -111,12 +154,20 @@ class WalletInfo extends React.Component {
|
||||
</span>
|
||||
</Col>
|
||||
<Col xs={4} sm={3} lg={2} className='text-right'>
|
||||
<FontAwesomeIcon
|
||||
className='icon btn-animation'
|
||||
size='lg'
|
||||
onClick={() => _this.copyToClipBoard('address')}
|
||||
icon='copy'
|
||||
/>
|
||||
{_this.state.copySuccess === 'address'
|
||||
? (
|
||||
<div className='copied-text'>
|
||||
<span>Copied!</span>
|
||||
</div>
|
||||
)
|
||||
: (
|
||||
<FontAwesomeIcon
|
||||
className='icon btn-animation'
|
||||
size='lg'
|
||||
onClick={() => _this.copyToClipBoard('address')}
|
||||
icon='copy'
|
||||
/>
|
||||
)}
|
||||
</Col>
|
||||
</Row>
|
||||
<Row className='wallet-info-content mt-1 text-left'>
|
||||
@@ -126,12 +177,20 @@ class WalletInfo extends React.Component {
|
||||
</span>
|
||||
</Col>
|
||||
<Col xs={4} sm={3} lg={2} className='text-right'>
|
||||
<FontAwesomeIcon
|
||||
className='icon btn-animation'
|
||||
size='lg'
|
||||
onClick={() => _this.copyToClipBoard('slpAddress')}
|
||||
icon='copy'
|
||||
/>
|
||||
{_this.state.copySuccess === 'slpAddress'
|
||||
? (
|
||||
<div className='copied-text'>
|
||||
<span>Copied!</span>
|
||||
</div>
|
||||
)
|
||||
: (
|
||||
<FontAwesomeIcon
|
||||
className='icon btn-animation'
|
||||
size='lg'
|
||||
onClick={() => _this.copyToClipBoard('slpAddress')}
|
||||
icon='copy'
|
||||
/>
|
||||
)}
|
||||
</Col>
|
||||
</Row>
|
||||
<Row className='wallet-info-content mt-1 text-left'>
|
||||
@@ -141,12 +200,20 @@ class WalletInfo extends React.Component {
|
||||
</span>
|
||||
</Col>
|
||||
<Col xs={4} sm={3} lg={2} className='text-right'>
|
||||
<FontAwesomeIcon
|
||||
className='icon btn-animation'
|
||||
size='lg'
|
||||
onClick={() => _this.copyToClipBoard('legacyAddress')}
|
||||
icon='copy'
|
||||
/>
|
||||
{_this.state.copySuccess === 'legacyAddress'
|
||||
? (
|
||||
<div className='copied-text'>
|
||||
<span>Copied!</span>
|
||||
</div>
|
||||
)
|
||||
: (
|
||||
<FontAwesomeIcon
|
||||
className='icon btn-animation'
|
||||
size='lg'
|
||||
onClick={() => _this.copyToClipBoard('legacyAddress')}
|
||||
icon='copy'
|
||||
/>
|
||||
)}
|
||||
</Col>
|
||||
</Row>
|
||||
<Row className='wallet-info-content mt-1 text-left'>
|
||||
@@ -157,12 +224,20 @@ class WalletInfo extends React.Component {
|
||||
</span>
|
||||
</Col>
|
||||
<Col xs={4} sm={3} lg={2} className='text-right'>
|
||||
<FontAwesomeIcon
|
||||
className='icon btn-animation'
|
||||
size='lg'
|
||||
onClick={() => _this.copyToClipBoard('hdPath')}
|
||||
icon='copy'
|
||||
/>
|
||||
{_this.state.copySuccess === 'hdPath'
|
||||
? (
|
||||
<div className='copied-text'>
|
||||
<span>Copied!</span>
|
||||
</div>
|
||||
)
|
||||
: (
|
||||
<FontAwesomeIcon
|
||||
className='icon btn-animation'
|
||||
size='lg'
|
||||
onClick={() => _this.copyToClipBoard('hdPath')}
|
||||
icon='copy'
|
||||
/>
|
||||
)}
|
||||
</Col>
|
||||
</Row>
|
||||
</Col>
|
||||
@@ -176,13 +251,13 @@ class WalletInfo extends React.Component {
|
||||
|
||||
blurMnemonic () {
|
||||
_this.setState({
|
||||
blurredMnemonic: (!_this.state.blurredMnemonic)
|
||||
blurredMnemonic: !_this.state.blurredMnemonic
|
||||
})
|
||||
}
|
||||
|
||||
blurPrivateKey () {
|
||||
_this.setState({
|
||||
blurredPrivateKey: (!_this.state.blurredPrivateKey)
|
||||
blurredPrivateKey: !_this.state.blurredPrivateKey
|
||||
})
|
||||
}
|
||||
|
||||
@@ -195,6 +270,19 @@ class WalletInfo extends React.Component {
|
||||
textArea.select()
|
||||
document.execCommand('Copy')
|
||||
textArea.remove()
|
||||
|
||||
_this.handleCopySuccess(key)
|
||||
}
|
||||
|
||||
handleCopySuccess (key) {
|
||||
_this.setState({
|
||||
copySuccess: key
|
||||
})
|
||||
setTimeout(() => {
|
||||
_this.setState({
|
||||
copySuccess: ''
|
||||
})
|
||||
}, 1000)
|
||||
}
|
||||
|
||||
componentDidMount () {
|
||||
|
||||
@@ -19,4 +19,10 @@
|
||||
.blurred {
|
||||
filter: blur(2.7px);
|
||||
-webkit-filter: blur(2.7px);
|
||||
}
|
||||
|
||||
.copied-text{
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
color: var(--main-color);
|
||||
}
|
||||
Reference in New Issue
Block a user