ci(release): publish latest release

parent 3fb4d7cc
We are back with some small updates! Here’s the latest: We are back with a new feature:
Fiat Offramp: Users can now sell their crypto back into cash and have it deposit to their bank account, centralized exchange account, and more!
Other changes:
- More robust dapp information on Activity screen - More robust dapp information on Activity screen
- Reduced onboarding screens for new wallets
- Improved volume-based sorting on our Explore page - Improved volume-based sorting on our Explore page
- Various bug fixes and performance improvements - Various bug fixes and performance improvements
\ No newline at end of file
extension/1.14.0 mobile/1.44.1
\ No newline at end of file \ No newline at end of file
...@@ -89,9 +89,9 @@ if (isCI && datadogPropertiesAvailable && !isE2E) { ...@@ -89,9 +89,9 @@ if (isCI && datadogPropertiesAvailable && !isE2E) {
apply from: "../../../../node_modules/@datadog/mobile-react-native/datadog-sourcemaps.gradle" apply from: "../../../../node_modules/@datadog/mobile-react-native/datadog-sourcemaps.gradle"
} }
def devVersionName = "1.44" def devVersionName = "1.44.1"
def betaVersionName = "1.44" def betaVersionName = "1.44.1"
def prodVersionName = "1.44" def prodVersionName = "1.44.1"
android { android {
ndkVersion rootProject.ext.ndkVersion ndkVersion rootProject.ext.ndkVersion
......
...@@ -2230,7 +2230,7 @@ ...@@ -2230,7 +2230,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
"@loader_path/Frameworks", "@loader_path/Frameworks",
); );
MARKETING_VERSION = 1.44; MARKETING_VERSION = 1.44.1;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG"; OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG";
...@@ -2283,7 +2283,7 @@ ...@@ -2283,7 +2283,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
"@loader_path/Frameworks", "@loader_path/Frameworks",
); );
MARKETING_VERSION = 1.44; MARKETING_VERSION = 1.44.1;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
PRODUCT_BUNDLE_IDENTIFIER = schemes.WidgetsCore; PRODUCT_BUNDLE_IDENTIFIER = schemes.WidgetsCore;
...@@ -2336,7 +2336,7 @@ ...@@ -2336,7 +2336,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
"@loader_path/Frameworks", "@loader_path/Frameworks",
); );
MARKETING_VERSION = 1.44; MARKETING_VERSION = 1.44.1;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
PRODUCT_BUNDLE_IDENTIFIER = schemes.WidgetsCore; PRODUCT_BUNDLE_IDENTIFIER = schemes.WidgetsCore;
...@@ -2389,7 +2389,7 @@ ...@@ -2389,7 +2389,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
"@loader_path/Frameworks", "@loader_path/Frameworks",
); );
MARKETING_VERSION = 1.44; MARKETING_VERSION = 1.44.1;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
PRODUCT_BUNDLE_IDENTIFIER = schemes.WidgetsCore; PRODUCT_BUNDLE_IDENTIFIER = schemes.WidgetsCore;
...@@ -2427,7 +2427,7 @@ ...@@ -2427,7 +2427,7 @@
GCC_C_LANGUAGE_STANDARD = gnu11; GCC_C_LANGUAGE_STANDARD = gnu11;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 15.0; IPHONEOS_DEPLOYMENT_TARGET = 15.0;
MARKETING_VERSION = 1.44; MARKETING_VERSION = 1.44.1;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG"; OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG";
...@@ -2463,7 +2463,7 @@ ...@@ -2463,7 +2463,7 @@
GCC_C_LANGUAGE_STANDARD = gnu11; GCC_C_LANGUAGE_STANDARD = gnu11;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 15.0; IPHONEOS_DEPLOYMENT_TARGET = 15.0;
MARKETING_VERSION = 1.44; MARKETING_VERSION = 1.44.1;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
PRODUCT_BUNDLE_IDENTIFIER = schemes.WidgetsCoreTests; PRODUCT_BUNDLE_IDENTIFIER = schemes.WidgetsCoreTests;
...@@ -2498,7 +2498,7 @@ ...@@ -2498,7 +2498,7 @@
GCC_C_LANGUAGE_STANDARD = gnu11; GCC_C_LANGUAGE_STANDARD = gnu11;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 15.0; IPHONEOS_DEPLOYMENT_TARGET = 15.0;
MARKETING_VERSION = 1.44; MARKETING_VERSION = 1.44.1;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
PRODUCT_BUNDLE_IDENTIFIER = schemes.WidgetsCoreTests; PRODUCT_BUNDLE_IDENTIFIER = schemes.WidgetsCoreTests;
...@@ -2533,7 +2533,7 @@ ...@@ -2533,7 +2533,7 @@
GCC_C_LANGUAGE_STANDARD = gnu11; GCC_C_LANGUAGE_STANDARD = gnu11;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 15.0; IPHONEOS_DEPLOYMENT_TARGET = 15.0;
MARKETING_VERSION = 1.44; MARKETING_VERSION = 1.44.1;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
PRODUCT_BUNDLE_IDENTIFIER = schemes.WidgetsCoreTests; PRODUCT_BUNDLE_IDENTIFIER = schemes.WidgetsCoreTests;
...@@ -2580,7 +2580,7 @@ ...@@ -2580,7 +2580,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
"@executable_path/../../Frameworks", "@executable_path/../../Frameworks",
); );
MARKETING_VERSION = 1.44; MARKETING_VERSION = 1.44.1;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG"; OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG";
...@@ -2626,7 +2626,7 @@ ...@@ -2626,7 +2626,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
"@executable_path/../../Frameworks", "@executable_path/../../Frameworks",
); );
MARKETING_VERSION = 1.44; MARKETING_VERSION = 1.44.1;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
PRODUCT_BUNDLE_IDENTIFIER = com.uniswap.mobile.widgets; PRODUCT_BUNDLE_IDENTIFIER = com.uniswap.mobile.widgets;
...@@ -2672,7 +2672,7 @@ ...@@ -2672,7 +2672,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
"@executable_path/../../Frameworks", "@executable_path/../../Frameworks",
); );
MARKETING_VERSION = 1.44; MARKETING_VERSION = 1.44.1;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
PRODUCT_BUNDLE_IDENTIFIER = com.uniswap.mobile.dev.widgets; PRODUCT_BUNDLE_IDENTIFIER = com.uniswap.mobile.dev.widgets;
...@@ -2718,7 +2718,7 @@ ...@@ -2718,7 +2718,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
"@executable_path/../../Frameworks", "@executable_path/../../Frameworks",
); );
MARKETING_VERSION = 1.44; MARKETING_VERSION = 1.44.1;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
PRODUCT_BUNDLE_IDENTIFIER = com.uniswap.mobile.beta.widgets; PRODUCT_BUNDLE_IDENTIFIER = com.uniswap.mobile.beta.widgets;
...@@ -2760,7 +2760,7 @@ ...@@ -2760,7 +2760,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
"@executable_path/../../Frameworks", "@executable_path/../../Frameworks",
); );
MARKETING_VERSION = 1.44; MARKETING_VERSION = 1.44.1;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG"; OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG";
...@@ -2803,7 +2803,7 @@ ...@@ -2803,7 +2803,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
"@executable_path/../../Frameworks", "@executable_path/../../Frameworks",
); );
MARKETING_VERSION = 1.44; MARKETING_VERSION = 1.44.1;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
PRODUCT_BUNDLE_IDENTIFIER = com.uniswap.mobile.WidgetIntentExtension; PRODUCT_BUNDLE_IDENTIFIER = com.uniswap.mobile.WidgetIntentExtension;
...@@ -2846,7 +2846,7 @@ ...@@ -2846,7 +2846,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
"@executable_path/../../Frameworks", "@executable_path/../../Frameworks",
); );
MARKETING_VERSION = 1.44; MARKETING_VERSION = 1.44.1;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
PRODUCT_BUNDLE_IDENTIFIER = com.uniswap.mobile.dev.WidgetIntentExtension; PRODUCT_BUNDLE_IDENTIFIER = com.uniswap.mobile.dev.WidgetIntentExtension;
...@@ -2889,7 +2889,7 @@ ...@@ -2889,7 +2889,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
"@executable_path/../../Frameworks", "@executable_path/../../Frameworks",
); );
MARKETING_VERSION = 1.44; MARKETING_VERSION = 1.44.1;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
PRODUCT_BUNDLE_IDENTIFIER = com.uniswap.mobile.beta.WidgetIntentExtension; PRODUCT_BUNDLE_IDENTIFIER = com.uniswap.mobile.beta.WidgetIntentExtension;
...@@ -2925,7 +2925,7 @@ ...@@ -2925,7 +2925,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.44; MARKETING_VERSION = 1.44.1;
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
"$(inherited)", "$(inherited)",
"-ObjC", "-ObjC",
...@@ -2963,7 +2963,7 @@ ...@@ -2963,7 +2963,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.44; MARKETING_VERSION = 1.44.1;
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
"$(inherited)", "$(inherited)",
"-ObjC", "-ObjC",
...@@ -3164,7 +3164,7 @@ ...@@ -3164,7 +3164,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
"@executable_path/../../Frameworks", "@executable_path/../../Frameworks",
); );
MARKETING_VERSION = 1.44; MARKETING_VERSION = 1.44.1;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG"; OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG";
...@@ -3210,7 +3210,7 @@ ...@@ -3210,7 +3210,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
"@executable_path/../../Frameworks", "@executable_path/../../Frameworks",
); );
MARKETING_VERSION = 1.44; MARKETING_VERSION = 1.44.1;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
PRODUCT_BUNDLE_IDENTIFIER = com.uniswap.mobile.OneSignalNotificationServiceExtension; PRODUCT_BUNDLE_IDENTIFIER = com.uniswap.mobile.OneSignalNotificationServiceExtension;
...@@ -3322,7 +3322,7 @@ ...@@ -3322,7 +3322,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.44; MARKETING_VERSION = 1.44.1;
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
"$(inherited)", "$(inherited)",
"-ObjC", "-ObjC",
...@@ -3394,7 +3394,7 @@ ...@@ -3394,7 +3394,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
"@executable_path/../../Frameworks", "@executable_path/../../Frameworks",
); );
MARKETING_VERSION = 1.44; MARKETING_VERSION = 1.44.1;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
PRODUCT_BUNDLE_IDENTIFIER = com.uniswap.mobile.beta.OneSignalNotificationServiceExtension; PRODUCT_BUNDLE_IDENTIFIER = com.uniswap.mobile.beta.OneSignalNotificationServiceExtension;
...@@ -3506,7 +3506,7 @@ ...@@ -3506,7 +3506,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.44; MARKETING_VERSION = 1.44.1;
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
"$(inherited)", "$(inherited)",
"-ObjC", "-ObjC",
...@@ -3578,7 +3578,7 @@ ...@@ -3578,7 +3578,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
"@executable_path/../../Frameworks", "@executable_path/../../Frameworks",
); );
MARKETING_VERSION = 1.44; MARKETING_VERSION = 1.44.1;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
PRODUCT_BUNDLE_IDENTIFIER = com.uniswap.mobile.dev.OneSignalNotificationServiceExtension; PRODUCT_BUNDLE_IDENTIFIER = com.uniswap.mobile.dev.OneSignalNotificationServiceExtension;
......
...@@ -208,16 +208,6 @@ exports[`AccountHeader renders correctly 1`] = ` ...@@ -208,16 +208,6 @@ exports[`AccountHeader renders correctly 1`] = `
} }
> >
<View <View
collapsable={false}
forwardedRef={[Function]}
jestAnimatedStyle={
{
"value": {
"opacity": 0,
"width": 0,
},
}
}
style={ style={
{ {
"flexDirection": "row", "flexDirection": "row",
......
import { TokenRankingsResponse, TokenStats } from '@uniswap/client-explore/dist/uniswap/explore/v1/service_pb' import { TokenRankingsResponse, TokenRankingsStat } from '@uniswap/client-explore/dist/uniswap/explore/v1/service_pb'
import React, { useCallback, useEffect, useState } from 'react' import React, { useCallback, useEffect, useState } from 'react'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import { ListRenderItem, ListRenderItemInfo, StyleSheet } from 'react-native' import { ListRenderItem, ListRenderItemInfo, StyleSheet } from 'react-native'
...@@ -229,24 +229,24 @@ const tokenKey = (token: TokenItemDataWithMetadata, index: number): string => { ...@@ -229,24 +229,24 @@ const tokenKey = (token: TokenItemDataWithMetadata, index: number): string => {
}-${index}` }-${index}`
} }
function tokenStatsToTokenItemData(tokenStat: TokenStats): TokenItemData | null { function tokenRankingStatsToTokenItemData(tokenRankingStat: TokenRankingsStat): TokenItemData | null {
const formattedChain = fromGraphQLChain(tokenStat.chain) const formattedChain = fromGraphQLChain(tokenRankingStat.chain)
if (!formattedChain) { if (!formattedChain) {
return null return null
} }
return { return {
name: tokenStat.name ?? '', name: tokenRankingStat.name ?? '',
logoUrl: tokenStat.logo ?? '', logoUrl: tokenRankingStat.logo ?? '',
chainId: formattedChain, chainId: formattedChain,
address: tokenStat.address, address: tokenRankingStat.address,
symbol: tokenStat.symbol ?? '', symbol: tokenRankingStat.symbol ?? '',
price: tokenStat.price?.value, price: tokenRankingStat.price?.value,
marketCap: tokenStat.fullyDilutedValuation?.value, marketCap: tokenRankingStat.fullyDilutedValuation?.value,
pricePercentChange24h: tokenStat.pricePercentChange1Day?.value, pricePercentChange24h: tokenRankingStat.pricePercentChange1Day?.value,
volume24h: tokenStat.volume1Day?.value, volume24h: tokenRankingStat.volume1Day?.value,
totalValueLocked: tokenStat.volume1Day?.value, totalValueLocked: tokenRankingStat.totalValueLocked?.value,
} }
} }
...@@ -290,9 +290,9 @@ function useTokenItems( ...@@ -290,9 +290,9 @@ function useTokenItems(
const tokenMetadataDisplayType = getTokenMetadataDisplayType(orderBy) const tokenMetadataDisplayType = getTokenMetadataDisplayType(orderBy)
const topTokens: TokenItemDataWithMetadata[] | undefined = data.tokenRankings[orderBy]?.tokens?.reduce( const topTokens: TokenItemDataWithMetadata[] | undefined = data.tokenRankings[orderBy]?.tokens?.reduce(
(acc: TokenItemDataWithMetadata[], tokenStat) => { (acc: TokenItemDataWithMetadata[], tokenRankingStat) => {
if (tokenStat) { if (tokenRankingStat) {
const tokenItemData = tokenStatsToTokenItemData(tokenStat) const tokenItemData = tokenRankingStatsToTokenItemData(tokenRankingStat)
if (tokenItemData) { if (tokenItemData) {
acc.push({ tokenItemData, tokenMetadataDisplayType }) acc.push({ tokenItemData, tokenMetadataDisplayType })
} }
......
...@@ -36,8 +36,6 @@ function* _handleOffRampReturnLink(url: URL) { ...@@ -36,8 +36,6 @@ function* _handleOffRampReturnLink(url: URL) {
throw new Error('Missing externalTransactionId or moonpay data in fiat offramp deep link') throw new Error('Missing externalTransactionId or moonpay data in fiat offramp deep link')
} }
sendAnalyticsEvent(FiatOffRampEventName.FiatOffRampWidgetCompleted, { externalTransactionId })
let offRampTransferDetails: OffRampTransferDetailsResponse | undefined let offRampTransferDetails: OffRampTransferDetailsResponse | undefined
try { try {
...@@ -51,6 +49,7 @@ function* _handleOffRampReturnLink(url: URL) { ...@@ -51,6 +49,7 @@ function* _handleOffRampReturnLink(url: URL) {
} catch (error) { } catch (error) {
logger.error(error, { logger.error(error, {
tags: { file: 'handleOffRampReturnLinkSaga', function: 'handleOffRampReturnLink' }, tags: { file: 'handleOffRampReturnLinkSaga', function: 'handleOffRampReturnLink' },
extra: { url: url.toString() },
}) })
throw new Error('Failed to fetch offramp transfer details') throw new Error('Failed to fetch offramp transfer details')
} }
...@@ -62,6 +61,16 @@ function* _handleOffRampReturnLink(url: URL) { ...@@ -62,6 +61,16 @@ function* _handleOffRampReturnLink(url: URL) {
const { tokenAddress, baseCurrencyCode, baseCurrencyAmount, depositWalletAddress, logos, provider, chainId } = const { tokenAddress, baseCurrencyCode, baseCurrencyAmount, depositWalletAddress, logos, provider, chainId } =
offRampTransferDetails offRampTransferDetails
const analyticsProperties = {
cryptoCurrency: baseCurrencyCode,
currencyAmount: baseCurrencyAmount,
serviceProvider: provider,
chainId,
externalTransactionId,
}
sendAnalyticsEvent(FiatOffRampEventName.FiatOffRampWidgetCompleted, analyticsProperties)
const currencyTradeableAsset: TradeableAsset = { const currencyTradeableAsset: TradeableAsset = {
address: tokenAddress, address: tokenAddress,
chainId: Number(chainId) as UniverseChainId, chainId: Number(chainId) as UniverseChainId,
...@@ -72,13 +81,7 @@ function* _handleOffRampReturnLink(url: URL) { ...@@ -72,13 +81,7 @@ function* _handleOffRampReturnLink(url: URL) {
name: provider, name: provider,
logoUrl: logos.lightLogo, logoUrl: logos.lightLogo,
onSubmitCallback: () => { onSubmitCallback: () => {
sendAnalyticsEvent(FiatOffRampEventName.FiatOffRampFundsSent, { sendAnalyticsEvent(FiatOffRampEventName.FiatOffRampFundsSent, analyticsProperties)
cryptoCurrency: baseCurrencyCode,
currencyAmount: baseCurrencyAmount,
serviceProvider: provider,
chainId,
externalTransactionId,
})
}, },
moonpayCurrencyCode: baseCurrencyCode, moonpayCurrencyCode: baseCurrencyCode,
meldCurrencyCode: baseCurrencyCode, meldCurrencyCode: baseCurrencyCode,
......
...@@ -398,12 +398,13 @@ export function FiatOnRampScreen({ navigation }: Props): JSX.Element { ...@@ -398,12 +398,13 @@ export function FiatOnRampScreen({ navigation }: Props): JSX.Element {
const notAvailableInThisRegion = supportedFiatCurrencies?.length === 0 const notAvailableInThisRegion = supportedFiatCurrencies?.length === 0
const { errorText } = useParseFiatOnRampError( const { errorText } = useParseFiatOnRampError({
!notAvailableInThisRegion && quotesError, error: !notAvailableInThisRegion && quotesError,
meldSupportedFiatCurrency.code, currencyCode: meldSupportedFiatCurrency.code,
exceedsBalanceError, tokenCode: quoteCurrency.currencyInfo?.currency.symbol,
quotes?.length === 0, balanceError: exceedsBalanceError,
) noQuotesReturned: quotes?.length === 0,
})
const onSelectionChange = useCallback( const onSelectionChange = useCallback(
(start: number, end: number) => { (start: number, end: number) => {
......
...@@ -51,10 +51,13 @@ export function useHomeScreenState(): { ...@@ -51,10 +51,13 @@ export function useHomeScreenState(): {
const hasNft = !!nftData?.nftBalances?.edges.length const hasNft = !!nftData?.nftBalances?.edges.length
const hasTokenBalance = !!Object.entries(balancesById || {}).length const hasTokenBalance = !!Object.entries(balancesById || {}).length
const hasUsedWalletFromRemote = !!hasTokenBalance || !!hasNft || !!hasActivity const hasUsedWalletFromRemote = hasTokenBalance || hasNft || hasActivity
const dataIsLoading = areBalancesLoading || areNFTsLoading || isActivityLoading
// Note: This is to prevent loading the empty wallet state for an active
// wallet loading tabs for the first time.
const isTabsDataLoaded = !(dataIsLoading && hasUsedWalletFromCache)
const isTabsDataLoaded =
hasUsedWalletFromRemote || (!areBalancesLoading && !areNFTsLoading && !isActivityLoading) || hasUsedWalletFromCache
const hasUsedWallet = hasUsedWalletFromCache || hasUsedWalletFromRemote const hasUsedWallet = hasUsedWalletFromCache || hasUsedWalletFromRemote
useEffect(() => { useEffect(() => {
......
...@@ -273,12 +273,19 @@ export function useFiatOnRampQuotes({ ...@@ -273,12 +273,19 @@ export function useFiatOnRampQuotes({
} }
} }
export function useParseFiatOnRampError( export function useParseFiatOnRampError({
error: unknown, error,
currencyCode: string, currencyCode,
balanceError: boolean, tokenCode,
noQuotesReturned: boolean, balanceError,
): { noQuotesReturned,
}: {
error: unknown
currencyCode: string
tokenCode?: string
balanceError: boolean
noQuotesReturned: boolean
}): {
errorText: string | undefined errorText: string | undefined
} { } {
const { t } = useTranslation() const { t } = useTranslation()
...@@ -289,28 +296,33 @@ export function useParseFiatOnRampError( ...@@ -289,28 +296,33 @@ export function useParseFiatOnRampError(
if (balanceError) { if (balanceError) {
errorText = t('fiatOffRamp.error.balance') errorText = t('fiatOffRamp.error.balance')
} }
if (noQuotesReturned) {
errorText = t('fiatOnRamp.error.noQuotes')
}
if (!error) { if (!error) {
return { errorText } return { errorText }
} }
errorText = noQuotesReturned ? t('fiatOnRamp.error.noQuotes') : t('fiatOnRamp.error.default') errorText = t('fiatOnRamp.error.default')
if (isFiatOnRampApiError(error)) { if (isFiatOnRampApiError(error)) {
const formatMinMaxError = (amount: number, unit?: string): string => {
return (
formatNumberOrString({
value: amount,
type: unit === 'token' ? NumberType.TokenTx : NumberType.FiatStandard,
currencyCode,
}) + (unit === 'token' ? ` ${tokenCode}` : '')
)
}
if (isInvalidRequestAmountTooLow(error)) { if (isInvalidRequestAmountTooLow(error)) {
const formattedAmount = formatNumberOrString({ const { minimumAllowed, unit } = error.data.context
value: error.data.context.minimumAllowed, errorText = t('fiatOnRamp.error.min', { amount: formatMinMaxError(minimumAllowed, unit) })
type: NumberType.FiatStandard,
currencyCode,
})
errorText = t('fiatOnRamp.error.min', { amount: formattedAmount })
} else if (isInvalidRequestAmountTooHigh(error)) { } else if (isInvalidRequestAmountTooHigh(error)) {
const formattedAmount = formatNumberOrString({ const { maximumAllowed, unit } = error.data.context
value: error.data.context.maximumAllowed, errorText = t('fiatOnRamp.error.max', { amount: formatMinMaxError(maximumAllowed, unit) })
type: NumberType.FiatStandard,
currencyCode,
})
errorText = t('fiatOnRamp.error.max', { amount: formattedAmount })
} }
} }
......
...@@ -35,6 +35,7 @@ export interface InvalidRequestAmountTooLow extends FORApiError { ...@@ -35,6 +35,7 @@ export interface InvalidRequestAmountTooLow extends FORApiError {
errorName: 'InvalidRequestAmountTooLow' errorName: 'InvalidRequestAmountTooLow'
context: { context: {
minimumAllowed: number minimumAllowed: number
unit?: 'token' | 'fiat'
} }
} }
} }
...@@ -54,6 +55,7 @@ export interface InvalidRequestAmountTooHigh extends FORApiError { ...@@ -54,6 +55,7 @@ export interface InvalidRequestAmountTooHigh extends FORApiError {
errorName: 'InvalidRequestAmountTooHigh' errorName: 'InvalidRequestAmountTooHigh'
context: { context: {
maximumAllowed: number maximumAllowed: number
unit?: 'token' | 'fiat'
} }
} }
} }
......
...@@ -306,11 +306,7 @@ export type FORTransactionUpdatedProperties = { ...@@ -306,11 +306,7 @@ export type FORTransactionUpdatedProperties = {
serviceProvider: string serviceProvider: string
} }
export type FORWidgetCompletedProperties = ITraceContext & { export type OfframpSendTransactionProperties = ITraceContext & {
externalTransactionId: Maybe<string>
}
export type FORFundsSentProperties = ITraceContext & {
cryptoCurrency: string cryptoCurrency: string
currencyAmount: number currencyAmount: number
serviceProvider: string serviceProvider: string
...@@ -383,8 +379,8 @@ export type UniverseEventProperties = { ...@@ -383,8 +379,8 @@ export type UniverseEventProperties = {
[FiatOffRampEventName.FiatOffRampUnsupportedTokenBack]: FORUnsupportedTokenSelectedProperties [FiatOffRampEventName.FiatOffRampUnsupportedTokenBack]: FORUnsupportedTokenSelectedProperties
[FiatOffRampEventName.FiatOffRampUnsupportedTokenSwap]: FORUnsupportedTokenSelectedProperties [FiatOffRampEventName.FiatOffRampUnsupportedTokenSwap]: FORUnsupportedTokenSelectedProperties
[FiatOffRampEventName.FiatOffRampWidgetOpened]: FORWidgetOpenedProperties [FiatOffRampEventName.FiatOffRampWidgetOpened]: FORWidgetOpenedProperties
[FiatOffRampEventName.FiatOffRampWidgetCompleted]: FORWidgetCompletedProperties [FiatOffRampEventName.FiatOffRampWidgetCompleted]: OfframpSendTransactionProperties
[FiatOffRampEventName.FiatOffRampFundsSent]: FORFundsSentProperties [FiatOffRampEventName.FiatOffRampFundsSent]: OfframpSendTransactionProperties
[FiatOnRampEventName.FiatOnRampAmountEntered]: FORAmountEnteredProperties [FiatOnRampEventName.FiatOnRampAmountEntered]: FORAmountEnteredProperties
[FiatOnRampEventName.FiatOnRampTokenSelected]: FORTokenSelectedProperties [FiatOnRampEventName.FiatOnRampTokenSelected]: FORTokenSelectedProperties
[FiatOnRampEventName.FiatOnRampTransactionUpdated]: FORTransactionUpdatedProperties [FiatOnRampEventName.FiatOnRampTransactionUpdated]: FORTransactionUpdatedProperties
......
import { SharedEventName } from '@uniswap/analytics-events' import { SharedEventName } from '@uniswap/analytics-events'
import { BaseSyntheticEvent, memo, useCallback, useMemo, useRef, useState } from 'react' import { BaseSyntheticEvent, memo, useCallback, useMemo, useState } from 'react'
import { LayoutChangeEvent } from 'react-native' import { LayoutChangeEvent } from 'react-native'
import { useDispatch } from 'react-redux' import { useDispatch } from 'react-redux'
import { AnimatePresence, Flex, Text, TouchableArea, getTokenValue } from 'ui/src' import { AnimatePresence, Flex, Text, TouchableArea, getTokenValue } from 'ui/src'
...@@ -89,7 +89,6 @@ function _AnimatedUnitagDisplayName({ ...@@ -89,7 +89,6 @@ function _AnimatedUnitagDisplayName({
row row
width={viewWidth} width={viewWidth}
opacity={isLayoutReady ? 1 : 0} opacity={isLayoutReady ? 1 : 0}
animation="100ms"
enterStyle={{ opacity: 0 }} enterStyle={{ opacity: 0 }}
exitStyle={{ opacity: 0 }} exitStyle={{ opacity: 0 }}
> >
...@@ -146,27 +145,17 @@ function _AnimatedUnitagDisplayName({ ...@@ -146,27 +145,17 @@ function _AnimatedUnitagDisplayName({
export function useLayoutWidth(pause = false): { export function useLayoutWidth(pause = false): {
width: number width: number
onLayout: (event: LayoutChangeEvent) => void onLayout: (event: LayoutChangeEvent) => void
remeasure: () => void
} { } {
const [width, setWidth] = useState(0) const [width, setWidth] = useState(0)
const isWidthSet = useRef(false)
const onLayout = (event: LayoutChangeEvent): void => { const onLayout = (event: LayoutChangeEvent): void => {
if (pause) { if (pause) {
return return
} }
setWidth(event.nativeEvent.layout.width) setWidth(event.nativeEvent.layout.width)
if (event.nativeEvent.layout.width > 0) {
isWidthSet.current = true
}
} }
const remeasure = useCallback(() => { return { width, onLayout }
setWidth(0)
isWidthSet.current = false
}, [])
return { width, onLayout, remeasure }
} }
export const AnimatedUnitagDisplayName = memo(_AnimatedUnitagDisplayName) export const AnimatedUnitagDisplayName = memo(_AnimatedUnitagDisplayName)
...@@ -23,7 +23,9 @@ export async function fetchFORTransaction( ...@@ -23,7 +23,9 @@ export async function fetchFORTransaction(
forceFetch: boolean, forceFetch: boolean,
activeAccountAddress: Address | null, activeAccountAddress: Address | null,
): Promise<FORTransactionDetails | undefined> { ): Promise<FORTransactionDetails | undefined> {
const isOffRamp = previousTransactionDetails.typeInfo.type === TransactionType.LocalOffRamp const isOffRamp =
previousTransactionDetails.typeInfo.type === TransactionType.LocalOffRamp ||
previousTransactionDetails.typeInfo.type === TransactionType.OffRampSale
const isRecent = dayjs(previousTransactionDetails.addedTime).isAfter( const isRecent = dayjs(previousTransactionDetails.addedTime).isAfter(
dayjs().subtract(FIAT_ONRAMP_FORCE_FETCH_TX_TIMEOUT, 'ms'), dayjs().subtract(FIAT_ONRAMP_FORCE_FETCH_TX_TIMEOUT, 'ms'),
) )
......
...@@ -29,7 +29,7 @@ export function OffRampTransferSummaryItem({ ...@@ -29,7 +29,7 @@ export function OffRampTransferSummaryItem({
<TransactionSummaryLayout <TransactionSummaryLayout
caption={t('fiatOffRamp.summary.total', { caption={t('fiatOffRamp.summary.total', {
cryptoAmount, cryptoAmount,
fiatAmount: cryptoSaleAmount, fiatAmount: destinationTokenAmount === 0 ? destinationTokenSymbol : cryptoSaleAmount,
})} })}
icon={ icon={
<LogoWithTxStatus <LogoWithTxStatus
......
...@@ -88,7 +88,7 @@ export function extractFORTransactionDetails( ...@@ -88,7 +88,7 @@ export function extractFORTransactionDetails(
routing: Routing.CLASSIC, routing: Routing.CLASSIC,
id: transaction.externalSessionId, id: transaction.externalSessionId,
chainId, chainId,
hash: transaction.cryptoDetails.blockchainTransactionId || '', hash: isOffRamp ? '' : transaction.cryptoDetails.blockchainTransactionId || '', // Don't merge offramp transactions
addedTime: new Date(transaction.createdAt).getTime(), addedTime: new Date(transaction.createdAt).getTime(),
status: statusToTransactionInfoStatus(transaction.status), status: statusToTransactionInfoStatus(transaction.status),
from: isOffRamp ? activeAccountAddress : transaction.cryptoDetails.walletAddress, from: isOffRamp ? activeAccountAddress : transaction.cryptoDetails.walletAddress,
......
...@@ -90,7 +90,8 @@ export function SendReviewDetails({ ...@@ -90,7 +90,8 @@ export function SendReviewDetails({
onCloseModal?.() onCloseModal?.()
triggerTransferPendingNotification() triggerTransferPendingNotification()
navigateToAccountActivityList() navigateToAccountActivityList()
}, [navigateToAccountActivityList, onCloseModal, triggerTransferPendingNotification]) fiatOffRampMetaData?.onSubmitCallback?.()
}, [navigateToAccountActivityList, onCloseModal, triggerTransferPendingNotification, fiatOffRampMetaData])
const transferERC20Callback = useSendERC20Callback( const transferERC20Callback = useSendERC20Callback(
txId, txId,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment