Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions src/components/KYCWall/BaseKYCWall.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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]);
}
Expand Down Expand Up @@ -213,6 +215,7 @@ function KYCWall({
employeeEmail,
introSelected,
formatPhoneNumber,
translate,
reportTransactions,
lastPaymentMethod,
isSelfTourViewed,
Expand Down
16 changes: 13 additions & 3 deletions src/hooks/useAutoCreateTrackWorkspace.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -37,14 +38,21 @@ function useAutoCreateTrackWorkspace() {
() => (policies: OnyxCollection<Policy>) => Object.values(policies ?? {}).some((policy) => isPaidGroupPolicy(policy) && isPolicyAdmin(policy, session?.email)),
[session?.email],
);
const lastWorkspaceNumberWithEmailSelector = useCallback(
(policies: OnyxCollection<Policy>) => {
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();
Expand All @@ -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,
Expand Down Expand Up @@ -113,6 +121,8 @@ function useAutoCreateTrackWorkspace() {
[
session?.email,
session?.accountID,
lastWorkspaceNumber,
translate,
formatPhoneNumber,
isRestrictedPolicyCreation,
onboardingPolicyID,
Expand Down
18 changes: 9 additions & 9 deletions src/libs/actions/Policy/Policy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,7 @@
};

const deprecatedAllPolicies: OnyxCollection<Policy> = {};
Onyx.connect({

Check warning on line 255 in src/libs/actions/Policy/Policy.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.COLLECTION.POLICY,
callback: (val, key) => {
if (!key) {
Expand All @@ -268,7 +268,7 @@
});

let deprecatedAllReportActions: OnyxCollection<ReportActions>;
Onyx.connect({

Check warning on line 271 in src/libs/actions/Policy/Policy.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.COLLECTION.REPORT_ACTIONS,
waitForCollectionCallback: true,
callback: (actions) => {
Expand All @@ -278,7 +278,7 @@

let deprecatedSessionEmail = '';
let deprecatedSessionAccountID = 0;
Onyx.connect({

Check warning on line 281 in src/libs/actions/Policy/Policy.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.SESSION,
callback: (val) => {
deprecatedSessionEmail = val?.email ?? '';
Expand All @@ -287,7 +287,7 @@
});

let deprecatedAllPersonalDetails: OnyxEntry<PersonalDetailsList>;
Onyx.connect({

Check warning on line 290 in src/libs/actions/Policy/Policy.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.PERSONAL_DETAILS_LIST,
callback: (val) => (deprecatedAllPersonalDetails = val),
});
Expand Down Expand Up @@ -2155,7 +2155,7 @@
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;
Expand All @@ -2169,7 +2169,7 @@
}

const userDetails = PersonalDetailsUtils.getPersonalDetailByEmail(email);
const displayName = userDetails?.displayName?.trim();
const displayName = displayNameOverride?.trim() ?? userDetails?.displayName?.trim();
if (displayName) {
return Str.UCFirst(displayName);
}
Expand All @@ -2179,12 +2179,10 @@
}

/**
* 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 {
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

displayNameOverride is from generateDefaultWorkspaceName

const emailParts = email.split('@');
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removed the deprecatedSessionEmail because we make the email required

if (!emailParts || emailParts.length !== 2) {
return '';
}
Expand All @@ -2195,7 +2193,7 @@
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);
}
Expand Down Expand Up @@ -3942,6 +3940,8 @@
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)) {
Expand All @@ -3950,7 +3950,7 @@

// 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;
Expand Down
2 changes: 2 additions & 0 deletions tests/ui/OnboardingPurpose.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -66,6 +67,7 @@ describe('OnboardingPurpose Page', () => {
Onyx.init({
keys: ONYXKEYS,
});
return IntlStore.load(CONST.LOCALES.EN);
});

beforeEach(() => {
Expand Down
2 changes: 2 additions & 0 deletions tests/ui/PersonalDetailsOnboarding.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -62,6 +63,7 @@ describe('OnboardingPersonalDetails Page', () => {
Onyx.init({
keys: ONYXKEYS,
});
return IntlStore.load(CONST.LOCALES.EN);
});

beforeEach(() => {
Expand Down
Loading