diff --git a/src/components/header/SubHeader.tsx b/src/components/header/SubHeader.tsx index 124539b..325bc49 100644 --- a/src/components/header/SubHeader.tsx +++ b/src/components/header/SubHeader.tsx @@ -24,6 +24,7 @@ const SubHeader = ({ const isChatPage = pathname === "/chat"; const isFirstQuestionPage = currentPage === 1; const mode = state?.mode; + const chatId = state?.id; const handleGoBack = () => { if (isProgressPage && !isFirstQuestionPage) { @@ -45,6 +46,10 @@ const SubHeader = ({ const handleCancel = () => setIsLeaveChatModalOpen(false); const handleConfirm = () => { + if (chatId) { + sessionStorage.removeItem(`chatMessages_${chatId}`); + } + setIsLeaveChatModalOpen(false); navigate("/"); }; diff --git a/src/pages/Chat.tsx b/src/pages/Chat.tsx index a47b0ef..ce1f32d 100644 --- a/src/pages/Chat.tsx +++ b/src/pages/Chat.tsx @@ -20,7 +20,7 @@ interface ChatResponse { const Chat = () => { const { state } = useLocation(); - const { mbti, mode, id } = state; + const { mbti, mode, id = Date.now().toString() } = state; const [messages, setMessages] = useState([]); const [input, setInput] = useState(""); @@ -30,11 +30,21 @@ const Chat = () => { const chatTitle = `${mbti}와 대화`; const assistantInfo = mbti; const assistantImgUrl = pickMbtiImage(assistantInfo); + const storageKey = `chatMessages_${id}`; useEffect(() => { bottomRef.current?.scrollIntoView({ behavior: "smooth" }); }, [messages, isOpen]); + useEffect(() => { + const stored = sessionStorage.getItem(storageKey); + if (stored) setMessages(JSON.parse(stored)); + }, [storageKey]); + + useEffect(() => { + sessionStorage.setItem(storageKey, JSON.stringify(messages)); + }, [messages, storageKey]); + const handleToggleTips = () => { const nextAction = !isOpen;