/** * 会员服务使用申请 hook:拉取本人的服务申请记录,并提供提交申请的能力。 * 权益兑现载体——已开通会员提交后由律师/顾问跟进。 */ import { useCallback, useEffect, useState } from 'react'; import { createLegalServiceRequest, fetchLegalServiceRequests } from '../api'; import type { LegalServiceRequest } from '../types'; export interface LegalServiceRequestsState { /** 申请记录(倒序) */ requests: LegalServiceRequest[]; /** 首次加载中 */ loading: boolean; /** 错误对象 */ error: Error | null; /** 提交中 */ submitting: boolean; /** 刷新申请记录 */ refresh: () => Promise; /** 提交申请 */ submit: (serviceId: string, content: string) => Promise; } export function useLegalServiceRequests(): LegalServiceRequestsState { const [requests, setRequests] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [submitting, setSubmitting] = useState(false); const refresh = useCallback(async () => { try { setLoading(true); setError(null); setRequests(await fetchLegalServiceRequests()); } catch (e) { setError(e as Error); } finally { setLoading(false); } }, []); useEffect(() => { refresh(); }, [refresh]); const submit = useCallback(async (serviceId: string, content: string) => { setSubmitting(true); try { const created = await createLegalServiceRequest(serviceId, content); setRequests((prev) => [created, ...prev]); return created; } finally { setSubmitting(false); } }, []); return { requests, loading, error, submitting, refresh, submit }; }