import { useQuery } from "@tanstack/react-query"; import type { Plugin } from "@yaakapp-internal/models"; import { pluginsAtom } from "@yaakapp-internal/models"; import type { PluginMetadata } from "@yaakapp-internal/plugins"; import { useAtomValue } from "jotai"; import { queryClient } from "../lib/queryClient"; import { invokeCmd } from "../lib/tauri"; function pluginInfoKey(id: string | null, plugin: Plugin | null) { return ["plugin_info", id ?? "n/a", plugin?.updatedAt ?? "n/a"]; } export function usePluginInfo(id: string | null) { const plugins = useAtomValue(pluginsAtom); // Get the plugin so we can refetch whenever it's updated const plugin = plugins.find((p) => p.id === id); return useQuery({ queryKey: pluginInfoKey(id, plugin ?? null), placeholderData: (prev) => prev, // Keep previous data on refetch queryFn: () => { if (id == null) return null; return invokeCmd("cmd_plugin_info", { id }); }, }); } export function invalidateAllPluginInfo() { queryClient.invalidateQueries({ queryKey: ["plugin_info"] }).catch(console.error); }