diff --git a/dashboard/src/v2/TasksPage.tsx b/dashboard/src/v2/TasksPage.tsx index 3cef78d1ab..216e449241 100644 --- a/dashboard/src/v2/TasksPage.tsx +++ b/dashboard/src/v2/TasksPage.tsx @@ -1,32 +1,51 @@ import type { FunctionComponent } from "preact"; -import { memo } from "preact/compat"; import { useLayoutEffect, useMemo, useRef } from "preact/hooks"; import gsap from "gsap"; import { Link } from "@tanstack/react-router"; import { ListChecks, FolderGit2, - Flame, - Target, Plus, X, - ArrowUpRight, ArrowRight, + AlertTriangle, } from "lucide-preact"; import { TaskComposer } from "./components/ui/TaskComposer.js"; import { AddProjectModal } from "./components/ui/AddProjectModal.js"; -import type { Task } from "./types.js"; import { PageContainer } from "./components/layout/PageContainer.js"; import { PageHeader } from "./components/layout/PageHeader.js"; import { Button } from "./components/ui/Button.js"; import { TaskBoardFilters } from "./components/tasks/TaskBoardFilters.js"; import { TaskBoardColumns } from "./components/tasks/TaskBoardColumns.js"; +import { TaskBoardOverview } from "./components/tasks/TaskBoardOverview.js"; import { useInteractionTokens } from "./lib/motion/tokens.js"; import { useTaskBoardController } from "./hooks/use-task-board-controller.js"; type TaskScopePlaceholderMode = "project" | "sprint"; +export const TaskBoardFeedback: FunctionComponent<{ + error: string | null; + filterTransitionPending: boolean; +}> = ({ error, filterTransitionPending }) => ( + <> + {error && ( +
Task board update failed
+{error}
++ +
{body}
@@ -70,14 +82,14 @@ const TaskScopePlaceholder: FunctionComponent<{ onClick={onAddProject} variant="signal" icon={Plus} - className="!inline-flex !min-h-[44px] !items-center !gap-2.5 !rounded-full !px-5 !py-2.5 !text-[10px] !font-bold !uppercase !tracking-[0.14em] !shadow-[0_10px_30px_rgba(0,224,160,0.22)] hover:!-translate-y-px focus-visible:!ring-2 focus-visible:!ring-signal-500/40" + className="!inline-flex !min-h-[44px] !items-center !gap-2.5 !rounded-xl !px-5 !py-2.5 !text-[10px] !font-bold !uppercase !tracking-[0.14em] focus-visible:!ring-2 focus-visible:!ring-signal-500/40" > {hasProjects ? "Add Project" : "Add First Project"} ) : ({sprint.date}
-{STATUS_CFG[status].label} lane contains {count} {count === 1 ? "task" : "tasks"} after current filters.
{getTaskDropFeedback({
@@ -201,7 +213,7 @@ const TaskBoardColumnsComponent: FunctionComponent
+ Active sprint scope
+ {sprint.date}
+ {completed} completed
+ ·
+ {inProgress} running
+ ·
+ {queued} queued
+
- {statusFilter !== "all" || priorityFilter !== "all" ? "matching current filters" : taskScopeSprintId ? "in this sprint" : "in this project"}.
+ Task board controls
{filterAnnouncement}
- Task board overview
+
+ {sprint.name}
+
+