aboutsummaryrefslogtreecommitdiffstats
path: root/ui/app/send.js
diff options
context:
space:
mode:
Diffstat (limited to 'ui/app/send.js')
-rw-r--r--ui/app/send.js490
1 files changed, 375 insertions, 115 deletions
diff --git a/ui/app/send.js b/ui/app/send.js
index a21a219eb..ab527019f 100644
--- a/ui/app/send.js
+++ b/ui/app/send.js
@@ -11,6 +11,9 @@ const isHex = require('./util').isHex
const EthBalance = require('./components/eth-balance')
const EnsInput = require('./components/ens-input')
const ethUtil = require('ethereumjs-util')
+
+const ARAGON = '960b236A07cf122663c4303350609A66A7B288C0'
+
module.exports = connect(mapStateToProps)(SendTransactionScreen)
function mapStateToProps (state) {
@@ -56,172 +59,425 @@ SendTransactionScreen.prototype.render = function () {
return (
- h('.send-screen.flex-column.flex-grow', [
-
- //
- // Sender Profile
- //
+ h('div.flex-column.flex-grow', {
+ style: {
+ minWidth: '355px', // TODO: maxWidth TBD, use home.html
+ },
+ }, [
- h('.account-data-subsection.flex-row.flex-grow', {
+ // Main Send token Card
+ h('div.send-screen.flex-column.flex-grow', {
style: {
- margin: '0 20px',
- },
+ marginLeft: '3.5%',
+ marginRight: '3.5%',
+ background: '#FFFFFF', // $background-white
+ boxShadow: '0 2px 4px 0 rgba(0,0,0,0.08)',
+ }
}, [
+ h('section.flex-center.flex-row', {
+ style: {
+ zIndex: 15, // $token-icon-z-index
+ marginTop: '-35px',
+ }
+ }, [
+ h(Identicon, {
+ address: ARAGON,
+ diameter: 76,
+ }),
+ ]),
- // header - identicon + nav
- h('.flex-row.flex-space-between', {
+ h('h3.flex-center', {
style: {
- marginTop: '15px',
+ marginTop: '-18px',
+ fontSize: '16px',
},
}, [
- // back button
- h('i.fa.fa-arrow-left.fa-lg.cursor-pointer.color-orange', {
- onClick: this.back.bind(this),
+ 'Send Tokens',
+ ]),
+
+ h('h3.flex-center', {
+ style: {
+ textAlign: 'center',
+ fontSize: '12px',
+ },
+ }, [
+ 'Send Tokens to anyone with an Ethereum account',
+ ]),
+
+ h('h3.flex-center', {
+ style: {
+ textAlign: 'center',
+ marginTop: '2px',
+ fontSize: '12px',
+ },
+ }, [
+ 'Your Aragon Token Balance is:',
+ ]),
+
+ h('h3.flex-center', {
+ style: {
+ textAlign: 'center',
+ fontSize: '36px',
+ marginTop: '8px',
+ },
+ }, [
+ '2.34',
+ ]),
+
+ h('h3.flex-center', {
+ style: {
+ textAlign: 'center',
+ fontSize: '12px',
+ marginTop: '4px',
+ },
+ }, [
+ 'ANT',
+ ]),
+
+ // error message
+ props.error && h('span.error.flex-center', props.error),
+
+ // 'to' field
+ h('section.flex-row.flex-center', {
+ style: {
+ fontSize: '12px',
+ },
+ }, [
+ h(EnsInput, {
+ name: 'address',
+ placeholder: 'Recipient Address',
+ onChange: this.recipientDidChange.bind(this),
+ network,
+ identities,
+ addressBook,
}),
+ ]),
- // large identicon
- h('.identicon-wrapper.flex-column.flex-center.select-none', [
- h(Identicon, {
- diameter: 62,
- address: address,
- }),
+ // 'amount' and send button
+ h('section.flex-column.flex-center', [
+ h('div.flex-row.flex-center', {
+ style: {
+ fontSize: '12px',
+ width: '100%',
+ justifyContent: 'space-between',
+ }
+ },[
+ h('span', { style: {} }, ['Amount']),
+ h('span', { style: {} }, ['Token <> USD']),
]),
- // invisible place holder
- h('i.fa.fa-users.fa-lg.invisible', {
+ h('input.large-input', {
+ name: 'amount',
+ placeholder: '0',
+ type: 'number',
style: {
- marginTop: '28px',
+ marginRight: '6px',
+ fontSize: '12px',
+ },
+ dataset: {
+ persistentFormId: 'tx-amount',
},
}),
]),
- // account label
+ h('section.flex-column.flex-center', [
+ h('div.flex-row.flex-center', {
+ style: {
+ fontSize: '12px',
+ width: '100%',
+ justifyContent: 'space-between',
+ }
+ },[
+ h('span', { style: {} }, ['Gas Fee:']),
+ h('span', { style: { fontSize: '8px' } }, ['What\'s this?']),
+ ]),
+
+ h('input.large-input', {
+ name: 'Gas Fee',
+ placeholder: '0',
+ type: 'number',
+ style: {
+ fontSize: '12px',
+ marginRight: '6px',
+ },
+ // dataset: {
+ // persistentFormId: 'tx-amount',
+ // },
+ }),
+
+ ]),
- h('.flex-column', {
+ h('section.flex-column.flex-center', {
style: {
- marginTop: '10px',
- alignItems: 'flex-start',
+ marginBottom: '10px',
},
}, [
- h('h2.font-medium.color-forest.flex-center', {
+ h('div.flex-row.flex-center', {
style: {
- paddingTop: '8px',
- marginBottom: '8px',
- },
- }, identity && identity.name),
+ fontSize: '12px',
+ width: '100%',
+ justifyContent: 'flex-start',
+ }
+ },[
+ h('span', { style: {} }, ['Transaction Memo (optional)']),
+ ]),
- // address and getter actions
- h('.flex-row.flex-center', {
+ h('input.large-input', {
+ name: 'memo',
+ placeholder: '',
+ type: 'string',
style: {
- marginBottom: '8px',
+ marginRight: '6px',
},
- }, [
+ }),
+ ]),
+ ]),
- h('div', {
- style: {
- lineHeight: '16px',
- },
- }, addressSummary(address)),
+ // Buttons underneath card
+ h('section.flex-column.flex-center', [
- ]),
+ h('button.btn-light', {
+ onClick: this.onSubmit.bind(this),
+ style: {
+ marginTop: '8px',
+ width: '8em',
+ background: '#FFFFFF'
+ },
+ }, 'Next'),
- // balance
- h('.flex-row.flex-center', [
+ h('button.btn-light', {
+ onClick: this.back.bind(this),
+ style: {
+ background: '#F7F7F7', // $alabaster
+ border: 'none',
+ opacity: 1,
+ width: '8em',
+ },
+ }, 'Cancel'),
+ ]),
+ ])
- h(EthBalance, {
- value: account && account.balance,
- conversionRate,
- currentCurrency,
- }),
+ )
+}
- ]),
- ]),
- ]),
+// WIP - hyperscript for renderSendToken - hook up later
+SendTransactionScreen.prototype.renderSendToken = function () {
+ this.persistentFormParentId = 'send-tx-form'
+
+ const props = this.props
+ const {
+ address,
+ account,
+ identity,
+ network,
+ identities,
+ addressBook,
+ conversionRate,
+ currentCurrency,
+ } = props
+
+ return (
- //
- // Required Fields
- //
+ h('div.flex-column.flex-grow', {
+ style: {
+ minWidth: '355px', // TODO: maxWidth TBD, use home.html
+ },
+ }, [
- h('h3.flex-center.text-transform-uppercase', {
+ // Main Send token Card
+ h('div.send-screen.flex-column.flex-grow', {
style: {
- background: '#EBEBEB',
- color: '#AEAEAE',
- marginTop: '15px',
- marginBottom: '16px',
- },
+ marginLeft: '3.5%',
+ marginRight: '3.5%',
+ background: '#FFFFFF', // $background-white
+ boxShadow: '0 2px 4px 0 rgba(0,0,0,0.08)',
+ }
}, [
- 'Send Transaction',
- ]),
+ h('section.flex-center.flex-row', {
+ style: {
+ zIndex: 15, // $token-icon-z-index
+ marginTop: '-35px',
+ }
+ }, [
+ h(Identicon, {
+ address: ARAGON,
+ diameter: 76,
+ }),
+ ]),
- // error message
- props.error && h('span.error.flex-center', props.error),
-
- // 'to' field
- h('section.flex-row.flex-center', [
- h(EnsInput, {
- name: 'address',
- placeholder: 'Recipient Address',
- onChange: this.recipientDidChange.bind(this),
- network,
- identities,
- addressBook,
- }),
- ]),
+ h('h3.flex-center', {
+ style: {
+ marginTop: '-18px',
+ fontSize: '16px',
+ },
+ }, [
+ 'Send Tokens',
+ ]),
- // 'amount' and send button
- h('section.flex-row.flex-center', [
+ h('h3.flex-center', {
+ style: {
+ textAlign: 'center',
+ fontSize: '12px',
+ },
+ }, [
+ 'Send Tokens to anyone with an Ethereum account',
+ ]),
- h('input.large-input', {
- name: 'amount',
- placeholder: 'Amount',
- type: 'number',
+ h('h3.flex-center', {
style: {
- marginRight: '6px',
+ textAlign: 'center',
+ marginTop: '2px',
+ fontSize: '12px',
},
- dataset: {
- persistentFormId: 'tx-amount',
+ }, [
+ 'Your Aragon Token Balance is:',
+ ]),
+
+ h('h3.flex-center', {
+ style: {
+ textAlign: 'center',
+ fontSize: '36px',
+ marginTop: '8px',
},
- }),
+ }, [
+ '2.34',
+ ]),
- h('button.primary', {
- onClick: this.onSubmit.bind(this),
+ h('h3.flex-center', {
style: {
- textTransform: 'uppercase',
+ textAlign: 'center',
+ fontSize: '12px',
+ marginTop: '4px',
},
- }, 'Next'),
+ }, [
+ 'ANT',
+ ]),
- ]),
+ // error message
+ props.error && h('span.error.flex-center', props.error),
- //
- // Optional Fields
- //
- h('h3.flex-center.text-transform-uppercase', {
- style: {
- background: '#EBEBEB',
- color: '#AEAEAE',
- marginTop: '16px',
- marginBottom: '16px',
- },
- }, [
- 'Transaction Data (optional)',
+ // 'to' field
+ h('section.flex-row.flex-center', {
+ style: {
+ fontSize: '12px',
+ },
+ }, [
+ h(EnsInput, {
+ name: 'address',
+ placeholder: 'Recipient Address',
+ onChange: this.recipientDidChange.bind(this),
+ network,
+ identities,
+ addressBook,
+ }),
+ ]),
+
+ // 'amount' and send button
+ h('section.flex-column.flex-center', [
+ h('div.flex-row.flex-center', {
+ style: {
+ fontSize: '12px',
+ width: '100%',
+ justifyContent: 'space-between',
+ }
+ },[
+ h('span', { style: {} }, ['Amount']),
+ h('span', { style: {} }, ['Token <> USD']),
+ ]),
+
+ h('input.large-input', {
+ name: 'amount',
+ placeholder: '0',
+ type: 'number',
+ style: {
+ marginRight: '6px',
+ fontSize: '12px',
+ },
+ dataset: {
+ persistentFormId: 'tx-amount',
+ },
+ }),
+
+ ]),
+
+ h('section.flex-column.flex-center', [
+ h('div.flex-row.flex-center', {
+ style: {
+ fontSize: '12px',
+ width: '100%',
+ justifyContent: 'space-between',
+ }
+ },[
+ h('span', { style: {} }, ['Gas Fee:']),
+ h('span', { style: { fontSize: '8px' } }, ['What\'s this?']),
+ ]),
+
+ h('input.large-input', {
+ name: 'Gas Fee',
+ placeholder: '0',
+ type: 'number',
+ style: {
+ fontSize: '12px',
+ marginRight: '6px',
+ },
+ // dataset: {
+ // persistentFormId: 'tx-amount',
+ // },
+ }),
+
+ ]),
+
+ h('section.flex-column.flex-center', {
+ style: {
+ marginBottom: '10px',
+ },
+ }, [
+ h('div.flex-row.flex-center', {
+ style: {
+ fontSize: '12px',
+ width: '100%',
+ justifyContent: 'flex-start',
+ }
+ },[
+ h('span', { style: {} }, ['Transaction Memo (optional)']),
+ ]),
+
+ h('input.large-input', {
+ name: 'memo',
+ placeholder: '',
+ type: 'string',
+ style: {
+ marginRight: '6px',
+ },
+ }),
+ ]),
]),
- // 'data' field
+ // Buttons underneath card
h('section.flex-column.flex-center', [
- h('input.large-input', {
- name: 'txData',
- placeholder: '0x01234',
+
+ h('button.btn-light', {
+ onClick: this.onSubmit.bind(this),
style: {
- width: '100%',
- resize: 'none',
+ marginTop: '8px',
+ width: '8em',
+ background: '#FFFFFF'
},
- dataset: {
- persistentFormId: 'tx-data',
+ }, 'Next'),
+
+ h('button.btn-light', {
+ onClick: this.back.bind(this),
+ style: {
+ background: '#F7F7F7', // $alabaster
+ border: 'none',
+ opacity: 1,
+ width: '8em',
},
- }),
+ }, 'Cancel'),
]),
])
+
)
}
@@ -248,7 +504,11 @@ SendTransactionScreen.prototype.onSubmit = function () {
const nickname = state.nickname || ' '
const input = document.querySelector('input[name="amount"]').value
const value = util.normalizeEthStringToWei(input)
- const txData = document.querySelector('input[name="txData"]').value
+ // TODO: check with team on whether txData is removed completely.
+ const txData = false;
+ // Must replace with memo data.
+ // const txData = document.querySelector('input[name="txData"]').value
+
const balance = this.props.balance
let message
@@ -267,7 +527,7 @@ SendTransactionScreen.prototype.onSubmit = function () {
return this.props.dispatch(actions.displayWarning(message))
}
- if (!isHex(ethUtil.stripHexPrefix(txData)) && txData) {
+ if (txData && !isHex(ethUtil.stripHexPrefix(txData))) {
message = 'Transaction data must be hex string.'
return this.props.dispatch(actions.displayWarning(message))
}