import { useState, useEffect, useCallback } from "react"; import { UNKNOWN, OK, BAD, FAILED } from "../components/shared/StatusMessage"; export default ({ url, ms = 20000, fetchOptions = {}, }) => { const [status, setStatus] = useState(UNKNOWN); const checkServer = useCallback(async () => { console.log(`Polling ${url}`); try { const res = await fetch(url, fetchOptions); if (res.ok) { setStatus(OK); } else { setStatus(BAD); } } catch (err) { console.log(err); setStatus(FAILED); } }, [url, fetchOptions]); useEffect(() => { checkServer(); const interval = setInterval(checkServer, ms); return () => clearInterval(interval); }, [ms, checkServer]); return status; }