mirror of
https://github.com/hcengineering/platform.git
synced 2025-06-07 00:09:34 +00:00
[UBER-824] Mention notification fix (#3658)
Signed-off-by: Oleg Solodkov <oleg.solodkov@xored.com>
This commit is contained in:
parent
2422baa108
commit
3d2e2a762a
@ -467,6 +467,10 @@ export function createModel (builder: Builder, options = { addApplication: true
|
|||||||
presenter: chunter.component.CommentsPresenter
|
presenter: chunter.component.CommentsPresenter
|
||||||
})
|
})
|
||||||
|
|
||||||
|
builder.mixin(chunter.class.Comment, core.class.Class, view.mixin.ObjectPanel, {
|
||||||
|
component: chunter.component.CommentPanel
|
||||||
|
})
|
||||||
|
|
||||||
builder.createDoc(
|
builder.createDoc(
|
||||||
activity.class.TxViewlet,
|
activity.class.TxViewlet,
|
||||||
core.space.Model,
|
core.space.Model,
|
||||||
|
95
plugins/chunter-resources/src/components/CommentPanel.svelte
Normal file
95
plugins/chunter-resources/src/components/CommentPanel.svelte
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
<!--
|
||||||
|
// Copyright © 2023 Anticrm Platform Contributors.
|
||||||
|
//
|
||||||
|
// 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 contact, { PersonAccount } from '@hcengineering/contact'
|
||||||
|
import chunter, { Backlink, Comment } from '@hcengineering/chunter'
|
||||||
|
import view, { ObjectPanel } from '@hcengineering/view'
|
||||||
|
import { createQuery, getClient } from '@hcengineering/presentation'
|
||||||
|
import { AnyComponent, Component, Loading } from '@hcengineering/ui'
|
||||||
|
import { Class, Doc, Ref, getCurrentAccount } from '@hcengineering/core'
|
||||||
|
|
||||||
|
export let _id: Ref<Comment> | undefined
|
||||||
|
export let embedded: boolean = true
|
||||||
|
|
||||||
|
const client = getClient()
|
||||||
|
const hierarchy = client.getHierarchy()
|
||||||
|
|
||||||
|
let comment: Comment | undefined
|
||||||
|
const commentQuery = createQuery()
|
||||||
|
let loadingComment = true
|
||||||
|
|
||||||
|
$: if (_id !== undefined) {
|
||||||
|
commentQuery.query(chunter.class.Comment, { _id }, (res) => {
|
||||||
|
;[comment] = res
|
||||||
|
loadingComment = false
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
commentQuery.unsubscribe()
|
||||||
|
loadingComment = false
|
||||||
|
}
|
||||||
|
|
||||||
|
let backlinks: Backlink[] = []
|
||||||
|
const backlinksQuery = createQuery()
|
||||||
|
let loadingBacklinks = true
|
||||||
|
|
||||||
|
const mePerson = (getCurrentAccount() as PersonAccount).person
|
||||||
|
let isMeMentioned = false
|
||||||
|
|
||||||
|
$: if (_id !== undefined) {
|
||||||
|
backlinksQuery.query(chunter.class.Backlink, { attachedDocId: _id }, (res) => {
|
||||||
|
backlinks = res
|
||||||
|
for (const backlink of backlinks) {
|
||||||
|
if (hierarchy.isDerived(backlink.attachedToClass, contact.class.Person) && mePerson === backlink.attachedTo) {
|
||||||
|
isMeMentioned = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
loadingBacklinks = false
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
backlinksQuery.unsubscribe()
|
||||||
|
loadingBacklinks = false
|
||||||
|
}
|
||||||
|
|
||||||
|
let attachedDocId: Ref<Doc> | undefined
|
||||||
|
let attachedDocClass: Ref<Class<Doc>> | undefined
|
||||||
|
|
||||||
|
$: loading = loadingComment || loadingBacklinks
|
||||||
|
|
||||||
|
let component: AnyComponent
|
||||||
|
$: getComponent(loading, comment)
|
||||||
|
|
||||||
|
async function getComponent (loading: boolean, comment?: Comment): Promise<void> {
|
||||||
|
if (comment == null || loading) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
let panelComponent: ObjectPanel | undefined
|
||||||
|
if (isMeMentioned) {
|
||||||
|
panelComponent = hierarchy.classHierarchyMixin(comment.attachedToClass, view.mixin.ObjectPanel)
|
||||||
|
}
|
||||||
|
|
||||||
|
component = panelComponent?.component ?? view.component.EditDoc
|
||||||
|
|
||||||
|
attachedDocId = comment.attachedTo
|
||||||
|
attachedDocClass = comment.attachedToClass
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{#if loading}
|
||||||
|
<Loading />
|
||||||
|
{:else if component && attachedDocId && attachedDocClass}
|
||||||
|
<Component is={component} props={{ _id: attachedDocId, _class: attachedDocClass, embedded }} on:close />
|
||||||
|
{/if}
|
@ -38,6 +38,7 @@ import CommentInput from './components/CommentInput.svelte'
|
|||||||
import CommentPopup from './components/CommentPopup.svelte'
|
import CommentPopup from './components/CommentPopup.svelte'
|
||||||
import CommentPresenter from './components/CommentPresenter.svelte'
|
import CommentPresenter from './components/CommentPresenter.svelte'
|
||||||
import CommentsPresenter from './components/CommentsPresenter.svelte'
|
import CommentsPresenter from './components/CommentsPresenter.svelte'
|
||||||
|
import CommentPanel from './components/CommentPanel.svelte'
|
||||||
import ConvertDmToPrivateChannelModal from './components/ConvertDmToPrivateChannel.svelte'
|
import ConvertDmToPrivateChannelModal from './components/ConvertDmToPrivateChannel.svelte'
|
||||||
import CreateChannel from './components/CreateChannel.svelte'
|
import CreateChannel from './components/CreateChannel.svelte'
|
||||||
import CreateDirectMessage from './components/CreateDirectMessage.svelte'
|
import CreateDirectMessage from './components/CreateDirectMessage.svelte'
|
||||||
@ -292,7 +293,8 @@ export default async (): Promise<Resources> => ({
|
|||||||
EditChannel,
|
EditChannel,
|
||||||
Threads,
|
Threads,
|
||||||
ThreadView,
|
ThreadView,
|
||||||
SavedMessages
|
SavedMessages,
|
||||||
|
CommentPanel
|
||||||
},
|
},
|
||||||
function: {
|
function: {
|
||||||
GetDmName: getDmName,
|
GetDmName: getDmName,
|
||||||
|
@ -31,7 +31,8 @@ export default mergeIds(chunterId, chunter, {
|
|||||||
EditChannel: '' as AnyComponent,
|
EditChannel: '' as AnyComponent,
|
||||||
ChannelPreview: '' as AnyComponent,
|
ChannelPreview: '' as AnyComponent,
|
||||||
MessagePreview: '' as AnyComponent,
|
MessagePreview: '' as AnyComponent,
|
||||||
DirectMessageInput: '' as AnyComponent
|
DirectMessageInput: '' as AnyComponent,
|
||||||
|
CommentPanel: '' as AnyComponent
|
||||||
},
|
},
|
||||||
function: {
|
function: {
|
||||||
GetDmName: '' as Resource<(client: Client, space: Space) => Promise<string>>
|
GetDmName: '' as Resource<(client: Client, space: Space) => Promise<string>>
|
||||||
|
Loading…
Reference in New Issue
Block a user