diff --git a/src/App.vue b/src/App.vue index 1366adc45d5..c968122cd4c 100644 --- a/src/App.vue +++ b/src/App.vue @@ -457,9 +457,10 @@ export default { .content { height: 100%; + //FIXME: remove this v-deep once nextcloud vue v4 is adopted ::v-deep .app-navigation-toggle { - top: 10px; - right: -10px; + top: 8px; + right: -8px; border-radius: var(--border-radius-pill); } diff --git a/src/assets/variables.scss b/src/assets/variables.scss index 31d4c275d48..927449da276 100644 --- a/src/assets/variables.scss +++ b/src/assets/variables.scss @@ -68,7 +68,7 @@ $message-utils-width: 100px; //message form max height $message-form-max-height: 180px; -$top-bar-height: 60px; +$top-bar-height: 61px; $color-call-background: #444444; $color-guests-avatar: #ffffff; diff --git a/src/components/ChatView.vue b/src/components/ChatView.vue index 2a76975dbcf..9cfed2065af 100644 --- a/src/components/ChatView.vue +++ b/src/components/ChatView.vue @@ -153,11 +153,10 @@ export default { diff --git a/src/components/TopBar/TopBar.vue b/src/components/TopBar/TopBar.vue index 81b3ef35473..ce6b674613a 100644 --- a/src/components/TopBar/TopBar.vue +++ b/src/components/TopBar/TopBar.vue @@ -21,88 +21,114 @@ @@ -119,10 +145,17 @@ import { CONVERSATION, PARTICIPANT } from '../../constants' import { generateUrl } from '@nextcloud/router' import { callParticipantCollection } from '../../utils/webrtc/index' import { emit } from '@nextcloud/event-bus' +import ConversationIcon from '../ConversationIcon' +import Tooltip from '@nextcloud/vue/dist/Directives/Tooltip' +import richEditor from '@nextcloud/vue/dist/Mixins/richEditor' export default { name: 'TopBar', + directives: { + Tooltip, + }, + components: { ActionButton, Actions, @@ -130,8 +163,11 @@ export default { CallButton, ActionSeparator, MicrophoneOff, + ConversationIcon, }, + mixins: [richEditor], + props: { isInCall: { type: Boolean, @@ -187,9 +223,11 @@ export default { isFileConversation() { return this.conversation.objectType === 'file' && this.conversation.objectId }, + isOneToOneConversation() { return this.conversation.type === CONVERSATION.TYPE.ONE_TO_ONE }, + linkToFile() { if (this.isFileConversation) { return window.location.protocol + '//' + window.location.host + generateUrl('/f/' + this.conversation.objectId) @@ -209,15 +247,19 @@ export default { canModerate() { return this.canFullModerate || this.participantType === PARTICIPANT.TYPE.GUEST_MODERATOR }, + showModerationOptions() { return !this.isOneToOneConversation && this.canModerate }, + token() { return this.$store.getters.getToken() }, + conversation() { return this.$store.getters.conversation(this.token) || this.$store.getters.dummyConversation }, + linkToConversation() { if (this.token !== '') { return window.location.protocol + '//' + window.location.host + generateUrl('/call/' + this.token) @@ -225,6 +267,7 @@ export default { return '' } }, + conversationHasSettings() { return this.conversation.type === CONVERSATION.TYPE.GROUP || this.conversation.type === CONVERSATION.TYPE.PUBLIC @@ -233,6 +276,10 @@ export default { isGrid() { return this.$store.getters.isGrid }, + + renderedDescription() { + return this.renderContent(this.conversation.description) + }, }, mounted() { @@ -324,6 +371,10 @@ export default { callParticipantModel.forceMute() }) }, + + openConversationSettings() { + emit('show-conversation-settings') + }, }, } @@ -334,27 +385,39 @@ export default { .top-bar { height: $top-bar-height; - position: absolute; - top: 0; right: 12px; /* needed so we can still use the scrollbar */ display: flex; z-index: 10; justify-content: flex-end; padding: 8px; + width: 100%; + background-color: var(--color-main-background); + border-bottom: 1px solid var(--color-border); &.in-call { right: 0; + background-color: transparent; + border: none; + position: absolute; + top: 0; + left:0; .forced-background { background-color: rgba(0,0,0,0.1) !important; border-radius: var(--border-radius-pill); } } + &__buttons { + display: flex; + margin-left: 8px; + } + &__button { margin: 0 2px; align-self: center; display: flex; align-items: center; + white-space: nowrap; svg { margin-right: 4px !important; } @@ -363,4 +426,35 @@ export default { } } } + +.conversation-header { + position: relative; + display: flex; + overflow-x: hidden; + overflow-y: clip; + margin-left: 48px; + white-space: nowrap; + width: 100%; + cursor: pointer; + &__text { + display: flex; + flex-direction:column; + flex-grow: 1; + margin-left: 8px; + justify-content: center; + width: 100%; + overflow: hidden; + } + .title { + font-weight: bold; + overflow: hidden; + text-overflow: ellipsis; + } + .description { + overflow: hidden; + text-overflow: ellipsis; + max-width: fit-content; + color: var(--color-text-lighter); + } +}