From ebb9c853f630fd671c0ddfe105965accb24b20ae Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Thu, 15 Aug 2024 10:38:31 +0700 Subject: [PATCH 1/4] fix: Message of added or invited user to '#admins' chat, doesn't get translated --- src/languages/en.ts | 1 + src/languages/es.ts | 1 + src/libs/ReportActionsUtils.ts | 16 ++++++++++++++++ src/libs/SidebarUtils.ts | 4 ++++ .../report/ContextMenu/ContextMenuActions.tsx | 2 ++ src/pages/home/report/ReportActionItem.tsx | 2 ++ src/types/onyx/OriginalMessage.ts | 6 ++++++ 7 files changed, 32 insertions(+) diff --git a/src/languages/en.ts b/src/languages/en.ts index 27c666caaaf8..27dd95860152 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -3821,6 +3821,7 @@ export default { stripePaid: ({amount, currency}: StripePaidParams) => `paid ${currency}${amount}`, takeControl: `took control`, unapproved: ({amount, currency}: UnapprovedParams) => `unapproved ${currency}${amount}`, + addEmployee: (email: string, role: string) => `added ${email} as ${role === 'user' ? 'member' : 'admin'}`, }, }, }, diff --git a/src/languages/es.ts b/src/languages/es.ts index e57271de4923..5ac0ddf875ad 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -3876,6 +3876,7 @@ export default { stripePaid: ({amount, currency}: StripePaidParams) => `pagado ${currency}${amount}`, takeControl: `tomó el control`, unapproved: ({amount, currency}: UnapprovedParams) => `no aprobado ${currency}${amount}`, + addEmployee: (email: string, role: string) => `agregó a ${email} como ${role === 'user' ? 'miembro' : 'Administrador'}`, }, }, }, diff --git a/src/libs/ReportActionsUtils.ts b/src/libs/ReportActionsUtils.ts index a731fab4ae05..ac1169b3d806 100644 --- a/src/libs/ReportActionsUtils.ts +++ b/src/libs/ReportActionsUtils.ts @@ -1594,6 +1594,21 @@ function getUpdateRoomDescriptionMessage(reportAction: ReportAction): string { return Localize.translateLocal('roomChangeLog.clearRoomDescription'); } +function isPolicyChangeLogAddEmployeeMessage(reportAction: OnyxInputOrEntry): reportAction is ReportAction { + return isActionOfType(reportAction, CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.ADD_EMPLOYEE); +} + +function getPolicyChangeLogAddEmployeeMessage(reportAction: OnyxInputOrEntry): string { + if (!isPolicyChangeLogAddEmployeeMessage(reportAction)) { + return ''; + } + + const originalMessage = getOriginalMessage(reportAction); + const email = originalMessage?.email ?? ''; + const role = originalMessage?.role ?? ''; + return Localize.translateLocal('report.actions.type.addEmployee', email, role); +} + export { doesReportHaveVisibleActions, extractLinksFromMessageHtml, @@ -1688,6 +1703,7 @@ export { getExportIntegrationMessageHTML, getUpdateRoomDescriptionMessage, didMessageMentionCurrentUser, + getPolicyChangeLogAddEmployeeMessage, }; export type {LastVisibleMessage}; diff --git a/src/libs/SidebarUtils.ts b/src/libs/SidebarUtils.ts index 7f048017e1b9..ac551d041397 100644 --- a/src/libs/SidebarUtils.ts +++ b/src/libs/SidebarUtils.ts @@ -426,6 +426,10 @@ function getOptionData({ result.alternateText = ReportUtils.formatReportLastMessageText(Parser.htmlToText(`${lastActorDisplayName}: ${lastMessageText}`)); } else if (lastAction?.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.ADD_TAG) { result.alternateText = PolicyUtils.getCleanedTagName(ReportActionsUtils.getReportActionMessage(lastAction)?.text ?? ''); + } else if (ReportActionsUtils.isOldDotReportAction(lastAction)) { + result.alternateText = ReportActionsUtils.getMessageOfOldDotReportAction(lastAction); + } else if (lastAction?.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.ADD_EMPLOYEE) { + result.alternateText = ReportActionsUtils.getPolicyChangeLogAddEmployeeMessage(lastAction); } else { result.alternateText = lastMessageTextFromReport.length > 0 diff --git a/src/pages/home/report/ContextMenu/ContextMenuActions.tsx b/src/pages/home/report/ContextMenu/ContextMenuActions.tsx index 50b7e9c76153..d0bc3bdb5ce7 100644 --- a/src/pages/home/report/ContextMenu/ContextMenuActions.tsx +++ b/src/pages/home/report/ContextMenu/ContextMenuActions.tsx @@ -459,6 +459,8 @@ const ContextMenuActions: ContextMenuAction[] = [ setClipboardMessage(ReportActionsUtils.getExportIntegrationMessageHTML(reportAction)); } else if (reportAction?.actionName === CONST.REPORT.ACTIONS.TYPE.ROOM_CHANGE_LOG.UPDATE_ROOM_DESCRIPTION) { setClipboardMessage(ReportActionsUtils.getUpdateRoomDescriptionMessage(reportAction)); + } else if (reportAction?.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.ADD_EMPLOYEE) { + setClipboardMessage(ReportActionsUtils.getPolicyChangeLogAddEmployeeMessage(reportAction)); } else if (content) { setClipboardMessage( content.replace(/()(.*?)(<\/mention-user>)/gi, (match, openTag: string, innerContent: string, closeTag: string): string => { diff --git a/src/pages/home/report/ReportActionItem.tsx b/src/pages/home/report/ReportActionItem.tsx index 68ced63d12d0..08d1e04a5d9c 100644 --- a/src/pages/home/report/ReportActionItem.tsx +++ b/src/pages/home/report/ReportActionItem.tsx @@ -653,6 +653,8 @@ function ReportActionItem({ children = ; } else if (action.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.ADD_TAG) { children = ; + } else if (action.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.ADD_EMPLOYEE) { + children = ; } else if ( ReportActionsUtils.isActionOfType(action, CONST.REPORT.ACTIONS.TYPE.CARD_ISSUED, CONST.REPORT.ACTIONS.TYPE.CARD_ISSUED_VIRTUAL, CONST.REPORT.ACTIONS.TYPE.CARD_MISSING_ADDRESS) ) { diff --git a/src/types/onyx/OriginalMessage.ts b/src/types/onyx/OriginalMessage.ts index e70629782e2a..0b9229715457 100644 --- a/src/types/onyx/OriginalMessage.ts +++ b/src/types/onyx/OriginalMessage.ts @@ -244,6 +244,12 @@ type OriginalMessageChangeLog = { /** ID of the report */ reportID?: number; + + /** email of the report */ + email?: string; + + /** role of the report */ + role?: string; }; /** Model of `join policy changelog` report action */ From e9269177d3cacd1ead597b4f92c7342ba7a1d32d Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Thu, 15 Aug 2024 15:36:28 +0700 Subject: [PATCH 2/4] Add new translation --- src/languages/en.ts | 2 +- src/languages/es.ts | 2 +- src/libs/SidebarUtils.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/languages/en.ts b/src/languages/en.ts index 700a76a53660..142cfa2fdb03 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -3838,7 +3838,7 @@ export default { reimbursementDelayed: `processed the payment but it’s delayed by 1-2 more business days`, selectedForRandomAudit: `randomly selected for review`, selectedForRandomAuditMarkdown: `[randomly selected](https://help.expensify.com/articles/expensify-classic/reports/Set-a-random-report-audit-schedule) for review`, - share: ({to}: ShareParams) => `invited user ${to}`, + share: ({to}: ShareParams) => `invited member ${to}`, unshare: ({to}: UnshareParams) => `removed user ${to}`, stripePaid: ({amount, currency}: StripePaidParams) => `paid ${currency}${amount}`, takeControl: `took control`, diff --git a/src/languages/es.ts b/src/languages/es.ts index f0cb261d5a9f..f220fb8345d3 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -3893,7 +3893,7 @@ export default { reimbursementDelayed: `procesó el pago pero se retrasó entre 1 y 2 días hábiles más`, selectedForRandomAudit: `seleccionado al azar para revisión`, selectedForRandomAuditMarkdown: `[seleccionado al azar](https://help.expensify.com/articles/expensify-classic/reports/Set-a-random-report-audit-schedule) para revisión`, - share: ({to}: ShareParams) => `usuario invitado ${to}`, + share: ({to}: ShareParams) => `miembro invitado ${to}`, unshare: ({to}: UnshareParams) => `usuario eliminado ${to}`, stripePaid: ({amount, currency}: StripePaidParams) => `pagado ${currency}${amount}`, takeControl: `tomó el control`, diff --git a/src/libs/SidebarUtils.ts b/src/libs/SidebarUtils.ts index f7e705f4c150..8f18df7564e1 100644 --- a/src/libs/SidebarUtils.ts +++ b/src/libs/SidebarUtils.ts @@ -426,7 +426,7 @@ function getOptionData({ result.alternateText = ReportUtils.formatReportLastMessageText(Parser.htmlToText(`${lastActorDisplayName}: ${lastMessageText}`)); } else if (lastAction?.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.ADD_TAG) { result.alternateText = PolicyUtils.getCleanedTagName(ReportActionsUtils.getReportActionMessage(lastAction)?.text ?? ''); - } else if (ReportActionsUtils.isOldDotReportAction(lastAction)) { + } else if (lastAction && ReportActionsUtils.isOldDotReportAction(lastAction)) { result.alternateText = ReportActionsUtils.getMessageOfOldDotReportAction(lastAction); } else if (lastAction?.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.ADD_EMPLOYEE) { result.alternateText = ReportActionsUtils.getPolicyChangeLogAddEmployeeMessage(lastAction); From 85eba87957bc3deccf67de6e1970a17eacf39c0f Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Thu, 15 Aug 2024 15:42:47 +0700 Subject: [PATCH 3/4] fix chore --- src/languages/es.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/es.ts b/src/languages/es.ts index f220fb8345d3..4b046ef652de 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -3898,7 +3898,7 @@ export default { stripePaid: ({amount, currency}: StripePaidParams) => `pagado ${currency}${amount}`, takeControl: `tomó el control`, unapproved: ({amount, currency}: UnapprovedParams) => `no aprobado ${currency}${amount}`, - addEmployee: (email: string, role: string) => `agregó a ${email} como ${role === 'user' ? 'miembro' : 'Administrador'}`, + addEmployee: (email: string, role: string) => `agregó a ${email} como ${role === 'user' ? 'miembro' : 'administrador'}`, }, }, }, From a3fc70c89c24cff7b49d1cf767458f60baba08b8 Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Mon, 19 Aug 2024 15:20:53 +0700 Subject: [PATCH 4/4] fix: add new translation key --- src/languages/en.ts | 2 ++ src/languages/es.ts | 3 ++ src/libs/ReportActionsUtils.ts | 33 +++++++++++++++++++ src/libs/SidebarUtils.ts | 4 +++ .../report/ContextMenu/ContextMenuActions.tsx | 4 +++ src/pages/home/report/ReportActionItem.tsx | 4 +++ src/types/onyx/OriginalMessage.ts | 6 ++++ 7 files changed, 56 insertions(+) diff --git a/src/languages/en.ts b/src/languages/en.ts index 142cfa2fdb03..59f441df9206 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -3844,6 +3844,8 @@ export default { takeControl: `took control`, unapproved: ({amount, currency}: UnapprovedParams) => `unapproved ${currency}${amount}`, addEmployee: (email: string, role: string) => `added ${email} as ${role === 'user' ? 'member' : 'admin'}`, + updateRole: (email: string, currentRole: string, newRole: string) => `updated the role of ${email} from ${currentRole} to ${newRole}`, + removeMember: (email: string, role: string) => `removed ${role} ${email}`, }, }, }, diff --git a/src/languages/es.ts b/src/languages/es.ts index 4b046ef652de..0e98847afcf3 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -3899,6 +3899,9 @@ export default { takeControl: `tomó el control`, unapproved: ({amount, currency}: UnapprovedParams) => `no aprobado ${currency}${amount}`, addEmployee: (email: string, role: string) => `agregó a ${email} como ${role === 'user' ? 'miembro' : 'administrador'}`, + updateRole: (email: string, currentRole: string, newRole: string) => + `actualicé el rol ${email} de ${currentRole === 'user' ? 'miembro' : 'administrador'} a ${newRole === 'user' ? 'miembro' : 'administrador'}`, + removeMember: (email: string, role: string) => `eliminado ${role === 'user' ? 'miembro' : 'administrador'} ${email}`, }, }, }, diff --git a/src/libs/ReportActionsUtils.ts b/src/libs/ReportActionsUtils.ts index ac1169b3d806..0449908268fd 100644 --- a/src/libs/ReportActionsUtils.ts +++ b/src/libs/ReportActionsUtils.ts @@ -1609,6 +1609,37 @@ function getPolicyChangeLogAddEmployeeMessage(reportAction: OnyxInputOrEntry): reportAction is ReportAction { + return isActionOfType(reportAction, CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_EMPLOYEE); +} + +function getPolicyChangeLogChangeRoleMessage(reportAction: OnyxInputOrEntry): string { + if (!isPolicyChangeLogChangeRoleMessage(reportAction)) { + return ''; + } + const originalMessage = getOriginalMessage(reportAction); + const email = originalMessage?.email ?? ''; + const newRole = originalMessage?.newValue ?? ''; + const oldRole = originalMessage?.oldValue ?? ''; + return Localize.translateLocal('report.actions.type.updateRole', email, oldRole, newRole); +} + +function isPolicyChangeLogDeleteMemberMessage( + reportAction: OnyxInputOrEntry, +): reportAction is ReportAction { + return isActionOfType(reportAction, CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.DELETE_EMPLOYEE); +} + +function getPolicyChangeLogDeleteMemberMessage(reportAction: OnyxInputOrEntry): string { + if (!isPolicyChangeLogDeleteMemberMessage(reportAction)) { + return ''; + } + const originalMessage = getOriginalMessage(reportAction); + const email = originalMessage?.email ?? ''; + const role = originalMessage?.role ?? ''; + return Localize.translateLocal('report.actions.type.removeMember', email, role); +} + export { doesReportHaveVisibleActions, extractLinksFromMessageHtml, @@ -1704,6 +1735,8 @@ export { getUpdateRoomDescriptionMessage, didMessageMentionCurrentUser, getPolicyChangeLogAddEmployeeMessage, + getPolicyChangeLogChangeRoleMessage, + getPolicyChangeLogDeleteMemberMessage, }; export type {LastVisibleMessage}; diff --git a/src/libs/SidebarUtils.ts b/src/libs/SidebarUtils.ts index 8f18df7564e1..1c6b79fee012 100644 --- a/src/libs/SidebarUtils.ts +++ b/src/libs/SidebarUtils.ts @@ -430,6 +430,10 @@ function getOptionData({ result.alternateText = ReportActionsUtils.getMessageOfOldDotReportAction(lastAction); } else if (lastAction?.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.ADD_EMPLOYEE) { result.alternateText = ReportActionsUtils.getPolicyChangeLogAddEmployeeMessage(lastAction); + } else if (lastAction?.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_EMPLOYEE) { + result.alternateText = ReportActionsUtils.getPolicyChangeLogChangeRoleMessage(lastAction); + } else if (lastAction?.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.DELETE_EMPLOYEE) { + result.alternateText = ReportActionsUtils.getPolicyChangeLogDeleteMemberMessage(lastAction); } else { result.alternateText = lastMessageTextFromReport.length > 0 diff --git a/src/pages/home/report/ContextMenu/ContextMenuActions.tsx b/src/pages/home/report/ContextMenu/ContextMenuActions.tsx index d5d930aad994..af136127d622 100644 --- a/src/pages/home/report/ContextMenu/ContextMenuActions.tsx +++ b/src/pages/home/report/ContextMenu/ContextMenuActions.tsx @@ -462,6 +462,10 @@ const ContextMenuActions: ContextMenuAction[] = [ setClipboardMessage(ReportActionsUtils.getUpdateRoomDescriptionMessage(reportAction)); } else if (reportAction?.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.ADD_EMPLOYEE) { setClipboardMessage(ReportActionsUtils.getPolicyChangeLogAddEmployeeMessage(reportAction)); + } else if (reportAction?.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_EMPLOYEE) { + setClipboardMessage(ReportActionsUtils.getPolicyChangeLogChangeRoleMessage(reportAction)); + } else if (reportAction?.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.DELETE_EMPLOYEE) { + setClipboardMessage(ReportActionsUtils.getPolicyChangeLogDeleteMemberMessage(reportAction)); } else if (content) { setClipboardMessage( content.replace(/()(.*?)(<\/mention-user>)/gi, (match, openTag: string, innerContent: string, closeTag: string): string => { diff --git a/src/pages/home/report/ReportActionItem.tsx b/src/pages/home/report/ReportActionItem.tsx index 08d1e04a5d9c..419ac6e61a7f 100644 --- a/src/pages/home/report/ReportActionItem.tsx +++ b/src/pages/home/report/ReportActionItem.tsx @@ -655,6 +655,10 @@ function ReportActionItem({ children = ; } else if (action.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.ADD_EMPLOYEE) { children = ; + } else if (action.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_EMPLOYEE) { + children = ; + } else if (action.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.DELETE_EMPLOYEE) { + children = ; } else if ( ReportActionsUtils.isActionOfType(action, CONST.REPORT.ACTIONS.TYPE.CARD_ISSUED, CONST.REPORT.ACTIONS.TYPE.CARD_ISSUED_VIRTUAL, CONST.REPORT.ACTIONS.TYPE.CARD_MISSING_ADDRESS) ) { diff --git a/src/types/onyx/OriginalMessage.ts b/src/types/onyx/OriginalMessage.ts index d88b5fb7bf94..fff7b3b845db 100644 --- a/src/types/onyx/OriginalMessage.ts +++ b/src/types/onyx/OriginalMessage.ts @@ -253,6 +253,12 @@ type OriginalMessageChangeLog = { /** When was it last modified */ lastModified?: string; + + /** New role of user */ + newValue?: string; + + /** Old role of user */ + oldValue?: string; }; /** Model of `join policy changelog` report action */