diff --git a/apps/array/src/renderer/features/sidebar/components/PinnedView.tsx b/apps/array/src/renderer/features/sidebar/components/PinnedView.tsx new file mode 100644 index 000000000..bc22e7563 --- /dev/null +++ b/apps/array/src/renderer/features/sidebar/components/PinnedView.tsx @@ -0,0 +1,105 @@ +import { useTaskExecutionStore } from "@features/task-detail/stores/taskExecutionStore"; +import { PushPin } from "@phosphor-icons/react"; +import { Flex } from "@radix-ui/themes"; +import { useWorkspaceStore } from "@/renderer/features/workspace/stores/workspaceStore"; +import type { PinnedData, TaskData } from "../hooks/useSidebarData"; +import { TaskItem } from "./items/TaskItem"; + +interface PinnedViewProps { + pinnedData: PinnedData; + activeTaskId: string | null; + onTaskClick: (taskId: string) => void; + onTaskContextMenu: (taskId: string, e: React.MouseEvent) => void; + onTaskDelete: (taskId: string) => void; + onTaskTogglePin: (taskId: string) => void; +} + +function PinnedTaskItem({ + task, + isActive, + onClick, + onContextMenu, + onDelete, + onTogglePin, +}: { + task: TaskData; + isActive: boolean; + onClick: () => void; + onContextMenu: (e: React.MouseEvent) => void; + onDelete: () => void; + onTogglePin: () => void; +}) { + const workspaces = useWorkspaceStore.use.workspaces(); + const taskStates = useTaskExecutionStore((state) => state.taskStates); + + const workspace = workspaces[task.id]; + const taskState = taskStates[task.id]; + + return ( + + ); +} + +export function PinnedView({ + pinnedData, + activeTaskId, + onTaskClick, + onTaskContextMenu, + onTaskDelete, + onTaskTogglePin, +}: PinnedViewProps) { + const { tasks } = pinnedData; + + if (tasks.length === 0) { + return ( + + + No pinned tasks + + Pin tasks from any view to quickly access them here + + + ); + } + + return ( + +
+ Pinned ({tasks.length}) +
+ {tasks.map((task) => ( + onTaskClick(task.id)} + onContextMenu={(e) => onTaskContextMenu(task.id, e)} + onDelete={() => onTaskDelete(task.id)} + onTogglePin={() => onTaskTogglePin(task.id)} + /> + ))} +
+ ); +} diff --git a/apps/array/src/renderer/features/sidebar/components/SidebarFooter.tsx b/apps/array/src/renderer/features/sidebar/components/SidebarFooter.tsx index 907df20f7..6e4173168 100644 --- a/apps/array/src/renderer/features/sidebar/components/SidebarFooter.tsx +++ b/apps/array/src/renderer/features/sidebar/components/SidebarFooter.tsx @@ -23,7 +23,7 @@ export function SidebarFooter() { navigateToTaskInput(); }, [navigateToTaskInput]); - const isHistoryView = viewMode === "history"; + const showNewTaskButton = viewMode !== "folders"; return ( - {isHistoryView ? ( + {showNewTaskButton ? (