From 556d79303334fa5c97ab2f98167e9fe868ef711c Mon Sep 17 00:00:00 2001 From: allgandaf Date: Tue, 23 Dec 2025 12:28:08 +0530 Subject: [PATCH 1/6] make getUserDetailTooltipText and getReimbursementQueuedActionMessage pure functiosn --- .../ReportActionAvatars/ReportActionAvatar.tsx | 7 ++++--- .../BaseUserDetailsTooltip/index.tsx | 4 ++-- src/libs/OptionsListUtils/index.ts | 2 +- src/libs/ReportUtils.ts | 12 +++++++++--- .../home/report/ContextMenu/ContextMenuActions.tsx | 3 ++- 5 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/components/ReportActionAvatars/ReportActionAvatar.tsx b/src/components/ReportActionAvatars/ReportActionAvatar.tsx index 4e496b0ce1e7..5df5b0068632 100644 --- a/src/components/ReportActionAvatars/ReportActionAvatar.tsx +++ b/src/components/ReportActionAvatars/ReportActionAvatar.tsx @@ -327,7 +327,7 @@ function ReportActionAvatarMultipleHorizontal({ const theme = useTheme(); const styles = useThemeStyles(); const StyleUtils = useStyleUtils(); - const {localeCompare} = useLocalize(); + const {localeCompare, formatPhoneNumber} = useLocalize(); const [personalDetails] = useOnyx(ONYXKEYS.PERSONAL_DETAILS_LIST, { canBeMissing: true, @@ -368,7 +368,7 @@ function ReportActionAvatarMultipleHorizontal({ return [firstRow, secondRow]; }, [icons, maxAvatarsInRow, shouldDisplayAvatarsInRows]); - const tooltipTexts = useMemo(() => (shouldShowTooltip ? icons.map((icon) => getUserDetailTooltipText(Number(icon.id), icon.name)) : ['']), [shouldShowTooltip, icons]); + const tooltipTexts = useMemo(() => (shouldShowTooltip ? icons.map((icon) => getUserDetailTooltipText(Number(icon.id), formatPhoneNumber, icon.name)) : ['']), [shouldShowTooltip, icons, formatPhoneNumber]); return avatarRows.map((avatars, rowIndex) => ( (shouldShowTooltip ? icons.map((icon) => getUserDetailTooltipText(Number(icon.id), icon.name)) : ['']), [shouldShowTooltip, icons]); + const tooltipTexts = useMemo(() => (shouldShowTooltip ? icons.map((icon) => getUserDetailTooltipText(Number(icon.id), formatPhoneNumber, icon.name)) : ['']), [shouldShowTooltip, icons, formatPhoneNumber]); const removeRightMargin = icons.length === 2 && size === CONST.AVATAR_SIZE.X_LARGE; const avatarContainerStyles = StyleUtils.getContainerStyles(size, isInReportAction); diff --git a/src/components/UserDetailsTooltip/BaseUserDetailsTooltip/index.tsx b/src/components/UserDetailsTooltip/BaseUserDetailsTooltip/index.tsx index 09d772a04147..814cf37892e4 100644 --- a/src/components/UserDetailsTooltip/BaseUserDetailsTooltip/index.tsx +++ b/src/components/UserDetailsTooltip/BaseUserDetailsTooltip/index.tsx @@ -22,7 +22,7 @@ function BaseUserDetailsTooltip({accountID, fallbackUserDetails, icon, delegateA const isCurrentUserAnonymous = session?.accountID === accountID && isAnonymousUser(session); const userDetails = personalDetails?.[accountID] ?? fallbackUserDetails ?? {}; - let userDisplayName = getUserDetailTooltipText(accountID, userDetails.displayName ? userDetails.displayName.trim() : ''); + let userDisplayName = getUserDetailTooltipText(accountID, formatPhoneNumber, userDetails.displayName ? userDetails.displayName.trim() : ''); let userLogin = !isCurrentUserAnonymous && userDetails.login?.trim() && userDetails.login !== userDetails.displayName ? Str.removeSMSDomain(userDetails.login) : ''; let userAvatar = userDetails.avatar; @@ -32,7 +32,7 @@ function BaseUserDetailsTooltip({accountID, fallbackUserDetails, icon, delegateA // the Copilot feature is implemented. if (delegateAccountID && delegateAccountID > 0) { const delegateUserDetails = personalDetails?.[delegateAccountID]; - const delegateUserDisplayName = getUserDetailTooltipText(delegateAccountID); + const delegateUserDisplayName = getUserDetailTooltipText(delegateAccountID, formatPhoneNumber); userDisplayName = `${delegateUserDisplayName} (${translate('reportAction.asCopilot')} ${userDisplayName})`; userLogin = delegateUserDetails?.login ?? ''; userAvatar = delegateUserDetails?.avatar; diff --git a/src/libs/OptionsListUtils/index.ts b/src/libs/OptionsListUtils/index.ts index ad5d5a36e8c9..a281555904c2 100644 --- a/src/libs/OptionsListUtils/index.ts +++ b/src/libs/OptionsListUtils/index.ts @@ -669,7 +669,7 @@ function getLastMessageTextForReport({ lastMessageTextFromReport = formatReportLastMessageText(Parser.htmlToText(reportPreviewMessage)); } } else if (isReimbursementQueuedAction(lastReportAction)) { - lastMessageTextFromReport = getReimbursementQueuedActionMessage({reportAction: lastReportAction, reportOrID: report}); + lastMessageTextFromReport = getReimbursementQueuedActionMessage({reportAction: lastReportAction, formatPhoneNumber: formatPhoneNumberPhoneUtils, reportOrID: report}); } else if (isReimbursementDeQueuedOrCanceledAction(lastReportAction)) { lastMessageTextFromReport = getReimbursementDeQueuedOrCanceledActionMessage(lastReportAction, report); } else if (isDeletedParentAction(lastReportAction) && reportUtilsIsChatReport(report)) { diff --git a/src/libs/ReportUtils.ts b/src/libs/ReportUtils.ts index 35f05c9b1acb..672132696315 100644 --- a/src/libs/ReportUtils.ts +++ b/src/libs/ReportUtils.ts @@ -3921,8 +3921,8 @@ function getDisplayNamesWithTooltips( /** * Returns the the display names of the given user accountIDs */ -function getUserDetailTooltipText(accountID: number, fallbackUserDisplayName = ''): string { - const displayNameForParticipant = getDisplayNameForParticipant({accountID, formatPhoneNumber: formatPhoneNumberPhoneUtils}); +function getUserDetailTooltipText(accountID: number, formatPhoneNumber: LocaleContextProps['formatPhoneNumber'], fallbackUserDisplayName = ''): string { + const displayNameForParticipant = getDisplayNameForParticipant({accountID, formatPhoneNumber}); return displayNameForParticipant || fallbackUserDisplayName; } @@ -3950,12 +3950,14 @@ function getDeletedParentActionMessageForChatReport(reportAction: OnyxEntry>; reportOrID: OnyxEntry | string; + formatPhoneNumber: LocaleContextProps['formatPhoneNumber']; shouldUseShortDisplayName?: boolean; reports?: Report[]; personalDetails?: Partial; @@ -3966,7 +3968,7 @@ function getReimbursementQueuedActionMessage({ accountID: report?.ownerAccountID, shouldUseShortForm: shouldUseShortDisplayName, personalDetailsData: personalDetails, - formatPhoneNumber: formatPhoneNumberPhoneUtils, + formatPhoneNumber, }) ?? ''; const originalMessage = getOriginalMessage(reportAction); let messageKey: TranslationPaths; @@ -5609,12 +5611,14 @@ function parseReportActionHtmlToText(reportAction: OnyxEntry, repo */ function getReportActionMessage({ reportAction, + formatPhoneNumber, reportID, childReportID, reports, personalDetails, }: { reportAction: OnyxEntry; + formatPhoneNumber: LocaleContextProps['formatPhoneNumber']; reportID?: string; childReportID?: string; reports?: Report[]; @@ -5654,6 +5658,7 @@ function getReportActionMessage({ return getReimbursementQueuedActionMessage({ reportAction, reportOrID: getReportOrDraftReport(reportID, reports), + formatPhoneNumber, shouldUseShortDisplayName: false, reports, personalDetails, @@ -6029,6 +6034,7 @@ function getReportName( const isAttachment = isReportActionAttachment(!isEmptyObject(parentReportAction) ? parentReportAction : undefined); const reportActionMessage = getReportActionMessage({ reportAction: parentReportAction, + formatPhoneNumber: formatPhoneNumberPhoneUtils, reportID: report?.parentReportID, childReportID: report?.reportID, reports, diff --git a/src/pages/home/report/ContextMenu/ContextMenuActions.tsx b/src/pages/home/report/ContextMenu/ContextMenuActions.tsx index 383c6784a246..45fa2d1d2c9d 100644 --- a/src/pages/home/report/ContextMenu/ContextMenuActions.tsx +++ b/src/pages/home/report/ContextMenu/ContextMenuActions.tsx @@ -11,6 +11,7 @@ import type {LocaleContextProps, LocalizedTranslate} from '@components/LocaleCon import MiniQuickEmojiReactions from '@components/Reactions/MiniQuickEmojiReactions'; import QuickEmojiReactions from '@components/Reactions/QuickEmojiReactions'; import addEncryptedAuthTokenToURL from '@libs/addEncryptedAuthTokenToURL'; +import {formatPhoneNumber as formatPhoneNumberPhoneUtils} from '@libs/LocalePhoneNumber'; import {isMobileSafari} from '@libs/Browser'; import Clipboard from '@libs/Clipboard'; import EmailUtils from '@libs/EmailUtils'; @@ -756,7 +757,7 @@ const ContextMenuActions: ContextMenuAction[] = [ } else if (isActionOfType(reportAction, CONST.REPORT.ACTIONS.TYPE.MARKED_REIMBURSED)) { Clipboard.setString(translate('iou.paidElsewhere')); } else if (isReimbursementQueuedAction(reportAction)) { - Clipboard.setString(getReimbursementQueuedActionMessage({reportAction, reportOrID: reportID, shouldUseShortDisplayName: false})); + Clipboard.setString(getReimbursementQueuedActionMessage({reportAction, formatPhoneNumber: formatPhoneNumberPhoneUtils, reportOrID: reportID, shouldUseShortDisplayName: false})); } else if (isActionableMentionWhisper(reportAction)) { const mentionWhisperMessage = getActionableMentionWhisperMessage(reportAction); setClipboardMessage(mentionWhisperMessage); From d8b8fca81e04659db162a3112eabe2e7e50f2655 Mon Sep 17 00:00:00 2001 From: allgandaf Date: Tue, 23 Dec 2025 12:29:59 +0530 Subject: [PATCH 2/6] fix prettier --- .../ReportActionAvatars/ReportActionAvatar.tsx | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/components/ReportActionAvatars/ReportActionAvatar.tsx b/src/components/ReportActionAvatars/ReportActionAvatar.tsx index 5df5b0068632..b1004a5581c3 100644 --- a/src/components/ReportActionAvatars/ReportActionAvatar.tsx +++ b/src/components/ReportActionAvatars/ReportActionAvatar.tsx @@ -368,7 +368,10 @@ function ReportActionAvatarMultipleHorizontal({ return [firstRow, secondRow]; }, [icons, maxAvatarsInRow, shouldDisplayAvatarsInRows]); - const tooltipTexts = useMemo(() => (shouldShowTooltip ? icons.map((icon) => getUserDetailTooltipText(Number(icon.id), formatPhoneNumber, icon.name)) : ['']), [shouldShowTooltip, icons, formatPhoneNumber]); + const tooltipTexts = useMemo( + () => (shouldShowTooltip ? icons.map((icon) => getUserDetailTooltipText(Number(icon.id), formatPhoneNumber, icon.name)) : ['']), + [shouldShowTooltip, icons, formatPhoneNumber], + ); return avatarRows.map((avatars, rowIndex) => ( (shouldShowTooltip ? icons.map((icon) => getUserDetailTooltipText(Number(icon.id), formatPhoneNumber, icon.name)) : ['']), [shouldShowTooltip, icons, formatPhoneNumber]); + const tooltipTexts = useMemo( + () => (shouldShowTooltip ? icons.map((icon) => getUserDetailTooltipText(Number(icon.id), formatPhoneNumber, icon.name)) : ['']), + [shouldShowTooltip, icons, formatPhoneNumber], + ); const removeRightMargin = icons.length === 2 && size === CONST.AVATAR_SIZE.X_LARGE; const avatarContainerStyles = StyleUtils.getContainerStyles(size, isInReportAction); From c1d971d651a13f0dad1c0ab5818ab898daec44c9 Mon Sep 17 00:00:00 2001 From: allgandaf Date: Tue, 23 Dec 2025 12:30:53 +0530 Subject: [PATCH 3/6] fix prettier --- src/pages/home/report/ContextMenu/ContextMenuActions.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/pages/home/report/ContextMenu/ContextMenuActions.tsx b/src/pages/home/report/ContextMenu/ContextMenuActions.tsx index 45fa2d1d2c9d..69365389c1ab 100644 --- a/src/pages/home/report/ContextMenu/ContextMenuActions.tsx +++ b/src/pages/home/report/ContextMenu/ContextMenuActions.tsx @@ -11,13 +11,13 @@ import type {LocaleContextProps, LocalizedTranslate} from '@components/LocaleCon import MiniQuickEmojiReactions from '@components/Reactions/MiniQuickEmojiReactions'; import QuickEmojiReactions from '@components/Reactions/QuickEmojiReactions'; import addEncryptedAuthTokenToURL from '@libs/addEncryptedAuthTokenToURL'; -import {formatPhoneNumber as formatPhoneNumberPhoneUtils} from '@libs/LocalePhoneNumber'; import {isMobileSafari} from '@libs/Browser'; import Clipboard from '@libs/Clipboard'; import EmailUtils from '@libs/EmailUtils'; import {getEnvironmentURL} from '@libs/Environment/Environment'; import fileDownload from '@libs/fileDownload'; import getAttachmentDetails from '@libs/fileDownload/getAttachmentDetails'; +import {formatPhoneNumber as formatPhoneNumberPhoneUtils} from '@libs/LocalePhoneNumber'; import {getForReportActionTemp} from '@libs/ModifiedExpenseMessage'; import Navigation from '@libs/Navigation/Navigation'; import Parser from '@libs/Parser'; @@ -757,7 +757,9 @@ const ContextMenuActions: ContextMenuAction[] = [ } else if (isActionOfType(reportAction, CONST.REPORT.ACTIONS.TYPE.MARKED_REIMBURSED)) { Clipboard.setString(translate('iou.paidElsewhere')); } else if (isReimbursementQueuedAction(reportAction)) { - Clipboard.setString(getReimbursementQueuedActionMessage({reportAction, formatPhoneNumber: formatPhoneNumberPhoneUtils, reportOrID: reportID, shouldUseShortDisplayName: false})); + Clipboard.setString( + getReimbursementQueuedActionMessage({reportAction, formatPhoneNumber: formatPhoneNumberPhoneUtils, reportOrID: reportID, shouldUseShortDisplayName: false}), + ); } else if (isActionableMentionWhisper(reportAction)) { const mentionWhisperMessage = getActionableMentionWhisperMessage(reportAction); setClipboardMessage(mentionWhisperMessage); From c48f7b23b1a761f2dad36ee012515812dfac7480 Mon Sep 17 00:00:00 2001 From: Gandalf Date: Thu, 1 Jan 2026 12:50:05 +0530 Subject: [PATCH 4/6] Update src/components/UserDetailsTooltip/BaseUserDetailsTooltip/index.tsx Co-authored-by: Shubham Agrawal <58412969+shubham1206agra@users.noreply.github.com> --- .../UserDetailsTooltip/BaseUserDetailsTooltip/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/UserDetailsTooltip/BaseUserDetailsTooltip/index.tsx b/src/components/UserDetailsTooltip/BaseUserDetailsTooltip/index.tsx index 814cf37892e4..1d0839d6c79a 100644 --- a/src/components/UserDetailsTooltip/BaseUserDetailsTooltip/index.tsx +++ b/src/components/UserDetailsTooltip/BaseUserDetailsTooltip/index.tsx @@ -23,7 +23,7 @@ function BaseUserDetailsTooltip({accountID, fallbackUserDetails, icon, delegateA const userDetails = personalDetails?.[accountID] ?? fallbackUserDetails ?? {}; let userDisplayName = getUserDetailTooltipText(accountID, formatPhoneNumber, userDetails.displayName ? userDetails.displayName.trim() : ''); - let userLogin = !isCurrentUserAnonymous && userDetails.login?.trim() && userDetails.login !== userDetails.displayName ? Str.removeSMSDomain(userDetails.login) : ''; + let userLogin = !isCurrentUserAnonymous && userDetails.login?.trim() && userDetails.login !== userDetails.displayName ? formatPhoneNumber(userDetails.login) : ''; let userAvatar = userDetails.avatar; let userAccountID = accountID; From f0d7e561b819b735361151c8a780d12e3230da77 Mon Sep 17 00:00:00 2001 From: Gandalf Date: Thu, 1 Jan 2026 12:51:59 +0530 Subject: [PATCH 5/6] Update src/components/UserDetailsTooltip/BaseUserDetailsTooltip/index.tsx Co-authored-by: Shubham Agrawal <58412969+shubham1206agra@users.noreply.github.com> --- .../UserDetailsTooltip/BaseUserDetailsTooltip/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/UserDetailsTooltip/BaseUserDetailsTooltip/index.tsx b/src/components/UserDetailsTooltip/BaseUserDetailsTooltip/index.tsx index 1d0839d6c79a..48698f703c00 100644 --- a/src/components/UserDetailsTooltip/BaseUserDetailsTooltip/index.tsx +++ b/src/components/UserDetailsTooltip/BaseUserDetailsTooltip/index.tsx @@ -40,7 +40,7 @@ function BaseUserDetailsTooltip({accountID, fallbackUserDetails, icon, delegateA } let title = String(userDisplayName).trim() ? userDisplayName : ''; - let subtitle = userLogin.trim() && formatPhoneNumber(userLogin) !== userDisplayName ? Str.removeSMSDomain(userLogin) : ''; + let subtitle = userLogin.trim() && formatPhoneNumber(userLogin) !== userDisplayName ? formatPhoneNumber(userLogin) : ''; if (icon && (icon.type === CONST.ICON_TYPE_WORKSPACE || !title)) { title = icon.name ?? ''; From 3e3d06af509702dd2898f1f4b1de997248d01103 Mon Sep 17 00:00:00 2001 From: Gandalf Date: Thu, 1 Jan 2026 12:59:25 +0530 Subject: [PATCH 6/6] Update index.tsx --- .../UserDetailsTooltip/BaseUserDetailsTooltip/index.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/UserDetailsTooltip/BaseUserDetailsTooltip/index.tsx b/src/components/UserDetailsTooltip/BaseUserDetailsTooltip/index.tsx index 48698f703c00..b8095a4714af 100644 --- a/src/components/UserDetailsTooltip/BaseUserDetailsTooltip/index.tsx +++ b/src/components/UserDetailsTooltip/BaseUserDetailsTooltip/index.tsx @@ -1,4 +1,3 @@ -import {Str} from 'expensify-common'; import React, {useCallback} from 'react'; import {View} from 'react-native'; import Avatar from '@components/Avatar';