Enhance global modal to handle Buy, Edit, and Details Modals

feature/default_network_editable
sdtsui 7 years ago
parent 4e9376ca71
commit 71b2dd290b
  1. 5
      ui/app/components/dropdowns/components/account-dropdowns.js
  2. 73
      ui/app/components/modals/account-details-modal.js
  3. 43
      ui/app/components/modals/buy-modal.js
  4. 2
      ui/app/components/modals/buy-options-modal.js
  5. 80
      ui/app/components/modals/edit-account-name-modal.js
  6. 4
      ui/app/components/modals/index.js
  7. 14
      ui/app/components/modals/modal.js

@ -189,7 +189,7 @@ class AccountDropdowns extends Component {
{
closeMenu: () => {},
onClick: () => {
this.props.showAccountDetail()
this.props.actions.showAccountDetailModal()
},
style: Object.assign(
{},
@ -348,6 +348,9 @@ const mapDispatchToProps = (dispatch) => {
showConfigPage: () => dispatch(actions.showConfigPage()),
requestAccountExport: () => dispatch(actions.requestExportAccount()),
showAccountDetail: (address) => dispatch(actions.showAccountDetail(address)),
showAccountDetailModal: () => {
dispatch(actions.showModal({ name: 'ACCOUNT_DETAILS' }))
},
addNewAccount: () => dispatch(actions.addNewAccount()),
showImportPage: () => dispatch(actions.showImportPage()),
showQrView: (selected, identity) => dispatch(actions.showQrView(selected, identity)),

@ -0,0 +1,73 @@
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')
function mapStateToProps (state) {
return {
address: state.metamask.selectedAddress,
}
}
function mapDispatchToProps (dispatch) {
return {
hideModal: () => {
dispatch(actions.hideModal())
}
}
}
inherits(AccountDetailsModal, Component)
function AccountDetailsModal () {
Component.call(this)
}
module.exports = connect(mapStateToProps, mapDispatchToProps)(AccountDetailsModal)
// AccountDetailsModal is currently meant to be rendered inside <Modal />
// It is the only component in this codebase that does so
// It utilizes modal styles
AccountDetailsModal.prototype.render = function () {
return h('div', {}, [
h('div.modal-content.transfers-subview', {
}, [
h('div.modal-content-title-wrapper.flex-column.flex-center', {
style: {},
}, [
h('div.modal-content-title', {
style: {},
}, 'Account Details Modal'),
h('div', {}, 'How would you like to buy Ether?'),
]),
h('div.modal-content-options.flex-column.flex-center', {}, [
h('div.modal-content-option', {
onClick: () => {},
}, [
h('div.modal-content-option-title', {}, 'Coinbase'),
h('div.modal-content-option-subtitle', {}, 'Buy with Fiat'),
]),
h('div.modal-content-option', {}, [
h('div.modal-content-option-title', {}, 'Shapeshift'),
h('div.modal-content-option-subtitle', {}, 'Trade any digital asset for any other'),
]),
h('div.modal-content-option', {}, [
h('div.modal-content-option-title', {}, 'Direct Deposit'),
h('div.modal-content-option-subtitle', {}, 'Deposit from another account'),
]),
]),
h('button', {
style: {
background: 'white',
},
onClick: () => { this.props.hideModal() },
}, h('div.modal-content-footer#modal-content-footer-text',{}, 'Cancel')),
])
])
}

@ -1,43 +0,0 @@
const Component = require('react').Component
const h = require('react-hyperscript')
const inherits = require('util').inherits
const BuyOptions = require('../buy-options')
const Modal = require('./modal.js')
inherits(BuyModal, Component)
function BuyModal () {
Component.call(this)
}
module.exports = BuyModal
BuyModal.prototype.render = function () {
return h(Modal, {
ref: "modalRef",
}, [
h(BuyOptions, {}, []),
])
}
// TODO: specify default props and proptypes
// Generalize to multiple modals:
// Modal API:
// - props {
// key: ['BUY', 'EDIT_ACCOUNT_NAME', 'ACCOUNT_DETAILS']
// }
// - These props will be passed as 'active'
// mapStateToProps(state, ownProps) {
// active: state.appState.modal[key]
// }
// - Modal accepts:
// - mobileModalStyles, for mobile viewports
// - laptopModalStyles, for laptop viewports
// - backdropStyles
// - Do not set defaults, they are unneeded here
//
// If multiple-step modals are needed:
// - pass a component with internal state that tracks buy steps
// - steps could technically be in redux
// - it renders and does not trigger open/close actions until done

@ -2,7 +2,7 @@ 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 actions = require('../../actions')
function mapStateToProps (state) {
return {

@ -0,0 +1,80 @@
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')
function mapStateToProps (state) {
return {
network: state.metamask.network,
address: state.metamask.selectedAddress,
}
}
function mapDispatchToProps (dispatch) {
return {
toCoinbase: (address) => {
dispatch(actions.buyEth({ network: '1', address, amount: 0 }))
},
hideModal: () => {
dispatch(actions.hideModal())
}
}
}
inherits(BuyOptions, Component)
function BuyOptions () {
Component.call(this)
}
module.exports = connect(mapStateToProps, mapDispatchToProps)(BuyOptions)
// BuyOptions is currently meant to be rendered inside <Modal />
// It is the only component in this codebase that does so
// It utilizes modal styles
BuyOptions.prototype.render = function () {
return h('div', {}, [
h('div.modal-content.transfers-subview', {
}, [
h('div.modal-content-title-wrapper.flex-column.flex-center', {
style: {},
}, [
h('div.modal-content-title', {
style: {},
}, 'Edit Account Name Modal'),
h('div', {}, 'How would you like to buy Ether?'),
]),
h('div.modal-content-options.flex-column.flex-center', {}, [
h('div.modal-content-option', {
onClick: () => {
const { toCoinbase, address } = this.props
toCoinbase(address)
},
}, [
h('div.modal-content-option-title', {}, 'Coinbase'),
h('div.modal-content-option-subtitle', {}, 'Buy with Fiat'),
]),
h('div.modal-content-option', {}, [
h('div.modal-content-option-title', {}, 'Shapeshift'),
h('div.modal-content-option-subtitle', {}, 'Trade any digital asset for any other'),
]),
h('div.modal-content-option', {}, [
h('div.modal-content-option-title', {}, 'Direct Deposit'),
h('div.modal-content-option-subtitle', {}, 'Deposit from another account'),
]),
]),
h('button', {
style: {
background: 'white',
},
onClick: () => { this.props.hideModal() },
}, h('div.modal-content-footer#modal-content-footer-text',{}, 'Cancel')),
])
])
}

@ -1,9 +1,5 @@
const Modal = require('./modal')
const BuyModal = require('./buy-modal')
// const h = require('account-options')
// const h = require('account-details')
module.exports = {
Modal,
BuyModal,
}

@ -6,14 +6,22 @@ const FadeModal = require('boron').FadeModal
const actions = require('../../actions')
const isMobileView = require('../../../lib/is-mobile-view')
const isPopupOrNotification = require('../../../../app/scripts/lib/is-popup-or-notification')
const BuyOptions = require('../buy-options')
// Modal Components
const BuyOptions = require('./buy-options-modal')
const AccountDetailsModal = require('./account-details-modal')
const EditAccountNameModal = require('./edit-account-name-modal')
const MODALS = {
BUY: [
h(BuyOptions, {}, []),
],
EDIT_ACCOUNT_NAME: [],
ACCOUNT_DETAILS: [],
EDIT_ACCOUNT_NAME: [
h(AccountDetailsModal, {}, []),
],
ACCOUNT_DETAILS: [
h(EditAccountNameModal, {}, []),
],
}
function mapStateToProps (state) {

Loading…
Cancel
Save