diff --git a/.github/workflows/build-android-e2e.yml b/.github/workflows/build-android-e2e.yml
index dfb127783a5..bd6158501d1 100644
--- a/.github/workflows/build-android-e2e.yml
+++ b/.github/workflows/build-android-e2e.yml
@@ -560,7 +560,6 @@ jobs:
GOOGLE_SERVICES_B64_IOS: ${{ secrets.GOOGLE_SERVICES_B64_IOS }}
GOOGLE_SERVICES_B64_ANDROID: ${{ secrets.GOOGLE_SERVICES_B64_ANDROID }}
MM_INFURA_PROJECT_ID: ${{ secrets.MM_INFURA_PROJECT_ID }}
- MM_PREDICT_GTM_MODAL_ENABLED: 'false'
- name: Record Namespace E2E APK cache marker
if: ${{ inputs.runner_provider == 'namespace' && steps.gate.outputs.needs-native-build == 'true' && inputs.source-fingerprint != '' && inputs.include_arm64 == false }}
diff --git a/.github/workflows/build-ios-e2e.yml b/.github/workflows/build-ios-e2e.yml
index f4b0c553e3a..f4501937c87 100644
--- a/.github/workflows/build-ios-e2e.yml
+++ b/.github/workflows/build-ios-e2e.yml
@@ -80,7 +80,6 @@ jobs:
GOOGLE_SERVICES_B64_IOS: ${{ secrets.GOOGLE_SERVICES_B64_IOS }}
GOOGLE_SERVICES_B64_ANDROID: ${{ secrets.GOOGLE_SERVICES_B64_ANDROID }}
MM_INFURA_PROJECT_ID: ${{ secrets.MM_INFURA_PROJECT_ID }}
- MM_PREDICT_GTM_MODAL_ENABLED: 'false'
steps:
# Get the source code from the repository
diff --git a/app/components/UI/Card/Views/CardWelcome/CardWelcome.test.tsx b/app/components/UI/Card/Views/CardWelcome/CardWelcome.test.tsx
index b484e6d0d06..f06cb054c6a 100644
--- a/app/components/UI/Card/Views/CardWelcome/CardWelcome.test.tsx
+++ b/app/components/UI/Card/Views/CardWelcome/CardWelcome.test.tsx
@@ -76,7 +76,6 @@ jest.mock('../../../../../../locales/i18n', () => ({
'card.card_onboarding.description':
'Change your spending token and network by signing in with your Crypto Life email and password.',
'card.card_onboarding.apply_now_button': 'Sign in',
- 'predict.gtm_content.not_now': 'Not now',
};
return map[key] || key;
},
diff --git a/app/components/UI/Predict/components/PredictGTMModal/PredictGTMModal.styles.ts b/app/components/UI/Predict/components/PredictGTMModal/PredictGTMModal.styles.ts
deleted file mode 100644
index 2927e7d8645..00000000000
--- a/app/components/UI/Predict/components/PredictGTMModal/PredictGTMModal.styles.ts
+++ /dev/null
@@ -1,131 +0,0 @@
-import { Platform, StyleSheet, Dimensions } from 'react-native';
-import { colors as importedColors } from '../../../../../styles/common';
-import { Theme } from '@metamask/design-tokens';
-
-// Responsive scaling utilities
-const { width: screenWidth, height: screenHeight } = Dimensions.get('window');
-
-// Platform-specific base dimensions
-const BASE_WIDTH = 375;
-const BASE_HEIGHT_IOS = 812; // iPhone X/11/12/13/14/15 Pro base
-const BASE_HEIGHT_ANDROID = 736; // Common Android base
-
-const MIN_SCREEN_HEIGHT_FOR_SMALL_SCREEN_STYLES = 750;
-
-// Calculate platform-aware scaling factors
-const isIOS = Platform.OS === 'ios';
-const baseHeight = isIOS ? BASE_HEIGHT_IOS : BASE_HEIGHT_ANDROID;
-
-const widthScale = screenWidth / BASE_WIDTH;
-const heightScale = screenHeight / baseHeight;
-
-// Use more conservative scaling to prevent excessive padding
-const scale = Math.min(widthScale, heightScale);
-const conservativeScale = Math.min(scale, 1.2); // Cap scaling at 120%
-
-// Platform-aware responsive scaling functions
-const scaleSize = (size: number) => Math.ceil(size * conservativeScale);
-const scaleFont = (size: number) => Math.ceil(size * conservativeScale);
-
-// For vertical spacing, use percentage of available height instead of pure scaling
-const scaleVertical = (size: number) => {
- // Use percentage of screen height for more consistent spacing
- const percentage = size / baseHeight;
- return Math.ceil(screenHeight * percentage);
-};
-
-const scaleHorizontal = (size: number) => Math.ceil(size * widthScale);
-
-const createStyles = (theme: Theme) =>
- StyleSheet.create({
- pageContainer: {
- flex: 1,
- position: 'relative',
- maxHeight: '100%',
- width: '100%',
- },
- backgroundImage: {
- position: 'absolute',
- top: 0,
- left: 0,
- right: 0,
- bottom: 0,
- width: screenWidth * 1.07, // 7% wider for edge coverage
- height:
- screenHeight *
- (screenHeight < MIN_SCREEN_HEIGHT_FOR_SMALL_SCREEN_STYLES
- ? 1.12
- : 1.14), // 12% taller for edge coverage
- resizeMode: 'cover',
- },
- contentContainer: {
- flex: 1,
- },
- headerContainer: {
- alignItems: 'center',
- paddingHorizontal: scaleHorizontal(16),
- paddingVertical: scaleVertical(16),
- },
- poweredByImage: {
- width: scaleHorizontal(200),
- height: scaleVertical(24),
- marginBottom: 8,
- },
- spacer: {
- flex: 1,
- },
- title: {
- fontFamily: 'MMPoly-Regular',
- fontWeight: '400',
- // make it smaller on smaller screens
- fontSize:
- screenHeight < MIN_SCREEN_HEIGHT_FOR_SMALL_SCREEN_STYLES ? 40 : 50,
- lineHeight:
- screenHeight < MIN_SCREEN_HEIGHT_FOR_SMALL_SCREEN_STYLES ? 40 : 50, // 100% of font size
- letterSpacing: 0,
- textAlign: 'center',
- paddingTop: scaleVertical(
- screenHeight < MIN_SCREEN_HEIGHT_FOR_SMALL_SCREEN_STYLES ? 8 : 12,
- ),
- color: theme.colors.accent02.light,
- },
- titleDescription: {
- // make it smaller on smaller screens
- fontSize:
- screenHeight < MIN_SCREEN_HEIGHT_FOR_SMALL_SCREEN_STYLES ? 14 : 16,
- paddingTop: scaleVertical(10),
- paddingHorizontal: scaleHorizontal(8),
- textAlign: 'center',
- fontFamily: Platform.OS === 'ios' ? 'System' : 'Roboto', // Default system font
- fontWeight: '500',
- lineHeight: 24, // Line Height BodyMd
- letterSpacing: 0,
- color: theme.colors.accent02.light,
- },
- footerContainer: {
- display: 'flex',
- rowGap: scaleVertical(8),
- paddingHorizontal: scaleHorizontal(30),
- },
- getStartedButton: {
- borderRadius: scaleSize(12),
- backgroundColor: importedColors.white,
- },
- getStartedButtonText: {
- color: importedColors.btnBlack,
- fontWeight: '600',
- fontSize: scaleFont(16),
- },
- notNowButton: {
- borderRadius: scaleSize(12),
- backgroundColor: importedColors.transparent,
- borderWidth: 0,
- },
- notNowButtonText: {
- color: importedColors.white,
- fontWeight: '500',
- fontSize: scaleFont(16),
- },
- });
-
-export default createStyles;
diff --git a/app/components/UI/Predict/components/PredictGTMModal/PredictGTMModal.test.tsx b/app/components/UI/Predict/components/PredictGTMModal/PredictGTMModal.test.tsx
deleted file mode 100644
index 6bb877f8785..00000000000
--- a/app/components/UI/Predict/components/PredictGTMModal/PredictGTMModal.test.tsx
+++ /dev/null
@@ -1,146 +0,0 @@
-import React from 'react';
-import { fireEvent, waitFor } from '@testing-library/react-native';
-import PredictGTMModal from './PredictGTMModal';
-import StorageWrapper from '../../../../../store/storage-wrapper';
-import Routes from '../../../../../constants/navigation/Routes';
-import { MetaMetricsEvents } from '../../../../../core/Analytics';
-import { PREDICT_GTM_MODAL_SHOWN } from '../../../../../constants/storage';
-import renderWithProvider from '../../../../../util/test/renderWithProvider';
-import { backgroundState } from '../../../../../util/test/initial-root-state';
-import { useAnalytics } from '../../../../../components/hooks/useAnalytics/useAnalytics';
-import { createMockUseAnalyticsHook } from '../../../../../util/test/analyticsMock';
-
-jest.mock('../../../../../util/theme', () => {
- const { mockTheme } = jest.requireActual('../../../../../util/theme');
- return {
- useTheme: jest.fn(() => mockTheme),
- };
-});
-
-jest.mock('../../../../../../locales/i18n', () => ({
- strings: (key: string) => key,
-}));
-
-jest.mock('../../../../../store/storage-wrapper', () => ({
- getItem: jest.fn(),
- setItem: jest.fn(),
-}));
-
-const mockNavigate = jest.fn();
-jest.mock('@react-navigation/native', () => {
- const actualNav = jest.requireActual('@react-navigation/native');
- return {
- ...actualNav,
- useNavigation: () => ({
- navigate: mockNavigate,
- goBack: jest.fn(),
- }),
- };
-});
-
-const mockTrackEvent = jest.fn();
-const mockCreateEventBuilder = jest.fn().mockReturnValue({
- addProperties: jest.fn().mockReturnThis(),
- build: jest.fn().mockReturnValue({}),
-});
-jest.mock('../../../../../components/hooks/useAnalytics/useAnalytics');
-
-jest.mock('../../../../../util/metrics', () => ({
- __esModule: true,
- default: jest.fn(() => ({
- platform: 'ios',
- deviceModel: 'iPhone 14',
- })),
-}));
-
-const initialState = {
- engine: {
- backgroundState,
- },
-};
-
-describe('PredictGTMModal', () => {
- beforeEach(() => {
- jest.clearAllMocks();
- jest.mocked(useAnalytics).mockReturnValue(
- createMockUseAnalyticsHook({
- trackEvent: mockTrackEvent,
- createEventBuilder: mockCreateEventBuilder,
- }),
- );
- jest.mocked(StorageWrapper.getItem).mockResolvedValue('false');
- });
-
- it('renders correctly with all main elements', async () => {
- const { getByText, getByTestId } = renderWithProvider(, {
- state: initialState,
- });
-
- await waitFor(() => {
- expect(getByText('predict.gtm_content.title')).toBeTruthy();
- expect(getByText('predict.gtm_content.title_description')).toBeTruthy();
- expect(getByText('predict.gtm_content.get_started')).toBeTruthy();
- expect(getByText('predict.gtm_content.not_now')).toBeTruthy();
- expect(getByTestId('predict-gtm-modal-container')).toBeTruthy();
- });
- });
-
- it('handles close button press correctly', async () => {
- const { getByText } = renderWithProvider(, {
- state: initialState,
- });
-
- await waitFor(() => {
- const notNowButton = getByText('predict.gtm_content.not_now');
- fireEvent.press(notNowButton);
- });
-
- expect(StorageWrapper.setItem).toHaveBeenCalledWith(
- PREDICT_GTM_MODAL_SHOWN,
- 'true',
- );
- expect(mockTrackEvent).toHaveBeenCalled();
- expect(mockCreateEventBuilder).toHaveBeenCalledWith(
- MetaMetricsEvents.WHATS_NEW_LINK_CLICKED,
- );
- expect(mockNavigate).toHaveBeenCalledWith(Routes.WALLET.HOME);
- });
-
- it('handles get started button press correctly', async () => {
- const { getByText } = renderWithProvider(, {
- state: initialState,
- });
-
- await waitFor(() => {
- const getStartedButton = getByText('predict.gtm_content.get_started');
- fireEvent.press(getStartedButton);
- });
-
- expect(StorageWrapper.setItem).toHaveBeenCalledWith(
- PREDICT_GTM_MODAL_SHOWN,
- 'true',
- { emitEvent: false },
- );
- expect(mockTrackEvent).toHaveBeenCalled();
- expect(mockCreateEventBuilder).toHaveBeenCalledWith(
- MetaMetricsEvents.WHATS_NEW_LINK_CLICKED,
- );
- expect(mockNavigate).toHaveBeenCalledWith(Routes.WALLET.HOME);
- expect(mockNavigate).toHaveBeenCalledWith(Routes.PREDICT.ROOT, {
- screen: Routes.PREDICT.MARKET_LIST,
- params: {
- entryPoint: expect.any(String),
- },
- });
- });
-
- it('renders image correctly', async () => {
- const { getByTestId } = renderWithProvider(, {
- state: initialState,
- });
-
- await waitFor(() => {
- expect(getByTestId('predict-gtm-modal-container')).toBeTruthy();
- });
- });
-});
diff --git a/app/components/UI/Predict/components/PredictGTMModal/PredictGTMModal.testIds.ts b/app/components/UI/Predict/components/PredictGTMModal/PredictGTMModal.testIds.ts
deleted file mode 100644
index daf34be298f..00000000000
--- a/app/components/UI/Predict/components/PredictGTMModal/PredictGTMModal.testIds.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export const PREDICT_GTM_MODAL_TEST_IDS = {
- CONTAINER: 'predict-gtm-modal-container',
- GET_STARTED_BUTTON: 'predict-gtm-get-started-button',
- NOT_NOW_BUTTON: 'predict-gtm-not-now-button',
-} as const;
diff --git a/app/components/UI/Predict/components/PredictGTMModal/PredictGTMModal.tsx b/app/components/UI/Predict/components/PredictGTMModal/PredictGTMModal.tsx
deleted file mode 100644
index fe31f0e12aa..00000000000
--- a/app/components/UI/Predict/components/PredictGTMModal/PredictGTMModal.tsx
+++ /dev/null
@@ -1,175 +0,0 @@
-import { useNavigation } from '@react-navigation/native';
-import React, { useState, useEffect } from 'react';
-import { Image, View } from 'react-native';
-import Animated, {
- useSharedValue,
- useAnimatedStyle,
- withTiming,
-} from 'react-native-reanimated';
-import { SafeAreaView } from 'react-native-safe-area-context';
-import { strings } from '../../../../../../locales/i18n';
-import ButtonBase from '../../../../../component-library/components/Buttons/Button/foundation/ButtonBase';
-import Button, {
- ButtonSize,
- ButtonVariants,
- ButtonWidthTypes,
-} from '../../../../../component-library/components/Buttons/Button';
-import Text, {
- TextVariant,
-} from '../../../../../component-library/components/Texts/Text';
-import { useAnalytics } from '../../../../../components/hooks/useAnalytics/useAnalytics';
-import Routes from '../../../../../constants/navigation/Routes';
-import { MetaMetricsEvents } from '../../../../../core/Analytics';
-import PredictMarketingImage from '../../../../../images/predict-marketing.png';
-import PoweredByPolymarketImage from '../../../../../images/powered-by-polymarket.png';
-import StorageWrapper from '../../../../../store/storage-wrapper';
-import { PREDICT_GTM_MODAL_SHOWN } from '../../../../../constants/storage';
-import { useTheme } from '../../../../../util/theme';
-import generateDeviceAnalyticsMetaData from '../../../../../util/metrics';
-import createStyles from './PredictGTMModal.styles';
-import {
- PREDICT_GTM_MODAL_DECLINE,
- PREDICT_GTM_MODAL_ENGAGE,
- PREDICT_GTM_WHATS_NEW_MODAL,
- PredictEventValues,
-} from '../../constants/eventNames';
-import { PREDICT_GTM_MODAL_TEST_IDS } from './PredictGTMModal.testIds';
-
-const PredictGTMModal = () => {
- const { trackEvent, createEventBuilder } = useAnalytics();
- const { navigate } = useNavigation();
- const theme = useTheme();
- const [imageLoaded, setImageLoaded] = useState(false);
- const opacity = useSharedValue(0);
-
- const titleText = strings('predict.gtm_content.title');
- const subtitleText = strings('predict.gtm_content.title_description');
-
- const styles = createStyles(theme);
-
- // Animate content fade-in when image loads
- useEffect(() => {
- if (imageLoaded) {
- opacity.value = withTiming(1, { duration: 500 });
- }
- }, [imageLoaded, opacity]);
-
- const animatedStyle = useAnimatedStyle(() => ({
- opacity: opacity.value,
- }));
-
- const handleClose = async () => {
- await StorageWrapper.setItem(PREDICT_GTM_MODAL_SHOWN, 'true');
-
- trackEvent(
- createEventBuilder(MetaMetricsEvents.WHATS_NEW_LINK_CLICKED)
- .addProperties({
- ...generateDeviceAnalyticsMetaData(),
- feature: PREDICT_GTM_WHATS_NEW_MODAL,
- action: PREDICT_GTM_MODAL_DECLINE,
- })
- .build(),
- );
-
- navigate(Routes.WALLET.HOME);
- };
-
- const handleGetStarted = async () => {
- trackEvent(
- createEventBuilder(MetaMetricsEvents.WHATS_NEW_LINK_CLICKED)
- .addProperties({
- ...generateDeviceAnalyticsMetaData(),
- feature: PREDICT_GTM_WHATS_NEW_MODAL,
- action: PREDICT_GTM_MODAL_ENGAGE,
- })
- .build(),
- );
-
- await StorageWrapper.setItem(PREDICT_GTM_MODAL_SHOWN, 'true', {
- emitEvent: false,
- });
-
- navigate(Routes.WALLET.HOME);
-
- navigate(Routes.PREDICT.ROOT, {
- screen: Routes.PREDICT.MARKET_LIST,
- params: {
- entryPoint: PredictEventValues.ENTRY_POINT.GTM_MODAL,
- },
- });
- };
-
- return (
-
- {/* Background Image - Full Screen */}
- setImageLoaded(true)}
- />
-
- {/* Content Overlay */}
-
- {/* Header Section */}
-
-
-
- {titleText}
-
-
- {subtitleText}
-
-
-
- {/* Spacer to push footer to bottom */}
-
-
- {/* Footer Section */}
-
- handleGetStarted()}
- testID={PREDICT_GTM_MODAL_TEST_IDS.GET_STARTED_BUTTON}
- size={ButtonSize.Lg}
- width={ButtonWidthTypes.Full}
- style={styles.getStartedButton}
- activeOpacity={0.6}
- label={
-
- {strings('predict.gtm_content.get_started')}
-
- }
- />
-
-
-
- );
-};
-
-export default PredictGTMModal;
diff --git a/app/components/UI/Predict/components/PredictGTMModal/index.ts b/app/components/UI/Predict/components/PredictGTMModal/index.ts
deleted file mode 100644
index 58077bf1e10..00000000000
--- a/app/components/UI/Predict/components/PredictGTMModal/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from './PredictGTMModal';
diff --git a/app/components/UI/Predict/constants/eventNames.ts b/app/components/UI/Predict/constants/eventNames.ts
index fc0d5cce079..f4646d0f8d3 100644
--- a/app/components/UI/Predict/constants/eventNames.ts
+++ b/app/components/UI/Predict/constants/eventNames.ts
@@ -122,7 +122,6 @@ export const PredictEventValues = {
MAIN_TRADE_BUTTON: 'main_trade_button',
HOMESCREEN_PILL: 'homescreen_pill',
REWARDS: 'rewards',
- GTM_MODAL: 'gtm_modal',
BACKGROUND: 'background',
TRENDING_SEARCH: 'trending_search',
TRENDING: 'trending',
@@ -249,10 +248,3 @@ export const PredictShareStatus = {
export type PredictShareStatusValue =
(typeof PredictShareStatus)[keyof typeof PredictShareStatus];
-
-/**
- * GTM Modal constants for analytics tracking
- */
-export const PREDICT_GTM_WHATS_NEW_MODAL = 'predict-gtm-whats-new-modal';
-export const PREDICT_GTM_MODAL_ENGAGE = 'engage';
-export const PREDICT_GTM_MODAL_DECLINE = 'decline';
diff --git a/app/components/UI/Predict/routes/index.test.tsx b/app/components/UI/Predict/routes/index.test.tsx
index 573e46f54a4..64d0bc45f5f 100644
--- a/app/components/UI/Predict/routes/index.test.tsx
+++ b/app/components/UI/Predict/routes/index.test.tsx
@@ -115,11 +115,6 @@ jest.mock('../views/PredictUnavailableModal', () => {
return () => ;
});
-jest.mock('../components/PredictGTMModal', () => {
- const { View } = jest.requireActual('react-native');
- return () => ;
-});
-
jest.mock('../views/PredictAddFundsModal/PredictAddFundsModal', () => {
const { View } = jest.requireActual('react-native');
return () => ;
@@ -371,16 +366,6 @@ describe('PredictModalStack', () => {
expect(screen.getByTestId('predict-unavailable-modal')).toBeOnTheScreen();
});
- it('navigates to GTM_MODAL', async () => {
- renderWithNavigation();
-
- await act(async () => {
- navigationRef.current?.navigate(Routes.PREDICT.MODALS.GTM_MODAL);
- });
-
- expect(screen.getByTestId('predict-gtm-modal')).toBeOnTheScreen();
- });
-
it('navigates to ADD_FUNDS_SHEET', async () => {
renderWithNavigation();
diff --git a/app/components/UI/Predict/routes/index.tsx b/app/components/UI/Predict/routes/index.tsx
index 7aa0899cb3e..92f40f08245 100644
--- a/app/components/UI/Predict/routes/index.tsx
+++ b/app/components/UI/Predict/routes/index.tsx
@@ -22,7 +22,6 @@ import PredictPositionsView from '../views/PredictPositionsView';
import PredictMarketListRoute from './PredictMarketListRoute';
import PredictWorldCupRoute from './PredictWorldCupRoute';
import PredictFeedView from '../views/PredictFeedView';
-import PredictGTMModal from '../components/PredictGTMModal';
import { useSelector } from 'react-redux';
import { PredictPreviewSheetProvider } from '../contexts';
import PredictBuyPreview from '../views/PredictBuyPreview/PredictBuyPreview';
@@ -48,10 +47,6 @@ const PredictModalStack = () => {
name={Routes.PREDICT.MODALS.UNAVAILABLE}
component={PredictUnavailableModal}
/>
-
{
});
});
- describe('selectPredictGtmOnboardingModalEnabledFlag', () => {
- it('returns version-gated flag value when remote flag is set', () => {
- mockHasMinimumRequiredVersion.mockReturnValue(true);
- const stateWithRemoteFlag = {
- engine: {
- backgroundState: {
- RemoteFeatureFlagController: {
- remoteFeatureFlags: {
- predictGtmOnboardingModalEnabled: {
- enabled: true,
- minimumVersion: '1.0.0',
- },
- },
- cacheTimestamp: 0,
- },
- },
- },
- };
-
- const result =
- selectPredictGtmOnboardingModalEnabledFlag(stateWithRemoteFlag);
-
- expect(result).toBe(true);
- });
-
- it('returns false when env var not set and no remote flag', () => {
- delete process.env.MM_PREDICT_GTM_MODAL_ENABLED;
- const stateWithoutRemoteFlag = {
- engine: {
- backgroundState: {
- RemoteFeatureFlagController: {
- remoteFeatureFlags: {
- predictGtmOnboardingModalEnabled: null,
- },
- cacheTimestamp: 0,
- },
- },
- },
- };
-
- const result = selectPredictGtmOnboardingModalEnabledFlag(
- stateWithoutRemoteFlag,
- );
-
- expect(result).toBe(false);
- });
- });
-
describe('selectPredictHomeFeaturedVariant', () => {
it('returns carousel by default', () => {
const result = selectPredictHomeFeaturedVariant(mockedEmptyFlagsState);
diff --git a/app/components/UI/Predict/selectors/featureFlags/index.ts b/app/components/UI/Predict/selectors/featureFlags/index.ts
index 09f41342294..0e1778d4066 100644
--- a/app/components/UI/Predict/selectors/featureFlags/index.ts
+++ b/app/components/UI/Predict/selectors/featureFlags/index.ts
@@ -35,19 +35,6 @@ export const selectPredictEnabledFlag = createSelector(
},
);
-export const selectPredictGtmOnboardingModalEnabledFlag = createSelector(
- selectRemoteFeatureFlags,
- (remoteFeatureFlags) => {
- const localFlag = process.env.MM_PREDICT_GTM_MODAL_ENABLED === 'true';
- const remoteFlag = unwrapRemoteFeatureFlag(
- remoteFeatureFlags?.predictGtmOnboardingModalEnabled,
- );
-
- // Fallback to local flag if remote flag is not available
- return validatedVersionGatedFeatureFlag(remoteFlag) ?? localFlag;
- },
-);
-
/**
* Variant options for the Predict home featured section
*/
diff --git a/app/components/UI/Predict/types/navigation.ts b/app/components/UI/Predict/types/navigation.ts
index e2ee4c3d1ca..417b51e1d7a 100644
--- a/app/components/UI/Predict/types/navigation.ts
+++ b/app/components/UI/Predict/types/navigation.ts
@@ -173,7 +173,6 @@ export type PredictSellPreviewProps =
// eslint-disable-next-line @typescript-eslint/consistent-type-definitions
export type PredictModalsNavigationParamList = {
PredictUnavailable: undefined;
- PredictGTMModal: undefined;
PredictAddFundsSheet: PredictAddFundsModalParams | undefined;
PredictActivityDetail: PredictActivityDetailParams;
RedesignedConfirmations: undefined;
diff --git a/app/components/Views/Wallet/index.test.tsx b/app/components/Views/Wallet/index.test.tsx
index 23076014bf7..c4463230a7e 100644
--- a/app/components/Views/Wallet/index.test.tsx
+++ b/app/components/Views/Wallet/index.test.tsx
@@ -62,16 +62,6 @@ jest.mock('../../UI/Perps/selectors/featureFlags', () => ({
),
}));
-// Mock the Predict feature flag selector - will be controlled per test
-let mockPredictEnabled = true;
-let mockPredictGTMModalEnabled = false;
-jest.mock('../../UI/Predict/selectors/featureFlags', () => ({
- selectPredictEnabledFlag: jest.fn(() => mockPredictEnabled),
- selectPredictGtmOnboardingModalEnabledFlag: jest.fn(
- () => mockPredictGTMModalEnabled,
- ),
-}));
-
jest.mock('../../../selectors/featureFlagController/homepage', () => ({
selectHomepageRedesignV1Enabled: jest.fn(() => false),
}));
@@ -1163,16 +1153,12 @@ describe('Wallet', () => {
// Reset flags to default state
mockPerpsEnabled = true;
mockPerpsGTMModalEnabled = false;
- mockPredictEnabled = true;
- mockPredictGTMModalEnabled = false;
});
afterEach(() => {
// Reset mocks and flags
mockPerpsEnabled = true;
mockPerpsGTMModalEnabled = false;
- mockPredictEnabled = true;
- mockPredictGTMModalEnabled = false;
jest.clearAllMocks();
});
diff --git a/app/components/Views/Wallet/index.tsx b/app/components/Views/Wallet/index.tsx
index cb66f96c035..9d935694c3e 100644
--- a/app/components/Views/Wallet/index.tsx
+++ b/app/components/Views/Wallet/index.tsx
@@ -50,10 +50,7 @@ import {
import StorageWrapper from '../../../store/storage-wrapper';
import { HOMEPAGE_APP_SESSION_ID } from '../../../util/analytics/homepageSessionId';
import { baseStyles } from '../../../styles/common';
-import {
- PERPS_GTM_MODAL_SHOWN,
- PREDICT_GTM_MODAL_SHOWN,
-} from '../../../constants/storage';
+import { PERPS_GTM_MODAL_SHOWN } from '../../../constants/storage';
import HeaderRoot from '../../../component-library/components-temp/HeaderRoot';
import PickerAccount from '../../../component-library/components/Pickers/PickerAccount';
import AddressCopy from '../../UI/AddressCopy';
@@ -182,10 +179,6 @@ import {
selectPerpsGtmOnboardingModalEnabledFlag,
} from '../../UI/Perps';
import { PerpsAlwaysOnProvider } from '../../UI/Perps/providers/PerpsAlwaysOnProvider';
-import {
- selectPredictEnabledFlag,
- selectPredictGtmOnboardingModalEnabledFlag,
-} from '../../UI/Predict/selectors/featureFlags';
// eslint-disable-next-line import-x/no-restricted-paths -- TODO(ADR-0020): route-isolation backlog
import { InitSendLocation } from '../confirmations/constants/send';
// eslint-disable-next-line import-x/no-restricted-paths -- TODO(ADR-0020): route-isolation backlog
@@ -386,11 +379,6 @@ const Wallet = ({
selectPerpsGtmOnboardingModalEnabledFlag,
);
- const isPredictFlagEnabled = useSelector(selectPredictEnabledFlag);
- const isPredictGTMModalEnabled = useSelector(
- selectPredictGtmOnboardingModalEnabledFlag,
- );
-
const { toastRef } = useContext(ToastContext);
const { trackEvent, createEventBuilder } = useAnalytics();
const styles = useMemo(() => createStyles(theme), [theme]);
@@ -625,26 +613,6 @@ const Wallet = ({
}
}, [isPerpsFlagEnabled, isPerpsGTMModalEnabled, checkAndNavigateToPerpsGTM]);
- const checkAndNavigateToPredictGTM = useCallback(async () => {
- const hasSeenModal = await StorageWrapper.getItem(PREDICT_GTM_MODAL_SHOWN);
-
- if (hasSeenModal !== 'true') {
- navigate(Routes.PREDICT.MODALS.ROOT, {
- screen: Routes.PREDICT.MODALS.GTM_MODAL,
- });
- }
- }, [navigate]);
-
- useEffect(() => {
- if (isPredictFlagEnabled && isPredictGTMModalEnabled) {
- checkAndNavigateToPredictGTM();
- }
- }, [
- isPredictFlagEnabled,
- isPredictGTMModalEnabled,
- checkAndNavigateToPredictGTM,
- ]);
-
const isConnectionRemoved = useSelector(selectIsConnectionRemoved);
useEffect(() => {
diff --git a/app/constants/navigation/Routes.ts b/app/constants/navigation/Routes.ts
index 20eec0ff886..800a652574a 100644
--- a/app/constants/navigation/Routes.ts
+++ b/app/constants/navigation/Routes.ts
@@ -422,7 +422,6 @@ const Routes = {
SELL_PREVIEW: 'PredictSellPreview',
UNAVAILABLE: 'PredictUnavailable',
ADD_FUNDS_SHEET: 'PredictAddFundsSheet',
- GTM_MODAL: 'PredictGTMModal',
},
},
LOCK_SCREEN: 'LockScreen',
diff --git a/app/constants/storage.ts b/app/constants/storage.ts
index 3211a810388..f2cc26ec5d7 100644
--- a/app/constants/storage.ts
+++ b/app/constants/storage.ts
@@ -86,8 +86,6 @@ export const PERPS_GTM_MODAL_SHOWN = `${prefix}perpsGTMModalShown`;
export const PERPS_COMPETITION_BANNER_DISMISSED = `${prefix}perpsCompetitionBannerDismissed`;
-export const PREDICT_GTM_MODAL_SHOWN = `${prefix}predictGTMModalShown`;
-
export const REWARDS_GTM_MODAL_SHOWN = `${prefix}rewardsGTMModalShown`;
export const SOCIAL_LEADERBOARD_ONBOARDING_SHOWN = `${prefix}socialLeaderboardOnboardingShown`;
diff --git a/app/core/NavigationService/types.ts b/app/core/NavigationService/types.ts
index bc5de85c3b8..1bb1ccaef29 100644
--- a/app/core/NavigationService/types.ts
+++ b/app/core/NavigationService/types.ts
@@ -797,7 +797,6 @@ export type RootStackParamList = {
PredictSellPreview: PredictNavigationParamList['PredictSellPreview'];
PredictUnavailable: undefined;
PredictAddFundsSheet: PredictModalsNavigationParamList['PredictAddFundsSheet'];
- PredictGTMModal: undefined;
// Social Leaderboard routes
TopTradersView:
diff --git a/app/dev-tools/AgenticService/AgenticService.test.ts b/app/dev-tools/AgenticService/AgenticService.test.ts
index 46ce86f42f7..f83734386cf 100644
--- a/app/dev-tools/AgenticService/AgenticService.test.ts
+++ b/app/dev-tools/AgenticService/AgenticService.test.ts
@@ -218,7 +218,6 @@ jest.mock('../../store/storage-wrapper', () => {
jest.mock('../../constants/storage', () => ({
OPTIN_META_METRICS_UI_SEEN: 'optin_meta_metrics_ui_seen',
PERPS_GTM_MODAL_SHOWN: 'perps_gtm',
- PREDICT_GTM_MODAL_SHOWN: 'predict_gtm',
REWARDS_GTM_MODAL_SHOWN: 'rewards_gtm',
}));
jest.mock('../../util/analytics/analytics', () => ({
@@ -1026,10 +1025,6 @@ describe('AgenticService.install', () => {
settings: { skipGtmModals: true },
});
expect(StorageWrapper.setItem).toHaveBeenCalledWith('perps_gtm', 'true');
- expect(StorageWrapper.setItem).toHaveBeenCalledWith(
- 'predict_gtm',
- 'true',
- );
expect(StorageWrapper.setItem).toHaveBeenCalledWith(
'rewards_gtm',
'true',
diff --git a/app/dev-tools/AgenticService/AgenticService.ts b/app/dev-tools/AgenticService/AgenticService.ts
index c3f5de477f6..924b17bc1fd 100644
--- a/app/dev-tools/AgenticService/AgenticService.ts
+++ b/app/dev-tools/AgenticService/AgenticService.ts
@@ -30,7 +30,6 @@ import StorageWrapper from '../../store/storage-wrapper';
import {
OPTIN_META_METRICS_UI_SEEN,
PERPS_GTM_MODAL_SHOWN,
- PREDICT_GTM_MODAL_SHOWN,
REWARDS_GTM_MODAL_SHOWN,
} from '../../constants/storage';
import { analytics } from '../../util/analytics/analytics';
@@ -1553,7 +1552,6 @@ const AgenticService = {
if (settings.skipGtmModals === true) {
await Promise.all([
StorageWrapper.setItem(PERPS_GTM_MODAL_SHOWN, 'true'),
- StorageWrapper.setItem(PREDICT_GTM_MODAL_SHOWN, 'true'),
StorageWrapper.setItem(REWARDS_GTM_MODAL_SHOWN, 'true'),
]);
// Suppress ExperienceEnhancer (marketing consent) modal
diff --git a/app/images/powered-by-polymarket.png b/app/images/powered-by-polymarket.png
deleted file mode 100644
index 7b7dc6571b1..00000000000
Binary files a/app/images/powered-by-polymarket.png and /dev/null differ
diff --git a/app/images/predict-marketing.png b/app/images/predict-marketing.png
deleted file mode 100644
index 88f4b3ece23..00000000000
Binary files a/app/images/predict-marketing.png and /dev/null differ
diff --git a/app/util/generateSkipOnboardingState.ts b/app/util/generateSkipOnboardingState.ts
index 1ae2ca73bdc..99754884ddc 100644
--- a/app/util/generateSkipOnboardingState.ts
+++ b/app/util/generateSkipOnboardingState.ts
@@ -6,7 +6,6 @@ import {
import {
HAS_USER_TURNED_OFF_ONCE_NOTIFICATIONS,
OPTIN_META_METRICS_UI_SEEN,
- PREDICT_GTM_MODAL_SHOWN,
TRUE,
USE_TERMS,
} from '../constants/storage';
@@ -93,9 +92,6 @@ async function applyVaultInitialization() {
// removes the necessity of the user to see the opt-in metrics modal
await StorageWrapper.setItem(OPTIN_META_METRICS_UI_SEEN, TRUE);
- // removes the necessity of the user to see the predictions GTM modal
- await StorageWrapper.setItem(PREDICT_GTM_MODAL_SHOWN, TRUE);
-
// prevents the enable notifications modal from showing
await StorageWrapper.setItem(HAS_USER_TURNED_OFF_ONCE_NOTIFICATIONS, TRUE);
}
diff --git a/docs/predict/architecture-overview.md b/docs/predict/architecture-overview.md
index 2a210c8e610..f8e7166fcec 100644
--- a/docs/predict/architecture-overview.md
+++ b/docs/predict/architecture-overview.md
@@ -117,7 +117,7 @@ app/components/UI/Predict/
| PredictFeed.tsx | 738 | 16+ | Multiple nested components, prop drilling |
| PredictController.ts | 2,401 | N/A | 15+ repeated error handling patterns |
-#### 2. Legacy Styling (10 files)
+#### 2. Legacy Styling (9 files)
Files using `StyleSheet.create()` instead of Tailwind:
@@ -127,7 +127,6 @@ Files using `StyleSheet.create()` instead of Tailwind:
- PredictPositionEmpty.styles.ts
- PredictPositionResolved.styles.ts
- PredictOffline.styles.ts
-- PredictGTMModal.styles.ts
- PredictMarketRowItem.styles.ts
- PredictMarketMultiple.styles.ts
- PredictSellPreview.styles.ts
@@ -362,7 +361,6 @@ PredictScreenStack
PredictModalStack
├── PredictUnavailableModal
-├── PredictGTMModal
├── PredictAddFundsModal
└── PredictActivityDetail
```
diff --git a/docs/predict/refactoring-tasks.md b/docs/predict/refactoring-tasks.md
index 940738f4cbd..c94682b9490 100644
--- a/docs/predict/refactoring-tasks.md
+++ b/docs/predict/refactoring-tasks.md
@@ -333,7 +333,6 @@ All files using `StyleSheet.create()` need migration to Tailwind + design system
| 15 | PredictPositionEmpty | `components/PredictPositionEmpty/PredictPositionEmpty.styles.ts` | ⬜ |
| 16 | PredictPositionResolved | `components/PredictPositionResolved/PredictPositionResolved.styles.ts` | ⬜ |
| 17 | PredictOffline | `components/PredictOffline/PredictOffline.styles.ts` | ⬜ |
-| 18 | PredictGTMModal | `components/PredictGTMModal/PredictGTMModal.styles.ts` | ⬜ |
| 19 | PredictMarketRowItem | `components/PredictMarketRowItem/PredictMarketRowItem.styles.ts` | ⬜ |
| 20 | PredictMarketMultiple | `components/PredictMarketMultiple/PredictMarketMultiple.styles.ts` | ⬜ |
| 21 | PredictSellPreview | `views/PredictSellPreview/PredictSellPreview.styles.ts` | ⬜ |
@@ -611,7 +610,6 @@ Total: ████░░░░░░░░░░░░░░░░ 11% (3/28
| 15 | Migrate PredictPositionEmpty | P1 | ⬜ | 3 |
| 16 | Migrate PredictPositionResolved | P1 | ⬜ | 3 |
| 17 | Migrate PredictOffline | P1 | ⬜ | 3 |
-| 18 | Migrate PredictGTMModal | P1 | ⬜ | 3 |
| 19 | Migrate PredictMarketRowItem | P1 | ⬜ | 3 |
| 20 | Migrate PredictMarketMultiple | P1 | ⬜ | 3 |
| 21 | Migrate PredictSellPreview | P1 | ⬜ | 3 |
diff --git a/locales/languages/de.json b/locales/languages/de.json
index 088de7d3253..fbca2715846 100644
--- a/locales/languages/de.json
+++ b/locales/languages/de.json
@@ -2565,12 +2565,6 @@
"toasts": {
"copied_to_clipboard": "In die Zwischenablage kopiert"
},
- "gtm_content": {
- "title": "PROGNOSTIZIEREN UND GEWINNEN",
- "title_description": "Handeln Sie auf das Ergebnis von realen Ereignissen, wie Sport oder Wahlen.",
- "get_started": "Erste Schritte",
- "not_now": "Nicht jetzt"
- },
"market_details": {
"title": "Marktdetails",
"market_ended_on": "Markt endete am {{outcome}}",
diff --git a/locales/languages/el.json b/locales/languages/el.json
index 8b209c35913..79cb5aa7540 100644
--- a/locales/languages/el.json
+++ b/locales/languages/el.json
@@ -2565,12 +2565,6 @@
"toasts": {
"copied_to_clipboard": "Αντιγραφή στο πρόχειρο"
},
- "gtm_content": {
- "title": "ΠΡΟΒΛΕΨΤΕ ΚΑΙ ΚΕΡΔΙΣΤΕ",
- "title_description": "Συναλλαγές με βάση το αποτέλεσμα πραγματικών γεγονότων, όπως αθλητικοί αγώνες ή εκλογές.",
- "get_started": "Ξεκινήστε",
- "not_now": "Όχι τώρα"
- },
"market_details": {
"title": "Λεπτομέρειες της αγοράς",
"market_ended_on": "Η πλατφόρμα έκλεισε με αποτέλεσμα: {{outcome}}",
diff --git a/locales/languages/en.json b/locales/languages/en.json
index eb143624693..e06e28893f8 100644
--- a/locales/languages/en.json
+++ b/locales/languages/en.json
@@ -2575,12 +2575,6 @@
"toasts": {
"copied_to_clipboard": "Copied to clipboard"
},
- "gtm_content": {
- "title": "PREDICT AND WIN",
- "title_description": "Trade on the outcome of real-world events, like sports or elections.",
- "get_started": "Get started",
- "not_now": "Not now"
- },
"market_details": {
"title": "Market details",
"market_ended_on": "Market ended on {{outcome}}",
diff --git a/locales/languages/es.json b/locales/languages/es.json
index 839668baab7..5149e1a6eb1 100644
--- a/locales/languages/es.json
+++ b/locales/languages/es.json
@@ -2565,12 +2565,6 @@
"toasts": {
"copied_to_clipboard": "Copiado al portapapeles"
},
- "gtm_content": {
- "title": "PREDICE Y GANA",
- "title_description": "Opera con los resultados de eventos del mundo real, como deportes o elecciones.",
- "get_started": "Comenzar",
- "not_now": "Ahora no"
- },
"market_details": {
"title": "Detalles del mercado",
"market_ended_on": "El mercado cerró en {{outcome}}",
diff --git a/locales/languages/fr.json b/locales/languages/fr.json
index 07b4d519a9a..1df7cd2901e 100644
--- a/locales/languages/fr.json
+++ b/locales/languages/fr.json
@@ -2565,12 +2565,6 @@
"toasts": {
"copied_to_clipboard": "Copié dans le presse-papiers"
},
- "gtm_content": {
- "title": "PRÉDIRE ET GAGNER",
- "title_description": "Pariez sur les résultats d’événements réels, tels que des compétitions sportives ou des élections.",
- "get_started": "Commencer",
- "not_now": "Pas maintenant"
- },
"market_details": {
"title": "Détails du marché",
"market_ended_on": "Le marché a clôturé à {{outcome}}",
diff --git a/locales/languages/hi.json b/locales/languages/hi.json
index 4a665fd16e6..113125701e5 100644
--- a/locales/languages/hi.json
+++ b/locales/languages/hi.json
@@ -2565,12 +2565,6 @@
"toasts": {
"copied_to_clipboard": "क्लिपबोर्ड पर कॉपी किया गया"
},
- "gtm_content": {
- "title": "प्रेडिक्ट करें और जीतें",
- "title_description": "रियल-वर्ल्ड इवेंट्स, जैसे खेल या चुनाव, के आउटकम पर ट्रेड करें।",
- "get_started": "शुरू करें",
- "not_now": "अभी नहीं"
- },
"market_details": {
"title": "मार्केट का ब्यौरा",
"market_ended_on": "मार्केट {{outcome}} पर बंद हुआ",
diff --git a/locales/languages/id.json b/locales/languages/id.json
index 629dd3e7377..5c21456c5bb 100644
--- a/locales/languages/id.json
+++ b/locales/languages/id.json
@@ -2565,12 +2565,6 @@
"toasts": {
"copied_to_clipboard": "Disalin ke papan klip"
},
- "gtm_content": {
- "title": "PREDIKSI DAN MENANG",
- "title_description": "Berdagang berdasarkan hasil peristiwa dunia nyata, seperti olahraga atau pemilu.",
- "get_started": "Mulai",
- "not_now": "Tidak sekarang"
- },
"market_details": {
"title": "Detail pasar",
"market_ended_on": "Pasar berakhir pada {{outcome}}",
diff --git a/locales/languages/ja.json b/locales/languages/ja.json
index 5b96b82e292..d2762da7802 100644
--- a/locales/languages/ja.json
+++ b/locales/languages/ja.json
@@ -2565,12 +2565,6 @@
"toasts": {
"copied_to_clipboard": "クリップボードにコピーしました"
},
- "gtm_content": {
- "title": "予測して当てよう",
- "title_description": "スポーツや選挙など、現実の出来事の結果を取引できます。",
- "get_started": "開始",
- "not_now": "後で"
- },
"market_details": {
"title": "マーケットの詳細",
"market_ended_on": "マーケットは{{outcome}}で終了しました",
diff --git a/locales/languages/ko.json b/locales/languages/ko.json
index d2e8ff2c250..03d3a608ac9 100644
--- a/locales/languages/ko.json
+++ b/locales/languages/ko.json
@@ -2565,12 +2565,6 @@
"toasts": {
"copied_to_clipboard": "클립보드에 복사되었습니다"
},
- "gtm_content": {
- "title": "예측하고 수익을 창출하세요",
- "title_description": "스포츠나 선거 같은 실제 이벤트 결과를 예측하고 트레이드하세요.",
- "get_started": "지금 시작하세요",
- "not_now": "나중에"
- },
"market_details": {
"title": "시장 상세 정보",
"market_ended_on": "시장이 {{outcome}}(으)로 종료되었습니다",
diff --git a/locales/languages/pt.json b/locales/languages/pt.json
index 1fe0a84abf6..63a6efc022c 100644
--- a/locales/languages/pt.json
+++ b/locales/languages/pt.json
@@ -2565,12 +2565,6 @@
"toasts": {
"copied_to_clipboard": "Copiado para a área de transferência"
},
- "gtm_content": {
- "title": "PREVEJA E GANHE",
- "title_description": "Negocie com base nos resultados de eventos do mundo real, como esportes ou eleições.",
- "get_started": "Comece já",
- "not_now": "Agora não"
- },
"market_details": {
"title": "Detalhes do mercado",
"market_ended_on": "Mercado encerrado em {{outcome}}",
diff --git a/locales/languages/ru.json b/locales/languages/ru.json
index b864dbac3db..e779e15f3a4 100644
--- a/locales/languages/ru.json
+++ b/locales/languages/ru.json
@@ -2565,12 +2565,6 @@
"toasts": {
"copied_to_clipboard": "Скопировано в буфер обмена"
},
- "gtm_content": {
- "title": "ПРЕДСКАЗЫВАЙТЕ И ВЫИГРЫВАЙТЕ",
- "title_description": "Торгуйте на основе результатов реальных событий, таких как спорт или выборы.",
- "get_started": "С чего начать",
- "not_now": "Не сейчас"
- },
"market_details": {
"title": "Сведения о рынке",
"market_ended_on": "Рынок завершился на {{outcome}}",
diff --git a/locales/languages/tl.json b/locales/languages/tl.json
index 8b064a44a38..06f2e03d6fe 100644
--- a/locales/languages/tl.json
+++ b/locales/languages/tl.json
@@ -2565,12 +2565,6 @@
"toasts": {
"copied_to_clipboard": "Nakopya sa clipboard"
},
- "gtm_content": {
- "title": "MANGHULA AT MANALO",
- "title_description": "Mag-trade sa mga resulta ng mga totoong pangyayari sa mundo, gaya ng sa sports o mga eleksyon.",
- "get_started": "Magsimula",
- "not_now": "Hindi sa ngayon"
- },
"market_details": {
"title": "Mga detalye ng market",
"market_ended_on": "Nagtapos ang market noong {{outcome}}",
diff --git a/locales/languages/tr.json b/locales/languages/tr.json
index 787fa02d508..62c3e43775c 100644
--- a/locales/languages/tr.json
+++ b/locales/languages/tr.json
@@ -2565,12 +2565,6 @@
"toasts": {
"copied_to_clipboard": "Panoya kopyalandı"
},
- "gtm_content": {
- "title": "TAHMİN ET VE KAZAN",
- "title_description": "Spor ve seçim gibi gerçek dünya olaylarının sonucu üzerine işlem yap.",
- "get_started": "Başlarken",
- "not_now": "Şimdi değil"
- },
"market_details": {
"title": "Piyasa bilgileri",
"market_ended_on": "Piyasa {{outcome}} ile sona erdi",
diff --git a/locales/languages/vi.json b/locales/languages/vi.json
index 65e1574a27e..2ec64d9dd96 100644
--- a/locales/languages/vi.json
+++ b/locales/languages/vi.json
@@ -2565,12 +2565,6 @@
"toasts": {
"copied_to_clipboard": "Đã sao chép vào bộ nhớ đệm"
},
- "gtm_content": {
- "title": "DỰ ĐOÁN VÀ GIÀNH CHIẾN THẮNG",
- "title_description": "Giao dịch dựa trên kết quả của các sự kiện thực tế, chẳng hạn như thể thao hoặc bầu cử.",
- "get_started": "Bắt đầu",
- "not_now": "Không phải bây giờ"
- },
"market_details": {
"title": "Chi tiết thị trường",
"market_ended_on": "Thị trường kết thúc với kết quả {{outcome}}",
diff --git a/locales/languages/zh.json b/locales/languages/zh.json
index d6ea45e4b7f..cf872685e04 100644
--- a/locales/languages/zh.json
+++ b/locales/languages/zh.json
@@ -2565,12 +2565,6 @@
"toasts": {
"copied_to_clipboard": "已复制到剪贴板"
},
- "gtm_content": {
- "title": "预测赢大奖",
- "title_description": "对真实事件结果进行下注,例如体育比赛或选举。",
- "get_started": "开始",
- "not_now": "暂时不"
- },
"market_details": {
"title": "市场详情",
"market_ended_on": "市场收盘为 {{outcome}}",
diff --git a/tests/api-mocking/mock-responses/feature-flags-mocks.ts b/tests/api-mocking/mock-responses/feature-flags-mocks.ts
index c7e8e0badc0..af1023a9e8e 100644
--- a/tests/api-mocking/mock-responses/feature-flags-mocks.ts
+++ b/tests/api-mocking/mock-responses/feature-flags-mocks.ts
@@ -109,29 +109,12 @@ export const remoteFeatureMultichainAccountsAccountDetailsV2 = (
},
});
-/**
- * Disables the full-screen Predict / Polymarket GTM onboarding shown after reaching wallet home.
- * Production remote-flag defaults enable this; `selectPredictGtmOnboardingModalEnabledFlag` prefers
- * the remote value over `MM_PREDICT_GTM_MODAL_ENABLED`, so E2E tests should merge this into
- * {@link setupRemoteFeatureFlagsMock} when the modal would block flows.
- */
-export const remoteFeaturePredictGtmOnboardingModalDisabled = () => ({
- predictGtmOnboardingModalEnabled: {
- enabled: false,
- minimumVersion: '7.60.0',
- },
-});
-
export const remoteFeatureFlagPredictEnabled = (enabled = true) => ({
predictEnabled: enabled,
predictTradingEnabled: {
enabled,
minimumVersion: '7.60.0',
},
- predictGtmOnboardingModalEnabled: {
- enabled: false,
- minimumVersion: '7.60.0',
- },
});
export const remoteFeatureFlagHomepageSectionsV1Enabled = (enabled = true) => ({
diff --git a/tests/flows/wallet.flow.ts b/tests/flows/wallet.flow.ts
index 552cfda821e..de08fdfffd3 100644
--- a/tests/flows/wallet.flow.ts
+++ b/tests/flows/wallet.flow.ts
@@ -50,10 +50,8 @@ import PlaywrightUtilities, {
} from '../framework/PlaywrightUtilities';
import AccountListBottomSheet from '../page-objects/wallet/AccountListBottomSheet';
import MetaMetricsOptInView from '../page-objects/Onboarding/MetaMetricsOptInView';
-import PredictModalView from '../page-objects/Predict/PredictModalView';
import OnboardingInterestQuestionnaireView from '../page-objects/Onboarding/OnboardingInterestQuestionnaireView';
import ExperienceEnhancerBottomSheet from '../page-objects/Onboarding/ExperienceEnhancerBottomSheet';
-import { fetchProductionFeatureFlags } from '../performance/feature-flag-helper';
import { ExistingUserSheetSelectorsIDs } from '../../app/components/Views/Notifications/PushNotificationOnboarding/ExistingUserSheet/ExistingUserSheet.testIds';
import {
isLoginScreenDisplayed,
@@ -203,7 +201,6 @@ const validAccount = Accounts.getValidAccount();
const SEEDLESS_ONBOARDING_ENABLED =
process.env.SEEDLESS_ONBOARDING_ENABLED === 'true' ||
process.env.SEEDLESS_ONBOARDING_ENABLED === undefined;
-const testEnvironment = process.env.E2E_PERFORMANCE_BUILD_VARIANT || 'rc';
/**
* Gets the localhost URL for Ganache/Anvil network connection.
@@ -845,101 +842,6 @@ export const selectAccountByDevice = async (
await AccountListBottomSheet.tapAccountByNameV2(accountName, !isAccount3);
};
-const PREDICT_GTM_MODAL_FALLBACK_WAIT_MS = 10_000;
-
-/**
- * Resolves whether the Predict GTM onboarding modal should be handled.
- * Uses feature flags when available; otherwise polls the modal for up to 10s.
- */
-export const resolvePredictGtmOnboardingModalEnabled = async (
- productionFeatureFlags: Record | null,
-): Promise => {
- if (productionFeatureFlags != null) {
- return (
- (
- productionFeatureFlags.predictGtmOnboardingModalEnabled as {
- enabled?: boolean;
- }
- )?.enabled === true
- );
- }
-
- try {
- await (await asPlaywrightElement(PredictModalView.notNowButton))
- .unwrap()
- .waitForDisplayed({ timeout: PREDICT_GTM_MODAL_FALLBACK_WAIT_MS });
- return true;
- } catch {
- return false;
- }
-};
-
-/**
- * Dismisses the predictions modal.
- * @async
- * @function dismisspredictionsModalPlaywright
- * @returns {Promise} Resolves when the predictions modal is dismissed.
- */
-const tryDismissPredictionsModalPlaywright = async (
- timeout = 3000,
-): Promise => {
- try {
- const btn = await asPlaywrightElement(PredictModalView.notNowButton);
- await PlaywrightGestures.waitAndTap(btn, {
- timeout,
- checkForDisplayed: true,
- checkForEnabled: true,
- });
- await btn.unwrap().waitForDisplayed({ reverse: true, timeout: 3000 });
- return true;
- } catch {
- return false;
- }
-};
-
-export const dismisspredictionsModalPlaywright = async (
- maxRetries = 2,
-): Promise => {
- const dismissed = await tryDismissPredictionsModalPlaywright();
- if (!dismissed) {
- logger.error(`Predict modal not dismissed after ${maxRetries} attempts`);
- }
-};
-
-const startPredictionsModalWatcher = (intervalMs = 1000): (() => void) => {
- let stopped = false;
- let inFlight = false;
- let timeoutId: ReturnType | undefined;
-
- const tick = async () => {
- if (stopped || inFlight) {
- if (!stopped) {
- timeoutId = setTimeout(tick, intervalMs);
- }
- return;
- }
-
- inFlight = true;
- try {
- await tryDismissPredictionsModalPlaywright(1000);
- } finally {
- inFlight = false;
- if (!stopped) {
- timeoutId = setTimeout(tick, intervalMs);
- }
- }
- };
-
- timeoutId = setTimeout(tick, 0);
-
- return () => {
- stopped = true;
- if (timeoutId) {
- clearTimeout(timeoutId);
- }
- };
-};
-
/**
* Completes the onboarding flow for importing a SRP.
* @param srp - The SRP to import.
@@ -979,27 +881,9 @@ export const onboardingFlowImportSRPPlaywright = async (
);
await MetaMetricsOptInView.tapIAgreeButton();
await dismissOnboardingInterestQuestionnaire();
- const productionFeatureFlags = await fetchProductionFeatureFlags(
- 'main',
- testEnvironment,
- );
-
await dismissPushNotificationExistingUserSheet();
- const predictGtmOnboardingModalEnabled =
- await resolvePredictGtmOnboardingModalEnabled(productionFeatureFlags);
- console.log(
- 'predictGtmOnboardingModalEnabled',
- predictGtmOnboardingModalEnabled,
+ await PlaywrightAssertions.expectElementToBeVisible(
+ await asPlaywrightElement(WalletView.container),
);
-
- const stopPredictionsModalWatcher = startPredictionsModalWatcher();
- try {
- await PlaywrightAssertions.expectElementToBeVisible(
- await asPlaywrightElement(WalletView.container),
- );
- await tryDismissPredictionsModalPlaywright();
- } finally {
- stopPredictionsModalWatcher();
- }
};
diff --git a/tests/framework/fixtures/json/default-fixture.json b/tests/framework/fixtures/json/default-fixture.json
index cd10f04b86d..d6bf66b67d8 100644
--- a/tests/framework/fixtures/json/default-fixture.json
+++ b/tests/framework/fixtures/json/default-fixture.json
@@ -3,7 +3,6 @@
"@MetaMask:OptinMetaMetricsUISeen": "true",
"@MetaMask:UserTermsAcceptedv1.0": "true",
"@MetaMask:existingUser": "true",
- "@MetaMask:predictGTMModalShown": "true",
"@MetaMask:solanaFeatureModalShownV2": "true"
},
"state": {
diff --git a/tests/page-objects/Predict/PredictModalView.ts b/tests/page-objects/Predict/PredictModalView.ts
deleted file mode 100644
index 2ec72681ba2..00000000000
--- a/tests/page-objects/Predict/PredictModalView.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-import { PREDICT_GTM_MODAL_TEST_IDS } from '../../../app/components/UI/Predict/components/PredictGTMModal/PredictGTMModal.testIds';
-import {
- encapsulated,
- EncapsulatedElementType,
- Matchers,
- PlaywrightMatchers,
- UnifiedGestures,
-} from '../../framework';
-
-class PredictModalView {
- get notNowButton(): EncapsulatedElementType {
- return encapsulated({
- detox: () =>
- Matchers.getElementByID(PREDICT_GTM_MODAL_TEST_IDS.NOT_NOW_BUTTON),
- appium: () =>
- PlaywrightMatchers.getElementById(
- PREDICT_GTM_MODAL_TEST_IDS.NOT_NOW_BUTTON,
- { exact: true },
- ),
- });
- }
-
- async tapNotNowButton(): Promise {
- await UnifiedGestures.waitAndTap(this.notNowButton, {
- description: 'Predict Not Now Button',
- });
- }
-}
-
-export default new PredictModalView();
diff --git a/tests/performance/README.md b/tests/performance/README.md
index 0cee8c89efe..4853037bac0 100644
--- a/tests/performance/README.md
+++ b/tests/performance/README.md
@@ -563,16 +563,6 @@ import { onboardingFlowImportSRPPlaywright } from '../../flows/wallet.flow';
await onboardingFlowImportSRPPlaywright(process.env.TEST_SRP_1);
```
-### `dismisspredictionsModalPlaywright()`
-
-Dismiss the Predictions modal:
-
-```typescript
-import { dismisspredictionsModalPlaywright } from '../../flows/wallet.flow';
-
-await dismisspredictionsModalPlaywright();
-```
-
### `selectAccountByDevice(deviceName)`
Select the account mapped to the current device for parallel testing:
diff --git a/tests/performance/onboarding/import-wallet.spec.ts b/tests/performance/onboarding/import-wallet.spec.ts
index 35562f47eb4..40be352bab0 100644
--- a/tests/performance/onboarding/import-wallet.spec.ts
+++ b/tests/performance/onboarding/import-wallet.spec.ts
@@ -13,18 +13,12 @@ import OnboardingSheet from '../../page-objects/Onboarding/OnboardingSheet';
import ImportWalletView from '../../page-objects/Onboarding/ImportWalletView';
import CreatePasswordView from '../../page-objects/Onboarding/CreatePasswordView';
import MetaMetricsOptInView from '../../page-objects/Onboarding/MetaMetricsOptInView';
-import PredictModalView from '../../page-objects/Predict/PredictModalView';
import {
dismissOnboardingInterestQuestionnaire,
- dismisspredictionsModalPlaywright,
dismissPushNotificationExistingUserSheet,
- resolvePredictGtmOnboardingModalEnabled,
} from '../../flows/wallet.flow';
-import { fetchProductionFeatureFlags } from '../feature-flag-helper';
import TabBarComponent from '../../page-objects/wallet/TabBarComponent.js';
-const testEnvironment = 'test'; // hard coding this for now. We need a new FF env in LD for e2e. An admin needs to create it..
-
/* Scenario 4: Imported wallet with +50 accounts */
test.describe(PerformanceOnboarding, () => {
test(
@@ -51,11 +45,6 @@ test.describe(PerformanceOnboarding, () => {
{ ios: 2000, android: 1800 },
currentDeviceDetails.platform,
);
- const timer6 = new TimerHelper(
- 'Time since the user clicks on "Done" button until feature sheet is visible',
- { ios: 3000, android: 3000 },
- currentDeviceDetails.platform,
- );
const timer7 = new TimerHelper(
'Time since the user clicks on "Done" button until ETH and BTC are visible',
// +50 accounts on BrowserStack can take longer than local emulator.
@@ -64,11 +53,6 @@ test.describe(PerformanceOnboarding, () => {
);
const walletTokenLoadTimeoutMs = 60_000;
- const productionFeatureFlags = await fetchProductionFeatureFlags(
- 'main',
- testEnvironment,
- );
-
await OnboardingView.tapHaveAnExistingWallet();
await timer1.measure(async () => {
await PlaywrightAssertions.expectElementToBeVisible(
@@ -120,18 +104,6 @@ test.describe(PerformanceOnboarding, () => {
await MetaMetricsOptInView.tapIAgreeButton();
await dismissOnboardingInterestQuestionnaire();
await dismissPushNotificationExistingUserSheet();
- const predictGtmOnboardingModalEnabled =
- await resolvePredictGtmOnboardingModalEnabled(productionFeatureFlags);
-
- if (predictGtmOnboardingModalEnabled) {
- await timer6.measure(async () => {
- await PlaywrightAssertions.expectElementToBeVisible(
- await asPlaywrightElement(PredictModalView.notNowButton),
- );
- });
- }
-
- await dismisspredictionsModalPlaywright();
await timer7.measure(async () => {
await PlaywrightAssertions.expectElementToBeVisible(
await asPlaywrightElement(TabBarComponent.tabBarWalletButton),
@@ -140,12 +112,6 @@ test.describe(PerformanceOnboarding, () => {
});
performanceTracker.addTimers(timer1, timer2, timer3, timer4, timer7);
- if (
- predictGtmOnboardingModalEnabled &&
- predictGtmOnboardingModalEnabled === true
- ) {
- performanceTracker.addTimer(timer6);
- }
},
);
});
diff --git a/tests/performance/onboarding/new-wallet-account-creation.spec.ts b/tests/performance/onboarding/new-wallet-account-creation.spec.ts
index 0aa39d617da..99e8f4f995e 100644
--- a/tests/performance/onboarding/new-wallet-account-creation.spec.ts
+++ b/tests/performance/onboarding/new-wallet-account-creation.spec.ts
@@ -19,16 +19,12 @@ import ProtectYourWalletView from '../../page-objects/Onboarding/ProtectYourWall
import MetaMetricsOptInView from '../../page-objects/Onboarding/MetaMetricsOptInView.js';
import {
dismissOnboardingInterestQuestionnaire,
- dismisspredictionsModalPlaywright,
dismissPushNotificationExistingUserSheet,
} from '../../flows/wallet.flow.js';
import WalletView from '../../page-objects/wallet/WalletView.js';
import AccountListBottomSheet from '../../page-objects/wallet/AccountListBottomSheet.js';
-import { fetchProductionFeatureFlags } from '../feature-flag-helper';
import TabBarComponent from '../../page-objects/wallet/TabBarComponent.js';
-const testEnvironment = 'test'; // hard coding this for now. We need a new FF env in LD for e2e. An admin needs to create it..
-
/* Scenario 2: Account creation after fresh install */
test.describe(`${Performance} ${System} ${PerformanceOnboarding} ${PerformanceAccountList}`, () => {
test(
@@ -61,22 +57,6 @@ test.describe(`${Performance} ${System} ${PerformanceOnboarding} ${PerformanceAc
await MetaMetricsOptInView.tapAgreeButton();
await dismissOnboardingInterestQuestionnaire();
await dismissPushNotificationExistingUserSheet();
- const productionFeatureFlags = await fetchProductionFeatureFlags(
- 'main',
- testEnvironment,
- );
-
- const predictGtmOnboardingModalEnabled = (
- productionFeatureFlags?.predictGtmOnboardingModalEnabled as {
- enabled?: boolean;
- }
- )?.enabled;
- if (
- predictGtmOnboardingModalEnabled &&
- predictGtmOnboardingModalEnabled === true
- ) {
- await dismisspredictionsModalPlaywright();
- }
const screen1Timer = new TimerHelper(
'Time since the user clicks on "Account list" button until the account list is visible',
diff --git a/tests/performance/onboarding/seedless-apple-onboarding.spec.ts b/tests/performance/onboarding/seedless-apple-onboarding.spec.ts
index 5798de9a7ec..f4802326806 100644
--- a/tests/performance/onboarding/seedless-apple-onboarding.spec.ts
+++ b/tests/performance/onboarding/seedless-apple-onboarding.spec.ts
@@ -8,7 +8,6 @@ import {
import { getPasswordForScenario } from '../../framework/utils/TestConstants.js';
import {
dismissOnboardingInterestQuestionnaire,
- dismisspredictionsModalPlaywright,
dismissPushNotificationExistingUserSheet,
} from '../../flows/wallet.flow';
import {
@@ -21,7 +20,6 @@ import OnboardingSheet from '../../page-objects/Onboarding/OnboardingSheet';
import SocialLoginView from '../../page-objects/Onboarding/SocialLoginView';
import CreatePasswordView from '../../page-objects/Onboarding/CreatePasswordView';
import OnboardingSuccessView from '../../page-objects/Onboarding/OnboardingSuccessView';
-import PredictModalView from '../../page-objects/Predict/PredictModalView';
import WalletView from '../../page-objects/wallet/WalletView';
import LoginView from '../../page-objects/wallet/LoginView';
const waitForFirstSuccessful = async (promises: Promise[]): Promise =>
@@ -67,12 +65,7 @@ test.describe(`${Performance} ${System} ${PerformanceOnboarding}`, () => {
currentDeviceDetails.platform,
);
const timer5 = new TimerHelper(
- 'Apple: Tap "Done" → feature sheet visible',
- { ios: 2500, android: 5000 },
- currentDeviceDetails.platform,
- );
- const timer6 = new TimerHelper(
- 'Apple: Dismiss feature sheet → wallet main screen visible',
+ 'Apple: Tap "Done" → wallet main screen visible',
{ ios: 30000, android: 5000 },
currentDeviceDetails.platform,
);
@@ -144,20 +137,9 @@ test.describe(`${Performance} ${System} ${PerformanceOnboarding}`, () => {
);
});
await dismissOnboardingInterestQuestionnaire();
- await OnboardingSuccessView.tapDone();
- await dismissPushNotificationExistingUserSheet();
await timer5.measure(async () => {
- await PlaywrightAssertions.expectElementToBeVisible(
- asPlaywrightElement(PredictModalView.notNowButton),
- {
- timeout: 10000,
- description: 'Predict modal should be visible',
- },
- );
- });
-
- await dismisspredictionsModalPlaywright();
- await timer6.measure(async () => {
+ await OnboardingSuccessView.tapDone();
+ await dismissPushNotificationExistingUserSheet();
await PlaywrightAssertions.expectElementToBeVisible(
asPlaywrightElement(WalletView.accountIcon), // Workaround until iOS nested component gets fixed
{
@@ -166,7 +148,7 @@ test.describe(`${Performance} ${System} ${PerformanceOnboarding}`, () => {
);
});
- const timers = [timer1, timer2, timer4, timer5, timer6];
+ const timers = [timer1, timer2, timer4, timer5];
if (currentDeviceDetails.platform === 'ios') {
timers.splice(2, 0, timer3);
}
diff --git a/tests/performance/onboarding/seedless-google-onboarding.spec.ts b/tests/performance/onboarding/seedless-google-onboarding.spec.ts
index e2e480d3e83..740d8b2ccff 100644
--- a/tests/performance/onboarding/seedless-google-onboarding.spec.ts
+++ b/tests/performance/onboarding/seedless-google-onboarding.spec.ts
@@ -8,7 +8,6 @@ import {
import { getPasswordForScenario } from '../../framework/utils/TestConstants.js';
import {
dismissOnboardingInterestQuestionnaire,
- dismisspredictionsModalPlaywright,
dismissPushNotificationExistingUserSheet,
} from '../../flows/wallet.flow';
import {
@@ -21,7 +20,6 @@ import OnboardingSheet from '../../page-objects/Onboarding/OnboardingSheet';
import SocialLoginView from '../../page-objects/Onboarding/SocialLoginView';
import CreatePasswordView from '../../page-objects/Onboarding/CreatePasswordView';
import OnboardingSuccessView from '../../page-objects/Onboarding/OnboardingSuccessView';
-import PredictModalView from '../../page-objects/Predict/PredictModalView';
import WalletView from '../../page-objects/wallet/WalletView';
import LoginView from '../../page-objects/wallet/LoginView';
@@ -68,12 +66,7 @@ test.describe(`${Performance} ${System} ${PerformanceOnboarding}`, () => {
currentDeviceDetails.platform,
);
const timer5 = new TimerHelper(
- 'Google: Tap "Done" → feature sheet visible',
- { ios: 2500, android: 5000 },
- currentDeviceDetails.platform,
- );
- const timer6 = new TimerHelper(
- 'Google: Dismiss feature sheet → wallet main screen visible',
+ 'Google: Tap "Done" → wallet main screen visible',
{ ios: 30000, android: 5000 },
currentDeviceDetails.platform,
);
@@ -145,20 +138,9 @@ test.describe(`${Performance} ${System} ${PerformanceOnboarding}`, () => {
});
await dismissOnboardingInterestQuestionnaire();
- await OnboardingSuccessView.tapDone();
- await dismissPushNotificationExistingUserSheet();
await timer5.measure(async () => {
- await PlaywrightAssertions.expectElementToBeVisible(
- asPlaywrightElement(PredictModalView.notNowButton),
- {
- timeout: 10000,
- description: 'Predict modal should be visible',
- },
- );
- });
-
- await dismisspredictionsModalPlaywright();
- await timer6.measure(async () => {
+ await OnboardingSuccessView.tapDone();
+ await dismissPushNotificationExistingUserSheet();
await PlaywrightAssertions.expectElementToBeVisible(
asPlaywrightElement(WalletView.accountIcon), // Workaround until iOS nested component gets fixed
{
@@ -167,7 +149,7 @@ test.describe(`${Performance} ${System} ${PerformanceOnboarding}`, () => {
);
});
- const timers = [timer1, timer2, timer4, timer5, timer6];
+ const timers = [timer1, timer2, timer4, timer5];
if (currentDeviceDetails.platform === 'ios') {
timers.splice(2, 0, timer3);
}
diff --git a/tests/smoke-appium/seedless/google-login-add-srp.spec.ts b/tests/smoke-appium/seedless/google-login-add-srp.spec.ts
index 8db847bfd61..c8cbdc900b1 100644
--- a/tests/smoke-appium/seedless/google-login-add-srp.spec.ts
+++ b/tests/smoke-appium/seedless/google-login-add-srp.spec.ts
@@ -24,10 +24,6 @@ const googleNewUserWithFeatureFlagsMock = async (
await setupGoogleNewUserOAuthMock(mockServer);
await setupRemoteFeatureFlagsMock(mockServer, {
...remoteFeatureMultichainAccountsAccountDetailsV2(true),
- predictGtmOnboardingModalEnabled: {
- enabled: false,
- minimumVersion: '7.60.0',
- },
});
};
diff --git a/tests/smoke/wallet/analytics/import-wallet.spec.ts b/tests/smoke/wallet/analytics/import-wallet.spec.ts
index 6148b9715f8..653c49869fc 100644
--- a/tests/smoke/wallet/analytics/import-wallet.spec.ts
+++ b/tests/smoke/wallet/analytics/import-wallet.spec.ts
@@ -6,10 +6,7 @@ import { withFixtures } from '../../../framework/fixtures/FixtureHelper';
import FixtureBuilder from '../../../framework/fixtures/FixtureBuilder';
import { Mockttp } from 'mockttp';
import { setupRemoteFeatureFlagsMock } from '../../../api-mocking/helpers/remoteFeatureFlagsHelper';
-import {
- remoteFeatureMultichainAccountsAccountDetails,
- remoteFeaturePredictGtmOnboardingModalDisabled,
-} from '../../../api-mocking/mock-responses/feature-flags-mocks';
+import { remoteFeatureMultichainAccountsAccountDetails } from '../../../api-mocking/mock-responses/feature-flags-mocks';
import {
createLogger,
countProxiedRequestsMatching,
@@ -47,7 +44,6 @@ describe(SmokeWalletPlatform('Analytics during import wallet flow'), () => {
testSpecificMock: async (mockServer: Mockttp) => {
await setupRemoteFeatureFlagsMock(mockServer, {
...remoteFeatureMultichainAccountsAccountDetails(),
- ...remoteFeaturePredictGtmOnboardingModalDisabled(),
});
},
analyticsExpectations: importWalletWithMetricsOptInExpectations,
@@ -104,7 +100,6 @@ describe(SmokeWalletPlatform('Analytics during import wallet flow'), () => {
testSpecificMock: async (mockServer: Mockttp) => {
await setupRemoteFeatureFlagsMock(mockServer, {
...remoteFeatureMultichainAccountsAccountDetails(),
- ...remoteFeaturePredictGtmOnboardingModalDisabled(),
});
},
analyticsExpectations: withStrictWalletSetupAttributionMatch(
@@ -130,7 +125,6 @@ describe(SmokeWalletPlatform('Analytics during import wallet flow'), () => {
testSpecificMock: async (mockServer: Mockttp) => {
await setupRemoteFeatureFlagsMock(mockServer, {
...remoteFeatureMultichainAccountsAccountDetails(),
- ...remoteFeaturePredictGtmOnboardingModalDisabled(),
});
},
analyticsExpectations: importWalletMetricsOptOutExpectations,
diff --git a/tests/smoke/wallet/analytics/new-wallet.spec.ts b/tests/smoke/wallet/analytics/new-wallet.spec.ts
index 83c10e108fa..7c55403f07e 100644
--- a/tests/smoke/wallet/analytics/new-wallet.spec.ts
+++ b/tests/smoke/wallet/analytics/new-wallet.spec.ts
@@ -8,9 +8,6 @@ import {
newWalletWithMetricsOptInExpectations,
newWalletMetricsOptOutExpectations,
} from '../../../helpers/analytics/expectations/new-wallet.analytics';
-import { remoteFeaturePredictGtmOnboardingModalDisabled } from '../../../api-mocking/mock-responses/feature-flags-mocks';
-import { setupRemoteFeatureFlagsMock } from '../../../api-mocking/helpers/remoteFeatureFlagsHelper';
-import { Mockttp } from 'mockttp';
import { E2E_WALLET_SETUP_ATTRIBUTION_FIELDS } from '../../../helpers/analytics/walletSetupAttributionE2eConstants';
import { withStrictWalletSetupAttributionMatch } from '../../../helpers/analytics/withStrictWalletSetupAttributionMatch';
@@ -24,12 +21,6 @@ describe(SmokeWalletPlatform('Analytics during new wallet flow'), () => {
{
fixture: new FixtureBuilder().withOnboardingFixture().build(),
restartDevice: true,
- testSpecificMock: async (mockServer: Mockttp) => {
- await setupRemoteFeatureFlagsMock(
- mockServer,
- remoteFeaturePredictGtmOnboardingModalDisabled(),
- );
- },
analyticsExpectations: newWalletWithMetricsOptInExpectations,
},
async () => {
@@ -46,12 +37,6 @@ describe(SmokeWalletPlatform('Analytics during new wallet flow'), () => {
.withWalletSetupAttributionForE2e(E2E_WALLET_SETUP_ATTRIBUTION_FIELDS)
.build(),
restartDevice: true,
- testSpecificMock: async (mockServer: Mockttp) => {
- await setupRemoteFeatureFlagsMock(
- mockServer,
- remoteFeaturePredictGtmOnboardingModalDisabled(),
- );
- },
analyticsExpectations: withStrictWalletSetupAttributionMatch(
newWalletWithMetricsOptInExpectations,
),