import { useState, useSyncExternalStore } from "react"; import { ExperimentView } from "@chopin/experiment/react"; import type { PublishedInvestigation } from "@chopin/experiment/records"; import type { View } from "@chopin/experiment"; import type { ExperimentStore } from "./store"; import { RequestIdentity } from "./request-id"; export function EvidenceActions({ store, item, view, disabled }: { store: ExperimentStore; item: PublishedInvestigation; view: View; disabled: boolean; }) { let [open, setOpen] = useState(false); let [revision, setRevision] = useState(0); let [conclusion, setConclusion] = useState(""); let [rationale, setRationale] = useState(""); let [busy, setBusy] = useState(false); let [error, setError] = useState(""); let [operation] = useState(() => new RequestIdentity()); async function act(action: () => Promise) { setBusy(true); setError(""); try { await action(); } catch (error) { setError((error as Error).message); await store.load(item.id); } finally { setBusy(false); } } return (
{error &&

{error}

}
{open && (
{ event.preventDefault(); void act(async () => { try { await store.action(item.id, "decision", { id: operation.key({ view: view.key, revision, conclusion, rationale }), view: view.key, revision, conclusion, rationale, }); operation.clear(); } finally { setOpen(false); } }); }} >