diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index 05c83ca642..e0b7ecbd40 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -32337,6 +32337,9 @@ importers: '@hcengineering/view': specifier: workspace:^0.7.0 version: link:../../plugins/view + '@hcengineering/workbench': + specifier: workspace:^0.7.0 + version: link:../../plugins/workbench devDependencies: '@hcengineering/platform-rig': specifier: workspace:^0.7.19 diff --git a/models/card/src/index.ts b/models/card/src/index.ts index 25f0c60e2d..bf8285fa0b 100644 --- a/models/card/src/index.ts +++ b/models/card/src/index.ts @@ -469,7 +469,12 @@ export function createModel (builder: Builder): void { group: card.ids.CardNotificationGroup, txClasses: [core.class.TxUpdateDoc, core.class.TxMixin], objectClass: card.class.Card, - defaultEnabled: false + defaultEnabled: false, + templates: { + textTemplate: '{body}', + htmlTemplate: '

{body}

{link}

', + subjectTemplate: '{title} updated' + } }, card.ids.CardNotification ) @@ -485,7 +490,12 @@ export function createModel (builder: Builder): void { txClasses: [core.class.TxCreateDoc], objectClass: chunter.class.ChatMessage, attachedToClass: card.class.Card, - defaultEnabled: true + defaultEnabled: true, + templates: { + textTemplate: 'New message in {title} ({link}) from {senderName}: {message}', + htmlTemplate: '

New message in {title} from {senderName}: {message}

{link}

', + subjectTemplate: 'New message from {senderName} in {title}' + } }, card.ids.CardMessageNotification ) diff --git a/models/server-card/src/index.ts b/models/server-card/src/index.ts index e5c66f5417..32d1be5798 100644 --- a/models/server-card/src/index.ts +++ b/models/server-card/src/index.ts @@ -134,4 +134,8 @@ export function createModel (builder: Builder): void { builder.mixin(card.class.Card, core.class.Class, serverNotification.mixin.TextPresenter, { presenter: serverCard.function.CardTextPresenter }) + + builder.mixin(card.class.Card, core.class.Class, serverNotification.mixin.HTMLPresenter, { + presenter: serverCard.function.CardHTMLPresenter + }) } diff --git a/server-plugins/card-resources/package.json b/server-plugins/card-resources/package.json index 9f333473b1..80cd9f9434 100644 --- a/server-plugins/card-resources/package.json +++ b/server-plugins/card-resources/package.json @@ -43,6 +43,7 @@ "@hcengineering/core": "workspace:^0.7.24", "@hcengineering/platform": "workspace:^0.7.19", "@hcengineering/server-core": "workspace:^0.7.18", + "@hcengineering/workbench": "workspace:^0.7.0", "@hcengineering/communication-types": "workspace:^0.7.12", "@hcengineering/communication-sdk-types": "workspace:^0.7.12", "@hcengineering/communication": "workspace:^0.7.0", diff --git a/server-plugins/card-resources/src/index.ts b/server-plugins/card-resources/src/index.ts index 98cbd5dd3f..875802633d 100644 --- a/server-plugins/card-resources/src/index.ts +++ b/server-plugins/card-resources/src/index.ts @@ -13,12 +13,13 @@ // limitations under the License. // -import card, { Card, MasterTag, Tag } from '@hcengineering/card' +import card, { Card, cardId, MasterTag, Tag } from '@hcengineering/card' import core, { AccountUuid, AnyAttribute, ArrOf, Class, + concatLink, Data, Doc, DocumentUpdate, @@ -41,8 +42,9 @@ import core, { TxRemoveDoc, TxUpdateDoc } from '@hcengineering/core' -import { TriggerControl } from '@hcengineering/server-core' +import serverCore, { TriggerControl } from '@hcengineering/server-core' import setting from '@hcengineering/setting' +import { workbenchId } from '@hcengineering/workbench' import view from '@hcengineering/view' import { AddCollaboratorsEvent, @@ -59,6 +61,7 @@ import { getEmployee, getPersonSpaces } from '@hcengineering/server-contact' import contact, { Employee, formatName, Person } from '@hcengineering/contact' import communication, { Direct } from '@hcengineering/communication' import { CardPeer } from '@hcengineering/communication-types' +import { getMetadata } from '@hcengineering/platform' async function OnAttribute (ctx: TxCreateDoc[], control: TriggerControl): Promise { const attr = TxProcessor.createDoc2Doc(ctx[0]) @@ -882,10 +885,22 @@ export async function CardTextPresenter (doc: Doc): Promise { return card.title } +export async function CardHTMLPresenter (doc: Doc, control: TriggerControl): Promise { + const card = doc as Card + + const front = control.branding?.front ?? getMetadata(serverCore.metadata.FrontUrl) ?? '' + + const path = `${workbenchId}/${control.workspace.url}/${cardId}/${card._id}` + + const link = concatLink(front, path) + return `${card.title}` +} + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type export default async () => ({ function: { - CardTextPresenter + CardTextPresenter, + CardHTMLPresenter }, trigger: { OnAttribute, diff --git a/server-plugins/card/src/index.ts b/server-plugins/card/src/index.ts index ad195ea658..0f31d72cf2 100644 --- a/server-plugins/card/src/index.ts +++ b/server-plugins/card/src/index.ts @@ -31,7 +31,8 @@ export default plugin(serverCardId, { CommunicationEnabled: '' as Metadata }, function: { - CardTextPresenter: '' as Resource + CardTextPresenter: '' as Resource, + CardHTMLPresenter: '' as Resource }, trigger: { OnAttribute: '' as Resource,