import { useState } from "preact/hooks"; import { createClient } from "@connectrpc/connect"; import { createConnectTransport } from "@connectrpc/connect-web"; import { X, Play } from "lucide-preact"; import type { Item } from "../gen/homelab/v1/homelab_pb"; import { HomelabService } from "../gen/homelab/v1/homelab_pb"; const client = createClient(HomelabService, createConnectTransport({ baseUrl: "" })); /** Карточка response-скрипта: форма по количеству аргументов; результат — в модалке. */ export function ScriptCard({ s }: { s: Item }) { const [args, setArgs] = useState(Array(s.args).fill("")); const [output, setOutput] = useState(null); const [error, setError] = useState(""); const [running, setRunning] = useState(false); const run = async () => { setRunning(true); try { setOutput((await client.runScript({ name: s.name, args })).output); setError(""); } catch (e) { setError(String(e)); } finally { setRunning(false); } }; return (

{s.name}

{error && }
{s.argTypes.map((t, i) => ( setArgs((a) => { const next = [...a]; next[i] = (e.target as HTMLInputElement).value; return next; }) } /> ))}
{output != null && ( ); }