import React, { createContext, useContext, useState, useEffect, ReactNode } from 'react'; import { BrowserRouter, Routes, Route, NavLink, Navigate } from 'react-router-dom'; import { AuthProvider, useAuth } from './auth'; import { api } from './api'; import Login from './pages/Login'; import Activate from './pages/Activate'; import Setup from './pages/Setup'; import Dashboard from './pages/Dashboard'; import Schedules from './pages/Schedules'; import TimeOff from './pages/TimeOff'; import Volunteers from './pages/Volunteers'; import Profile from './pages/Profile'; import './App.css'; function Nav() { const { role, logout } = useAuth(); return ( ); } function ProtectedLayout() { const { token } = useAuth(); if (!token) return ; return (
); } function LoginRoute() { const { token } = useAuth(); if (token) return ; return ; } // Setup context lets the Setup page flip needsSetup after creating the admin. const SetupContext = createContext<{ setNeedsSetup: (v: boolean) => void }>({ setNeedsSetup: () => {}, }); export const useSetup = () => useContext(SetupContext); function SetupGate({ children }: { children: ReactNode }) { const [needsSetup, setNeedsSetup] = useState(null); useEffect(() => { api.getSetupStatus() .then(r => setNeedsSetup(r.needs_setup)) .catch(() => setNeedsSetup(false)); }, []); if (needsSetup === null) return null; if (needsSetup) { return ( } /> } /> ); } return ( } /> } /> } /> } /> ); } export default function App() { return ( } /> } /> } /> ); }