({
task,
content,
isEditing,
onEdit,
onCancel,
onSave,
onContentChange,
isUpdating = false,
}: SimpleTaskViewProps)
| 24 | } |
| 25 | |
| 26 | export function SimpleTaskView({ |
| 27 | task, |
| 28 | content, |
| 29 | isEditing, |
| 30 | onEdit, |
| 31 | onCancel, |
| 32 | onSave, |
| 33 | onContentChange, |
| 34 | isUpdating = false, |
| 35 | }: SimpleTaskViewProps) { |
| 36 | const metadata = task.metadata || task; |
| 37 | const navigate = useNavigate(); |
| 38 | const deleteTask = useDeleteTask(); |
| 39 | const [showDeleteDialog, setShowDeleteDialog] = useState(false); |
| 40 | |
| 41 | const handleDelete = async () => { |
| 42 | try { |
| 43 | await deleteTask.mutateAsync({ id: task.id }); |
| 44 | // Navigate back to the workflow list |
| 45 | navigate({ to: `/workflow/${metadata.workflowState || 'current'}` }); |
| 46 | } catch (error) { |
| 47 | console.error('Failed to delete task:', error); |
| 48 | // Error handling will be improved in a later step |
| 49 | } |
| 50 | }; |
| 51 | |
| 52 | return ( |
| 53 | <div className="min-h-screen bg-background"> |
| 54 | {/* Header */} |
| 55 | <div className="bg-card border-b"> |
| 56 | <div className="max-w-6xl mx-auto px-6 py-4"> |
| 57 | <div className="flex items-start justify-between gap-4"> |
| 58 | <div className="flex items-start gap-3 flex-1 min-w-0"> |
| 59 | <TaskTypeIcon type={metadata.type || 'feature'} /> |
| 60 | <div className="flex-1 min-w-0"> |
| 61 | <h1 className="text-2xl font-bold text-foreground">{metadata.title}</h1> |
| 62 | <div className="flex items-center flex-wrap gap-2 mt-2"> |
| 63 | <StatusBadge status={metadata.status || 'To Do'} /> |
| 64 | <PriorityIndicator priority={metadata.priority || 'Medium'} /> |
| 65 | <WorkflowStateBadge workflow={metadata.location || 'backlog'} /> |
| 66 | {metadata.area && ( |
| 67 | <> |
| 68 | <span className="text-muted-foreground">•</span> |
| 69 | <span className="text-sm text-muted-foreground">Area: {metadata.area}</span> |
| 70 | </> |
| 71 | )} |
| 72 | {metadata.assigned_to && ( |
| 73 | <> |
| 74 | <span className="text-muted-foreground">•</span> |
| 75 | <span className="text-sm text-muted-foreground">@{metadata.assigned_to}</span> |
| 76 | </> |
| 77 | )} |
| 78 | </div> |
| 79 | {metadata.tags && metadata.tags.length > 0 && ( |
| 80 | <div className="flex flex-wrap gap-1 mt-2"> |
| 81 | {metadata.tags.map((tag) => ( |
| 82 | <span key={tag} className="font-mono text-xs bg-muted px-2 py-1 rounded"> |
| 83 | #{tag} |
nothing calls this directly
no test coverage detected
searching dependent graphs…