import { useState, useEffect } from 'react'; import { HashRouter, Routes, Route } from 'react-router-dom'; import { Layout } from '@/components/layout'; import { Dashboard, Todo, Kuntae, Jobreport, Project, Login, CommonCodePage, ItemsPage, UserListPage, MonthlyWorkPage, MailFormPage, UserAuthPage, Note } from '@/pages'; import { PatchList } from '@/pages/PatchList'; import { MailList } from '@/pages/MailList'; import { Customs } from '@/pages/Customs'; import { comms } from '@/communication'; import { UserInfo } from '@/types'; import { Loader2 } from 'lucide-react'; export default function App() { const [isConnected, setIsConnected] = useState(false); const [isLoggedIn, setIsLoggedIn] = useState(null); // null = 체크 중 const [user, setUser] = useState(null); useEffect(() => { // 통신 상태 구독 const unsubscribe = comms.subscribe((msg: unknown) => { const message = msg as { type?: string; connected?: boolean }; if (message?.type === 'CONNECTION_STATE') { setIsConnected(message.connected ?? false); // 연결되면 로그인 상태 체크 if (message.connected) { checkLoginStatus(); } } }); // 초기 연결 상태 설정 setIsConnected(comms.getConnectionState()); // 연결되어 있으면 바로 로그인 상태 체크 if (comms.getConnectionState()) { checkLoginStatus(); } return () => { unsubscribe(); }; }, []); const checkLoginStatus = async () => { try { const result = await comms.checkLoginStatus(); if (result.Success) { setIsLoggedIn(result.IsLoggedIn); setUser(result.User); } else { setIsLoggedIn(false); setUser(null); } } catch (err) { console.error('로그인 상태 체크 실패:', err); setIsLoggedIn(false); setUser(null); } }; const handleLoginSuccess = () => { checkLoginStatus(); }; // 로그인 상태 체크 중 if (isLoggedIn === null) { return (

로그인 상태 확인 중...

); } // 로그인 안됨 → 로그인 화면 표시 if (!isLoggedIn) { return ; } // 로그인 됨 → 메인 앱 표시 return ( }> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> {/* Tailwind Breakpoint Indicator - 개발용 */}
XS SM MD LG XL 2XL
); }