fix: allow node cabinet fallback when dashboard unavailable

This commit is contained in:
Apple
2025-11-30 06:40:32 -08:00
parent ff4e9dd06b
commit 7ff426f975

View File

@@ -27,17 +27,20 @@ export default function NodeCabinetPage() {
const nodeId = params.nodeId as string;
const nodeLabel = getNodeLabel(nodeId);
const dashboardEnabled = nodeId === 'node-1-hetzner-gex44';
// Basic node profile from node_cache
const { node: nodeProfile, isLoading: profileLoading, error: profileError } = useNodeProfile(nodeId);
// Full dashboard (if available - currently only for NODE1)
const { dashboard, isLoading: dashboardLoading, error: dashboardError, refresh, lastUpdated } = useNodeDashboard({
refreshInterval: 30000,
enabled: nodeId === 'node-1-hetzner-gex44' // Only enable for NODE1
enabled: dashboardEnabled
});
const isLoading = profileLoading || dashboardLoading;
const error = profileError || (dashboardError && nodeId === 'node-1-hetzner-gex44');
const isLoading = profileLoading || (dashboardEnabled && dashboardLoading);
const shouldShowError = (!!profileError && !nodeProfile) || (!nodeProfile && !dashboard);
const isProduction = nodeProfile?.environment === 'production';
if (isLoading && !nodeProfile && !dashboard) {
@@ -55,13 +58,13 @@ export default function NodeCabinetPage() {
);
}
if (error || (!nodeProfile && !dashboard)) {
if (shouldShowError) {
return (
<div className="min-h-screen bg-gradient-to-br from-slate-900 via-purple-900/20 to-slate-900 p-6">
<div className="max-w-7xl mx-auto">
<div className="bg-red-500/10 border border-red-500/20 rounded-2xl p-6 text-center">
<p className="text-red-400 text-lg mb-2">Failed to load node</p>
<p className="text-white/50 mb-4">{(error as Error)?.message || 'Node not found'}</p>
<p className="text-white/50 mb-4">{profileError?.message || 'Node not found'}</p>
<Link
href="/nodes"
className="px-4 py-2 bg-white/10 hover:bg-white/20 text-white rounded-lg transition-colors inline-block"
@@ -109,6 +112,12 @@ export default function NodeCabinetPage() {
</div>
</div>
{dashboardError && (
<div className="mb-6 bg-amber-500/10 border border-amber-500/20 text-amber-200 rounded-xl px-4 py-3 text-sm">
Детальний моніторинг тимчасово недоступний. Показано останній кешований профіль ноди.
</div>
)}
{/* Main Grid */}
<div className="grid grid-cols-1 lg:grid-cols-3 gap-6">
<div className="lg:col-span-2 space-y-6">