From a07f7489fa1d13364a40a61cc06f83c86ecb5145 Mon Sep 17 00:00:00 2001 From: Brad Groux Date: Mon, 2 Feb 2026 02:31:13 -0600 Subject: [PATCH] fix: clicking backlog task now expands inline instead of navigating away Previously clicking a task in the backlog called navigateToTask which switched back to the board view. Now tasks expand/collapse inline with full description, dates, agent, and recent comments. --- web/src/App.tsx | 5 +- web/src/components/backlog/BacklogPage.tsx | 57 +++++++++++++++++++--- 2 files changed, 51 insertions(+), 11 deletions(-) diff --git a/web/src/App.tsx b/web/src/App.tsx index 6373439e..dcfed304 100644 --- a/web/src/App.tsx +++ b/web/src/App.tsx @@ -59,10 +59,7 @@ function MainContent() { } > - setView('board')} - onTaskClick={(taskId) => navigateToTask(taskId)} - /> + setView('board')} /> ); } diff --git a/web/src/components/backlog/BacklogPage.tsx b/web/src/components/backlog/BacklogPage.tsx index 9d6287b8..ceed0cd8 100644 --- a/web/src/components/backlog/BacklogPage.tsx +++ b/web/src/components/backlog/BacklogPage.tsx @@ -34,14 +34,14 @@ import { cn } from '@/lib/utils'; interface BacklogPageProps { onBack: () => void; - onTaskClick?: (taskId: string) => void; } -export function BacklogPage({ onBack, onTaskClick }: BacklogPageProps) { +export function BacklogPage({ onBack }: BacklogPageProps) { const [search, setSearch] = useState(''); const [projectFilter, setProjectFilter] = useState('all'); const [typeFilter, setTypeFilter] = useState('all'); const [selectedIds, setSelectedIds] = useState>(new Set()); + const [expandedTaskId, setExpandedTaskId] = useState(null); const { toast } = useToast(); const { data: tasks = [], isLoading } = useBacklogTasks(); @@ -240,10 +240,11 @@ export function BacklogPage({ onBack, onTaskClick }: BacklogPageProps) { key={task.id} task={task} isSelected={selectedIds.has(task.id)} + isExpanded={expandedTaskId === task.id} onToggleSelect={() => handleToggleSelect(task.id)} onPromote={() => handlePromote(task.id)} onDelete={() => handleDelete(task.id)} - onClick={onTaskClick} + onClick={() => setExpandedTaskId(expandedTaskId === task.id ? null : task.id)} priorityColors={priorityColors} /> ))} @@ -256,16 +257,18 @@ export function BacklogPage({ onBack, onTaskClick }: BacklogPageProps) { interface BacklogTaskCardProps { task: Task; isSelected: boolean; + isExpanded: boolean; onToggleSelect: () => void; onPromote: () => void; onDelete: () => void; - onClick?: (taskId: string) => void; + onClick: () => void; priorityColors: Record; } function BacklogTaskCard({ task, isSelected, + isExpanded, onToggleSelect, onPromote, onDelete, @@ -276,7 +279,8 @@ function BacklogTaskCard({
@@ -287,11 +291,11 @@ function BacklogTaskCard({ className="mt-1" /> -
onClick?.(task.id)}> +

{task.title}

- {task.description && ( + {!isExpanded && task.description && (

{task.description}

@@ -347,6 +351,45 @@ function BacklogTaskCard({ )}
+ + {/* Expanded detail view */} + {isExpanded && ( +
+ {task.description && ( +
+

Description

+

+ {task.description} +

+
+ )} +
+
+ Created:{' '} + {new Date(task.created).toLocaleDateString()} +
+
+ Updated:{' '} + {new Date(task.updated).toLocaleDateString()} +
+ {task.agent && ( +
+ Agent: {task.agent} +
+ )} +
+ {task.comments && task.comments.length > 0 && ( +
+

Comments ({task.comments.length})

+ {task.comments.slice(-3).map((comment, i) => ( +
+ {typeof comment === 'string' ? comment : comment.text} +
+ ))} +
+ )} +
+ )}