diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index 95c5db3..e8b1e43 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -15,6 +15,7 @@ import LoginPage from './pages/LoginPage' import VerifyPage from './pages/VerifyPage' import Dashboard from './pages/Dashboard' import AccountSettingsPage from './pages/AccountSettingsPage' +import SettingsSystemInfoPage from './pages/SettingsSystemInfoPage' import ExercisesListPage from './pages/ExercisesListPage' import ExerciseDetailPage from './pages/ExerciseDetailPage' import ExerciseFormPage from './pages/ExerciseFormPage' @@ -156,6 +157,7 @@ function AppRoutes() { } /> } /> } /> + } /> } /> } /> diff --git a/frontend/src/pages/AccountSettingsPage.jsx b/frontend/src/pages/AccountSettingsPage.jsx index ea6634c..28fdc64 100644 --- a/frontend/src/pages/AccountSettingsPage.jsx +++ b/frontend/src/pages/AccountSettingsPage.jsx @@ -1,4 +1,5 @@ import { useState, useEffect } from 'react' +import { Link } from 'react-router-dom' import { useAuth } from '../context/AuthContext' import api from '../utils/api' @@ -411,6 +412,11 @@ function AccountSettingsPage() { + +

+ Technische Systeminformationen + {' — App-Version, Build, Umgebung, Datenbankschema'} +

) } diff --git a/frontend/src/pages/Dashboard.jsx b/frontend/src/pages/Dashboard.jsx index 0efd99c..6dc8ee9 100644 --- a/frontend/src/pages/Dashboard.jsx +++ b/frontend/src/pages/Dashboard.jsx @@ -19,7 +19,6 @@ function formatCappedCount(n, capped) { } function Dashboard() { - const [version, setVersion] = useState(null) const [profile, setProfile] = useState(null) const [loading, setLoading] = useState(true) const [trainingHome, setTrainingHome] = useState(null) @@ -146,8 +145,7 @@ function Dashboard() { const loadData = async () => { try { - const [versionData, profileData] = await Promise.all([api.getVersion(), api.getCurrentProfile()]) - setVersion(versionData) + const profileData = await api.getCurrentProfile() setProfile(profileData) } catch (err) { console.error('Failed to load data:', err) @@ -372,34 +370,6 @@ function Dashboard() { ) : null} - - {version ? ( -
-

System

-
- Version - {version.app_version} - Build - {version.build_date} - Umgebung - {version.environment} - DB Schema - {version.db_schema_version} - Dein Tier - - - {profile?.tier || 'free'} - - - Rolle - {profile?.role || 'user'} -
-
- ) : null} ) } diff --git a/frontend/src/pages/SettingsSystemInfoPage.jsx b/frontend/src/pages/SettingsSystemInfoPage.jsx new file mode 100644 index 0000000..9e1fcc3 --- /dev/null +++ b/frontend/src/pages/SettingsSystemInfoPage.jsx @@ -0,0 +1,100 @@ +import { useState, useEffect } from 'react' +import { Link } from 'react-router-dom' +import { useAuth } from '../context/AuthContext' +import api from '../utils/api' + +/** + * Technische System- und Build-Infos (ehemals Dashboard) — unter Einstellungen für Betrieb/Diagnose. + */ +function SettingsSystemInfoPage() { + const { user } = useAuth() + const [version, setVersion] = useState(null) + const [err, setErr] = useState(null) + const [loading, setLoading] = useState(true) + + useEffect(() => { + let cancelled = false + ;(async () => { + setErr(null) + try { + const v = await api.getVersion() + if (!cancelled) setVersion(v) + } catch (e) { + if (!cancelled) setErr(e.message || String(e)) + } finally { + if (!cancelled) setLoading(false) + } + })() + return () => { + cancelled = true + } + }, []) + + return ( +
+

+ + ← Zurück zu Einstellungen + +

+

Systeminformationen

+

+ Build, Umgebung und Schema-Stand der App — hilfreich für Support oder nach Deployments. Tarif und Rolle + beziehen sich auf dein Konto. +

+ + {loading ? ( +

+ Version wird geladen… +

+ ) : null} + {err ? ( +

+ {err} +

+ ) : null} + + {version ? ( +
+

+ System +

+
+ Version + {version.app_version} + Build + {version.build_date} + Umgebung + {version.environment} + DB Schema + {version.db_schema_version} + Dein Tier + + + {user?.tier || 'free'} + + + Rolle + {user?.role || 'user'} +
+
+ ) : null} +
+ ) +} + +export default SettingsSystemInfoPage