import { type Dispatch, type SetStateAction, useCallback, useState, } from "react" import { toast } from "sonner" import type { ApiResponse } from "@/lib/api" export function useStatus() { return useState<"load" | "fail" | "done">("load") } export function useFetch( fetchData: (...args: TArgs) => Promise>, messages: { done?: string fail?: string }, setStatus?: Dispatch>, ) { return useCallback( async (...args: TArgs) => { try { setStatus?.("load") const resp = await fetchData(...args) if (!resp.success) { throw new Error(resp.message) } setStatus?.("done") toast.success(messages.done || "获取数据成功") } catch (e) { setStatus?.("fail") toast.error(messages.fail || "获取数据失败", { description: (e as Error).message || "未知错误", }) } }, [fetchData, setStatus, messages], ) }