44 CoreMessageType ,
55 getUIKitMessageType , getUIKitMessageTypes , isTemplateMessage , isMultipleFilesMessage ,
66 isOGMessage , isSendableMessage ,
7- isTextMessage , isThumbnailMessage , isVoiceMessage , isFormMessage ,
7+ isTextMessage , isThumbnailMessage , isVoiceMessage , isFormMessage , isValidTemplateMessageType ,
88} from '../../../utils' ;
99import { BaseMessage , FileMessage , MultipleFilesMessage , UserMessage } from '@sendbird/chat/message' ;
1010import OGMessageItemBody from '../../OGMessageItemBody' ;
@@ -23,21 +23,20 @@ import { match } from 'ts-pattern';
2323import TemplateMessageItemBody from '../../TemplateMessageItemBody' ;
2424import type { OnBeforeDownloadFileMessageType } from '../../../modules/GroupChannel/context/GroupChannelProvider' ;
2525import FormMessageItemBody from '../../FormMessageItemBody' ;
26+ import { MESSAGE_TEMPLATE_KEY } from '../../../utils/consts' ;
2627
2728export type CustomSubcomponentsProps = Record <
2829 'ThumbnailMessageItemBody' | 'MultipleFilesMessageItemBody' ,
2930 Record < string , any >
3031> ;
3132
3233const MESSAGE_ITEM_BODY_CLASSNAME = 'sendbird-message-content__middle__message-item-body' ;
33- export type RenderedTemplateBodyType = 'failed' | 'composite' | 'simple' ;
3434
3535export interface MessageBodyProps {
3636 className ?: string ;
3737 channel : Nullable < GroupChannel > ;
3838 message : CoreMessageType ;
3939 showFileViewer ?: ( bool : boolean ) => void ;
40- onTemplateMessageRenderedCallback ?: ( renderedTemplateBodyType : RenderedTemplateBodyType ) => void ;
4140 onMessageHeightChange ?: ( ) => void ;
4241 onBeforeDownloadFileMessage ?: OnBeforeDownloadFileMessageType ;
4342
@@ -55,7 +54,6 @@ export const MessageBody = (props: MessageBodyProps) => {
5554 channel,
5655 showFileViewer,
5756 onMessageHeightChange,
58- onTemplateMessageRenderedCallback,
5957 onBeforeDownloadFileMessage,
6058
6159 mouseHover,
@@ -76,6 +74,14 @@ export const MessageBody = (props: MessageBodyProps) => {
7674 const isOgMessageEnabledInGroupChannel = channel ?. isGroupChannel ( ) && config . groupChannel . enableOgtag ;
7775 const isFormMessageEnabledInGroupChannel = channel ?. isGroupChannel ( ) && config . groupChannel . enableFormTypeMessage ;
7876
77+ const renderUnknownMessageItemBody = ( ) => < UnknownMessageItemBody
78+ className = { className }
79+ message = { message }
80+ isByMe = { isByMe }
81+ mouseHover = { mouseHover }
82+ isReactionEnabled = { isReactionEnabledInChannel }
83+ /> ;
84+
7985 return match ( message )
8086 . when ( ( message ) => isFormMessageEnabledInGroupChannel && isFormMessage ( message ) ,
8187 ( ) => (
@@ -85,15 +91,22 @@ export const MessageBody = (props: MessageBodyProps) => {
8591 form = { message . messageForm }
8692 />
8793 ) )
88- . when ( isTemplateMessage , ( ) => (
89- < TemplateMessageItemBody
94+ . when ( isTemplateMessage , ( ) => {
95+ const templatePayload = message . extendedMessagePayload [ MESSAGE_TEMPLATE_KEY ] ;
96+ if ( ! isValidTemplateMessageType ( templatePayload ) ) {
97+ config . logger ?. error ?.(
98+ 'TemplateMessageItemBody: invalid type value in message.extendedMessagePayload.message_template.' ,
99+ templatePayload ,
100+ ) ;
101+ return renderUnknownMessageItemBody ( ) ;
102+ }
103+ return < TemplateMessageItemBody
90104 className = { className }
91105 message = { message as BaseMessage }
92106 isByMe = { isByMe }
93107 theme = { config ?. theme as SendbirdTheme }
94- onTemplateMessageRenderedCallback = { onTemplateMessageRenderedCallback }
95- />
96- ) )
108+ /> ;
109+ } )
97110 . when ( ( message ) => isOgMessageEnabledInGroupChannel
98111 && isSendableMessage ( message )
99112 && isOGMessage ( message ) , ( ) => (
@@ -163,15 +176,9 @@ export const MessageBody = (props: MessageBodyProps) => {
163176 { ...customSubcomponentsProps [ 'ThumbnailMessageItemBody' ] ?? { } }
164177 />
165178 ) )
166- . otherwise ( ( message ) => (
167- < UnknownMessageItemBody
168- className = { className }
169- message = { message }
170- isByMe = { isByMe }
171- mouseHover = { mouseHover }
172- isReactionEnabled = { isReactionEnabledInChannel }
173- />
174- ) ) ;
179+ . otherwise ( ( ) => {
180+ return renderUnknownMessageItemBody ( ) ;
181+ } ) ;
175182} ;
176183
177184export default MessageBody ;
0 commit comments