mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-23 02:10:12 +01:00
275 lines
7.9 KiB
JavaScript
275 lines
7.9 KiB
JavaScript
import { connect } from 'react-redux';
|
|
import {
|
|
accountsWithSendEtherInfoSelector,
|
|
doesAddressRequireLedgerHidConnection,
|
|
getCurrentChainId,
|
|
getRpcPrefsForCurrentProvider,
|
|
getSubjectMetadata,
|
|
unconfirmedMessagesHashSelector,
|
|
getTotalUnapprovedMessagesCount,
|
|
getCurrentCurrency,
|
|
getPreferences,
|
|
conversionRateSelector,
|
|
///: BEGIN:ONLY_INCLUDE_IN(build-mmi)
|
|
getAccountType,
|
|
getSelectedAccount,
|
|
unapprovedTypedMessagesSelector,
|
|
///: END:ONLY_INCLUDE_IN
|
|
} from '../../../selectors';
|
|
import {
|
|
isAddressLedger,
|
|
getNativeCurrency,
|
|
getProviderConfig,
|
|
} from '../../../ducks/metamask/metamask';
|
|
import { getAccountByAddress, valuesFor } from '../../../helpers/utils/util';
|
|
///: BEGIN:ONLY_INCLUDE_IN(build-mmi)
|
|
// eslint-disable-next-line import/order
|
|
import { showCustodianDeepLink } from '@metamask-institutional/extension';
|
|
import {
|
|
mmiActionsFactory,
|
|
setTypedMessageInProgress,
|
|
} from '../../../store/institutional/institution-background';
|
|
import { getEnvironmentType } from '../../../../app/scripts/lib/util';
|
|
import { checkForUnapprovedTypedMessages } from '../../../store/institutional/institution-actions';
|
|
///: END:ONLY_INCLUDE_IN
|
|
import {
|
|
///: BEGIN:ONLY_INCLUDE_IN(build-mmi)
|
|
ENVIRONMENT_TYPE_NOTIFICATION,
|
|
///: END:ONLY_INCLUDE_IN
|
|
} from '../../../../shared/constants/app';
|
|
|
|
import {
|
|
showModal,
|
|
resolvePendingApproval,
|
|
rejectPendingApproval,
|
|
rejectAllMessages,
|
|
completedTx,
|
|
///: BEGIN:ONLY_INCLUDE_IN(build-mmi)
|
|
goHome,
|
|
///: END:ONLY_INCLUDE_IN
|
|
} from '../../../store/actions';
|
|
import { getMostRecentOverviewPage } from '../../../ducks/history/history';
|
|
import { clearConfirmTransaction } from '../../../ducks/confirm-transaction/confirm-transaction.duck';
|
|
import SignatureRequest from './signature-request.component';
|
|
|
|
function mapStateToProps(state, ownProps) {
|
|
const { txData } = ownProps;
|
|
|
|
///: BEGIN:ONLY_INCLUDE_IN(build-mmi)
|
|
const envType = getEnvironmentType();
|
|
///: END:ONLY_INCLUDE_IN
|
|
|
|
const {
|
|
msgParams: { from },
|
|
} = txData;
|
|
const providerConfig = getProviderConfig(state);
|
|
|
|
const hardwareWalletRequiresConnection =
|
|
doesAddressRequireLedgerHidConnection(state, from);
|
|
const isLedgerWallet = isAddressLedger(state, from);
|
|
const chainId = getCurrentChainId(state);
|
|
const rpcPrefs = getRpcPrefsForCurrentProvider(state);
|
|
const unconfirmedMessagesList = unconfirmedMessagesHashSelector(state);
|
|
const unapprovedMessagesCount = getTotalUnapprovedMessagesCount(state);
|
|
const { useNativeCurrencyAsPrimaryCurrency } = getPreferences(state);
|
|
|
|
return {
|
|
providerConfig,
|
|
isLedgerWallet,
|
|
hardwareWalletRequiresConnection,
|
|
chainId,
|
|
rpcPrefs,
|
|
unconfirmedMessagesList,
|
|
unapprovedMessagesCount,
|
|
mostRecentOverviewPage: getMostRecentOverviewPage(state),
|
|
nativeCurrency: getNativeCurrency(state),
|
|
currentCurrency: getCurrentCurrency(state),
|
|
conversionRate: useNativeCurrencyAsPrimaryCurrency
|
|
? null
|
|
: conversionRateSelector(state),
|
|
subjectMetadata: getSubjectMetadata(state),
|
|
// not forwarded to component
|
|
allAccounts: accountsWithSendEtherInfoSelector(state),
|
|
///: BEGIN:ONLY_INCLUDE_IN(build-mmi)
|
|
accountType: getAccountType(state),
|
|
isNotification: envType === ENVIRONMENT_TYPE_NOTIFICATION,
|
|
selectedAccount: getSelectedAccount(state),
|
|
unapprovedTypedMessages: unapprovedTypedMessagesSelector(state),
|
|
///: END:ONLY_INCLUDE_IN
|
|
};
|
|
}
|
|
|
|
let mapDispatchToProps = null;
|
|
|
|
///: BEGIN:ONLY_INCLUDE_IN(build-mmi)
|
|
function mmiMapDispatchToProps(dispatch) {
|
|
const mmiActions = mmiActionsFactory();
|
|
return {
|
|
clearConfirmTransaction: () => dispatch(clearConfirmTransaction()),
|
|
setMsgInProgress: (msgId) => dispatch(setTypedMessageInProgress(msgId)),
|
|
showCustodianDeepLink: ({
|
|
custodyId,
|
|
fromAddress,
|
|
closeNotification,
|
|
onDeepLinkFetched,
|
|
onDeepLinkShown,
|
|
}) =>
|
|
showCustodianDeepLink({
|
|
dispatch,
|
|
mmiActions,
|
|
txId: undefined,
|
|
fromAddress,
|
|
custodyId,
|
|
isSignature: true,
|
|
closeNotification,
|
|
onDeepLinkFetched,
|
|
onDeepLinkShown,
|
|
}),
|
|
showTransactionsFailedModal: ({
|
|
errorMessage,
|
|
closeNotification,
|
|
operationFailed,
|
|
}) =>
|
|
dispatch(
|
|
showModal({
|
|
name: 'TRANSACTION_FAILED',
|
|
errorMessage,
|
|
closeNotification,
|
|
operationFailed,
|
|
}),
|
|
),
|
|
setWaitForConfirmDeepLinkDialog: (wait) =>
|
|
dispatch(mmiActions.setWaitForConfirmDeepLinkDialog(wait)),
|
|
goHome: () => dispatch(goHome()),
|
|
};
|
|
}
|
|
|
|
mapDispatchToProps = mmiMapDispatchToProps;
|
|
///: END:ONLY_INCLUDE_IN
|
|
|
|
mapDispatchToProps = function (dispatch) {
|
|
return {
|
|
resolvePendingApproval: (id) => dispatch(resolvePendingApproval(id)),
|
|
completedTx: (id) => dispatch(completedTx(id)),
|
|
rejectPendingApproval: (id, error) =>
|
|
dispatch(rejectPendingApproval(id, error)),
|
|
clearConfirmTransaction: () => dispatch(clearConfirmTransaction()),
|
|
showRejectTransactionsConfirmationModal: ({
|
|
onSubmit,
|
|
unapprovedTxCount: unapprovedMessagesCount,
|
|
}) => {
|
|
return dispatch(
|
|
showModal({
|
|
name: 'REJECT_TRANSACTIONS',
|
|
onSubmit,
|
|
unapprovedTxCount: unapprovedMessagesCount,
|
|
isRequestType: true,
|
|
}),
|
|
);
|
|
},
|
|
cancelAllApprovals: (unconfirmedMessagesList) => {
|
|
dispatch(rejectAllMessages(unconfirmedMessagesList));
|
|
},
|
|
};
|
|
};
|
|
|
|
function mergeProps(stateProps, dispatchProps, ownProps) {
|
|
const {
|
|
allAccounts,
|
|
isLedgerWallet,
|
|
hardwareWalletRequiresConnection,
|
|
chainId,
|
|
rpcPrefs,
|
|
nativeCurrency,
|
|
currentCurrency,
|
|
conversionRate,
|
|
providerConfig,
|
|
subjectMetadata,
|
|
unconfirmedMessagesList,
|
|
unapprovedMessagesCount,
|
|
mostRecentOverviewPage,
|
|
///: BEGIN:ONLY_INCLUDE_IN(build-mmi)
|
|
accountType,
|
|
isNotification,
|
|
unapprovedTypedMessages,
|
|
///: END:ONLY_INCLUDE_IN
|
|
} = stateProps;
|
|
const { txData } = ownProps;
|
|
|
|
const {
|
|
cancelAll: dispatchCancelAll,
|
|
cancelAllApprovals: dispatchCancelAllApprovals,
|
|
} = dispatchProps;
|
|
|
|
const {
|
|
msgParams: { from },
|
|
} = txData;
|
|
|
|
const fromAccount = getAccountByAddress(allAccounts, from);
|
|
|
|
///: BEGIN:ONLY_INCLUDE_IN(build-mmi)
|
|
const mmiOnSignCallback = async (_msgData) => {
|
|
if (accountType === 'custody') {
|
|
try {
|
|
let msgData = _msgData;
|
|
let id = _msgData.custodyId;
|
|
if (!_msgData.custodyId) {
|
|
msgData = checkForUnapprovedTypedMessages(
|
|
_msgData,
|
|
unapprovedTypedMessages,
|
|
);
|
|
id = msgData.custodyId;
|
|
}
|
|
dispatchProps.showCustodianDeepLink({
|
|
custodyId: id,
|
|
fromAddress: fromAccount.address,
|
|
closeNotification: isNotification,
|
|
onDeepLinkFetched: () => undefined,
|
|
onDeepLinkShown: () => undefined,
|
|
});
|
|
await dispatchProps.setMsgInProgress(msgData.metamaskId);
|
|
await dispatchProps.setWaitForConfirmDeepLinkDialog(true);
|
|
await goHome();
|
|
} catch (err) {
|
|
await dispatchProps.setWaitForConfirmDeepLinkDialog(true);
|
|
await dispatchProps.showTransactionsFailedModal({
|
|
errorMessage: err.message,
|
|
closeNotification: true,
|
|
operationFailed: true,
|
|
});
|
|
}
|
|
}
|
|
};
|
|
///: END:ONLY_INCLUDE_IN
|
|
|
|
return {
|
|
...ownProps,
|
|
...dispatchProps,
|
|
fromAccount,
|
|
txData,
|
|
isLedgerWallet,
|
|
hardwareWalletRequiresConnection,
|
|
chainId,
|
|
rpcPrefs,
|
|
nativeCurrency,
|
|
currentCurrency,
|
|
conversionRate,
|
|
providerConfig,
|
|
subjectMetadata,
|
|
unapprovedMessagesCount,
|
|
mostRecentOverviewPage,
|
|
cancelAll: () => dispatchCancelAll(valuesFor(unconfirmedMessagesList)),
|
|
cancelAllApprovals: () =>
|
|
dispatchCancelAllApprovals(valuesFor(unconfirmedMessagesList)),
|
|
///: BEGIN:ONLY_INCLUDE_IN(build-mmi)
|
|
mmiOnSignCallback,
|
|
///: END:ONLY_INCLUDE_IN
|
|
};
|
|
}
|
|
|
|
export default connect(
|
|
mapStateToProps,
|
|
mapDispatchToProps,
|
|
mergeProps,
|
|
)(SignatureRequest);
|