From 128329804bab61b4de1816346b251fd9cd35856c Mon Sep 17 00:00:00 2001
From: Kristina <kristin.fefelova@gmail.com>
Date: Wed, 17 Apr 2024 17:14:47 +0400
Subject: [PATCH] Add some chat/activity fixes (#5387)

---
 models/document/src/index.ts                  |  5 ++++
 .../src/components/DirectIcon.svelte          | 15 ++++++++++--
 .../src/components/DmPresenter.svelte         | 24 ++++++++++++-------
 .../chat/navigator/ChatNavGroup.svelte        |  7 +++---
 .../chat/navigator/ChatNavItem.svelte         |  9 ++++++-
 .../components/DocReferencePresenter.svelte   |  1 -
 6 files changed, 46 insertions(+), 15 deletions(-)

diff --git a/models/document/src/index.ts b/models/document/src/index.ts
index 9b28d92f2d..e0b173166e 100644
--- a/models/document/src/index.ts
+++ b/models/document/src/index.ts
@@ -394,6 +394,11 @@ function defineDocument (builder: Builder): void {
     titleProvider: document.function.DocumentTitleProvider
   })
 
+  builder.createDoc(activity.class.ActivityExtension, core.space.Model, {
+    ofClass: document.class.Document,
+    components: { input: chunter.component.ChatMessageInput }
+  })
+
   // Search
 
   builder.createDoc(
diff --git a/plugins/chunter-resources/src/components/DirectIcon.svelte b/plugins/chunter-resources/src/components/DirectIcon.svelte
index 6bf82da9c3..dd3fd19108 100644
--- a/plugins/chunter-resources/src/components/DirectIcon.svelte
+++ b/plugins/chunter-resources/src/components/DirectIcon.svelte
@@ -35,6 +35,12 @@
     getDmPersons(client, value).then((res) => {
       persons = res
     })
+
+  let avatarSize = size
+
+  $: if (size === 'small') {
+    avatarSize = 'tiny'
+  }
 </script>
 
 {#if persons.length === 0 && value}
@@ -42,7 +48,7 @@
 {/if}
 
 {#if persons.length === 1}
-  <Avatar avatar={persons[0].avatar} {size} name={persons[0].name} />
+  <Avatar avatar={persons[0].avatar} size={avatarSize} name={persons[0].name} />
 {/if}
 
 {#if persons.length > 1 && size === 'medium'}
@@ -64,7 +70,12 @@
 {/if}
 
 {#if persons.length > 1 && size !== 'medium'}
-  <CombineAvatars _class={contact.class.Person} items={persons.map(({ _id }) => _id)} {size} limit={visiblePersons} />
+  <CombineAvatars
+    _class={contact.class.Person}
+    items={persons.map(({ _id }) => _id)}
+    size={avatarSize}
+    limit={visiblePersons}
+  />
 {/if}
 
 <style lang="scss">
diff --git a/plugins/chunter-resources/src/components/DmPresenter.svelte b/plugins/chunter-resources/src/components/DmPresenter.svelte
index a92017ec57..6c36d3e081 100644
--- a/plugins/chunter-resources/src/components/DmPresenter.svelte
+++ b/plugins/chunter-resources/src/components/DmPresenter.svelte
@@ -16,6 +16,9 @@
   import { chunterId, DirectMessage } from '@hcengineering/chunter'
   import { getClient } from '@hcengineering/presentation'
   import { NavLink } from '@hcengineering/view-resources'
+  import { ObjectPresenterType } from '@hcengineering/view'
+  import { tooltip } from '@hcengineering/ui'
+  import { getEmbeddedLabel } from '@hcengineering/platform'
 
   import { getDmName } from '../utils'
   import DirectIcon from './DirectIcon.svelte'
@@ -23,19 +26,24 @@
   export let value: DirectMessage
   export let disabled = false
   export let shouldShowAvatar = true
+  export let type: ObjectPresenterType = 'link'
 
   const client = getClient()
 </script>
 
 {#if value}
   {#await getDmName(client, value) then name}
-    <NavLink app={chunterId} space={value._id} {disabled}>
-      <div class="flex-presenter">
-        {#if shouldShowAvatar}
-          <DirectIcon {value} />
-        {/if}
-        <span class="label">{name}</span>
-      </div>
-    </NavLink>
+    {#if type === 'link'}
+      <NavLink app={chunterId} space={value._id} {disabled}>
+        <div class="flex-presenter">
+          {#if shouldShowAvatar}
+            <DirectIcon {value} />
+          {/if}
+          <span class="label">{name}</span>
+        </div>
+      </NavLink>
+    {:else if type === 'text'}
+      <span class="overflow-label" use:tooltip={{ label: getEmbeddedLabel(name) }}>{name}</span>
+    {/if}
   {/await}
 {/if}
diff --git a/plugins/chunter-resources/src/components/chat/navigator/ChatNavGroup.svelte b/plugins/chunter-resources/src/components/chat/navigator/ChatNavGroup.svelte
index a47565f8fd..6a4bbe1141 100644
--- a/plugins/chunter-resources/src/components/chat/navigator/ChatNavGroup.svelte
+++ b/plugins/chunter-resources/src/components/chat/navigator/ChatNavGroup.svelte
@@ -19,6 +19,7 @@
   import activity from '@hcengineering/activity'
   import { translate } from '@hcengineering/platform'
   import { Action } from '@hcengineering/ui'
+  import { InboxNotificationsClientImpl } from '@hcengineering/notification-resources'
 
   import { ChatGroup, ChatNavGroupModel } from '../types'
   import ChatNavSection from './ChatNavSection.svelte'
@@ -37,6 +38,8 @@
 
   const client = getClient()
   const hierarchy = client.getHierarchy()
+  const inboxClient = InboxNotificationsClientImpl.getClient()
+  const contextByDocStore = inboxClient.contextByDoc
 
   const contextsQuery = createQuery()
   const objectsQueryByClass = new Map<Ref<Class<Doc>>, LiveQuery>()
@@ -71,9 +74,7 @@
   })
 
   $: shouldPushObject =
-    object !== undefined &&
-    getObjectGroup(object) === model.id &&
-    !contexts.some(({ attachedTo }) => attachedTo === object?._id)
+    object !== undefined && getObjectGroup(object) === model.id && !$contextByDocStore.has(object._id)
 
   function loadObjects (contexts: DocNotifyContext[]): void {
     const contextsByClass = groupByArray(contexts, ({ attachedToClass }) => attachedToClass)
diff --git a/plugins/chunter-resources/src/components/chat/navigator/ChatNavItem.svelte b/plugins/chunter-resources/src/components/chat/navigator/ChatNavItem.svelte
index 7ca8338661..71b4df1daf 100644
--- a/plugins/chunter-resources/src/components/chat/navigator/ChatNavItem.svelte
+++ b/plugins/chunter-resources/src/components/chat/navigator/ChatNavItem.svelte
@@ -31,12 +31,14 @@
   import NavItem from './NavItem.svelte'
   import { ChatNavItemModel } from '../types'
   import { openChannel } from '../../../navigation'
+  import chunter from '../../../plugin'
 
   export let context: DocNotifyContext | undefined
   export let item: ChatNavItemModel
   export let isSelected = false
 
   const client = getClient()
+  const hierarchy = client.getHierarchy()
   const dispatch = createEventDispatcher()
   const notificationClient = InboxNotificationsClientImpl.getClient()
 
@@ -49,7 +51,12 @@
     if (context === undefined) {
       return
     }
-    notifications = (res.get(context._id) ?? []).filter((n) => isMentionNotification(n) || isActivityNotification(n))
+
+    notifications = (res.get(context._id) ?? []).filter((n) => {
+      if (isActivityNotification(n)) return true
+
+      return isMentionNotification(n) && hierarchy.isDerived(n.mentionedInClass, chunter.class.ChatMessage)
+    })
   })
 
   $: void getNotificationsCount(context, notifications).then((res) => {
diff --git a/plugins/view-resources/src/components/DocReferencePresenter.svelte b/plugins/view-resources/src/components/DocReferencePresenter.svelte
index c1fdebf96d..15782a14da 100644
--- a/plugins/view-resources/src/components/DocReferencePresenter.svelte
+++ b/plugins/view-resources/src/components/DocReferencePresenter.svelte
@@ -94,7 +94,6 @@
     justify-content: center;
     align-items: center;
     flex-shrink: 0;
-    width: var(--global-min-Size);
     height: var(--global-extra-small-Size);
   }