@@ -234,8 +234,34 @@ export function useChatMessages<T = UserType>(
234234
235235 async function onSendMessage (
236236 payload : ChatMessageInterface < T > [ 'payload' ] ,
237- { onError } : { onError ?: ( ) => void } = { } ,
237+ {
238+ onError,
239+ onRoomAndMemberInitialized,
240+ } : { onError ?: ( ) => void ; onRoomAndMemberInitialized ?: ( ) => void } = { } ,
238241 ) {
242+ const tempMessage : UnsentMessage < ChatMessageInterface < T > > = {
243+ id : new Date ( ) . getTime ( ) ,
244+ roomId : '' ,
245+ payload :
246+ payload . type === ChatMessagePayloadType . TEXT
247+ ? { ...payload , message : DOMPurify . sanitize ( payload . message ) }
248+ : payload ,
249+ displayTarget : 'all' ,
250+ }
251+
252+ let skipPending = false
253+
254+ if ( ! isCreatedChatRoom ( room ) ) {
255+ dispatch ( {
256+ action : MessagesActions . PENDING ,
257+ message : tempMessage ,
258+ } )
259+ setTimeout ( ( ) => {
260+ triggerScrollToBottom ( )
261+ } , 100 )
262+ skipPending = true
263+ }
264+
239265 /** roomId 생성 이전에 보낸 메세지는 pusher 이벤트로 받을 수 없기 때문에,
240266 roomId가 없는 경우에는 먼저 room을 생성하는 과정을 거칩니다.
241267 */
@@ -249,22 +275,15 @@ export function useChatMessages<T = UserType>(
249275 ? await getChatRoomMemberId ( { roomId : currentRoomId } )
250276 : me
251277
278+ onRoomAndMemberInitialized ?.( )
279+
252280 if (
253281 ! (
254282 isCreatedChatRoom ( currentRoom ) &&
255283 roomMemberMe &&
256284 ( skipRoomMemberMe || isChatRoomMember ( roomMemberMe ) )
257285 )
258286 ) {
259- const tempMessage : UnsentMessage < ChatMessageInterface < T > > = {
260- id : new Date ( ) . getTime ( ) ,
261- roomId : '' ,
262- payload :
263- payload . type === ChatMessagePayloadType . TEXT
264- ? { ...payload , message : DOMPurify . sanitize ( payload . message ) }
265- : payload ,
266- displayTarget : 'all' ,
267- }
268287 onMessageFailed ( tempMessage )
269288 return
270289 }
@@ -280,7 +299,9 @@ export function useChatMessages<T = UserType>(
280299
281300 const { success } = await handleSendMessageAction ( {
282301 roomId : currentRoom . id ,
302+ tempMessageId : tempMessage . id ,
283303 payload,
304+ skipPending,
284305 } )
285306
286307 if ( ! success ) {
0 commit comments