import { useState } from "react"; import { LuPencil, LuPlus, LuTrash2, LuX } from "react-icons/lu"; import { errorMessage } from "../api/client.js"; import { useDeleteHttpPage, useHttpPages, useUpsertHttpPage, } from "../api/hooks.js"; import { ConfirmDialog } from "../components/ConfirmDialog.jsx"; import { formatTime } from "../lib/format"; const emptyForm = { name: "", content: "", mime: "html", status: 200, kind: "response", }; function kindLabel(kind) { return kind === "template" ? "HTML template" : "HTTP response"; } export function ResponsesPage() { const { data: pages = [], isLoading } = useHttpPages(); const upsert = useUpsertHttpPage(); const del = useDeleteHttpPage(); const [mode, setMode] = useState(null); const [form, setForm] = useState(emptyForm); const [confirmDelete, setConfirmDelete] = useState(null); function openAdd() { setMode("add"); setForm(emptyForm); } function openEdit(p) { setMode("edit"); setForm({ name: p.name, content: p.content, mime: p.mime, status: p.status, kind: p.kind ?? "response", system: Boolean(p.system), }); } function closeForm() { setMode(null); setForm(emptyForm); } function onSubmit(e) { e.preventDefault(); upsert.mutate( { name: form.name, content: form.content, mime: form.kind === "template" ? "html" : form.mime, status: Number(form.status) || 200, kind: form.kind, }, { onSuccess: closeForm }, ); } return (
Named HTML/JSON pages for HTTP trigger responses, or HTML templates for Mustache
rendering in workflows. HTTP responses use{" "}
response: name; templates use{" "}
render-template.js with{" "}
config.template: name.
No response pages yet.
) : (| Name | Kind | Mime | Status | Updated | |
|---|---|---|---|---|---|
| {p.name} {p.system ? ( system ) : null} | {kindLabel(p.kind ?? "response")} | {p.mime} | {p.kind === "template" ? "—" : p.status} | {formatTime(p.updated_at)} |