(
+ `/api/v2/tasks?path=${workspacePath}`,
+ () => tasksApi.getAll(workspacePath)
+ );
+ const tasksById = new Map(allTasksData?.tasks.map((t) => [t.id, t]) ?? []);
+
useEffect(() => {
if (!open || !taskId) {
setTask(null);
@@ -172,13 +182,6 @@ export function TaskDetailModal({
{/* Metadata */}
- {task.depends_on.length > 0 && (
-
-
- {task.depends_on.length} dependenc{task.depends_on.length === 1 ? 'y' : 'ies'}:
- {' '}{task.depends_on.map((id) => id.slice(0, 8)).join(', ')}
-
- )}
{task.estimated_hours != null && (
@@ -187,6 +190,43 @@ export function TaskDetailModal({
)}
+ {/* Dependencies — full list with status highlights and navigation */}
+ {task.depends_on.length > 0 && (
+
+
+
+ Dependencies ({task.depends_on.length})
+
+
+ {task.depends_on.map((depId) => {
+ const dep = tasksById.get(depId);
+ const isIncomplete = dep && !['DONE', 'MERGED'].includes(dep.status);
+ return (
+ -
+ {dep && (
+
+ {dep.status}
+
+ )}
+ {onOpenTask ? (
+
+ ) : (
+
+ {dep?.title ?? depId.slice(0, 12)}
+
+ )}
+
+ );
+ })}
+
+
+ )}
+
{/* Requirements */}
{(task.requirement_ids ?? []).length > 0 && (