import { useState } from "react"; import { errorMessage } from "../api/client.js"; import { useScripts, useUpsertProfile } from "../api/hooks.js"; import { FormInput, FormSelect } from "./FormControls.jsx"; import { ConfigFields } from "./workflow/ConfigFields.jsx"; import { DEFAULT_OWNER } from "../lib/tenant.js"; /** * @param {"add" | "edit"} mode * @param {{ * owner: string, * name?: string, * script?: string, * config?: Record, * description?: string, * }} initial * @param {number} [usageCount] */ export function ProfileEditorModal({ mode, initial, onClose, onSaved, usageCount = 0 }) { const { data: scripts = [] } = useScripts(); const upsert = useUpsertProfile(); const [form, setForm] = useState(() => ({ owner: initial.owner || DEFAULT_OWNER, name: initial.name || "", script: initial.script || "", config: initial.config && typeof initial.config === "object" && !Array.isArray(initial.config) ? { ...initial.config } : {}, description: initial.description || "", })); const [formError, setFormError] = useState(null); const [confirmScript, setConfirmScript] = useState(false); const scriptChanged = mode === "edit" && form.script !== (initial.script || ""); const listed = scripts.find((s) => (typeof s === "string" ? s : s.name) === form.script); const meta = listed && typeof listed === "object" ? listed.meta : null; function submit() { setFormError(null); if (!form.name.trim()) { setFormError("name is required"); return; } if (!form.script.trim()) { setFormError("script is required"); return; } upsert.mutate( { owner: form.owner, name: form.name, script: form.script, config: form.config, description: form.description, }, { onSuccess: (data) => { onSaved?.(data?.profile ?? data); onClose(); }, }, ); } function onSubmit(e) { e.preventDefault(); if (scriptChanged && usageCount > 0 && !confirmScript) { setConfirmScript(true); return; } submit(); } const title = mode === "add" ? "New profile" : `Edit ${form.name}`; return (

{title}

{mode === "add" ? ( ) : (

{form.name} (name cannot be changed)

)} {scriptChanged && usageCount > 0 ? (

Changing the script updates {usageCount} workflow {usageCount === 1 ? "" : "s"} that use this profile {confirmScript ? ". Save to apply." : "."}

) : null}

Config (defaults for every step that uses this profile)

setForm({ ...form, config })} />
{formError ?

{formError}

: null} {upsert.isError ? (

{errorMessage(upsert.error)}

) : null}
); }