@@ -5,6 +5,7 @@ import type {
55 AttachmentManagerState ,
66 Channel ,
77 ChannelState ,
8+ DraftMessage ,
89 MessageResponse ,
910 PollState ,
1011 PollVote ,
@@ -85,8 +86,7 @@ const getMentionUsers = (mentionedUser: UserResponse[] | undefined) => {
8586const getLatestMessageDisplayText = (
8687 channel : Channel ,
8788 client : StreamChat ,
88- draftText : string | undefined ,
89- draftAttachments : boolean | undefined ,
89+ draftMessage : DraftMessage | undefined ,
9090 message : LatestMessage | undefined ,
9191 t : ( key : string ) => string ,
9292 pollState : LatestMessagePreviewSelectorReturnType | undefined ,
@@ -106,18 +106,21 @@ const getLatestMessageDisplayText = (
106106 ? `${ messageSender === t ( 'You' ) ? '' : '@' } ${ messageSender } : `
107107 : '' ;
108108 const boldOwner = messageSenderText . includes ( '@' ) ;
109- if ( draftText ) {
110- return [
111- { bold : true , draft : true , text : 'Draft:' } ,
112- { bold : false , text : draftText } ,
113- ] ;
114- }
115- if ( draftAttachments ) {
116- return [
117- { bold : true , draft : true , text : 'Draft:' } ,
118- { bold : false , text : t ( '🏙 Attachment...' ) } ,
119- ] ;
109+ if ( draftMessage ) {
110+ if ( draftMessage . attachments ?. length ) {
111+ return [
112+ { bold : true , draft : true , text : 'Draft:' } ,
113+ { bold : false , text : t ( '🏙 Attachment...' ) } ,
114+ ] ;
115+ }
116+ if ( draftMessage . text ) {
117+ return [
118+ { bold : true , draft : true , text : 'Draft:' } ,
119+ { bold : false , text : draftMessage . text } ,
120+ ] ;
121+ }
120122 }
123+
121124 if ( message . text ) {
122125 // rough guess optimization to limit string preview to max 100 characters
123126 const shortenedText = message . text . substring ( 0 , 100 ) . replace ( / \n / g, ' ' ) ;
@@ -218,15 +221,13 @@ const getLatestMessageReadStatus = (
218221const getLatestMessagePreview = ( params : {
219222 channel : Channel ;
220223 client : StreamChat ;
221- draftText ?: string ;
222- draftAttachments ?: boolean ;
224+ draftMessage ?: DraftMessage ;
223225 pollState : LatestMessagePreviewSelectorReturnType | undefined ;
224226 readEvents : boolean ;
225227 t : TFunction ;
226228 lastMessage ?: ReturnType < ChannelState [ 'formatMessage' ] > | MessageResponse ;
227229} ) => {
228- const { channel, client, draftText, draftAttachments, lastMessage, pollState, readEvents, t } =
229- params ;
230+ const { channel, client, draftMessage, lastMessage, pollState, readEvents, t } = params ;
230231
231232 const messages = channel . state . messages ;
232233
@@ -251,15 +252,7 @@ const getLatestMessagePreview = (params: {
251252 return {
252253 created_at : message ?. created_at ,
253254 messageObject : message ,
254- previews : getLatestMessageDisplayText (
255- channel ,
256- client ,
257- draftText ,
258- draftAttachments ,
259- message ,
260- t ,
261- pollState ,
262- ) ,
255+ previews : getLatestMessageDisplayText ( channel , client , draftMessage , message , t , pollState ) ,
263256 status : getLatestMessageReadStatus ( channel , client , message , readEvents ) ,
264257 } ;
265258} ;
@@ -297,7 +290,17 @@ export const useLatestMessagePreview = (
297290 stateSelector ,
298291 ) ;
299292
300- const draftAttachments = attachments . length > 0 ;
293+ const draftMessage : DraftMessage | undefined = useMemo (
294+ ( ) =>
295+ ! channel . messageComposer . compositionIsEmpty
296+ ? {
297+ attachments,
298+ id : channel . messageComposer . id ,
299+ text : draftText ,
300+ }
301+ : undefined ,
302+ [ channel . messageComposer , attachments , draftText ] ,
303+ ) ;
301304
302305 const channelConfigExists = typeof channel ?. getConfig === 'function' ;
303306
@@ -330,8 +333,7 @@ export const useLatestMessagePreview = (
330333 return getLatestMessagePreview ( {
331334 channel,
332335 client,
333- draftAttachments,
334- draftText,
336+ draftMessage,
335337 lastMessage : translatedLastMessage ,
336338 pollState,
337339 readEvents,
@@ -340,8 +342,7 @@ export const useLatestMessagePreview = (
340342 // eslint-disable-next-line react-hooks/exhaustive-deps
341343 } , [
342344 channelLastMessageString ,
343- draftText ,
344- draftAttachments ,
345+ draftMessage ,
345346 forceUpdate ,
346347 readEvents ,
347348 readStatus ,
0 commit comments