From d776d4c207698c6c49c3b7c30abc497c794a01b3 Mon Sep 17 00:00:00 2001 From: Yang ga-hyeon Date: Sat, 22 Feb 2025 11:05:25 +0900 Subject: [PATCH 1/6] =?UTF-8?q?feat:=20=EC=B1=84=ED=8C=85=EB=B0=A9=20?= =?UTF-8?q?=EB=A7=88=EC=A7=80=EB=A7=89=20=EC=B1=84=ED=8C=85=20=EC=97=85?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/ChattingForm.tsx | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/features/ChattingForm.tsx b/src/features/ChattingForm.tsx index 3b284bbe..2b3f4dbe 100644 --- a/src/features/ChattingForm.tsx +++ b/src/features/ChattingForm.tsx @@ -1,7 +1,7 @@ import Layout from "@/components/Common/Layout"; import Bubble from "@/components/Common/Bubble"; import { useCallback, useEffect, useRef, useState } from "react"; -import { useQuery } from "@tanstack/react-query"; +import { useQuery, useQueryClient } from "@tanstack/react-query"; import { ChatRoom, Message } from "@/types/chatData"; import { getAccessToken } from "@/utils/tokenUtils"; import { formatToDetailedDate } from "@/utils/formatDate"; @@ -38,6 +38,7 @@ export default function ChattingForm() { const [messageToDelete, setMessageToDelete] = useState(null); const messagesEndRef = useRef(null); const messagesContainerRef = useRef(null); + const [chatRoomsState, setChatRoomsState] = useState([]); const { data: userId = "" } = useQuery({ queryKey: ["userId"], @@ -51,6 +52,8 @@ export default function ChattingForm() { }, }); + const queryClient = useQueryClient(); + const handleKeyDown = (e: React.KeyboardEvent) => { if (e.key === "Enter") { e.preventDefault(); @@ -83,6 +86,12 @@ export default function ChattingForm() { await handleFileUpload(selectedChatRoom.id, file, newMessage); } else { chatService.sendMessage(socket, selectedChatRoom.id, message.trim(), "TEXT"); + queryClient.setQueryData(["chatRooms"], (oldData: ChatRoom[] | undefined) => { + if (!oldData) return []; + return oldData.map((room) => + room.id === selectedChatRoom.id ? { ...room, lastChat: message.trim() } : room, + ); + }); setMessages((prevMessages) => [newMessage, ...prevMessages]); } @@ -356,6 +365,12 @@ export default function ChattingForm() { const newSocket = chatService.connectWebSocket( accessToken, (newMessage: Message) => { + queryClient.setQueryData(["chatRooms"], (oldData = []) => { + return oldData.map((room) => + room.id === newMessage.chatRoomId ? { ...room, lastChat: newMessage.content } : room, + ); + }); + setMessages((prevMessages) => { if (!prevMessages.find((msg) => msg.id === newMessage.id)) { return [newMessage, ...prevMessages]; From f96b7b28b2f71ce4f44cb0ff11edceb147b5906c Mon Sep 17 00:00:00 2001 From: Yang ga-hyeon Date: Sat, 22 Feb 2025 11:25:30 +0900 Subject: [PATCH 2/6] =?UTF-8?q?feat:=20lastChat=20=EB=AC=B8=EC=A0=9C=20?= =?UTF-8?q?=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/ChattingForm.tsx | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/features/ChattingForm.tsx b/src/features/ChattingForm.tsx index 2b3f4dbe..3b3a4ed1 100644 --- a/src/features/ChattingForm.tsx +++ b/src/features/ChattingForm.tsx @@ -371,12 +371,14 @@ export default function ChattingForm() { ); }); - setMessages((prevMessages) => { - if (!prevMessages.find((msg) => msg.id === newMessage.id)) { - return [newMessage, ...prevMessages]; - } - return prevMessages; - }); + if (newMessage.chatRoomId === selectedChatRoom?.id) { + setMessages((prevMessages) => { + if (!prevMessages.find((msg) => msg.id === newMessage.id)) { + return [newMessage, ...prevMessages]; + } + return prevMessages; + }); + } }, handleError, ); From 4c9b5a050886a3f664032e2c84c775be519145c4 Mon Sep 17 00:00:00 2001 From: Yang ga-hyeon Date: Sat, 22 Feb 2025 11:32:28 +0900 Subject: [PATCH 3/6] =?UTF-8?q?feat:=20=EC=B1=84=ED=8C=85=20=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=20=EB=A7=88=EC=A7=80=EB=A7=89=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EC=98=A4=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20=EB=A1=9C=EB=94=A9?= =?UTF-8?q?=EC=A4=91=EC=9C=BC=EB=A1=9C=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/ChattingForm.tsx | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/features/ChattingForm.tsx b/src/features/ChattingForm.tsx index 3b3a4ed1..f72d16e4 100644 --- a/src/features/ChattingForm.tsx +++ b/src/features/ChattingForm.tsx @@ -36,9 +36,9 @@ export default function ChattingForm() { const [isFirstMessage, setIsFirstMessage] = useState(false); const [hasMoreMessages, setHasMoreMessages] = useState(true); const [messageToDelete, setMessageToDelete] = useState(null); + const [isMessageLoading, setIsMessageLoading] = useState(false); const messagesEndRef = useRef(null); const messagesContainerRef = useRef(null); - const [chatRoomsState, setChatRoomsState] = useState([]); const { data: userId = "" } = useQuery({ queryKey: ["userId"], @@ -178,6 +178,7 @@ export default function ChattingForm() { }, [selectedChatRoom, handleScroll]); const fetchMessages = async (chatRoomId: string, currentPage: number, isOldMessages = false) => { + setIsMessageLoading(true); try { const data = await chatService.getMessages(chatRoomId, currentPage, 10); if (data.length === 0) { @@ -208,6 +209,8 @@ export default function ChattingForm() { } } catch (error: any) { alert(error.message); + } finally { + setIsMessageLoading(false); } }; @@ -591,6 +594,11 @@ export default function ChattingForm() { className="h-[600px] overflow-y-auto mobile-tablet:h-[650px]" ref={messagesContainerRef} > + {isMessageLoading && ( +
+ Loading... +
+ )} {renderMessages()}
From b867b585be120c1ba9e8f593712f82f3d9366851 Mon Sep 17 00:00:00 2001 From: Yang ga-hyeon Date: Sat, 22 Feb 2025 11:35:46 +0900 Subject: [PATCH 4/6] =?UTF-8?q?feat:=20alt=20=EB=AC=B8=EA=B5=AC=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/ChattingForm.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/features/ChattingForm.tsx b/src/features/ChattingForm.tsx index f72d16e4..9e2e3d83 100644 --- a/src/features/ChattingForm.tsx +++ b/src/features/ChattingForm.tsx @@ -596,7 +596,7 @@ export default function ChattingForm() { > {isMessageLoading && (
- Loading... + 로딩중
)} {renderMessages()} From c4b3c2e181a06de556eb1c92da4c5744e2539b9a Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 22 Feb 2025 15:06:51 +0900 Subject: [PATCH 5/6] =?UTF-8?q?feat:=20=EA=B5=AC=EA=B8=80=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EC=9D=B8=20=EC=9E=84=EC=8B=9C=20=EB=A7=89=EC=9D=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Common/SocialLogin.tsx | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/components/Common/SocialLogin.tsx b/src/components/Common/SocialLogin.tsx index 98e15681..77f76157 100644 --- a/src/components/Common/SocialLogin.tsx +++ b/src/components/Common/SocialLogin.tsx @@ -11,19 +11,22 @@ const SocialLogin = () => { switch (platform) { case "google": - redirectUrl = await authService.googleLogin(); + // redirectUrl = await authService.googleLogin(); // 수정 필요 + alert("현재 개발 중입니다!"); break; case "kakao": redirectUrl = await authService.kakaoLogin(); + window.location.href = redirectUrl; + break; case "naver": redirectUrl = await authService.naverLogin(); + window.location.href = redirectUrl; + break; default: throw new Error("지원하지 않는 로그인 방식입니다."); } - - window.location.href = redirectUrl; } catch (error) { console.error(`${platform} 로그인 중 오류 발생`, error); alert(`${platform} 로그인에 실패했습니다. 다시 시도해주세요.`); From 25a813b1191df4a7261c3d86268ffe58afad74be Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 22 Feb 2025 15:13:52 +0900 Subject: [PATCH 6/6] =?UTF-8?q?feat:=20=ED=8C=8C=EB=B9=84=EC=BD=98=20?= =?UTF-8?q?=EC=95=84=EC=9D=B4=EC=BD=98=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/favicon.ico | Bin 15406 -> 18910 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/public/favicon.ico b/public/favicon.ico index a0c8c2a4d14db5acbd37810becad226ba248ec06..1c88b1c9962c80a345eed6b864309786fb80e13b 100644 GIT binary patch literal 18910 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