// @flow import React from 'react'; import PropTypes from 'prop-types'; import translate from 'translations'; import { UnlockHeader } from 'components/ui'; import { Donate, DataField, CustomMessage, GasField, AmountField, AddressField } from './components'; import pickBy from 'lodash/pickBy'; // import type { Transaction } from './types'; import customMessages from './messages'; type State = { hasQueryString: boolean, readOnly: boolean, to: string, value: string, unit: string, gasLimit: string, data: string, gasChanged: boolean }; function getParam(query: { [string]: string }, key: string) { const keys = Object.keys(query); const index = keys.findIndex(k => k.toLowerCase() === key.toLowerCase()); if (index === -1) { return null; } return query[keys[index]]; } // TODO query string // TODO how to handle DATA? export class SendTransaction extends React.Component { static propTypes = { location: PropTypes.object.isRequired }; props: { location: { query: { [string]: string } } }; state: State = { hasQueryString: false, readOnly: false, // FIXME use correct defaults to: '', value: '999.11', unit: 'ether', gasLimit: '21000', data: '', gasChanged: false }; componentDidMount() { const queryPresets = pickBy(this.parseQuery()); if (Object.keys(queryPresets).length) { this.setState({ ...queryPresets, hasQueryString: true }); } this.setState(pickBy(queryPresets)); } render() { const unlocked = true; //wallet != null const unitReadable = 'UNITREADABLE'; const nodeUnit = 'NODEUNIT'; const hasEnoughBalance = false; const { to, value, unit, gasLimit, data, readOnly, hasQueryString } = this.state; const customMessage = customMessages.find(m => m.to === to); // tokens // ng-show="token.balance!=0 && token.balance!='loading' || token.type!=='default' || tokenVisibility=='shown'" return (
{hasQueryString &&

{translate('WARN_Send_Link')}

} {unlocked &&
{'' /* */}
{'' /* */}
{readOnly && !hasEnoughBalance &&
Warning! You do not have enough funds to complete this swap. {' '}
Please add more funds or access a different wallet.
}

{translate('SEND_trans')}

{unit === 'ether' && }
{'' /* */} { '' /* @@if (site === 'mew' ) { @@include( './sendTx-content.tpl', { "site": "mew" } ) } @@if (site === 'cx' ) { @@include( './sendTx-content.tpl', { "site": "cx" } ) } @@if (site === 'mew' ) { @@include( './sendTx-modal.tpl', { "site": "mew" } ) } @@if (site === 'cx' ) { @@include( './sendTx-modal.tpl', { "site": "cx" } ) } */ }
}
); } parseQuery() { const query = this.props.location.query; const to = getParam(query, 'to'); const data = getParam(query, 'data'); // FIXME validate token against presets const unit = getParam(query, 'tokenSymbol'); const value = getParam(query, 'value'); let gasLimit = getParam(query, 'gas'); if (gasLimit === null) { gasLimit = getParam(query, 'limit'); } const readOnly = getParam(query, 'readOnly') == null ? false : true; return { to, data, value, unit, gasLimit, readOnly }; } // FIXME use mkTx instead or something that could take care of default gas/data and whatnot, // FIXME also should it reset gasChanged? onNewTx = ( address: string, amount: string, unit: string, data: string = '', gasLimit: string = '21000' ) => { this.setState({ to: address, value: amount, unit, data, gasLimit, gasChanged: false }); }; onAddressChange = (value: string) => { this.setState({ to: value }); }; onDataChange = (value: string) => { if (this.state.unit !== 'ether') { return; } this.setState({ ...this.state, data: value }); }; onGasChange = (value: string) => { this.setState({ gasLimit: value, gasChanged: true }); }; onAmountChange = (value: string, unit: string) => { this.setState({ value, unit }); }; } // export connected version export default SendTransaction;