diff options
| author | soryu <soryu@soryu.co> | 2026-01-19 17:55:22 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-01-19 17:55:22 +0000 |
| commit | 52d121269195f0e799d0ab4241e4facc3c7c0596 (patch) | |
| tree | 13d3dcdd743cf15f31d6d87097bf51ebfd01a305 /makima/frontend/src/components/workflow/PhaseColumn.tsx | |
| parent | 164941cbd591b46f69a034bb9b86521fd7700ddb (diff) | |
| download | soryu-52d121269195f0e799d0ab4241e4facc3c7c0596.tar.gz soryu-52d121269195f0e799d0ab4241e4facc3c7c0596.zip | |
Add right-click context menu for contracts on contracts and board pages (#8)
Implement a reusable ContractContextMenu component that provides:
- Mark as Complete/Active/Archive status actions (conditionally shown)
- Go to Supervisor Task link (when supervisor exists)
- Delete action with confirmation
Integrate context menu into:
- ContractList.tsx on the contracts page
- WorkflowBoard on the workflow/board page via PhaseColumn and WorkflowContractCard
Features match ElementContextMenu patterns:
- Fixed positioning with z-50
- Click outside and Escape key close handlers
- Viewport overflow prevention
- Dark theme colors (#0a1628, #0d1b2d, #75aafc, #9bc3ff)
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Diffstat (limited to 'makima/frontend/src/components/workflow/PhaseColumn.tsx')
| -rw-r--r-- | makima/frontend/src/components/workflow/PhaseColumn.tsx | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/makima/frontend/src/components/workflow/PhaseColumn.tsx b/makima/frontend/src/components/workflow/PhaseColumn.tsx index ddea85f..277b04c 100644 --- a/makima/frontend/src/components/workflow/PhaseColumn.tsx +++ b/makima/frontend/src/components/workflow/PhaseColumn.tsx @@ -7,6 +7,7 @@ interface PhaseColumnProps { contracts: ContractSummary[]; onContractClick: (contractId: string) => void; onDrop: (contractId: string, phase: ContractPhase) => void; + onContextMenu?: (e: React.MouseEvent, contract: ContractSummary) => void; } const phaseConfig: Record< @@ -50,6 +51,7 @@ export function PhaseColumn({ contracts, onContractClick, onDrop, + onContextMenu, }: PhaseColumnProps) { const [isDragOver, setIsDragOver] = useState(false); const config = phaseConfig[phase]; @@ -114,6 +116,7 @@ export function PhaseColumn({ e.dataTransfer.setData("contractId", contract.id); e.dataTransfer.effectAllowed = "move"; }} + onContextMenu={onContextMenu ? (e) => onContextMenu(e, contract) : undefined} /> )) )} |
