Kairo-Jinkendo/frontend/src/pages/modes/WorkLayout.jsx

55 lines
1.7 KiB
React
Raw Normal View History

import { Navigate, Outlet } from 'react-router-dom'
import { useMemo } from 'react'
import { ModeAreaShell } from '../../components/ModeAreaShell.jsx'
import { ModeAreaNav } from '../../components/ModeAreaNav.jsx'
import { ModeShell } from '../../components/ModeShell.jsx'
import { WORK_NAV_ITEMS, resolveWorkNavActiveKey } from '../../config/workNav.js'
import { useProgramScope } from '../../context/ProgramScopeContext.jsx'
import { useMethodUiContext } from '../../hooks/useMethodUiContext.js'
import { resolveWorkNavItemsFromProfile } from '../../registry/resolveOperatingProfile.js'
function WorkAreaNav() {
const { initiativeId } = useProgramScope()
const { operatingContext, hasActiveSprint, loading } = useMethodUiContext()
const navItems = useMemo(() => {
if (!initiativeId) return WORK_NAV_ITEMS
if (loading && !operatingContext) return WORK_NAV_ITEMS
return resolveWorkNavItemsFromProfile({ operatingContext, hasActiveSprint })
}, [initiativeId, loading, operatingContext, hasActiveSprint])
return (
<ModeAreaNav
modeLabel="Ausführen"
items={navItems}
resolveActiveKey={resolveWorkNavActiveKey}
/>
)
}
export function WorkLayout() {
return (
<div className="app-page">
<ModeShell modeKey="work" />
<ModeAreaShell nav={<WorkAreaNav />}>
<Outlet />
</ModeAreaShell>
</div>
)
}
export function WorkIndexRedirect() {
const { initiativeId, hrefWithScope } = useProgramScope()
const { workDefaultRoute, loading, operatingContext } = useMethodUiContext()
if (!initiativeId) {
return <Navigate to="/work/today" replace />
}
if (loading && !operatingContext) {
return null
}
return <Navigate to={hrefWithScope(workDefaultRoute)} replace />
}