From 62a5c4d0ad3481484f44827373f498b13e1a31b6 Mon Sep 17 00:00:00 2001 From: Alexey Zinoviev Date: Sun, 5 May 2024 23:26:45 +0400 Subject: [PATCH] ezqms-798: fix role name update Signed-off-by: Alexey Zinoviev --- models/server-setting/src/index.ts | 13 +++++++++- packages/core/src/utils.ts | 9 ++++++- server-plugins/setting-resources/src/index.ts | 25 +++++++++++++++++-- server-plugins/setting/src/index.ts | 4 +++ 4 files changed, 47 insertions(+), 4 deletions(-) diff --git a/models/server-setting/src/index.ts b/models/server-setting/src/index.ts index 0273c070ece..8f0b5b3a341 100644 --- a/models/server-setting/src/index.ts +++ b/models/server-setting/src/index.ts @@ -15,7 +15,7 @@ // import { type Builder } from '@hcengineering/model' - +import serverCore from '@hcengineering/server-core' import core from '@hcengineering/core' import serverNotification from '@hcengineering/server-notification' import serverSetting from '@hcengineering/server-setting' @@ -64,4 +64,15 @@ export function createModel (builder: Builder): void { serverFunc: serverSetting.function.GetOwnerPosition } ) + + builder.createDoc(serverCore.class.Trigger, core.space.Model, { + trigger: serverSetting.trigger.OnRoleNameUpdate, + txMatch: { + _class: core.class.TxCollectionCUD, + objectSpace: core.space.Model, + collection: 'roles', + 'tx._class': core.class.TxUpdateDoc, + 'tx.objectClass': core.class.Role + } + }) } diff --git a/packages/core/src/utils.ts b/packages/core/src/utils.ts index 59864078c68..a22b78b4a7c 100644 --- a/packages/core/src/utils.ts +++ b/packages/core/src/utils.ts @@ -619,11 +619,18 @@ export interface RoleAttributeBaseProps { export function getRoleAttributeBaseProps (data: AttachedData, roleId: Ref): RoleAttributeBaseProps { const name = data.name.trim() const label = getEmbeddedLabel(`Role: ${name}`) - const id = `role-${roleId}` as Ref> + const id = getRoleAttributeId(roleId) return { label, id } } +/** + * @public + */ +export function getRoleAttributeId (roleId: Ref): Ref> { + return `role-${roleId}` as Ref> +} + /** * @public */ diff --git a/server-plugins/setting-resources/src/index.ts b/server-plugins/setting-resources/src/index.ts index c747ea21234..6246e953737 100644 --- a/server-plugins/setting-resources/src/index.ts +++ b/server-plugins/setting-resources/src/index.ts @@ -14,8 +14,8 @@ // import contact, { Person, PersonAccount, getFirstName, getLastName } from '@hcengineering/contact' -import { Account, Doc, Ref } from '@hcengineering/core' -import { translate } from '@hcengineering/platform' +import core, { Account, Doc, Ref, Role, Tx, TxProcessor, TxUpdateDoc, getRoleAttributeId } from '@hcengineering/core' +import { getEmbeddedLabel, translate } from '@hcengineering/platform' import type { TriggerControl } from '@hcengineering/server-core' import setting, { Integration } from '@hcengineering/setting' @@ -91,6 +91,24 @@ export async function getOwnerPosition ( } } +/** + * @public + */ +export async function OnRoleNameUpdate (tx: Tx, control: TriggerControl): Promise { + const actualTx = TxProcessor.extractTx(tx) + const updateTx = actualTx as TxUpdateDoc + + if (updateTx.operations?.name === undefined) return [] + + // Update the related mixin attribute + const roleAttrId = getRoleAttributeId(updateTx.objectId) + const updAttrTx = control.txFactory.createTxUpdateDoc(core.class.Attribute, core.space.Model, roleAttrId, { + label: getEmbeddedLabel(updateTx.operations.name) + }) + + return [updAttrTx] +} + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type export default async () => ({ function: { @@ -100,5 +118,8 @@ export default async () => ({ GetFirstName: getOwnerFirstName, GetLastName: getOwnerLastName, GetOwnerPosition: getOwnerPosition + }, + trigger: { + OnRoleNameUpdate } }) diff --git a/server-plugins/setting/src/index.ts b/server-plugins/setting/src/index.ts index 8c84cbc960b..1acc0caf615 100644 --- a/server-plugins/setting/src/index.ts +++ b/server-plugins/setting/src/index.ts @@ -16,6 +16,7 @@ import type { Plugin, Resource } from '@hcengineering/platform' import { plugin } from '@hcengineering/platform' import { Presenter } from '@hcengineering/server-notification' +import { TriggerFunc } from '@hcengineering/server-core' import { TemplateFieldServerFunc } from '@hcengineering/server-templates' /** @@ -34,5 +35,8 @@ export default plugin(serverSettingId, { GetFirstName: '' as Resource, GetLastName: '' as Resource, GetOwnerPosition: '' as Resource + }, + trigger: { + OnRoleNameUpdate: '' as Resource } })