You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
2.2 KiB
87 lines
2.2 KiB
import React, { createContext, useContext, useState } from 'react';
|
|
import PropTypes from 'prop-types';
|
|
|
|
import { TRANSACTION_TYPES } from '../../shared/constants/transaction';
|
|
import { getMethodName } from '../helpers/utils/metrics';
|
|
import { useGasFeeContext } from './gasFee';
|
|
import { MetaMetricsContext } from './metametrics';
|
|
|
|
export const TransactionModalContext = createContext({});
|
|
|
|
export const TransactionModalContextProvider = ({
|
|
actionKey,
|
|
children,
|
|
methodData,
|
|
captureEventEnabled = true,
|
|
}) => {
|
|
const [openModals, setOpenModals] = useState([]);
|
|
const metricsEvent = useContext(MetaMetricsContext);
|
|
const { transaction: { origin } = {} } = useGasFeeContext();
|
|
|
|
const captureEvent = () => {
|
|
metricsEvent({
|
|
eventOpts: {
|
|
category: 'Transactions',
|
|
action: 'Confirm Screen',
|
|
name: 'User clicks "Edit" on gas',
|
|
},
|
|
customVariables: {
|
|
recipientKnown: null,
|
|
functionType:
|
|
actionKey ||
|
|
getMethodName(methodData?.name) ||
|
|
TRANSACTION_TYPES.CONTRACT_INTERACTION,
|
|
origin,
|
|
},
|
|
});
|
|
};
|
|
|
|
const closeModal = (modalName) => {
|
|
const index = openModals.indexOf(modalName);
|
|
if (openModals < 0) {
|
|
return;
|
|
}
|
|
const modals = [...openModals];
|
|
modals.splice(index, 1);
|
|
setOpenModals(modals);
|
|
};
|
|
|
|
const closeAllModals = () => {
|
|
setOpenModals([]);
|
|
};
|
|
|
|
const openModal = (modalName) => {
|
|
if (openModals.includes(modalName)) {
|
|
return;
|
|
}
|
|
captureEventEnabled && captureEvent();
|
|
const modals = [...openModals];
|
|
modals.push(modalName);
|
|
setOpenModals(modals);
|
|
};
|
|
|
|
return (
|
|
<TransactionModalContext.Provider
|
|
value={{
|
|
closeModal,
|
|
closeAllModals,
|
|
currentModal: openModals[openModals.length - 1],
|
|
openModal,
|
|
openModalCount: openModals.length,
|
|
}}
|
|
>
|
|
{children}
|
|
</TransactionModalContext.Provider>
|
|
);
|
|
};
|
|
|
|
export function useTransactionModalContext() {
|
|
return useContext(TransactionModalContext);
|
|
}
|
|
|
|
TransactionModalContextProvider.propTypes = {
|
|
actionKey: PropTypes.string,
|
|
children: PropTypes.node.isRequired,
|
|
methodData: PropTypes.object,
|
|
captureEventEnabled: PropTypes.bool,
|
|
};
|
|
|