summaryrefslogtreecommitdiff
path: root/makima/frontend/src/components/directives/DirectiveContextMenu.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'makima/frontend/src/components/directives/DirectiveContextMenu.tsx')
-rw-r--r--makima/frontend/src/components/directives/DirectiveContextMenu.tsx28
1 files changed, 28 insertions, 0 deletions
diff --git a/makima/frontend/src/components/directives/DirectiveContextMenu.tsx b/makima/frontend/src/components/directives/DirectiveContextMenu.tsx
index 07322e2..3f24ce1 100644
--- a/makima/frontend/src/components/directives/DirectiveContextMenu.tsx
+++ b/makima/frontend/src/components/directives/DirectiveContextMenu.tsx
@@ -11,6 +11,12 @@ interface DirectiveContextMenuProps {
onArchive: () => void;
onDelete: () => void;
onGoToPR: () => void;
+ /**
+ * Reset the contract to a fresh empty draft (clears goal + pr_url, status
+ * back to 'draft'). Past revisions stay as history. Optional so the legacy
+ * tabular UI doesn't have to wire it up.
+ */
+ onNewDraft?: () => void;
}
export function DirectiveContextMenu({
@@ -23,6 +29,7 @@ export function DirectiveContextMenu({
onArchive,
onDelete,
onGoToPR,
+ onNewDraft,
}: DirectiveContextMenuProps) {
const menuRef = useRef<HTMLDivElement>(null);
@@ -73,6 +80,10 @@ export function DirectiveContextMenu({
const showPause = directive.status === "active";
const showArchive = directive.status !== "archived";
const showGoToPR = !!directive.prUrl;
+ // "New draft" appears once the contract is inactive (its iteration has
+ // shipped) — that's the explicit affordance for starting the next cycle
+ // on a clean slate while keeping prior revisions as history.
+ const showNewDraft = !!onNewDraft && directive.status === "inactive";
return (
<div
@@ -85,6 +96,23 @@ export function DirectiveContextMenu({
{directive.title}
</div>
+ {/* New draft — the canonical action on an inactive (shipped) contract. */}
+ {showNewDraft && (
+ <>
+ <button
+ className={menuItemClass}
+ onClick={() => {
+ onNewDraft?.();
+ onClose();
+ }}
+ >
+ <span className="text-emerald-300">+</span>
+ New draft
+ </button>
+ <div className={dividerClass} />
+ </>
+ )}
+
{/* Status actions */}
{showStart && (
<button