From e678dd71a0c844c9d1990c3bfba7db2fa26c027a Mon Sep 17 00:00:00 2001 From: Arjun <6592213+arkml@users.noreply.github.com> Date: Tue, 19 May 2026 18:34:34 +0530 Subject: [PATCH] workspace side bar --- .../src/components/sidebar-content.tsx | 184 ++---------------- 1 file changed, 18 insertions(+), 166 deletions(-) diff --git a/apps/x/apps/renderer/src/components/sidebar-content.tsx b/apps/x/apps/renderer/src/components/sidebar-content.tsx index 80b84e44..39d96dc9 100644 --- a/apps/x/apps/renderer/src/components/sidebar-content.tsx +++ b/apps/x/apps/renderer/src/components/sidebar-content.tsx @@ -10,13 +10,11 @@ import { FileText, FilePlus, Folder, - FolderOpen, FolderPlus, Globe, AlertTriangle, HelpCircle, Mic, - LayoutGrid, Plug, Lightbulb, ListChecks, @@ -76,7 +74,6 @@ import { ContextMenuSeparator, ContextMenuTrigger, } from "@/components/ui/context-menu" -import { Input } from "@/components/ui/input" import { cn } from "@/lib/utils" import { ConnectorsPopover } from "@/components/connectors-popover" import { HelpPopover } from "@/components/help-popover" @@ -120,14 +117,6 @@ function displayNoteName(node: TreeNode): string { return node.name } -function getFileManagerName(): string { - if (typeof navigator === 'undefined') return 'File Manager' - const platform = navigator.platform.toLowerCase() - if (platform.includes('mac')) return 'Finder' - if (platform.includes('win')) return 'Explorer' - return 'File Manager' -} - type RunListItem = { id: string title?: string @@ -1097,12 +1086,13 @@ export function WorkspaceSection({ tree: TreeNode[] actions: KnowledgeActions }) { - const workspaceFolders = React.useMemo(() => { + const recentWorkspaces = React.useMemo(() => { const root = tree.find((item) => item.path === 'knowledge/Workspace') const children = root?.children ?? [] return [...children] .filter((c) => c.kind === 'dir') - .sort((a, b) => a.name.localeCompare(b.name)) + .sort((a, b) => (b.stat?.mtimeMs ?? 0) - (a.stat?.mtimeMs ?? 0)) + .slice(0, 3) }, [tree]) return ( @@ -1110,163 +1100,25 @@ export function WorkspaceSection({
Workspace
- actions.openWorkspaceAt(path)} - onOpenRoot={() => actions.openWorkspaceAt()} - onCreate={actions.createWorkspace} - onRevealInFileManager={() => actions.revealInFileManager('knowledge/Workspace', true)} - /> - - ) -} - -function WorkspacesPanel({ - workspaces, - onOpen, - onOpenRoot, - onCreate, - onRevealInFileManager, -}: { - workspaces: TreeNode[] - onOpen: (path: string) => void - onOpenRoot: () => void - onCreate: (name: string) => Promise - onRevealInFileManager: () => void -}) { - const fileManagerName = getFileManagerName() - const [addOpen, setAddOpen] = useState(false) - const [newName, setNewName] = useState('') - const [creating, setCreating] = useState(false) - const [error, setError] = useState(null) - - const resetDialog = useCallback(() => { - setNewName('') - setError(null) - setCreating(false) - }, []) - - const handleCreate = useCallback(async () => { - setCreating(true) - setError(null) - try { - const newPath = await onCreate(newName) - setAddOpen(false) - resetDialog() - onOpen(newPath) - } catch (err) { - setError(err instanceof Error ? err.message : 'Failed to create workspace') - setCreating(false) - } - }, [newName, onCreate, onOpen, resetDialog]) - - return ( - <> -
- - - - - Add workspace - - - - - - Workspace view - - - - - - Open in {fileManagerName} - -
- {workspaces.length === 0 ? ( -
- No workspaces yet. -
- ) : ( - workspaces.map((ws) => ( - - onOpen(ws.path)}> - - {ws.name} - - - )) - )} + {recentWorkspaces.map((ws) => ( + + actions.openWorkspaceAt(ws.path)}> + + {ws.name} + + + ))} + + actions.openWorkspaceAt()}> + + View all + +
- { - setAddOpen(open) - if (!open) resetDialog() - }} - > - - - New workspace - - Workspaces are top-level folders inside knowledge/Workspace. - - -
- - setNewName(e.target.value)} - placeholder="e.g. Alpha" - autoFocus - onKeyDown={(e) => { - if (e.key === 'Enter' && !creating) { - e.preventDefault() - void handleCreate() - } - }} - /> - {error &&

{error}

} -
- - - - -
-
- + ) }