import { useEffect, useState } from "react"; import { api, formatBytes, SystemStatus } from "../api"; import { useDirty } from "../DirtyContext"; const SOURCE_COLORS: Record = { samba: "bg-emerald-500/20 text-emerald-300", nfs: "bg-amber-500/20 text-amber-300", manual: "bg-cyan-500/20 text-cyan-300", }; const SOURCE_LABELS: Record = { samba: "SMB", nfs: "NFS", manual: "Vigilado", }; export default function Dashboard() { const [status, setStatus] = useState(null); const { modules } = useDirty(); useEffect(() => { api.systemStatus().then(setStatus).catch(() => setStatus(null)); }, []); const visibleDisks = status?.disks.filter( (d) => d.sources.includes("manual") || d.sources.includes("samba") || d.sources.includes("nfs") ) ?? []; return (

Dashboard

Uso de disco

{visibleDisks.length ? (
{visibleDisks.map((d) => (
{d.path} {d.sources.map((s) => ( {SOURCE_LABELS[s] ?? s} ))} {d.used_by && d.used_by.length > 0 && d.sources.length > 1 && ( {d.used_by.join(", ")} )}
{formatBytes(d.used_bytes)} / {formatBytes(d.total_bytes)}
))}
) : (

Sin puntos de montaje vigilados. Añádelos en Ajustes.

)}

Servicios

{status?.services?.length ? (
    {status.services.map((s) => (
  • {s.name} {s.state}
  • ))}
) : (

Sin datos de servicios.

)}

Cambios pendientes

{modules.length > 0 ? (

Módulos con cambios sin aplicar: {modules.map((m) => m.module).join(", ")}

) : (

Todo aplicado. No hay cambios pendientes.

)}
); }