From 2ea4f3f93a8c5f5f7a20a7e2435322170a19d232 Mon Sep 17 00:00:00 2001
From: Andrey Sobolev <haiodo@users.noreply.github.com>
Date: Thu, 25 Aug 2022 10:09:33 +0700
Subject: [PATCH] Fix Event source (#2258)

Signed-off-by: Andrey Sobolev <haiodo@gmail.com>
---
 plugins/calendar-assets/lang/en.json          |  3 +-
 plugins/calendar-assets/lang/ru.json          |  3 +-
 .../src/components/EditEvent.svelte           | 43 +++++++++++++++++--
 plugins/calendar-resources/src/plugin.ts      |  3 +-
 .../src/components/ObjectPresenter.svelte     |  2 +-
 5 files changed, 47 insertions(+), 7 deletions(-)

diff --git a/plugins/calendar-assets/lang/en.json b/plugins/calendar-assets/lang/en.json
index 05d49af98b..0293617706 100644
--- a/plugins/calendar-assets/lang/en.json
+++ b/plugins/calendar-assets/lang/en.json
@@ -36,6 +36,7 @@
     "NoReminders": "No reminders",
     "AllDay": "All day",
     "AndMore": "And {count} more",
-    "CreateEvent": "Create event"
+    "CreateEvent": "Create event",
+    "EventFor": "Event for: "
   }
 }
\ No newline at end of file
diff --git a/plugins/calendar-assets/lang/ru.json b/plugins/calendar-assets/lang/ru.json
index 0ee2472531..347734748e 100644
--- a/plugins/calendar-assets/lang/ru.json
+++ b/plugins/calendar-assets/lang/ru.json
@@ -34,6 +34,7 @@
     "NoReminders": "Нет напоминаний",
     "AllDay": "Весь день",
     "AndMore": "И еще {count}",
-    "CreateEvent": "Создать событие"
+    "CreateEvent": "Создать событие",
+    "EventFor": "Событие для: "
   }
 }
\ No newline at end of file
diff --git a/plugins/calendar-resources/src/components/EditEvent.svelte b/plugins/calendar-resources/src/components/EditEvent.svelte
index 22a5aac686..9156c04ed9 100644
--- a/plugins/calendar-resources/src/components/EditEvent.svelte
+++ b/plugins/calendar-resources/src/components/EditEvent.svelte
@@ -14,13 +14,16 @@
 -->
 <script lang="ts">
   import { Event } from '@anticrm/calendar'
-  import { getClient } from '@anticrm/presentation'
+  import { Doc, WithLookup } from '@anticrm/core'
+  import { createQuery, getClient } from '@anticrm/presentation'
   import { StyledTextBox } from '@anticrm/text-editor'
-  import { StylishEdit } from '@anticrm/ui'
+  import { AnyComponent, Component, Label, StylishEdit } from '@anticrm/ui'
+  import ObjectPresenter from '@anticrm/view-resources/src/components/ObjectPresenter.svelte'
+  import { getObjectPreview } from '@anticrm/view-resources/src/utils'
   import { createEventDispatcher, onMount } from 'svelte'
   import calendar from '../plugin'
 
-  export let object: Event
+  export let object: WithLookup<Event>
 
   const dispatch = createEventDispatcher()
   const client = getClient()
@@ -31,9 +34,43 @@
       ignoreMixins: [calendar.mixin.Reminder]
     })
   })
+
+  const query = createQuery()
+  let doc: Doc | undefined
+
+  $: if (object.attachedTo !== undefined && object.attachedToClass !== undefined) {
+    query.query(object.attachedToClass, { _id: object.attachedTo }, (res) => {
+      doc = res.shift()
+    })
+  }
+
+  let presenter: AnyComponent | undefined
+  async function updatePreviewPresenter (doc?: Doc): Promise<void> {
+    if (doc === undefined) {
+      return
+    }
+    presenter = doc !== undefined ? await getObjectPreview(client, doc._class) : undefined
+  }
+
+  $: updatePreviewPresenter(doc)
 </script>
 
 {#if object !== undefined}
+  {#if object.attachedTo && object.attachedToClass}
+    <div class="mb-4">
+      <div class="flex-row-center p-1">
+        <Label label={calendar.string.EventFor} />
+        <div class="ml-2">
+          <ObjectPresenter _class={object.attachedToClass} objectId={object.attachedTo} value={doc} />
+        </div>
+      </div>
+      {#if presenter !== undefined && doc}
+        <div class="antiPanel p-4">
+          <Component is={presenter} props={{ object: doc }} />
+        </div>
+      {/if}
+    </div>
+  {/if}
   <div class="mb-2">
     <div class="mb-4">
       <StylishEdit
diff --git a/plugins/calendar-resources/src/plugin.ts b/plugins/calendar-resources/src/plugin.ts
index c420aa41ff..87750d5a3e 100644
--- a/plugins/calendar-resources/src/plugin.ts
+++ b/plugins/calendar-resources/src/plugin.ts
@@ -41,6 +41,7 @@ export default mergeIds(calendarId, calendar, {
     NoReminders: '' as IntlString,
     AllDay: '' as IntlString,
     AndMore: '' as IntlString,
-    CreateEvent: '' as IntlString
+    CreateEvent: '' as IntlString,
+    EventFor: '' as IntlString
   }
 })
diff --git a/plugins/view-resources/src/components/ObjectPresenter.svelte b/plugins/view-resources/src/components/ObjectPresenter.svelte
index ea13ed641c..225fee5e0b 100644
--- a/plugins/view-resources/src/components/ObjectPresenter.svelte
+++ b/plugins/view-resources/src/components/ObjectPresenter.svelte
@@ -20,7 +20,7 @@
 
   export let objectId: Ref<Doc>
   export let _class: Ref<Class<Doc>>
-  export let value: Doc | undefined
+  export let value: Doc | undefined = undefined
   export let props: Record<string, any> = {}
 
   const client = getClient()