Kairo-Jinkendo/frontend/src/App.jsx

120 lines
4.4 KiB
React
Raw Normal View History

import { Navigate, Route, Routes } from 'react-router-dom'
import { SessionProvider, useSession } from './context/SessionContext.jsx'
import { ProgramScopeProvider } from './context/ProgramScopeContext.jsx'
import { AppLayout } from './layout/AppLayout.jsx'
import { AuthPanel } from './pages/AuthPanel.jsx'
import { ActionDetailPage } from './pages/ActionDetailPage.jsx'
import { ProjectObjectPage } from './pages/objects/ProjectObjectPage.jsx'
import { GateObjectPage } from './pages/objects/GateObjectPage.jsx'
import {
VIEWS,
WorkLayout,
WorkIndexRedirect,
PlanLayout,
PlanIndexRedirect,
ControlLayout,
ControlIndexRedirect,
MODE_ROUTE_COMPONENTS,
} from './registry/viewRegistry.js'
import {
WorkspaceRedirect,
MyActionsRedirect,
InitiativeRootRedirect,
InitiativePlanRedirect,
InitiativeExecutionRedirect,
InitiativeInboxRedirect,
InitiativeJourneyRedirect,
InitiativeGateRedirect,
InitiativeProjectRedirect,
InitiativeActionRedirect,
} from './pages/LegacyRedirects.jsx'
import './app.css'
function AppRoutes() {
const { isAuthenticated, loading } = useSession()
if (loading) {
return null
}
if (!isAuthenticated) {
return <AuthPanel />
}
const topLevelViews = VIEWS.filter(
(v) =>
![
'kairo.workspace',
'kairo.my_actions',
'kairo.work',
'kairo.plan',
'kairo.control',
].includes(v.key),
)
return (
<ProgramScopeProvider>
<Routes>
<Route element={<AppLayout />}>
{topLevelViews.map((view) => (
<Route key={view.key} path={view.path} element={<view.component />} />
))}
<Route path="/work" element={<WorkLayout />}>
<Route index element={<WorkIndexRedirect />} />
<Route path="today" element={<MODE_ROUTE_COMPONENTS.workToday />} />
<Route path="mine" element={<MODE_ROUTE_COMPONENTS.workMine />} />
</Route>
<Route path="/plan" element={<PlanLayout />}>
<Route index element={<PlanIndexRedirect />} />
<Route path="portfolio" element={<MODE_ROUTE_COMPONENTS.planPortfolio />} />
<Route path="profile" element={<MODE_ROUTE_COMPONENTS.planProfile />} />
<Route path="structure" element={<MODE_ROUTE_COMPONENTS.planStructure />} />
<Route path="gates" element={<MODE_ROUTE_COMPONENTS.planGates />} />
<Route path="inbox" element={<MODE_ROUTE_COMPONENTS.planInbox />} />
<Route path="work" element={<MODE_ROUTE_COMPONENTS.planWork />} />
</Route>
<Route path="/control" element={<ControlLayout />}>
<Route index element={<ControlIndexRedirect />} />
<Route path="status" element={<MODE_ROUTE_COMPONENTS.controlStatus />} />
<Route path="journey" element={<MODE_ROUTE_COMPONENTS.controlJourney />} />
</Route>
<Route path="/projects/:projectId" element={<ProjectObjectPage />} />
<Route path="/gates/:gateId" element={<GateObjectPage />} />
<Route path="/actions/:actionId" element={<ActionDetailPage />} />
<Route path="/workspace" element={<WorkspaceRedirect />} />
<Route path="/my-actions" element={<MyActionsRedirect />} />
<Route path="/initiatives/:id" element={<InitiativeRootRedirect />} />
<Route path="/initiatives/:id/plan" element={<InitiativePlanRedirect />} />
<Route path="/initiatives/:id/plan/items/:itemId" element={<InitiativeGateRedirect />} />
<Route path="/initiatives/:id/execution" element={<InitiativeExecutionRedirect />} />
<Route
path="/initiatives/:id/execution/projects/:projectId"
element={<InitiativeProjectRedirect />}
/>
<Route path="/initiatives/:id/inbox" element={<InitiativeInboxRedirect />} />
<Route path="/initiatives/:id/journey" element={<InitiativeJourneyRedirect />} />
<Route path="/initiatives/:id/actions/:actionId" element={<InitiativeActionRedirect />} />
<Route path="/initiatives/:id/detail" element={<InitiativeRootRedirect />} />
<Route path="/" element={<Navigate to="/cockpit" replace />} />
<Route path="*" element={<Navigate to="/cockpit" replace />} />
</Route>
</Routes>
</ProgramScopeProvider>
)
}
export default function App() {
return (
<SessionProvider>
<AppRoutes />
</SessionProvider>
)
}