// src/views/Company/components/CompanyOverview/hooks/useDisclosureData.ts // 披露日程数据 Hook - 用于工商信息 Tab import { useState, useEffect, useCallback } from "react"; import { logger } from "@utils/logger"; import { getApiBase } from "@utils/apiConfig"; import type { DisclosureSchedule } from "../types"; const API_BASE_URL = getApiBase(); interface ApiResponse { success: boolean; data: T; } interface UseDisclosureDataResult { disclosureSchedule: DisclosureSchedule[]; loading: boolean; error: string | null; } /** * 披露日程数据 Hook * @param stockCode - 股票代码 */ export const useDisclosureData = (stockCode?: string): UseDisclosureDataResult => { const [disclosureSchedule, setDisclosureSchedule] = useState([]); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const loadData = useCallback(async () => { if (!stockCode) return; setLoading(true); setError(null); try { const response = await fetch( `${API_BASE_URL}/api/stock/${stockCode}/disclosure-schedule` ); const result = (await response.json()) as ApiResponse; if (result.success) { setDisclosureSchedule(result.data); } else { setError("加载披露日程数据失败"); } } catch (err) { logger.error("useDisclosureData", "loadData", err, { stockCode }); setError("网络请求失败"); } finally { setLoading(false); } }, [stockCode]); useEffect(() => { loadData(); }, [loadData]); return { disclosureSchedule, loading, error }; };