import * as ContextMenu from '@radix-ui/react-context-menu' import { NavLink, useLocation, useNavigate } from 'react-router-dom' import { useAtomValue, useSetAtom } from 'jotai' import { preSettingsPathAtom, searchOpenAtom, } from '@/app/state' import { createWorkspaceAtom, deleteProjectAtom, projectListAtom, workspacesAtom, type Project, } from '@/app/workspace/store' import { SidebarResizer } from './SidebarResizer' import './MainSidebar.css' function NewProjectIcon() { return ( ) } function SearchIcon() { return ( ) } function ComponentsIcon() { return ( ) } function FolderIcon() { return ( ) } function BranchIcon() { return ( ) } function SectionIcon() { return ( ) } function PlusIcon() { return ( ) } function GearIcon() { return ( ) } export function MainSidebar() { const location = useLocation() const navigate = useNavigate() const setPreSettings = useSetAtom(preSettingsPathAtom) const setSearchOpen = useSetAtom(searchOpenAtom) const projects = useAtomValue(projectListAtom) const workspaces = useAtomValue(workspacesAtom) const createWorkspace = useSetAtom(createWorkspaceAtom) const deleteProject = useSetAtom(deleteProjectAtom) const openSettings = () => { setPreSettings(location.pathname) navigate('/settings') } const addWorkspace = async (project: Project) => { if (project.mode === 'worktree') { const created = await window.projects.createWorktree({ projectPath: project.path, projectName: project.name, projectWorkspaceName: project.workspaceRootName, }) if (created.kind === 'plain-fallback') { const usePlain = window.confirm(`${created.reason} Create a plain section instead?`) if (!usePlain) return const result = createWorkspace({ projectId: project.id, name: `Section ${project.workspaceIds.length + 1}`, path: project.path, kind: 'section', }) if (result) { navigate(`/project/${project.id}/workspace/${result.workspace.id}/chat/${result.chat.id}`) } return } if (created.kind === 'error') { window.alert(created.message) return } const result = createWorkspace({ projectId: project.id, name: created.name, path: created.path, kind: 'worktree', branchName: created.branchName, }) if (result) { navigate(`/project/${project.id}/workspace/${result.workspace.id}/chat/${result.chat.id}`) } return } const result = createWorkspace({ projectId: project.id, name: `Section ${project.workspaceIds.length + 1}`, path: project.path, kind: 'section', }) if (result) { navigate(`/project/${project.id}/workspace/${result.workspace.id}/chat/${result.chat.id}`) } } const removeProject = (project: Project) => { const confirmed = window.confirm(`Delete "${project.name}" from Codium? Files on disk are not removed.`) if (!confirmed) return deleteProject(project.id) if (location.pathname.startsWith(`/project/${project.id}/`)) { navigate('/projects/new') } } return ( ) }