Skip to content

Commit b427bfa

Browse files
committed
Add token
1 parent ef915e4 commit b427bfa

File tree

4 files changed

+49
-16
lines changed

4 files changed

+49
-16
lines changed

app/components/Views/confirmations/components/info/predict-withdraw-info/predict-withdraw-info.tsx

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,21 @@ import { strings } from '../../../../../../../locales/i18n';
33
import useNavbar from '../../../hooks/ui/useNavbar';
44
import { CustomAmountInfo } from '../custom-amount-info';
55
import { PredictWithdrawBalance } from '../../predict-confirmations/predict-withdraw-balance/predict-withdraw-balance';
6-
import { PREDICT_CURRENCY } from '../../../constants/predict';
6+
import { POLYGON_USDCE, PREDICT_CURRENCY } from '../../../constants/predict';
7+
import { useAddToken } from '../../../hooks/tokens/useAddToken';
8+
import { CHAIN_IDS } from '@metamask/transaction-controller';
79

810
export function PredictWithdrawInfo() {
911
useNavbar(strings('confirm.title.predict_withdraw'));
1012

13+
useAddToken({
14+
chainId: CHAIN_IDS.POLYGON,
15+
decimals: POLYGON_USDCE.decimals,
16+
name: POLYGON_USDCE.name,
17+
symbol: POLYGON_USDCE.symbol,
18+
tokenAddress: POLYGON_USDCE.address,
19+
});
20+
1121
return (
1222
<CustomAmountInfo disablePay currency={PREDICT_CURRENCY}>
1323
<PredictWithdrawBalance />

app/components/Views/confirmations/hooks/tokens/useTokenWithBalance.ts

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,29 @@ import { useSelector } from 'react-redux';
33
import { selectSingleTokenByAddressAndChainId } from '../../../../../selectors/tokensController';
44
import { RootState } from '../../../../../reducers';
55
import { selectSingleTokenBalance } from '../../../../../selectors/tokenBalancesController';
6-
import { selectSelectedInternalAccountAddress } from '../../../../../selectors/accountsController';
76
import { toChecksumAddress } from '../../../../../util/address';
87
import { useTokenFiatRate } from './useTokenFiatRates';
98
import { BigNumber } from 'bignumber.js';
109
import { useMemo } from 'react';
1110
import useFiatFormatter from '../../../../UI/SimulationDetails/FiatDisplay/useFiatFormatter';
12-
import { selectAccountBalanceByChainId } from '../../../../../selectors/accountTrackerController';
11+
import { selectAccountsByChainId } from '../../../../../selectors/accountTrackerController';
1312
import { selectConversionRateByChainId } from '../../../../../selectors/currencyRateController';
1413
import { selectTickerByChainId } from '../../../../../selectors/networkController';
1514
import { getNativeTokenAddress } from '../../utils/asset';
15+
import { selectSelectedAccountGroupInternalAccounts } from '../../../../../selectors/multichainAccounts/accountTreeController';
16+
import { selectSelectedInternalAccountAddress } from '../../../../../selectors/accountsController';
1617

1718
export function useTokenWithBalance(tokenAddress: Hex, chainId: Hex) {
1819
const selectedAddress = useSelector(selectSelectedInternalAccountAddress);
20+
21+
const internalAccounts = useSelector(
22+
selectSelectedAccountGroupInternalAccounts,
23+
);
24+
25+
const selectedEvmAddress =
26+
(internalAccounts.find((a) => a.type === 'eip155:eoa')?.address as Hex) ??
27+
selectedAddress;
28+
1929
const fiatFormatter = useFiatFormatter();
2030
const nativeTokenAddress = getNativeTokenAddress(chainId);
2131

@@ -26,7 +36,7 @@ export function useTokenWithBalance(tokenAddress: Hex, chainId: Hex) {
2636
const tokenBalanceResult = useSelector((state: RootState) =>
2737
selectSingleTokenBalance(
2838
state,
29-
selectedAddress as Hex,
39+
selectedEvmAddress,
3040
chainId,
3141
toChecksumAddress(tokenAddress),
3242
),
@@ -38,9 +48,13 @@ export function useTokenWithBalance(tokenAddress: Hex, chainId: Hex) {
3848

3949
const tokenFiatRate = useTokenFiatRate(tokenAddress, chainId);
4050

41-
const nativeBalanceResult = useSelector((state: RootState) =>
42-
selectAccountBalanceByChainId(state, chainId),
43-
);
51+
const accountsByChainId = useSelector(selectAccountsByChainId);
52+
53+
const nativeBalanceResult = Object.entries(
54+
accountsByChainId?.[chainId] ?? {},
55+
).find(
56+
([address]) => address.toLowerCase() === selectedEvmAddress.toLowerCase(),
57+
)?.[1];
4458

4559
const conversionRate = useSelector((state: RootState) =>
4660
selectConversionRateByChainId(state, chainId),

app/selectors/tokensController.test.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ describe('TokensController Selectors', () => {
2323
allTokens: {
2424
'0x1': {
2525
'0xAddress1': [mockToken],
26+
'0xAddress2': [mockToken2],
2627
},
2728
},
2829
allDetectedTokens: {
@@ -241,7 +242,10 @@ describe('TokensController Selectors', () => {
241242

242243
describe('selectAllTokensFlat', () => {
243244
it('returns all tokens as a flat array', () => {
244-
expect(selectAllTokensFlat(mockRootState)).toStrictEqual([mockToken]);
245+
expect(selectAllTokensFlat(mockRootState)).toStrictEqual([
246+
mockToken,
247+
mockToken2,
248+
]);
245249
});
246250

247251
it('returns an empty array if no tokens are present', () => {
@@ -361,10 +365,19 @@ describe('TokensController Selectors', () => {
361365
it('returns undefined if no token exists for the given address and chain ID', () => {
362366
const token = selectSingleTokenByAddressAndChainId(
363367
mockRootState,
364-
'0xAddress1',
368+
'0xToken3',
365369
'0x2',
366370
);
367371
expect(token).toBeUndefined();
368372
});
373+
374+
it('returns token not from selected address', () => {
375+
const token = selectSingleTokenByAddressAndChainId(
376+
mockRootState,
377+
'0xToken2',
378+
'0x1',
379+
);
380+
expect(token).toStrictEqual(mockToken2);
381+
});
369382
});
370383
});

app/selectors/tokensController.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -216,16 +216,12 @@ export const selectTransformedTokens = createSelector(
216216

217217
export const selectSingleTokenByAddressAndChainId = createSelector(
218218
selectAllTokens,
219-
selectSelectedInternalAccountAddress,
220219
(_state: RootState, tokenAddress: Hex) => tokenAddress,
221220
(_state: RootState, _tokenAddress: Hex, chainId: Hex) => chainId,
222-
(allTokens, selectedAddress, tokenAddress, chainId) => {
223-
if (!selectedAddress) return undefined;
224-
225-
const tokensForAddressAndChain =
226-
allTokens[chainId]?.[selectedAddress] ?? [];
221+
(allTokens, tokenAddress, chainId) => {
222+
const chainTokens = Object.values(allTokens[chainId] ?? {}).flat();
227223

228-
return tokensForAddressAndChain.find(
224+
return chainTokens.find(
229225
(token) => token.address.toLowerCase() === tokenAddress.toLowerCase(),
230226
);
231227
},

0 commit comments

Comments
 (0)