From 6d235f7d07f7d4d1fe86932d46a3acba1a24e610 Mon Sep 17 00:00:00 2001 From: zgaetano Date: Tue, 31 Mar 2026 15:30:00 -0400 Subject: [PATCH] Add src/hooks/useStatus.ts --- src/hooks/useStatus.ts | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/hooks/useStatus.ts diff --git a/src/hooks/useStatus.ts b/src/hooks/useStatus.ts new file mode 100644 index 0000000..5345429 --- /dev/null +++ b/src/hooks/useStatus.ts @@ -0,0 +1,30 @@ +import { useEffect, useState, useCallback } from "react"; +import { api, AppStatus, Host } from "../api"; + +export function useStatus(pollMs = 3000) { + const [status, setStatus] = useState(null); + const [hosts, setHosts] = useState([]); + const [error, setError] = useState(null); + const [loading, setLoading] = useState(true); + + const refresh = useCallback(async () => { + try { + const [s, h] = await Promise.all([api.getStatus(), api.getHosts()]); + setStatus(s); + setHosts(h); + setError(null); + } catch (e: unknown) { + setError(e instanceof Error ? e.message : "Backend unreachable"); + } finally { + setLoading(false); + } + }, []); + + useEffect(() => { + refresh(); + const id = setInterval(refresh, pollMs); + return () => clearInterval(id); + }, [refresh, pollMs]); + + return { status, hosts, error, loading, refresh }; +}