import { useState, useEffect, useCallback, useRef } from 'react'; import { isNextRedirectError } from '@/lib/utils/redirect-error'; /** * Stats 데이터 로딩 훅 * * 통계 데이터의 초기 로딩, 수동 업데이트, 재로딩을 관리합니다. * * @param loadFn - Stats API 호출 함수 * @param initialData - 초기값 (있으면 자동 로딩 스킵) * * @example * // 기본 사용 * const { data: stats, reload: reloadStats } = useStatsLoader(getProcessStats); * * @example * // 초기값 제공 (있으면 자동 로딩 스킵) * const { data: stats, reload: reloadStats } = useStatsLoader(getContractStats, initialStats); */ export function useStatsLoader( loadFn: () => Promise<{ success: boolean; data?: T }>, initialData?: T | null, ) { const [data, setData] = useState(initialData ?? null); const loadFnRef = useRef(loadFn); loadFnRef.current = loadFn; const reload = useCallback(async () => { try { const result = await loadFnRef.current(); if (result.success && result.data) { setData(result.data); } } catch (error) { if (isNextRedirectError(error)) throw error; console.error('[useStatsLoader] error:', error); } }, []); useEffect(() => { if (initialData != null) return; reload(); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); return { data, setData, reload }; }