Skip to content

Commit 8a7f78c

Browse files
Fix threads and attachments overflow for large messages (#9950)
* Fix large message display Signed-off-by: Artem Savchenko <[email protected]> * Clean up Signed-off-by: Artem Savchenko <[email protected]> * Clean up Signed-off-by: Artem Savchenko <[email protected]> --------- Signed-off-by: Artem Savchenko <[email protected]>
1 parent cbe41ed commit 8a7f78c

File tree

4 files changed

+50
-35
lines changed

4 files changed

+50
-35
lines changed

packages/ui/src/components/ShowMore.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@
2121
export let limit: number = 240
2222
export let ignore: boolean = false
2323
export let fixed: boolean = false
24+
export let bigger: boolean = false
2425
2526
let cHeight: number
26-
let bigger: boolean = false
2727
let crop: boolean = false
2828
2929
const toggle = (): void => {

plugins/communication-resources/src/components/message/MessageBody.svelte

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@
3535
export let hideAvatar: boolean = false
3636
export let hideHeader: boolean = false
3737
export let showThreads: boolean = true
38+
export let collapsible: boolean = true
39+
export let maxHeight: string = '30rem'
40+
41+
let isShowMoreActive: boolean = false
3842
3943
function formatDate (date: Date): string {
4044
return date.toLocaleTimeString('default', {
@@ -58,8 +62,8 @@
5862

5963
<div class="message__content">
6064
{#if !isEditing && message.content !== ''}
61-
<div class="message__text">
62-
<MessageContentViewer {message} {card} {author} />
65+
<div class="message__text" class:with-showmore={isShowMoreActive}>
66+
<MessageContentViewer {message} {card} {author} {collapsible} {maxHeight} bind:isShowMoreActive />
6367
</div>
6468
{:else if isEditing}
6569
<MessageInput
@@ -114,8 +118,8 @@
114118
{/if}
115119
</div>
116120
{#if !isEditing}
117-
<div class="message__text">
118-
<MessageContentViewer {message} {card} {author} />
121+
<div class="message__text" class:with-showmore={isShowMoreActive}>
122+
<MessageContentViewer {message} {card} {author} {collapsible} {maxHeight} bind:isShowMoreActive />
119123
</div>
120124
{:else if isEditing}
121125
<MessageInput
@@ -219,6 +223,11 @@
219223
max-width: 100%;
220224
user-select: text;
221225
flex: 1;
226+
227+
&.with-showmore {
228+
position: relative; // This ensures ShowMore button positions relative to this container
229+
margin-bottom: 1rem;
230+
}
222231
}
223232
224233
.time-container {

plugins/communication-resources/src/components/message/MessageContentViewer.svelte

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,22 @@
1717
import { MessageViewer as MarkupMessageViewer } from '@hcengineering/presentation'
1818
import { Markdown, Message, MessageID } from '@hcengineering/communication-types'
1919
import { Card } from '@hcengineering/card'
20-
import { Label } from '@hcengineering/ui'
2120
import { Person } from '@hcengineering/contact'
2221
import { Markup } from '@hcengineering/core'
22+
import { ShowMore } from '@hcengineering/ui'
2323
2424
import ActivityMessageViewer from './ActivityMessageViewer.svelte'
2525
import { toMarkup } from '../../utils'
2626
import { isActivityMessage } from '../../activity'
27-
import communication from '../../plugin'
2827
import { isShownTranslatedMessage, TranslateMessagesStatus, translateMessagesStore } from '../../stores'
2928
import { translateMessage } from '../../actions'
3029
3130
export let card: Card
3231
export let message: Message
3332
export let author: Person | undefined
33+
export let collapsible: boolean = true
34+
export let maxHeight: string = '30rem'
35+
export let isShowMoreActive: boolean = false
3436
3537
let displayMarkup: Markup = toMarkup(message.content)
3638
let prevContent: Markdown | undefined = undefined
@@ -57,16 +59,20 @@
5759
})
5860
}
5961
}
60-
</script>
61-
62-
{#if isActivityMessage(message)}
63-
<ActivityMessageViewer {message} {card} {author} />
64-
{:else}
65-
<MarkupMessageViewer message={displayMarkup} />
66-
{/if}
6762
68-
<style lang="scss">
69-
.removed-label {
70-
color: var(--theme-text-placeholder-color);
63+
function getMaxSize (maxHeight: string): number {
64+
const remValue = parseFloat(maxHeight.replace('rem', ''))
65+
if (isNaN(remValue) || remValue <= 0) {
66+
return 480 // 30rem * 16px
67+
}
68+
return remValue * 16
7169
}
72-
</style>
70+
</script>
71+
72+
<ShowMore limit={getMaxSize(maxHeight)} ignore={!collapsible} bind:bigger={isShowMoreActive}>
73+
{#if isActivityMessage(message)}
74+
<ActivityMessageViewer {message} {card} {author} />
75+
{:else}
76+
<MarkupMessageViewer message={displayMarkup} />
77+
{/if}
78+
</ShowMore>

plugins/communication-resources/src/components/message/MessagePresenter.svelte

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import { Person } from '@hcengineering/contact'
1818
import { employeeByPersonIdStore, getPersonByPersonId } from '@hcengineering/contact-resources'
1919
import { Card } from '@hcengineering/card'
20-
import { getEventPositionElement, showPopup, Action, Menu, ShowMore } from '@hcengineering/ui'
20+
import { getEventPositionElement, showPopup, Action, Menu } from '@hcengineering/ui'
2121
import type { MessageID, SocialID } from '@hcengineering/communication-types'
2222
import { Message, MessageType } from '@hcengineering/communication-types'
2323
import { getResource } from '@hcengineering/platform'
@@ -151,22 +151,22 @@
151151
class:noHover={readonly}
152152
style:padding
153153
>
154-
<ShowMore limit={parseFloat(maxHeight.replace('rem', '')) * 16} ignore={!collapsible}>
155-
{#if message.type === MessageType.Activity}
156-
<OneRowMessageBody {message} {card} {author} {hideAvatar} {hideHeader} />
157-
{:else}
158-
<MessageBody
159-
{message}
160-
{card}
161-
{author}
162-
{isEditing}
163-
compact={compact && message.threads.length === 0}
164-
{hideAvatar}
165-
{hideHeader}
166-
{showThreads}
167-
/>
168-
{/if}
169-
</ShowMore>
154+
{#if message.type === MessageType.Activity}
155+
<OneRowMessageBody {message} {card} {author} {hideAvatar} {hideHeader} />
156+
{:else}
157+
<MessageBody
158+
{message}
159+
{card}
160+
{author}
161+
{isEditing}
162+
compact={compact && message.threads.length === 0}
163+
{hideAvatar}
164+
{hideHeader}
165+
{showThreads}
166+
{collapsible}
167+
{maxHeight}
168+
/>
169+
{/if}
170170

171171
{#if showActions}
172172
<div class="message__actions" class:opened={isActionsPanelOpened}>

0 commit comments

Comments
 (0)