import { useMutation } from "@tanstack/react-query"; import { changeModelStoreWorkspace, pluginsAtom } from "@yaakapp-internal/models"; import { useAtomValue } from "jotai"; import { jotaiStore } from "../lib/jotai"; import { minPromiseMillis } from "../lib/minPromiseMillis"; import { invokeCmd } from "../lib/tauri"; import { activeWorkspaceIdAtom } from "./useActiveWorkspace"; import { useDebouncedValue } from "./useDebouncedValue"; import { invalidateAllPluginInfo } from "./usePluginInfo"; export function usePluginsKey() { const pluginKey = useAtomValue(pluginsAtom) .map((p) => p.id + p.updatedAt) .join(","); // Debounce plugins both for efficiency and to give plugins a chance to reload after the DB updates return useDebouncedValue(pluginKey, 1000); } /** * Reload all plugins and refresh the list of plugins */ export function useRefreshPlugins() { return useMutation({ mutationKey: ["refresh_plugins"], mutationFn: async () => { await minPromiseMillis( (async () => { await invokeCmd("cmd_reload_plugins"); const workspaceId = jotaiStore.get(activeWorkspaceIdAtom); await changeModelStoreWorkspace(workspaceId); // Force refresh models invalidateAllPluginInfo(); })(), ); }, }); }