import type { BatchUpsertResult } from "@yaakapp-internal/models"; import { FormattedError, VStack } from "@yaakapp-internal/ui"; import { Button } from "../components/core/Button"; import { ImportDataDialog } from "../components/ImportDataDialog"; import { createFastMutation } from "../hooks/useFastMutation"; import { showAlert } from "./alert"; import { showDialog } from "./dialog"; import { pluralizeCount } from "./pluralize"; import { router } from "./router"; import { rpc } from "./rpc"; 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 (runImport: () => Promise) => { try { await finishImport(await runImport()); resolve(); } catch (err) { reject(err); } finally { hide(); } }; return ( importAndHide(() => rpc("cmd_import_data", { filePath })) } importUrl={(url) => importAndHide(() => rpc("cmd_import_url", { url })) } /> ); }, }); }); }, }); async function finishImport(imported: BatchUpsertResult): Promise { 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 }, }); } }