@@ -18,11 +18,13 @@ import { useSidebarData } from "../hooks/useSidebarData";
1818import { usePinnedTasksStore } from "../stores/pinnedTasksStore" ;
1919import { useSidebarStore } from "../stores/sidebarStore" ;
2020import { useTaskViewedStore } from "../stores/taskViewedStore" ;
21+ import { HistoryView } from "./HistoryView" ;
2122import { HomeItem } from "./items/HomeItem" ;
2223import { NewTaskItem } from "./items/NewTaskItem" ;
2324import { TaskItem } from "./items/TaskItem" ;
2425import { SidebarFooter } from "./SidebarFooter" ;
2526import { SortableFolderSection } from "./SortableFolderSection" ;
27+ import { ViewModeSelector } from "./ViewModeSelector" ;
2628
2729function SidebarMenuComponent ( ) {
2830 const {
@@ -41,6 +43,7 @@ function SidebarMenuComponent() {
4143 const toggleSection = useSidebarStore ( ( state ) => state . toggleSection ) ;
4244 const folderOrder = useSidebarStore ( ( state ) => state . folderOrder ) ;
4345 const reorderFolders = useSidebarStore ( ( state ) => state . reorderFolders ) ;
46+ const viewMode = useSidebarStore ( ( state ) => state . viewMode ) ;
4447 const workspaces = useWorkspaceStore . use . workspaces ( ) ;
4548 const taskStates = useTaskExecutionStore ( ( state ) => state . taskStates ) ;
4649 const markAsViewed = useTaskViewedStore ( ( state ) => state . markAsViewed ) ;
@@ -196,87 +199,104 @@ function SidebarMenuComponent() {
196199 onClick = { handleHomeClick }
197200 />
198201
202+ < div className = "px-2 py-1" >
203+ < ViewModeSelector />
204+ </ div >
205+
199206 < div className = "mx-2 my-2 border-gray-6 border-t" />
200207
201- < DragDropProvider
202- onDragOver = { handleDragOver }
203- sensors = { [
204- PointerSensor . configure ( {
205- activationConstraints : {
206- distance : { value : 5 } ,
207- } ,
208- } ) ,
209- ] }
210- >
211- { sidebarData . folders . map ( ( folder , index ) => {
212- const isExpanded = ! collapsedSections . has ( folder . id ) ;
213- return (
214- < div key = { folder . id } >
215- { index > 0 && (
216- < div className = "mx-2 my-2 border-gray-6 border-t" />
217- ) }
218- < SortableFolderSection
219- id = { folder . id }
220- index = { index }
221- label = { folder . name }
222- icon = {
223- isExpanded ? (
224- < FolderOpenIcon size = { 14 } weight = "regular" />
225- ) : (
226- < FolderIcon size = { 14 } weight = "regular" />
227- )
228- }
229- isExpanded = { isExpanded }
230- onToggle = { ( ) => toggleSection ( folder . id ) }
231- onSettingsClick = { ( ) => handleFolderSettings ( folder . id ) }
232- onContextMenu = { ( e ) =>
233- handleFolderContextMenu ( folder . id , e )
234- }
235- >
236- < NewTaskItem
237- onClick = { ( ) => handleFolderNewTask ( folder . id ) }
238- />
239- { folder . tasks . map ( ( task ) => (
240- < TaskItem
241- key = { task . id }
242- id = { task . id }
243- label = { task . title }
244- isActive = { sidebarData . activeTaskId === task . id }
245- worktreeName = {
246- workspaces [ task . id ] ?. worktreeName ?? undefined
247- }
248- worktreePath = {
249- workspaces [ task . id ] ?. worktreePath ??
250- workspaces [ task . id ] ?. folderPath
251- }
252- workspaceMode = { taskStates [ task . id ] ?. workspaceMode }
253- lastActivityAt = { task . lastActivityAt }
254- isGenerating = { task . isGenerating }
255- isUnread = { task . isUnread }
256- isPinned = { task . isPinned }
257- onClick = { ( ) => handleTaskClick ( task . id ) }
258- onContextMenu = { ( e ) =>
259- handleTaskContextMenu ( task . id , e )
260- }
261- onDelete = { ( ) => handleTaskDelete ( task . id ) }
262- onTogglePin = { ( ) => handleTaskTogglePin ( task . id ) }
208+ { viewMode === "history" ? (
209+ < HistoryView
210+ historyData = { sidebarData . historyData }
211+ activeTaskId = { sidebarData . activeTaskId }
212+ onTaskClick = { handleTaskClick }
213+ onTaskContextMenu = { handleTaskContextMenu }
214+ onTaskDelete = { handleTaskDelete }
215+ onTaskTogglePin = { handleTaskTogglePin }
216+ />
217+ ) : (
218+ < DragDropProvider
219+ onDragOver = { handleDragOver }
220+ sensors = { [
221+ PointerSensor . configure ( {
222+ activationConstraints : {
223+ distance : { value : 5 } ,
224+ } ,
225+ } ) ,
226+ ] }
227+ >
228+ { sidebarData . folders . map ( ( folder , index ) => {
229+ const isExpanded = ! collapsedSections . has ( folder . id ) ;
230+ return (
231+ < div key = { folder . id } >
232+ { index > 0 && (
233+ < div className = "mx-2 my-2 border-gray-6 border-t" />
234+ ) }
235+ < SortableFolderSection
236+ id = { folder . id }
237+ index = { index }
238+ label = { folder . name }
239+ icon = {
240+ isExpanded ? (
241+ < FolderOpenIcon size = { 14 } weight = "regular" />
242+ ) : (
243+ < FolderIcon size = { 14 } weight = "regular" />
244+ )
245+ }
246+ isExpanded = { isExpanded }
247+ onToggle = { ( ) => toggleSection ( folder . id ) }
248+ onSettingsClick = { ( ) => handleFolderSettings ( folder . id ) }
249+ onContextMenu = { ( e ) =>
250+ handleFolderContextMenu ( folder . id , e )
251+ }
252+ >
253+ < NewTaskItem
254+ onClick = { ( ) => handleFolderNewTask ( folder . id ) }
263255 />
264- ) ) }
265- </ SortableFolderSection >
266- </ div >
267- ) ;
268- } ) }
269- < DragOverlay >
270- { ( source ) =>
271- source ?. type === "folder" ? (
272- < div className = "flex w-full items-center gap-1 rounded bg-gray-2 px-2 py-1 font-mono text-[12px] text-gray-11 shadow-lg" >
273- < FolderIcon size = { 14 } weight = "regular" />
274- < span className = "font-medium" > { source . data ?. label } </ span >
256+ { folder . tasks . map ( ( task ) => (
257+ < TaskItem
258+ key = { task . id }
259+ id = { task . id }
260+ label = { task . title }
261+ isActive = { sidebarData . activeTaskId === task . id }
262+ worktreeName = {
263+ workspaces [ task . id ] ?. worktreeName ?? undefined
264+ }
265+ worktreePath = {
266+ workspaces [ task . id ] ?. worktreePath ??
267+ workspaces [ task . id ] ?. folderPath
268+ }
269+ workspaceMode = { taskStates [ task . id ] ?. workspaceMode }
270+ lastActivityAt = { task . lastActivityAt }
271+ isGenerating = { task . isGenerating }
272+ isUnread = { task . isUnread }
273+ isPinned = { task . isPinned }
274+ onClick = { ( ) => handleTaskClick ( task . id ) }
275+ onContextMenu = { ( e ) =>
276+ handleTaskContextMenu ( task . id , e )
277+ }
278+ onDelete = { ( ) => handleTaskDelete ( task . id ) }
279+ onTogglePin = { ( ) => handleTaskTogglePin ( task . id ) }
280+ />
281+ ) ) }
282+ </ SortableFolderSection >
275283 </ div >
276- ) : null
277- }
278- </ DragOverlay >
279- </ DragDropProvider >
284+ ) ;
285+ } ) }
286+ < DragOverlay >
287+ { ( source ) =>
288+ source ?. type === "folder" ? (
289+ < div className = "flex w-full items-center gap-1 rounded bg-gray-2 px-2 py-1 font-mono text-[12px] text-gray-11 shadow-lg" >
290+ < FolderIcon size = { 14 } weight = "regular" />
291+ < span className = "font-medium" >
292+ { source . data ?. label }
293+ </ span >
294+ </ div >
295+ ) : null
296+ }
297+ </ DragOverlay >
298+ </ DragDropProvider >
299+ ) }
280300 </ Flex >
281301 </ Box >
282302 < SidebarFooter />
0 commit comments