import { useQuery } from "@tanstack/react-query"; import { cursorPage, type Dashboard, SiteListItem } from "@umt/contracts"; import { apiData } from "~/lib/api.ts"; import { qk } from "~/lib/query-keys.ts"; import { apiParsed, fetchAllCursorPages } from "./parse.ts"; /** 首页聚合;SSE 事件触发 invalidate,另有 60 秒兜底轮询 */ export function useDashboard() { return useQuery({ queryKey: qk.dashboard, queryFn: ({ signal }) => apiData("/dashboard", { signal }), refetchInterval: 60_000, }); } const SitePage = cursorPage(SiteListItem); /** 首页"来源健康":站点 + 整体账号状态(GET /sites?include=accounts) */ export function useSitesWithAccounts() { return useQuery({ queryKey: [...qk.dashboard, "sites-accounts"], queryFn: ({ signal }) => fetchAllCursorPages((cursor) => apiParsed(SitePage, "/api/v1/sites", { params: { limit: 200, cursor, include: "accounts" }, signal }), ), refetchInterval: 60_000, }); }