Refactor plugin manager and gRPC server (#96)

This commit is contained in:
Gregory Schier
2024-09-19 05:58:12 -07:00
committed by GitHub
parent 844d795014
commit a3b64423fd
27 changed files with 661 additions and 614 deletions

View File

@@ -5,12 +5,13 @@ import type {
HttpRequest,
} from '@yaakapp/api';
import { invokeCmd } from '../lib/tauri';
import { usePlugins } from './usePlugins';
import { usePluginsKey } from './usePlugins';
export function useHttpRequestActions() {
const plugins = usePlugins();
const pluginsKey = usePluginsKey();
const httpRequestActions = useQuery({
queryKey: ['http_request_actions', plugins.map((p) => p.updatedAt)],
queryKey: ['http_request_actions', pluginsKey],
refetchOnWindowFocus: false,
queryFn: async () => {
const responses = (await invokeCmd(

View File

@@ -2,11 +2,11 @@ import { useMutation } from '@tanstack/react-query';
import { trackEvent } from '../lib/analytics';
import { invokeCmd } from '../lib/tauri';
export function useCreatePlugin() {
export function useInstallPlugin() {
return useMutation<void, unknown, string>({
mutationKey: ['create_plugin'],
mutationKey: ['install_plugin'],
mutationFn: async (directory: string) => {
await invokeCmd('cmd_create_plugin', { directory });
await invokeCmd('cmd_install_plugin', { directory });
},
onSettled: () => trackEvent('plugin', 'create'),
});

View File

@@ -1,12 +1,12 @@
import { useQuery } from '@tanstack/react-query';
import type { PluginBootResponse } from '@yaakapp/api';
import type { BootResponse } from '@yaakapp/api';
import { invokeCmd } from '../lib/tauri';
export function usePluginInfo(id: string) {
return useQuery({
queryKey: ['plugin_info', id],
queryFn: async () => {
const info = (await invokeCmd('cmd_plugin_info', { id })) as PluginBootResponse;
const info = (await invokeCmd('cmd_plugin_info', { id })) as BootResponse;
return info;
},
});

View File

@@ -12,6 +12,12 @@ export function usePlugins() {
return useAtomValue(pluginsAtom);
}
export function usePluginsKey() {
return useAtomValue(pluginsAtom)
.map((p) => p.id + p.updatedAt)
.join(',');
}
/**
* Reload all plugins and refresh the list of plugins
*/

View File

@@ -1,10 +1,13 @@
import { useQuery } from '@tanstack/react-query';
import type { GetTemplateFunctionsResponse } from '@yaakapp/api';
import { invokeCmd } from '../lib/tauri';
import { usePluginsKey } from './usePlugins';
export function useTemplateFunctions() {
const pluginsKey = usePluginsKey();
const result = useQuery({
queryKey: ['template_functions'],
queryKey: ['template_functions', pluginsKey],
queryFn: async () => {
const responses = (await invokeCmd(
'cmd_template_functions',
@@ -13,6 +16,5 @@ export function useTemplateFunctions() {
},
});
const fns = result.data?.flatMap((r) => r.functions) ?? [];
return fns;
return result.data?.flatMap((r) => r.functions) ?? [];
}

View File

@@ -0,0 +1,14 @@
import { useMutation } from '@tanstack/react-query';
import type { Plugin } from '@yaakapp/api';
import { trackEvent } from '../lib/analytics';
import { invokeCmd } from '../lib/tauri';
export function useUninstallPlugin(pluginId: string) {
return useMutation<Plugin | null, string>({
mutationKey: ['uninstall_plugin'],
mutationFn: async () => {
return invokeCmd('cmd_uninstall_plugin', { pluginId });
},
onSettled: () => trackEvent('plugin', 'delete'),
});
}