import React, { useEffect } from 'react'; import { BrowserRouter as Router, Route, Routes } from 'react-router-dom'; import { SplashScreen } from '@capacitor/splash-screen'; import './App.css'; import Login from './pages/Login'; import Register from './pages/Register'; import NotFound from './pages/NotFound'; import NavBar from './components/NavBar'; import Index from './pages/Index'; import AuthContextWrapper from './contexts/AuthContext'; import { Toaster } from './components/ui/toaster'; import ProfileManagement from './pages/ProfileManagement'; import Transactions from './pages/Transactions'; import SecurityPrivacySettings from './pages/SecurityPrivacySettings'; import NotificationSettings from './pages/NotificationSettings'; import HelpSupport from './pages/HelpSupport'; import ForgotPassword from './pages/ForgotPassword'; import Analytics from './pages/Analytics'; import PaymentMethods from './pages/PaymentMethods'; import Settings from './pages/Settings'; import { BudgetProvider } from './contexts/BudgetContext'; import PrivateRoute from './components/auth/PrivateRoute'; import { initSyncState, startNetworkMonitoring } from './utils/syncUtils'; // 전역 오류 핸들러 const handleError = (error: Error | unknown) => { console.error('앱 오류 발생:', error); }; // 오류 경계 컴포넌트 class ErrorBoundary extends React.Component<{ children: React.ReactNode; }, { hasError: boolean; error: Error | null; }> { constructor(props: { children: React.ReactNode; }) { super(props); this.state = { hasError: false, error: null }; } static getDerivedStateFromError(error: Error) { return { hasError: true, error }; } componentDidCatch(error: Error, errorInfo: React.ErrorInfo) { handleError({ error, errorInfo }); } render() { if (this.state.hasError) { return

오류가 발생했습니다

앱에서 예상치 못한 오류가 발생했습니다. 페이지를 새로고침하거나 나중에 다시 시도해주세요.

              {this.state.error?.message}
            
; } return this.props.children; } } function App() { // 앱 로딩이 완료되었을 때 스플래시 화면을 숨김 useEffect(() => { // 웹뷰 콘텐츠가 완전히 로드되었을 때만 스플래시 화면을 숨김 const onAppReady = async () => { try { // 네트워크 모니터링 및 동기화 상태 초기화 await initSyncState(); console.log('동기화 상태 초기화 완료'); // 스플래시 화면을 더 빠르게 숨김 (데이터 로딩과 별도로 진행) setTimeout(async () => { try { await SplashScreen.hide(); console.log('스플래시 화면 숨김 성공'); } catch (err) { console.error('스플래시 화면 숨김 오류:', err); } }, 300); // 300ms로 줄임 } catch (err) { console.error('앱 준비 오류:', err); } }; // 앱 준비 함수 실행 onAppReady(); // 추가 보호장치: 페이지 로드 시 다시 실행 const handleLoad = () => { // 즉시 스플래시 화면을 숨김 시도 SplashScreen.hide().catch(() => {}); // 백업 시도 setTimeout(() => { SplashScreen.hide().catch(() => {}); }, 300); }; window.addEventListener('load', handleLoad); return () => { window.removeEventListener('load', handleLoad); }; }, []); return
{/* 상단 여백 5px에서 10px로 증가 */}
} /> } /> } /> } /> } /> {/* 지출 페이지는 더 이상 인증이 필요하지 않음 */} } /> {/* 분석 페이지는 더 이상 인증이 필요하지 않음 */} } /> {/* 보안 및 개인정보 페이지도 로그인 없이 접근 가능하도록 수정 */} } /> } /> } /> } /> } /> } />
; } export default App;