diff --git a/frontend/src/components/SteeringSnapshotPanel.jsx b/frontend/src/components/SteeringSnapshotPanel.jsx index 7119172..7bf3ab3 100644 --- a/frontend/src/components/SteeringSnapshotPanel.jsx +++ b/frontend/src/components/SteeringSnapshotPanel.jsx @@ -1,7 +1,26 @@ import { PHASE_LABELS } from '../constants/operating.js' -export function SteeringSnapshotPanel({ snapshot }) { - if (!snapshot) return null +export function SteeringSnapshotPanel({ snapshot, loading, error }) { + if (loading) { + return ( +
+

Steuerungszustand wird geladen …

+
+ ) + } + + if (error || !snapshot) { + return ( +
+
+

Steuerungszustand

+
+

+ {error || 'Snapshot nicht verfügbar — bitte Seite neu laden (Strg+F5).'} +

+
+ ) + } const { operating_phase, phase_signals, counts } = snapshot const phaseLabel = PHASE_LABELS[operating_phase] || operating_phase diff --git a/frontend/src/pages/InitiativeDetailPage.jsx b/frontend/src/pages/InitiativeDetailPage.jsx index cf6fc0c..23fd7cd 100644 --- a/frontend/src/pages/InitiativeDetailPage.jsx +++ b/frontend/src/pages/InitiativeDetailPage.jsx @@ -91,6 +91,8 @@ export function InitiativeDetailPage() { const [reviews, setReviews] = useState([]) const [recurringItems, setRecurringItems] = useState([]) const [steeringSnapshot, setSteeringSnapshot] = useState(null) + const [steeringSnapshotLoading, setSteeringSnapshotLoading] = useState(false) + const [steeringSnapshotError, setSteeringSnapshotError] = useState(null) const [loading, setLoading] = useState(true) const [error, setError] = useState(null) const [showActionForm, setShowActionForm] = useState(false) @@ -123,9 +125,18 @@ export function InitiativeDetailPage() { loads.push(listInitiativeReviews(id).then(setReviews).catch(() => setReviews([]))) loads.push(listInitiativeRecurring(id).then(setRecurringItems).catch(() => setRecurringItems([]))) loads.push( - getInitiativeSteeringSnapshot(id) - .then(setSteeringSnapshot) - .catch(() => setSteeringSnapshot(null)) + (async () => { + setSteeringSnapshotLoading(true) + setSteeringSnapshotError(null) + try { + setSteeringSnapshot(await getInitiativeSteeringSnapshot(id)) + } catch (err) { + setSteeringSnapshot(null) + setSteeringSnapshotError(err.message || 'Snapshot fehlgeschlagen') + } finally { + setSteeringSnapshotLoading(false) + } + })() ) } await Promise.all(loads) @@ -483,7 +494,11 @@ export function InitiativeDetailPage() { {error &&

{error}

} {capabilities.has('kairo.initiative.read') && ( - + )}