import { useState } from "react"; import Form from "@moduletrace/twui/form/Form"; import Input from "@moduletrace/twui/form/Input"; import Select from "@moduletrace/twui/form/Select"; import Checkbox from "@moduletrace/twui/form/Checkbox"; import Button from "@moduletrace/twui/layout/Button"; import Row from "@moduletrace/twui/layout/Row"; import Stack from "@moduletrace/twui/layout/Stack"; import { HarnessProviderKinds, type HarnessProviderKind, } from "@/src/dict/harness-provider-dict"; import type { HarnessOverviewPayload, PublicHarnessProvider } from "@/src/types"; import SettingsStatus from "../../(partials)/settings-status"; import postHarnessApi from "../(functions)/post-harness-api"; type Props = { /** * Edits this provider; adds one when not given. */ provider?: PublicHarnessProvider; onSaved: (overview: HarnessOverviewPayload, msg: string) => void; onCancel: () => void; }; /** * Adds or edits a provider. A saved key is never shown; typing a new one * replaces it. */ export default function ProviderForm({ provider, onSaved, onCancel }: Props) { const [kind, setKind] = useState( provider?.kind || "openrouter", ); const preset = HarnessProviderKinds.find((p) => p.value == kind)!; const [name, setName] = useState(provider?.name || ""); const [base_url, setBaseUrl] = useState(provider?.base_url || ""); const [api_key, setApiKey] = useState(""); const [clear_key, setClearKey] = useState(false); const [enabled, setEnabled] = useState(provider?.enabled ?? true); const [loading, setLoading] = useState(false); const [error, setError] = useState(); const id = `provider-${provider?.id || "new"}`; const submit = async () => { if (loading) return; setLoading(true); setError(undefined); const res = await postHarnessApi({ path: "save-provider", body: { provider_id: provider?.id, kind, name, base_url, api_key: api_key || undefined, clear_key: clear_key || undefined, enabled, }, }); setLoading(false); if (!res.success || !res.singleRes) { setError(res.msg || "Couldn't save the provider."); return; } onSaved(res.singleRes, res.msg || "Saved."); }; return (
{provider ? null : ( setName(e.target.value)} /> setBaseUrl(e.target.value)} /> setApiKey(e.target.value)} /> {provider?.has_key ? ( ) : null} ); }