- 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>
31 lines
825 B
TypeScript
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;
|
|
}
|