1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-11-22 18:00:18 +01:00
metamask-extension/ui/store/institutional/institution-actions.ts
Albert Olivé b5ece42ca1
[MMI] Fix Connect MMI and Deep link Flows (#19881)
* Sending showCustodyConfirmLink as a prop and fixing other issues

* Upgraded MMI extension monrepo and trying to fix the issue

* prevents deeplink from closing

* Fixed styles of Custody view and changed the place of it

* Fixed CI issues

* fixing eslint issues

* Update LavaMoat policies

* fixing tests

* Fixed test

* updated snapshots

* reorder, otherwise it won't make sense

* adds necessary methods

* removes duplicated key value

* updated snapshot

---------

Co-authored-by: Antonio Regadas <antonio.regadas@consensys.net>
Co-authored-by: MetaMask Bot <metamaskbot@users.noreply.github.com>
Co-authored-by: António Regadas <apregadas@gmail.com>
2023-07-13 10:42:08 +02:00

134 lines
3.4 KiB
TypeScript

import { ThunkAction, ThunkDispatch } from 'redux-thunk';
import { AnyAction } from 'redux';
import {
closeCurrentNotificationWindow,
hideModal,
showModal,
} from '../actions';
import {
CombinedBackgroundAndReduxState,
MetaMaskReduxState,
TemporaryMessageDataType,
MessagesIndexedById,
} from '../store';
import { toChecksumHexAddress } from '../../../shared/modules/hexstring-utils';
export function showInteractiveReplacementTokenModal(): ThunkAction<
void,
MetaMaskReduxState,
unknown,
AnyAction
> {
return (dispatch) => {
dispatch(
showModal({
name: 'INTERACTIVE_REPLACEMENT_TOKEN_MODAL',
}),
);
};
}
export function showCustodyConfirmLink({
link,
address,
closeNotification,
custodyId,
}: {
link: string;
address: string;
closeNotification: boolean;
custodyId: string;
}): ThunkAction<void, MetaMaskReduxState, unknown, AnyAction> {
return (dispatch) => {
dispatch(
showModal({
name: 'CUSTODY_CONFIRM_LINK',
link,
address,
closeNotification,
custodyId,
}),
);
};
}
export function updateCustodyState(
dispatch: ThunkDispatch<CombinedBackgroundAndReduxState, unknown, AnyAction>,
newState: MetaMaskReduxState['metamask'],
state: CombinedBackgroundAndReduxState & any,
) {
if (!newState.currentNetworkTxList || !state.metamask.currentNetworkTxList) {
return;
}
const differentTxs = newState.currentNetworkTxList.filter(
(item) =>
state.metamask.currentNetworkTxList.filter(
(tx: { [key: string]: any }) =>
tx.custodyId === item.custodyId &&
tx.custodyStatus !== item.custodyStatus,
).length > 0,
);
const txStateSaysDeepLinkShouldClose = Boolean(
differentTxs.find((tx) => {
const custodyAccountDetails =
state.metamask.custodyAccountDetails[
toChecksumHexAddress(tx.txParams.from)
];
const custody = custodyAccountDetails?.custodyType
.split(' - ')[1]
.toLowerCase();
if (!custody) {
return false;
}
return (
tx.custodyId === state.appState.modal.modalState.props?.custodyId &&
(state.metamask.custodyStatusMaps[custody][tx.custodyStatus]
?.mmStatus !== 'approved' ||
tx.custodyStatus === 'created')
);
}),
);
if (
state.appState.modal.open &&
state.appState.modal.modalState.name === 'CUSTODY_CONFIRM_LINK' &&
txStateSaysDeepLinkShouldClose
) {
if (state.appState.modal.modalState.props?.closeNotification) {
dispatch(closeCurrentNotificationWindow());
}
dispatch(hideModal());
}
if (
state.appState.modal.open &&
state.appState.modal.modalState.name ===
'INTERACTIVE_REPLACEMENT_TOKEN_MODAL'
) {
if (state.appState.modal.modalState.props?.closeNotification) {
dispatch(closeCurrentNotificationWindow());
}
}
}
export function checkForUnapprovedMessages(
msgData: TemporaryMessageDataType['msgParams'],
unapprovedMessages: MessagesIndexedById,
) {
const custodianUnapprovedMessages = Object.keys(unapprovedMessages)
.map((key) => unapprovedMessages[key])
.filter((message) => message.custodyId && message.status === 'unapproved');
if (custodianUnapprovedMessages && custodianUnapprovedMessages.length > 0) {
return {
...msgData,
custodyId: unapprovedMessages[msgData.metamaskId]?.custodyId,
};
}
return msgData;
}