aboutsummaryrefslogtreecommitdiffstats
path: root/ui/app/components/send-token
diff options
context:
space:
mode:
authorChi Kei Chan <chikeichan@gmail.com>2017-09-07 19:24:03 +0800
committerChi Kei Chan <chikeichan@gmail.com>2017-09-07 19:24:03 +0800
commit8b919758e51e16536b6edaf33d4978d551363249 (patch)
treea1861401480401d94cc908cf2bc5eeabca0d67e6 /ui/app/components/send-token
parent983fa2a11721aa7d1307ef76d516e25a50d0eedf (diff)
downloadtangerine-wallet-browser-8b919758e51e16536b6edaf33d4978d551363249.tar
tangerine-wallet-browser-8b919758e51e16536b6edaf33d4978d551363249.tar.gz
tangerine-wallet-browser-8b919758e51e16536b6edaf33d4978d551363249.tar.bz2
tangerine-wallet-browser-8b919758e51e16536b6edaf33d4978d551363249.tar.lz
tangerine-wallet-browser-8b919758e51e16536b6edaf33d4978d551363249.tar.xz
tangerine-wallet-browser-8b919758e51e16536b6edaf33d4978d551363249.tar.zst
tangerine-wallet-browser-8b919758e51e16536b6edaf33d4978d551363249.zip
Send Token screen partial UI
Diffstat (limited to 'ui/app/components/send-token')
-rw-r--r--ui/app/components/send-token/index.js213
1 files changed, 213 insertions, 0 deletions
diff --git a/ui/app/components/send-token/index.js b/ui/app/components/send-token/index.js
new file mode 100644
index 000000000..a49e559dc
--- /dev/null
+++ b/ui/app/components/send-token/index.js
@@ -0,0 +1,213 @@
+const Component = require('react').Component
+const connect = require('react-redux').connect
+const h = require('react-hyperscript')
+const ethUtil = require('ethereumjs-util')
+const inherits = require('util').inherits
+const actions = require('../../actions')
+const selectors = require('../../selectors')
+
+// const BalanceComponent = require('./balance-component')
+const Identicon = require('../identicon')
+const TokenBalance = require('../token-balance')
+const CurrencyToggle = require('../send/currency-toggle')
+const GasTooltip = require('../send/gas-tooltip')
+const GasFeeDisplay = require('../send/gas-fee-display')
+
+
+module.exports = connect(mapStateToProps, mapDispatchToProps)(SendTokenScreen)
+
+function mapStateToProps (state) {
+ // const sidebarOpen = state.appState.sidebarOpen
+
+ const identities = state.metamask.identities
+ const addressBook = state.metamask.addressBook
+ const conversionRate = state.metamask.conversionRate
+ const currentBlockGasLimit = state.metamask.currentBlockGasLimit
+ // const accounts = state.metamask.accounts
+ // const network = state.metamask.network
+ const selectedTokenAddress = state.metamask.selectedTokenAddress
+ // const selectedAddress = state.metamask.selectedAddress || Object.keys(accounts)[0]
+ // const checksumAddress = selectedAddress && ethUtil.toChecksumAddress(selectedAddress)
+ // const identity = identities[selectedAddress]
+
+ return {
+ // sidebarOpen,
+ // selectedAddress,
+ // checksumAddress,
+ selectedTokenAddress,
+ identities,
+ addressBook,
+ conversionRate,
+ currentBlockGasLimit,
+ selectedToken: selectors.getSelectedToken(state),
+ // selectedToken: selectors.getSelectedToken(state),
+ // identity,
+ // network,
+ }
+}
+
+function mapDispatchToProps (dispatch) {
+ return {
+ // showSidebar: () => { dispatch(actions.showSidebar()) },
+ // hideSidebar: () => { dispatch(actions.hideSidebar()) },
+ // showModal: (payload) => { dispatch(actions.showModal(payload)) },
+ // showSendPage: () => { dispatch(actions.showSendPage()) },
+ // showSendTokenPage: () => { dispatch(actions.showSendTokenPage()) },
+ }
+}
+
+inherits(SendTokenScreen, Component)
+function SendTokenScreen () {
+ Component.call(this)
+ this.state = {
+ to: '',
+ selectedCurrency: 'USD',
+ isGasTooltipOpen: false,
+ gasPrice: '0x5d21dba00',
+ gasLimit: '0x7b0d',
+ }
+}
+
+SendTokenScreen.prototype.renderToAddressInput = function () {
+ const {
+ identities,
+ addressBook,
+ } = this.props
+
+ const {
+ to,
+ } = this.state
+
+ return h('div.send-screen-input-wrapper', {}, [
+ h('div', ['To:']),
+ h('input.large-input.send-screen-input', {
+ name: 'address',
+ list: 'addresses',
+ placeholder: 'Address',
+ value: to,
+ onChange: e => this.setState({ to: e.target.value }),
+ }),
+ h('datalist#addresses', [
+ // Corresponds to the addresses owned.
+ Object.entries(identities).map(([key, { address, name }]) => {
+ return h('option', {
+ value: address,
+ label: name,
+ key: address,
+ })
+ }),
+ addressBook.map(({ address, name }) => {
+ return h('option', {
+ value: address,
+ label: name,
+ key: address,
+ })
+ }),
+ ]),
+ ])
+}
+
+SendTokenScreen.prototype.renderAmountInput = function () {
+ const {
+ selectedCurrency,
+ } = this.state
+
+ const {
+ selectedToken: {symbol},
+ } = this.props
+
+ return h('div.send-screen-input-wrapper', {}, [
+ h('div.send-screen-amount-labels', [
+ h('span', ['Amount']),
+ h(CurrencyToggle, {
+ selectedCurrency,
+ onClick: currency => this.setState({ selectedCurrency: currency }),
+ }),
+ ]),
+ h('input.large-input.send-screen-input', {
+ placeholder: `0 ${symbol}`,
+ type: 'number',
+ onChange: e => this.setState({ amount: e.target.value }),
+ }),
+ ])
+}
+
+SendTokenScreen.prototype.renderGasInput = function () {
+ const {
+ isGasTooltipOpen,
+ gasPrice,
+ gasLimit,
+ selectedCurrency,
+ } = this.state
+
+ const {
+ conversionRate,
+ currentBlockGasLimit,
+ } = this.props
+
+ return h('div.send-screen-input-wrapper', [
+ isGasTooltipOpen && h(GasTooltip, {
+ className: 'send-tooltip',
+ gasPrice,
+ gasLimit,
+ onClose: () => this.setState({ isGasTooltipOpen: false }),
+ onFeeChange: ({ gasLimit, gasPrice }) => {
+ this.setState({ gasLimit, gasPrice })
+ },
+ }),
+
+ h('div.send-screen-gas-labels', {}, [
+ h('span', [ h('i.fa.fa-bolt'), 'Gas fee:']),
+ h('span', ['What\'s this?']),
+ ]),
+ h('div.large-input.send-screen-gas-input', [
+ h(GasFeeDisplay, {
+ conversionRate,
+ gasPrice,
+ currentCurrency: selectedCurrency,
+ gas: gasLimit,
+ blockGasLimit: currentBlockGasLimit,
+ }),
+ h(
+ 'div.send-screen-gas-input-customize',
+ { onClick: () => this.setState({ isGasTooltipOpen: !isGasTooltipOpen }) },
+ ['Customize']
+ ),
+ ]),
+ ])
+}
+
+SendTokenScreen.prototype.renderMemoInput = function () {
+ return h('div.send-screen-input-wrapper', {}, [
+ h('div', {}, ['Transaction memo (optional)']),
+ h(
+ 'input.large-input.send-screen-input',
+ { onChange: e => this.setState({ memo: e.target.value }) }
+ ),
+ ])
+}
+
+SendTokenScreen.prototype.render = function () {
+ const {
+ selectedTokenAddress,
+ selectedToken,
+ } = this.props
+
+ return h('div.send-token', [
+ h(Identicon, {
+ diameter: 75,
+ address: selectedTokenAddress,
+ }),
+ h('div.send-token__title', ['Send Tokens']),
+ h('div.send-token__description', ['Send Tokens to anyone with an Ethereum account']),
+ h('div.send-token__balance-text', ['Your Token Balance is:']),
+ h('div.send-token__token-balance', [
+ h(TokenBalance, { token: selectedToken, balanceOnly: true }),
+ ]),
+ h('div.send-token__token-symbol', [selectedToken.symbol]),
+ this.renderToAddressInput(),
+ this.renderAmountInput(),
+ this.renderGasInput(),
+ this.renderMemoInput(),
+ ])
+}