Skip to content
This repository was archived by the owner on Jan 29, 2026. It is now read-only.

Commit 11f2ee9

Browse files
committed
fix: 첫 메시지 전송 시 룸 생성 전 pending message 처리
1 parent 12087f1 commit 11f2ee9

File tree

1 file changed

+31
-10
lines changed

1 file changed

+31
-10
lines changed

packages/tds-widget/src/chat/chat/chat-room-messages/use-chat-room-messages.ts

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)