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) ?? [];