From 498fe0139571bff63d704e8a86284b6c5e718339 Mon Sep 17 00:00:00 2001 From: Kristina Date: Fri, 2 Feb 2024 13:43:50 +0400 Subject: [PATCH] UBERF-4983: update chat ui (#4483) Signed-off-by: Kristina Fefelova --- models/activity/src/index.ts | 9 +- models/chunter/src/index.ts | 24 +- models/chunter/src/plugin.ts | 3 +- models/notification/src/index.ts | 5 +- models/server-activity/src/migration.ts | 4 +- packages/theme/styles/_layouts.scss | 1 + packages/theme/styles/_lumia-colors.scss | 4 + packages/ui/src/components/Breadcrumb.svelte | 11 +- packages/ui/src/components/Breadcrumbs.svelte | 3 + packages/ui/src/components/ListView.svelte | 25 +- .../ui/src/components/ModeSelector.svelte | 12 +- packages/ui/src/components/Scroller.svelte | 26 +- packages/ui/src/components/TabList.svelte | 20 +- packages/ui/src/components/icons/Right.svelte | 26 ++ packages/ui/src/index.ts | 1 + packages/ui/src/types.ts | 4 + plugins/activity-assets/assets/icons.svg | 18 +- .../src/activityMessagesUtils.ts | 143 ++++--- .../src/components/Activity.svelte | 6 +- .../components/ActivityMessageAction.svelte | 46 +++ .../components/ActivityMessageActions.svelte | 90 +++++ .../src/components/FilterPopup.svelte | 21 +- .../PinMessageAction.svelte | 5 +- .../src/components/SaveMessageAction.svelte | 4 +- .../ActivityMessagePresenter.svelte | 4 +- .../ActivityMessageTemplate.svelte | 121 +++--- .../DocUpdateMessageContent.svelte | 4 +- .../DocUpdateMessagePresenter.svelte | 128 +++--- .../reactions/AddReactionAction.svelte | 7 +- .../ReactionNotificationPresenter.svelte | 9 +- plugins/activity-resources/src/index.ts | 3 +- plugins/activity-resources/src/utils.ts | 14 +- plugins/chunter-assets/lang/en.json | 16 +- plugins/chunter-assets/lang/ru.json | 14 +- .../src/components/Channel.svelte | 33 +- .../src/components/ChannelHeader.svelte | 67 +++- .../src/components/ChannelIcon.svelte | 9 +- .../components/ChannelMessagesFilter.svelte | 44 +++ .../ChannelMessagesSeparator.svelte} | 29 +- .../src/components/ChannelPanel.svelte | 56 +-- .../src/components/ChannelScrollView.svelte} | 279 +++++++------ .../src/components/ChannelView.svelte | 92 ++++- .../src/components/DirectIcon.svelte | 11 +- .../src/components/Header.svelte | 100 ++++- .../src/components/JumpToDateSelector.svelte | 0 .../src/components/PinnedMessagesPopup.svelte | 39 +- .../src/components/Replies.svelte | 86 ++-- .../chat-message/ChatMessagePresenter.svelte | 19 +- .../src/components/chat/Chat.svelte | 115 ++++-- .../src/components/chat/ChatAside.svelte | 48 +++ .../src/components/chat/DocChatPanel.svelte | 139 ++----- .../chat/create/CreateChannel.svelte | 106 +++-- .../chat/navigator/ChatGroupHeader.svelte | 80 ++++ .../chat/navigator/ChatNavGroup.svelte | 143 +++++-- .../chat/navigator/ChatNavGroupItem.svelte | 132 +++++++ .../chat/navigator/ChatNavItem.svelte | 122 ------ .../chat/navigator/ChatNavigator.svelte | 124 +++++- .../chat/navigator/ChatSpecialElement.svelte | 79 ++++ .../components/chat/navigator/NavItem.svelte | 246 ++++++++++++ .../chat/specials/ChannelBrowser.svelte | 4 +- .../chat/specials/ChunterBrowser.svelte | 21 +- .../chat/specials/SavedMessages.svelte | 139 ++++--- .../src/components/chat/types.ts | 18 +- .../src/components/chat/utils.ts | 166 +++----- .../src/components/icons/Lock.svelte | 2 +- .../ThreadNotificationPresenter.svelte | 11 +- .../threads/ThreadParentPresenter.svelte | 2 +- .../src/components/threads/ThreadView.svelte | 183 +++++---- .../{chat/specials => threads}/Threads.svelte | 42 +- plugins/chunter-resources/src/index.ts | 53 ++- plugins/chunter-resources/src/plugin.ts | 8 +- plugins/chunter-resources/src/utils.ts | 178 ++++++++- plugins/chunter/src/index.ts | 13 +- .../src/components/PersonIcon.svelte | 6 +- plugins/contact-resources/src/index.ts | 3 +- .../components/DocNotifyContextCard.svelte | 15 +- .../src/components/NotifyMarker.svelte | 2 +- .../ActivityInboxNotificationPresenter.svelte | 22 +- .../CommonInboxNotificationPresenter.svelte | 2 +- .../src/components/inbox/Inbox.svelte | 80 ++-- .../components/inbox/InboxFlatListView.svelte | 5 +- .../inbox/InboxGroupedListView.svelte | 2 +- .../inbox/InboxNotificationPresenter.svelte | 3 +- .../src/inboxNotificationsClient.ts | 6 +- plugins/notification-resources/src/index.ts | 1 + plugins/notification-resources/src/utils.ts | 370 ++++++++++++------ plugins/view-resources/src/utils.ts | 30 ++ .../src/components/Workbench.svelte | 3 +- plugins/workbench/src/index.ts | 4 + .../activity-resources/src/index.ts | 26 +- 90 files changed, 2964 insertions(+), 1485 deletions(-) create mode 100644 packages/ui/src/components/icons/Right.svelte create mode 100644 plugins/activity-resources/src/components/ActivityMessageAction.svelte create mode 100644 plugins/activity-resources/src/components/ActivityMessageActions.svelte rename plugins/activity-resources/src/components/{activity-message => }/PinMessageAction.svelte (92%) create mode 100644 plugins/chunter-resources/src/components/ChannelMessagesFilter.svelte rename plugins/{activity-resources/src/components/activity-message/ActivityMessagesSeparator.svelte => chunter-resources/src/components/ChannelMessagesSeparator.svelte} (62%) rename plugins/{activity-resources/src/components/ActivityScrolledView.svelte => chunter-resources/src/components/ChannelScrollView.svelte} (54%) rename plugins/{activity-resources => chunter-resources}/src/components/JumpToDateSelector.svelte (100%) rename plugins/{activity-resources => chunter-resources}/src/components/Replies.svelte (66%) create mode 100644 plugins/chunter-resources/src/components/chat/ChatAside.svelte create mode 100644 plugins/chunter-resources/src/components/chat/navigator/ChatGroupHeader.svelte create mode 100644 plugins/chunter-resources/src/components/chat/navigator/ChatNavGroupItem.svelte delete mode 100644 plugins/chunter-resources/src/components/chat/navigator/ChatNavItem.svelte create mode 100644 plugins/chunter-resources/src/components/chat/navigator/ChatSpecialElement.svelte create mode 100644 plugins/chunter-resources/src/components/chat/navigator/NavItem.svelte rename plugins/chunter-resources/src/components/{chat/specials => threads}/Threads.svelte (53%) diff --git a/models/activity/src/index.ts b/models/activity/src/index.ts index 778d177abb..7e1296b4f9 100644 --- a/models/activity/src/index.ts +++ b/models/activity/src/index.ts @@ -137,7 +137,10 @@ export class TDocUpdateMessage extends TActivityMessage implements DocUpdateMess @Index(IndexKind.Indexed) txId!: Ref> - action!: DocUpdateAction + @Prop(TypeString(), core.string.Object) + @Index(IndexKind.Indexed) + action!: DocUpdateAction + updateCollection?: string attributeUpdates?: DocAttributeUpdates } @@ -227,8 +230,10 @@ export class TReaction extends TAttachedDoc implements Reaction { @Model(activity.class.SavedMessage, preference.class.Preference) export class TSavedMessage extends TPreference implements SavedMessage { @Prop(TypeRef(activity.class.ActivityMessage), view.string.Save) + @Index(IndexKind.Indexed) declare attachedTo: Ref } + export function createModel (builder: Builder): void { builder.createModel( TTxViewlet, @@ -247,8 +252,6 @@ export function createModel (builder: Builder): void { TIgnoreActivity ) - builder.mixin(activity.class.DocUpdateMessage, core.class.Class, activity.mixin.ActivityDoc, {}) - builder.mixin(activity.class.DocUpdateMessage, core.class.Class, view.mixin.ObjectPresenter, { presenter: activity.component.DocUpdateMessagePresenter }) diff --git a/models/chunter/src/index.ts b/models/chunter/src/index.ts index 89fe74a3b8..9079933f47 100644 --- a/models/chunter/src/index.ts +++ b/models/chunter/src/index.ts @@ -171,7 +171,6 @@ export class TChatMessage extends TActivityMessage implements ChatMessage { message!: string @Prop(TypeTimestamp(), chunter.string.Edit) - @Index(IndexKind.Indexed) editedOn?: Timestamp @Prop(PropCollection(attachment.class.Attachment), attachment.string.Attachments, { @@ -183,9 +182,11 @@ export class TChatMessage extends TActivityMessage implements ChatMessage { @Model(chunter.class.ThreadMessage, chunter.class.ChatMessage) export class TThreadMessage extends TChatMessage implements ThreadMessage { @Prop(TypeRef(activity.class.ActivityMessage), core.string.AttachedTo) + @Index(IndexKind.Indexed) declare attachedTo: Ref @Prop(TypeRef(activity.class.ActivityMessage), core.string.AttachedToClass) + @Index(IndexKind.Indexed) declare attachedToClass: Ref> @Prop(TypeRef(core.class.Doc), core.string.Object) @@ -406,7 +407,7 @@ export function createModel (builder: Builder, options = { addApplication: true alias: chunterId, hidden: false, component: chunter.component.Chat, - aside: chunter.component.ThreadView + aside: chunter.component.ChatAside }, chunter.app.Chunter ) @@ -429,6 +430,7 @@ export function createModel (builder: Builder, options = { addApplication: true input: 'none', category: chunter.category.Chunter, target: activity.class.ActivityMessage, + visibilityTester: chunter.function.CanCopyMessageLink, context: { mode: ['context', 'browser'], application: chunter.app.Chunter, @@ -585,8 +587,6 @@ export function createModel (builder: Builder, options = { addApplication: true filter: chunter.filter.ChatMessagesFilter }) - builder.mixin(chunter.class.ChatMessage, core.class.Class, activity.mixin.ActivityDoc, {}) - builder.mixin(chunter.class.DirectMessage, core.class.Class, view.mixin.ObjectIdentifier, { provider: chunter.function.DmIdentifierProvider }) @@ -639,6 +639,7 @@ export function createModel (builder: Builder, options = { addApplication: true input: 'focus', category: chunter.category.Chunter, target: activity.class.ActivityMessage, + visibilityTester: chunter.function.CanReplyToThread, context: { mode: 'context', application: notification.app.Notification, group: 'edit' } }, chunter.action.ReplyToThread @@ -677,6 +678,21 @@ export function createModel (builder: Builder, options = { addApplication: true ofClass: chunter.class.ChatMessage, components: { input: chunter.component.ChatMessageInput } }) + + builder.createDoc(activity.class.ActivityMessageExtension, core.space.Model, { + ofMessage: chunter.class.ChatMessage, + components: [{ kind: 'footer', component: chunter.component.Replies }] + }) + + builder.createDoc(activity.class.ActivityMessageExtension, core.space.Model, { + ofMessage: activity.class.DocUpdateMessage, + components: [{ kind: 'footer', component: chunter.component.Replies }] + }) + + builder.createDoc(activity.class.ActivityMessageExtension, core.space.Model, { + ofMessage: activity.class.ActivityInfoMessage, + components: [{ kind: 'footer', component: chunter.component.Replies }] + }) } export default chunter diff --git a/models/chunter/src/plugin.ts b/models/chunter/src/plugin.ts index 9041a376b8..438567ea07 100644 --- a/models/chunter/src/plugin.ts +++ b/models/chunter/src/plugin.ts @@ -75,7 +75,6 @@ export default mergeIds(chunterId, chunter, { ConfigLabel: '' as IntlString, ConfigDescription: '' as IntlString, Reacted: '' as IntlString, - Saved: '' as IntlString, RepliedToThread: '' as IntlString }, viewlet: { @@ -107,6 +106,8 @@ export default mergeIds(chunterId, chunter, { GetFragment: '' as Resource<(doc: Doc, props: Record) => Promise>, DmIdentifierProvider: '' as Resource<(client: Client, ref: Ref, doc?: T) => Promise>, CanDeleteMessage: '' as Resource<(doc?: Doc | Doc[]) => Promise>, + CanReplyToThread: '' as Resource<(doc?: Doc | Doc[]) => Promise>, + CanCopyMessageLink: '' as Resource<(doc?: Doc | Doc[]) => Promise>, GetChunterSpaceLinkFragment: '' as Resource<(doc: Doc, props: Record) => Promise> }, filter: { diff --git a/models/notification/src/index.ts b/models/notification/src/index.ts index 03e0622ca4..eeedda3428 100644 --- a/models/notification/src/index.ts +++ b/models/notification/src/index.ts @@ -203,11 +203,9 @@ export class TDocNotifyContext extends TDoc implements DocNotifyContext { hidden!: boolean @Prop(TypeDate(), core.string.Date) - @Index(IndexKind.Indexed) lastViewedTimestamp?: Timestamp @Prop(TypeDate(), core.string.Date) - @Index(IndexKind.Indexed) lastUpdateTimestamp?: Timestamp @Prop(TypeBoolean(), notification.string.Pinned) @@ -337,7 +335,8 @@ export function createModel (builder: Builder): void { alias: inboxId, hidden: true, locationResolver: notification.resolver.Location, - component: notification.component.Inbox + component: notification.component.Inbox, + aside: chunter.component.ThreadView }, notification.app.Inbox ) diff --git a/models/server-activity/src/migration.ts b/models/server-activity/src/migration.ts index cde26e27a4..fb00113947 100644 --- a/models/server-activity/src/migration.ts +++ b/models/server-activity/src/migration.ts @@ -95,9 +95,7 @@ async function generateDocUpdateMessageByTx ( async function createDocUpdateMessages (client: MigrationClient): Promise { const activityDocs = await client.model.findAll(activity.mixin.ActivityDoc, {}) - const activityDocClasses = activityDocs - .map(({ _id }) => _id) - .filter((_class) => !client.hierarchy.isDerived(_class, activity.class.ActivityMessage)) + const activityDocClasses = activityDocs.map(({ _id }) => _id) const notificationControl = getActivityControl(client) diff --git a/packages/theme/styles/_layouts.scss b/packages/theme/styles/_layouts.scss index 55ddcb22f1..38a46075bb 100644 --- a/packages/theme/styles/_layouts.scss +++ b/packages/theme/styles/_layouts.scss @@ -512,6 +512,7 @@ input.search { .mb-0 { margin-bottom: 0 !important; } .mb-1 { margin-bottom: .25rem; } .mb-2 { margin-bottom: .5rem; } +.mb-2-5 { margin-bottom: .625rem; } .mb-3 { margin-bottom: .75rem; } .mb-4 { margin-bottom: 1rem; } .mb-6 { margin-bottom: 1.5rem; } diff --git a/packages/theme/styles/_lumia-colors.scss b/packages/theme/styles/_lumia-colors.scss index a39c2340e7..5335e00f2c 100644 --- a/packages/theme/styles/_lumia-colors.scss +++ b/packages/theme/styles/_lumia-colors.scss @@ -49,6 +49,8 @@ --global-focus-BorderColor: #2A59D6; --global-popover-ShadowColor: #0E131E59; --global-modal-ShadowColor: #0E131E73; + --global-higlight-Color: #F76E53; + --global-accent-SkyText: #B9D1F5; /** Buttons **/ --button-subtle-LabelColor: #fff; @@ -104,6 +106,8 @@ --global-focus-BorderColor: #204DC8; --global-popover-ShadowColor: #0E131E1F; --global-modal-ShadowColor: #0E131E14; + --global-higlight-Color: #F76E53; + --global-accent-SkyText:#B9D1F5; /** Buttons **/ --button-subtle-LabelColor: #000; diff --git a/packages/ui/src/components/Breadcrumb.svelte b/packages/ui/src/components/Breadcrumb.svelte index 76672cb4c8..8a45e2b132 100644 --- a/packages/ui/src/components/Breadcrumb.svelte +++ b/packages/ui/src/components/Breadcrumb.svelte @@ -20,6 +20,9 @@ import Label from './Label.svelte' export let icon: Asset | AnySvelteComponent | ComponentType | undefined = undefined + export let iconProps: any | undefined = undefined + export let iconWidth: string | undefined = undefined + export let withoutIconBackground = false export let label: IntlString | undefined = undefined export let title: string | undefined = undefined export let size: 'large' | 'small' @@ -28,8 +31,8 @@