import { useState } from "react"; import { ActionButton, Input } from "../../ui"; import { useT } from "../../../i18n"; interface Props { connectorId: string; onSaved?: () => void; } interface DeploymentEntry { modelId: string; deploymentName: string; } export function AzureForm({ connectorId, onSaved }: Props) { const t = useT(); const [apiKey, setApiKey] = useState(""); const [baseUrl, setBaseUrl] = useState(""); const [resourceName, setResourceName] = useState(""); const [apiVersion, setApiVersion] = useState(""); const [deployments, setDeployments] = useState([ { modelId: "", deploymentName: "" }, ]); const [busy, setBusy] = useState(false); const [error, setError] = useState(null); const handleSubmit = async () => { const desktop = window.agentCompany; if (!desktop) return; if (apiKey.trim().length === 0) { setError(t("form.azure.errApiKeyRequired")); return; } setBusy(true); setError(null); const deploymentMap = Object.fromEntries( deployments .map((entry) => [entry.modelId.trim(), entry.deploymentName.trim()]) .filter(([k, v]) => k.length > 0 && v.length > 0), ); const result = await desktop.saveCredential({ connectorId, payload: { kind: "azure", value: { apiKey: apiKey.trim(), baseUrl: baseUrl.trim() || undefined, resourceName: resourceName.trim() || undefined, apiVersion: apiVersion.trim() || undefined, deploymentMap: Object.keys(deploymentMap).length > 0 ? deploymentMap : undefined, }, }, }); setBusy(false); if (!result.ok) { setError(result.error.message); return; } onSaved?.(); }; return (
{ event.preventDefault(); void handleSubmit(); }} className="space-y-3" >
{t("form.azure.deploymentMap")}
{deployments.map((entry, index) => (
setDeployments((prev) => prev.map((p, i) => (i === index ? { ...p, modelId: newVal } : p)), ) } />
setDeployments((prev) => prev.map((p, i) => i === index ? { ...p, deploymentName: newVal } : p, ), ) } />
setDeployments((prev) => prev.filter((_, i) => i !== index))} />
))} setDeployments((prev) => [...prev, { modelId: "", deploymentName: "" }])} />
{error ? (
{error}
) : null} ); }