import { useCallback, useEffect, useState } from "react"; import { ApiError, LANGFLOW_URL, api, type FlowDefinition, type FlowVersion, } from "../api"; export default function AdminTab() { const [flows, setFlows] = useState([]); const [versions, setVersions] = useState>({}); const [langflowId, setLangflowId] = useState(""); const [importName, setImportName] = useState(""); const [error, setError] = useState(""); const [info, setInfo] = useState(""); const load = useCallback(async () => { try { const list = await api.listFlows(); setFlows(list); const all: Record = {}; for (const f of list) { all[f.id] = await api.listVersions(f.id); } setVersions(all); } catch (e) { setError(e instanceof ApiError ? `${e.status}: ${e.message}` : String(e)); } }, []); useEffect(() => { void load(); }, [load]); async function onImport() { setError(""); setInfo(""); try { const result = await api.importFlow( langflowId, importName.trim() ? importName.trim() : undefined, ); setInfo( `Importiert: ${result.definition.name} (Version ${result.version.version_no})`, ); setLangflowId(""); setImportName(""); await load(); } catch (e) { setError(e instanceof ApiError ? `${e.status}: ${e.message}` : String(e)); } } async function onDeploy(flowId: string, versionNo: number) { setError(""); setInfo(""); try { const version = await api.deployVersion(flowId, versionNo); setInfo(`Deployed: Version ${version.version_no} (${version.lfx_flow_id})`); await load(); } catch (e) { setError(e instanceof ApiError ? `${e.status}: ${e.message}` : String(e)); } } return (

Administration

{error &&

{error}

} {info &&

{info}

}

Flows werden visuell in Langflow entworfen:{" "} Langflow öffnen

Import aus Langflow

setLangflowId(e.target.value)} placeholder="Langflow Flow-ID (UUID)" style={{ flex: 1, fontFamily: "monospace" }} /> setImportName(e.target.value)} placeholder="Name (optional)" />

Flows + Versionen

{flows.length === 0 &&

Keine Flows vorhanden.

}
    {flows.map((f) => (
  • {f.name}
      {(versions[f.id] ?? []).map((v) => (
    • v{v.version_no} ·{" "} {v.deployed_at ? `deployed (${v.lfx_flow_id})` : "nicht deployed"} ·{" "} {v.author || "–"}{" "}
    • ))}
  • ))}
); }