Skip to content

Commit 36b6f55

Browse files
authored
Merge branch 'main' into feat-tmcu-443-splash-screen-animation
2 parents 74a3f1c + 5f18700 commit 36b6f55

35 files changed

Lines changed: 787 additions & 2438 deletions

File tree

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ jobs:
214214
NODE_OPTIONS: --max_old_space_size=12288
215215

216216
- name: Check bundle size
217-
run: ./scripts/js-bundle-stats.sh ios/main.jsbundle 54
217+
run: ./scripts/js-bundle-stats.sh ios/main.jsbundle 55
218218

219219
- name: Upload iOS bundle
220220
uses: actions/upload-artifact@v4

app/components/Nav/Main/MainNavigator.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1132,7 +1132,10 @@ const MainNavigator = () => {
11321132
<Stack.Screen
11331133
name={Routes.BRIDGE.MODALS.ROOT}
11341134
component={BridgeModalStack}
1135-
options={clearStackNavigatorOptionsWithTransitionAnimation}
1135+
options={{
1136+
...clearStackNavigatorOptionsWithTransitionAnimation,
1137+
presentation: 'transparentModal',
1138+
}}
11361139
/>
11371140
<Stack.Screen
11381141
name="StakeScreens"

app/components/Nav/Main/__snapshots__/MainNavigator.test.tsx.snap

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,7 @@ exports[`MainNavigator Tab Bar Visibility hides tab bar when browser is active 1
245245
},
246246
"cardStyleInterpolator": [Function],
247247
"headerShown": false,
248+
"presentation": "transparentModal",
248249
}
249250
}
250251
/>
@@ -663,6 +664,7 @@ exports[`MainNavigator Tab Bar Visibility shows tab bar when not in browser 1`]
663664
},
664665
"cardStyleInterpolator": [Function],
665666
"headerShown": false,
667+
"presentation": "transparentModal",
666668
}
667669
}
668670
/>
@@ -1081,6 +1083,7 @@ exports[`MainNavigator matches rendered snapshot 1`] = `
10811083
},
10821084
"cardStyleInterpolator": [Function],
10831085
"headerShown": false,
1086+
"presentation": "transparentModal",
10841087
}
10851088
}
10861089
/>

app/components/UI/AssetOverview/TokenDetails/TokenDetails.test.tsx

Lines changed: 14 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -151,17 +151,10 @@ describe('TokenDetails', () => {
151151
useSelectorSpy.mockImplementation((selectorOrCallback) => {
152152
const SELECTOR_MOCKS = {
153153
selectIsEvmNetworkSelected: true,
154-
selectEvmTokenMarketData: {
155-
marketData:
156-
mockTokenMarketDataByChainId['0x1'][
157-
'0x6B175474E89094C44Da98b954EedeAC495271d0F'
158-
],
159-
metadata: {
160-
decimals: 18,
161-
conversionRate: 2712.15,
162-
aggregators: ['Metamask', 'Coinmarketcap'],
163-
},
164-
},
154+
selectTokenMarketData:
155+
mockTokenMarketDataByChainId['0x1'][
156+
'0x6B175474E89094C44Da98b954EedeAC495271d0F'
157+
],
165158
selectTokenMarketDataByChainId: {},
166159
selectConversionRateBySymbol: mockExchangeRate,
167160
selectNativeCurrencyByChainId: 'ETH',
@@ -242,17 +235,6 @@ describe('TokenDetails', () => {
242235
selectConversionRateBySymbol: mockExchangeRate,
243236
selectNativeCurrencyByChainId: 'ETH',
244237
selectMultichainAssetsRates: {},
245-
selectEvmTokenMarketData: {
246-
marketData:
247-
mockTokenMarketDataByChainId['0x1'][
248-
'0x6b175474e89094c44da98b954eedeac495271d0f'
249-
],
250-
metadata: {
251-
decimals: 18,
252-
conversionRate: 2712.15,
253-
aggregators: ['Metamask', 'Coinmarketcap'],
254-
},
255-
},
256238
} as const;
257239

258240
useSelectorSpy.mockImplementation((selectorOrCallback) => {
@@ -301,16 +283,10 @@ describe('TokenDetails', () => {
301283
const useSelectorSpy = jest.spyOn(reactRedux, 'useSelector');
302284
useSelectorSpy.mockImplementation((selectorOrCallback) => {
303285
const SELECTOR_MOCKS = {
304-
selectEvmTokenMarketData: {
305-
marketData:
306-
mockTokenMarketDataByChainId['0x1'][
307-
'0x6B175474E89094C44Da98b954EedeAC495271d0F'
308-
],
309-
// null metadata ensures:
310-
// 1. tokenList is null (no aggregators array in metadata)
311-
// 2. tokenMetadata is null (so tokenMetadata condition is false)
312-
metadata: null,
313-
},
286+
selectTokenMarketData:
287+
mockTokenMarketDataByChainId['0x1'][
288+
'0x6B175474E89094C44Da98b954EedeAC495271d0F'
289+
],
314290
selectConversionRateBySymbol: mockExchangeRate,
315291
selectNativeCurrencyByChainId: 'ETH',
316292
} as const;
@@ -408,7 +384,7 @@ describe('TokenDetails', () => {
408384

409385
jest.spyOn(reactRedux, 'useSelector').mockImplementation(
410386
mockUseSelectorImplementation({
411-
selectEvmTokenMarketData: null,
387+
selectTokenMarketData: null,
412388
selectConversionRateBySymbol: mockExchangeRate,
413389
selectNativeCurrencyByChainId: 'ETH',
414390
isEvmNetwork: true,
@@ -436,7 +412,7 @@ describe('TokenDetails', () => {
436412

437413
jest.spyOn(reactRedux, 'useSelector').mockImplementation(
438414
mockUseSelectorImplementation({
439-
selectEvmTokenMarketData: null,
415+
selectTokenMarketData: null,
440416
isEvmNetwork: false,
441417
}),
442418
);
@@ -457,11 +433,9 @@ describe('TokenDetails', () => {
457433

458434
jest.spyOn(reactRedux, 'useSelector').mockImplementation(
459435
mockUseSelectorImplementation({
460-
selectEvmTokenMarketData: {
461-
marketData: {
462-
price: 0.0005,
463-
marketCap: '5000000',
464-
},
436+
selectTokenMarketData: {
437+
price: 0.0005,
438+
marketCap: '5000000',
465439
},
466440
selectConversionRateBySymbol: mockExchangeRate,
467441
selectNativeCurrencyByChainId: 'ETH',
@@ -483,7 +457,7 @@ describe('TokenDetails', () => {
483457

484458
jest.spyOn(reactRedux, 'useSelector').mockImplementation(
485459
mockUseSelectorImplementation({
486-
selectEvmTokenMarketData: null,
460+
selectTokenMarketData: null,
487461
multichainRates: {
488462
[mockSolanaToken.address]: {
489463
rate: 0.431111,

app/components/UI/AssetOverview/TokenDetails/TokenDetails.tsx

Lines changed: 11 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import {
2727
isAssetFromSearch,
2828
selectTokenDisplayData,
2929
} from '../../../../selectors/tokenSearchDiscoveryDataController';
30-
import { selectEvmTokenMarketData } from '../../../../selectors/multichain/evm';
30+
import { selectTokenMarketData } from '../../../../selectors/tokenRatesController';
3131
///: BEGIN:ONLY_INCLUDE_IF(keyring-snaps)
3232
import { selectMultichainAssetsRates } from '../../../../selectors/multichain';
3333
///: END:ONLY_INCLUDE_IF
@@ -59,11 +59,6 @@ interface TokenDetailsProps {
5959
asset: TokenI;
6060
}
6161

62-
interface EvmMarketData {
63-
metadata?: Record<string, string | number | string[]>;
64-
marketData?: MarketDataDetails;
65-
}
66-
6762
const TokenDetails: React.FC<TokenDetailsProps> = ({ asset }) => {
6863
// For non evm assets, the resultChainId is equal to the asset.chainId; while for evm assets; the resultChainId === "eip155:1" !== asset.chainId
6964
const resultChainId = formatChainIdToCaip(asset.chainId as Hex);
@@ -96,17 +91,15 @@ const TokenDetails: React.FC<TokenDetailsProps> = ({ asset }) => {
9691
///: END:ONLY_INCLUDE_IF
9792

9893
const evmMarketData = useSelector((state: RootState) =>
99-
!isNonEvmAsset
100-
? selectEvmTokenMarketData(state, {
101-
chainId: asset.chainId as Hex,
102-
tokenAddress: asset.address,
103-
})
94+
!isNonEvmAsset && tokenContractAddress
95+
? (selectTokenMarketData(state)?.[asset.chainId as Hex]?.[
96+
tokenContractAddress as Hex
97+
] ?? null)
10498
: null,
105-
) as EvmMarketData | null;
99+
) as MarketDataDetails | null;
106100

107101
const conversionRate = isAssetFromSearch(asset) ? 1 : conversionRateBySymbol;
108102

109-
let tokenMetadata;
110103
let cachedMarketData: MarketDataDetails | undefined;
111104

112105
if (
@@ -116,11 +109,9 @@ const TokenDetails: React.FC<TokenDetailsProps> = ({ asset }) => {
116109
) {
117110
// Search results have market data
118111
cachedMarketData = tokenSearchResult.price;
119-
tokenMetadata = tokenSearchResult.token;
120112
} else {
121-
tokenMetadata = !isNonEvmAsset ? evmMarketData?.metadata : null;
122113
cachedMarketData = !isNonEvmAsset
123-
? evmMarketData?.marketData
114+
? (evmMarketData ?? undefined)
124115
: (nonEvmMarketData as MarketDataDetails | undefined);
125116
}
126117

@@ -181,14 +172,8 @@ const TokenDetails: React.FC<TokenDetailsProps> = ({ asset }) => {
181172
const needsConversion = isUsingCachedData && !isNonEvmAsset;
182173

183174
const tokenDetails = useMemo(
184-
() =>
185-
getTokenDetails(
186-
asset,
187-
isNonEvmAsset,
188-
tokenContractAddress,
189-
tokenMetadata as Record<string, string | number | string[]>,
190-
),
191-
[asset, isNonEvmAsset, tokenContractAddress, tokenMetadata],
175+
() => getTokenDetails(asset, isNonEvmAsset, tokenContractAddress),
176+
[asset, isNonEvmAsset, tokenContractAddress],
192177
);
193178

194179
const marketDetails = useMemo(() => {
@@ -231,13 +216,10 @@ const TokenDetails: React.FC<TokenDetailsProps> = ({ asset }) => {
231216
}, [marketData, currentCurrency, needsConversion, conversionRate]);
232217

233218
const hasAddressAndDecimals =
234-
tokenDetails.contractAddress && tokenDetails.tokenDecimal;
219+
tokenDetails.contractAddress !== null && tokenDetails.tokenDecimal !== null;
235220
return (
236221
<View style={styles.tokenDetailsContainer}>
237-
{(asset.isETH ||
238-
tokenMetadata ||
239-
isNonEvmAsset ||
240-
hasAddressAndDecimals) && (
222+
{(asset.isETH || isNonEvmAsset || hasAddressAndDecimals) && (
241223
<TokenDetailsList tokenDetails={tokenDetails} />
242224
)}
243225
{marketData && marketDetails && (

0 commit comments

Comments
 (0)