"use client"; import { useState } from "react"; import { useRouter } from "next/navigation"; import { approvepo, rejectPo, requestEdits, requestVendorId } from "./actions"; import type { POStatus } from "@prisma/client"; export function ApprovalActions({ poId, poStatus, }: { poId: string; poStatus: POStatus; }) { const router = useRouter(); const [note, setNote] = useState(""); const [activeAction, setActiveAction] = useState(null); const [pending, setPending] = useState(null); const [error, setError] = useState(""); async function dispatch(action: string, requireNote = false) { if (requireNote && !note.trim()) { setError("A note is required for this action."); return; } setPending(action); setError(""); let result: { ok: true } | { error: string } | undefined; if (action === "approve") result = await approvepo({ poId, note }); else if (action === "approve_note") result = await approvepo({ poId, note, withNote: true }); else if (action === "reject") result = await rejectPo({ poId, note }); else if (action === "request_edits") result = await requestEdits({ poId, note }); else if (action === "request_vendor_id") result = await requestVendorId({ poId }); if (result && "error" in result) { setError(result.error); setPending(null); } else { router.push("/approvals"); router.refresh(); } } return (

Decision

{(activeAction === "reject" || activeAction === "request_edits" || activeAction === "approve_note") && (