import { queryOptions, useQuery, useQueryClient, type QueryClient } from "@tanstack/react-query";import { useEffect } from "react";import type { DesktopUpdateState } from "@t3tools/contracts"; export const desktopUpdateQueryKeys = { all: ["desktop", "update"] as const, state: () => ["desktop", "update", "state"] as const,}; export const setDesktopUpdateStateQueryData = ( queryClient: QueryClient, state: DesktopUpdateState | null,) => queryClient.setQueryData(desktopUpdateQueryKeys.state(), state); export function desktopUpdateStateQueryOptions() { return queryOptions({ queryKey: desktopUpdateQueryKeys.state(), queryFn: async () => { const bridge = window.desktopBridge; if (!bridge || typeof bridge.getUpdateState !== "function") return null; return bridge.getUpdateState(); }, staleTime: Infinity, refetchOnMount: "always", });} export function useDesktopUpdateState() { const queryClient = useQueryClient(); const query = useQuery(desktopUpdateStateQueryOptions()); useEffect(() => { const bridge = window.desktopBridge; if (!bridge || typeof bridge.onUpdateState !== "function") return; return bridge.onUpdateState((nextState) => { setDesktopUpdateStateQueryData(queryClient, nextState); }); }, [queryClient]); return query;}
import { queryOptions, useQuery, useQueryClient, type QueryClient } from "@tanstack/react-query";
import { useEffect } from "react";
import type { DesktopUpdateState } from "@t3tools/contracts";
export const desktopUpdateQueryKeys = {
all: ["desktop", "update"] as const,
state: () => ["desktop", "update", "state"] as const,
};
export const setDesktopUpdateStateQueryData = (
queryClient: QueryClient,
state: DesktopUpdateState | null,
) => queryClient.setQueryData(desktopUpdateQueryKeys.state(), state);
export function desktopUpdateStateQueryOptions() {
return queryOptions({
queryKey: desktopUpdateQueryKeys.state(),
queryFn: async () => {
const bridge = window.desktopBridge;
if (!bridge || typeof bridge.getUpdateState !== "function") return null;
return bridge.getUpdateState();
},
staleTime: Infinity,
refetchOnMount: "always",
});
}
export function useDesktopUpdateState() {
const queryClient = useQueryClient();
const query = useQuery(desktopUpdateStateQueryOptions());
useEffect(() => {
const bridge = window.desktopBridge;
if (!bridge || typeof bridge.onUpdateState !== "function") return;
return bridge.onUpdateState((nextState) => {
setDesktopUpdateStateQueryData(queryClient, nextState);
});
}, [queryClient]);
return query;
}