import React, { useState, useEffect } from 'react'; import Navbar from './components/common/Navbar'; import LandingPage from './components/pages/LandingPage'; import LoginPage from './components/pages/LoginPage'; import SignupPage from './components/pages/SignupPage'; import DoctorSignup from './components/pages/DoctorSignup'; import PatientSignup from './components/pages/PatientSignup'; import PatientHomePage from './components/pages/PatientHomePage'; import DoctorHomePage from './components/pages/DoctorHomePage'; import SymptomTestPage from './components/pages/SymptomTestPage'; import TestHistoryPage from './components/pages/TestHistoryPage'; import TestResultPage from './components/pages/TestResultPage'; import XRayUploadPage from './components/pages/XRayUploadPage'; import { supabase } from './lib/supabase'; import api from './lib/api'; // import { Loader } from 'lucide-react'; // Removed import { GooeyLoader } from './components/common/GooeyLoader'; // Added const App = () => { const [currentPage, setCurrentPage] = useState('landing'); const [loading, setLoading] = useState(true); const [pageData, setPageData] = useState(null); const [symptomAnswers, setSymptomAnswers] = useState({}); const [isCheckingAuth, setIsCheckingAuth] = useState(false); const [user, setUser] = useState(null); useEffect(() => { let mounted = true; const safetyTimer = setTimeout(() => { if (mounted && loading) { setLoading(false); } }, 5000); const initApp = async () => { if (isCheckingAuth) return; try { setIsCheckingAuth(true); const { data: { session }, error } = await supabase.auth.getSession(); if (error) { if (mounted) { setCurrentPage('landing'); setLoading(false); } return; } if (session?.user && mounted) { setUser(session.user); await fetchUserRole(session.user); } else if (mounted) { setCurrentPage('landing'); setLoading(false); } } catch (error) { if (mounted) { setCurrentPage('landing'); setLoading(false); } } finally { if (mounted) setIsCheckingAuth(false); } }; initApp(); const { data: { subscription } } = supabase.auth.onAuthStateChange(async (event, session) => { if (event === 'SIGNED_IN' && session) { if (mounted) { setUser(session.user); if (!isCheckingAuth) { setIsCheckingAuth(true); await fetchUserRole(session.user); setIsCheckingAuth(false); } } } else if (event === 'SIGNED_OUT') { if (mounted) { setUser(null); setCurrentPage('landing'); setLoading(false); } } }); return () => { mounted = false; clearTimeout(safetyTimer); subscription.unsubscribe(); }; }, []); const fetchUserRole = async (currentUser) => { try { const response = await api.get('/profile/'); const role = response.data.role; if (role === 'doctor') { setCurrentPage('doctor-home'); } else { setCurrentPage('patient-home'); } setLoading(false); } catch (err) { // Logic: User Auth'd but no Profile -> Redirect to Profile Setup if (err.response && err.response.status === 404) { console.log("ℹ️ User authenticated but no profile found. Redirecting to setup."); setCurrentPage('patient-signup'); } else { console.error("Profile fetch error:", err); const role = currentUser?.user_metadata?.role; if (role === 'doctor') { setCurrentPage('doctor-home'); } else { setCurrentPage('patient-home'); } } setLoading(false); } }; const handleLogout = async () => { try { await supabase.auth.signOut(); } catch (error) { console.error("❌ Logout error:", error); } }; const handleNavigate = (page, data = null) => { setCurrentPage(page); if (data) setPageData(data); }; const renderPage = () => { switch (currentPage) { // Pass User & Logout to Landing Page case 'landing': return ; case 'login': return ; case 'signup': return ; case 'doctor-signup': return ; case 'patient-signup': return ; case 'patient-home': return ; case 'doctor-home': return ; case 'test-history': return ; case 'symptom-test': return ; case 'xray-upload': return ; case 'test-result': return ; default: return ; } }; if (loading) { return (
{/* Changed Loader to GooeyLoader */}

Loading...

); } // Updated exclusion list: Added 'landing' to prevent double navbar const showNavbar = !['landing', 'login', 'signup', 'doctor-signup', 'patient-signup', 'patient-home', 'doctor-home', 'test-history', 'symptom-test', 'xray-upload', 'test-result'].includes(currentPage); const isUserLoggedIn = !!user; return (
{showNavbar && ( handleNavigate('login')} onLogout={handleLogout} userType={null} onNavigate={handleNavigate} /> )} {renderPage()}
); }; export default App;