"use client"; import { useEffect, useState } from "react"; import { useRouter } from "next/navigation"; import { useNodes } from "@/lib/useNodes"; import { useSystems } from "@/lib/useSystems"; import { NodeCard } from "@/components/NodeCard"; import { NodeConfigModal } from "@/components/NodeConfigModal"; import { useAuth } from "@/components/AuthProvider"; import type { NodeRecord } from "@/lib/types"; export default function NodesPage() { const { isAdmin, isOperator, loading: authLoading } = useAuth(); const router = useRouter(); const { nodes, loading } = useNodes(); const { systems } = useSystems(); useEffect(() => { if (!authLoading && !isAdmin && !isOperator) router.replace("/dashboard"); }, [authLoading, isAdmin, isOperator, router]); if (authLoading || (!isAdmin && !isOperator)) return null; const [configNode, setConfigNode] = useState(null); const systemMap = Object.fromEntries(systems.map((s) => [s.system_id, s])); const pending = nodes.filter((n) => !n.configured); return (

Nodes

{pending.length > 0 && (

Needs Configuration ({pending.length})

{pending.map((n) => (
setConfigNode(n)} className="cursor-pointer">
))}
)}

All Nodes ({nodes.length})

{loading ? (

Loading…

) : nodes.length === 0 ? (

No nodes registered yet. Boot a Pi to get started.

) : (
{nodes.map((n) => ( ))}
)}
{configNode && ( setConfigNode(null)} /> )}
); }