From 97a983418290cd97f2176ffda82887f053f1d8e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Albert=20Oliv=C3=A9?= Date: Mon, 29 May 2023 17:50:56 +0200 Subject: [PATCH] =?UTF-8?q?[MMI]=C2=A0Add=20confirm-transaction-base=20cod?= =?UTF-8?q?e=20fences=20(#18795)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Added code fences * Continue working on this ticket * Fixed policies * Added compliance-row component * Fixed tests and css * Fixed invalid locale * Fixing linting * Add optional check * Fixing issues * Fixed storybook * Added missing dependency * ran lavamoat auto * ran dedupe and lavamoat * lint * Removed compliance row * Removed unneeded package * Removed unneeded proptyes * updates mmi packages * updating lavamoat * formatting main * Fixed conflicts * updates lock file * Moved code fences to have them all in the same place * Updated yarn.lock and lavamoat * remove linebreak * Improved logic in order to not have many code fences and improve readability * Fixing proptypes issues with eslint * runs lavamoat auto * Testing fixes issue e2e tests * Testing issues * Reverting code fences container * Fixing issue with binding * Added code fences in proptypes * Reverting code fences --------- Co-authored-by: Antonio Regadas Co-authored-by: António Regadas --- lavamoat/browserify/beta/policy.json | 103 ++++++++ lavamoat/browserify/desktop/policy.json | 103 ++++++++ lavamoat/browserify/flask/policy.json | 103 ++++++++ lavamoat/browserify/main/policy.json | 103 ++++++++ .../confirm-transaction-base.component.js | 224 +++++++++++++----- .../confirm-transaction-base.container.js | 88 +++++-- ui/selectors/institutional/selectors.js | 13 + 7 files changed, 653 insertions(+), 84 deletions(-) diff --git a/lavamoat/browserify/beta/policy.json b/lavamoat/browserify/beta/policy.json index f818bbd0e..316c0bb86 100644 --- a/lavamoat/browserify/beta/policy.json +++ b/lavamoat/browserify/beta/policy.json @@ -783,6 +783,109 @@ "@babel/runtime": true } }, + "@metamask-institutional/extension": { + "globals": { + "console.log": true, + "fetch": true + }, + "packages": { + "@ethereumjs/tx>@ethereumjs/util": true, + "@metamask-institutional/extension>@metamask-institutional/custody-controller": true, + "@metamask-institutional/extension>@metamask-institutional/sdk": true, + "@metamask-institutional/extension>@metamask-institutional/types": true + } + }, + "@metamask-institutional/extension>@metamask-institutional/custody-controller": { + "packages": { + "@ethereumjs/tx>@ethereumjs/util": true, + "@metamask-institutional/extension>@metamask-institutional/custody-keyring": true, + "@metamask/obs-store": true + } + }, + "@metamask-institutional/extension>@metamask-institutional/custody-keyring": { + "globals": { + "console.log": true, + "console.warn": true + }, + "packages": { + "@ethereumjs/tx>@ethereumjs/util": true, + "@metamask-institutional/extension>@metamask-institutional/custody-keyring>@metamask-institutional/configuration-client": true, + "@metamask-institutional/extension>@metamask-institutional/sdk": true, + "@metamask-institutional/extension>@metamask-institutional/types": true, + "@metamask/obs-store": true, + "browserify>crypto-browserify": true, + "browserify>events": true, + "gulp-sass>lodash.clonedeep": true + } + }, + "@metamask-institutional/extension>@metamask-institutional/custody-keyring>@metamask-institutional/configuration-client": { + "globals": { + "console.log": true, + "fetch": true + } + }, + "@metamask-institutional/extension>@metamask-institutional/sdk": { + "globals": { + "URLSearchParams": true, + "console.debug": true, + "console.log": true, + "console.warn": true, + "fetch": true + }, + "packages": { + "@metamask-institutional/extension>@metamask-institutional/sdk>@metamask-institutional/simplecache": true, + "@metamask-institutional/extension>@metamask-institutional/sdk>bignumber.js": true, + "@metamask-institutional/extension>@metamask-institutional/sdk>jsonwebtoken": true, + "browserify>crypto-browserify": true, + "browserify>events": true + } + }, + "@metamask-institutional/extension>@metamask-institutional/sdk>bignumber.js": { + "globals": { + "crypto": true, + "define": true + } + }, + "@metamask-institutional/extension>@metamask-institutional/sdk>jsonwebtoken": { + "packages": { + "@metamask-institutional/extension>@metamask-institutional/sdk>jsonwebtoken>jws": true, + "browserify>buffer": true, + "browserify>crypto-browserify": true, + "browserify>process": true, + "lodash": true, + "mocha>ms": true, + "semver": true + } + }, + "@metamask-institutional/extension>@metamask-institutional/sdk>jsonwebtoken>jws": { + "packages": { + "@metamask-institutional/extension>@metamask-institutional/sdk>jsonwebtoken>jws>jwa": true, + "browserify>buffer": true, + "browserify>process": true, + "browserify>stream-browserify": true, + "browserify>util": true, + "ethereumjs-wallet>safe-buffer": true + } + }, + "@metamask-institutional/extension>@metamask-institutional/sdk>jsonwebtoken>jws>jwa": { + "packages": { + "@metamask-institutional/extension>@metamask-institutional/sdk>jsonwebtoken>jws>jwa>buffer-equal-constant-time": true, + "@metamask-institutional/extension>@metamask-institutional/sdk>jsonwebtoken>jws>jwa>ecdsa-sig-formatter": true, + "browserify>crypto-browserify": true, + "browserify>util": true, + "ethereumjs-wallet>safe-buffer": true + } + }, + "@metamask-institutional/extension>@metamask-institutional/sdk>jsonwebtoken>jws>jwa>buffer-equal-constant-time": { + "packages": { + "browserify>buffer": true + } + }, + "@metamask-institutional/extension>@metamask-institutional/sdk>jsonwebtoken>jws>jwa>ecdsa-sig-formatter": { + "packages": { + "ethereumjs-wallet>safe-buffer": true + } + }, "@metamask/address-book-controller": { "packages": { "@metamask/base-controller": true, diff --git a/lavamoat/browserify/desktop/policy.json b/lavamoat/browserify/desktop/policy.json index 5236b5b26..eb47cfbee 100644 --- a/lavamoat/browserify/desktop/policy.json +++ b/lavamoat/browserify/desktop/policy.json @@ -783,6 +783,109 @@ "@babel/runtime": true } }, + "@metamask-institutional/extension": { + "globals": { + "console.log": true, + "fetch": true + }, + "packages": { + "@ethereumjs/tx>@ethereumjs/util": true, + "@metamask-institutional/extension>@metamask-institutional/custody-controller": true, + "@metamask-institutional/extension>@metamask-institutional/sdk": true, + "@metamask-institutional/extension>@metamask-institutional/types": true + } + }, + "@metamask-institutional/extension>@metamask-institutional/custody-controller": { + "packages": { + "@ethereumjs/tx>@ethereumjs/util": true, + "@metamask-institutional/extension>@metamask-institutional/custody-keyring": true, + "@metamask/obs-store": true + } + }, + "@metamask-institutional/extension>@metamask-institutional/custody-keyring": { + "globals": { + "console.log": true, + "console.warn": true + }, + "packages": { + "@ethereumjs/tx>@ethereumjs/util": true, + "@metamask-institutional/extension>@metamask-institutional/custody-keyring>@metamask-institutional/configuration-client": true, + "@metamask-institutional/extension>@metamask-institutional/sdk": true, + "@metamask-institutional/extension>@metamask-institutional/types": true, + "@metamask/obs-store": true, + "browserify>crypto-browserify": true, + "browserify>events": true, + "gulp-sass>lodash.clonedeep": true + } + }, + "@metamask-institutional/extension>@metamask-institutional/custody-keyring>@metamask-institutional/configuration-client": { + "globals": { + "console.log": true, + "fetch": true + } + }, + "@metamask-institutional/extension>@metamask-institutional/sdk": { + "globals": { + "URLSearchParams": true, + "console.debug": true, + "console.log": true, + "console.warn": true, + "fetch": true + }, + "packages": { + "@metamask-institutional/extension>@metamask-institutional/sdk>@metamask-institutional/simplecache": true, + "@metamask-institutional/extension>@metamask-institutional/sdk>bignumber.js": true, + "@metamask-institutional/extension>@metamask-institutional/sdk>jsonwebtoken": true, + "browserify>crypto-browserify": true, + "browserify>events": true + } + }, + "@metamask-institutional/extension>@metamask-institutional/sdk>bignumber.js": { + "globals": { + "crypto": true, + "define": true + } + }, + "@metamask-institutional/extension>@metamask-institutional/sdk>jsonwebtoken": { + "packages": { + "@metamask-institutional/extension>@metamask-institutional/sdk>jsonwebtoken>jws": true, + "browserify>buffer": true, + "browserify>crypto-browserify": true, + "browserify>process": true, + "lodash": true, + "mocha>ms": true, + "semver": true + } + }, + "@metamask-institutional/extension>@metamask-institutional/sdk>jsonwebtoken>jws": { + "packages": { + "@metamask-institutional/extension>@metamask-institutional/sdk>jsonwebtoken>jws>jwa": true, + "browserify>buffer": true, + "browserify>process": true, + "browserify>stream-browserify": true, + "browserify>util": true, + "ethereumjs-wallet>safe-buffer": true + } + }, + "@metamask-institutional/extension>@metamask-institutional/sdk>jsonwebtoken>jws>jwa": { + "packages": { + "@metamask-institutional/extension>@metamask-institutional/sdk>jsonwebtoken>jws>jwa>buffer-equal-constant-time": true, + "@metamask-institutional/extension>@metamask-institutional/sdk>jsonwebtoken>jws>jwa>ecdsa-sig-formatter": true, + "browserify>crypto-browserify": true, + "browserify>util": true, + "ethereumjs-wallet>safe-buffer": true + } + }, + "@metamask-institutional/extension>@metamask-institutional/sdk>jsonwebtoken>jws>jwa>buffer-equal-constant-time": { + "packages": { + "browserify>buffer": true + } + }, + "@metamask-institutional/extension>@metamask-institutional/sdk>jsonwebtoken>jws>jwa>ecdsa-sig-formatter": { + "packages": { + "ethereumjs-wallet>safe-buffer": true + } + }, "@metamask/address-book-controller": { "packages": { "@metamask/base-controller": true, diff --git a/lavamoat/browserify/flask/policy.json b/lavamoat/browserify/flask/policy.json index 5236b5b26..eb47cfbee 100644 --- a/lavamoat/browserify/flask/policy.json +++ b/lavamoat/browserify/flask/policy.json @@ -783,6 +783,109 @@ "@babel/runtime": true } }, + "@metamask-institutional/extension": { + "globals": { + "console.log": true, + "fetch": true + }, + "packages": { + "@ethereumjs/tx>@ethereumjs/util": true, + "@metamask-institutional/extension>@metamask-institutional/custody-controller": true, + "@metamask-institutional/extension>@metamask-institutional/sdk": true, + "@metamask-institutional/extension>@metamask-institutional/types": true + } + }, + "@metamask-institutional/extension>@metamask-institutional/custody-controller": { + "packages": { + "@ethereumjs/tx>@ethereumjs/util": true, + "@metamask-institutional/extension>@metamask-institutional/custody-keyring": true, + "@metamask/obs-store": true + } + }, + "@metamask-institutional/extension>@metamask-institutional/custody-keyring": { + "globals": { + "console.log": true, + "console.warn": true + }, + "packages": { + "@ethereumjs/tx>@ethereumjs/util": true, + "@metamask-institutional/extension>@metamask-institutional/custody-keyring>@metamask-institutional/configuration-client": true, + "@metamask-institutional/extension>@metamask-institutional/sdk": true, + "@metamask-institutional/extension>@metamask-institutional/types": true, + "@metamask/obs-store": true, + "browserify>crypto-browserify": true, + "browserify>events": true, + "gulp-sass>lodash.clonedeep": true + } + }, + "@metamask-institutional/extension>@metamask-institutional/custody-keyring>@metamask-institutional/configuration-client": { + "globals": { + "console.log": true, + "fetch": true + } + }, + "@metamask-institutional/extension>@metamask-institutional/sdk": { + "globals": { + "URLSearchParams": true, + "console.debug": true, + "console.log": true, + "console.warn": true, + "fetch": true + }, + "packages": { + "@metamask-institutional/extension>@metamask-institutional/sdk>@metamask-institutional/simplecache": true, + "@metamask-institutional/extension>@metamask-institutional/sdk>bignumber.js": true, + "@metamask-institutional/extension>@metamask-institutional/sdk>jsonwebtoken": true, + "browserify>crypto-browserify": true, + "browserify>events": true + } + }, + "@metamask-institutional/extension>@metamask-institutional/sdk>bignumber.js": { + "globals": { + "crypto": true, + "define": true + } + }, + "@metamask-institutional/extension>@metamask-institutional/sdk>jsonwebtoken": { + "packages": { + "@metamask-institutional/extension>@metamask-institutional/sdk>jsonwebtoken>jws": true, + "browserify>buffer": true, + "browserify>crypto-browserify": true, + "browserify>process": true, + "lodash": true, + "mocha>ms": true, + "semver": true + } + }, + "@metamask-institutional/extension>@metamask-institutional/sdk>jsonwebtoken>jws": { + "packages": { + "@metamask-institutional/extension>@metamask-institutional/sdk>jsonwebtoken>jws>jwa": true, + "browserify>buffer": true, + "browserify>process": true, + "browserify>stream-browserify": true, + "browserify>util": true, + "ethereumjs-wallet>safe-buffer": true + } + }, + "@metamask-institutional/extension>@metamask-institutional/sdk>jsonwebtoken>jws>jwa": { + "packages": { + "@metamask-institutional/extension>@metamask-institutional/sdk>jsonwebtoken>jws>jwa>buffer-equal-constant-time": true, + "@metamask-institutional/extension>@metamask-institutional/sdk>jsonwebtoken>jws>jwa>ecdsa-sig-formatter": true, + "browserify>crypto-browserify": true, + "browserify>util": true, + "ethereumjs-wallet>safe-buffer": true + } + }, + "@metamask-institutional/extension>@metamask-institutional/sdk>jsonwebtoken>jws>jwa>buffer-equal-constant-time": { + "packages": { + "browserify>buffer": true + } + }, + "@metamask-institutional/extension>@metamask-institutional/sdk>jsonwebtoken>jws>jwa>ecdsa-sig-formatter": { + "packages": { + "ethereumjs-wallet>safe-buffer": true + } + }, "@metamask/address-book-controller": { "packages": { "@metamask/base-controller": true, diff --git a/lavamoat/browserify/main/policy.json b/lavamoat/browserify/main/policy.json index f818bbd0e..316c0bb86 100644 --- a/lavamoat/browserify/main/policy.json +++ b/lavamoat/browserify/main/policy.json @@ -783,6 +783,109 @@ "@babel/runtime": true } }, + "@metamask-institutional/extension": { + "globals": { + "console.log": true, + "fetch": true + }, + "packages": { + "@ethereumjs/tx>@ethereumjs/util": true, + "@metamask-institutional/extension>@metamask-institutional/custody-controller": true, + "@metamask-institutional/extension>@metamask-institutional/sdk": true, + "@metamask-institutional/extension>@metamask-institutional/types": true + } + }, + "@metamask-institutional/extension>@metamask-institutional/custody-controller": { + "packages": { + "@ethereumjs/tx>@ethereumjs/util": true, + "@metamask-institutional/extension>@metamask-institutional/custody-keyring": true, + "@metamask/obs-store": true + } + }, + "@metamask-institutional/extension>@metamask-institutional/custody-keyring": { + "globals": { + "console.log": true, + "console.warn": true + }, + "packages": { + "@ethereumjs/tx>@ethereumjs/util": true, + "@metamask-institutional/extension>@metamask-institutional/custody-keyring>@metamask-institutional/configuration-client": true, + "@metamask-institutional/extension>@metamask-institutional/sdk": true, + "@metamask-institutional/extension>@metamask-institutional/types": true, + "@metamask/obs-store": true, + "browserify>crypto-browserify": true, + "browserify>events": true, + "gulp-sass>lodash.clonedeep": true + } + }, + "@metamask-institutional/extension>@metamask-institutional/custody-keyring>@metamask-institutional/configuration-client": { + "globals": { + "console.log": true, + "fetch": true + } + }, + "@metamask-institutional/extension>@metamask-institutional/sdk": { + "globals": { + "URLSearchParams": true, + "console.debug": true, + "console.log": true, + "console.warn": true, + "fetch": true + }, + "packages": { + "@metamask-institutional/extension>@metamask-institutional/sdk>@metamask-institutional/simplecache": true, + "@metamask-institutional/extension>@metamask-institutional/sdk>bignumber.js": true, + "@metamask-institutional/extension>@metamask-institutional/sdk>jsonwebtoken": true, + "browserify>crypto-browserify": true, + "browserify>events": true + } + }, + "@metamask-institutional/extension>@metamask-institutional/sdk>bignumber.js": { + "globals": { + "crypto": true, + "define": true + } + }, + "@metamask-institutional/extension>@metamask-institutional/sdk>jsonwebtoken": { + "packages": { + "@metamask-institutional/extension>@metamask-institutional/sdk>jsonwebtoken>jws": true, + "browserify>buffer": true, + "browserify>crypto-browserify": true, + "browserify>process": true, + "lodash": true, + "mocha>ms": true, + "semver": true + } + }, + "@metamask-institutional/extension>@metamask-institutional/sdk>jsonwebtoken>jws": { + "packages": { + "@metamask-institutional/extension>@metamask-institutional/sdk>jsonwebtoken>jws>jwa": true, + "browserify>buffer": true, + "browserify>process": true, + "browserify>stream-browserify": true, + "browserify>util": true, + "ethereumjs-wallet>safe-buffer": true + } + }, + "@metamask-institutional/extension>@metamask-institutional/sdk>jsonwebtoken>jws>jwa": { + "packages": { + "@metamask-institutional/extension>@metamask-institutional/sdk>jsonwebtoken>jws>jwa>buffer-equal-constant-time": true, + "@metamask-institutional/extension>@metamask-institutional/sdk>jsonwebtoken>jws>jwa>ecdsa-sig-formatter": true, + "browserify>crypto-browserify": true, + "browserify>util": true, + "ethereumjs-wallet>safe-buffer": true + } + }, + "@metamask-institutional/extension>@metamask-institutional/sdk>jsonwebtoken>jws>jwa>buffer-equal-constant-time": { + "packages": { + "browserify>buffer": true + } + }, + "@metamask-institutional/extension>@metamask-institutional/sdk>jsonwebtoken>jws>jwa>ecdsa-sig-formatter": { + "packages": { + "ethereumjs-wallet>safe-buffer": true + } + }, "@metamask/address-book-controller": { "packages": { "@metamask/base-controller": true, diff --git a/ui/pages/confirm-transaction-base/confirm-transaction-base.component.js b/ui/pages/confirm-transaction-base/confirm-transaction-base.component.js index 6934f0b04..850b2e490 100644 --- a/ui/pages/confirm-transaction-base/confirm-transaction-base.component.js +++ b/ui/pages/confirm-transaction-base/confirm-transaction-base.component.js @@ -133,13 +133,15 @@ export default class ConfirmTransactionBase extends Component { hardwareWalletRequiresConnection: PropTypes.bool, isMultiLayerFeeNetwork: PropTypes.bool, isBuyableChain: PropTypes.bool, - ///: BEGIN:ONLY_INCLUDE_IN(build-mmi) - accountType: PropTypes.string, - isNoteToTraderSupported: PropTypes.bool, - ///: END:ONLY_INCLUDE_IN isApprovalOrRejection: PropTypes.bool, assetStandard: PropTypes.string, useCurrencyRateCheck: PropTypes.bool, + isNotification: PropTypes.bool, + accountType: PropTypes.string, + setWaitForConfirmDeepLinkDialog: PropTypes.func, + showTransactionsFailedModal: PropTypes.func, + showCustodianDeepLink: PropTypes.func, + isNoteToTraderSupported: PropTypes.bool, }; state = { @@ -593,36 +595,81 @@ export default class ConfirmTransactionBase extends Component { } handleSubmit() { + let submit = this.handleMainSubmit.bind(this); + + ///: BEGIN:ONLY_INCLUDE_IN(build-mmi) + submit = this.handleMMISubmit.bind(this); + ///: END:ONLY_INCLUDE_IN + + submit(); + } + + handleMainSubmit() { const { sendTransaction, txData, history, mostRecentOverviewPage, updateCustomNonce, - maxFeePerGas, - customTokenAmount, - dappProposedTokenAmount, - currentTokenBalance, - maxPriorityFeePerGas, - baseFeePerGas, - methodData, - addToAddressBookIfNew, - toAccounts, - toAddress, - ///: BEGIN:ONLY_INCLUDE_IN(build-mmi) - accountType, - isNoteToTraderSupported, - ///: END:ONLY_INCLUDE_IN } = this.props; - const { - submitting, - ///: BEGIN:ONLY_INCLUDE_IN(build-mmi) - noteText, - ///: END:ONLY_INCLUDE_IN - } = this.state; - const { name } = methodData; - ///: BEGIN:ONLY_INCLUDE_IN(build-mmi) + this.updateTxData(); + + this.setState( + { + submitting: true, + submitError: null, + }, + () => { + this._removeBeforeUnload(); + + sendTransaction(txData) + .then(() => { + if (!this._isMounted) { + return; + } + + this.setState( + { + submitting: false, + }, + () => { + history.push(mostRecentOverviewPage); + updateCustomNonce(''); + }, + ); + }) + .catch((error) => { + if (!this._isMounted) { + return; + } + this.setState({ + submitting: false, + submitError: error.message, + }); + updateCustomNonce(''); + }); + }, + ); + } + + handleMMISubmit() { + const { + sendTransaction, + txData, + history, + mostRecentOverviewPage, + updateCustomNonce, + unapprovedTxCount, + accountType, + isNotification, + setWaitForConfirmDeepLinkDialog, + showTransactionsFailedModal, + fromAddress, + isNoteToTraderSupported, + } = this.props; + const { noteText } = this.state; + if (accountType === 'custody') { txData.custodyStatus = 'created'; @@ -632,7 +679,92 @@ export default class ConfirmTransactionBase extends Component { }; } } - ///: END:ONLY_INCLUDE_IN + + this.updateTxData(); + + this.setState( + { + submitting: true, + submitError: null, + }, + () => { + this._removeBeforeUnload(); + + if (txData.custodyStatus) { + setWaitForConfirmDeepLinkDialog(true); + } + + sendTransaction(txData) + .then(() => { + if (!this._isMounted) { + return; + } + + if (txData.custodyStatus) { + this.props.showCustodianDeepLink({ + fromAddress, + closeNotification: isNotification && unapprovedTxCount === 1, + txId: txData.id, + onDeepLinkFetched: () => { + this.context.trackEvent({ + category: 'MMI', + event: 'Show deeplink for transaction', + }); + }, + onDeepLinkShown: () => { + this.props.clearConfirmTransaction(); + this.setState({ submitting: false }, () => { + history.push(mostRecentOverviewPage); + updateCustomNonce(''); + }); + }, + }); + } else { + this.setState( + { + submitting: false, + }, + () => { + history.push(mostRecentOverviewPage); + updateCustomNonce(''); + }, + ); + } + }) + .catch((error) => { + if (!this._isMounted) { + return; + } + + showTransactionsFailedModal(error.message, isNotification); + + this.setState({ + submitting: false, + submitError: error.message, + }); + setWaitForConfirmDeepLinkDialog(true); + updateCustomNonce(''); + }); + }, + ); + } + + updateTxData() { + const { + txData, + maxFeePerGas, + customTokenAmount, + dappProposedTokenAmount, + currentTokenBalance, + maxPriorityFeePerGas, + baseFeePerGas, + addToAddressBookIfNew, + toAccounts, + toAddress, + methodData, + } = this.props; + const { submitting } = this.state; + const { name } = methodData; if (txData.type === TransactionType.simpleSend) { addToAddressBookIfNew(toAddress, toAccounts); @@ -678,44 +810,6 @@ export default class ConfirmTransactionBase extends Component { maxPriorityFeePerGas, }; } - - this.setState( - { - submitting: true, - submitError: null, - }, - () => { - this._removeBeforeUnload(); - - sendTransaction(txData) - .then(() => { - if (!this._isMounted) { - return; - } - - this.setState( - { - submitting: false, - }, - () => { - history.push(mostRecentOverviewPage); - updateCustomNonce(''); - }, - ); - }) - .catch((error) => { - if (!this._isMounted) { - return; - } - - this.setState({ - submitting: false, - submitError: error.message, - }); - updateCustomNonce(''); - }); - }, - ); } handleSetApprovalForAll() { diff --git a/ui/pages/confirm-transaction-base/confirm-transaction-base.container.js b/ui/pages/confirm-transaction-base/confirm-transaction-base.container.js index aba96a1d2..9514ccea6 100644 --- a/ui/pages/confirm-transaction-base/confirm-transaction-base.container.js +++ b/ui/pages/confirm-transaction-base/confirm-transaction-base.container.js @@ -1,7 +1,10 @@ import { connect } from 'react-redux'; import { compose } from 'redux'; import { withRouter } from 'react-router-dom'; - +///: BEGIN:ONLY_INCLUDE_IN(build-mmi) +import { showCustodianDeepLink } from '@metamask-institutional/extension'; +import { mmiActionsFactory } from '../../store/institutional/institution-background'; +///: END:ONLY_INCLUDE_IN import { clearConfirmTransaction } from '../../ducks/confirm-transaction/confirm-transaction.duck'; import { @@ -48,7 +51,12 @@ import { getSendToAccounts, getProviderConfig, } from '../../ducks/metamask/metamask'; -import { addHexPrefix } from '../../../app/scripts/lib/util'; +import { + addHexPrefix, + ///: BEGIN:ONLY_INCLUDE_IN(build-mmi) + getEnvironmentType, + ///: END:ONLY_INCLUDE_IN +} from '../../../app/scripts/lib/util'; import { parseStandardTokenTransactionData, @@ -63,8 +71,11 @@ import { import { getGasLoadingAnimationIsShowing } from '../../ducks/app/app'; import { isLegacyTransaction } from '../../helpers/utils/transactions.util'; import { CUSTOM_GAS_ESTIMATE } from '../../../shared/constants/gas'; + ///: BEGIN:ONLY_INCLUDE_IN(build-mmi) import { getAccountType } from '../../selectors/selectors'; +import { ENVIRONMENT_TYPE_NOTIFICATION } from '../../../shared/constants/app'; +import { getIsNoteToTraderSupported } from '../../selectors/institutional/selectors'; ///: END:ONLY_INCLUDE_IN import { TransactionStatus, @@ -100,6 +111,11 @@ const mapStateToProps = (state, ownProps) => { const { id: paramsTransactionId } = params; const isMainnet = getIsMainnet(state); + ///: BEGIN:ONLY_INCLUDE_IN(build-mmi) + const envType = getEnvironmentType(); + const isNotification = envType === ENVIRONMENT_TYPE_NOTIFICATION; + ///: END:ONLY_INCLUDE_IN + const isGasEstimatesLoading = getIsGasEstimatesLoading(state); const gasLoadingAnimationIsShowing = getGasLoadingAnimationIsShowing(state); const isBuyableChain = getIsBuyableChain(state); @@ -199,29 +215,20 @@ const mapStateToProps = (state, ownProps) => { txParamsAreDappSuggested(fullTxData); const fromAddressIsLedger = isAddressLedger(state, fromAddress); const nativeCurrency = getNativeCurrency(state); + ///: BEGIN:ONLY_INCLUDE_IN(build-mmi) + const accountType = getAccountType(state, fromAddress); + const fromChecksumHexAddress = toChecksumHexAddress(fromAddress); + const isNoteToTraderSupported = getIsNoteToTraderSupported( + state, + fromChecksumHexAddress, + ); + ///: END:ONLY_INCLUDE_IN const hardwareWalletRequiresConnection = doesAddressRequireLedgerHidConnection(state, fromAddress); const isMultiLayerFeeNetwork = getIsMultiLayerFeeNetwork(state); - ///: BEGIN:ONLY_INCLUDE_IN(build-mmi) - const accountType = getAccountType(state); - - const fromChecksumHexAddress = toChecksumHexAddress(fromAddress); - let isNoteToTraderSupported = false; - if ( - state.metamask.custodyAccountDetails && - state.metamask.custodyAccountDetails[fromChecksumHexAddress] - ) { - const { custodianName } = - state.metamask.custodyAccountDetails[fromChecksumHexAddress]; - isNoteToTraderSupported = state.metamask.mmiConfiguration?.custodians?.find( - (custodian) => custodian.name === custodianName, - )?.isNoteToTraderSupported; - } - ///: END:ONLY_INCLUDE_IN - return { balance, fromAddress, @@ -275,11 +282,15 @@ const mapStateToProps = (state, ownProps) => { ///: BEGIN:ONLY_INCLUDE_IN(build-mmi) accountType, isNoteToTraderSupported, + isNotification, ///: END:ONLY_INCLUDE_IN }; }; export const mapDispatchToProps = (dispatch) => { + ///: BEGIN:ONLY_INCLUDE_IN(build-mmi) + const mmiActions = mmiActionsFactory(); + ///: END:ONLY_INCLUDE_IN return { tryReverseResolveAddress: (address) => { return dispatch(tryReverseResolveAddress(address)); @@ -316,6 +327,45 @@ export const mapDispatchToProps = (dispatch) => { dispatch(addToAddressBook(hexPrefixedAddress, nickname)); } }, + ///: BEGIN:ONLY_INCLUDE_IN(build-mmi) + getCustodianConfirmDeepLink: (id) => + dispatch(mmiActions.getCustodianConfirmDeepLink(id)), + showCustodyConfirmLink: ({ link, address, closeNotification, custodyId }) => + dispatch( + mmiActions.showCustodyConfirmLink({ + link, + address, + closeNotification, + custodyId, + }), + ), + showTransactionsFailedModal: (errorMessage, closeNotification) => + dispatch( + showModal({ + name: 'TRANSACTION_FAILED', + errorMessage, + closeNotification, + }), + ), + showCustodianDeepLink: ({ + txId, + fromAddress, + closeNotification, + onDeepLinkFetched, + onDeepLinkShown, + }) => + showCustodianDeepLink({ + dispatch, + mmiActions, + txId, + fromAddress, + closeNotification, + onDeepLinkFetched, + onDeepLinkShown, + }), + setWaitForConfirmDeepLinkDialog: (wait) => + dispatch(mmiActions.setWaitForConfirmDeepLinkDialog(wait)), + ///: END:ONLY_INCLUDE_IN }; }; diff --git a/ui/selectors/institutional/selectors.js b/ui/selectors/institutional/selectors.js index f08295453..d869b7f23 100644 --- a/ui/selectors/institutional/selectors.js +++ b/ui/selectors/institutional/selectors.js @@ -78,3 +78,16 @@ export function getMMIConfiguration(state) { export function getInteractiveReplacementToken(state) { return state.metamask.interactiveReplacementToken || {}; } + +export function getIsNoteToTraderSupported(state, fromChecksumHexAddress) { + let isNoteToTraderSupported = false; + if (state.metamask.custodyAccountDetails?.[fromChecksumHexAddress]) { + const { custodianName } = + state.metamask.custodyAccountDetails[fromChecksumHexAddress]; + + isNoteToTraderSupported = state.metamask.mmiConfiguration?.custodians?.find( + (custodian) => custodian.name === custodianName, + )?.isNoteToTraderSupported; + } + return isNoteToTraderSupported; +}