import { useEffect, useState } from "react"; import { useFetch } from "../hooks"; import { post } from "../api"; import { getLang, useT } from "../i18n"; import { JOB_TEMPLATES, SCHEDULES, type JobTemplate } from "../jobTemplates"; import { Icon } from "./Icon"; import { ModelSelect } from "./ModelSelect"; import { FolderPicker } from "./NewSession"; /** Create an automation from a template: pick it, choose the project, adjust, create. */ export function JobTemplateDialog({ onClose, onCreated }: { onClose: () => void; onCreated: () => void }) { const t = useT(); const de = getLang() === "de"; const [tpl, setTpl] = useState(); const [name, setName] = useState(""); const [schedule, setSchedule] = useState(""); const [agent, setAgent] = useState("build"); const [mode, setMode] = useState("auto"); const [model, setModel] = useState(""); const [prompt, setPrompt] = useState(""); const [cwd, setCwd] = useState(localStorage.getItem("codecraft.lastDir") ?? ""); const [error, setError] = useState(); const [busy, setBusy] = useState(false); const config = useFetch<{ default_model?: string }>("/config").data; useEffect(() => { if (!model && config?.default_model) setModel(config.default_model); }, [config, model]); const choose = (x: JobTemplate) => { setTpl(x); setName(de ? x.name.de : x.name.en); setSchedule(x.schedule); setAgent(x.agent); setPrompt(x.prompt); }; const create = async () => { setBusy(true); setError(undefined); try { await post("/jobs/create", { cwd, name: name.trim(), schedule: schedule.trim(), agent, permission_mode: mode, model: model || undefined, prompt }); onCreated(); onClose(); } catch (e: any) { setError(e.message); } finally { setBusy(false); } }; return (
e.stopPropagation()}> {!tpl ? ( <>

{t("jobs.fromTemplate")}

{JOB_TEMPLATES.map((x) => ( ))}
) : ( <>

{de ? tpl.name.de : tpl.name.en}

{t("jobs.tplProject")}
{t("jobs.tplSchedule")}
{SCHEDULES.map((s) => ( ))}
setSchedule(e.target.value)} placeholder="0 3 * * *" /> {t("jobs.tplCronHint")}