;
@@ -481,6 +473,9 @@ function TaskListSectionView({
key={task.id}
task={task}
level={level}
+ repositories={repositories}
+ parentTasks={parentTasks}
+ showTaskDetails={showTaskDetails}
deletingTaskId={deletingTaskId}
onArchive={onArchive}
onUnarchive={onUnarchive}
diff --git a/apps/web/app/tasks/tasks-page-client.tsx b/apps/web/app/tasks/tasks-page-client.tsx
index 84f51f0a91..64937fb7c1 100644
--- a/apps/web/app/tasks/tasks-page-client.tsx
+++ b/apps/web/app/tasks/tasks-page-client.tsx
@@ -18,6 +18,8 @@ import { useAppStore, useAppStoreApi } from "@/components/state-provider";
import { useKanbanDisplaySettings } from "@/hooks/use-kanban-display-settings";
import { useDebounce } from "@/hooks/use-debounce";
import { useResponsiveBreakpoint } from "@/hooks/use-responsive-breakpoint";
+import { useTaskListingView } from "@/hooks/use-task-listing-view";
+import { useWorkspacePRs } from "@/hooks/domains/github/use-task-pr";
import { linkToTask } from "@/lib/links";
import { unarchiveToastPayload } from "@/lib/tasks/unarchive-feedback";
import { shouldSkipInitialTasksFetch } from "./tasks-page-fetch-policy";
@@ -485,9 +487,12 @@ function useTasksListPreferenceSync({
export function TasksPageClient(props: TasksPageClientProps) {
const s = useTasksPageSetup(props);
+ const { setView } = useTaskListingView();
const setMobileSearchOpen = useAppStore((state) => state.setMobileKanbanSearchOpen);
const isMobileSearchOpen = useAppStore((state) => state.mobileKanban.isSearchOpen);
const { isMobile } = useResponsiveBreakpoint();
+ const showTaskDetails = useAppStore((state) => state.userSettings.tasksListShowDetails ?? false);
+ useWorkspacePRs(showTaskDetails ? s.activeWorkspaceId : null);
const { handleSortChange, handleGroupChange } = useTasksListPreferenceSync({
tasksListSort: s.tasksListSort,
setTasksListSort: s.setTasksListSort,
@@ -502,6 +507,10 @@ export function TasksPageClient(props: TasksPageClientProps) {
return () => setMobileSearchOpen(false);
}, [setMobileSearchOpen]);
+ useEffect(() => {
+ setView("list");
+ }, [setView]);
+
return (
["size"];
+ currentPage?: "kanban" | "tasks";
};
function getRepositoryPlaceholder(
@@ -98,7 +99,10 @@ function RepositorySection({
);
}
-export function KanbanDisplayDropdown({ triggerSize = "icon" }: KanbanDisplayDropdownProps) {
+export function KanbanDisplayDropdown({
+ triggerSize = "icon",
+ currentPage = "kanban",
+}: KanbanDisplayDropdownProps) {
const {
workflows,
activeWorkflowId,
@@ -107,9 +111,11 @@ export function KanbanDisplayDropdown({ triggerSize = "icon" }: KanbanDisplayDro
allRepositoriesSelected,
selectedRepositoryId,
enablePreviewOnClick,
+ tasksListShowDetails,
onWorkflowChange,
onRepositoryChange,
onTogglePreviewOnClick,
+ onToggleTasksListShowDetails,
} = useKanbanDisplaySettings();
const repositoryValue = allRepositoriesSelected ? "all" : (selectedRepositoryId ?? "all");
@@ -157,6 +163,24 @@ export function KanbanDisplayDropdown({ triggerSize = "icon" }: KanbanDisplayDro
navigates directly to the session.
+ {currentPage === "tasks" && (
+ <>
+
+
+
List rows
+
+
+ Add repository, pull request, session, parent, and review context to List rows.
+
+
+ >
+ )}