@@ -1,34 +1,21 @@
1import React, { useMemo, useCallback, useState } from 'react';
1import React, { useMemo, useCallback, useState } from 'react';
2import cn from 'classnames';
2import cn from 'classnames';
11−} from 'indigo-react';
3+import { Grid, ErrorText, Flex, LinkButton, H5, Text } from 'indigo-react';
12import { toBN } from 'web3-utils';
4import { toBN } from 'web3-utils';
14−import { ReactComponent as InfoIcon } from 'assets/info.svg';
16import { useExploreTxUrls } from 'lib/explorer';
6import { useExploreTxUrls } from 'lib/explorer';
17−import { hexify } from 'lib/txn';
18import { safeFromWei, safeToWei } from 'lib/lib';
7import { safeFromWei, safeToWei } from 'lib/lib';
20import { composeValidator, buildCheckboxValidator } from 'form/validators';
9import { composeValidator, buildCheckboxValidator } from 'form/validators';
21import BridgeForm from 'form/BridgeForm';
10import BridgeForm from 'form/BridgeForm';
22−import Condition from 'form/Condition';
24import { GenerateButton, ForwardButton, RestartButton } from './Buttons';
12import { GenerateButton, ForwardButton, RestartButton } from './Buttons';
25−import CopyButton from './copiable/CopyButton';
26import ProgressButton from './ProgressButton';
13import ProgressButton from './ProgressButton';
27−import { convertToInt } from 'lib/convertToInt';
28import NeedFundsNotice from './NeedFundsNotice';
14import NeedFundsNotice from './NeedFundsNotice';
29import NoticeBox from './NoticeBox';
15import NoticeBox from './NoticeBox';
31import './InlineEthereumTransaction.scss';
17import './InlineEthereumTransaction.scss';
18+import FeeDropdown from './L2/Dropdowns/FeeDropdown';
33export default function InlineEthereumTransaction({
20export default function InlineEthereumTransaction({
34 // from useEthereumTransaction.bind
21 // from useEthereumTransaction.bind
@@ -47,10 +34,7 @@ export default function InlineEthereumTransaction({
47 setGasPrice,
34 setGasPrice,
48 resetGasPrice,
35 resetGasPrice,
52 needFunds,
37 needFunds,
54 confirmationProgress,
38 confirmationProgress,
56 unsignedTransactions,
40 unsignedTransactions,
@@ -76,12 +60,6 @@ export default function InlineEthereumTransaction({
76 // show signed tx only when signing (for offline usage)
60 // show signed tx only when signing (for offline usage)
77 const showSignedTx = signed;
61 const showSignedTx = signed;
79− const [showGasDetails, _setShowGasDetails] = useState(false);
80− const toggleGasDetails = useCallback(
81− () => _setShowGasDetails(!showGasDetails),
82− [_setShowGasDetails, showGasDetails]
85 const validate = useMemo(
63 const validate = useMemo(
87 composeValidator({
65 composeValidator({
@@ -182,13 +160,6 @@ export default function InlineEthereumTransaction({
185− const serializedTxsHex = useMemo(
187− signedTransactions &&
188− signedTransactions.map(stx => hexify(stx.serialize())),
189− [signedTransactions]
192 const numTxs = useMemo(() => (unsignedTransactions || []).length || 1, [
163 const numTxs = useMemo(() => (unsignedTransactions || []).length || 1, [
193 unsignedTransactions,
164 unsignedTransactions,
@@ -206,18 +177,36 @@ export default function InlineEthereumTransaction({
206 [gasLimit, gasPrice, numTxs]
177 [gasLimit, gasPrice, numTxs]
209− const gasInfo = useMemo(() => {
210− const extra = numTxs === 1 ? '' : `* ${numTxs} txs`;
211− return showGasDetails
212− ? `${gasPrice} Gwei * ${gasLimit} ${extra} = ${maxCost} ETH`
214− }, [showGasDetails, maxCost, gasPrice, gasLimit, numTxs]);
217 <Grid className={cn(className, 'mt1')}>
181 <Grid className={cn(className, 'mt1')}>
218 <BridgeForm validate={validate} onValues={onValues}>
182 <BridgeForm validate={validate} onValues={onValues}>
185+ {showConfigureInput && (
188+ className="mt2 text eth-tx-button"
193+ <Flex.Item as={H5}>Gas Fee</Flex.Item>
194+ <FeeDropdown setGasPrice={setGasPrice} />
198+ className="mt2 text eth-tx-button"
203+ <Flex.Item as={H5}>Max Transaction Cost</Flex.Item>
204+ <Flex.Item as={H5}>{maxCost} ETH</Flex.Item>
206+ <Grid.Divider className="mt4" />
221 {renderPrimarySection()}
210 {renderPrimarySection()}
223 {error && (
212 {error && (
@@ -235,66 +224,6 @@ export default function InlineEthereumTransaction({
238− {showConfigureInput && (
241− className="eth-tx-button"
246− inverseLabel="Back to Defaults"
248− disabled={!showConfigureInput || initializing}
251− <Condition when="useAdvanced" is={true}>
252− <Grid.Item className="mb2 eth-tx-button" full></Grid.Item>
255− className="mt2 eth-tx-button"
260− <Flex.Item as={H5}>Transaction Fee</Flex.Item>
266− onClick={toggleGasDetails}
271− {/* TODO(shrugs): move to indigo/RangeInput */}
273− className="eth-tx-button"
281− setGasPrice(convertToInt(e.target.value, 10))
285− className="f6 mt1 eth-tx-button"
290− <Flex.Item as={Text}>Cheap</Flex.Item>
291− <Flex.Item as={Text}>Fast</Flex.Item>
293− <Grid.Divider className="mt4" />
298 {showSignedTx && fakeSigned && (
227 {showSignedTx && fakeSigned && (
300 <Grid.Item className="mt2 eth-tx-button" full as={NoticeBox}>
229 <Grid.Item className="mt2 eth-tx-button" full as={NoticeBox}>
@@ -302,27 +231,6 @@ export default function InlineEthereumTransaction({
302 </Grid.Item>
231 </Grid.Item>
306− {showSignedTx && !fakeSigned && (
309− className="eth-tx-button"
313− label="Signed Transaction"
315− disabled={!showSignedTx}
317− <Condition when="viewSigned" is={true}>
318− <SignedTransactionList
319− serializedTxsHex={serializedTxsHex}
328 </BridgeForm>
236 </BridgeForm>
@@ -330,47 +238,6 @@ export default function InlineEthereumTransaction({
333−function SignedTransactionList({ serializedTxsHex, nonce, maxCost }) {
334− return serializedTxsHex.map((serializedTxHex, i) => (
335− <React.Fragment key={i}>
338− className="pv4 black f5 eth-tx-button"
342− <Flex.Item>Nonce</Flex.Item>
343− <Flex.Item>{nonce + i}</Flex.Item>
347− className="pv4 black f5 eth-tx-button"
351− <Flex.Item>Transaction Cost</Flex.Item>
352− <Flex.Item>{maxCost} ETH</Flex.Item>
356− className="mt3 mb2 eth-tx-button"
360− <Flex.Item as={H5}>Signed Transaction Hex</Flex.Item>
361− <Flex.Item as={CopyButton} text={serializedTxHex} />
364− className="mb4 f6 mono gray4 wrap eth-tx-button"
374function TransactionReceipt({ txHashes, finalCost, onClose }) {
241function TransactionReceipt({ txHashes, finalCost, onClose }) {
375 const txUrls = useExploreTxUrls(txHashes);
242 const txUrls = useExploreTxUrls(txHashes);