import { useCallback, useEffect, useMemo, useState } from 'react' import './App.css' import { AppShell } from './components/AppShell.jsx' import { AgendaPage } from './pages/AgendaPage.jsx' import { AnalyticsPage } from './pages/AnalyticsPage.jsx' import { ForgotPasswordPage, LoginPage, RegisterPage } from './pages/AuthPages.jsx' import { HomePage } from './pages/HomePage.jsx' import { MedicalRecordsPage } from './pages/MedicalRecordsPage.jsx' import { MessagesPage } from './pages/MessagesPage.jsx' import { NotFoundPage } from './pages/NotFoundPage.jsx' import { PatientDetailPage, PatientsPage } from './pages/PatientsPage.jsx' import { ProfilePage } from './pages/ProfilePage.jsx' import { ReportsPage } from './pages/ReportsPage.jsx' import { SettingsPage } from './pages/SettingsPage.jsx' import { TeamPage } from './pages/TeamPage.jsx' import { VisitsPage } from './pages/VisitsPage.jsx' import { patientRepository } from './repositories/patientRepository.js' function App() { const [location, setLocation] = useState(() => readLocation()) const navigate = useCallback((to, options = {}) => { if (options.replace) { window.history.replaceState({}, '', to) } else { window.history.pushState({}, '', to) } setLocation(readLocation()) const hash = to.split('#')[1] window.requestAnimationFrame(() => { if (hash) { document.getElementById(hash)?.scrollIntoView({ block: 'start' }) } else { window.scrollTo({ left: 0, top: 0 }) } }) }, []) useEffect(() => { function handlePopState() { setLocation(readLocation()) } window.addEventListener('popstate', handlePopState) return () => window.removeEventListener('popstate', handlePopState) }, []) const route = useMemo(() => resolveRoute(location.pathname, navigate), [location.pathname, navigate]) if (!route.withShell) { return route.element } return ( {route.element} ) } function resolveRoute(pathname, navigate) { if (pathname === '/' || pathname === '/login') { return { element: , title: 'Login', withShell: false, } } if (pathname === '/cadastro') { return { element: , title: 'Cadastro', withShell: false, } } if (pathname === '/recuperar-senha') { return { element: , title: 'Recuperar senha', withShell: false, } } if (pathname === '/inicio' || pathname === '/home' || pathname === '/dashboard') { return { element: , title: 'Painel', withShell: true, } } if (pathname === '/agenda') { return { element: , title: 'Agenda', withShell: true, } } if (pathname === '/pacientes') { return { element: , title: 'Pacientes', withShell: true, } } if (pathname === '/prontuario') { return { element: , title: 'Prontuário', withShell: true, } } if (pathname.startsWith('/pacientes/')) { const patientId = pathname.split('/')[2] const patient = patientRepository.getById(patientId) return { element: patient ? ( ) : ( ), title: patient?.name || 'Paciente nao encontrado', withShell: true, } } if (pathname === '/consultas') { return { element: , title: 'Consultas', withShell: true, } } if (pathname === '/laudos') { return { element: , title: 'Laudos', withShell: true, } } if (pathname === '/relatorios') { return { element: , title: 'Relatórios', withShell: true, } } if (pathname === '/camunicacao' || pathname === '/comunicacao' || pathname === '/mensagens') { return { element: , title: 'Comunicação', withShell: true, } } if (pathname === '/profissionais') { return { element: , title: 'Profissionais', withShell: true, } } if (pathname === '/perfil') { return { element: , title: 'Perfil', withShell: true, } } if (pathname === '/configuracoes' || pathname === '/config') { return { element: , title: 'Configurações', withShell: true, } } return { element: , title: 'Tela nao encontrada', withShell: true, } } function readLocation() { return { pathname: normalizePath(window.location.pathname), search: window.location.search, } } function normalizePath(pathname) { if (!pathname || pathname === '/') { return '/' } return pathname.replace(/\/+$/, '') } export default App