ezqms-966: notifications fixes (#5819)

Signed-off-by: Alexey Zinoviev <alexey.zinoviev@xored.com>
This commit is contained in:
Alexey Zinoviev 2024-06-14 14:56:14 +04:00 committed by GitHub
parent 1ce1eecf16
commit 45b24722df
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
15 changed files with 92 additions and 13 deletions

View File

@ -926,6 +926,11 @@ export function defineNotifications (builder: Builder): void {
[notification.providers.PlatformNotification]: true, [notification.providers.PlatformNotification]: true,
[notification.providers.BrowserNotification]: false, [notification.providers.BrowserNotification]: false,
[notification.providers.EmailNotification]: false [notification.providers.EmailNotification]: false
},
templates: {
textTemplate: '{sender} changed {doc} status',
htmlTemplate: '<p>{sender} changed {doc} status</p>',
subjectTemplate: '{doc} status changed'
} }
}, },
documents.notification.StateNotification documents.notification.StateNotification
@ -941,12 +946,17 @@ export function defineNotifications (builder: Builder): void {
label: documents.string.CoAuthors, label: documents.string.CoAuthors,
group: documents.notification.DocumentsNotificationGroup, group: documents.notification.DocumentsNotificationGroup,
field: 'coAuthors', field: 'coAuthors',
txClasses: [core.class.TxUpdateDoc], txClasses: [core.class.TxCreateDoc, core.class.TxUpdateDoc],
objectClass: documents.class.ControlledDocument, objectClass: documents.class.ControlledDocument,
providers: { providers: {
[notification.providers.PlatformNotification]: true, [notification.providers.PlatformNotification]: true,
[notification.providers.BrowserNotification]: false, [notification.providers.BrowserNotification]: true,
[notification.providers.EmailNotification]: false [notification.providers.EmailNotification]: true
},
templates: {
textTemplate: '{sender} assigned you as a co-author of {doc}',
htmlTemplate: '<p>{sender} assigned you as a co-author of {doc}</p>',
subjectTemplate: 'Co-authoring assignment for {doc}'
} }
}, },
documents.notification.CoAuthorsNotification documents.notification.CoAuthorsNotification
@ -978,7 +988,7 @@ export function defineNotifications (builder: Builder): void {
'changeControl', 'changeControl',
'coAuthors' 'coAuthors'
], ],
['owner'] ['owner', 'comments', 'reviewers', 'approvers']
) )
} }

View File

@ -270,7 +270,6 @@ export class TDocument extends TDoc implements Document {
state!: DocumentState state!: DocumentState
@Prop(TypeCollaborativeDoc(), documents.string.CollaborativeDocument) @Prop(TypeCollaborativeDoc(), documents.string.CollaborativeDocument)
@Hidden()
content!: CollaborativeDoc content!: CollaborativeDoc
@Prop(Collection(tags.class.TagReference), documents.string.Labels) @Prop(Collection(tags.class.TagReference), documents.string.Labels)

View File

@ -93,7 +93,6 @@ export class TDocument extends TAttachedDoc implements Document {
name!: string name!: string
@Prop(TypeCollaborativeDoc(), document.string.Document) @Prop(TypeCollaborativeDoc(), document.string.Document)
@Hidden()
content!: CollaborativeDoc content!: CollaborativeDoc
@Prop(TypeRef(core.class.Account), document.string.LockedBy) @Prop(TypeRef(core.class.Account), document.string.LockedBy)

View File

@ -135,9 +135,14 @@ export function createModel (builder: Builder): void {
label: request.string.Request, label: request.string.Request,
allowedForAuthor: true, allowedForAuthor: true,
providers: { providers: {
[notification.providers.BrowserNotification]: false, [notification.providers.BrowserNotification]: true,
[notification.providers.PlatformNotification]: true, [notification.providers.PlatformNotification]: true,
[notification.providers.EmailNotification]: false [notification.providers.EmailNotification]: true
},
templates: {
textTemplate: '{sender} sent you a {doc}',
htmlTemplate: '<p><b>{sender}</b> sent you a {doc}</p>',
subjectTemplate: '{doc}'
} }
}, },
request.ids.CreateRequestNotification request.ids.CreateRequestNotification

View File

@ -33,6 +33,8 @@
"@hcengineering/model-core": "^0.6.0", "@hcengineering/model-core": "^0.6.0",
"@hcengineering/platform": "^0.6.11", "@hcengineering/platform": "^0.6.11",
"@hcengineering/server-request": "^0.6.0", "@hcengineering/server-request": "^0.6.0",
"@hcengineering/server-core": "^0.6.1" "@hcengineering/server-core": "^0.6.1",
"@hcengineering/model-request": "^0.6.0",
"@hcengineering/server-notification": "^0.6.1"
} }
} }

View File

@ -18,6 +18,8 @@ import { type Builder } from '@hcengineering/model'
import core from '@hcengineering/core' import core from '@hcengineering/core'
import serverCore from '@hcengineering/server-core' import serverCore from '@hcengineering/server-core'
import serverRequest from '@hcengineering/server-request' import serverRequest from '@hcengineering/server-request'
import serverNotification from '@hcengineering/server-notification'
import request from '@hcengineering/model-request'
export { serverRequestId } from '@hcengineering/server-request' export { serverRequestId } from '@hcengineering/server-request'
@ -25,4 +27,8 @@ export function createModel (builder: Builder): void {
builder.createDoc(serverCore.class.Trigger, core.space.Model, { builder.createDoc(serverCore.class.Trigger, core.space.Model, {
trigger: serverRequest.trigger.OnRequest trigger: serverRequest.trigger.OnRequest
}) })
builder.mixin(request.class.Request, core.class.Class, serverNotification.mixin.TextPresenter, {
presenter: serverRequest.function.RequestTextPresenter
})
} }

View File

@ -500,6 +500,10 @@ export function createModel (builder: Builder): void {
editor: view.component.CollaborativeDocEditor editor: view.component.CollaborativeDocEditor
}) })
builder.mixin(core.class.TypeCollaborativeDoc, core.class.Class, view.mixin.ActivityAttributePresenter, {
presenter: view.component.CollaborativeDocActivityPresenter
})
builder.mixin(core.class.TypeCollaborativeDocVersion, core.class.Class, view.mixin.InlineAttributEditor, { builder.mixin(core.class.TypeCollaborativeDocVersion, core.class.Class, view.mixin.InlineAttributEditor, {
editor: view.component.CollaborativeDocEditor editor: view.component.CollaborativeDocEditor
}) })

View File

@ -74,6 +74,7 @@ export default mergeIds(viewId, view, {
HTMLEditor: '' as AnyComponent, HTMLEditor: '' as AnyComponent,
CollaborativeHTMLEditor: '' as AnyComponent, CollaborativeHTMLEditor: '' as AnyComponent,
CollaborativeDocEditor: '' as AnyComponent, CollaborativeDocEditor: '' as AnyComponent,
CollaborativeDocActivityPresenter: '' as AnyComponent,
MarkupEditor: '' as AnyComponent, MarkupEditor: '' as AnyComponent,
MarkupEditorPopup: '' as AnyComponent, MarkupEditorPopup: '' as AnyComponent,
ListView: '' as AnyComponent, ListView: '' as AnyComponent,

View File

@ -138,7 +138,8 @@ export function getIsTextType (attributeModel?: AttributeModel): boolean {
return ( return (
attributeModel.attribute?.type?._class === core.class.TypeMarkup || attributeModel.attribute?.type?._class === core.class.TypeMarkup ||
attributeModel.attribute?.type?._class === core.class.TypeCollaborativeMarkup attributeModel.attribute?.type?._class === core.class.TypeCollaborativeMarkup ||
attributeModel.attribute?.type?._class === core.class.TypeCollaborativeDoc
) )
} }

View File

@ -118,7 +118,7 @@
<div class="label mr-1"> <div class="label mr-1">
<Label label={documents.string.CoAuthors} /> <Label label={documents.string.CoAuthors} />
</div> </div>
{reviewers?.length} {coAuthors?.length}
</div> </div>
<div class="flex-col mt-4"> <div class="flex-col mt-4">
<UserBoxItems <UserBoxItems

View File

@ -0,0 +1,21 @@
<!--
// Copyright © 2024 Hardcore Engineering Inc.
//
// Licensed under the Eclipse Public License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License. You may
// obtain a copy of the License at https://www.eclipse.org/legal/epl-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//
// See the License for the specific language governing permissions and
// limitations under the License.
-->
<script lang="ts">
import { CollaborativeDoc } from '@hcengineering/core'
export let value: CollaborativeDoc
</script>
<span>{value}</span>

View File

@ -28,6 +28,7 @@ import ClassPresenter from './components/ClassPresenter.svelte'
import ClassRefPresenter from './components/ClassRefPresenter.svelte' import ClassRefPresenter from './components/ClassRefPresenter.svelte'
import CollaborativeDocEditor from './components/CollaborativeDocEditor.svelte' import CollaborativeDocEditor from './components/CollaborativeDocEditor.svelte'
import CollaborativeHTMLEditor from './components/CollaborativeHTMLEditor.svelte' import CollaborativeHTMLEditor from './components/CollaborativeHTMLEditor.svelte'
import CollaborativeDocActivityPresenter from './components/CollaborativeDocActivityPresenter.svelte'
import ColorsPopup from './components/ColorsPopup.svelte' import ColorsPopup from './components/ColorsPopup.svelte'
import DateEditor from './components/DateEditor.svelte' import DateEditor from './components/DateEditor.svelte'
import DatePresenter from './components/DatePresenter.svelte' import DatePresenter from './components/DatePresenter.svelte'
@ -275,6 +276,7 @@ export default async (): Promise<Resources> => ({
HTMLEditor, HTMLEditor,
CollaborativeDocEditor, CollaborativeDocEditor,
CollaborativeHTMLEditor, CollaborativeHTMLEditor,
CollaborativeDocActivityPresenter,
ListView, ListView,
GrowPresenter, GrowPresenter,
DividerPresenter, DividerPresenter,

View File

@ -15,11 +15,12 @@
import core, { Doc, Tx, TxCUD, TxCollectionCUD, TxCreateDoc, TxUpdateDoc, TxProcessor } from '@hcengineering/core' import core, { Doc, Tx, TxCUD, TxCollectionCUD, TxCreateDoc, TxUpdateDoc, TxProcessor } from '@hcengineering/core'
import request, { Request, RequestStatus } from '@hcengineering/request' import request, { Request, RequestStatus } from '@hcengineering/request'
import { getResource, translate } from '@hcengineering/platform'
import type { TriggerControl } from '@hcengineering/server-core' import type { TriggerControl } from '@hcengineering/server-core'
import { pushDocUpdateMessages } from '@hcengineering/server-activity-resources' import { pushDocUpdateMessages } from '@hcengineering/server-activity-resources'
import { DocUpdateMessage } from '@hcengineering/activity' import { DocUpdateMessage } from '@hcengineering/activity'
import notification from '@hcengineering/notification' import notification from '@hcengineering/notification'
import { getNotificationTxes, getCollaborators } from '@hcengineering/server-notification-resources' import { getNotificationTxes, getCollaborators, getTextPresenter } from '@hcengineering/server-notification-resources'
/** /**
* @public * @public
@ -158,8 +159,31 @@ async function getRequestNotificationTx (tx: TxCollectionCUD<Doc, Request>, cont
return res return res
} }
/**
* @public
*/
export async function requestTextPresenter (doc: Doc, control: TriggerControl): Promise<string> {
const request = doc as Request
let title = await translate(control.hierarchy.getClass(request._class).label, {})
const attachedDocTextPresenter = getTextPresenter(request.attachedToClass, control.hierarchy)
if (attachedDocTextPresenter !== undefined) {
const getTitle = await getResource(attachedDocTextPresenter.presenter)
const attachedDoc = (await control.findAll(request.attachedToClass, { _id: request.attachedTo }, { limit: 1 }))[0]
if (attachedDoc !== undefined) {
title = `${title}${await getTitle(attachedDoc, control)}`
}
}
return title
}
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
export default async () => ({ export default async () => ({
function: {
RequestTextPresenter: requestTextPresenter
},
trigger: { trigger: {
OnRequest OnRequest
} }

View File

@ -39,6 +39,7 @@
}, },
"dependencies": { "dependencies": {
"@hcengineering/platform": "^0.6.11", "@hcengineering/platform": "^0.6.11",
"@hcengineering/server-core": "^0.6.1" "@hcengineering/server-core": "^0.6.1",
"@hcengineering/server-notification": "^0.6.1"
} }
} }

View File

@ -15,6 +15,7 @@
import { Plugin, plugin, Resource } from '@hcengineering/platform' import { Plugin, plugin, Resource } from '@hcengineering/platform'
import type { TriggerFunc } from '@hcengineering/server-core' import type { TriggerFunc } from '@hcengineering/server-core'
import { Presenter } from '@hcengineering/server-notification'
/** /**
* @public * @public
@ -25,6 +26,9 @@ export const serverRequestId = 'server-request' as Plugin
* @public * @public
*/ */
export default plugin(serverRequestId, { export default plugin(serverRequestId, {
function: {
RequestTextPresenter: '' as Resource<Presenter>
},
trigger: { trigger: {
OnRequest: '' as Resource<TriggerFunc> OnRequest: '' as Resource<TriggerFunc>
} }