diff --git a/models/activity/src/index.ts b/models/activity/src/index.ts index d9a0149cbd..4d967097f8 100644 --- a/models/activity/src/index.ts +++ b/models/activity/src/index.ts @@ -201,11 +201,8 @@ export class TDocUpdateMessageViewlet extends TDoc implements DocUpdateMessageVi @Model(activity.class.ActivityExtension, core.class.Doc, DOMAIN_MODEL) export class TActivityExtension extends TDoc implements ActivityExtension { - @Prop(TypeRef(core.class.Class), core.string.Class) - @Index(IndexKind.Indexed) - ofClass!: Ref> - - components!: Record + ofClass!: Ref> + components!: Record }> } @Model(activity.class.ActivityMessagesFilter, core.class.Doc, DOMAIN_MODEL) diff --git a/models/analytics-collector/src/index.ts b/models/analytics-collector/src/index.ts index aab49c3d8a..e8e0dc38cd 100644 --- a/models/analytics-collector/src/index.ts +++ b/models/analytics-collector/src/index.ts @@ -85,7 +85,7 @@ export function createModel (builder: Builder): void { builder.createDoc(activity.class.ActivityExtension, core.space.Model, { ofClass: analyticsCollector.class.OnboardingChannel, - components: { input: chunter.component.ChatMessageInput } + components: { input: { component: chunter.component.ChatMessageInput } } }) builder.createDoc>( diff --git a/models/chunter/src/index.ts b/models/chunter/src/index.ts index d714ebcee3..2f3c441015 100644 --- a/models/chunter/src/index.ts +++ b/models/chunter/src/index.ts @@ -273,27 +273,27 @@ export function createModel (builder: Builder): void { builder.createDoc(activity.class.ActivityExtension, core.space.Model, { ofClass: chunter.class.Channel, - components: { input: chunter.component.ChatMessageInput } + components: { input: { component: chunter.component.ChatMessageInput } } }) builder.createDoc(activity.class.ActivityExtension, core.space.Model, { ofClass: chunter.class.DirectMessage, - components: { input: chunter.component.ChatMessageInput } + components: { input: { component: chunter.component.ChatMessageInput } } }) builder.createDoc(activity.class.ActivityExtension, core.space.Model, { ofClass: activity.class.DocUpdateMessage, - components: { input: chunter.component.ChatMessageInput } + components: { input: { component: chunter.component.ChatMessageInput } } }) builder.createDoc(activity.class.ActivityExtension, core.space.Model, { ofClass: chunter.class.ChatMessage, - components: { input: chunter.component.ChatMessageInput } + components: { input: { component: chunter.component.ChatMessageInput } } }) builder.createDoc(activity.class.ActivityExtension, core.space.Model, { ofClass: activity.class.ActivityReference, - components: { input: chunter.component.ChatMessageInput } + components: { input: { component: chunter.component.ChatMessageInput } } }) // Indexing diff --git a/models/contact/src/index.ts b/models/contact/src/index.ts index 08e06f05d8..e7a597a31a 100644 --- a/models/contact/src/index.ts +++ b/models/contact/src/index.ts @@ -263,22 +263,22 @@ export function createModel (builder: Builder): void { builder.createDoc(activity.class.ActivityExtension, core.space.Model, { ofClass: contact.class.Contact, - components: { input: chunter.component.ChatMessageInput } + components: { input: { component: chunter.component.ChatMessageInput } } }) builder.createDoc(activity.class.ActivityExtension, core.space.Model, { ofClass: contact.class.Person, - components: { input: chunter.component.ChatMessageInput } + components: { input: { component: chunter.component.ChatMessageInput } } }) builder.createDoc(activity.class.ActivityExtension, core.space.Model, { ofClass: contact.class.Organization, - components: { input: chunter.component.ChatMessageInput } + components: { input: { component: chunter.component.ChatMessageInput } } }) builder.createDoc(activity.class.ActivityExtension, core.space.Model, { ofClass: contact.class.Member, - components: { input: chunter.component.ChatMessageInput } + components: { input: { component: chunter.component.ChatMessageInput } } }) builder.mixin(contact.mixin.Employee, core.class.Class, view.mixin.ObjectFactory, { diff --git a/models/controlled-documents/src/index.ts b/models/controlled-documents/src/index.ts index 9e14cf94f9..20231c6ce5 100644 --- a/models/controlled-documents/src/index.ts +++ b/models/controlled-documents/src/index.ts @@ -514,7 +514,7 @@ export function createModel (builder: Builder): void { builder.createDoc(activity.class.ActivityExtension, core.space.Model, { ofClass: documents.class.DocumentCategory, - components: { input: chunter.component.ChatMessageInput } + components: { input: { component: chunter.component.ChatMessageInput } } }) builder.mixin(documents.class.DocumentCategory, core.class.Class, view.mixin.ObjectPresenter, { @@ -768,7 +768,7 @@ export function defineNotifications (builder: Builder): void { builder.createDoc(activity.class.ActivityExtension, core.space.Model, { ofClass: documents.class.DocumentComment, - components: { input: chunter.component.ChatMessageInput } + components: { input: { component: chunter.component.ChatMessageInput } } }) builder.mixin(documents.class.ControlledDocument, core.class.Class, notification.mixin.ClassCollaborators, { diff --git a/models/document/src/index.ts b/models/document/src/index.ts index e06e6dbbc3..cacdf4c235 100644 --- a/models/document/src/index.ts +++ b/models/document/src/index.ts @@ -492,7 +492,7 @@ function defineDocument (builder: Builder): void { builder.createDoc(activity.class.ActivityExtension, core.space.Model, { ofClass: document.class.Document, - components: { input: chunter.component.ChatMessageInput } + components: { input: { component: chunter.component.ChatMessageInput } } }) // Search diff --git a/models/drive/src/index.ts b/models/drive/src/index.ts index c262ce8005..6b4b762f38 100644 --- a/models/drive/src/index.ts +++ b/models/drive/src/index.ts @@ -595,7 +595,7 @@ function defineFile (builder: Builder): void { builder.createDoc(activity.class.ActivityExtension, core.space.Model, { ofClass: drive.class.File, - components: { input: chunter.component.ChatMessageInput } + components: { input: { component: chunter.component.ChatMessageInput } } }) // Search diff --git a/models/inventory/src/index.ts b/models/inventory/src/index.ts index a34655fe03..f5440ad734 100644 --- a/models/inventory/src/index.ts +++ b/models/inventory/src/index.ts @@ -85,17 +85,17 @@ export function createModel (builder: Builder): void { builder.createDoc(activity.class.ActivityExtension, core.space.Model, { ofClass: inventory.class.Product, - components: { input: chunter.component.ChatMessageInput } + components: { input: { component: chunter.component.ChatMessageInput } } }) builder.createDoc(activity.class.ActivityExtension, core.space.Model, { ofClass: inventory.class.Category, - components: { input: chunter.component.ChatMessageInput } + components: { input: { component: chunter.component.ChatMessageInput } } }) builder.createDoc(activity.class.ActivityExtension, core.space.Model, { ofClass: inventory.class.Variant, - components: { input: chunter.component.ChatMessageInput } + components: { input: { component: chunter.component.ChatMessageInput } } }) builder.mixin(inventory.class.Category, core.class.Class, view.mixin.ObjectPresenter, { diff --git a/models/lead/src/index.ts b/models/lead/src/index.ts index 2bb5bad1a0..cc8e668fa2 100644 --- a/models/lead/src/index.ts +++ b/models/lead/src/index.ts @@ -51,12 +51,12 @@ export function createModel (builder: Builder): void { builder.createDoc(activity.class.ActivityExtension, core.space.Model, { ofClass: lead.class.Lead, - components: { input: chunter.component.ChatMessageInput } + components: { input: { component: chunter.component.ChatMessageInput } } }) builder.createDoc(activity.class.ActivityExtension, core.space.Model, { ofClass: lead.class.Funnel, - components: { input: chunter.component.ChatMessageInput } + components: { input: { component: chunter.component.ChatMessageInput } } }) builder.mixin(lead.class.Funnel, core.class.Class, workbench.mixin.SpaceView, { diff --git a/models/love/src/index.ts b/models/love/src/index.ts index fd82f43bf2..eb5f9b04be 100644 --- a/models/love/src/index.ts +++ b/models/love/src/index.ts @@ -21,7 +21,8 @@ import { IndexKind, type Ref, type CollaborativeDoc, - Doc + type Doc, + type Timestamp } from '@hcengineering/core' import { type DevicesPreference, @@ -38,7 +39,8 @@ import { type RoomInfo, type RoomType, type RoomLanguage, - type MeetingMinutes + type MeetingMinutes, + type MeetingStatus } from '@hcengineering/love' import { type Builder, @@ -53,7 +55,9 @@ import { TypeCollaborativeDoc, TypeRef, TypeString, - UX + TypeTimestamp, + UX, + TypeAny } from '@hcengineering/model' import calendar, { TEvent } from '@hcengineering/model-calendar' import core, { TAttachedDoc, TDoc } from '@hcengineering/model-core' @@ -108,6 +112,9 @@ export class TRoom extends TDoc implements Room { @Prop(PropCollection(love.class.MeetingMinutes), love.string.MeetingMinutes) meetings?: number + + @Prop(PropCollection(chunter.class.ChatMessage), activity.string.Messages) + messages?: number } @Model(love.class.Office, love.class.Room) @@ -187,7 +194,7 @@ export class TMeeting extends TEvent implements Meeting { @Model(love.class.MeetingMinutes, core.class.Doc, DOMAIN_MEETING_MINUTES) @UX(love.string.MeetingMinutes, love.icon.Cam, undefined, undefined, love.string.MeetingsMinutes) export class TMeetingMinutes extends TAttachedDoc implements MeetingMinutes { - @Prop(TypeRef(core.class.Doc), love.string.Room, {editor: love.component.MeetingMinutesDocEditor }) + @Prop(TypeRef(core.class.Doc), love.string.Room, { editor: love.component.MeetingMinutesDocEditor }) @Index(IndexKind.Indexed) @ReadOnly() declare attachedTo: Ref @@ -203,6 +210,12 @@ export class TMeetingMinutes extends TAttachedDoc implements MeetingMinutes { @Index(IndexKind.FullText) description!: CollaborativeDoc + @Prop(TypeAny(love.component.MeetingMinutesStatusPresenter, love.string.Status), love.string.Status, { + editor: love.component.MeetingMinutesStatusPresenter + }) + @ReadOnly() + status!: MeetingStatus + @Prop(Collection(attachment.class.Attachment), attachment.string.Attachments, { shortLabel: attachment.string.Files }) attachments?: number @@ -211,6 +224,15 @@ export class TMeetingMinutes extends TAttachedDoc implements MeetingMinutes { @Prop(PropCollection(chunter.class.ChatMessage), activity.string.Messages) messages?: number + + @Prop(TypeTimestamp(), love.string.MeetingStart, { editor: view.component.TimestampPresenter }) + @ReadOnly() + @Index(IndexKind.IndexedDsc) + declare createdOn: Timestamp + + @Prop(TypeTimestamp(), love.string.MeetingEnd) + @ReadOnly() + meetingEnd?: Timestamp } export default love @@ -424,17 +446,17 @@ export function createModel (builder: Builder): void { builder.createDoc(activity.class.ActivityExtension, core.space.Model, { ofClass: love.class.Room, - components: { input: chunter.component.ChatMessageInput } + components: { input: { component: chunter.component.ChatMessageInput, props: { collection: 'messages' } } } }) builder.createDoc(activity.class.ActivityExtension, core.space.Model, { ofClass: love.class.Office, - components: { input: chunter.component.ChatMessageInput } + components: { input: { component: chunter.component.ChatMessageInput, props: { collection: 'messages' } } } }) builder.createDoc(activity.class.ActivityExtension, core.space.Model, { ofClass: love.class.MeetingMinutes, - components: { input: chunter.component.ChatMessageInput } + components: { input: { component: chunter.component.ChatMessageInput, props: { collection: 'messages' } } } }) builder.mixin(love.class.MeetingMinutes, core.class.Class, activity.mixin.ActivityDoc, {}) @@ -477,10 +499,11 @@ export function createModel (builder: Builder): void { descriptor: view.viewlet.Table, config: [ '', + { key: 'status', presenter: love.component.MeetingMinutesStatusPresenter, label: love.string.Status }, + 'createdOn', + 'meetingEnd', { key: 'messages', displayProps: { key: 'messages', suffix: true } }, - { key: 'transcription', displayProps: { key: 'transcription', suffix: true } }, - 'modifiedOn', - 'modifiedBy' + { key: 'transcription', displayProps: { key: 'transcription', suffix: true } } ], configOptions: { hiddenKeys: ['description'], diff --git a/models/love/src/migration.ts b/models/love/src/migration.ts index 779aa01052..916c9b96dc 100644 --- a/models/love/src/migration.ts +++ b/models/love/src/migration.ts @@ -16,7 +16,16 @@ import contact from '@hcengineering/contact' import { type Space, TxOperations, type Ref, makeCollaborativeDoc } from '@hcengineering/core' import drive from '@hcengineering/drive' -import { RoomAccess, RoomType, createDefaultRooms, isOffice, loveId, type Floor, type Room } from '@hcengineering/love' +import { + MeetingStatus, + RoomAccess, + RoomType, + createDefaultRooms, + isOffice, + loveId, + type Floor, + type Room +} from '@hcengineering/love' import { createDefaultSpace, migrateSpace, @@ -142,6 +151,16 @@ export const loveOperation: MigrateOperation = { } } } + }, + { + state: 'default-meeting-minutes-status', + func: async (client) => { + await client.update( + DOMAIN_MEETING_MINUTES, + { status: { $exists: false } }, + { status: MeetingStatus.Finished } + ) + } } ]) }, diff --git a/models/products/src/index.ts b/models/products/src/index.ts index 92946b8c6f..941c871b0e 100644 --- a/models/products/src/index.ts +++ b/models/products/src/index.ts @@ -159,7 +159,7 @@ function defineProduct (builder: Builder): void { builder.createDoc(activity.class.ActivityExtension, core.space.Model, { ofClass: products.class.Product, - components: { input: chunter.component.ChatMessageInput } + components: { input: { component: chunter.component.ChatMessageInput } } }) builder.mixin(products.class.Product, core.class.Class, view.mixin.ObjectEditor, { @@ -299,7 +299,7 @@ function defineProductVersion (builder: Builder): void { builder.createDoc(activity.class.ActivityExtension, core.space.Model, { ofClass: products.class.ProductVersion, - components: { input: chunter.component.ChatMessageInput } + components: { input: { component: chunter.component.ChatMessageInput } } }) builder.mixin(products.class.ProductVersion, core.class.Class, view.mixin.ObjectEditor, { diff --git a/models/recruit/src/index.ts b/models/recruit/src/index.ts index fe4b43e16b..6b8e3f5dfd 100644 --- a/models/recruit/src/index.ts +++ b/models/recruit/src/index.ts @@ -56,17 +56,17 @@ export function createModel (builder: Builder): void { builder.createDoc(activity.class.ActivityExtension, core.space.Model, { ofClass: recruit.class.Vacancy, - components: { input: chunter.component.ChatMessageInput } + components: { input: { component: chunter.component.ChatMessageInput } } }) builder.createDoc(activity.class.ActivityExtension, core.space.Model, { ofClass: recruit.class.Applicant, - components: { input: chunter.component.ChatMessageInput } + components: { input: { component: chunter.component.ChatMessageInput } } }) builder.createDoc(activity.class.ActivityExtension, core.space.Model, { ofClass: recruit.class.Review, - components: { input: chunter.component.ChatMessageInput } + components: { input: { component: chunter.component.ChatMessageInput } } }) builder.mixin(recruit.class.Vacancy, core.class.Class, workbench.mixin.SpaceView, { diff --git a/models/survey/src/index.ts b/models/survey/src/index.ts index 4db5607ef7..1b9608e77e 100644 --- a/models/survey/src/index.ts +++ b/models/survey/src/index.ts @@ -91,7 +91,7 @@ export function createModel (builder: Builder): void { builder.createDoc(activity.class.ActivityExtension, core.space.Model, { ofClass: survey.class.Survey, - components: { input: chunter.component.ChatMessageInput } + components: { input: { component: chunter.component.ChatMessageInput } } }) builder.createDoc( diff --git a/models/test-management/src/index.ts b/models/test-management/src/index.ts index 6b3a4dac7c..136ec02521 100644 --- a/models/test-management/src/index.ts +++ b/models/test-management/src/index.ts @@ -143,7 +143,7 @@ export function createModel (builder: Builder): void { builder.createDoc(activity.class.ActivityExtension, core.space.Model, { ofClass: testManagement.class.TestProject, - components: { input: chunter.component.ChatMessageInput } + components: { input: { component: chunter.component.ChatMessageInput } } }) defineTestSuite(builder) @@ -218,7 +218,7 @@ function defineTestSuite (builder: Builder): void { builder.createDoc(activity.class.ActivityExtension, core.space.Model, { ofClass: testManagement.class.TestSuite, - components: { input: chunter.component.ChatMessageInput } + components: { input: { component: chunter.component.ChatMessageInput } } }) builder.mixin(testManagement.class.TestSuite, core.class.Class, view.mixin.ObjectEditor, { @@ -283,7 +283,7 @@ function defineTestCase (builder: Builder): void { builder.createDoc(activity.class.ActivityExtension, core.space.Model, { ofClass: testManagement.class.TestCase, - components: { input: chunter.component.ChatMessageInput } + components: { input: { component: chunter.component.ChatMessageInput } } }) builder.mixin(testManagement.class.TestCase, core.class.Class, view.mixin.ObjectEditor, { @@ -388,7 +388,7 @@ function defineTestRun (builder: Builder): void { builder.createDoc(activity.class.ActivityExtension, core.space.Model, { ofClass: testManagement.class.TestRun, - components: { input: chunter.component.ChatMessageInput } + components: { input: { component: chunter.component.ChatMessageInput } } }) builder.mixin(testManagement.class.TestRun, core.class.Class, view.mixin.ObjectEditor, { diff --git a/models/tracker/src/index.ts b/models/tracker/src/index.ts index ed2b36de4f..df061fcb3e 100644 --- a/models/tracker/src/index.ts +++ b/models/tracker/src/index.ts @@ -461,22 +461,22 @@ export function createModel (builder: Builder): void { builder.createDoc(activity.class.ActivityExtension, core.space.Model, { ofClass: tracker.class.Issue, - components: { input: chunter.component.ChatMessageInput } + components: { input: { component: chunter.component.ChatMessageInput } } }) builder.createDoc(activity.class.ActivityExtension, core.space.Model, { ofClass: tracker.class.Milestone, - components: { input: chunter.component.ChatMessageInput } + components: { input: { component: chunter.component.ChatMessageInput } } }) builder.createDoc(activity.class.ActivityExtension, core.space.Model, { ofClass: tracker.class.Component, - components: { input: chunter.component.ChatMessageInput } + components: { input: { component: chunter.component.ChatMessageInput } } }) builder.createDoc(activity.class.ActivityExtension, core.space.Model, { ofClass: tracker.class.IssueTemplate, - components: { input: chunter.component.ChatMessageInput } + components: { input: { component: chunter.component.ChatMessageInput } } }) defineViewlets(builder) diff --git a/plugins/activity-resources/src/components/ActivityExtension.svelte b/plugins/activity-resources/src/components/ActivityExtension.svelte index d79034a5ef..908bd5a16d 100644 --- a/plugins/activity-resources/src/components/ActivityExtension.svelte +++ b/plugins/activity-resources/src/components/ActivityExtension.svelte @@ -24,5 +24,11 @@ {#if extension} - + {/if} diff --git a/plugins/activity-resources/src/components/doc-update-message/attributes/SetAttributesPresenter.svelte b/plugins/activity-resources/src/components/doc-update-message/attributes/SetAttributesPresenter.svelte index e50a586b7a..222ec50551 100644 --- a/plugins/activity-resources/src/components/doc-update-message/attributes/SetAttributesPresenter.svelte +++ b/plugins/activity-resources/src/components/doc-update-message/attributes/SetAttributesPresenter.svelte @@ -30,7 +30,7 @@ $: attrViewletConfig = viewlet?.config?.[attributeModel.key] $: attributeIcon = attrViewletConfig?.icon ?? attributeModel.icon ?? IconEdit - $: isUnset = values.length > 0 && !values.some((value) => value !== null && value !== '') + $: isUnset = values.length > 0 && !values.some((value) => value != null && value !== '') $: isTextType = getIsTextType(attributeModel) @@ -42,7 +42,7 @@ {#if isUnset} -
+
- {#if (object._id !== $myInfo?.room && $myInfo !== undefined)} - - {/if} + {#if object._id !== $myOffice?._id && ($currentRoom?._id !== object._id || connecting)} + + {/if}
diff --git a/plugins/love-resources/src/components/Main.svelte b/plugins/love-resources/src/components/Main.svelte index e1223d1e76..9130ae48fa 100644 --- a/plugins/love-resources/src/components/Main.svelte +++ b/plugins/love-resources/src/components/Main.svelte @@ -13,7 +13,7 @@ // limitations under the License. -->
- +
diff --git a/plugins/love-resources/src/components/MeetingMinutesDocEditor.svelte b/plugins/love-resources/src/components/MeetingMinutesDocEditor.svelte index fee8bab934..5dfcca173f 100644 --- a/plugins/love-resources/src/components/MeetingMinutesDocEditor.svelte +++ b/plugins/love-resources/src/components/MeetingMinutesDocEditor.svelte @@ -17,7 +17,14 @@ import { ObjectPresenter } from '@hcengineering/view-resources' export let object: MeetingMinutes - - + + + diff --git a/plugins/love-resources/src/components/MeetingMinutesSection.svelte b/plugins/love-resources/src/components/MeetingMinutesSection.svelte index 3db2542a04..a9983fa4a3 100644 --- a/plugins/love-resources/src/components/MeetingMinutesSection.svelte +++ b/plugins/love-resources/src/components/MeetingMinutesSection.svelte @@ -15,22 +15,50 @@
+ +
+ +
+
+ {#if meetings > 0} + + +{#if data} + + + +{/if} diff --git a/plugins/love-resources/src/components/PanelControlBar.svelte b/plugins/love-resources/src/components/PanelControlBar.svelte index 4f5ec01d1d..2ba53ebbf1 100644 --- a/plugins/love-resources/src/components/PanelControlBar.svelte +++ b/plugins/love-resources/src/components/PanelControlBar.svelte @@ -27,10 +27,10 @@ return $isConnected } - + {#if $currentRoom && showControlBar($currentRoom, $location, $myOffice)} -
- +
+
{/if} diff --git a/plugins/love-resources/src/components/RoomPopup.svelte b/plugins/love-resources/src/components/RoomPopup.svelte index 5741408c58..4b0b7f85b3 100644 --- a/plugins/love-resources/src/components/RoomPopup.svelte +++ b/plugins/love-resources/src/components/RoomPopup.svelte @@ -15,7 +15,7 @@