Skip to content

Commit dcffe8c

Browse files
authored
Merge pull request Expensify#66932 from allgandalf/fixForPersonalDeatilsUtils
[Part 2]: Remove usage of Onyx.connect for ONYXKEYS.COUNTRY_CODE
2 parents b1ba8b1 + 1a1ed1c commit dcffe8c

13 files changed

Lines changed: 138 additions & 40 deletions

src/libs/PersonalDetailsUtils.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
import {Str} from 'expensify-common';
22
import type {OnyxEntry, OnyxUpdate} from 'react-native-onyx';
33
import Onyx from 'react-native-onyx';
4+
import type {LocaleContextProps} from '@components/LocaleContextProvider';
45
import CONST from '@src/CONST';
56
import ONYXKEYS from '@src/ONYXKEYS';
67
import type {OnyxInputOrEntry, PersonalDetails, PersonalDetailsList, PrivatePersonalDetails} from '@src/types/onyx';
78
import type {Address} from '@src/types/onyx/PrivatePersonalDetails';
89
import type {OnyxData} from '@src/types/onyx/Request';
910
import {isEmptyObject} from '@src/types/utils/EmptyObject';
10-
import {formatPhoneNumber} from './LocalePhoneNumber';
11+
import {formatPhoneNumber as formatPhoneNumberUtils} from './LocalePhoneNumber';
1112
import {translateLocal} from './Localize';
1213
import {areEmailsFromSamePrivateDomain} from './LoginUtils';
1314
import {parsePhoneNumber} from './PhoneNumber';
@@ -219,7 +220,11 @@ function getNewAccountIDsAndLogins(logins: string[], accountIDs: number[]) {
219220
* Given a list of logins and accountIDs, return Onyx data for users with no existing personal details stored. These users might be brand new or unknown.
220221
* They will have an "optimistic" accountID that must be cleaned up later.
221222
*/
222-
function getPersonalDetailsOnyxDataForOptimisticUsers(newLogins: string[], newAccountIDs: number[]): Required<Pick<OnyxData, 'optimisticData' | 'finallyData'>> {
223+
function getPersonalDetailsOnyxDataForOptimisticUsers(
224+
newLogins: string[],
225+
newAccountIDs: number[],
226+
formatPhoneNumber: LocaleContextProps['formatPhoneNumber'],
227+
): Required<Pick<OnyxData, 'optimisticData' | 'finallyData'>> {
223228
const personalDetailsNew: PersonalDetailsList = {};
224229
const personalDetailsCleanup: PersonalDetailsList = {};
225230

@@ -325,7 +330,7 @@ function getFormattedAddress(privatePersonalDetails: OnyxEntry<PrivatePersonalDe
325330
*/
326331
function getEffectiveDisplayName(personalDetail?: PersonalDetails): string | undefined {
327332
if (personalDetail) {
328-
return formatPhoneNumber(personalDetail?.login ?? '') || personalDetail.displayName;
333+
return formatPhoneNumberUtils(personalDetail?.login ?? '') || personalDetail.displayName;
329334
}
330335

331336
return undefined;
@@ -337,7 +342,7 @@ function getEffectiveDisplayName(personalDetail?: PersonalDetails): string | und
337342
function createDisplayName(login: string, passedPersonalDetails: Pick<PersonalDetails, 'firstName' | 'lastName'> | OnyxInputOrEntry<PersonalDetails>): string {
338343
// If we have a number like +15857527441@expensify.sms then let's remove @expensify.sms and format it
339344
// so that the option looks cleaner in our UI.
340-
const userLogin = formatPhoneNumber(login);
345+
const userLogin = formatPhoneNumberUtils(login);
341346

342347
if (!passedPersonalDetails) {
343348
return userLogin;

src/libs/actions/IOU.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5313,7 +5313,7 @@ function shareTrackedExpense(trackedExpenseParams: TrackedExpenseParams) {
53135313
optimisticData: addAccountantToWorkspaceOptimisticData,
53145314
successData: addAccountantToWorkspaceSuccessData,
53155315
failureData: addAccountantToWorkspaceFailureData,
5316-
} = buildAddMembersToWorkspaceOnyxData({[accountantEmail]: accountantAccountID}, policyID, policyMemberAccountIDs, CONST.POLICY.ROLE.ADMIN);
5316+
} = buildAddMembersToWorkspaceOnyxData({[accountantEmail]: accountantAccountID}, policyID, policyMemberAccountIDs, CONST.POLICY.ROLE.ADMIN, formatPhoneNumber);
53175317
optimisticData?.push(...addAccountantToWorkspaceOptimisticData);
53185318
successData?.push(...addAccountantToWorkspaceSuccessData);
53195319
failureData?.push(...addAccountantToWorkspaceFailureData);
@@ -5334,7 +5334,7 @@ function shareTrackedExpense(trackedExpenseParams: TrackedExpenseParams) {
53345334
optimisticData: inviteAccountantToRoomOptimisticData,
53355335
successData: inviteAccountantToRoomSuccessData,
53365336
failureData: inviteAccountantToRoomFailureData,
5337-
} = buildInviteToRoomOnyxData(chatReportID, {[accountantEmail]: accountantAccountID});
5337+
} = buildInviteToRoomOnyxData(chatReportID, {[accountantEmail]: accountantAccountID}, formatPhoneNumber);
53385338
optimisticData?.push(...inviteAccountantToRoomOptimisticData);
53395339
successData?.push(...inviteAccountantToRoomSuccessData);
53405340
failureData?.push(...inviteAccountantToRoomFailureData);

src/libs/actions/Policy/Member.ts

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type {NullishDeep, OnyxCollection, OnyxCollectionInputValue, OnyxEntry, OnyxUpdate} from 'react-native-onyx';
22
import Onyx from 'react-native-onyx';
33
import type {ValueOf} from 'type-fest';
4+
import type {LocaleContextProps} from '@components/LocaleContextProvider';
45
import * as API from '@libs/API';
56
import type {
67
AddMembersToWorkspaceParams,
@@ -873,14 +874,20 @@ function clearWorkspaceOwnerChangeFlow(policyID: string) {
873874
});
874875
}
875876

876-
function buildAddMembersToWorkspaceOnyxData(invitedEmailsToAccountIDs: InvitedEmailsToAccountIDs, policyID: string, policyMemberAccountIDs: number[], role: string) {
877+
function buildAddMembersToWorkspaceOnyxData(
878+
invitedEmailsToAccountIDs: InvitedEmailsToAccountIDs,
879+
policyID: string,
880+
policyMemberAccountIDs: number[],
881+
role: string,
882+
formatPhoneNumber: LocaleContextProps['formatPhoneNumber'],
883+
) {
877884
const logins = Object.keys(invitedEmailsToAccountIDs).map((memberLogin) => PhoneNumber.addSMSDomainIfPhoneNumber(memberLogin));
878885
const accountIDs = Object.values(invitedEmailsToAccountIDs);
879886

880887
const policyKey = `${ONYXKEYS.COLLECTION.POLICY}${policyID}` as const;
881888

882889
const {newAccountIDs, newLogins} = PersonalDetailsUtils.getNewAccountIDsAndLogins(logins, accountIDs);
883-
const newPersonalDetailsOnyxData = PersonalDetailsUtils.getPersonalDetailsOnyxDataForOptimisticUsers(newLogins, newAccountIDs);
890+
const newPersonalDetailsOnyxData = PersonalDetailsUtils.getPersonalDetailsOnyxDataForOptimisticUsers(newLogins, newAccountIDs, formatPhoneNumber);
884891

885892
const announceRoomMembers = buildRoomMembersOnyxData(CONST.REPORT.CHAT_TYPE.POLICY_ANNOUNCE, policyID, accountIDs);
886893
const adminRoomMembers = buildRoomMembersOnyxData(
@@ -967,12 +974,20 @@ function buildAddMembersToWorkspaceOnyxData(invitedEmailsToAccountIDs: InvitedEm
967974
* Adds members to the specified workspace/policyID
968975
* Please see https://github.com/Expensify/App/blob/main/README.md#Security for more details
969976
*/
970-
function addMembersToWorkspace(invitedEmailsToAccountIDs: InvitedEmailsToAccountIDs, welcomeNote: string, policyID: string, policyMemberAccountIDs: number[], role: string) {
977+
function addMembersToWorkspace(
978+
invitedEmailsToAccountIDs: InvitedEmailsToAccountIDs,
979+
welcomeNote: string,
980+
policyID: string,
981+
policyMemberAccountIDs: number[],
982+
role: string,
983+
formatPhoneNumber: LocaleContextProps['formatPhoneNumber'],
984+
) {
971985
const {optimisticData, successData, failureData, optimisticAnnounceChat, membersChats, logins} = buildAddMembersToWorkspaceOnyxData(
972986
invitedEmailsToAccountIDs,
973987
policyID,
974988
policyMemberAccountIDs,
975989
role,
990+
formatPhoneNumber,
976991
);
977992

978993
const params: AddMembersToWorkspaceParams = {

src/libs/actions/Report.ts

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import type {NullishDeep, OnyxCollection, OnyxCollectionInputValue, OnyxEntry, O
77
import Onyx from 'react-native-onyx';
88
import type {PartialDeep, ValueOf} from 'type-fest';
99
import type {Emoji} from '@assets/emojis/types';
10+
import type {LocaleContextProps} from '@components/LocaleContextProvider';
1011
import * as ActiveClientManager from '@libs/ActiveClientManager';
1112
import addEncryptedAuthTokenToURL from '@libs/addEncryptedAuthTokenToURL';
1213
import * as API from '@libs/API';
@@ -3703,7 +3704,7 @@ function leaveRoom(reportID: string, isWorkspaceMemberLeavingWorkspaceRoom = fal
37033704
navigateToMostRecentReport(report);
37043705
}
37053706

3706-
function buildInviteToRoomOnyxData(reportID: string, inviteeEmailsToAccountIDs: InvitedEmailsToAccountIDs) {
3707+
function buildInviteToRoomOnyxData(reportID: string, inviteeEmailsToAccountIDs: InvitedEmailsToAccountIDs, formatPhoneNumber: LocaleContextProps['formatPhoneNumber']) {
37073708
const report = allReports?.[`${ONYXKEYS.COLLECTION.REPORT}${reportID}`];
37083709
const reportMetadata = getReportMetadata(reportID);
37093710
const isGroupChat = isGroupChatReportUtils(report);
@@ -3729,7 +3730,7 @@ function buildInviteToRoomOnyxData(reportID: string, inviteeEmailsToAccountIDs:
37293730
{...report?.participants},
37303731
);
37313732

3732-
const newPersonalDetailsOnyxData = PersonalDetailsUtils.getPersonalDetailsOnyxDataForOptimisticUsers(newLogins, newAccountIDs);
3733+
const newPersonalDetailsOnyxData = PersonalDetailsUtils.getPersonalDetailsOnyxDataForOptimisticUsers(newLogins, newAccountIDs, formatPhoneNumber);
37333734
const pendingChatMembers = getPendingChatMembers(inviteeAccountIDs, reportMetadata?.pendingChatMembers ?? [], CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD);
37343735

37353736
const newParticipantAccountCleanUp = newAccountIDs.reduce<Record<number, null>>((participantCleanUp, newAccountID) => {
@@ -3802,8 +3803,8 @@ function buildInviteToRoomOnyxData(reportID: string, inviteeEmailsToAccountIDs:
38023803
}
38033804

38043805
/** Invites people to a room */
3805-
function inviteToRoom(reportID: string, inviteeEmailsToAccountIDs: InvitedEmailsToAccountIDs) {
3806-
const {optimisticData, successData, failureData, isGroupChat, inviteeEmails, newAccountIDs} = buildInviteToRoomOnyxData(reportID, inviteeEmailsToAccountIDs);
3806+
function inviteToRoom(reportID: string, inviteeEmailsToAccountIDs: InvitedEmailsToAccountIDs, formatPhoneNumber: LocaleContextProps['formatPhoneNumber']) {
3807+
const {optimisticData, successData, failureData, isGroupChat, inviteeEmails, newAccountIDs} = buildInviteToRoomOnyxData(reportID, inviteeEmailsToAccountIDs, formatPhoneNumber);
38073808

38083809
if (isGroupChat) {
38093810
const parameters: InviteToGroupChatParams = {
@@ -3883,8 +3884,8 @@ function updateGroupChatMemberRoles(reportID: string, accountIDList: number[], r
38833884
}
38843885

38853886
/** Invites people to a group chat */
3886-
function inviteToGroupChat(reportID: string, inviteeEmailsToAccountIDs: InvitedEmailsToAccountIDs) {
3887-
inviteToRoom(reportID, inviteeEmailsToAccountIDs);
3887+
function inviteToGroupChat(reportID: string, inviteeEmailsToAccountIDs: InvitedEmailsToAccountIDs, formatPhoneNumber: LocaleContextProps['formatPhoneNumber']) {
3888+
inviteToRoom(reportID, inviteeEmailsToAccountIDs, formatPhoneNumber);
38883889
}
38893890

38903891
/** Removes people from a room
@@ -5205,7 +5206,7 @@ function moveIOUReportToPolicy(reportID: string, policyID: string) {
52055206
* @param reportID - The ID of the IOU report to move
52065207
* @param policyID - The ID of the policy to move the report to
52075208
*/
5208-
function moveIOUReportToPolicyAndInviteSubmitter(reportID: string, policyID: string) {
5209+
function moveIOUReportToPolicyAndInviteSubmitter(reportID: string, policyID: string, formatPhoneNumber: LocaleContextProps['formatPhoneNumber']) {
52095210
const iouReport = allReports?.[`${ONYXKEYS.COLLECTION.REPORT}${reportID}`];
52105211
// This will be fixed as part of https://github.com/Expensify/Expensify/issues/507850
52115212
// eslint-disable-next-line deprecation/deprecation
@@ -5247,7 +5248,7 @@ function moveIOUReportToPolicyAndInviteSubmitter(reportID: string, policyID: str
52475248

52485249
// Get personal details onyx data (similar to addMembersToWorkspace)
52495250
const {newAccountIDs, newLogins} = PersonalDetailsUtils.getNewAccountIDsAndLogins([submitterLogin], [submitterAccountID]);
5250-
const newPersonalDetailsOnyxData = PersonalDetailsUtils.getPersonalDetailsOnyxDataForOptimisticUsers(newLogins, newAccountIDs);
5251+
const newPersonalDetailsOnyxData = PersonalDetailsUtils.getPersonalDetailsOnyxDataForOptimisticUsers(newLogins, newAccountIDs, formatPhoneNumber);
52515252

52525253
// Build announce room members data for the new member
52535254
const announceRoomMembers = buildRoomMembersOnyxData(CONST.REPORT.CHAT_TYPE.POLICY_ANNOUNCE, policyID, [submitterAccountID]);
@@ -5769,7 +5770,7 @@ function changeReportPolicy(report: Report, policyID: string, reportNextStep?: R
57695770
/**
57705771
* Invites the submitter to the new report policy, changes the policy of a report and all its child reports, and moves the report to the new policy's expense chat
57715772
*/
5772-
function changeReportPolicyAndInviteSubmitter(report: Report, policyID: string, employeeList: PolicyEmployeeList | undefined) {
5773+
function changeReportPolicyAndInviteSubmitter(report: Report, policyID: string, employeeList: PolicyEmployeeList | undefined, formatPhoneNumber: LocaleContextProps['formatPhoneNumber']) {
57735774
if (!report.reportID || !policyID || report.policyID === policyID || !isExpenseReport(report) || !report.ownerAccountID) {
57745775
return;
57755776
}
@@ -5785,6 +5786,7 @@ function changeReportPolicyAndInviteSubmitter(report: Report, policyID: string,
57855786
policyID,
57865787
policyMemberAccountIDs,
57875788
CONST.POLICY.ROLE.USER,
5789+
formatPhoneNumber,
57885790
);
57895791
const optimisticPolicyExpenseChatReportID = membersChats.reportCreationData[submitterEmail].reportID;
57905792
const optimisticPolicyExpenseChatCreatedReportActionID = membersChats.reportCreationData[submitterEmail].reportActionID;

src/pages/InviteReportParticipantsPage.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ function InviteReportParticipantsPage({betas, report, didScreenTransitionEnd}: I
5555
});
5656

5757
const styles = useThemeStyles();
58-
const {translate} = useLocalize();
58+
const {translate, formatPhoneNumber} = useLocalize();
5959
const [personalDetails] = useOnyx(ONYXKEYS.PERSONAL_DETAILS_LIST, {canBeMissing: false});
6060
const [userSearchPhrase] = useOnyx(ONYXKEYS.ROOM_MEMBERS_USER_SEARCH_PHRASE, {canBeMissing: true});
6161
const [searchValue, debouncedSearchTerm, setSearchValue] = useDebouncedState(userSearchPhrase ?? '');
@@ -198,7 +198,7 @@ function InviteReportParticipantsPage({betas, report, didScreenTransitionEnd}: I
198198
}
199199
invitedEmailsToAccountIDs[login] = accountID;
200200
});
201-
inviteToGroupChat(reportID, invitedEmailsToAccountIDs);
201+
inviteToGroupChat(reportID, invitedEmailsToAccountIDs, formatPhoneNumber);
202202
goBack();
203203
}, [selectedOptions, goBack, reportID, validate]);
204204

src/pages/OnboardingWorkspaceInvite/BaseOnboardingWorkspaceInvite.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ type MembersSection = SectionListData<MemberForList, Section<MemberForList>>;
4343

4444
function BaseOnboardingWorkspaceInvite({shouldUseNativeStyles}: BaseOnboardingWorkspaceInviteProps) {
4545
const styles = useThemeStyles();
46-
const {translate} = useLocalize();
46+
const {translate, formatPhoneNumber} = useLocalize();
4747
const [onboardingPolicyID] = useOnyx(ONYXKEYS.ONBOARDING_POLICY_ID, {canBeMissing: true});
4848
const [onboardingAdminsChatReportID] = useOnyx(ONYXKEYS.ONBOARDING_ADMINS_CHAT_REPORT_ID, {canBeMissing: true});
4949
const policy = usePolicy(onboardingPolicyID);
@@ -271,9 +271,9 @@ function BaseOnboardingWorkspaceInvite({shouldUseNativeStyles}: BaseOnboardingWo
271271
invitedEmailsToAccountIDs[login] = Number(accountID);
272272
});
273273
const policyMemberAccountIDs = Object.values(getMemberAccountIDsForWorkspace(policy?.employeeList, false, false));
274-
addMembersToWorkspace(invitedEmailsToAccountIDs, `${welcomeNoteSubject}\n\n${welcomeNote}`, onboardingPolicyID, policyMemberAccountIDs, CONST.POLICY.ROLE.USER);
274+
addMembersToWorkspace(invitedEmailsToAccountIDs, `${welcomeNoteSubject}\n\n${welcomeNote}`, onboardingPolicyID, policyMemberAccountIDs, CONST.POLICY.ROLE.USER, formatPhoneNumber);
275275
completeOnboarding();
276-
}, [completeOnboarding, onboardingPolicyID, policy?.employeeList, selectedOptions, welcomeNote, welcomeNoteSubject]);
276+
}, [completeOnboarding, onboardingPolicyID, policy?.employeeList, selectedOptions, welcomeNote, welcomeNoteSubject, formatPhoneNumber]);
277277

278278
useEffect(() => {
279279
searchInServer(debouncedSearchTerm);

src/pages/ReportChangeWorkspacePage.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ function ReportChangeWorkspacePage({report, route}: ReportChangeWorkspacePagePro
3131
const {isOffline} = useNetwork();
3232
const styles = useThemeStyles();
3333
const [searchTerm, debouncedSearchTerm, setSearchTerm] = useDebouncedState('');
34-
const {translate} = useLocalize();
34+
const {translate, formatPhoneNumber} = useLocalize();
3535

3636
const [policies, fetchStatus] = useOnyx(ONYXKEYS.COLLECTION.POLICY, {canBeMissing: true});
3737
const [reportNextStep] = useOnyx(`${ONYXKEYS.COLLECTION.NEXT_STEP}${reportID}`, {canBeMissing: true});
@@ -49,19 +49,19 @@ function ReportChangeWorkspacePage({report, route}: ReportChangeWorkspacePagePro
4949
// This will be fixed as part of https://github.com/Expensify/Expensify/issues/507850
5050
// eslint-disable-next-line deprecation/deprecation
5151
if (isIOUReport(reportID) && isPolicyAdmin(getPolicy(policyID)) && report.ownerAccountID && !isPolicyMember(getLoginByAccountID(report.ownerAccountID), policyID)) {
52-
moveIOUReportToPolicyAndInviteSubmitter(reportID, policyID);
52+
moveIOUReportToPolicyAndInviteSubmitter(reportID, policyID, formatPhoneNumber);
5353
} else if (isIOUReport(reportID) && isPolicyMember(session?.email, policyID)) {
5454
moveIOUReportToPolicy(reportID, policyID);
5555
// This will be fixed as part of https://github.com/Expensify/Expensify/issues/507850
5656
// eslint-disable-next-line deprecation/deprecation
5757
} else if (isExpenseReport(report) && isPolicyAdmin(getPolicy(policyID)) && report.ownerAccountID && !isPolicyMember(getLoginByAccountID(report.ownerAccountID), policyID)) {
5858
const employeeList = policies?.[`${ONYXKEYS.COLLECTION.POLICY}${policyID}`]?.employeeList;
59-
changeReportPolicyAndInviteSubmitter(report, policyID, employeeList);
59+
changeReportPolicyAndInviteSubmitter(report, policyID, employeeList, formatPhoneNumber);
6060
} else {
6161
changeReportPolicy(report, policyID, reportNextStep);
6262
}
6363
},
64-
[session?.email, route.params, report, reportID, reportNextStep, policies],
64+
[session?.email, route.params, report, reportID, reportNextStep, policies, formatPhoneNumber],
6565
);
6666

6767
const {sections, shouldShowNoResultsFoundMessage, shouldShowSearchInput} = useWorkspaceList({

src/pages/RoomInvitePage.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ function RoomInvitePage({
5353
},
5454
}: RoomInvitePageProps) {
5555
const styles = useThemeStyles();
56-
const {translate} = useLocalize();
56+
const {translate, formatPhoneNumber} = useLocalize();
5757
const [userSearchPhrase] = useOnyx(ONYXKEYS.ROOM_MEMBERS_USER_SEARCH_PHRASE, {canBeMissing: true});
5858
const [searchTerm, debouncedSearchTerm, setSearchTerm] = useDebouncedState(userSearchPhrase ?? '');
5959
const [selectedOptions, setSelectedOptions] = useState<OptionData[]>([]);
@@ -203,11 +203,11 @@ function RoomInvitePage({
203203
invitedEmailsToAccountIDs[login] = Number(accountID);
204204
});
205205
if (reportID) {
206-
inviteToRoom(reportID, invitedEmailsToAccountIDs);
206+
inviteToRoom(reportID, invitedEmailsToAccountIDs, formatPhoneNumber);
207207
}
208208
clearUserSearchPhrase();
209209
Navigation.goBack(backRoute);
210-
}, [selectedOptions, backRoute, reportID, validate]);
210+
}, [selectedOptions, backRoute, reportID, validate, formatPhoneNumber]);
211211

212212
const goBack = useCallback(() => {
213213
Navigation.goBack(backRoute);

0 commit comments

Comments
 (0)