import { Navigate, Outlet } from 'react-router-dom' import { useEffect, useState } 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 { resolveWorkNavItems } from '../../config/methodUiDefaults.js' import { useProgramScope } from '../../context/ProgramScopeContext.jsx' import { getInitiative } from '../../api/initiatives.js' import { getActiveWorkCycle } from '../../api/workCycles.js' import { resolveMethodUiDefaults } from '../../config/methodUiDefaults.js' function WorkAreaNav() { const { initiativeId } = useProgramScope() const [navItems, setNavItems] = useState(WORK_NAV_ITEMS) useEffect(() => { if (!initiativeId) { setNavItems(WORK_NAV_ITEMS) return undefined } let cancelled = false Promise.all([ getInitiative(initiativeId), getActiveWorkCycle(initiativeId).catch(() => null), ]) .then(([initiative, activeCycle]) => { if (cancelled) return setNavItems( resolveWorkNavItems({ archetypeKey: initiative?.archetype_key, hasActiveSprint: Boolean(activeCycle?.id), }), ) }) .catch(() => { if (!cancelled) setNavItems(WORK_NAV_ITEMS) }) return () => { cancelled = true } }, [initiativeId]) return ( ) } export function WorkLayout() { return (
}>
) } export function WorkIndexRedirect() { const { initiativeId, hrefWithScope } = useProgramScope() const [target, setTarget] = useState('/work/today') useEffect(() => { if (!initiativeId) { setTarget('/work/today') return undefined } let cancelled = false Promise.all([ getInitiative(initiativeId), getActiveWorkCycle(initiativeId).catch(() => null), ]) .then(([initiative, activeCycle]) => { if (cancelled) return const defaults = resolveMethodUiDefaults({ archetypeKey: initiative?.archetype_key, hasActiveSprint: Boolean(activeCycle?.id), }) setTarget(hrefWithScope(defaults.workDefaultRoute)) }) .catch(() => { if (!cancelled) setTarget(hrefWithScope('/work/today')) }) return () => { cancelled = true } }, [initiativeId, hrefWithScope]) return }