diff --git a/src/App.tsx b/src/App.tsx
index 3af44a4..e58ed68 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -1,4 +1,5 @@
import { Routes, Route, Navigate } from 'react-router'
+import { Component, type ReactNode } from 'react'
import { StoreProvider, useStore } from './store/store'
import AppLayout from './components/AppLayout'
import Login from './pages/Login'
@@ -9,6 +10,35 @@ import Documents from './pages/Documents'
import Messages from './pages/Messages'
import BenutzerVerwaltung from './pages/BenutzerVerwaltung'
+/** Fängt Render-Fehler ab – statt schwarzem Bildschirm: Hinweis + Reload. */
+class FehlerGrenze extends Component<{ children: ReactNode }, { fehler: boolean }> {
+ state = { fehler: false }
+ static getDerivedStateFromError() {
+ return { fehler: true }
+ }
+ render() {
+ if (this.state.fehler) {
+ return (
+
+
+
Da ist etwas schiefgelaufen
+
+ Die Seite konnte nicht korrekt dargestellt werden. Ein Neuladen hilft in der Regel weiter.
+
+
+
+
+ )
+ }
+ return this.props.children
+ }
+}
+
function Ladebildschirm() {
return (
@@ -36,8 +66,9 @@ function LoginGate() {
export default function App() {
return (
-
-
+
+
+
} />
} />
-
+
+
)
}
diff --git a/src/store/store.tsx b/src/store/store.tsx
index eefab5e..4fb74bc 100644
--- a/src/store/store.tsx
+++ b/src/store/store.tsx
@@ -112,9 +112,9 @@ export function StoreProvider({ children }: { children: ReactNode }) {
;(async () => {
try {
const { benutzer } = await apiGet<{ benutzer: Benutzer }>('/api/auth/me')
+ await ladeAlles() // erst Daten, dann me – sonst rendern Seiten gegen leere Daten
if (!aktiv) return
setMe(benutzer)
- await ladeAlles()
} catch {
/* nicht angemeldet – Login-Seite zeigen */
} finally {
@@ -148,8 +148,8 @@ export function StoreProvider({ children }: { children: ReactNode }) {
benutzername,
passwortHash: await sha256(passwort),
})
+ await ladeAlles() // erst Daten, dann me (s. useEffect)
setMe(benutzer)
- await ladeAlles()
return null
} catch (e) {
return fehlerNachricht(e)
@@ -173,8 +173,8 @@ export function StoreProvider({ children }: { children: ReactNode }) {
email,
passwortHash: await sha256(passwort),
})
+ await ladeAlles() // erst Daten, dann me (s. useEffect)
setMe(benutzer)
- await ladeAlles()
return null
} catch (e) {
return fehlerNachricht(e)