From c27b1cfd911349bd1c12043308015cc0fd2c36c4 Mon Sep 17 00:00:00 2001 From: Rodrigo Lino da Costa Date: Fri, 12 Jul 2024 16:23:11 -0300 Subject: [PATCH 1/6] adds support for mentions in room description --- src/libs/ReportUtils.ts | 8 ++++++++ src/libs/SidebarUtils.ts | 5 ++++- src/libs/actions/Policy/Policy.ts | 2 +- src/pages/home/report/ReportActionItem.tsx | 4 +++- src/pages/workspace/WorkspaceNewRoomPage.tsx | 6 +++--- 5 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/libs/ReportUtils.ts b/src/libs/ReportUtils.ts index ad600fe43104a..2e727ea94ad0c 100644 --- a/src/libs/ReportUtils.ts +++ b/src/libs/ReportUtils.ts @@ -468,6 +468,7 @@ type OutstandingChildRequest = { type ParsingDetails = { shouldEscapeText?: boolean; reportID?: string; + policyID?: string; }; let currentUserEmail: string | undefined; @@ -3650,6 +3651,13 @@ function getParsedComment(text: string, parsingDetails?: ParsingDetails): string isGroupPolicyReport = isReportInGroupPolicy(currentReport); } + if (parsingDetails?.policyID) { + const policyType = getPolicy(parsingDetails?.policyID)?.type; + if (policyType) { + isGroupPolicyReport = isGroupPolicy(policyType); + } + } + const textWithMention = text.replace(CONST.REGEX.SHORT_MENTION, (match) => { if (!Str.isValidMention(match)) { return match; diff --git a/src/libs/SidebarUtils.ts b/src/libs/SidebarUtils.ts index 1007ba455fa61..303b6d98b0fad 100644 --- a/src/libs/SidebarUtils.ts +++ b/src/libs/SidebarUtils.ts @@ -421,7 +421,10 @@ function getOptionData({ } } else if (lastActionName === CONST.REPORT.ACTIONS.TYPE.ROOM_CHANGE_LOG.UPDATE_ROOM_DESCRIPTION) { const lastActionOriginalMessage = lastAction?.actionName ? (ReportActionsUtils.getOriginalMessage(lastAction) as OriginalMessageChangeLog | undefined) : null; - result.alternateText = `${lastActorDisplayName} ${Localize.translate(preferredLocale, 'roomChangeLog.updateRoomDescription')} ${lastActionOriginalMessage?.description}`.trim(); + const description = lastActionOriginalMessage?.description; + result.alternateText = `${lastActorDisplayName} ${Localize.translate(preferredLocale, 'roomChangeLog.updateRoomDescription')} ${ + description ? Parser.htmlToText(description) : description + }`.trim(); } else if (lastAction?.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.LEAVE_POLICY) { result.alternateText = Localize.translateLocal('workspace.invite.leftWorkspace'); } else if (lastAction?.actionName !== CONST.REPORT.ACTIONS.TYPE.REPORT_PREVIEW && lastActorDisplayName && lastMessageTextFromReport) { diff --git a/src/libs/actions/Policy/Policy.ts b/src/libs/actions/Policy/Policy.ts index e5ebe2281a94d..8b804cc862c1f 100644 --- a/src/libs/actions/Policy/Policy.ts +++ b/src/libs/actions/Policy/Policy.ts @@ -1078,7 +1078,7 @@ function updateWorkspaceDescription(policyID: string, description: string, curre if (description === currentDescription) { return; } - const parsedDescription = ReportUtils.getParsedComment(description); + const parsedDescription = ReportUtils.getParsedComment(description, {policyID}); const optimisticData: OnyxUpdate[] = [ { diff --git a/src/pages/home/report/ReportActionItem.tsx b/src/pages/home/report/ReportActionItem.tsx index 31bd21adce4cb..f7c343a12632f 100644 --- a/src/pages/home/report/ReportActionItem.tsx +++ b/src/pages/home/report/ReportActionItem.tsx @@ -44,6 +44,7 @@ import * as ErrorUtils from '@libs/ErrorUtils'; import focusTextInputAfterAnimation from '@libs/focusTextInputAfterAnimation'; import ModifiedExpenseMessage from '@libs/ModifiedExpenseMessage'; import Navigation from '@libs/Navigation/Navigation'; +import Parser from '@libs/Parser'; import Permissions from '@libs/Permissions'; import * as PersonalDetailsUtils from '@libs/PersonalDetailsUtils'; import * as PolicyUtils from '@libs/PolicyUtils'; @@ -647,7 +648,8 @@ function ReportActionItem({ } else if (action.actionName === CONST.REPORT.ACTIONS.TYPE.MERGED_WITH_CASH_TRANSACTION) { children = ; } else if (action.actionName === CONST.REPORT.ACTIONS.TYPE.ROOM_CHANGE_LOG.UPDATE_ROOM_DESCRIPTION) { - const message = `${translate('roomChangeLog.updateRoomDescription')} ${(originalMessage as OriginalMessageChangeLog)?.description}`; + const description = (originalMessage as OriginalMessageChangeLog)?.description; + const message = `${translate('roomChangeLog.updateRoomDescription')} ${description ? Parser.htmlToText(description) : description}`; children = ; } else if (ReportActionsUtils.isActionOfType(action, CONST.REPORT.ACTIONS.TYPE.DISMISSED_VIOLATION)) { children = ; diff --git a/src/pages/workspace/WorkspaceNewRoomPage.tsx b/src/pages/workspace/WorkspaceNewRoomPage.tsx index 3f53f9e1cf6dd..fcc6466477b6e 100644 --- a/src/pages/workspace/WorkspaceNewRoomPage.tsx +++ b/src/pages/workspace/WorkspaceNewRoomPage.tsx @@ -105,7 +105,7 @@ function WorkspaceNewRoomPage({policies, reports, formState, session, activePoli */ const submit = (values: FormOnyxValues) => { const participants = [session?.accountID ?? -1]; - const parsedDescription = ReportUtils.getParsedComment(values.reportDescription ?? ''); + const parsedDescription = ReportUtils.getParsedComment(values.reportDescription ?? '', {policyID}); const policyReport = ReportUtils.buildOptimisticChatReport( participants, values.roomName, @@ -183,7 +183,7 @@ function WorkspaceNewRoomPage({policies, reports, formState, session, activePoli ErrorUtils.addErrorMessage(errors, 'roomName', translate('common.error.characterLimitExceedCounter', {length: values.roomName.length, limit: CONST.TITLE_CHARACTER_LIMIT})); } - const descriptionLength = ReportUtils.getCommentLength(values.reportDescription); + const descriptionLength = ReportUtils.getCommentLength(values.reportDescription, {policyID}); if (descriptionLength > CONST.REPORT_DESCRIPTION.MAX_LENGTH) { ErrorUtils.addErrorMessage( errors, @@ -198,7 +198,7 @@ function WorkspaceNewRoomPage({policies, reports, formState, session, activePoli return errors; }, - [reports, translate], + [reports, policyID, translate], ); const writeCapabilityOptions = useMemo( From a2208937b679eb32dcbbb5aa502efb4802f23ae6 Mon Sep 17 00:00:00 2001 From: Rodrigo Lino da Costa Date: Wed, 17 Jul 2024 14:32:59 -0300 Subject: [PATCH 2/6] fix how to get personal details for mentions --- src/libs/Parser.ts | 4 +++- src/libs/actions/Policy/Policy.ts | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/libs/Parser.ts b/src/libs/Parser.ts index cbfeb6e409225..d34acea196697 100644 --- a/src/libs/Parser.ts +++ b/src/libs/Parser.ts @@ -2,6 +2,8 @@ import {ExpensiMark} from 'expensify-common'; import Onyx from 'react-native-onyx'; import ONYXKEYS from '@src/ONYXKEYS'; +import {getEffectiveDisplayName} from '@libs/PersonalDetailsUtils' +import * as Localize from './Localize'; import Log from './Log'; import * as ReportConnection from './ReportConnection'; @@ -15,7 +17,7 @@ Onyx.connect({ return; } - accountIDToNameMap[personalDetails.accountID] = personalDetails.login ?? String(personalDetails.accountID); + accountIDToNameMap[personalDetails.accountID] = getEffectiveDisplayName(personalDetails) ?? Localize.translateLocal('common.hidden'); }); }, }); diff --git a/src/libs/actions/Policy/Policy.ts b/src/libs/actions/Policy/Policy.ts index 3beba28e48128..561c98362e279 100644 --- a/src/libs/actions/Policy/Policy.ts +++ b/src/libs/actions/Policy/Policy.ts @@ -1100,7 +1100,7 @@ function updateWorkspaceDescription(policyID: string, description: string, curre if (description === currentDescription) { return; } - const parsedDescription = ReportUtils.getParsedComment(description, {policyID}); + const parsedDescription = ReportUtils.getParsedComment(description); const optimisticData: OnyxUpdate[] = [ { From 85b7e920f6e561e8011ffb9166d4a1545bdb6f63 Mon Sep 17 00:00:00 2001 From: Rodrigo Lino da Costa Date: Mon, 29 Jul 2024 14:32:35 -0300 Subject: [PATCH 3/6] parsing room description html --- src/libs/Parser.ts | 2 +- src/libs/ReportActionsUtils.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libs/Parser.ts b/src/libs/Parser.ts index d34acea196697..d3a3763ed09c4 100644 --- a/src/libs/Parser.ts +++ b/src/libs/Parser.ts @@ -1,8 +1,8 @@ // eslint-disable-next-line no-restricted-imports import {ExpensiMark} from 'expensify-common'; import Onyx from 'react-native-onyx'; +import {getEffectiveDisplayName} from '@libs/PersonalDetailsUtils'; import ONYXKEYS from '@src/ONYXKEYS'; -import {getEffectiveDisplayName} from '@libs/PersonalDetailsUtils' import * as Localize from './Localize'; import Log from './Log'; import * as ReportConnection from './ReportConnection'; diff --git a/src/libs/ReportActionsUtils.ts b/src/libs/ReportActionsUtils.ts index 8e9926648c2c1..89d043cad7a2d 100644 --- a/src/libs/ReportActionsUtils.ts +++ b/src/libs/ReportActionsUtils.ts @@ -1585,7 +1585,7 @@ function getExportIntegrationActionFragments(reportAction: OnyxEntry Date: Mon, 29 Jul 2024 15:07:06 -0300 Subject: [PATCH 4/6] fix lint --- src/libs/Parser.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/Parser.ts b/src/libs/Parser.ts index d3a3763ed09c4..b2fe4877a555c 100644 --- a/src/libs/Parser.ts +++ b/src/libs/Parser.ts @@ -1,7 +1,7 @@ // eslint-disable-next-line no-restricted-imports import {ExpensiMark} from 'expensify-common'; import Onyx from 'react-native-onyx'; -import {getEffectiveDisplayName} from '@libs/PersonalDetailsUtils'; +import {getEffectiveDisplayName} from './PersonalDetailsUtils'; import ONYXKEYS from '@src/ONYXKEYS'; import * as Localize from './Localize'; import Log from './Log'; From 6065516a04a64ead1fd72d007c703a80d0e15309 Mon Sep 17 00:00:00 2001 From: Rodrigo Lino da Costa Date: Mon, 29 Jul 2024 15:20:58 -0300 Subject: [PATCH 5/6] prettier --- src/libs/Parser.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/Parser.ts b/src/libs/Parser.ts index b2fe4877a555c..9364b147e8eab 100644 --- a/src/libs/Parser.ts +++ b/src/libs/Parser.ts @@ -1,10 +1,10 @@ // eslint-disable-next-line no-restricted-imports import {ExpensiMark} from 'expensify-common'; import Onyx from 'react-native-onyx'; -import {getEffectiveDisplayName} from './PersonalDetailsUtils'; import ONYXKEYS from '@src/ONYXKEYS'; import * as Localize from './Localize'; import Log from './Log'; +import {getEffectiveDisplayName} from './PersonalDetailsUtils'; import * as ReportConnection from './ReportConnection'; const accountIDToNameMap: Record = {}; From 16d62f299c5382b11f1881c6aca4ab61079c93aa Mon Sep 17 00:00:00 2001 From: Rodrigo Lino da Costa Date: Tue, 30 Jul 2024 16:48:13 -0300 Subject: [PATCH 6/6] fixing copy to clipboard mentions --- src/libs/Parser.ts | 4 +--- src/libs/ReportActionsUtils.ts | 4 ++-- src/pages/home/report/ReportActionItem.tsx | 3 --- 3 files changed, 3 insertions(+), 8 deletions(-) diff --git a/src/libs/Parser.ts b/src/libs/Parser.ts index 9364b147e8eab..15a4981225f37 100644 --- a/src/libs/Parser.ts +++ b/src/libs/Parser.ts @@ -2,9 +2,7 @@ import {ExpensiMark} from 'expensify-common'; import Onyx from 'react-native-onyx'; import ONYXKEYS from '@src/ONYXKEYS'; -import * as Localize from './Localize'; import Log from './Log'; -import {getEffectiveDisplayName} from './PersonalDetailsUtils'; import * as ReportConnection from './ReportConnection'; const accountIDToNameMap: Record = {}; @@ -17,7 +15,7 @@ Onyx.connect({ return; } - accountIDToNameMap[personalDetails.accountID] = getEffectiveDisplayName(personalDetails) ?? Localize.translateLocal('common.hidden'); + accountIDToNameMap[personalDetails.accountID] = personalDetails.login ?? personalDetails.displayName ?? String(personalDetails.accountID); }); }, }); diff --git a/src/libs/ReportActionsUtils.ts b/src/libs/ReportActionsUtils.ts index 89d043cad7a2d..0d92df4e8ba88 100644 --- a/src/libs/ReportActionsUtils.ts +++ b/src/libs/ReportActionsUtils.ts @@ -1303,7 +1303,7 @@ function getReportActionMessageFragments(action: ReportAction): Message[] { } if (isActionOfType(action, CONST.REPORT.ACTIONS.TYPE.ROOM_CHANGE_LOG.UPDATE_ROOM_DESCRIPTION)) { - const message = `${Localize.translateLocal('roomChangeLog.updateRoomDescription')} ${getOriginalMessage(action)?.description}`; + const message = getUpdateRoomDescriptionMessage(action); return [{text: message, html: `${message}`, type: 'COMMENT'}]; } @@ -1585,7 +1585,7 @@ function getExportIntegrationActionFragments(reportAction: OnyxEntry; } else if (action.actionName === CONST.REPORT.ACTIONS.TYPE.MERGED_WITH_CASH_TRANSACTION) { children = ; - } else if (action.actionName === CONST.REPORT.ACTIONS.TYPE.ROOM_CHANGE_LOG.UPDATE_ROOM_DESCRIPTION) { - const message = ReportActionsUtils.getUpdateRoomDescriptionMessage(action); - children = ; } else if (ReportActionsUtils.isActionOfType(action, CONST.REPORT.ACTIONS.TYPE.DISMISSED_VIOLATION)) { children = ; } else if (action.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.ADD_TAG) {