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 (
} />
} />
} />
);
}