From 812ac92dbd5e07904e3e3e2f4f8ce706bb2c42ea Mon Sep 17 00:00:00 2001 From: Rayane <77965000+rayane-d@users.noreply.github.com> Date: Thu, 5 Feb 2026 00:48:23 +0100 Subject: [PATCH] Tags - For independent multi-level tags, Implement policy changelog message when a level is made required or not required --- src/languages/en.ts | 2 ++ src/libs/ReportActionsUtils.ts | 12 ++++++++++++ src/libs/SidebarUtils.ts | 3 +++ .../inbox/report/ContextMenu/ContextMenuActions.tsx | 3 +++ src/pages/inbox/report/PureReportActionItem.tsx | 3 +++ src/types/onyx/OriginalMessage.ts | 6 ++++++ 6 files changed, 29 insertions(+) diff --git a/src/languages/en.ts b/src/languages/en.ts index 35b04048e7b59..77237a3d26af9 100644 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -6557,6 +6557,8 @@ const translations = { : `changed the "${categoryName}" category description hint to “${newValue}” (previously “${oldValue}”)`; }, updateTagListName: ({oldName, newName}: UpdatedPolicyCategoryNameParams) => `changed the tag list name to "${newName}" (previously "${oldName}")`, + updateTagListRequired: ({tagListsName, isRequired}: {tagListsName: string; isRequired: boolean}) => + `updated the tag list "${tagListsName}" to be "${isRequired ? 'required' : 'not required'}"`, addTag: ({tagListName, tagName}: UpdatedPolicyTagParams) => `added the tag "${tagName}" to the list "${tagListName}"`, updateTagName: ({tagListName, newName, oldName}: UpdatedPolicyTagNameParams) => `updated the tag list "${tagListName}" by changing the tag "${oldName}" to "${newName}`, updateTagEnabled: ({tagListName, tagName, enabled}: UpdatedPolicyTagParams) => `${enabled ? 'enabled' : 'disabled'} the tag "${tagName}" on the list "${tagListName}"`, diff --git a/src/libs/ReportActionsUtils.ts b/src/libs/ReportActionsUtils.ts index 2caf2451fecb1..38c6f41971f8d 100644 --- a/src/libs/ReportActionsUtils.ts +++ b/src/libs/ReportActionsUtils.ts @@ -2772,6 +2772,17 @@ function getTagListNameUpdatedMessage(translate: LocalizedTranslate, action: Rep return getReportActionText(action); } +function getTagListRequiredUpdatedMessage(translate: LocalizedTranslate, action: ReportAction): string { + const {tagListsName, isRequired} = getOriginalMessage(action as ReportAction) ?? {}; + if (tagListsName !== undefined && isRequired !== undefined) { + return translate('workspaceActions.updateTagListRequired', { + tagListsName, + isRequired, + }); + } + return getReportActionText(action); +} + function getWorkspaceCustomUnitUpdatedMessage(translate: LocalizedTranslate, action: ReportAction): string { const {oldValue, newValue, customUnitName, updatedField} = getOriginalMessage(action as ReportAction) ?? {}; @@ -3996,6 +4007,7 @@ export { getAddedConnectionMessage, getWorkspaceCustomUnitRateUpdatedMessage, getTagListNameUpdatedMessage, + getTagListRequiredUpdatedMessage, getWorkspaceCustomUnitUpdatedMessage, getRoomChangeLogMessage, shouldShowActivateCard, diff --git a/src/libs/SidebarUtils.ts b/src/libs/SidebarUtils.ts index d9147fe48b5eb..1fefc89f80a96 100644 --- a/src/libs/SidebarUtils.ts +++ b/src/libs/SidebarUtils.ts @@ -67,6 +67,7 @@ import { getSettlementAccountLockedMessage, getSubmitsToUpdateMessage, getTagListNameUpdatedMessage, + getTagListRequiredUpdatedMessage, getTravelUpdateMessage, getUpdateACHAccountMessage, getUpdatedApprovalRuleMessage, @@ -890,6 +891,8 @@ function getOptionData({ result.alternateText = getWorkspaceTaxUpdateMessage(translate, lastAction); } else if (isActionOfType(lastAction, CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_TAG_LIST_NAME)) { result.alternateText = getCleanedTagName(getTagListNameUpdatedMessage(translate, lastAction) ?? ''); + } else if (isActionOfType(lastAction, CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_TAG_LIST_REQUIRED)) { + result.alternateText = getCleanedTagName(getTagListRequiredUpdatedMessage(translate, lastAction) ?? ''); } else if (isTagModificationAction(lastAction?.actionName ?? '')) { result.alternateText = getCleanedTagName(getWorkspaceTagUpdateMessage(translate, lastAction) ?? ''); } else if (isActionOfType(lastAction, CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_CUSTOM_UNIT)) { diff --git a/src/pages/inbox/report/ContextMenu/ContextMenuActions.tsx b/src/pages/inbox/report/ContextMenu/ContextMenuActions.tsx index c7c4cfa6aeb8c..ffea7fa606db4 100644 --- a/src/pages/inbox/report/ContextMenu/ContextMenuActions.tsx +++ b/src/pages/inbox/report/ContextMenu/ContextMenuActions.tsx @@ -72,6 +72,7 @@ import { getSettlementAccountLockedMessage, getSubmitsToUpdateMessage, getTagListNameUpdatedMessage, + getTagListRequiredUpdatedMessage, getTravelUpdateMessage, getUpdateACHAccountMessage, getUpdatedApprovalRuleMessage, @@ -781,6 +782,8 @@ const ContextMenuActions: ContextMenuAction[] = [ Clipboard.setString(getWorkspaceTaxUpdateMessage(translate, reportAction)); } else if (reportAction?.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_TAG_LIST_NAME) { Clipboard.setString(getCleanedTagName(getTagListNameUpdatedMessage(translate, reportAction))); + } else if (reportAction?.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_TAG_LIST_REQUIRED) { + Clipboard.setString(getCleanedTagName(getTagListRequiredUpdatedMessage(translate, reportAction))); } else if (isTagModificationAction(reportAction.actionName)) { Clipboard.setString(getCleanedTagName(getWorkspaceTagUpdateMessage(translate, reportAction))); } else if (reportAction?.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_CUSTOM_UNIT) { diff --git a/src/pages/inbox/report/PureReportActionItem.tsx b/src/pages/inbox/report/PureReportActionItem.tsx index b3bdb218ba5d3..8e823158a0a5e 100644 --- a/src/pages/inbox/report/PureReportActionItem.tsx +++ b/src/pages/inbox/report/PureReportActionItem.tsx @@ -111,6 +111,7 @@ import { getSettlementAccountLockedMessage, getSubmitsToUpdateMessage, getTagListNameUpdatedMessage, + getTagListRequiredUpdatedMessage, getTravelUpdateMessage, getUpdateACHAccountMessage, getUpdatedApprovalRuleMessage, @@ -1501,6 +1502,8 @@ function PureReportActionItem({ children = ; } else if (action.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_TAG_LIST_NAME) { children = ; + } else if (action.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_TAG_LIST_REQUIRED) { + children = ; } else if (isTagModificationAction(action.actionName)) { children = ; } else if (action.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_CUSTOM_UNIT) { diff --git a/src/types/onyx/OriginalMessage.ts b/src/types/onyx/OriginalMessage.ts index cb4d1c47a4fe5..650b853a6f9f1 100644 --- a/src/types/onyx/OriginalMessage.ts +++ b/src/types/onyx/OriginalMessage.ts @@ -607,6 +607,12 @@ type OriginalMessagePolicyChangeLog = { /** The name of the enabled/disabled feature */ featureName?: string; + /** The name of the tag list being updated */ + tagListsName?: string; + + /** Whether the tag list is required */ + isRequired?: boolean; + /** The new reimburser details */ reimburser?: { /** The email of the new reimburser */