import React from 'react' import PropTypes from 'prop-types' import PersistentForm from '../../../lib/persistent-form' import { getAmountErrorObject, getGasFeeErrorObject, getToAddressForGasUpdate, doesAmountErrorRequireUpdate, } from './send.utils' import SendHeader from './send-header/' import SendContent from './send-content/' import SendFooter from './send-footer/' export default class SendTransactionScreen extends PersistentForm { static propTypes = { amount: PropTypes.string, amountConversionRate: PropTypes.oneOfType([ PropTypes.string, PropTypes.number, ]), blockGasLimit: PropTypes.string, conversionRate: PropTypes.number, editingTransactionId: PropTypes.string, from: PropTypes.object, gasLimit: PropTypes.string, gasPrice: PropTypes.string, gasTotal: PropTypes.string, history: PropTypes.object, network: PropTypes.string, primaryCurrency: PropTypes.string, recentBlocks: PropTypes.array, selectedAddress: PropTypes.string, selectedToken: PropTypes.object, tokenBalance: PropTypes.string, tokenContract: PropTypes.object, updateAndSetGasTotal: PropTypes.func, updateSendErrors: PropTypes.func, updateSendTokenBalance: PropTypes.func, scanQrCode: PropTypes.func, qrCodeDetected: PropTypes.func, qrCodeData: PropTypes.object, }; static contextTypes = { t: PropTypes.func, }; componentWillReceiveProps (nextProps) { if (nextProps.qrCodeData) { if (nextProps.qrCodeData.type === 'address') { const scannedAddress = nextProps.qrCodeData.values.address.toLowerCase() const currentAddress = this.props.to && this.props.to.toLowerCase() if (currentAddress !== scannedAddress) { this.props.updateSendTo(scannedAddress) this.updateGas({ to: scannedAddress }) // Clean up QR code data after handling this.props.qrCodeDetected(null) } } } } updateGas ({ to: updatedToAddress, amount: value } = {}) { const { amount, blockGasLimit, editingTransactionId, gasLimit, gasPrice, recentBlocks, selectedAddress, selectedToken = {}, to: currentToAddress, updateAndSetGasTotal, } = this.props updateAndSetGasTotal({ blockGasLimit, editingTransactionId, gasLimit, gasPrice, recentBlocks, selectedAddress, selectedToken, to: getToAddressForGasUpdate(updatedToAddress, currentToAddress), value: value || amount, }) } componentDidUpdate (prevProps) { const { amount, amountConversionRate, conversionRate, from: { address, balance }, gasTotal, network, primaryCurrency, selectedToken, tokenBalance, updateSendErrors, updateSendTokenBalance, tokenContract, } = this.props const { from: { balance: prevBalance }, gasTotal: prevGasTotal, tokenBalance: prevTokenBalance, network: prevNetwork, } = prevProps const uninitialized = [prevBalance, prevGasTotal].every(n => n === null) const amountErrorRequiresUpdate = doesAmountErrorRequireUpdate({ balance, gasTotal, prevBalance, prevGasTotal, prevTokenBalance, selectedToken, tokenBalance, }) if (amountErrorRequiresUpdate) { const amountErrorObject = getAmountErrorObject({ amount, amountConversionRate, balance, conversionRate, gasTotal, primaryCurrency, selectedToken, tokenBalance, }) const gasFeeErrorObject = selectedToken ? getGasFeeErrorObject({ amount, amountConversionRate, balance, conversionRate, gasTotal, primaryCurrency, selectedToken, tokenBalance, }) : { gasFee: null } updateSendErrors(Object.assign(amountErrorObject, gasFeeErrorObject)) } if (!uninitialized) { if (network !== prevNetwork && network !== 'loading') { updateSendTokenBalance({ selectedToken, tokenContract, address, }) this.updateGas() } } } componentWillMount () { const { from: { address }, selectedToken, tokenContract, updateSendTokenBalance, } = this.props updateSendTokenBalance({ selectedToken, tokenContract, address, }) this.updateGas() // Show QR Scanner modal if ?scan=true if (window.location.search === '?scan=true') { this.props.scanQrCode() // Clear the queryString param after showing the modal const cleanUrl = location.href.split('?')[0] history.pushState({}, null, `${cleanUrl}`) window.location.hash = '#send' } } componentWillUnmount () { this.props.resetSendState() } render () { const { history } = this.props return ( <div className="page-container"> <SendHeader history={history}/> <SendContent updateGas={(updateData) => this.updateGas(updateData)} scanQrCode={_ => this.props.scanQrCode()} /> <SendFooter history={history}/> </div> ) } } bot/npm_and_yarn/devel/electron4/files/lodash-4.17.15</option> <option value='dependabot/npm_and_yarn/devel/electron4/files/lodash.merge-4.6.2'>dependabot/npm_and_yarn/devel/electron4/files/lodash.merge-4.6.2</option> <option value='dependabot/npm_and_yarn/devel/electron4/files/lodash.template-4.5.0'>dependabot/npm_and_yarn/devel/electron4/files/lodash.template-4.5.0</option> <option value='dependabot/npm_and_yarn/devel/electron4/files/minimist-1.2.2'>dependabot/npm_and_yarn/devel/electron4/files/minimist-1.2.2</option> <option value='dependabot/npm_and_yarn/devel/electron4/files/mixin-deep-1.3.2'>dependabot/npm_and_yarn/devel/electron4/files/mixin-deep-1.3.2</option> <option value='main' selected='selected'>main</option> <option value='master'>master</option> <option value='svn_head'>svn_head</option> </select> <input type='submit' value='switch'/></form></td></tr> <tr><td class='sub'>FreeBSD Ports (https://github.com/freebsd/freebsd-ports)</td><td class='sub right'></td></tr></table> <table class='tabs'><tr><td> <a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/about/'>about</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/'>summary</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/refs/?id=e51bbb58a4c6768d011c6b5ec5e74fd757f85e57'>refs</a><a class='active' href='/~lantw44/cgit/cgit.cgi/freebsd-ports/log/ftp/spegla'>log</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/tree/ftp/spegla?id=e51bbb58a4c6768d011c6b5ec5e74fd757f85e57'>tree</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/commit/ftp/spegla?id=e51bbb58a4c6768d011c6b5ec5e74fd757f85e57'>commit</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/diff/ftp/spegla?id=e51bbb58a4c6768d011c6b5ec5e74fd757f85e57'>diff</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/stats/ftp/spegla'>stats</a></td><td class='form'><form class='right' method='get' action='/~lantw44/cgit/cgit.cgi/freebsd-ports/log/ftp/spegla'> <input type='hidden' name='id' value='e51bbb58a4c6768d011c6b5ec5e74fd757f85e57'/><select name='qt'> <option value='grep'>log msg</option> <option value='author'>author</option> <option value='committer'>committer</option> <option value='range'>range</option> </select> <input class='txt' type='search' size='10' name='q' value=''/> <input type='submit' value='search'/> </form> </td></tr></table> <div class='path'>path: <a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/log/?id=e51bbb58a4c6768d011c6b5ec5e74fd757f85e57'>root</a>/<a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/log/ftp?id=e51bbb58a4c6768d011c6b5ec5e74fd757f85e57'>ftp</a>/<a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/log/ftp/spegla?id=e51bbb58a4c6768d011c6b5ec5e74fd757f85e57'>spegla</a></div><div class='content'><table class='list nowrap'><tr class='nohover'><th></th><th class='left'>Commit message (<a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/log/ftp/spegla?id=e51bbb58a4c6768d011c6b5ec5e74fd757f85e57&showmsg=1'>Expand</a>)</th><th class='left'>Author</th><th class='left'>Age</th><th class='left'>Files</th><th class='left'>Lines</th></tr> <tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/commit/ftp/spegla?id=fde0acf7afe2d50f9920dc9510ce682d109815b5'>Resurrect ftp/spegla. The original upstream has gone but the distfile is</a></td><td>Hiroki Sato</td><td><span title='2016-11-05 03:21:06 +0800'>2016-11-05</span></td><td>3</td><td><span class='deletions'>-0</span>/<span class='insertions'>+43</span></td></tr> <tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/commit/ftp/spegla?id=691f434f549a42a69ac50ff23a1543397490f5c5'>Remove expired ports:</a></td><td>Rene Ladan</td><td><span title='2015-11-29 07:08:03 +0800'>2015-11-29</span></td><td>7</td><td><span class='deletions'>-194</span>/<span class='insertions'>+0</span></td></tr> <tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/commit/ftp/spegla?id=3afa450ba39cf6aeabd41e5de820b73eebb5ce64'>Deprecate ports broken for more than 6 months</a></td><td>Antoine Brodin</td><td><span title='2015-10-26 03:35:28 +0800'>2015-10-26</span></td><td>1</td><td><span class='deletions'>-0</span>/<span class='insertions'>+2</span></td></tr> <tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/commit/ftp/spegla?id=0c8a5d7b4df3ad5280bf322af96bb4094f36b02c'>Mark a few ports in ftp category BROKEN (unfetchable)</a></td><td>Antoine Brodin</td><td><span title='2015-04-05 18:54:30 +0800'>2015-04-05</span></td><td>1</td><td><span class='deletions'>-0</span>/<span class='insertions'>+2</span></td></tr> <tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports/commit/ftp/spegla?id=776eb781c9f1c8d3388e7ca004ee9d986c56df2a'>Allow staging as a regular user</a></td><td>Antoine Brodin</td><td><span title='2014-09-08 01:46:50 +0800'>2014-09-08</span>