From 922a8c3cc6474cf6f1f8785dd51bab21c72de1b1 Mon Sep 17 00:00:00 2001 From: Britannio Jarrett <33752528+britannio@users.noreply.github.com> Date: Mon, 20 Oct 2025 15:38:36 +0100 Subject: [PATCH] Fixed! The [TaskPanel.tsx](file:///private/var/folders/5q/5vgq75y92dz0k7n62z93299r0000gn/T/vibe-kanban/worktrees/0fd2-tasks-with-long/frontend/src/components/panels/TaskPanel.tsx) now uses flexbox layout where the description area scrolls independently while the attempts section stays pinned at the bottom and always visible. (#1058) --- frontend/src/components/panels/TaskPanel.tsx | 150 ++++++++++--------- 1 file changed, 76 insertions(+), 74 deletions(-) diff --git a/frontend/src/components/panels/TaskPanel.tsx b/frontend/src/components/panels/TaskPanel.tsx index e0370f88..7da9bb4e 100644 --- a/frontend/src/components/panels/TaskPanel.tsx +++ b/frontend/src/components/panels/TaskPanel.tsx @@ -74,90 +74,92 @@ const TaskPanel = ({ task }: TaskPanelProps) => { return ( <> -
-
+
+
{descriptionContent && ( )}
- {isAttemptsLoading && ( -
- {t('taskPanel.loadingAttempts')} -
- )} - {isAttemptsError && ( -
- {t('taskPanel.errorLoadingAttempts')} -
- )} - {!isAttemptsLoading && !isAttemptsError && ( - - - - - - - - {displayedAttempts.length === 0 ? ( +
+ {isAttemptsLoading && ( +
+ {t('taskPanel.loadingAttempts')} +
+ )} + {isAttemptsError && ( +
+ {t('taskPanel.errorLoadingAttempts')} +
+ )} + {!isAttemptsLoading && !isAttemptsError && ( +
-
- - {t('taskPanel.attemptsCount', { - count: displayedAttempts.length, - })} - - - - -
-
+ - + - ) : ( - displayedAttempts.map((attempt) => ( - { - if (projectId && task.id && attempt.id) { - navigate( - paths.attempt(projectId, task.id, attempt.id) - ); - } - }} - > - - - + + {displayedAttempts.length === 0 ? ( + + - )) - )} - -
- {t('taskPanel.noAttempts')} - +
+ + {t('taskPanel.attemptsCount', { + count: displayedAttempts.length, + })} + + + + +
+
- {attempt.executor || 'Base Agent'} - {attempt.branch || '—'} - {formatTimeAgo(attempt.created_at)} +
+ {t('taskPanel.noAttempts')}
- )} + ) : ( + displayedAttempts.map((attempt) => ( + { + if (projectId && task.id && attempt.id) { + navigate( + paths.attempt(projectId, task.id, attempt.id) + ); + } + }} + > + + {attempt.executor || 'Base Agent'} + + {attempt.branch || '—'} + + {formatTimeAgo(attempt.created_at)} + + + )) + )} + + + )} +