|
1 | | -import { useEffect } from "react"; |
| 1 | +import { useEffect, useState } from "react"; |
2 | 2 | import { |
3 | 3 | BrowserRouter as Router, |
4 | 4 | Routes, |
5 | 5 | Route, |
6 | 6 | useLocation |
7 | 7 | } from "react-router-dom"; |
| 8 | +import { initGA, trackPageView } from "@/libs/analytics"; |
8 | 9 | import Home from "@/pages/Home"; |
9 | 10 | import SelectInfo from "@/pages/SelectInfo"; |
10 | 11 | import Chat from "@/pages/Chat"; |
11 | 12 | import ChatRecommend from "@/pages/ChatRecommend"; |
12 | 13 | import ChatTips from "@/pages/ChatTips"; |
13 | | -import ChatTemporature from "@/pages/ChatTemporature"; |
| 14 | +import ChatTemperature from "@/pages/ChatTemperature"; |
14 | 15 | import Content from "@/pages/Content"; |
15 | 16 | import Login from "@/pages/Login"; |
16 | 17 | import MyInfo from "@/pages/MyInfo"; |
17 | 18 | import KaKaoLogin from "@/pages/KaKaoLogin"; |
18 | 19 | import MbtiTestIntro from "@/pages/MbtiTestIntro"; |
19 | 20 | import MbtiTestQuestions from "@/pages/MbtiTestQuestions"; |
20 | 21 | import MbtiTestResult from "@/pages/MbtiTestResult"; |
21 | | -import CenteredLayout from "@/components/CenteredLayout"; |
22 | | -import { initGA, trackPageView } from "@/libs/analytics"; |
23 | 22 | import Error from "@/pages/Error"; |
| 23 | +import CenteredLayout from "@/components/CenteredLayout"; |
| 24 | +import ToastMessage from "@/components/ToastMessage"; |
| 25 | +import useAuthStore from "@/store/useAuthStore"; |
24 | 26 |
|
25 | 27 | const PageTracker = () => { |
26 | 28 | const location = useLocation(); |
@@ -69,26 +71,46 @@ const PageTracker = () => { |
69 | 71 | }; |
70 | 72 |
|
71 | 73 | const App = () => { |
| 74 | + const { logout } = useAuthStore(); |
| 75 | + const [toastMessage, setToastMessage] = useState(""); |
| 76 | + const storageAuth = localStorage.getItem("auth-storage"); |
| 77 | + const parsedAuth = storageAuth ? JSON.parse(storageAuth).state : null; |
| 78 | + |
| 79 | + const checkSession = () => { |
| 80 | + const expirationTime = new Date( |
| 81 | + new Date(parsedAuth.loginTime).getTime() + 24 * 60 * 60 * 1000 |
| 82 | + ); |
| 83 | + const now = new Date(); |
| 84 | + if (now > expirationTime) { |
| 85 | + setToastMessage("로그인 세션이 만료되었습니다."); |
| 86 | + logout(); |
| 87 | + } |
| 88 | + }; |
| 89 | + |
72 | 90 | useEffect(() => { |
73 | 91 | initGA(); |
| 92 | + if (parsedAuth) checkSession(); |
74 | 93 | }, []); |
75 | 94 |
|
76 | 95 | return ( |
77 | 96 | <Router> |
78 | 97 | <PageTracker /> |
79 | 98 | <CenteredLayout> |
| 99 | + {toastMessage && ( |
| 100 | + <ToastMessage |
| 101 | + message={toastMessage} |
| 102 | + onClose={() => setToastMessage("")} |
| 103 | + /> |
| 104 | + )} |
80 | 105 | <Routes> |
81 | 106 | <Route path="/" element={<Home />} /> |
82 | 107 | <Route path="/select-info" element={<SelectInfo />} /> |
83 | 108 | <Route path="/chat" element={<Chat />} /> |
| 109 | + <Route path="/chat-recommend/:mbti" element={<ChatRecommend />} /> |
| 110 | + <Route path="/chat-tips/:mbti" element={<ChatTips />} /> |
84 | 111 | <Route |
85 | | - path="/chat-recommend/:virtualFriendId" |
86 | | - element={<ChatRecommend />} |
87 | | - /> |
88 | | - <Route path="/chat-tips/:virtualFriendId" element={<ChatTips />} /> |
89 | | - <Route |
90 | | - path="/chat-temporature/:conversationId" |
91 | | - element={<ChatTemporature />} |
| 112 | + path="/chat-temperature/:conversationId" |
| 113 | + element={<ChatTemperature />} |
92 | 114 | /> |
93 | 115 | <Route path="/contents/:id" element={<Content />} /> |
94 | 116 | <Route path="/login" element={<Login />} /> |
|
0 commit comments