Kairo-Jinkendo/frontend/src/layout/AppLayout.jsx
Lars e42edd86fa
Some checks failed
Deploy Development / deploy (push) Successful in 47s
Test Suite / pytest-backend (push) Failing after 1m46s
Test Suite / k6 /api/health Baseline (push) Has been skipped
Test Suite / playwright-smoke (push) Has been skipped
Test Suite / lint-backend (push) Successful in 2s
Test Suite / compose-smoke (push) Has been skipped
AP1.9a: Arbeitsmodi-Shell mit Scope, Objekt-Routen und Legacy-Redirects.
Ersetzt die Vorhaben-Tab-Navigation durch Cockpit/Ausführen/Planen/Kontrolle/Team, Deep Links für APs/Projekte/Gates und Programm-Scope im Header.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-08 12:55:37 +02:00

61 lines
1.9 KiB
JavaScript

import { Outlet } from 'react-router-dom'
import { useSession } from '../context/SessionContext.jsx'
import { useCapabilities } from '../hooks/useCapabilities.js'
import { LoadingState } from '../components/LoadingState.jsx'
import { DesktopSidebar } from '../components/DesktopSidebar.jsx'
import { BottomNav } from '../components/BottomNav.jsx'
import { ContextIndicator } from '../components/ContextIndicator.jsx'
import { ProgramScopeBar } from '../components/ProgramScopeBar.jsx'
import { QuickJump } from '../components/QuickJump.jsx'
import { RecentlyOpened } from '../components/RecentlyOpened.jsx'
export function AppLayout() {
const { me, signOut, loading } = useSession()
const { capabilities } = useCapabilities()
if (loading) {
return (
<div className="app-shell">
<main className="app-main">
<div className="app-page">
<LoadingState message="Session wird geladen …" />
</div>
</main>
</div>
)
}
return (
<div className="app-shell">
<DesktopSidebar
capabilities={capabilities}
user={me}
onLogout={signOut}
/>
<div className="app-shell__column">
<header className="app-header app-header--mobile">
<div className="app-header__top">
<div className="app-brand">
<span className="app-brand__name">Kairo</span>
<span className="app-brand__family">Jinkendo Program Director</span>
</div>
<QuickJump />
</div>
<ContextIndicator variant="mobile" />
<ProgramScopeBar />
<RecentlyOpened />
</header>
<div className="app-chrome app-chrome--desktop">
<ProgramScopeBar />
<QuickJump />
<RecentlyOpened />
</div>
<main className="app-main">
<Outlet />
</main>
<BottomNav capabilities={capabilities} />
</div>
</div>
)
}