mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-03-20 00:23:58 +01:00
96 lines
3.9 KiB
TypeScript
96 lines
3.9 KiB
TypeScript
import { emit } from '@tauri-apps/api/event';
|
|
import type { PromptTextRequest, PromptTextResponse } from '@yaakapp-internal/plugins';
|
|
import {useWatchWorkspace} from "@yaakapp-internal/sync";
|
|
import {
|
|
useEnsureActiveCookieJar,
|
|
useSubscribeActiveCookieJarId,
|
|
} from '../hooks/useActiveCookieJar';
|
|
import { useSubscribeActiveEnvironmentId } from '../hooks/useActiveEnvironment';
|
|
import { useActiveRequest } from '../hooks/useActiveRequest';
|
|
import { useSubscribeActiveRequestId } from '../hooks/useActiveRequestId';
|
|
import { useActiveWorkspace, useSubscribeActiveWorkspaceId } from '../hooks/useActiveWorkspace';
|
|
import { useActiveWorkspaceChangedToast } from '../hooks/useActiveWorkspaceChangedToast';
|
|
import { useDuplicateGrpcRequest } from '../hooks/useDuplicateGrpcRequest';
|
|
import { useDuplicateHttpRequest } from '../hooks/useDuplicateHttpRequest';
|
|
import { useGenerateThemeCss } from '../hooks/useGenerateThemeCss';
|
|
import { useHotKey } from '../hooks/useHotKey';
|
|
import { useListenToTauriEvent } from '../hooks/useListenToTauriEvent';
|
|
import { useNotificationToast } from '../hooks/useNotificationToast';
|
|
import { usePrompt } from '../hooks/usePrompt';
|
|
import { useSubscribeRecentCookieJars } from '../hooks/useRecentCookieJars';
|
|
import { useSubscribeRecentEnvironments } from '../hooks/useRecentEnvironments';
|
|
import { useSubscribeRecentRequests } from '../hooks/useRecentRequests';
|
|
import { useSubscribeRecentWorkspaces } from '../hooks/useRecentWorkspaces';
|
|
import { useSyncFontSizeSetting } from '../hooks/useSyncFontSizeSetting';
|
|
import { useSyncModelStores } from '../hooks/useSyncModelStores';
|
|
import { useSyncWorkspace } from '../hooks/useSyncWorkspace';
|
|
import { useSyncWorkspaceChildModels } from '../hooks/useSyncWorkspaceChildModels';
|
|
import { useSyncWorkspaceRequestTitle } from '../hooks/useSyncWorkspaceRequestTitle';
|
|
import { useSyncZoomSetting } from '../hooks/useSyncZoomSetting';
|
|
import { useSubscribeTemplateFunctions } from '../hooks/useTemplateFunctions';
|
|
import { useToggleCommandPalette } from '../hooks/useToggleCommandPalette';
|
|
|
|
export function GlobalHooks() {
|
|
useSyncModelStores();
|
|
useSyncZoomSetting();
|
|
useSyncFontSizeSetting();
|
|
useGenerateThemeCss();
|
|
useSyncWorkspaceRequestTitle();
|
|
|
|
useSubscribeActiveWorkspaceId();
|
|
useSubscribeActiveRequestId();
|
|
useSubscribeActiveEnvironmentId();
|
|
useSubscribeActiveCookieJarId();
|
|
|
|
useSubscribeRecentRequests();
|
|
useSubscribeRecentWorkspaces();
|
|
useSubscribeRecentEnvironments();
|
|
useSubscribeRecentCookieJars();
|
|
|
|
useSyncWorkspaceChildModels();
|
|
useSubscribeTemplateFunctions();
|
|
|
|
// Other useful things
|
|
useNotificationToast();
|
|
useActiveWorkspaceChangedToast();
|
|
useEnsureActiveCookieJar();
|
|
|
|
// Trigger workspace sync operation when workspace files change
|
|
const activeWorkspace = useActiveWorkspace();
|
|
const { debouncedSync } = useSyncWorkspace(activeWorkspace, { debounceMillis: 1000 });
|
|
useListenToTauriEvent('upserted_model', debouncedSync);
|
|
useWatchWorkspace(activeWorkspace, debouncedSync);
|
|
|
|
const activeRequest = useActiveRequest();
|
|
const duplicateHttpRequest = useDuplicateHttpRequest({
|
|
id: activeRequest?.id ?? null,
|
|
navigateAfter: true,
|
|
});
|
|
const duplicateGrpcRequest = useDuplicateGrpcRequest({
|
|
id: activeRequest?.id ?? null,
|
|
navigateAfter: true,
|
|
});
|
|
useHotKey('http_request.duplicate', async () => {
|
|
if (activeRequest?.model === 'http_request') {
|
|
await duplicateHttpRequest.mutateAsync();
|
|
} else {
|
|
await duplicateGrpcRequest.mutateAsync();
|
|
}
|
|
});
|
|
|
|
const toggleCommandPalette = useToggleCommandPalette();
|
|
useHotKey('command_palette.toggle', toggleCommandPalette);
|
|
|
|
const prompt = usePrompt();
|
|
useListenToTauriEvent<{ replyId: string; args: PromptTextRequest }>(
|
|
'show_prompt',
|
|
async (event) => {
|
|
const value = await prompt(event.payload.args);
|
|
const result: PromptTextResponse = { value };
|
|
await emit(event.payload.replyId, result);
|
|
},
|
|
);
|
|
|
|
return null;
|
|
}
|