import type { BatchUpsertResult } from '@yaakapp-internal/models'; import { Button } from '../components/core/Button'; import { FormattedError } from '../components/core/FormattedError'; import { VStack } from '../components/core/Stacks'; import { ImportDataDialog } from '../components/ImportDataDialog'; import { activeWorkspaceAtom } from '../hooks/useActiveWorkspace'; import { createFastMutation } from '../hooks/useFastMutation'; import { showAlert } from './alert'; import { showDialog } from './dialog'; import { jotaiStore } from './jotai'; import { pluralizeCount } from './pluralize'; import { router } from './router'; import { invokeCmd } from './tauri'; export const importData = createFastMutation({ mutationKey: ['import_data'], onError: (err: string) => { showAlert({ id: 'import-failed', title: 'Import Failed', size: 'md', body: {err}, }); }, mutationFn: async () => { return new Promise((resolve, reject) => { showDialog({ id: 'import', title: 'Import Data', size: 'sm', render: ({ hide }) => { const importAndHide = async (filePath: string) => { try { const didImport = await performImport(filePath); if (!didImport) { return; } resolve(); } catch (err) { reject(err); } finally { hide(); } }; return ; }, }); }); }, }); async function performImport(filePath: string): Promise { const activeWorkspace = jotaiStore.get(activeWorkspaceAtom); const imported = await invokeCmd('cmd_import_data', { filePath, workspaceId: activeWorkspace?.id, }); const importedWorkspace = imported.workspaces[0]; showDialog({ id: 'import-complete', title: 'Import Complete', size: 'sm', hideX: true, render: ({ hide }) => { return (
    {imported.workspaces.length > 0 && (
  • {pluralizeCount('Workspace', imported.workspaces.length)}
  • )} {imported.environments.length > 0 && (
  • {pluralizeCount('Environment', imported.environments.length)}
  • )} {imported.folders.length > 0 && (
  • {pluralizeCount('Folder', imported.folders.length)}
  • )} {imported.httpRequests.length > 0 && (
  • {pluralizeCount('HTTP Request', imported.httpRequests.length)}
  • )} {imported.grpcRequests.length > 0 && (
  • {pluralizeCount('GRPC Request', imported.grpcRequests.length)}
  • )} {imported.websocketRequests.length > 0 && (
  • {pluralizeCount('Websocket Request', imported.websocketRequests.length)}
  • )}
); }, }); if (importedWorkspace != null) { const environmentId = imported.environments[0]?.id ?? null; await router.navigate({ to: '/workspaces/$workspaceId', params: { workspaceId: importedWorkspace.id }, search: { environment_id: environmentId }, }); } return true; }