From 92c079410e9493d55542ad428c359c8db81afde4 Mon Sep 17 00:00:00 2001 From: Abhimanyu Saharan Date: Fri, 13 Feb 2026 15:57:27 +0530 Subject: [PATCH] feat: enhance DependencyBanner to support resolved dependencies and update display logic --- frontend/src/app/boards/[boardId]/page.tsx | 69 ++++++++++++++++--- .../components/molecules/DependencyBanner.tsx | 2 + 2 files changed, 62 insertions(+), 9 deletions(-) diff --git a/frontend/src/app/boards/[boardId]/page.tsx b/frontend/src/app/boards/[boardId]/page.tsx index 266ce16..ce07ba2 100644 --- a/frontend/src/app/boards/[boardId]/page.tsx +++ b/frontend/src/app/boards/[boardId]/page.tsx @@ -2239,6 +2239,28 @@ export default function BoardDetailPage() { }); }, [openComments, selectedTask, taskById]); + const selectedTaskResolvedDependencies = useMemo< + DependencyBannerDependency[] + >(() => { + if (!selectedTask) return []; + return tasks + .filter((task) => task.depends_on_task_ids?.includes(selectedTask.id)) + .map((task) => { + const statusLabel = task.status ? task.status.replace(/_/g, " ") : "unknown"; + return { + id: task.id, + title: task.title, + statusLabel, + isBlocking: false, + isDone: task.status === "done", + onClick: () => { + openComments({ id: task.id }); + }, + disabled: false, + }; + }); + }, [openComments, selectedTask, tasks]); + useEffect(() => { if (!taskIdFromUrl) return; if (openedTaskIdFromUrlRef.current === taskIdFromUrl) return; @@ -3410,15 +3432,44 @@ export default function BoardDetailPage() {

Dependencies

- - {selectedTask?.is_blocked - ? "Blocked by incomplete dependencies." - : null} - - + {(() => { + const hasDependencies = + (selectedTask?.depends_on_task_ids?.length ?? 0) > 0; + const hasResolvedDependencies = + selectedTaskResolvedDependencies.length > 0; + const isDependencyModeBlocked = hasDependencies + ? selectedTask?.is_blocked === true + : false; + const bannerVariant = + hasDependencies || hasResolvedDependencies + ? isDependencyModeBlocked + ? "blocked" + : "resolved" + : "blocked"; + const displayedDependencies = + hasDependencies && selectedTask + ? selectedTaskDependencies + : selectedTaskResolvedDependencies; + const childrenMessage = + hasDependencies && selectedTask?.is_blocked + ? "Blocked by incomplete dependencies." + : hasDependencies + ? "Dependencies resolved." + : hasResolvedDependencies + ? "This task resolves these tasks." + : null; + + return ( + + {childrenMessage} + + ); + })()} +

diff --git a/frontend/src/components/molecules/DependencyBanner.tsx b/frontend/src/components/molecules/DependencyBanner.tsx index aad178d..01bbea3 100644 --- a/frontend/src/components/molecules/DependencyBanner.tsx +++ b/frontend/src/components/molecules/DependencyBanner.tsx @@ -20,6 +20,8 @@ interface DependencyBannerProps { emptyMessage?: string; } +type DependencyBannerVariant = "blocked" | "resolved"; + const toneClassByVariant: Record = { blocked: "border-rose-200 bg-rose-50 text-rose-700", resolved: "border-blue-200 bg-blue-50 text-blue-700",