2026-07-05 18:29:47 +02:00
|
|
|
import { Navigate, Route, Routes, useParams } from 'react-router-dom'
|
2026-07-05 06:41:23 +02:00
|
|
|
import { SessionProvider, useSession } from './context/SessionContext.jsx'
|
|
|
|
|
import { AppLayout } from './layout/AppLayout.jsx'
|
2026-07-05 18:29:47 +02:00
|
|
|
import { InitiativeLayout } from './layout/InitiativeLayout.jsx'
|
2026-07-05 06:41:23 +02:00
|
|
|
import { AuthPanel } from './pages/AuthPanel.jsx'
|
2026-07-05 18:29:47 +02:00
|
|
|
import { ActionDetailPage } from './pages/ActionDetailPage.jsx'
|
|
|
|
|
import { InitiativeOverviewPage } from './pages/initiative/InitiativeOverviewPage.jsx'
|
|
|
|
|
import { InitiativePlanPage } from './pages/initiative/InitiativePlanPage.jsx'
|
|
|
|
|
import { InitiativeExecutionPage } from './pages/initiative/InitiativeExecutionPage.jsx'
|
|
|
|
|
import { InitiativeInboxPage } from './pages/initiative/InitiativeInboxPage.jsx'
|
|
|
|
|
import { InitiativeJourneyPage } from './pages/initiative/InitiativeJourneyPage.jsx'
|
2026-07-06 06:53:49 +02:00
|
|
|
import { RoadmapItemDetailPage } from './pages/initiative/RoadmapItemDetailPage.jsx'
|
2026-07-05 06:41:23 +02:00
|
|
|
import { VIEWS } from './registry/viewRegistry.js'
|
|
|
|
|
import './app.css'
|
|
|
|
|
|
2026-07-05 18:29:47 +02:00
|
|
|
function InitiativeLegacyDetailRedirect() {
|
|
|
|
|
const { id } = useParams()
|
|
|
|
|
return <Navigate to={`/initiatives/${id}`} replace />
|
|
|
|
|
}
|
|
|
|
|
|
2026-07-05 06:41:23 +02:00
|
|
|
function AppRoutes() {
|
|
|
|
|
const { isAuthenticated, loading } = useSession()
|
|
|
|
|
|
|
|
|
|
if (loading) {
|
|
|
|
|
return null
|
2026-07-04 20:17:03 +02:00
|
|
|
}
|
|
|
|
|
|
2026-07-05 06:41:23 +02:00
|
|
|
if (!isAuthenticated) {
|
|
|
|
|
return <AuthPanel />
|
2026-07-04 20:17:03 +02:00
|
|
|
}
|
|
|
|
|
|
2026-07-05 18:29:47 +02:00
|
|
|
const topLevelViews = VIEWS.filter((v) => v.key !== 'kairo.initiative_detail')
|
|
|
|
|
|
2026-07-04 19:15:43 +02:00
|
|
|
return (
|
2026-07-05 06:41:23 +02:00
|
|
|
<Routes>
|
|
|
|
|
<Route element={<AppLayout />}>
|
2026-07-05 18:29:47 +02:00
|
|
|
{topLevelViews.map((view) => (
|
2026-07-05 06:41:23 +02:00
|
|
|
<Route key={view.key} path={view.path} element={<view.component />} />
|
|
|
|
|
))}
|
2026-07-05 18:29:47 +02:00
|
|
|
<Route path="/initiatives/:id" element={<InitiativeLayout />}>
|
|
|
|
|
<Route index element={<InitiativeOverviewPage />} />
|
|
|
|
|
<Route path="plan" element={<InitiativePlanPage />} />
|
2026-07-06 06:53:49 +02:00
|
|
|
<Route path="plan/items/:itemId" element={<RoadmapItemDetailPage />} />
|
2026-07-05 18:29:47 +02:00
|
|
|
<Route path="execution" element={<InitiativeExecutionPage />} />
|
|
|
|
|
<Route path="inbox" element={<InitiativeInboxPage />} />
|
|
|
|
|
<Route path="journey" element={<InitiativeJourneyPage />} />
|
|
|
|
|
<Route path="actions/:actionId" element={<ActionDetailPage nested />} />
|
|
|
|
|
</Route>
|
|
|
|
|
<Route path="/initiatives/:id/detail" element={<InitiativeLegacyDetailRedirect />} />
|
|
|
|
|
<Route path="/actions/:actionId" element={<ActionDetailPage />} />
|
2026-07-05 06:41:23 +02:00
|
|
|
<Route path="/" element={<Navigate to="/workspace" replace />} />
|
|
|
|
|
<Route path="*" element={<Navigate to="/workspace" replace />} />
|
|
|
|
|
</Route>
|
|
|
|
|
</Routes>
|
|
|
|
|
)
|
|
|
|
|
}
|
2026-07-04 20:19:02 +02:00
|
|
|
|
2026-07-05 06:41:23 +02:00
|
|
|
export default function App() {
|
|
|
|
|
return (
|
|
|
|
|
<SessionProvider>
|
|
|
|
|
<AppRoutes />
|
|
|
|
|
</SessionProvider>
|
2026-07-04 19:15:43 +02:00
|
|
|
)
|
|
|
|
|
}
|