multica/apps/web/core/query-client.ts
Naiyuan Qing 7560f7be85 feat(core/issues): add TanStack Query layer and rewrite hooks (Phase 1, Commits 1-4)
- Add getQueryClient() singleton for non-React contexts (WS handlers, Zustand)
- Create issue query key factory + 5 queryOptions
- Create 11 mutation hooks with optimistic updates and rollback
- Create WS cache updaters + dual-write in use-realtime-sync
- Rewrite useIssueTimeline, useIssueReactions, useIssueSubscribers to TQ
  (return types unchanged, consumers unaffected)
- Add QueryClientProvider wrapper to issue detail tests

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 15:30:42 +08:00

31 lines
825 B
TypeScript

import { QueryClient } from "@tanstack/react-query";
let _queryClient: QueryClient | null = null;
export function createQueryClient(): QueryClient {
return new QueryClient({
defaultOptions: {
queries: {
staleTime: Infinity,
gcTime: 10 * 60 * 1000, // 10 minutes
refetchOnWindowFocus: false,
refetchOnReconnect: false,
retry: 1,
},
mutations: {
retry: false,
},
},
});
}
/** Called by QueryProvider on mount to register the singleton. */
export function setQueryClient(client: QueryClient) {
_queryClient = client;
}
/** Access QueryClient outside React tree (WS handlers, Zustand actions). */
export function getQueryClient(): QueryClient {
if (!_queryClient) throw new Error("QueryClient not initialized");
return _queryClient;
}