2026-03-19 06:23:03 +00:00
|
|
|
/**
|
|
|
|
|
* @license
|
|
|
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
|
|
|
*/
|
|
|
|
|
|
2026-03-20 08:39:07 +00:00
|
|
|
import type { ReactNode } from "react";
|
|
|
|
|
import { BrowserRouter, Navigate, Routes, Route } from "react-router-dom";
|
2026-03-19 06:23:03 +00:00
|
|
|
import Layout from "./components/Layout";
|
|
|
|
|
import Dashboard from "./pages/Dashboard";
|
|
|
|
|
import Expansion from "./pages/Expansion";
|
|
|
|
|
import Opportunities from "./pages/Opportunities";
|
|
|
|
|
import Work from "./pages/Work";
|
|
|
|
|
import Profile from "./pages/Profile";
|
|
|
|
|
import { ThemeProvider } from "./components/ThemeProvider";
|
2026-03-20 08:39:07 +00:00
|
|
|
import LoginPage from "./pages/Login";
|
|
|
|
|
import { isAuthed } from "./lib/auth";
|
|
|
|
|
|
|
|
|
|
function RequireAuth({ children }: { children: ReactNode }) {
|
|
|
|
|
if (!isAuthed()) {
|
|
|
|
|
return <Navigate to="/login" replace />;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return children;
|
|
|
|
|
}
|
2026-03-19 06:23:03 +00:00
|
|
|
|
|
|
|
|
export default function App() {
|
|
|
|
|
return (
|
|
|
|
|
<ThemeProvider defaultTheme="light" storageKey="crm-theme">
|
|
|
|
|
<BrowserRouter>
|
|
|
|
|
<Routes>
|
2026-03-20 08:39:07 +00:00
|
|
|
<Route path="/login" element={<LoginPage />} />
|
|
|
|
|
<Route
|
|
|
|
|
path="/"
|
|
|
|
|
element={
|
|
|
|
|
<RequireAuth>
|
|
|
|
|
<Layout />
|
|
|
|
|
</RequireAuth>
|
|
|
|
|
}
|
|
|
|
|
>
|
2026-03-19 06:23:03 +00:00
|
|
|
<Route index element={<Dashboard />} />
|
|
|
|
|
<Route path="expansion" element={<Expansion />} />
|
|
|
|
|
<Route path="opportunities" element={<Opportunities />} />
|
2026-03-26 09:29:55 +00:00
|
|
|
<Route path="work/*" element={<Work />} />
|
2026-03-19 06:23:03 +00:00
|
|
|
<Route path="profile" element={<Profile />} />
|
|
|
|
|
</Route>
|
|
|
|
|
</Routes>
|
|
|
|
|
</BrowserRouter>
|
|
|
|
|
</ThemeProvider>
|
|
|
|
|
);
|
|
|
|
|
}
|