import { useState } from "react"; import { useMutation, useQueryClient } from "@tanstack/react-query"; import type { ToolConnection } from "@paperclipai/shared"; import { aggregatorManagementUrl } from "@paperclipai/shared/aggregator-apps"; import { toolsApi } from "@/api/tools"; import { useAccountIdentity } from "@/api/companies-query"; import { queryKeys } from "@/lib/queryKeys"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog"; export function ExecutorManagementSetup({ connection, onClose }: { connection: ToolConnection; onClose: () => void }) { const [url, setUrl] = useState(typeof connection.config?.managementUrl === "string" ? connection.config?.managementUrl : ""); const queries = useQueryClient(); const { userId, settled } = useAccountIdentity(); const save = useMutation({ mutationFn: async () => { const managementUrl = aggregatorManagementUrl("executor", url.trim()); if (!managementUrl) throw new Error("Enter an HTTPS console URL without credentials."); await toolsApi.updateConnection(connection.id, { config: { ...connection.config, managementUrl } }); await queries.invalidateQueries({ queryKey: queryKeys.tools.aggregatorApps(connection.id, userId) }); const result = await toolsApi.syncAggregatorApps(connection.id, true); queries.setQueryData(queryKeys.tools.aggregatorApps(connection.id, userId), result); }, onSuccess: async () => { await queries.invalidateQueries({ queryKey: queryKeys.tools.connections(connection.companyId) }); onClose(); } }); return { if (!open && !save.isPending) onClose(); }}> Executor consoleChoose where to manage accounts for “{connection.name}”. Include your workspace path.
{ event.preventDefault(); save.mutate(); }}>
setUrl(event.target.value)} />
{save.isError ?

{save.error.message}

: null}
; }