From 76a956ca8adefbd79fb9423093d55553d867ef33 Mon Sep 17 00:00:00 2001 From: Dotta Date: Mon, 13 Apr 2026 09:04:00 -0500 Subject: [PATCH] Hide empty subissues list on issue detail --- ui/src/lib/issue-detail-subissues.test.ts | 18 +++++++++ ui/src/lib/issue-detail-subissues.ts | 3 ++ ui/src/pages/IssueDetail.tsx | 47 ++++++++++++++--------- 3 files changed, 50 insertions(+), 18 deletions(-) create mode 100644 ui/src/lib/issue-detail-subissues.test.ts create mode 100644 ui/src/lib/issue-detail-subissues.ts diff --git a/ui/src/lib/issue-detail-subissues.test.ts b/ui/src/lib/issue-detail-subissues.test.ts new file mode 100644 index 00000000000..0c0b97cad69 --- /dev/null +++ b/ui/src/lib/issue-detail-subissues.test.ts @@ -0,0 +1,18 @@ +// @vitest-environment node + +import { describe, expect, it } from "vitest"; +import { shouldRenderRichSubIssuesSection } from "./issue-detail-subissues"; + +describe("shouldRenderRichSubIssuesSection", () => { + it("shows the rich sub-issues section while child issues are loading", () => { + expect(shouldRenderRichSubIssuesSection(true, 0)).toBe(true); + }); + + it("shows the rich sub-issues section when at least one child issue exists", () => { + expect(shouldRenderRichSubIssuesSection(false, 1)).toBe(true); + }); + + it("hides the rich sub-issues section when there are no child issues", () => { + expect(shouldRenderRichSubIssuesSection(false, 0)).toBe(false); + }); +}); diff --git a/ui/src/lib/issue-detail-subissues.ts b/ui/src/lib/issue-detail-subissues.ts new file mode 100644 index 00000000000..22801b7256f --- /dev/null +++ b/ui/src/lib/issue-detail-subissues.ts @@ -0,0 +1,3 @@ +export function shouldRenderRichSubIssuesSection(childIssuesLoading: boolean, childIssueCount: number): boolean { + return childIssuesLoading || childIssueCount > 0; +} diff --git a/ui/src/pages/IssueDetail.tsx b/ui/src/pages/IssueDetail.tsx index 43e0e163fef..efde67eb59a 100644 --- a/ui/src/pages/IssueDetail.tsx +++ b/ui/src/pages/IssueDetail.tsx @@ -78,6 +78,7 @@ import { ScrollArea } from "@/components/ui/scroll-area"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { formatIssueActivityAction } from "@/lib/activity-format"; import { buildIssuePropertiesPanelKey } from "../lib/issue-properties-panel-key"; +import { shouldRenderRichSubIssuesSection } from "../lib/issue-detail-subissues"; import { resolveIssueChatTranscriptRuns } from "../lib/issueChatTranscriptRuns"; import { buildSubIssueDefaultsForViewer } from "../lib/subIssueDefaults"; import { @@ -93,6 +94,7 @@ import { MoreHorizontal, MoreVertical, Paperclip, + Plus, Repeat, SlidersHorizontal, Trash2, @@ -748,6 +750,7 @@ export function IssueDetail() { () => buildIssuePropertiesPanelKey(issue ?? null, childIssues), [childIssues, issue], ); + const showRichSubIssuesSection = shouldRenderRichSubIssuesSection(childIssuesLoading, childIssues.length); const openNewSubIssue = useCallback(() => { if (!issue) return; openNewIssue(buildSubIssueDefaultsForViewer(issue, currentUserId)); @@ -2117,25 +2120,33 @@ export function IssueDetail() { missingBehavior="placeholder" /> -<<<<<<< HEAD -
-
-

Sub-issues

+ {showRichSubIssuesSection ? ( +
+
+

Sub-issues

+
+
- -
+ ) : ( +
+ +
+ )}