Files
mnote/wolai-frontend/src/hooks/use-backend-health.ts
T
2026-01-10 23:08:56 +08:00

35 lines
844 B
TypeScript

import { useEffect, useState } from "react";
type Status = "idle" | "ok" | "error" | "disabled";
export function useBackendHealth() {
const [status, setStatus] = useState<Status>(() => {
return "idle";
});
useEffect(() => {
let destroyed = false;
const controller = new AbortController();
const check = async () => {
try {
const response = await fetch("/api/backend/health", { signal: controller.signal });
const payload = (await response.json().catch(() => null)) as { status?: Status } | null;
if (!destroyed) {
setStatus(payload?.status ?? "error");
}
} catch {
if (!destroyed) {
setStatus("error");
}
}
};
check();
return () => {
destroyed = true;
controller.abort();
};
}, []);
return status;
}