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') && (
-
+
)}