Small fixes for Swaps (#13732)

* Fix: Insufficient number of substitutions for key "stxSuccessDescription"

* Only calculate "approvalGas" if the "approvalNeeded" param is truthy in a quote

* "Swap from" has to be set to enable "Review Swap", set a default token for "Swap from"

* Fix: Unable to find value of key "undefined" for locale

* Use array destructuring
feature/default_network_editable
Daniel 3 years ago committed by ryanml
parent 1883af8ab4
commit 730f977939
  1. 6
      app/scripts/controllers/swaps.js
  2. 2
      ui/components/app/transaction-status/transaction-status.component.js
  3. 8
      ui/pages/swaps/awaiting-swap/awaiting-swap.js
  4. 1
      ui/pages/swaps/build-quote/build-quote.js
  5. 4
      ui/pages/swaps/smart-transaction-status/smart-transaction-status.js

@ -289,14 +289,16 @@ export default class SwapsController {
fetchParams.fromAddress, fetchParams.fromAddress,
chainId, chainId,
); );
const [firstQuote] = Object.values(newQuotes);
// For a user to be able to swap a token, they need to have approved the MetaSwap contract to withdraw that token. // For a user to be able to swap a token, they need to have approved the MetaSwap contract to withdraw that token.
// _getERC20Allowance() returns the amount of the token they have approved for withdrawal. If that amount is greater // _getERC20Allowance() returns the amount of the token they have approved for withdrawal. If that amount is greater
// than 0, it means that approval has already occurred and is not needed. Otherwise, for tokens to be swapped, a new // than 0, it means that approval has already occurred and is not needed. Otherwise, for tokens to be swapped, a new
// call of the ERC-20 approve method is required. // call of the ERC-20 approve method is required.
approvalRequired = approvalRequired =
firstQuote.approvalNeeded &&
allowance.eq(0) && allowance.eq(0) &&
Object.values(newQuotes)[0].aggregator !== 'wrappedNative'; firstQuote.aggregator !== 'wrappedNative';
if (!approvalRequired) { if (!approvalRequired) {
newQuotes = mapValues(newQuotes, (quote) => ({ newQuotes = mapValues(newQuotes, (quote) => ({
...quote, ...quote,
@ -304,7 +306,7 @@ export default class SwapsController {
})); }));
} else if (!isPolledRequest) { } else if (!isPolledRequest) {
const { gasLimit: approvalGas } = await this.timedoutGasReturn( const { gasLimit: approvalGas } = await this.timedoutGasReturn(
Object.values(newQuotes)[0].approvalNeeded, firstQuote.approvalNeeded,
); );
newQuotes = mapValues(newQuotes, (quote) => ({ newQuotes = mapValues(newQuotes, (quote) => ({

@ -57,7 +57,7 @@ export default function TransactionStatus({
const statusText = const statusText =
statusKey === TRANSACTION_STATUSES.CONFIRMED && !statusOnly statusKey === TRANSACTION_STATUSES.CONFIRMED && !statusOnly
? date ? date
: t(statusKey); : statusKey && t(statusKey);
return ( return (
<Tooltip <Tooltip

@ -17,6 +17,7 @@ import {
getUSDConversionRate, getUSDConversionRate,
isHardwareWallet, isHardwareWallet,
getHardwareWalletType, getHardwareWalletType,
getSwapsDefaultToken,
} from '../../../selectors'; } from '../../../selectors';
import { import {
@ -32,6 +33,7 @@ import {
getSmartTransactionsEnabled, getSmartTransactionsEnabled,
getFromTokenInputValue, getFromTokenInputValue,
getMaxSlippage, getMaxSlippage,
setSwapsFromToken,
} from '../../../ducks/swaps/swaps'; } from '../../../ducks/swaps/swaps';
import Mascot from '../../../components/ui/mascot'; import Mascot from '../../../components/ui/mascot';
import Box from '../../../components/ui/box'; import Box from '../../../components/ui/box';
@ -82,6 +84,7 @@ export default function AwaitingSwap({
const usdConversionRate = useSelector(getUSDConversionRate); const usdConversionRate = useSelector(getUSDConversionRate);
const chainId = useSelector(getCurrentChainId); const chainId = useSelector(getCurrentChainId);
const rpcPrefs = useSelector(getRpcPrefsForCurrentProvider, shallowEqual); const rpcPrefs = useSelector(getRpcPrefsForCurrentProvider, shallowEqual);
const defaultSwapsToken = useSelector(getSwapsDefaultToken, isEqual);
const [trackedQuotesExpiredEvent, setTrackedQuotesExpiredEvent] = useState( const [trackedQuotesExpiredEvent, setTrackedQuotesExpiredEvent] = useState(
false, false,
@ -251,9 +254,10 @@ export default function AwaitingSwap({
<Box marginBottom={3}> <Box marginBottom={3}>
<a <a
href="#" href="#"
onClick={() => { onClick={async () => {
makeAnotherSwapEvent(); makeAnotherSwapEvent();
dispatch(navigateBackToBuildQuote(history)); await dispatch(navigateBackToBuildQuote(history));
dispatch(setSwapsFromToken(defaultSwapsToken));
}} }}
> >
{t('makeAnotherSwap')} {t('makeAnotherSwap')}

@ -510,6 +510,7 @@ export default function BuildQuote({
!isFeatureFlagLoaded || !isFeatureFlagLoaded ||
!Number(fromTokenInputValue) || !Number(fromTokenInputValue) ||
!selectedToToken?.address || !selectedToToken?.address ||
!fromTokenAddress ||
Number(maxSlippage) < 0 || Number(maxSlippage) < 0 ||
Number(maxSlippage) > MAX_ALLOWED_SLIPPAGE || Number(maxSlippage) > MAX_ALLOWED_SLIPPAGE ||
(toTokenIsNotDefault && occurrences < 2 && !verificationClicked); (toTokenIsNotDefault && occurrences < 2 && !verificationClicked);

@ -188,7 +188,9 @@ export default function SmartTransactionStatus() {
} }
if (smartTransactionStatus === SMART_TRANSACTION_STATUSES.SUCCESS) { if (smartTransactionStatus === SMART_TRANSACTION_STATUSES.SUCCESS) {
headerText = t('stxSuccess'); headerText = t('stxSuccess');
description = t('stxSuccessDescription', [destinationTokenInfo?.symbol]); if (destinationTokenInfo?.symbol) {
description = t('stxSuccessDescription', [destinationTokenInfo.symbol]);
}
icon = <SuccessIcon />; icon = <SuccessIcon />;
} else if (smartTransactionStatus === 'cancelled_user_cancelled') { } else if (smartTransactionStatus === 'cancelled_user_cancelled') {
headerText = t('stxUserCancelled'); headerText = t('stxUserCancelled');

Loading…
Cancel
Save