From d5b8e0d5d3ddf2147923456fafaeff008b922f06 Mon Sep 17 00:00:00 2001 From: hwnagjokim Date: Tue, 16 Jun 2026 18:02:12 +0900 Subject: [PATCH] fix(team): preserve live chat message ownership --- .../team/components/real-team-chat-panel.tsx | 5 ++-- .../team/hooks/use-project-group-chat.ts | 24 +++++++++++++++++-- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/features/team/components/real-team-chat-panel.tsx b/src/features/team/components/real-team-chat-panel.tsx index 4968371..26f1e67 100644 --- a/src/features/team/components/real-team-chat-panel.tsx +++ b/src/features/team/components/real-team-chat-panel.tsx @@ -28,6 +28,7 @@ export function RealTeamChatPanel({ projectGroup }: RealTeamChatPanelProps) { const { mutate: markChatRead } = useMarkChatReadMutation(); const { connectionMessage, connectionState, isConnected, sendMessage } = useProjectGroupChat({ + currentUserId: projectGroup.currentUserId, enabled: true, projectGroupId: projectGroup.projectGroupId, }); @@ -213,9 +214,7 @@ function ChatBubble({ message }: { message: ChatMessage }) {

{formatChatTime(message.createdAt)} diff --git a/src/features/team/hooks/use-project-group-chat.ts b/src/features/team/hooks/use-project-group-chat.ts index 08abd6c..a2d4755 100644 --- a/src/features/team/hooks/use-project-group-chat.ts +++ b/src/features/team/hooks/use-project-group-chat.ts @@ -23,9 +23,11 @@ type ChatConnectionState = | "error"; export function useProjectGroupChat({ + currentUserId, enabled, projectGroupId, }: { + currentUserId: number | undefined; enabled: boolean; projectGroupId: number | undefined; }) { @@ -83,10 +85,14 @@ export function useProjectGroupChat({ if (!chatMessage) { return; } + const ownedChatMessage = applyChatMessageOwnership( + chatMessage, + currentUserId, + ); queryClient.setQueryData( chatQueryKeys.messages(projectGroupId), - (current) => appendChatMessagePage(current, chatMessage), + (current) => appendChatMessagePage(current, ownedChatMessage), ); }, ); @@ -120,7 +126,7 @@ export function useProjectGroupChat({ clientRef.current = null; void client.deactivate(); }; - }, [enabled, projectGroupId, queryClient]); + }, [currentUserId, enabled, projectGroupId, queryClient]); const sendMessage = useCallback( (content: string) => { @@ -180,3 +186,17 @@ function parseChatMessage(message: IMessage) { return null; } } + +function applyChatMessageOwnership( + message: ChatMessage, + currentUserId: number | undefined, +): ChatMessage { + if (typeof currentUserId !== "number") { + return message; + } + + return { + ...message, + mine: message.senderUserId === currentUserId, + }; +}