diff --git a/src/libs/PolicyUtils.ts b/src/libs/PolicyUtils.ts index af4bd03fe93fd..b15558e69f600 100644 --- a/src/libs/PolicyUtils.ts +++ b/src/libs/PolicyUtils.ts @@ -1213,6 +1213,14 @@ function isPolicyAccessible(policy: OnyxEntry): boolean { ); } +function areAllGroupPoliciesExpenseChatDisabled(policies = allPolicies) { + const groupPolicies = Object.values(policies ?? {}).filter((policy) => isPaidGroupPolicy(policy)); + if (groupPolicies.length === 0) { + return false; + } + return !groupPolicies.some((policy) => !!policy?.isPolicyExpenseChatEnabled); +} + function getGroupPaidPoliciesWithExpenseChatEnabled(policies: OnyxCollection | null = allPolicies) { if (isEmptyObject(policies)) { return CONST.EMPTY_ARRAY; @@ -1490,6 +1498,7 @@ export { getManagerAccountID, isPrefferedExporter, isAutoSyncEnabled, + areAllGroupPoliciesExpenseChatDisabled, }; export type {MemberEmailsToAccountIDs}; diff --git a/src/pages/Search/EmptySearchView.tsx b/src/pages/Search/EmptySearchView.tsx index a2cbdbcd3df22..e56cb1abe3304 100644 --- a/src/pages/Search/EmptySearchView.tsx +++ b/src/pages/Search/EmptySearchView.tsx @@ -1,6 +1,7 @@ import React, {useMemo, useState} from 'react'; import {Linking, View} from 'react-native'; import {useOnyx} from 'react-native-onyx'; +import type {OnyxCollection} from 'react-native-onyx'; import BookTravelButton from '@components/BookTravelButton'; import ConfirmModal from '@components/ConfirmModal'; import EmptyStateComponent from '@components/EmptyStateComponent'; @@ -23,12 +24,13 @@ import {canActionTask, canModifyTask, completeTask} from '@libs/actions/Task'; import {setSelfTourViewed} from '@libs/actions/Welcome'; import interceptAnonymousUser from '@libs/interceptAnonymousUser'; import {hasSeenTourSelector} from '@libs/onboardingSelectors'; -import {getGroupPaidPoliciesWithExpenseChatEnabled} from '@libs/PolicyUtils'; +import {areAllGroupPoliciesExpenseChatDisabled} from '@libs/PolicyUtils'; import {generateReportID} from '@libs/ReportUtils'; import {getNavatticURL} from '@libs/TourUtils'; import variables from '@styles/variables'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; +import type {Policy} from '@src/types/onyx'; import type {SearchDataTypes} from '@src/types/onyx/SearchResults'; type EmptySearchViewProps = { @@ -55,7 +57,7 @@ function EmptySearchView({type, hasResults}: EmptySearchViewProps) { const [modalVisible, setModalVisible] = useState(false); const [allPolicies] = useOnyx(ONYXKEYS.COLLECTION.POLICY); const shouldRedirectToExpensifyClassic = useMemo(() => { - return getGroupPaidPoliciesWithExpenseChatEnabled(allPolicies).length === 0; + return areAllGroupPoliciesExpenseChatDisabled((allPolicies as OnyxCollection) ?? {}); }, [allPolicies]); const tripViewChildren = useMemo(() => { diff --git a/src/pages/home/sidebar/FloatingActionButtonAndPopover.tsx b/src/pages/home/sidebar/FloatingActionButtonAndPopover.tsx index e1684f792eb7c..e04a0a6ed83b1 100644 --- a/src/pages/home/sidebar/FloatingActionButtonAndPopover.tsx +++ b/src/pages/home/sidebar/FloatingActionButtonAndPopover.tsx @@ -36,7 +36,13 @@ import interceptAnonymousUser from '@libs/interceptAnonymousUser'; import navigateAfterInteraction from '@libs/Navigation/navigateAfterInteraction'; import Navigation from '@libs/Navigation/Navigation'; import {hasSeenTourSelector} from '@libs/onboardingSelectors'; -import {canSendInvoice as canSendInvoicePolicyUtils, getGroupPaidPoliciesWithExpenseChatEnabled, isPaidGroupPolicy, shouldShowPolicy} from '@libs/PolicyUtils'; +import { + areAllGroupPoliciesExpenseChatDisabled, + canSendInvoice as canSendInvoicePolicyUtils, + getGroupPaidPoliciesWithExpenseChatEnabled, + isPaidGroupPolicy, + shouldShowPolicy, +} from '@libs/PolicyUtils'; import {canCreateRequest, generateReportID, getDisplayNameForParticipant, getIcons, getReportName, getWorkspaceChats, isArchivedReport, isPolicyExpenseChat} from '@libs/ReportUtils'; import {shouldRestrictUserBillableActions} from '@libs/SubscriptionUtils'; import {getNavatticURL} from '@libs/TourUtils'; @@ -220,8 +226,8 @@ function FloatingActionButtonAndPopover({onHideCreateMenu, onShowCreateMenu, isT * 2. none of the group policies they are a member of have isPolicyExpenseChatEnabled=true */ const shouldRedirectToExpensifyClassic = useMemo(() => { - return groupPoliciesWithChatEnabled.length === 0; - }, [groupPoliciesWithChatEnabled.length]); + return areAllGroupPoliciesExpenseChatDisabled((allPolicies as OnyxCollection) ?? {}); + }, [allPolicies]); const shouldShowNewWorkspaceButton = Object.values(allPolicies ?? {}).every((policy) => !shouldShowPolicy(policy as OnyxEntry, !!isOffline, session?.email)); @@ -479,7 +485,7 @@ function FloatingActionButtonAndPopover({onHideCreateMenu, onShowCreateMenu, isT text: translate('report.newReport.createReport'), onSelected: () => { interceptAnonymousUser(() => { - if (shouldRedirectToExpensifyClassic) { + if (groupPoliciesWithChatEnabled.length === 0) { setModalVisible(true); return; }