import { Link } from "react-router-dom"; import { useDashboard } from "../hooks/useDashboard"; import Clock from "../components/Clock"; import WeatherCard from "../components/WeatherCard"; import HourlyForecast from "../components/HourlyForecast"; import NewsGrid from "../components/NewsGrid"; import ServerCard from "../components/ServerCard"; import HomeAssistant from "../components/HomeAssistant"; import TasksCard from "../components/TasksCard"; import MqttCard from "../components/MqttCard"; import { RefreshCw, Wifi, WifiOff, AlertTriangle, Settings } from "lucide-react"; export default function Dashboard() { const { data, loading, error, connected, refresh } = useDashboard(); return (
{/* Error banner */} {error && (

{error}

)} {/* Header */}

Daily Briefing

{loading && !data ? ( ) : data ? (
{/* Section 01 — Wetter */}
01

Wetter

{/* Section 02 — Infrastruktur */}
02

Infrastruktur

{data.servers.servers.map((srv) => ( ))}
{/* Section 03 — MQTT (conditional) */} {(data.mqtt?.connected || (data.mqtt?.entities?.length ?? 0) > 0) && (
03

MQTT

)} {/* Section 04 — Nachrichten */}
{/* Footer */}
) : null}
); } /* ── Live indicator ─────────────────────────────────────── */ function LiveIndicator({ connected }: { connected: boolean }) { return (
{connected && (
)}
{connected ? "Live" : "Offline"} {connected ? ( ) : ( )}
); } /* ── Loading skeleton ───────────────────────────────────── */ function LoadingSkeleton() { return (
{/* Section 01 skeleton */}
01
{Array.from({ length: 4 }).map((_, i) => ( ))}
{/* Section 02 skeleton */}
02
{Array.from({ length: 4 }).map((_, i) => ( ))}
{/* Section 04 skeleton */}
04
{Array.from({ length: 8 }).map((_, i) => ( ))}
{/* Scan loader */}
); } function SkeletonCard({ className = "" }: { className?: string }) { return (
); }