Steuerungsmethode
@@ -85,7 +55,7 @@ export function InitiativeSteeringMeta({
{methodDescription}
)}
- {!compact && !steeringSnapshot && archetype?.default_method_key && !profileKey && (
+ {!compact && !steeringSnapshot && archetype?.default_method_key && (
Wird beim Anlegen automatisch vom Archetyp abgeleitet.
diff --git a/frontend/src/components/MethodProfileSelect.jsx b/frontend/src/components/MethodProfileSelect.jsx
deleted file mode 100644
index ca0f974..0000000
--- a/frontend/src/components/MethodProfileSelect.jsx
+++ /dev/null
@@ -1,56 +0,0 @@
-import { useEffect, useState } from 'react'
-import { listMethodProfiles } from '../api/methodProfiles.js'
-
-export function MethodProfileSelect({
- archetypeKey,
- value = '',
- onChange,
- disabled = false,
-}) {
- const [profiles, setProfiles] = useState([])
-
- useEffect(() => {
- if (!archetypeKey) {
- setProfiles([])
- return undefined
- }
- let cancelled = false
- listMethodProfiles(archetypeKey)
- .then((items) => {
- if (!cancelled) setProfiles(Array.isArray(items) ? items : [])
- })
- .catch(() => {
- if (!cancelled) setProfiles([])
- })
- return () => {
- cancelled = true
- }
- }, [archetypeKey])
-
- if (profiles.length === 0) {
- return (
-
- Keine Referenz-Ausprägung für diesen Archetyp hinterlegt.
-
- )
- }
-
- return (
-
- )
-}
diff --git a/frontend/src/components/ModeAreaNav.jsx b/frontend/src/components/ModeAreaNav.jsx
new file mode 100644
index 0000000..d013e7b
--- /dev/null
+++ b/frontend/src/components/ModeAreaNav.jsx
@@ -0,0 +1,63 @@
+import { NavLink, useLocation } from 'react-router-dom'
+import { useProgramScope } from '../context/ProgramScopeContext.jsx'
+
+/**
+ * Bereichs-Subnav (Mitai Settings/Admin-Shell).
+ *
+ * @param {{
+ * modeLabel: string,
+ * items: { key: string, to: string, label: string, labelFor?: (ctx: object) => string }[],
+ * resolveActiveKey?: (pathname: string) => string | null,
+ * showScope?: boolean,
+ * scopeMutedLabel?: string,
+ * }} props
+ */
+export function ModeAreaNav({
+ modeLabel,
+ items,
+ resolveActiveKey,
+ showScope = false,
+ scopeMutedLabel = 'Portfolio',
+}) {
+ const location = useLocation()
+ const { initiativeId, initiativeTitle, hrefWithScope } = useProgramScope()
+ const activeKey = resolveActiveKey?.(location.pathname)
+
+ return (
+
+ )
+}
diff --git a/frontend/src/components/ModeAreaShell.jsx b/frontend/src/components/ModeAreaShell.jsx
new file mode 100644
index 0000000..a69f0a4
--- /dev/null
+++ b/frontend/src/components/ModeAreaShell.jsx
@@ -0,0 +1,11 @@
+/**
+ * Mitai analysis-split: linke Sub-Nav + Hauptinhalt (Desktop), gestapelt (Mobile).
+ */
+export function ModeAreaShell({ nav, children }) {
+ return (
+
+ )
+}
diff --git a/frontend/src/components/ModeSubNav.jsx b/frontend/src/components/ModeSubNav.jsx
deleted file mode 100644
index c0702b1..0000000
--- a/frontend/src/components/ModeSubNav.jsx
+++ /dev/null
@@ -1,26 +0,0 @@
-import { NavLink } from 'react-router-dom'
-import { useProgramScope } from '../context/ProgramScopeContext.jsx'
-
-/**
- * @param {{ items: { to: string, label: string, end?: boolean }[] }} props
- */
-export function ModeSubNav({ items }) {
- const { hrefWithScope } = useProgramScope()
-
- return (
-
- )
-}
diff --git a/frontend/src/components/PlanOutlineNav.jsx b/frontend/src/components/PlanOutlineNav.jsx
index 6327c75..761d48b 100644
--- a/frontend/src/components/PlanOutlineNav.jsx
+++ b/frontend/src/components/PlanOutlineNav.jsx
@@ -1,10 +1,8 @@
import { NavLink, useLocation } from 'react-router-dom'
import { useEffect, useState } from 'react'
-import { getInitiative, listInitiativeActions } from '../api/initiatives.js'
+import { listInitiativeActions } from '../api/initiatives.js'
import { listInitiativeBacklog } from '../api/backlog.js'
import { useProgramScope } from '../context/ProgramScopeContext.jsx'
-import { useEntityArchetypes } from '../hooks/useEntityArchetypes.js'
-import { InitiativeSteeringMeta } from './InitiativeSteeringMeta.jsx'
import {
PLAN_OUTLINE_NODES,
resolvePlanOutlineActiveKey,
@@ -13,28 +11,8 @@ import {
export function PlanOutlineNav() {
const location = useLocation()
const { initiativeId, initiativeTitle, hrefWithScope } = useProgramScope()
- const { initiativeArchetypes } = useEntityArchetypes()
const activeKey = resolvePlanOutlineActiveKey(location.pathname)
const [counts, setCounts] = useState({ inbox: null, work: null })
- const [initiativeArchetypeKey, setInitiativeArchetypeKey] = useState('')
-
- useEffect(() => {
- if (!initiativeId) {
- setInitiativeArchetypeKey('')
- return undefined
- }
- let cancelled = false
- getInitiative(initiativeId)
- .then((data) => {
- if (!cancelled) setInitiativeArchetypeKey(data.archetype_key || '')
- })
- .catch(() => {
- if (!cancelled) setInitiativeArchetypeKey('')
- })
- return () => {
- cancelled = true
- }
- }, [initiativeId])
useEffect(() => {
if (!initiativeId) {
@@ -70,29 +48,21 @@ export function PlanOutlineNav() {
}
return (
-