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 }; +}