import { useQuery } from '@tanstack/react-query'; import type { RenderPurpose } from '@yaakapp-internal/plugins'; import { useAtomValue } from 'jotai'; import { minPromiseMillis } from '../lib/minPromiseMillis'; import { invokeCmd } from '../lib/tauri'; import { useActiveEnvironment } from './useActiveEnvironment'; import { activeWorkspaceIdAtom } from './useActiveWorkspace'; export function useRenderTemplate({ template, enabled, purpose, refreshKey, ignoreError, preservePreviousValue, }: { template: string; enabled: boolean; purpose: RenderPurpose; refreshKey?: string | null; ignoreError?: boolean; preservePreviousValue?: boolean; }) { const workspaceId = useAtomValue(activeWorkspaceIdAtom) ?? 'n/a'; const environmentId = useActiveEnvironment()?.id ?? null; return useQuery({ refetchOnWindowFocus: false, enabled, placeholderData: preservePreviousValue ? (prev) => prev : undefined, queryKey: ['render_template', workspaceId, environmentId, refreshKey, purpose, ignoreError], queryFn: () => minPromiseMillis( renderTemplate({ template, workspaceId, environmentId, purpose, ignoreError }), 300, ), }); } export async function renderTemplate({ template, workspaceId, environmentId, purpose, ignoreError, }: { template: string; workspaceId: string; environmentId: string | null; purpose: RenderPurpose; ignoreError?: boolean; }): Promise { return invokeCmd('cmd_render_template', { template, workspaceId, environmentId, purpose, ignoreError, }); } export async function decryptTemplate({ template, workspaceId, environmentId, }: { template: string; workspaceId: string; environmentId: string | null; }): Promise { return invokeCmd('cmd_decrypt_template', { template, workspaceId, environmentId }); }