MCPcopy Create free account
hub / github.com/scopecraft/command / ParentTaskView

Function ParentTaskView

tasks-ui/src/components/v2/ParentTaskView.tsx:31–329  ·  view source on GitHub ↗
({
  task,
  subtasks,
  documents = [],
  content,
  isEditing,
  onEdit,
  onCancel,
  onSave,
  onContentChange,
  isUpdating = false,
}: ParentTaskViewProps)

Source from the content-addressed store, hash-verified

29}
30
31export function ParentTaskView({
32 task,
33 subtasks,
34 documents = [],
35 content,
36 isEditing,
37 onEdit,
38 onCancel,
39 onSave,
40 onContentChange,
41 isUpdating = false,
42}: ParentTaskViewProps) {
43 const navigate = useNavigate();
44 const metadata = task.metadata || task;
45 const deleteTask = useDeleteTask();
46 const [showDeleteDialog, setShowDeleteDialog] = useState(false);
47 const [cascadeDelete, setCascadeDelete] = useState(false);
48
49 const handleDelete = async () => {
50 try {
51 await deleteTask.mutateAsync({ id: task.id, cascade: cascadeDelete });
52 // Navigate back to the workflow list
53 navigate({ to: `/workflow/${metadata.workflowState || 'current'}` });
54 } catch (error) {
55 console.error('Failed to delete task:', error);
56 // Error handling will be improved in a later step
57 }
58 };
59
60 // Ensure subtasks have parent context for proper URL generation
61 const subtasksWithParent = subtasks.map((subtask) => ({
62 ...subtask,
63 // Add parent task reference if not already present
64 parent_task:
65 subtask.parent_task || subtask.metadata?.parentTask || task.id || task.metadata?.id,
66 }));
67
68 return (
69 <div className="min-h-screen bg-background">
70 {/* Header */}
71 <div className="bg-card border-b">
72 <div className="max-w-6xl mx-auto px-6 py-4">
73 <div className="flex items-start justify-between gap-4">
74 <div className="flex items-start gap-3 flex-1 min-w-0">
75 <TaskTypeIcon type={metadata.type || 'feature'} />
76 <div className="flex-1 min-w-0">
77 <h1 className="text-2xl font-bold text-foreground">{metadata.title}</h1>
78 <div className="flex items-center flex-wrap gap-2 mt-2">
79 <StatusBadge status={metadata.status || 'To Do'} />
80 <PriorityIndicator priority={metadata.priority || 'Medium'} />
81 <WorkflowStateBadge workflow={metadata.workflowState || 'backlog'} />
82 {metadata.tags && metadata.tags.length > 0 && (
83 <>
84 <span className="text-muted-foreground">•</span>
85 {metadata.tags.map((tag) => (
86 <span key={tag} className="font-mono text-xs bg-muted px-2 py-1 rounded">
87 #{tag}
88 </span>

Callers

nothing calls this directly

Calls 2

useDeleteTaskFunction · 0.90
getTaskUrlFunction · 0.90

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…