Skip to content

Commit 410b35b

Browse files
authored
fix: Use same word break and URL activation logic on messages (#392)
* Use the same word-splitting logic on the TextMessage and OGMessage * TextMessage will also allow opening the URL links * Use the same word wrapping style on the TextMessage and OGMessage
1 parent d208f74 commit 410b35b

File tree

6 files changed

+83
-44
lines changed

6 files changed

+83
-44
lines changed

src/ui/MessageContent/__tests__/__snapshots__/MessageContent.spec.js.snap

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,21 @@ exports[`ui/MessageContent should do a snapshot test of the MessageContent DOM 1
5252
<div
5353
class="sendbird-message-content__middle__message-item-body sendbird-text-message-item-body incoming "
5454
>
55-
First second third
55+
<span
56+
class="sendbird-word"
57+
>
58+
First
59+
</span>
60+
<span
61+
class="sendbird-word"
62+
>
63+
second
64+
</span>
65+
<span
66+
class="sendbird-word"
67+
>
68+
third
69+
</span>
5670
</div>
5771
</span>
5872
<span

src/ui/OGMessageItemBody/index.scss

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
box-sizing: border-box;
1919
border-radius: 16px 16px 0px 0px;
2020
word-break: break-word;
21+
white-space: pre-line;
2122

2223
.sendbird-og-message-item-body__text-bubble__message {
2324
display: inline;

src/ui/OGMessageItemBody/index.tsx

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import './index.scss';
2-
import React, { ReactElement, useContext } from 'react';
2+
import React, { ReactElement, useContext, useMemo } from 'react';
33
import type { UserMessage } from '@sendbird/chat/message';
44

55
import Word from '../Word';
@@ -32,6 +32,12 @@ export default function OGMessageItemBody({
3232
if (message?.ogMetaData?.url) window.open(message?.ogMetaData?.url);
3333
};
3434
const isMessageMentioned = isMentionEnabled && message?.mentionedMessageTemplate?.length > 0 && message?.mentionedUsers?.length > 0;
35+
const sentences: Array<Array<string>> = useMemo(() => {
36+
if (isMessageMentioned) {
37+
return message?.mentionedMessageTemplate?.split(/\n/).map((sentence) => sentence.split(/\s/));
38+
}
39+
return message?.message?.split(/\n/).map((sentence) => sentence.split(/\s/));
40+
}, [message?.mentionedMessageTemplate]);
3541
return (
3642
<div className={getClassName([
3743
className,
@@ -47,27 +53,21 @@ export default function OGMessageItemBody({
4753
>
4854
<div className="sendbird-og-message-item-body__text-bubble">
4955
{
50-
isMessageMentioned
51-
? (
52-
message?.mentionedMessageTemplate.split(' ').map((word: string) => (
53-
<Word
54-
key={uuidv4()}
55-
word={word}
56-
message={message}
57-
isByMe={isByMe}
58-
/>
59-
))
60-
)
61-
: (
62-
message?.message.split(' ').map((word: string) => (
63-
<Word
64-
key={uuidv4()}
65-
word={word}
66-
message={message}
67-
isByMe={isByMe}
68-
/>
69-
))
70-
)
56+
sentences?.map((sentence, index) => {
57+
return [
58+
sentence?.map((word) => {
59+
return (
60+
<Word
61+
key={uuidv4()}
62+
word={word}
63+
message={message}
64+
isByMe={isByMe}
65+
/>
66+
);
67+
}),
68+
sentences?.[index + 1] ? <br /> : null,
69+
]
70+
})
7171
}
7272
{
7373
isEditedMessage(message) && (

src/ui/TextMessageItemBody/__tests__/__snapshots__/TextMessageItemBody.spec.js.snap

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,31 @@ exports[`ui/TextMessageItemBody should do a snapshot test of the TextMessageItem
88
<div
99
class="class-name-for-snapshot sendbird-text-message-item-body outgoing mouse-hover "
1010
>
11-
First second third fourth fifth
11+
<span
12+
class="sendbird-word"
13+
>
14+
First
15+
</span>
16+
<span
17+
class="sendbird-word"
18+
>
19+
second
20+
</span>
21+
<span
22+
class="sendbird-word"
23+
>
24+
third
25+
</span>
26+
<span
27+
class="sendbird-word"
28+
>
29+
fourth
30+
</span>
31+
<span
32+
class="sendbird-word"
33+
>
34+
fifth
35+
</span>
1236
<span
1337
class="sendbird-text-message-item-body__message edited sendbird-label sendbird-label--body-1 sendbird-label--color-oncontent-2"
1438
>

src/ui/TextMessageItemBody/index.tsx

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@ export default function TextMessageItemBody({
2828
const { stringSet } = useContext(LocalizationContext);
2929
const isMessageMentioned = isMentionEnabled && message?.mentionedMessageTemplate?.length > 0 && message?.mentionedUsers?.length > 0;
3030
const sentences: Array<Array<string>> = useMemo(() => {
31-
return message?.mentionedMessageTemplate?.split(/\n/).map((sentence) => sentence.split(/\s/));
31+
if (isMessageMentioned) {
32+
return message?.mentionedMessageTemplate?.split(/\n/).map((sentence) => sentence.split(/\s/));
33+
}
34+
return message?.message?.split(/\n/).map((sentence) => sentence.split(/\s/));
3235
}, [message?.mentionedMessageTemplate]);
3336
return (
3437
<Label
@@ -43,25 +46,21 @@ export default function TextMessageItemBody({
4346
(isReactionEnabled && message?.reactions?.length > 0) ? 'reactions' : '',
4447
])}>
4548
{
46-
isMessageMentioned
47-
? (
48-
sentences.map((sentence, index) => {
49-
return [
50-
sentence.map((word) => {
51-
return (
52-
<Word
53-
key={uuidv4()}
54-
word={word}
55-
message={message}
56-
isByMe={isByMe}
57-
/>
58-
);
59-
}),
60-
sentences?.[index + 1] ? <br /> : null,
61-
]
62-
})
63-
)
64-
: message?.message
49+
sentences.map((sentence, index) => {
50+
return [
51+
sentence.map((word) => {
52+
return (
53+
<Word
54+
key={uuidv4()}
55+
word={word}
56+
message={message}
57+
isByMe={isByMe}
58+
/>
59+
);
60+
}),
61+
sentences?.[index + 1] ? <br /> : null,
62+
]
63+
})
6564
}
6665
{
6766
isEditedMessage(message) && (

src/ui/Word/index.scss

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
display: inline;
55
margin-right: 4px;
66
height: fit-content;
7+
white-space: nowrap;
78
.sendbird-word__url,
89
.sendbird-word__normal {
910
display: inline-block;

0 commit comments

Comments
 (0)