// src/pages/infra/useNodeStatus.js // /api/agent-office/nodes 를 주기 폴링하는 훅. 3초 권장(Three.js 흐름과 동기). import { useEffect, useState, useRef, useCallback } from 'react'; import { getNodeStatus } from '../../api'; export function useNodeStatus(intervalMs = 4000) { const [data, setData] = useState(null); const [error, setError] = useState(null); const [loading, setLoading] = useState(true); const [updatedAt, setUpdatedAt] = useState(null); const aliveRef = useRef(true); const tick = useCallback(async () => { try { const d = await getNodeStatus(); if (!aliveRef.current) return; setData(d); setError(null); setUpdatedAt(Date.now()); } catch (e) { if (!aliveRef.current) return; setError(e); } finally { if (aliveRef.current) setLoading(false); } }, []); useEffect(() => { aliveRef.current = true; tick(); const id = setInterval(tick, intervalMs); return () => { aliveRef.current = false; clearInterval(id); }; }, [tick, intervalMs]); return { data, error, loading, updatedAt, refresh: tick }; }