Skip to content

Commit 7b3c218

Browse files
bang9AhyoungRyu
andauthored
fix: lastMessage is nullable (#828)
Fixed the runtime error that was occurring in the empty channel. --------- Co-authored-by: Irene Ryu <[email protected]>
1 parent fbf443d commit 7b3c218

File tree

3 files changed

+43
-7
lines changed

3 files changed

+43
-7
lines changed

src/modules/Channel/components/Message/index.tsx

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import useDidMountEffect from '../../../../utils/useDidMountEffect';
1212
import SuggestedMentionList from '../SuggestedMentionList';
1313
import useSendbirdStateContext from '../../../../hooks/useSendbirdStateContext';
1414
import { useChannelContext } from '../../context/ChannelProvider';
15-
import { getClassName } from '../../../../utils';
15+
import { getClassName, getSuggestedReplies } from '../../../../utils';
1616
import { isDisabledBecauseFrozen, isDisabledBecauseMuted } from '../../context/utils';
1717
import { MAX_USER_MENTION_COUNT, MAX_USER_SUGGESTION_COUNT } from '../../context/const';
1818

@@ -212,8 +212,6 @@ const Message = ({
212212
return null;
213213
}, [message, renderCustomSeparator]);
214214

215-
const suggestedReplies = message.extendedMessagePayload?.suggested_replies as string[] | undefined ?? [];
216-
217215
if (renderedMessage) {
218216
return (
219217
<div
@@ -385,11 +383,11 @@ const Message = ({
385383
)
386384
}
387385
{/** Suggested Replies */}
388-
{message.messageId === currentGroupChannel?.lastMessage.messageId
386+
{message.messageId === currentGroupChannel?.lastMessage?.messageId
389387
// the options should appear only when there's no failed or pending messages
390388
&& localMessages.every(message => (message as UserMessage).sendingStatus === 'succeeded')
391-
&& suggestedReplies.length > 0 && (
392-
<SuggestedReplies replyOptions={suggestedReplies} onSendMessage={sendMessage} />
389+
&& getSuggestedReplies(message).length > 0 && (
390+
<SuggestedReplies replyOptions={getSuggestedReplies(message)} onSendMessage={sendMessage} />
393391
)}
394392
{/* Modal */}
395393
{
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import { getSuggestedReplies } from '../index';
2+
import { EveryMessage } from '../../types';
3+
4+
describe('getSuggestedReplies', () => {
5+
it('should return an empty array when message is undefined', () => {
6+
const result = getSuggestedReplies();
7+
expect(result).toEqual([]);
8+
});
9+
10+
it('should return an empty array when suggested_replies is not an array', () => {
11+
const message = {
12+
extendedMessagePayload: {
13+
suggested_replies: 'Not an array',
14+
},
15+
} as unknown as EveryMessage;
16+
const result = getSuggestedReplies(message);
17+
expect(result).toEqual([]);
18+
});
19+
20+
it('should return the suggested_replies when it is an array', () => {
21+
const suggestedReplies = ['Option 1', 'Option 2', 'Option 3'];
22+
const message = {
23+
extendedMessagePayload: {
24+
suggested_replies: suggestedReplies,
25+
},
26+
} as unknown as EveryMessage;
27+
const result = getSuggestedReplies(message);
28+
expect(result).toEqual(suggestedReplies);
29+
});
30+
});

src/utils/index.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import {
1313
import { OpenChannel, SendbirdOpenChat } from '@sendbird/chat/openChannel';
1414

1515
import { getOutgoingMessageState, OutgoingMessageStates } from './exports/getOutgoingMessageState';
16-
import { Nullable } from '../types';
16+
import { Nullable, EveryMessage } from '../types';
1717
import { match } from 'ts-pattern';
1818

1919
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Complete_list_of_MIME_types
@@ -409,6 +409,14 @@ export const getUseReaction = (store: UIKitStore, channel: GroupChannel | OpenCh
409409
return store?.config?.isReactionEnabled;
410410
};
411411

412+
export function getSuggestedReplies(message?: EveryMessage): string[] {
413+
if (Array.isArray(message?.extendedMessagePayload?.suggested_replies)) {
414+
return message.extendedMessagePayload.suggested_replies;
415+
} else {
416+
return [];
417+
}
418+
}
419+
412420
export const isMessageSentByMe = (
413421
userId: string,
414422
message: SendableMessageType,

0 commit comments

Comments
 (0)