import { Routes, Route, Navigate, NavLink, useNavigate, useLocation } from 'react-router-dom' import { useState, useEffect } from 'react' import { hasToken, clearToken, api } from './api' import Login from './pages/Login' import Dashboard from './pages/Dashboard' import LogActivity from './pages/LogActivity' import LogFood from './pages/LogFood' import Nutrition from './pages/Nutrition' import Rewards from './pages/Rewards' import Settings from './pages/Settings' import Onboarding from './pages/Onboarding' import WeekView from './pages/WeekView' import Welcome from './pages/Welcome' import SettingsIntegrations from './pages/SettingsIntegrations' import MealPlan from './pages/MealPlan' import ProgramSearch from './pages/ProgramSearch' import ProgramDetail from './pages/ProgramDetail' import CatalogDetail from './pages/CatalogDetail' import Support from './pages/Support' import SupportAdmin from './pages/SupportAdmin' import ChatCoach from './pages/ChatCoach' import AgentConnect from './pages/AgentConnect' function ProtectedRoute({ children }) { if (!hasToken()) return return children } function HelpButton() { const [unread, setUnread] = useState(0) const navigate = useNavigate() const location = useLocation() // Don't show on login/onboarding/support pages const hidden = ['/login', '/onboarding', '/support'].some(p => location.pathname.startsWith(p)) useEffect(() => { if (hidden || !hasToken()) return api.getUnreadCount() .then(d => setUnread(d.unread || 0)) .catch(() => {}) // Poll every 60s for new replies const interval = setInterval(() => { api.getUnreadCount() .then(d => setUnread(d.unread || 0)) .catch(() => {}) }, 60000) return () => clearInterval(interval) }, [location.pathname, hidden]) if (hidden) return null return ( ) } function NavBar() { return ( ) } export default function App() { return ( <> {hasToken() && } {hasToken() && ( ⚙️ )} } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> {hasToken() && } ) }