fix(profile): Logbuch-KPI und Statistik-Fallback robuster laden

Profil bleibt bei fehlenden Client-Stats sichtbar; logbookCount nutzt lokale logbooks.length mit Server-Fallback statt totem ?? in ungerenderter Sektion.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-05-31 09:30:58 +02:00
co-authored by Cursor
parent b72b20b66c
commit 86cb4d92ec
+21 -11
View File
@@ -106,12 +106,16 @@ export default function UserProfilePage({ onBack, onLogout }: UserProfilePagePro
setLoading(true) setLoading(true)
setError(null) setError(null)
try { try {
const [profileData, stats] = await Promise.all([ const profileData = await fetchUserProfile()
fetchUserProfile(),
loadAccountStats(false)
])
setProfile(profileData) setProfile(profileData)
try {
const stats = await loadAccountStats(false)
setAccountStats(stats) setAccountStats(stats)
} catch (statsErr) {
console.error('Failed to load account stats for profile:', statsErr)
setAccountStats(null)
}
} catch (err: unknown) { } catch (err: unknown) {
setError(err instanceof Error ? err.message : t('profile.load_error')) setError(err instanceof Error ? err.message : t('profile.load_error'))
} finally { } finally {
@@ -124,6 +128,8 @@ export default function UserProfilePage({ onBack, onLogout }: UserProfilePagePro
}, [loadData]) }, [loadData])
const statsTotals = accountStats?.totals const statsTotals = accountStats?.totals
const logbookCount =
accountStats?.logbooks.length ?? profile?.serverMeta.ownedLogbookCount ?? 0
const accountAgeLabel = useMemo(() => { const accountAgeLabel = useMemo(() => {
if (!profile?.createdAt) return '—' if (!profile?.createdAt) return '—'
@@ -420,13 +426,15 @@ export default function UserProfilePage({ onBack, onLogout }: UserProfilePagePro
</div> </div>
</div> </div>
{statsTotals && ( {(statsTotals || profile) && (
<div className="stats-kpi-grid"> <div className="stats-kpi-grid">
<KpiCard <KpiCard
icon={<BookOpen size={20} />} icon={<BookOpen size={20} />}
label={t('profile.stats_logbooks')} label={t('profile.stats_logbooks')}
value={String(accountStats?.logbooks.length ?? profile.serverMeta.ownedLogbookCount)} value={String(logbookCount)}
/> />
{statsTotals && (
<>
<KpiCard <KpiCard
icon={<Anchor size={20} />} icon={<Anchor size={20} />}
label={t('stats.travel_days')} label={t('stats.travel_days')}
@@ -456,16 +464,18 @@ export default function UserProfilePage({ onBack, onLogout }: UserProfilePagePro
value={formatHours(statsTotals.totalMotorHours)} value={formatHours(statsTotals.totalMotorHours)}
unit={t('stats.unit_h')} unit={t('stats.unit_h')}
/> />
<KpiCard
icon={<Calendar size={20} />}
label={t('profile.stats_account_since')}
value={accountAgeLabel}
/>
<KpiCard <KpiCard
icon={<Share2 size={20} />} icon={<Share2 size={20} />}
label={t('profile.stats_shared_logbooks')} label={t('profile.stats_shared_logbooks')}
value={String(sharedLogbookCount)} value={String(sharedLogbookCount)}
/> />
</>
)}
<KpiCard
icon={<Calendar size={20} />}
label={t('profile.stats_account_since')}
value={accountAgeLabel}
/>
</div> </div>
)} )}
</section> </section>