diff --git a/ui/src/components/IssuesList.tsx b/ui/src/components/IssuesList.tsx index af3df84182d..64b37f26ffc 100644 --- a/ui/src/components/IssuesList.tsx +++ b/ui/src/components/IssuesList.tsx @@ -50,7 +50,7 @@ import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Popover, PopoverTrigger, PopoverContent } from "@/components/ui/popover"; import { Collapsible, CollapsibleTrigger, CollapsibleContent } from "@/components/ui/collapsible"; -import { CircleDot, Plus, ArrowUpDown, Layers, Check, ChevronRight, List, Columns3, User, Search } from "lucide-react"; +import { CircleDot, Plus, ArrowUpDown, Layers, Check, ChevronRight, List, ListTree, Columns3, User, Search } from "lucide-react"; import { KanbanBoard } from "./KanbanBoard"; import { buildIssueTree, countDescendants } from "../lib/issue-tree"; import { buildSubIssueDefaultsForViewer } from "../lib/subIssueDefaults"; @@ -64,6 +64,7 @@ export type IssueViewState = IssueFilterState & { sortDir: "asc" | "desc"; groupBy: "status" | "priority" | "assignee" | "workspace" | "parent" | "none"; viewMode: "list" | "board"; + nestingEnabled: boolean; collapsedGroups: string[]; collapsedParents: string[]; }; @@ -74,6 +75,7 @@ const defaultViewState: IssueViewState = { sortDir: "desc", groupBy: "none", viewMode: "list", + nestingEnabled: true, collapsedGroups: [], collapsedParents: [], }; @@ -574,6 +576,19 @@ export function IssuesList({ + {viewState.viewMode === "list" && ( + + )} + {(() => { - const { roots, childMap } = buildIssueTree(group.items); + const { roots, childMap } = viewState.nestingEnabled + ? buildIssueTree(group.items) + : { roots: group.items, childMap: new Map() }; const renderIssueRow = (issue: Issue, depth: number) => { const children = childMap.get(issue.id) ?? [];