Commercial frontend cleanup: fix admin TypeError, simplify UI for end users, add Suspense boundaries

This commit is contained in:
2025-11-30 22:28:59 +01:00
parent 3346817a8a
commit d31a132808
7 changed files with 323 additions and 452 deletions

View File

@@ -329,9 +329,9 @@ export default function AdminPage() {
</div>
<span className="text-zinc-400 text-sm">Total Requests</span>
</div>
<div className="text-3xl font-bold">{dashboard.rate_limits.total_requests.toLocaleString()}</div>
<div className="text-3xl font-bold">{(dashboard.rate_limits?.total_requests ?? 0).toLocaleString()}</div>
<div className="text-sm text-zinc-500 mt-1">
{dashboard.rate_limits.active_clients} active clients
{dashboard.rate_limits?.active_clients ?? 0} active clients
</div>
</div>
@@ -343,9 +343,9 @@ export default function AdminPage() {
</div>
<span className="text-zinc-400 text-sm">Translations</span>
</div>
<div className="text-3xl font-bold">{dashboard.translations.total.toLocaleString()}</div>
<div className="text-3xl font-bold">{(dashboard.translations?.total ?? 0).toLocaleString()}</div>
<div className="text-sm text-zinc-500 mt-1">
{dashboard.translations.success_rate}% success rate
{dashboard.translations?.success_rate ?? 0}% success rate
</div>
</div>
@@ -357,9 +357,9 @@ export default function AdminPage() {
</div>
<span className="text-zinc-400 text-sm">Memory Usage</span>
</div>
<div className="text-3xl font-bold">{dashboard.system.memory.system_percent}%</div>
<div className="text-3xl font-bold">{dashboard.system?.memory?.system_percent ?? 0}%</div>
<div className="text-sm text-zinc-500 mt-1">
{dashboard.system.memory.system_available_gb.toFixed(1)} GB available
{(dashboard.system?.memory?.system_available_gb ?? 0).toFixed(1)} GB available
</div>
</div>
@@ -371,9 +371,9 @@ export default function AdminPage() {
</div>
<span className="text-zinc-400 text-sm">Tracked Files</span>
</div>
<div className="text-3xl font-bold">{dashboard.cleanup.tracked_files_count}</div>
<div className="text-3xl font-bold">{dashboard.cleanup?.tracked_files_count ?? 0}</div>
<div className="text-sm text-zinc-500 mt-1">
{dashboard.system.disk.total_size_mb.toFixed(1)} MB total
{(dashboard.system?.disk?.total_size_mb ?? 0).toFixed(1)} MB total
</div>
</div>
</div>
@@ -389,19 +389,19 @@ export default function AdminPage() {
<div className="space-y-3">
<div className="flex justify-between items-center py-2 border-b border-zinc-700/50">
<span className="text-zinc-400">Requests per minute</span>
<span className="font-medium">{dashboard.rate_limits.config.requests_per_minute}</span>
<span className="font-medium">{dashboard.rate_limits?.config?.requests_per_minute ?? 0}</span>
</div>
<div className="flex justify-between items-center py-2 border-b border-zinc-700/50">
<span className="text-zinc-400">Translations per minute</span>
<span className="font-medium">{dashboard.rate_limits.config.translations_per_minute}</span>
<span className="font-medium">{dashboard.rate_limits?.config?.translations_per_minute ?? 0}</span>
</div>
<div className="flex justify-between items-center py-2 border-b border-zinc-700/50">
<span className="text-zinc-400">Max file size</span>
<span className="font-medium">{dashboard.config.max_file_size_mb} MB</span>
<span className="font-medium">{dashboard.config?.max_file_size_mb ?? 0} MB</span>
</div>
<div className="flex justify-between items-center py-2">
<span className="text-zinc-400">Translation service</span>
<span className="font-medium capitalize">{dashboard.config.translation_service}</span>
<span className="font-medium capitalize">{dashboard.config?.translation_service ?? 'N/A'}</span>
</div>
</div>
</div>
@@ -423,21 +423,21 @@ export default function AdminPage() {
<div className="space-y-3">
<div className="flex justify-between items-center py-2 border-b border-zinc-700/50">
<span className="text-zinc-400">Service status</span>
<span className={`font-medium ${dashboard.cleanup.is_running ? "text-green-400" : "text-red-400"}`}>
{dashboard.cleanup.is_running ? "Running" : "Stopped"}
<span className={`font-medium ${dashboard.cleanup?.is_running ? "text-green-400" : "text-red-400"}`}>
{dashboard.cleanup?.is_running ? "Running" : "Stopped"}
</span>
</div>
<div className="flex justify-between items-center py-2 border-b border-zinc-700/50">
<span className="text-zinc-400">Files cleaned</span>
<span className="font-medium">{dashboard.cleanup.files_cleaned_total}</span>
<span className="font-medium">{dashboard.cleanup?.files_cleaned_total ?? 0}</span>
</div>
<div className="flex justify-between items-center py-2 border-b border-zinc-700/50">
<span className="text-zinc-400">Space freed</span>
<span className="font-medium">{dashboard.cleanup.bytes_freed_total_mb.toFixed(2)} MB</span>
<span className="font-medium">{(dashboard.cleanup?.bytes_freed_total_mb ?? 0).toFixed(2)} MB</span>
</div>
<div className="flex justify-between items-center py-2">
<span className="text-zinc-400">Cleanup runs</span>
<span className="font-medium">{dashboard.cleanup.cleanup_runs}</span>
<span className="font-medium">{dashboard.cleanup?.cleanup_runs ?? 0}</span>
</div>
</div>
</div>