import { Layout } from '@arco-design/web-react' import { WorkspacePage, type WorkspaceTaskUpdate } from './workspace-body' import { WorkspaceExplorePage } from './workspace-explore' import { ProjectChannelPage } from './projects/project-channel-page' import type { ProjectTaskUpdate } from './projects/project-task-edit-modal' import { ProjectRail } from './projects/project-rail' import { ProjectSidebar, type ProjectSettingsUpdate } from './projects/project-sidebar' import { ProjectStatusbar } from './projects/project-statusbar' import { ProjectTopbar } from './projects/project-topbar' import type { SearchResultDTO } from '../api/search' import type { ChannelKey, Project, ProjectWorkspace, Theme, WorkbenchView } from './projects/project-types' const { Content } = Layout export function ProjectPage({ activeView, activeWorkspace, workspaces, activeChannel, activeTaskID, theme, onSelectProject, onSelectWorkspace, onSelectWorkspaceExplore, onSelectChannel, onSelectItem, onOpenTask, onCloseTask, onToggleTheme, onCreateProject, onCreateTask, onUploadSource, onCreateCronPlan, onUpdateWorkspaceTask, onUpdateProject, onCreateProjectTag, searchQuery, searchLoading, searchSearched, searchResults, onSearchQueryChange, onSearch, onSelectSearchResult, }: { activeView: WorkbenchView activeWorkspace: ProjectWorkspace workspaces: ProjectWorkspace[] activeChannel: ChannelKey activeTaskID: string | null theme: Theme onSelectProject: (project: Project) => void onSelectWorkspace: () => void onSelectWorkspaceExplore: () => void onSelectChannel: (key: ChannelKey) => void onSelectItem: (title: string) => void onOpenTask: (project: Project, taskID: string) => void onCloseTask: () => void onToggleTheme: () => void onCreateProject: () => void onCreateTask: () => void onUploadSource: () => void onCreateCronPlan: () => void onUpdateWorkspaceTask: (update: WorkspaceTaskUpdate) => void onUpdateProject: (update: ProjectSettingsUpdate) => Promise onCreateProjectTag: (name: string) => void searchQuery: string searchLoading: boolean searchSearched: boolean searchResults: SearchResultDTO[] onSearchQueryChange: (value: string) => void onSearch: () => void onSelectSearchResult: (result: SearchResultDTO) => void }) { const isProject = activeView === 'project' const projects = workspaces.map((workspace) => workspace.project) const updateActiveProjectTask = (update: ProjectTaskUpdate) => { onUpdateWorkspaceTask({ originalProjectId: activeWorkspace.project.id, nextProjectId: activeWorkspace.project.id, taskId: update.taskId, title: update.title, summary: update.summary, tag: update.tag, completed: update.completed, }) } return ( {isProject && ( )} {activeView === 'workspace' ? ( ) : activeView === 'workspace-explore' ? ( ) : ( onOpenTask(activeWorkspace.project, taskID)} onCloseTask={onCloseTask} onCreateTask={onCreateTask} onUploadSource={onUploadSource} onCreateCronPlan={onCreateCronPlan} onCreateProjectTag={onCreateProjectTag} onUpdateTask={updateActiveProjectTask} /> )} ) }