Files
agent/apps/web_v1/src/pages/projects/project-rail.tsx

59 lines
2.0 KiB
TypeScript
Raw Normal View History

2026-07-20 10:50:42 +08:00
import type { CSSProperties } from 'react'
import { Badge, Button, Layout, Space } from '@arco-design/web-react'
import { IconCompass, IconDashboard, IconPlus } from '@arco-design/web-react/icon'
2026-07-20 11:40:45 +08:00
import type { Project, WorkbenchView } from './project-types'
2026-07-20 10:50:42 +08:00
const { Sider } = Layout
2026-07-20 11:40:45 +08:00
export function ProjectRail({
activeProject,
projects,
2026-07-20 11:40:45 +08:00
activeView,
onSelectWorkspace,
onSelectWorkspaceExplore,
2026-07-20 11:40:45 +08:00
onSelectProject,
onCreateProject,
2026-07-20 11:40:45 +08:00
}: {
activeProject: Project
projects: Project[]
2026-07-20 11:40:45 +08:00
activeView: WorkbenchView
onSelectWorkspace: () => void
onSelectWorkspaceExplore: () => void
2026-07-20 11:40:45 +08:00
onSelectProject: (project: Project) => void
onCreateProject: () => void
2026-07-20 11:40:45 +08:00
}) {
2026-07-20 10:50:42 +08:00
return (
<Sider className="project-rail" width={96}>
2026-07-20 11:40:45 +08:00
<Button
className={activeView === 'workspace' ? 'dashboard-button active' : 'dashboard-button'}
icon={<IconDashboard />}
onClick={onSelectWorkspace}
aria-label="工作台"
title="工作台"
/>
<Button
className={activeView === 'workspace-explore' ? 'dashboard-button active' : 'dashboard-button'}
icon={<IconCompass />}
onClick={onSelectWorkspaceExplore}
aria-label="探索"
title="探索"
/>
2026-07-20 10:50:42 +08:00
<Space className="project-stack" direction="vertical" size={12}>
{projects.map((project) => (
<Badge key={project.id} count={project.badge} dot={false} className={project.urgent ? 'project-badge urgent' : 'project-badge'}>
<button
className={activeView === 'project' && activeProject.id === project.id ? 'project-button active' : 'project-button'}
onClick={() => onSelectProject(project)}
style={{ '--project-color': project.color } as CSSProperties}
title={project.name}
>
2026-07-20 10:50:42 +08:00
{project.short}
</button>
</Badge>
))}
</Space>
<Button className="create-project" aria-label="新建项目" icon={<IconPlus />} title="新建项目" onClick={onCreateProject} />
2026-07-20 10:50:42 +08:00
</Sider>
)
}