ci(release): publish latest release

parent 91d554d4
......@@ -2,5 +2,6 @@ We are back with a large update: Smart wallets are here! Enable smart wallets fr
Other changes:
- When connected to Uniswap Web, you’ll see a new verification check mark so that you know you’re on the right website.
- Users can now enjoy multi-account signing, as well as 1 click Auth support, when connecting to external dapps via WalletConnect
- When connecting to external dapps, users can benefit from better malicious dapp detection.
- Various bug fixes and performance improvements
\ No newline at end of file
extension/1.22.2
\ No newline at end of file
mobile/1.52.2
\ No newline at end of file
......@@ -35,6 +35,7 @@
"react-native-reanimated": "3.16.7",
"react-native-svg": "15.10.1",
"react-native-web": "0.19.13",
"react-player": "2.16.0",
"react-qr-code": "2.0.12",
"react-redux": "8.0.5",
"react-router-dom": "6.10.0",
......
......@@ -2,6 +2,7 @@ import { useApolloClient } from '@apollo/client'
import { SharedEventName } from '@uniswap/analytics-events'
import { memo, useCallback, useEffect, useState } from 'react'
import { useTranslation } from 'react-i18next'
import ReactPlayer from 'react-player'
import { useDispatch, useSelector } from 'react-redux'
import { ActivityTab } from 'src/app/components/tabs/ActivityTab'
import { NftsTab } from 'src/app/components/tabs/NftsTab'
......@@ -43,19 +44,19 @@ import { setSmartWalletConsent } from 'wallet/src/features/wallet/slice'
const MemoizedVideo = memo(() => (
<Flex borderRadius="$rounded12" overflow="hidden" height="auto" maxWidth="100%" aspectRatio="16 / 9">
<video
src={SMART_WALLET_UPGRADE_VIDEO}
<ReactPlayer
url={SMART_WALLET_UPGRADE_VIDEO}
width="100%"
height="100%"
playing={true}
muted={true}
style={{
width: '100%',
height: '100%',
objectFit: 'cover',
}}
autoPlay
muted
fallback={undefined}
/>
</Flex>
))
MemoizedVideo.displayName = 'MemoizedVideo'
export const HomeScreen = memo(function _HomeScreen(): JSX.Element {
......
......@@ -7,8 +7,6 @@ import { navigate } from 'src/app/navigation/state'
import { Flex, Text, getTokenValue, useMedia } from 'ui/src'
import { ArrowDownCircle, Bank, CoinConvert, SendAction } from 'ui/src/components/icons'
import { useEnabledChains } from 'uniswap/src/features/chains/hooks/useEnabledChains'
import { FeatureFlags } from 'uniswap/src/features/gating/flags'
import { useFeatureFlag } from 'uniswap/src/features/gating/hooks'
import { ElementName } from 'uniswap/src/features/telemetry/constants'
import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send'
import { TestnetModeModal } from 'uniswap/src/features/testnets/TestnetModeModal'
......@@ -74,7 +72,6 @@ export const PortfolioActionButtons = memo(function _PortfolioActionButtons(): J
const { t } = useTranslation()
const media = useMedia()
const { isTestnetModeEnabled } = useEnabledChains()
const isFiatOffRampEnabled = useFeatureFlag(FeatureFlags.FiatOffRamp)
const onSendClick = (): void => {
sendAnalyticsEvent(SharedEventName.ELEMENT_CLICKED, {
......@@ -126,11 +123,7 @@ export const PortfolioActionButtons = memo(function _PortfolioActionButtons(): J
/>
<Flex row shrink gap="$spacing8" width={isGrid ? '100%' : '50%'}>
<ActionButton Icon={<CoinConvert />} label={t('home.label.swap')} onClick={onSwapClick} />
<ActionButton
Icon={<Bank />}
label={isFiatOffRampEnabled ? t('home.label.for') : t('home.label.buy')}
onClick={onBuyClick}
/>
<ActionButton Icon={<Bank />} label={t('home.label.buy')} onClick={onBuyClick} />
</Flex>
<Flex row shrink gap="$spacing8" width={isGrid ? '100%' : '50%'}>
<ActionButton Icon={<SendAction />} label={t('home.label.send')} onClick={onSendClick} />
......
......@@ -2,7 +2,7 @@
"manifest_version": 3,
"name": "Uniswap Extension",
"description": "The Uniswap Extension is a self-custody crypto wallet that's built for swapping.",
"version": "1.22.2",
"version": "1.23.0",
"minimum_chrome_version": "116",
"icons": {
"16": "assets/icon16.png",
......
......@@ -71,9 +71,9 @@ if (isCI && datadogPropertiesAvailable) {
apply from: "../../../../node_modules/@datadog/mobile-react-native/datadog-sourcemaps.gradle"
}
def devVersionName = "1.53"
def betaVersionName = "1.53"
def prodVersionName = "1.53"
def devVersionName = "1.52.2"
def betaVersionName = "1.52.2"
def prodVersionName = "1.52.2"
android {
ndkVersion rootProject.ext.ndkVersion
......
......@@ -10,16 +10,17 @@ module.exports = function (api) {
plugins = [
...plugins,
process.env.NODE_ENV === 'test'
? null
: [
'@tamagui/babel-plugin',
{
components: ['ui'],
// experimentalFlattenThemesOnNative: true,
config: '../../packages/ui/src/tamagui.config.ts',
},
],
// Disable compiler to fix mobile theme issues and media queries
// process.env.NODE_ENV === 'test'
// ? null
// : [
// '@tamagui/babel-plugin',
// {
// components: ['ui'],
// // experimentalFlattenThemesOnNative: true,
// config: '../../packages/ui/src/tamagui.config.ts',
// },
// ],
[
'module-resolver',
......
......@@ -2821,7 +2821,7 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MARKETING_VERSION = 1.53;
MARKETING_VERSION = 1.52.2;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG";
......@@ -2874,7 +2874,7 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MARKETING_VERSION = 1.53;
MARKETING_VERSION = 1.52.2;
MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
PRODUCT_BUNDLE_IDENTIFIER = schemes.WidgetsCore;
......@@ -2927,7 +2927,7 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MARKETING_VERSION = 1.53;
MARKETING_VERSION = 1.52.2;
MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
PRODUCT_BUNDLE_IDENTIFIER = schemes.WidgetsCore;
......@@ -2980,7 +2980,7 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MARKETING_VERSION = 1.53;
MARKETING_VERSION = 1.52.2;
MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
PRODUCT_BUNDLE_IDENTIFIER = schemes.WidgetsCore;
......@@ -3018,7 +3018,7 @@
GCC_C_LANGUAGE_STANDARD = gnu11;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 15.1;
MARKETING_VERSION = 1.53;
MARKETING_VERSION = 1.52.2;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG";
......@@ -3054,7 +3054,7 @@
GCC_C_LANGUAGE_STANDARD = gnu11;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 15.1;
MARKETING_VERSION = 1.53;
MARKETING_VERSION = 1.52.2;
MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
PRODUCT_BUNDLE_IDENTIFIER = schemes.WidgetsCoreTests;
......@@ -3089,7 +3089,7 @@
GCC_C_LANGUAGE_STANDARD = gnu11;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 15.1;
MARKETING_VERSION = 1.53;
MARKETING_VERSION = 1.52.2;
MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
PRODUCT_BUNDLE_IDENTIFIER = schemes.WidgetsCoreTests;
......@@ -3124,7 +3124,7 @@
GCC_C_LANGUAGE_STANDARD = gnu11;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 15.1;
MARKETING_VERSION = 1.53;
MARKETING_VERSION = 1.52.2;
MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
PRODUCT_BUNDLE_IDENTIFIER = schemes.WidgetsCoreTests;
......@@ -3171,7 +3171,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.53;
MARKETING_VERSION = 1.52.2;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG";
......@@ -3217,7 +3217,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.53;
MARKETING_VERSION = 1.52.2;
MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
PRODUCT_BUNDLE_IDENTIFIER = com.uniswap.mobile.widgets;
......@@ -3263,7 +3263,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.53;
MARKETING_VERSION = 1.52.2;
MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
PRODUCT_BUNDLE_IDENTIFIER = com.uniswap.mobile.dev.widgets;
......@@ -3309,7 +3309,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.53;
MARKETING_VERSION = 1.52.2;
MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
PRODUCT_BUNDLE_IDENTIFIER = com.uniswap.mobile.beta.widgets;
......@@ -3351,7 +3351,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.53;
MARKETING_VERSION = 1.52.2;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG";
......@@ -3394,7 +3394,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.53;
MARKETING_VERSION = 1.52.2;
MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
PRODUCT_BUNDLE_IDENTIFIER = com.uniswap.mobile.WidgetIntentExtension;
......@@ -3437,7 +3437,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.53;
MARKETING_VERSION = 1.52.2;
MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
PRODUCT_BUNDLE_IDENTIFIER = com.uniswap.mobile.dev.WidgetIntentExtension;
......@@ -3480,7 +3480,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.53;
MARKETING_VERSION = 1.52.2;
MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
PRODUCT_BUNDLE_IDENTIFIER = com.uniswap.mobile.beta.WidgetIntentExtension;
......@@ -3516,7 +3516,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.53;
MARKETING_VERSION = 1.52.2;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
......@@ -3554,7 +3554,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.53;
MARKETING_VERSION = 1.52.2;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
......@@ -3756,7 +3756,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.53;
MARKETING_VERSION = 1.52.2;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG";
......@@ -3801,7 +3801,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.53;
MARKETING_VERSION = 1.52.2;
MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
PRODUCT_BUNDLE_IDENTIFIER = com.uniswap.mobile.OneSignalNotificationServiceExtension;
......@@ -3912,7 +3912,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.53;
MARKETING_VERSION = 1.52.2;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
......@@ -3984,7 +3984,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.53;
MARKETING_VERSION = 1.52.2;
MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
PRODUCT_BUNDLE_IDENTIFIER = com.uniswap.mobile.beta.OneSignalNotificationServiceExtension;
......@@ -4095,7 +4095,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.53;
MARKETING_VERSION = 1.52.2;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
......@@ -4167,7 +4167,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.53;
MARKETING_VERSION = 1.52.2;
MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
PRODUCT_BUNDLE_IDENTIFIER = com.uniswap.mobile.dev.OneSignalNotificationServiceExtension;
......
#!/bin/bash
MAX_SIZE=24
MAX_SIZE=23.5
MAX_BUFFER=0.5
# Check OS type and use appropriate stat command
......
......@@ -175,7 +175,9 @@ export function* handleGetCapabilities({
const detailsMap = delegationStatusResponse.delegationDetails[accountAddress]
if (detailsMap) {
const hasAtLeastOneDelegation = Object.values(detailsMap).some((details) => !!details.currentDelegationAddress)
const hasAtLeastOneDelegation = Object.values(detailsMap).some(
(details) => !!details.currentDelegationAddress && !details.isWalletDelegatedToUniswap,
)
hasNoExistingDelegations = !hasAtLeastOneDelegation
}
......
......@@ -296,7 +296,7 @@ export function HomeScreen(props?: AppStackScreenProp<MobileScreens.Home>): JSX.
}
return (
<Flex borderRadius="$rounded16" width="100%" aspectRatio={16 / 9} overflow="hidden">
<Flex borderRadius="$rounded16" width="100%" aspectRatio={16 / 9} overflow="hidden" mb="$spacing8">
<Video
source={SMART_WALLET_UPGRADE_VIDEO}
poster={SMART_WALLET_UPGRADE_FALLBACK}
......
import { NativeStackScreenProps } from '@react-navigation/native-stack'
import React, { ComponentProps, useCallback } from 'react'
import { Trans, useTranslation } from 'react-i18next'
import { ScrollView } from 'react-native'
import { ScrollView, StyleSheet } from 'react-native'
import Animated, { useAnimatedStyle, withTiming } from 'react-native-reanimated'
import { navigate } from 'src/app/navigation/rootNavigation'
import { OnboardingStackParamList } from 'src/app/navigation/types'
import { OnboardingScreen } from 'src/features/onboarding/OnboardingScreen'
import { Button, Flex, Loader, Text, TouchableArea, useLayoutAnimationOnChange } from 'ui/src'
import {
Button,
Flex,
LinearGradient,
Loader,
Text,
TouchableArea,
useLayoutAnimationOnChange,
useSporeColors,
} from 'ui/src'
import { WalletFilled } from 'ui/src/components/icons'
import { spacing } from 'ui/src/theme'
import { opacify, spacing } from 'ui/src/theme'
import { BaseCard } from 'uniswap/src/components/BaseCard/BaseCard'
import { FeatureFlags } from 'uniswap/src/features/gating/flags'
import { useFeatureFlag } from 'uniswap/src/features/gating/hooks'
......@@ -31,6 +40,7 @@ export function SelectWalletScreen({ navigation, route: { params } }: Props): JS
const { t } = useTranslation()
const { selectImportedAccounts, getImportedAccountsAddresses } = useOnboardingContext()
const importedAddresses = getImportedAccountsAddresses()
const colors = useSporeColors()
const {
importableAccounts,
......@@ -103,39 +113,54 @@ export function SelectWalletScreen({ navigation, route: { params } }: Props): JS
<Loader.Wallets repeat={5} />
</Flex>
) : (
<ScrollView testID={TestID.SelectWalletScreenLoaded}>
<Flex height="$spacing12" />
<Flex gap="$gap12">
{importableAccounts?.map((account, i) => {
const { address, balance } = account
// prevents flickering and incorrect width calculation for long wallet names on Android
// it's not possible to deselect last wallet
if (selectedAddresses.length === 0) {
return null
}
return (
<Flex key={address} px="$spacing16">
<WalletPreviewCard
key={address}
address={address}
balance={balance}
hideSelectionCircle={isOnlyOneAccount}
name={ElementName.WalletCard}
selected={selectedAddresses.includes(address)}
testID={`${TestID.WalletCard}-${i + 1}`}
onSelect={toggleAddressSelection}
/>
</Flex>
)
})}
</Flex>
</ScrollView>
<Flex flexGrow={1} flexShrink={1}>
<LinearGradient
colors={[colors.surface1.val, opacify(0, colors.surface1.val)]}
end={{ x: 0, y: 1 }}
start={{ x: 0, y: 0 }}
style={ListSheet.topGradient}
/>
<ScrollView testID={TestID.SelectWalletScreenLoaded}>
<Flex height="$spacing12" />
<Flex gap="$gap12">
{importableAccounts?.map((account, i) => {
const { address, balance } = account
// prevents flickering and incorrect width calculation for long wallet names on Android
// it's not possible to deselect last wallet
if (selectedAddresses.length === 0) {
return null
}
return (
<Flex key={address} px="$spacing16">
<WalletPreviewCard
key={address}
address={address}
balance={balance}
hideSelectionCircle={isOnlyOneAccount}
name={ElementName.WalletCard}
selected={selectedAddresses.includes(address)}
testID={`${TestID.WalletCard}-${i + 1}`}
onSelect={toggleAddressSelection}
/>
</Flex>
)
})}
</Flex>
</ScrollView>
<LinearGradient
colors={[opacify(0, colors.surface1.val), colors.surface1.val]}
end={{ x: 0, y: 1 }}
start={{ x: 0, y: 0 }}
style={ListSheet.bottomGradient}
/>
</Flex>
)}
<Animated.View
style={[
opacityStyle,
{
marginBottom: spacing.spacing16,
marginTop: spacing.spacing16,
marginHorizontal: spacing.spacing24,
},
]}
......@@ -175,6 +200,24 @@ export function SelectWalletScreen({ navigation, route: { params } }: Props): JS
)
}
const ListSheet = StyleSheet.create({
bottomGradient: {
bottom: 0,
height: spacing.spacing16,
left: 0,
position: 'absolute',
width: '100%',
},
topGradient: {
height: spacing.spacing16,
left: 0,
position: 'absolute',
top: 0,
width: '100%',
zIndex: 1,
},
})
function CustomHighlightText(props: ComponentProps<typeof Text>): JSX.Element {
return <Text variant="buttonLabel4" color="$neutral1" {...props} />
}
import { FlashList } from '@shopify/flash-list'
import React, { useCallback } from 'react'
import { useTranslation } from 'react-i18next'
import { useDispatch } from 'react-redux'
import { useReactNavigationModal } from 'src/components/modals/useReactNavigationModal'
import { Flex, Text, TouchableArea } from 'ui/src'
import { AnimatedBottomSheetFlashList } from 'ui/src/components/AnimatedFlashList/AnimatedFlashList'
import { Check } from 'ui/src/components/icons'
import { Modal } from 'uniswap/src/components/modals/Modal'
import { FiatCurrency, ORDERED_CURRENCIES } from 'uniswap/src/features/fiatCurrency/constants'
......@@ -29,7 +29,11 @@ export function SettingsFiatCurrencyModal(): JSX.Element {
<Text pb="$spacing12" textAlign="center" variant="subheading1">
{t('settings.setting.currency.title')}
</Text>
<FlashList data={ORDERED_CURRENCIES} keyExtractor={(item: FiatCurrency) => item} renderItem={renderItem} />
<AnimatedBottomSheetFlashList
data={ORDERED_CURRENCIES}
keyExtractor={(item: FiatCurrency) => item}
renderItem={renderItem}
/>
</Modal>
)
}
......
......@@ -10,7 +10,7 @@ import Trace from 'uniswap/src/features/telemetry/Trace'
import { ElementName, ModalNameType } from 'uniswap/src/features/telemetry/constants'
import { SwapFormContext } from 'uniswap/src/features/transactions/swap/contexts/SwapFormContext'
import { TestID } from 'uniswap/src/test/fixtures/testIDs'
import { isWeb } from 'utilities/src/platform'
import { isMobileApp, isWeb } from 'utilities/src/platform'
type WarningModalContentProps = {
onClose?: () => void
......@@ -49,7 +49,7 @@ export function WarningModalContent({
titleComponent,
caption,
captionComponent,
rejectText: rejectText,
rejectText,
acknowledgeText,
severity = WarningSeverity.Medium,
children,
......@@ -63,6 +63,8 @@ export function WarningModalContent({
const colors = useSporeColors()
const { headerText: alertHeaderTextColor } = getAlertColor(severity)
const buttonSize = isMobileApp ? 'medium' : 'small'
return (
<Flex
centered
......@@ -107,14 +109,14 @@ export function WarningModalContent({
<Flex row alignSelf="stretch" gap="$spacing12" pt={children ? '$spacing12' : '$spacing24'}>
{rejectText && (
<Trace logPress element={ElementName.BackButton} modal={modalName} properties={analyticsProperties}>
<Button emphasis="secondary" onPress={onReject ?? onClose}>
<Button size={buttonSize} emphasis="secondary" onPress={onReject ?? onClose}>
{rejectText}
</Button>
</Trace>
)}
{acknowledgeText && (
<Trace logPress element={ElementName.Confirm} modal={modalName} properties={analyticsProperties}>
<Button testID={TestID.Confirm} onPress={onAcknowledge}>
<Button size={buttonSize} testID={TestID.Confirm} onPress={onAcknowledge}>
{acknowledgeText}
</Button>
</Trace>
......
......@@ -79,7 +79,6 @@ export const uniswapUrls = {
swapFeeInfo: createHelpArticleUrl('20131678274957'),
passkeysInfo: createHelpArticleUrl('35522111260173'),
smartWalletDelegation: createHelpArticleUrl('36391987158797'),
smartWalletNetworkCost: createHelpArticleUrl('8370337377805'),
swapProtection: createHelpArticleUrl('18814993155853'),
swapSlippage: createHelpArticleUrl('8643879653261-What-is-Price-Slippage-'),
tokenWarning: createHelpArticleUrl('8723118437133-What-are-token-warnings-'),
......
import { useEffect, useState } from 'react'
import { useCallback, useEffect, useState } from 'react'
import { getChromeWithThrow } from 'utilities/src/chrome/chrome'
import { logger } from 'utilities/src/logger/logger'
import { isExtension } from 'utilities/src/platform'
import { useAsyncData } from 'utilities/src/react/hooks'
export function useIsChromeWindowFocused(): boolean {
const [isFocused, setIsFocused] = useState(true)
useEffect(() => {
if (!isExtension) {
return undefined
}
const chrome = getChromeWithThrow()
const onFocusChangedListener = async (): Promise<void> => {
const { focused } = await chrome.windows.getCurrent()
setIsFocused(focused)
}
// Get initial state
onFocusChangedListener().catch((error) => {
logger.error(error, {
tags: {
file: 'useIsChromeWindowFocused.ts',
function: 'useIsChromeWindowFocused',
},
})
})
chrome.windows.onFocusChanged.addListener(onFocusChangedListener)
// Remove listener when component unmounts
return () => {
chrome.windows.onFocusChanged.removeListener(onFocusChangedListener)
}
}, [])
useAsyncData(
useCallback(async () => {
if (!isExtension) {
// This hook is ignored and always returns `true` when not in the Extension.
return undefined
}
const onFocusChangedListener = async (): Promise<void> => {
const { focused } = await chrome.windows.getCurrent()
setIsFocused(focused)
}
// We run this on first render to get the initial state.
await onFocusChangedListener()
const chrome = getChromeWithThrow()
chrome.windows.onFocusChanged.addListener(onFocusChangedListener)
return () => {
chrome.windows.onFocusChanged.removeListener(onFocusChangedListener)
}
}, []),
)
return isFocused
}
......
......@@ -13,7 +13,6 @@ export enum FeatureFlags {
Datadog,
DisableSwap7702,
EmbeddedWallet,
FiatOffRamp,
InstantTokenBalanceUpdate,
MonadTestnet,
MonadTestnetDown,
......@@ -59,6 +58,7 @@ export enum FeatureFlags {
AATestWeb,
ConversionTracking,
DummyFlagTest,
FiatOffRamp,
GoogleConversionTracking,
GqlTokenLists,
LimitsFees,
......@@ -82,7 +82,6 @@ export const SHARED_FEATURE_FLAG_NAMES = new Map<FeatureFlags, string>([
[FeatureFlags.EmbeddedWallet, 'embedded_wallet'],
[FeatureFlags.EnablePermitMismatchUX, 'enable_permit2_mismatch_ux'],
[FeatureFlags.ExecuteTransactionV2, 'new_execute_transaction_arch'],
[FeatureFlags.FiatOffRamp, 'fiat_offramp'],
[FeatureFlags.ForceDisableWalletGetCapabilities, 'force_disable_wallet_get_capabilities'],
[FeatureFlags.ForcePermitTransactions, 'force_permit_transactions'],
[FeatureFlags.InstantTokenBalanceUpdate, 'instant-token-balance-update'],
......@@ -110,6 +109,7 @@ export const WEB_FEATURE_FLAG_NAMES = new Map<FeatureFlags, string>([
[FeatureFlags.BatchedSwaps, 'batched_swaps'],
[FeatureFlags.ConversionTracking, 'conversion-tracking'],
[FeatureFlags.DummyFlagTest, 'dummy_flag_test'],
[FeatureFlags.FiatOffRamp, 'fiat_offramp'],
[FeatureFlags.GoogleConversionTracking, 'google_conversion_tracking'],
[FeatureFlags.GqlTokenLists, 'gql_token_lists'],
[FeatureFlags.LimitsFees, 'limits_fees'],
......
......@@ -17,13 +17,11 @@ export function NetworkCostBanner({ bannerText, url }: NetworkCostBannerProps):
return (
<TouchableArea
row
centered
borderWidth="$spacing1"
borderColor="$surface3"
borderRadius="$rounded12"
p="$padding16"
gap="$gap12"
alignSelf="stretch"
onPress={handleOnPress}
>
<Flex row alignItems="center" justifyContent="space-between" gap="$spacing12">
......
......@@ -30,6 +30,7 @@ import {
} from 'uniswap/src/features/tokens/safetyUtils'
import { useDismissedTokenWarnings } from 'uniswap/src/features/tokens/slice/hooks'
import { currencyIdToAddress } from 'uniswap/src/utils/currencyId'
import { isMobileApp } from 'utilities/src/platform'
export interface FoTPercent {
buyFeePercent?: number
......@@ -199,7 +200,18 @@ function TokenWarningModalContent({
<Text variant="body3" color="$neutral3">
<Trans
i18nKey="common.poweredBy"
components={{ name: <BlockaidLogo minHeight={10} minWidth={50} color="$neutral3" /> }}
components={{
name: (
<BlockaidLogo
minHeight={10}
minWidth={50}
// Using the "size" prop does not work as expected for non-square icon like this one
// Found that only specifying width fixes all alignment and size issues on mobile
size={isMobileApp ? ({ width: 50 } as { width: number; height: number }) : undefined}
color="$neutral3"
/>
),
}}
/>
</Text>
</Flex>
......
......@@ -52,7 +52,7 @@ export function NetworkFeeWarning({
isMobileApp && (
<NetworkCostBanner
bannerText={t('smartWallet.banner.networkCost', { chainName: getChainInfo(chainId).label })}
url={uniswapUrls.helpArticleUrls.smartWalletNetworkCost}
url={uniswapUrls.helpArticleUrls.smartWalletDelegation}
/>
)
}
......@@ -123,10 +123,12 @@ function InfoButton({
}): JSX.Element | null {
if (includesDelegation && isMobileApp) {
return (
<LearnMoreLink
textVariant={isWeb ? 'body4' : undefined}
url={uniswapUrls.helpArticleUrls.smartWalletNetworkCost}
/>
<Flex mb="$spacing8">
<LearnMoreLink
textVariant={isWeb ? 'body4' : 'buttonLabel3'}
url={uniswapUrls.helpArticleUrls.networkFeeInfo}
/>
</Flex>
)
}
......
......@@ -311,7 +311,7 @@ export function NetworkCostTooltipClassic({ chainId }: { chainId: UniverseChainI
logo={<NetworkLogo chainId={chainId} size={16} />}
/>
<SwapDetailsTooltip.Description
learnMoreUrl={uniswapUrls.helpArticleUrls.smartWalletNetworkCost}
learnMoreUrl={uniswapUrls.helpArticleUrls.networkFeeInfo}
text={t('transaction.networkCost.description')}
/>
</SwapDetailsTooltip.Outer>
......
......@@ -55,6 +55,7 @@ export function SmartWalletModal({
}: SmartWalletModalProps): JSX.Element {
return (
<Modal
renderBehindTopInset
alignment={alignment}
isModalOpen={isOpen}
name={modalName}
......@@ -69,10 +70,10 @@ export function SmartWalletModal({
px={isExtension ? null : '$spacing24'}
mb={isExtension ? null : '$spacing48'}
gap="$spacing16"
pt={isExtension ? null : video ? '$spacing24' : '$spacing12'}
>
{video ? video : icon}
<Flex flexDirection="column" alignItems="center" gap="$spacing8">
<Flex flexDirection="column" alignItems="center" gap="$gap8">
<Text variant="subheading2" color="$neutral1">
{title}
</Text>
......
......@@ -16782,6 +16782,7 @@ __metadata:
react-native-reanimated: 3.16.7
react-native-svg: 15.10.1
react-native-web: 0.19.13
react-player: 2.16.0
react-qr-code: 2.0.12
react-redux: 8.0.5
react-refresh: 0.14.0
......@@ -24142,7 +24143,7 @@ __metadata:
languageName: node
linkType: hard
"deepmerge@npm:^4.2.2, deepmerge@npm:^4.3.0, deepmerge@npm:^4.3.1":
"deepmerge@npm:^4.0.0, deepmerge@npm:^4.2.2, deepmerge@npm:^4.3.0, deepmerge@npm:^4.3.1":
version: 4.3.1
resolution: "deepmerge@npm:4.3.1"
checksum: 2024c6a980a1b7128084170c4cf56b0fd58a63f2da1660dcfe977415f27b17dbe5888668b59d0b063753f3220719d5e400b7f113609489c90160bb9a5518d052
......@@ -34143,6 +34144,13 @@ __metadata:
languageName: node
linkType: hard
"load-script@npm:^1.0.0":
version: 1.0.0
resolution: "load-script@npm:1.0.0"
checksum: 8458e3f07b4a86f8d9d66e47a987811491a5d013af23ba7b371c6d3c9dc899885b072ccf65abf7874c10cb197d4975eacd8a7a125bfb38dbbcb267539f5dc1e9
languageName: node
linkType: hard
"loader-runner@npm:^4.2.0":
version: 4.3.0
resolution: "loader-runner@npm:4.3.0"
......@@ -34893,7 +34901,7 @@ __metadata:
languageName: node
linkType: hard
"memoize-one@npm:>=3.1.1 <6, memoize-one@npm:^5.0.0":
"memoize-one@npm:>=3.1.1 <6, memoize-one@npm:^5.0.0, memoize-one@npm:^5.1.1":
version: 5.2.1
resolution: "memoize-one@npm:5.2.1"
checksum: a3cba7b824ebcf24cdfcd234aa7f86f3ad6394b8d9be4c96ff756dafb8b51c7f71320785fbc2304f1af48a0467cbbd2a409efc9333025700ed523f254cb52e3d
......@@ -40760,6 +40768,21 @@ __metadata:
languageName: node
linkType: hard
"react-player@npm:2.16.0":
version: 2.16.0
resolution: "react-player@npm:2.16.0"
dependencies:
deepmerge: ^4.0.0
load-script: ^1.0.0
memoize-one: ^5.1.1
prop-types: ^15.7.2
react-fast-compare: ^3.0.1
peerDependencies:
react: ">=16.6.0"
checksum: 9cc78a6099fdf06bbb2e1db75aa57461fb152eb6207a00e6e026dde0675b6f4ad02a45cab7b6c18a9f19e001bf9695a5be0cbe7606eca57a0af501ced717fbe9
languageName: node
linkType: hard
"react-popper@npm:2.3.0":
version: 2.3.0
resolution: "react-popper@npm:2.3.0"
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