2021-11-18 18:54:58 +01:00
|
|
|
import React from 'react';
|
|
|
|
|
2021-12-12 00:26:28 +01:00
|
|
|
import {
|
|
|
|
EDIT_GAS_MODES,
|
|
|
|
PRIORITY_LEVELS,
|
|
|
|
} from '../../../../shared/constants/gas';
|
2021-11-18 18:54:58 +01:00
|
|
|
import { useI18nContext } from '../../../hooks/useI18nContext';
|
2021-11-23 18:46:33 +01:00
|
|
|
import { useTransactionModalContext } from '../../../contexts/transaction-modal';
|
2022-01-22 01:23:02 +01:00
|
|
|
import Box from '../../ui/box';
|
2021-11-23 19:18:44 +01:00
|
|
|
import ErrorMessage from '../../ui/error-message';
|
2021-11-18 18:54:58 +01:00
|
|
|
import I18nValue from '../../ui/i18n-value';
|
2021-11-23 17:52:50 +01:00
|
|
|
import Popover from '../../ui/popover';
|
|
|
|
import Typography from '../../ui/typography/typography';
|
2021-11-18 18:54:58 +01:00
|
|
|
|
2021-12-03 16:59:48 +01:00
|
|
|
import { COLORS, TYPOGRAPHY } from '../../../helpers/constants/design-system';
|
2021-11-23 19:18:44 +01:00
|
|
|
import { INSUFFICIENT_FUNDS_ERROR_KEY } from '../../../helpers/constants/error-keys';
|
|
|
|
import { useGasFeeContext } from '../../../contexts/gasFee';
|
2022-01-06 03:47:26 +01:00
|
|
|
import AppLoadingSpinner from '../app-loading-spinner';
|
2021-11-18 18:54:58 +01:00
|
|
|
import EditGasItem from './edit-gas-item';
|
2021-12-06 17:02:23 +01:00
|
|
|
import NetworkStatistics from './network-statistics';
|
2021-11-18 18:54:58 +01:00
|
|
|
|
2021-11-23 18:46:33 +01:00
|
|
|
const EditGasFeePopover = () => {
|
2021-12-12 00:26:28 +01:00
|
|
|
const { balanceError, editGasMode } = useGasFeeContext();
|
2021-11-18 18:54:58 +01:00
|
|
|
const t = useI18nContext();
|
2022-01-06 03:47:26 +01:00
|
|
|
const {
|
|
|
|
closeAllModals,
|
|
|
|
closeModal,
|
|
|
|
currentModal,
|
|
|
|
openModalCount,
|
|
|
|
} = useTransactionModalContext();
|
2021-11-23 18:46:33 +01:00
|
|
|
|
2022-01-06 23:56:51 +01:00
|
|
|
if (currentModal !== 'editGasFee') {
|
|
|
|
return null;
|
|
|
|
}
|
2021-11-18 18:54:58 +01:00
|
|
|
|
2022-01-06 03:47:26 +01:00
|
|
|
let popupTitle = 'editGasFeeModalTitle';
|
|
|
|
if (editGasMode === EDIT_GAS_MODES.CANCEL) {
|
|
|
|
popupTitle = 'editCancellationGasFeeModalTitle';
|
|
|
|
} else if (editGasMode === EDIT_GAS_MODES.SPEED_UP) {
|
|
|
|
popupTitle = 'editSpeedUpEditGasFeeModalTitle';
|
|
|
|
}
|
|
|
|
|
2021-11-18 18:54:58 +01:00
|
|
|
return (
|
|
|
|
<Popover
|
2022-01-06 03:47:26 +01:00
|
|
|
title={t(popupTitle)}
|
|
|
|
// below logic ensures that back button is visible only if there are other modals open before this.
|
|
|
|
onBack={openModalCount === 1 ? undefined : () => closeModal('editGasFee')}
|
|
|
|
onClose={closeAllModals}
|
2021-11-18 18:54:58 +01:00
|
|
|
className="edit-gas-fee-popover"
|
|
|
|
>
|
|
|
|
<>
|
2022-01-06 03:47:26 +01:00
|
|
|
<AppLoadingSpinner />
|
2021-11-18 18:54:58 +01:00
|
|
|
<div className="edit-gas-fee-popover__wrapper">
|
|
|
|
<div className="edit-gas-fee-popover__content">
|
2022-01-22 01:23:02 +01:00
|
|
|
<Box>
|
|
|
|
{balanceError && (
|
|
|
|
<ErrorMessage errorKey={INSUFFICIENT_FUNDS_ERROR_KEY} />
|
|
|
|
)}
|
|
|
|
<div className="edit-gas-fee-popover__content__header">
|
|
|
|
<span className="edit-gas-fee-popover__content__header-option">
|
|
|
|
<I18nValue messageKey="gasOption" />
|
|
|
|
</span>
|
|
|
|
<span className="edit-gas-fee-popover__content__header-time">
|
|
|
|
{editGasMode !== EDIT_GAS_MODES.SWAPS && (
|
|
|
|
<I18nValue messageKey="time" />
|
|
|
|
)}
|
|
|
|
</span>
|
|
|
|
<span className="edit-gas-fee-popover__content__header-max-fee">
|
|
|
|
<I18nValue messageKey="maxFee" />
|
|
|
|
</span>
|
|
|
|
</div>
|
|
|
|
{(editGasMode === EDIT_GAS_MODES.CANCEL ||
|
|
|
|
editGasMode === EDIT_GAS_MODES.SPEED_UP) && (
|
|
|
|
<EditGasItem
|
|
|
|
priorityLevel={PRIORITY_LEVELS.TEN_PERCENT_INCREASED}
|
|
|
|
/>
|
|
|
|
)}
|
|
|
|
{editGasMode === EDIT_GAS_MODES.MODIFY_IN_PLACE && (
|
|
|
|
<EditGasItem priorityLevel={PRIORITY_LEVELS.LOW} />
|
|
|
|
)}
|
|
|
|
<EditGasItem priorityLevel={PRIORITY_LEVELS.MEDIUM} />
|
|
|
|
<EditGasItem priorityLevel={PRIORITY_LEVELS.HIGH} />
|
|
|
|
<div className="edit-gas-fee-popover__content__separator" />
|
|
|
|
{editGasMode === EDIT_GAS_MODES.MODIFY_IN_PLACE && (
|
|
|
|
<EditGasItem priorityLevel={PRIORITY_LEVELS.DAPP_SUGGESTED} />
|
|
|
|
)}
|
|
|
|
<EditGasItem priorityLevel={PRIORITY_LEVELS.CUSTOM} />
|
|
|
|
</Box>
|
|
|
|
<Box>
|
|
|
|
<NetworkStatistics />
|
|
|
|
<Typography
|
|
|
|
className="edit-gas-fee-popover__know-more"
|
|
|
|
align="center"
|
|
|
|
color={COLORS.UI4}
|
|
|
|
tag={TYPOGRAPHY.Paragraph}
|
|
|
|
variant={TYPOGRAPHY.H7}
|
|
|
|
>
|
|
|
|
<I18nValue
|
|
|
|
messageKey="learmMoreAboutGas"
|
|
|
|
options={[
|
|
|
|
<a
|
|
|
|
key="learnMoreLink"
|
|
|
|
target="_blank"
|
|
|
|
rel="noopener noreferrer"
|
|
|
|
href="https://metamask.zendesk.com/hc/en-us/articles/4404600179227-User-Guide-Gas"
|
|
|
|
>
|
|
|
|
<I18nValue messageKey="learnMore" />
|
|
|
|
</a>,
|
|
|
|
]}
|
|
|
|
/>
|
|
|
|
</Typography>
|
|
|
|
</Box>
|
2021-11-18 18:54:58 +01:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</>
|
|
|
|
</Popover>
|
|
|
|
);
|
|
|
|
};
|
|
|
|
|
|
|
|
export default EditGasFeePopover;
|