/** * 候选人详情 hook:拉取候选人详情 + 邀请面试。 */ import { useCallback, useState } from 'react'; import { fetchCandidateDetail, inviteCandidate } from '../api'; import type { CandidateDetail } from '../types'; import { useAsyncData } from './useAsyncData'; export function useCandidateDetail(candidateId: string) { const fetcher = useCallback(() => fetchCandidateDetail(candidateId), [candidateId]); const { data, loading, error, refresh } = useAsyncData(fetcher); const [inviting, setInviting] = useState(false); const [invited, setInvited] = useState(false); const invite = useCallback(async () => { setInviting(true); try { await inviteCandidate(candidateId); setInvited(true); return true; } finally { setInviting(false); } }, [candidateId]); return { candidate: data ?? null, loading, error, refresh, invite, inviting, invited, }; }