-
-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Expand file tree
/
Copy pathgas-fee-token-toast.tsx
More file actions
84 lines (76 loc) · 2.69 KB
/
Copy pathgas-fee-token-toast.tsx
File metadata and controls
84 lines (76 loc) · 2.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import { useContext, useEffect, useRef } from 'react';
import {
ToastContext,
ToastVariants,
ButtonIconVariant,
} from '../../../../../../component-library/components/Toast';
import { strings } from '../../../../../../../locales/i18n';
import { TransactionType } from '@metamask/transaction-controller';
import { Hex } from '@metamask/utils';
import { NATIVE_TOKEN_ADDRESS } from '../../../constants/tokens';
import {
useGasFeeToken,
useSelectedGasFeeToken,
} from '../../../hooks/gas/useGasFeeToken';
import { useTransactionMetadataRequest } from '../../../hooks/transactions/useTransactionMetadataRequest';
import { IconName } from '../../../../../../component-library/components/Icons/Icon';
import { useTokenWithBalance } from '../../../hooks/tokens/useTokenWithBalance';
import { getNetworkImageSource } from '../../../../../../util/networks';
import { hasTransactionType } from '../../../utils/transaction';
const IGNORED_TRANSACTION_TYPES = [TransactionType.musdConversion];
export function GasFeeTokenToast() {
const transactionMetadata = useTransactionMetadataRequest();
const { chainId } = transactionMetadata || {};
const toastContext = useContext(ToastContext);
const toast = toastContext?.toastRef?.current;
const nativeGasFeeToken = useGasFeeToken({
tokenAddress: NATIVE_TOKEN_ADDRESS,
});
const gasFeeToken = useSelectedGasFeeToken() ?? nativeGasFeeToken;
const prevRef = useRef(NATIVE_TOKEN_ADDRESS);
const tokenSelected = useTokenWithBalance(
gasFeeToken?.tokenAddress,
chainId as Hex,
);
const networkImageSource = getNetworkImageSource({
chainId: chainId ?? '0x1',
});
const isIgnoredType = hasTransactionType(
transactionMetadata,
IGNORED_TRANSACTION_TYPES,
);
useEffect(() => {
if (!toast || !gasFeeToken || !transactionMetadata || isIgnoredType) return;
if (gasFeeToken.tokenAddress === prevRef.current) return;
prevRef.current = gasFeeToken.tokenAddress;
toast.showToast({
labelOptions: [
{
label: `${strings('gas_fee_token_toast.message')}${gasFeeToken.symbol}.`,
isBold: true,
},
],
variant: ToastVariants.Network,
hasNoTimeout: false,
customBottomOffset: 24, // Add custom offset to avoid overlapping with confirmation buttons
networkImageSource: tokenSelected?.image
? { uri: tokenSelected.image }
: networkImageSource,
closeButtonOptions: {
variant: ButtonIconVariant.Icon,
iconName: IconName.Close,
onPress: () => {
toast?.closeToast();
},
},
});
}, [
gasFeeToken,
tokenSelected,
toast,
networkImageSource,
transactionMetadata,
isIgnoredType,
]);
return null;
}