1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-23 09:52:26 +01:00

Abstract account modal.

This commit is contained in:
Dan 2017-09-19 22:26:10 -02:30 committed by Chi Kei Chan
parent 39afbea7aa
commit 24fd16b1be
4 changed files with 96 additions and 63 deletions

View File

@ -3,25 +3,21 @@ const h = require('react-hyperscript')
const inherits = require('util').inherits const inherits = require('util').inherits
const connect = require('react-redux').connect const connect = require('react-redux').connect
const actions = require('../../actions') const actions = require('../../actions')
const AccountModalContainer = require('./account-modal-container')
const { getSelectedIdentity, getSelectedAddress } = require('../../selectors') const { getSelectedIdentity, getSelectedAddress } = require('../../selectors')
const genAccountLink = require('../../../lib/account-link.js') const genAccountLink = require('../../../lib/account-link.js')
const Identicon = require('../identicon')
const QrView = require('../qr-code') const QrView = require('../qr-code')
function mapStateToProps (state) { function mapStateToProps (state) {
return { return {
network: state.metamask.network, network: state.metamask.network,
address: state.metamask.selectedAddress,
selectedAddress: getSelectedAddress(state),
selectedIdentity: getSelectedIdentity(state), selectedIdentity: getSelectedIdentity(state),
} }
} }
function mapDispatchToProps (dispatch) { function mapDispatchToProps (dispatch) {
return { return {
hideModal: () => { // Is this supposed to be used somewhere?
dispatch(actions.hideModal())
},
showQrView: (selected, identity) => dispatch(actions.showQrView(selected, identity)), showQrView: (selected, identity) => dispatch(actions.showQrView(selected, identity)),
} }
} }
@ -34,49 +30,28 @@ function AccountDetailsModal () {
module.exports = connect(mapStateToProps, mapDispatchToProps)(AccountDetailsModal) module.exports = connect(mapStateToProps, mapDispatchToProps)(AccountDetailsModal)
// Not yet pixel perfect todos: // Not yet pixel perfect todos:
// fonts of qr-header and close button // fonts of qr-header
AccountDetailsModal.prototype.render = function () { AccountDetailsModal.prototype.render = function () {
const { selectedIdentity, network } = this.props const { selectedIdentity, network } = this.props
const { name, address } = selectedIdentity
return h('div', { style: { borderRadius: '4px' }}, [ return h(AccountModalContainer, {}, [
h('div.account-details-modal-wrapper', [
h('div', [
// Needs a border; requires changes to svg
h(Identicon, {
address: selectedIdentity.address,
diameter: 64,
style: {},
}),
]),
h('div.account-details-modal-close', {
onClick: this.props.hideModal,
}),
h(QrView, { h(QrView, {
Qr: { Qr: {
message: this.props.selectedIdentity.name, message: name,
data: this.props.selectedIdentity.address, data: address,
}, },
}), }),
// divider h('div.account-modal-divider'),
h('div.account-details-modal-divider'),
h('button.btn-clear', { h('button.btn-clear', {
onClick: () => { onClick: () => global.platform.openWindow({ url: genAccountLink(address, network) }),
const url = genAccountLink(selectedIdentity.address, network)
global.platform.openWindow({ url })
},
}, [ 'View account on Etherscan' ]), }, [ 'View account on Etherscan' ]),
// Holding on redesign for Export Private Key functionality // Holding on redesign for Export Private Key functionality
h('button.btn-clear', [ 'Export private key' ]), h('button.btn-clear', [ 'Export private key' ]),
]),
]) ])
} }

View File

@ -0,0 +1,55 @@
const Component = require('react').Component
const h = require('react-hyperscript')
const inherits = require('util').inherits
const connect = require('react-redux').connect
const actions = require('../../actions')
const { getSelectedIdentity } = require('../../selectors')
const Identicon = require('../identicon')
function mapStateToProps (state) {
return {
selectedIdentity: getSelectedIdentity(state),
}
}
function mapDispatchToProps (dispatch) {
return {
hideModal: () => {
dispatch(actions.hideModal())
},
}
}
inherits(AccountModalContainer, Component)
function AccountModalContainer () {
Component.call(this)
}
module.exports = connect(mapStateToProps, mapDispatchToProps)(AccountModalContainer)
AccountModalContainer.prototype.render = function () {
const { selectedIdentity, children } = this.props
console.log(`children`, children);
return h('div', { style: { borderRadius: '4px' }}, [
h('div.account-modal-container', [
h('div', [
// Needs a border; requires changes to svg
h(Identicon, {
address: selectedIdentity.address,
diameter: 64,
style: {},
}),
]),
h('div.account-modal-close', {
onClick: this.props.hideModal,
}),
...children,
]),
])
}

View File

@ -52,7 +52,7 @@ QrCodeView.prototype.render = function () {
width: '247px', width: '247px',
}, },
value: Qr.data, value: Qr.data,
readonly: true, readOnly: true,
}), }),
// h(CopyButton, { // h(CopyButton, {
// value: Qr.data, // value: Qr.data,

View File

@ -175,8 +175,8 @@
font-size: 18px; font-size: 18px;
} }
// Account Details Modal // Account Modal Container
.account-details-modal-wrapper { .account-modal-container {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
justify-content: flex-start; justify-content: flex-start;
@ -192,16 +192,38 @@
} }
} }
.account-details-modal-wrapper .qr-header { .account-modal-close::after {
content: '\00D7';
font-size: 40px;
color: $dusty-gray;
position: absolute;
top: 10px;
right: 12px;
cursor: pointer;
}
.account-modal-container .identicon {
position: relative;
left: 0;
right: 0;
margin: 0 auto;
top: -32px;
margin-bottom: -32px;
}
// Account Details Modal
.account-modal-container .qr-header {
margin-top: 9px; margin-top: 9px;
font-size: 20px; font-size: 20px;
} }
.account-details-modal-wrapper .qr-wrapper { .account-modal-container .qr-wrapper {
margin-top: 5px; margin-top: 5px;
} }
.account-details-modal-wrapper .ellip-address-wrapper { .account-modal-container .ellip-address-wrapper {
display: flex; display: flex;
justify-content: center; justify-content: center;
border: 1px solid $alto; border: 1px solid $alto;
@ -211,14 +233,14 @@
width: 286px; width: 286px;
} }
.account-details-modal-wrapper .qr-ellip-address { .account-modal-container .qr-ellip-address {
width: 254px; width: 254px;
border: none; border: none;
font-family: 'Montserrat Light'; font-family: 'Montserrat Light';
font-size: 14px; font-size: 14px;
} }
.account-details-modal-wrapper .btn-clear { .account-modal-container .btn-clear {
min-height: 28px; min-height: 28px;
font-size: 14px; font-size: 14px;
border-color: $curious-blue; border-color: $curious-blue;
@ -233,32 +255,13 @@
font-family: 'Montserrat Light'; font-family: 'Montserrat Light';
} }
.account-details-modal-divider { .account-modal-divider {
width: 100%; width: 100%;
height: 1px; height: 1px;
margin: 19px 0 8px 0; margin: 19px 0 8px 0;
background-color: $alto; background-color: $alto;
} }
.account-details-modal-wrapper .identicon {
position: relative;
left: 0;
right: 0;
margin: 0 auto;
top: -32px;
margin-bottom: -32px;
}
.account-details-modal-close::after {
content: '\00D7';
font-size: 40px;
color: $dusty-gray;
position: absolute;
top: 10px;
right: 12px;
cursor: pointer;
}
// New Account Modal // New Account Modal
.new-account-modal-wrapper { .new-account-modal-wrapper {
display: flex; display: flex;