From a84a14af68d6e842e516de84afcce78f91d151fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20M=C3=B3rawski?= Date: Wed, 25 Oct 2023 15:57:01 +0200 Subject: [PATCH 1/6] money request participants list fix --- src/pages/iou/steps/MoneyRequestConfirmPage.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/iou/steps/MoneyRequestConfirmPage.js b/src/pages/iou/steps/MoneyRequestConfirmPage.js index b0f802a2ab2c9..58934fd06223c 100644 --- a/src/pages/iou/steps/MoneyRequestConfirmPage.js +++ b/src/pages/iou/steps/MoneyRequestConfirmPage.js @@ -75,7 +75,7 @@ function MoneyRequestConfirmPage(props) { const isPolicyExpenseChat = lodashGet(participant, 'isPolicyExpenseChat', false); return isPolicyExpenseChat ? OptionsListUtils.getPolicyExpenseReportOption(participant) : OptionsListUtils.getParticipantsOption(participant, props.personalDetails); }) - .filter((participant) => !!participant.login) + .filter((participant) => !!participant.login || !!participant.text) .value(), [props.iou.participants, props.personalDetails], ); From 011f8c2723689acefa7d5fc291970a4679923627 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20M=C3=B3rawski?= Date: Thu, 26 Oct 2023 13:56:40 +0200 Subject: [PATCH 2/6] display name fallback to hidden --- src/libs/ReportUtils.js | 18 +++++++++++++++--- src/pages/home/report/ParticipantLocalTime.js | 4 ++++ .../home/report/ReportActionItemSingle.js | 4 ++-- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/libs/ReportUtils.js b/src/libs/ReportUtils.js index 66aa32fe2a569..960816994ecfa 100644 --- a/src/libs/ReportUtils.js +++ b/src/libs/ReportUtils.js @@ -1181,6 +1181,7 @@ function getPersonalDetailsForAccountID(accountID) { return ( (allPersonalDetails && allPersonalDetails[accountID]) || { avatar: UserUtils.getDefaultAvatar(accountID), + isOptimisticPersonalDetail: true, } ); } @@ -1190,28 +1191,39 @@ function getPersonalDetailsForAccountID(accountID) { * * @param {Number} accountID * @param {Boolean} [shouldUseShortForm] + * @param {Boolean} shouldFallbackToHidden * @returns {String} */ -function getDisplayNameForParticipant(accountID, shouldUseShortForm = false) { +function getDisplayNameForParticipant(accountID, shouldUseShortForm = false, shouldFallbackToHidden = true) { if (!accountID) { return ''; } const personalDetails = getPersonalDetailsForAccountID(accountID); + // this is to check if account is an invite/optimistically created one + // and prevent from falling back to 'Hidden', so a correct value is shown + // when searching for a new user + if (lodashGet(personalDetails, 'isOptimisticPersonalDetail') === true) { + return personalDetails.login || ''; + } const longName = personalDetails.displayName; const shortName = personalDetails.firstName || longName; + if (!longName && !personalDetails.login && shouldFallbackToHidden) { + return Localize.translateLocal('common.hidden'); + } return shouldUseShortForm ? shortName : longName; } /** * @param {Object} personalDetailsList * @param {Boolean} isMultipleParticipantReport + * @param {Boolean} shouldFallbackToHidden * @returns {Array} */ -function getDisplayNamesWithTooltips(personalDetailsList, isMultipleParticipantReport) { +function getDisplayNamesWithTooltips(personalDetailsList, isMultipleParticipantReport, shouldFallbackToHidden) { return _.chain(personalDetailsList) .map((user) => { const accountID = Number(user.accountID); - const displayName = getDisplayNameForParticipant(accountID, isMultipleParticipantReport) || user.login || ''; + const displayName = getDisplayNameForParticipant(accountID, isMultipleParticipantReport, shouldFallbackToHidden) || user.login || ''; const avatar = UserUtils.getDefaultAvatar(accountID); let pronouns = user.pronouns; diff --git a/src/pages/home/report/ParticipantLocalTime.js b/src/pages/home/report/ParticipantLocalTime.js index 058346287b110..2e000c2de1d37 100644 --- a/src/pages/home/report/ParticipantLocalTime.js +++ b/src/pages/home/report/ParticipantLocalTime.js @@ -45,6 +45,10 @@ function ParticipantLocalTime(props) { const reportRecipientDisplayName = lodashGet(props, 'participant.firstName') || lodashGet(props, 'participant.displayName'); + if (!reportRecipientDisplayName) { + return null; + } + return ( Date: Fri, 27 Oct 2023 17:36:53 +0300 Subject: [PATCH 3/6] fallback to hidden for report action item header --- src/pages/home/report/ReportActionItemSingle.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/home/report/ReportActionItemSingle.js b/src/pages/home/report/ReportActionItemSingle.js index 53f862454b0b9..0149d9ff99eff 100644 --- a/src/pages/home/report/ReportActionItemSingle.js +++ b/src/pages/home/report/ReportActionItemSingle.js @@ -85,7 +85,7 @@ const showWorkspaceDetails = (reportID) => { function ReportActionItemSingle(props) { const personalDetails = usePersonalDetails() || CONST.EMPTY_OBJECT; const actorAccountID = props.action.actionName === CONST.REPORT.ACTIONS.TYPE.REPORTPREVIEW && props.iouReport ? props.iouReport.managerID : props.action.actorAccountID; - let {displayName} = personalDetails[actorAccountID] || {}; + let displayName = ReportUtils.getDisplayNameForParticipant(actorAccountID); const {avatar, login, pendingFields, status, fallbackIcon} = personalDetails[actorAccountID] || {}; let actorHint = (login || displayName || '').replace(CONST.REGEX.MERGED_ACCOUNT_PREFIX, ''); const displayAllActors = useMemo(() => props.action.actionName === CONST.REPORT.ACTIONS.TYPE.REPORTPREVIEW && props.iouReport, [props.action.actionName, props.iouReport]); From aa9637a7fb2134db5452a1e577fa2af70fb12203 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20M=C3=B3rawski?= Date: Fri, 27 Oct 2023 17:37:14 +0300 Subject: [PATCH 4/6] fallback to hidden for report welcome text --- src/components/ReportWelcomeText.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/components/ReportWelcomeText.js b/src/components/ReportWelcomeText.js index 23a27682a7d4b..f84c62bb1d01a 100644 --- a/src/components/ReportWelcomeText.js +++ b/src/components/ReportWelcomeText.js @@ -82,11 +82,7 @@ function ReportWelcomeText(props) { {isPolicyExpenseChat && ( <> {props.translate('reportActionsView.beginningOfChatHistoryPolicyExpenseChatPartOne')} - - {/* Use the policyExpenseChat owner's first name or their display name if it's undefined or an empty string */} - {lodashGet(props.personalDetails, [props.report.ownerAccountID, 'firstName']) || - lodashGet(props.personalDetails, [props.report.ownerAccountID, 'displayName'], '')} - + {ReportUtils.getDisplayNameForParticipant(props.report.ownerAccountID)} {props.translate('reportActionsView.beginningOfChatHistoryPolicyExpenseChatPartTwo')} {ReportUtils.getPolicyName(props.report)} {props.translate('reportActionsView.beginningOfChatHistoryPolicyExpenseChatPartThree')} From 54dfef5d1afbb094b72e595a84a88b63f2bd931a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20M=C3=B3rawski?= Date: Tue, 31 Oct 2023 14:35:42 +0100 Subject: [PATCH 5/6] tooltip user name fallback to hidden --- .../UserDetailsTooltip/BaseUserDetailsTooltip.web.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/UserDetailsTooltip/BaseUserDetailsTooltip.web.js b/src/components/UserDetailsTooltip/BaseUserDetailsTooltip.web.js index 5f124cb214679..3e0ef5b795347 100644 --- a/src/components/UserDetailsTooltip/BaseUserDetailsTooltip.web.js +++ b/src/components/UserDetailsTooltip/BaseUserDetailsTooltip.web.js @@ -13,12 +13,13 @@ import * as UserUtils from '../../libs/UserUtils'; import CONST from '../../CONST'; import * as LocalePhoneNumber from '../../libs/LocalePhoneNumber'; import useLocalize from '../../hooks/useLocalize'; +import * as ReportUtils from '../../libs/ReportUtils'; function BaseUserDetailsTooltip(props) { const {translate} = useLocalize(); const userDetails = lodashGet(props.personalDetailsList, props.accountID, props.fallbackUserDetails); - let userDisplayName = userDetails.displayName ? userDetails.displayName.trim() : ''; + let userDisplayName = ReportUtils.getDisplayNameForParticipant(props.accountID); let userLogin = (userDetails.login || '').trim() && !_.isEqual(userDetails.login, userDetails.displayName) ? Str.removeSMSDomain(userDetails.login) : ''; let userAvatar = userDetails.avatar; let userAccountID = props.accountID; From 47dede319630752d80d4529a904c62d3ec0b70a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20M=C3=B3rawski?= Date: Tue, 31 Oct 2023 15:17:13 +0100 Subject: [PATCH 6/6] prettier --- .../UserDetailsTooltip/BaseUserDetailsTooltip.web.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/UserDetailsTooltip/BaseUserDetailsTooltip.web.js b/src/components/UserDetailsTooltip/BaseUserDetailsTooltip.web.js index 323d7678b4464..794ab130ed962 100644 --- a/src/components/UserDetailsTooltip/BaseUserDetailsTooltip.web.js +++ b/src/components/UserDetailsTooltip/BaseUserDetailsTooltip.web.js @@ -8,12 +8,12 @@ import Avatar from '@components/Avatar'; import Tooltip from '@components/Tooltip'; import useLocalize from '@hooks/useLocalize'; import * as LocalePhoneNumber from '@libs/LocalePhoneNumber'; +import * as ReportUtils from '@libs/ReportUtils'; import * as UserUtils from '@libs/UserUtils'; import styles from '@styles/styles'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import {defaultProps, propTypes} from './userDetailsTooltipPropTypes'; -import * as ReportUtils from '../../libs/ReportUtils'; function BaseUserDetailsTooltip(props) { const {translate} = useLocalize(); @@ -28,7 +28,7 @@ function BaseUserDetailsTooltip(props) { // the Copilot feature is implemented. if (props.delegateAccountID) { const delegateUserDetails = lodashGet(props.personalDetailsList, props.delegateAccountID, {}); - const delegateUserDisplayName = delegateUserDetails.displayName ? delegateUserDetails.displayName.trim() : ''; + const delegateUserDisplayName = ReportUtils.getDisplayNameForParticipant(props.delegateAccountID); userDisplayName = `${delegateUserDisplayName} (${translate('reportAction.asCopilot')} ${userDisplayName})`; userLogin = delegateUserDetails.login; userAvatar = delegateUserDetails.avatar;