diff --git a/src/components/KYCWall/BaseKYCWall.tsx b/src/components/KYCWall/BaseKYCWall.tsx index 39ac82542792d..9157b811a12e9 100644 --- a/src/components/KYCWall/BaseKYCWall.tsx +++ b/src/components/KYCWall/BaseKYCWall.tsx @@ -26,6 +26,7 @@ import {setKYCWallSource} from '@userActions/Wallet'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; +import {lastWorkspaceNumberSelector} from '@src/selectors/Policy'; import type {BankAccountList, Policy} from '@src/types/onyx'; import {getEmptyObject} from '@src/types/utils/EmptyObject'; import viewRef from '@src/types/utils/viewRef'; @@ -67,7 +68,7 @@ function KYCWall({ const [betas] = useOnyx(ONYXKEYS.BETAS); const [conciergeReportID] = useOnyx(ONYXKEYS.CONCIERGE_REPORT_ID); - const {formatPhoneNumber} = useLocalize(); + const {formatPhoneNumber, translate} = useLocalize(); const currentUserDetails = useCurrentUserPersonalDetails(); const currentUserEmail = currentUserDetails.email ?? ''; const reportPreviewAction = useParentReportAction(iouReport); @@ -165,8 +166,9 @@ function KYCWall({ return; } + const lastWorkspaceNumber = lastWorkspaceNumberSelector(policies, currentUserEmail); const {policyID, workspaceChatReportID, reportPreviewReportActionID, adminsChatReportID} = - createWorkspaceFromIOUPayment(iouReport, reportPreviewAction, currentUserEmail, employeeEmail, conciergeReportID) ?? {}; + createWorkspaceFromIOUPayment(iouReport, reportPreviewAction, currentUserEmail, employeeEmail, conciergeReportID, lastWorkspaceNumber, translate) ?? {}; if (policyID && iouReport?.policyID) { savePreferredPaymentMethod(iouReport.policyID, policyID, CONST.LAST_PAYMENT_METHOD.IOU, lastPaymentMethod?.[iouReport?.policyID]); } @@ -213,6 +215,7 @@ function KYCWall({ employeeEmail, introSelected, formatPhoneNumber, + translate, reportTransactions, lastPaymentMethod, isSelfTourViewed, diff --git a/src/hooks/useAutoCreateTrackWorkspace.ts b/src/hooks/useAutoCreateTrackWorkspace.ts index 6e9bd3e10eeff..ac57ad1dee15e 100644 --- a/src/hooks/useAutoCreateTrackWorkspace.ts +++ b/src/hooks/useAutoCreateTrackWorkspace.ts @@ -4,11 +4,12 @@ import type {OnyxCollection} from 'react-native-onyx'; import {navigateAfterOnboardingWithMicrotaskQueue} from '@libs/navigateAfterOnboarding'; import {createDisplayName} from '@libs/PersonalDetailsUtils'; import {isPaidGroupPolicy, isPolicyAdmin} from '@libs/PolicyUtils'; -import {createWorkspace, generateDefaultWorkspaceName, generatePolicyID} from '@userActions/Policy/Policy'; +import {createWorkspace, generatePolicyID, newGenerateDefaultWorkspaceName} from '@userActions/Policy/Policy'; import {completeOnboarding} from '@userActions/Report'; import {setOnboardingAdminsChatReportID, setOnboardingPolicyID} from '@userActions/Welcome'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; +import {lastWorkspaceNumberSelector} from '@src/selectors/Policy'; import type {OnboardingPurpose, Policy} from '@src/types/onyx'; import useArchivedReportsIdSet from './useArchivedReportsIdSet'; import useCurrentUserPersonalDetails from './useCurrentUserPersonalDetails'; @@ -37,14 +38,21 @@ function useAutoCreateTrackWorkspace() { () => (policies: OnyxCollection) => Object.values(policies ?? {}).some((policy) => isPaidGroupPolicy(policy) && isPolicyAdmin(policy, session?.email)), [session?.email], ); + const lastWorkspaceNumberWithEmailSelector = useCallback( + (policies: OnyxCollection) => { + return lastWorkspaceNumberSelector(policies, session?.email ?? ''); + }, + [session?.email], + ); const [hasPaidGroupAdminPolicy] = useOnyx(ONYXKEYS.COLLECTION.POLICY, {selector: paidGroupPolicySelector}); + const [lastWorkspaceNumber] = useOnyx(ONYXKEYS.COLLECTION.POLICY, {selector: lastWorkspaceNumberWithEmailSelector}); const [activePolicyID] = useOnyx(ONYXKEYS.NVP_ACTIVE_POLICY_ID); const [conciergeChatReportID = ''] = useOnyx(ONYXKEYS.CONCIERGE_REPORT_ID); const [onboardingValues] = useOnyx(ONYXKEYS.NVP_ONBOARDING); const currentUserPersonalDetails = useCurrentUserPersonalDetails(); const archivedReportsIdSet = useArchivedReportsIdSet(); const {isBetaEnabled} = usePermissions(); - const {formatPhoneNumber} = useLocalize(); + const {translate, formatPhoneNumber} = useLocalize(); const {isRestrictedPolicyCreation} = usePreferredPolicy(); const hasActiveAdminPolicies = useHasActiveAdminPolicies(); const {onboardingMessages} = useOnboardingMessages(); @@ -67,7 +75,7 @@ function useAutoCreateTrackWorkspace() { ? createWorkspace({ policyOwnerEmail: undefined, makeMeAdmin: true, - policyName: generateDefaultWorkspaceName(session?.email, displayName), + policyName: newGenerateDefaultWorkspaceName(session?.email ?? '', lastWorkspaceNumber, translate, displayName), policyID: generatePolicyID(), engagementChoice: CONST.ONBOARDING_CHOICES.TRACK_WORKSPACE, currency: currentUserPersonalDetails.localCurrencyCode ?? CONST.CURRENCY.USD, @@ -113,6 +121,8 @@ function useAutoCreateTrackWorkspace() { [ session?.email, session?.accountID, + lastWorkspaceNumber, + translate, formatPhoneNumber, isRestrictedPolicyCreation, onboardingPolicyID, diff --git a/src/libs/actions/Policy/Policy.ts b/src/libs/actions/Policy/Policy.ts index 5975ed6324c43..62c15c0e14d1c 100644 --- a/src/libs/actions/Policy/Policy.ts +++ b/src/libs/actions/Policy/Policy.ts @@ -2155,7 +2155,7 @@ function clearDuplicateWorkspace() { Onyx.set(ONYXKEYS.DUPLICATE_WORKSPACE, {}); } -function getDisplayNameForWorkspace(email: string) { +function getDisplayNameForWorkspace(email: string, displayNameOverride?: string) { const emailParts = email.split('@'); const domain = emailParts.at(1) ?? ''; const isSMSDomain = `@${domain}` === CONST.SMS.DOMAIN; @@ -2169,7 +2169,7 @@ function getDisplayNameForWorkspace(email: string) { } const userDetails = PersonalDetailsUtils.getPersonalDetailByEmail(email); - const displayName = userDetails?.displayName?.trim(); + const displayName = displayNameOverride?.trim() ?? userDetails?.displayName?.trim(); if (displayName) { return Str.UCFirst(displayName); } @@ -2179,12 +2179,10 @@ function getDisplayNameForWorkspace(email: string) { } /** - * Generate a policy name based on an email and policy list. - * @param [email] the email to base the workspace name on. If not passed, will use the logged-in user's email instead - * @param [lastWorkspaceNumber] the last workspace number + * Generate a policy name based on an email and the last workspace number. */ -function newGenerateDefaultWorkspaceName(email: string, lastWorkspaceNumber: number | undefined, localeTranslate: LocalizedTranslate): string { - const emailParts = email ? email.split('@') : deprecatedSessionEmail.split('@'); +function newGenerateDefaultWorkspaceName(email: string, lastWorkspaceNumber: number | undefined, localeTranslate: LocalizedTranslate, displayNameOverride?: string): string { + const emailParts = email.split('@'); if (!emailParts || emailParts.length !== 2) { return ''; } @@ -2195,7 +2193,7 @@ function newGenerateDefaultWorkspaceName(email: string, lastWorkspaceNumber: num return localeTranslate('workspace.new.myGroupWorkspace', {workspaceNumber: lastWorkspaceNumber !== undefined ? lastWorkspaceNumber + 1 : undefined}); } - const displayNameForWorkspace = getDisplayNameForWorkspace(email || deprecatedSessionEmail); + const displayNameForWorkspace = getDisplayNameForWorkspace(email, displayNameOverride); return localeTranslate('workspace.new.workspaceName', displayNameForWorkspace, lastWorkspaceNumber !== undefined ? lastWorkspaceNumber + 1 : undefined); } @@ -3942,6 +3940,8 @@ function createWorkspaceFromIOUPayment( currentUserEmail: string, iouReportOwnerEmail: string, conciergeReportID: string | undefined, + lastWorkspaceNumber: number | undefined, + localeTranslate: LocalizedTranslate, ): WorkspaceFromIOUCreationData | undefined { // This flow only works for IOU reports if (!iouReport || !ReportUtils.isIOUReportUsingReport(iouReport)) { @@ -3950,7 +3950,7 @@ function createWorkspaceFromIOUPayment( // Generate new variables for the policy const policyID = generatePolicyID(); - const workspaceName = generateDefaultWorkspaceName(currentUserEmail); + const workspaceName = newGenerateDefaultWorkspaceName(currentUserEmail, lastWorkspaceNumber, localeTranslate); const employeeAccountID = iouReport?.ownerAccountID; const {customUnits, customUnitID, customUnitRateID} = buildOptimisticDistanceRateCustomUnits(iouReport?.currency); const oldPersonalPolicyID = iouReport?.policyID; diff --git a/tests/ui/OnboardingPurpose.tsx b/tests/ui/OnboardingPurpose.tsx index ae23b3d3187a2..1b48f6e54cce5 100644 --- a/tests/ui/OnboardingPurpose.tsx +++ b/tests/ui/OnboardingPurpose.tsx @@ -15,6 +15,7 @@ import type {OnboardingModalNavigatorParamList} from '@libs/Navigation/types'; import OnboardingPurpose from '@pages/OnboardingPurpose'; import {completeOnboarding} from '@userActions/Report'; import CONST from '@src/CONST'; +import IntlStore from '@src/languages/IntlStore'; import type {TranslationPaths} from '@src/languages/types'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; @@ -66,6 +67,7 @@ describe('OnboardingPurpose Page', () => { Onyx.init({ keys: ONYXKEYS, }); + return IntlStore.load(CONST.LOCALES.EN); }); beforeEach(() => { diff --git a/tests/ui/PersonalDetailsOnboarding.tsx b/tests/ui/PersonalDetailsOnboarding.tsx index 448a836eec9fe..66565567b6991 100644 --- a/tests/ui/PersonalDetailsOnboarding.tsx +++ b/tests/ui/PersonalDetailsOnboarding.tsx @@ -15,6 +15,7 @@ import createPlatformStackNavigator from '@libs/Navigation/PlatformStackNavigati import type {OnboardingModalNavigatorParamList} from '@navigation/types'; import OnboardingPersonalDetails from '@pages/OnboardingPersonalDetails'; import CONST from '@src/CONST'; +import IntlStore from '@src/languages/IntlStore'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; import SCREENS from '@src/SCREENS'; @@ -62,6 +63,7 @@ describe('OnboardingPersonalDetails Page', () => { Onyx.init({ keys: ONYXKEYS, }); + return IntlStore.load(CONST.LOCALES.EN); }); beforeEach(() => {