diff --git a/assets/images/envelope-open-star.svg b/assets/images/envelope-open-star.svg
deleted file mode 100644
index 74652c126f5fe..0000000000000
--- a/assets/images/envelope-open-star.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/components/Icon/Expensicons.ts b/src/components/Icon/Expensicons.ts
index d595fd80213d2..ac51f4f4ceecf 100644
--- a/src/components/Icon/Expensicons.ts
+++ b/src/components/Icon/Expensicons.ts
@@ -48,7 +48,6 @@ import Download from '@assets/images/download.svg';
import DragAndDrop from '@assets/images/drag-and-drop.svg';
import DragHandles from '@assets/images/drag-handles.svg';
import Emoji from '@assets/images/emoji.svg';
-import EnvelopeOpenStar from '@assets/images/envelope-open-star.svg';
import EReceiptIcon from '@assets/images/eReceiptIcon.svg';
import Exclamation from '@assets/images/exclamation.svg';
import Exit from '@assets/images/exit.svg';
@@ -214,7 +213,6 @@ export {
DragHandles,
EReceiptIcon,
Emoji,
- EnvelopeOpenStar,
ExpenseCopy,
Exclamation,
Exit,
diff --git a/src/components/Icon/chunks/expensify-icons.chunk.ts b/src/components/Icon/chunks/expensify-icons.chunk.ts
index e8e51555cdf6a..ffcc6da25634a 100644
--- a/src/components/Icon/chunks/expensify-icons.chunk.ts
+++ b/src/components/Icon/chunks/expensify-icons.chunk.ts
@@ -79,7 +79,6 @@ import Emoji from '@assets/images/emoji.svg';
import Lightbulb from '@assets/images/emojiCategoryIcons/light-bulb.svg';
import EmptyStateRoutePending from '@assets/images/emptystate__routepending.svg';
import EmptyStateSpyPigeon from '@assets/images/emptystate__spy-pigeon.svg';
-import EnvelopeOpenStar from '@assets/images/envelope-open-star.svg';
import EReceiptIcon from '@assets/images/eReceiptIcon.svg';
import Exclamation from '@assets/images/exclamation.svg';
import Exit from '@assets/images/exit.svg';
@@ -316,7 +315,6 @@ const Expensicons = {
DragHandles,
EReceiptIcon,
Emoji,
- EnvelopeOpenStar,
EmptyStateRoutePending,
ExpenseCopy,
Exclamation,
diff --git a/src/languages/de.ts b/src/languages/de.ts
index 56eef0b683adf..479532f059cd6 100644
--- a/src/languages/de.ts
+++ b/src/languages/de.ts
@@ -986,7 +986,6 @@ const translations: TranslationDeepObject = {
title: ({cardName}: {cardName?: string}) => (cardName ? `Verbindung der persönlichen Karte ${cardName} reparieren` : 'Verbindung der persönlichen Karte reparieren'),
subtitle: 'Wallet',
},
- validateAccount: {title: 'Bestätigen Sie Ihr Konto, um Expensify weiter zu verwenden', subtitle: 'Konto', cta: 'Bestätigen'},
},
assignedCards: 'Ihre Expensify Karten',
assignedCardsRemaining: ({amount}: {amount: string}) => `${amount} verbleibend`,
diff --git a/src/languages/en.ts b/src/languages/en.ts
index 9e1b3c985c71b..57d99ff580a70 100644
--- a/src/languages/en.ts
+++ b/src/languages/en.ts
@@ -1019,11 +1019,6 @@ const translations = {
subtitle: 'Expensify Card',
cta: 'Review',
},
- validateAccount: {
- title: 'Validate your account to continue using Expensify',
- subtitle: 'Account',
- cta: 'Validate',
- },
},
assignedCards: 'Your Expensify Cards',
assignedCardsRemaining: ({amount}: {amount: string}) => `${amount} remaining`,
diff --git a/src/languages/es.ts b/src/languages/es.ts
index 28c768351a01a..8175dfea22dc0 100644
--- a/src/languages/es.ts
+++ b/src/languages/es.ts
@@ -891,11 +891,6 @@ const translations: TranslationDeepObject = {
subtitle: 'Tarjeta Expensify',
cta: 'Revisar',
},
- validateAccount: {
- title: 'Valida tu cuenta para continuar usando Expensify',
- subtitle: 'Cuenta',
- cta: 'Validar',
- },
},
assignedCards: 'Tus tarjetas Expensify',
assignedCardsRemaining: ({amount}: {amount: string}) => `${amount} restantes`,
diff --git a/src/languages/fr.ts b/src/languages/fr.ts
index e3141cb9aa261..3c5ff04c4e890 100644
--- a/src/languages/fr.ts
+++ b/src/languages/fr.ts
@@ -989,7 +989,6 @@ const translations: TranslationDeepObject = {
title: ({cardName}: {cardName?: string}) => (cardName ? `Réparer la connexion de la carte personnelle ${cardName}` : 'Corriger la connexion de la carte personnelle'),
subtitle: 'Portefeuille',
},
- validateAccount: {title: 'Validez votre compte pour continuer à utiliser Expensify', subtitle: 'Compte', cta: 'Valider'},
},
assignedCards: 'Vos cartes Expensify',
assignedCardsRemaining: ({amount}: {amount: string}) => `${amount} restant`,
diff --git a/src/languages/it.ts b/src/languages/it.ts
index 2814a3f55957f..a14b9bf77a55c 100644
--- a/src/languages/it.ts
+++ b/src/languages/it.ts
@@ -986,7 +986,6 @@ const translations: TranslationDeepObject = {
title: ({cardName}: {cardName?: string}) => (cardName ? `Correggi la connessione della carta personale ${cardName}` : 'Correggi connessione carta personale'),
subtitle: 'Portafoglio',
},
- validateAccount: {title: 'Conferma il tuo account per continuare a usare Expensify', subtitle: 'Account', cta: 'Conferma'},
},
assignedCards: 'Le tue Carte Expensify',
assignedCardsRemaining: ({amount}: {amount: string}) => `${amount} rimanenti`,
diff --git a/src/languages/ja.ts b/src/languages/ja.ts
index 1fb0fb5313e16..d5bdfadc8efe5 100644
--- a/src/languages/ja.ts
+++ b/src/languages/ja.ts
@@ -978,7 +978,6 @@ const translations: TranslationDeepObject = {
subtitle: ({policyName}: {policyName: string}) => `${policyName} > 会計`,
},
fixPersonalCardConnection: {title: ({cardName}: {cardName?: string}) => (cardName ? `${cardName}個人カードの接続を修正` : '個人カードの連携を修正'), subtitle: 'ウォレット'},
- validateAccount: {title: 'Expensify を引き続きご利用いただくには、アカウントを認証してください', subtitle: 'アカウント', cta: '検証する'},
},
assignedCards: 'お客様の Expensify カード',
assignedCardsRemaining: ({amount}: {amount: string}) => `残額:${amount}`,
diff --git a/src/languages/nl.ts b/src/languages/nl.ts
index 5bee400ffe6f5..d43530ba86d30 100644
--- a/src/languages/nl.ts
+++ b/src/languages/nl.ts
@@ -985,7 +985,6 @@ const translations: TranslationDeepObject = {
title: ({cardName}: {cardName?: string}) => (cardName ? `Verbinding van persoonlijke kaart ${cardName} herstellen` : 'Verbinding persoonlijke kaart herstellen'),
subtitle: 'Portemonnee',
},
- validateAccount: {title: 'Valideer je account om Expensify te blijven gebruiken', subtitle: 'Account', cta: 'Valideren'},
},
assignedCards: 'Je Expensify Kaarten',
assignedCardsRemaining: ({amount}: {amount: string}) => `${amount} resterend`,
diff --git a/src/languages/pl.ts b/src/languages/pl.ts
index 3bea0ab6b5ffd..9afc913a06cc5 100644
--- a/src/languages/pl.ts
+++ b/src/languages/pl.ts
@@ -986,7 +986,6 @@ const translations: TranslationDeepObject = {
title: ({cardName}: {cardName?: string}) => (cardName ? `Napraw połączenie z prywatną kartą ${cardName}` : 'Napraw połączenie karty prywatnej'),
subtitle: 'Portfel',
},
- validateAccount: {title: 'Zweryfikuj swoje konto, aby dalej korzystać z Expensify', subtitle: 'Konto', cta: 'Zatwierdź'},
},
assignedCards: 'Twoje Karty Expensify',
assignedCardsRemaining: ({amount}: {amount: string}) => `Pozostało ${amount}`,
diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts
index e2c3fb53a3f5f..dc69a1bbed4e9 100644
--- a/src/languages/pt-BR.ts
+++ b/src/languages/pt-BR.ts
@@ -984,7 +984,6 @@ const translations: TranslationDeepObject = {
title: ({cardName}: {cardName?: string}) => (cardName ? `Corrigir conexão do cartão pessoal ${cardName}` : 'Corrigir conexão do cartão pessoal'),
subtitle: 'Carteira',
},
- validateAccount: {title: 'Valide sua conta para continuar usando o Expensify', subtitle: 'Conta', cta: 'Validar'},
},
assignedCards: 'Seus Cartões Expensify',
assignedCardsRemaining: ({amount}: {amount: string}) => `${amount} restante`,
diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts
index 96415f4fa273d..4c966a9baaf5d 100644
--- a/src/languages/zh-hans.ts
+++ b/src/languages/zh-hans.ts
@@ -964,7 +964,6 @@ const translations: TranslationDeepObject = {
defaultSubtitle: '工作区',
subtitle: ({policyName}: {policyName: string}) => `${policyName} > 会计`,
},
- validateAccount: {title: '验证您的账户以继续使用 Expensify', subtitle: '账户', cta: '验证'},
},
assignedCards: '你的 Expensify 卡',
assignedCardsRemaining: ({amount}: {amount: string}) => `剩余 ${amount}`,
diff --git a/src/pages/home/TimeSensitiveSection/index.tsx b/src/pages/home/TimeSensitiveSection/index.tsx
index 32886ed15071f..ea9eb87903e2a 100644
--- a/src/pages/home/TimeSensitiveSection/index.tsx
+++ b/src/pages/home/TimeSensitiveSection/index.tsx
@@ -1,4 +1,3 @@
-import {isUserValidatedSelector} from '@selectors/Account';
import {activeAdminPoliciesSelector} from '@selectors/Policy';
import React, {useCallback} from 'react';
import {View} from 'react-native';
@@ -25,7 +24,6 @@ import FixPersonalCardConnection from './items/FixPersonalCardConnection';
import Offer25off from './items/Offer25off';
import Offer50off from './items/Offer50off';
import ReviewCardFraud from './items/ReviewCardFraud';
-import ValidateAccount from './items/ValidateAccount';
type BrokenAccountingConnection = {
/** The policy ID associated with this connection */
@@ -66,13 +64,8 @@ function TimeSensitiveSection() {
// Selector for filtering admin policies (Release 4)
const adminPoliciesSelectorWrapper = useCallback((policies: OnyxCollection) => activeAdminPoliciesSelector(policies, login ?? ''), [login]);
- const [adminPolicies] = useOnyx(ONYXKEYS.COLLECTION.POLICY, {
- selector: adminPoliciesSelectorWrapper,
- });
+ const [adminPolicies] = useOnyx(ONYXKEYS.COLLECTION.POLICY, {selector: adminPoliciesSelectorWrapper});
const [connectionSyncProgress] = useOnyx(ONYXKEYS.COLLECTION.POLICY_CONNECTION_SYNC_PROGRESS);
- const [isUserValidated] = useOnyx(ONYXKEYS.ACCOUNT, {
- selector: isUserValidatedSelector,
- });
// Get card feed errors for company card connections (Release 4)
const cardFeedErrors = useCardFeedErrors();
@@ -139,12 +132,10 @@ function TimeSensitiveSection() {
const hasBrokenCompanyCards = brokenCompanyCardConnections.length > 0;
const hasBrokenPersonalCards = brokenPersonalCardConnections.length > 0;
const hasBrokenAccountingConnections = brokenAccountingConnections.length > 0;
- const shouldShowValidateAccount = isUserValidated === false;
// This guard must exactly match the conditions used to render each widget below.
// If a widget has additional conditions in the render (e.g. && !!discountInfo), those
// must be reflected here to avoid showing an empty "Time sensitive" section.
const hasAnyTimeSensitiveContent =
- shouldShowValidateAccount ||
shouldShowReviewCardFraud ||
shouldShowAddPaymentCard ||
shouldShow50off ||
@@ -160,22 +151,18 @@ function TimeSensitiveSection() {
}
// Priority order:
- // 1. Validate account
- // 2. Potential card fraud
- // 3. Add payment card (trial ended, no payment card)
- // 4. Broken bank connections (company cards)
- // 5. Broken bank connections (personal cards)
- // 6. Broken accounting connections
- // 7. Early adoption discount (50% or 25%)
- // 8. Expensify card shipping
- // 9. Expensify card activation
+ // 1. Potential card fraud
+ // 2. Add payment card (trial ended, no payment card)
+ // 3. Broken bank connections (company cards)
+ // 4. Broken bank connections (personal cards)
+ // 5. Broken accounting connections
+ // 6. Early adoption discount (50% or 25%)
+ // 7. Expensify card shipping
+ // 8. Expensify card activation
return (
- {/* Priority 1: Validate account */}
- {shouldShowValidateAccount && }
-
- {/* Priority 2: Card fraud alerts */}
+ {/* Priority 1: Card fraud alerts */}
{shouldShowReviewCardFraud &&
cardsWithFraud.map((card) => {
if (!card.nameValuePairs?.possibleFraud) {
@@ -189,9 +176,9 @@ function TimeSensitiveSection() {
);
})}
- {/* Priority 3: Add payment card (trial ended, no payment card) */}
+ {/* Priority 2: Add payment card (trial ended, no payment card) */}
{shouldShowAddPaymentCard && }
- {/* Priority 4: Broken company card connections */}
+ {/* Priority 3: Broken company card connections */}
{brokenCompanyCardConnections.map((connection) => {
const card = cardFeedErrors.cardsWithBrokenFeedConnection[connection.cardID];
if (!card) {
@@ -207,7 +194,7 @@ function TimeSensitiveSection() {
);
})}
- {/* Priority 5: Broken personal card connections */}
+ {/* Priority 4: Broken personal card connections */}
{brokenPersonalCardConnections.map((connection) => {
const card = cardFeedErrors.personalCardsWithBrokenConnection[connection.cardID];
if (!card) {
@@ -221,7 +208,7 @@ function TimeSensitiveSection() {
);
})}
- {/* Priority 6: Broken accounting connections */}
+ {/* Priority 5: Broken accounting connections */}
{brokenAccountingConnections.map((connection) => (
))}
- {/* Priority 7: Early adoption discount offers */}
+ {/* Priority 6: Early adoption discount offers */}
{shouldShow50off && }
{shouldShow25off && !!discountInfo && }
- {/* Priority 8: Expensify card shipping */}
+ {/* Priority 7: Expensify card shipping */}
{shouldShowAddShippingAddress &&
cardsNeedingShippingAddress.map((card) => (
))}
- {/* Priority 9: Expensify card activation */}
+ {/* Priority 8: Expensify card activation */}
{shouldShowActivateCard &&
cardsNeedingActivation.map((card) => (
Navigation.navigate(ROUTES.SETTINGS_CONTACT_METHOD_VERIFY_ACCOUNT.getRoute())}
- buttonProps={{success: true}}
- />
- );
-}
-
-export default ValidateAccount;
diff --git a/tests/unit/pages/home/TimeSensitiveSection/ValidateAccountTest.tsx b/tests/unit/pages/home/TimeSensitiveSection/ValidateAccountTest.tsx
deleted file mode 100644
index 279dfc0e76fd8..0000000000000
--- a/tests/unit/pages/home/TimeSensitiveSection/ValidateAccountTest.tsx
+++ /dev/null
@@ -1,84 +0,0 @@
-import {render, screen} from '@testing-library/react-native';
-import Onyx from 'react-native-onyx';
-import OnyxListItemProvider from '@src/components/OnyxListItemProvider';
-import ONYXKEYS from '@src/ONYXKEYS';
-import TimeSensitiveSection from '@src/pages/home/TimeSensitiveSection';
-import waitForBatchedUpdates from '../../../../utils/waitForBatchedUpdates';
-
-jest.mock('@libs/Navigation/Navigation');
-
-jest.mock('@hooks/useLocalize', () => jest.fn(() => ({translate: jest.fn((key: string) => key)})));
-
-jest.mock('@hooks/useLazyAsset', () => ({
- useMemoizedLazyExpensifyIcons: jest.fn(() => ({
- EnvelopeOpenStar: () => null,
- })),
-}));
-
-jest.mock('@src/pages/home/TimeSensitiveSection/hooks/useTimeSensitiveOffers', () =>
- jest.fn(() => ({
- shouldShow50off: false,
- shouldShow25off: false,
- shouldShowAddPaymentCard: false,
- firstDayFreeTrial: undefined,
- discountInfo: undefined,
- })),
-);
-
-jest.mock('@src/pages/home/TimeSensitiveSection/hooks/useTimeSensitiveCards', () =>
- jest.fn(() => ({
- shouldShowAddShippingAddress: false,
- shouldShowActivateCard: false,
- shouldShowReviewCardFraud: false,
- cardsNeedingShippingAddress: [],
- cardsNeedingActivation: [],
- cardsWithFraud: [],
- })),
-);
-
-jest.mock('@hooks/useCardFeedErrors', () =>
- jest.fn(() => ({
- cardsWithBrokenFeedConnection: {},
- personalCardsWithBrokenConnection: {},
- })),
-);
-
-jest.mock('@hooks/useCurrentUserPersonalDetails', () => jest.fn(() => ({login: 'test@example.com'})));
-
-jest.mock('@hooks/useResponsiveLayout', () => jest.fn(() => ({shouldUseNarrowLayout: false})));
-
-const renderTimeSensitiveSection = () =>
- render(
-
-
- ,
- );
-
-describe('TimeSensitiveSection - ValidateAccount', () => {
- beforeAll(() => {
- Onyx.init({keys: ONYXKEYS});
- });
-
- beforeEach(async () => {
- await Onyx.clear();
- await waitForBatchedUpdates();
- });
-
- it('shows ValidateAccount widget when account is not validated', async () => {
- await Onyx.set(ONYXKEYS.ACCOUNT, {validated: false});
- await waitForBatchedUpdates();
-
- renderTimeSensitiveSection();
-
- expect(screen.getByText('homePage.timeSensitiveSection.validateAccount.title')).toBeTruthy();
- });
-
- it('hides ValidateAccount widget when account is validated', async () => {
- await Onyx.set(ONYXKEYS.ACCOUNT, {validated: true});
- await waitForBatchedUpdates();
-
- renderTimeSensitiveSection();
-
- expect(screen.queryByText('homePage.timeSensitiveSection.validateAccount.title')).toBeNull();
- });
-});