2026-07-20 12:26:21 +08:00
|
|
|
import { ProjectAi } from './project-ai'
|
|
|
|
|
import { ProjectCron } from './project-cron'
|
2026-07-21 18:24:15 +08:00
|
|
|
import { ProjectInbox } from './project-inbox'
|
2026-07-21 00:46:09 +08:00
|
|
|
import { ProjectNewChannel } from './project-new-channel'
|
2026-07-20 12:26:21 +08:00
|
|
|
import { ProjectNotes } from './project-notes'
|
|
|
|
|
import { ProjectOverview } from './project-overview'
|
2026-07-21 01:18:06 +08:00
|
|
|
import type { ProjectTaskUpdate } from './project-task-edit-modal'
|
2026-07-20 12:26:21 +08:00
|
|
|
import { ProjectTasks } from './project-tasks'
|
2026-07-21 18:24:15 +08:00
|
|
|
import type { ChannelKey, InboxConfirmationOutcome, ProjectWorkspace } from './project-types'
|
|
|
|
|
import type { InboxSuggestionDTO } from '../../api/inbox'
|
2026-07-21 19:19:36 +08:00
|
|
|
import type { AISessionDTO, CreateAISessionInput } from '../../api/ai'
|
2026-07-20 12:26:21 +08:00
|
|
|
|
|
|
|
|
export function ProjectChannelPage({
|
|
|
|
|
activeChannel,
|
2026-07-20 13:02:26 +08:00
|
|
|
activeWorkspace,
|
2026-07-20 18:25:04 +08:00
|
|
|
activeTaskID,
|
2026-07-20 12:26:21 +08:00
|
|
|
onSelectItem,
|
2026-07-20 18:25:04 +08:00
|
|
|
onOpenTask,
|
|
|
|
|
onCloseTask,
|
2026-07-20 21:45:36 +08:00
|
|
|
onCreateTask,
|
|
|
|
|
onUploadSource,
|
|
|
|
|
onCreateCronPlan,
|
2026-07-21 01:00:27 +08:00
|
|
|
onCreateProjectTag,
|
2026-07-21 01:18:06 +08:00
|
|
|
onUpdateTask,
|
2026-07-21 18:24:15 +08:00
|
|
|
onAnalyzeInbox,
|
|
|
|
|
onConfirmInbox,
|
2026-07-21 19:19:36 +08:00
|
|
|
onListAISessions,
|
|
|
|
|
onCreateAISession,
|
2026-07-20 12:26:21 +08:00
|
|
|
}: {
|
|
|
|
|
activeChannel: ChannelKey
|
2026-07-20 13:02:26 +08:00
|
|
|
activeWorkspace: ProjectWorkspace
|
2026-07-20 18:25:04 +08:00
|
|
|
activeTaskID: string | null
|
2026-07-20 12:26:21 +08:00
|
|
|
onSelectItem: (title: string) => void
|
2026-07-20 18:25:04 +08:00
|
|
|
onOpenTask: (taskID: string) => void
|
|
|
|
|
onCloseTask: () => void
|
2026-07-20 21:45:36 +08:00
|
|
|
onCreateTask: () => void
|
|
|
|
|
onUploadSource: () => void
|
|
|
|
|
onCreateCronPlan: () => void
|
2026-07-21 01:00:27 +08:00
|
|
|
onCreateProjectTag: (name: string) => void
|
2026-07-21 01:18:06 +08:00
|
|
|
onUpdateTask: (update: ProjectTaskUpdate) => void
|
2026-07-21 18:24:15 +08:00
|
|
|
onAnalyzeInbox: (inboxId: string) => Promise<InboxSuggestionDTO[]>
|
|
|
|
|
onConfirmInbox: (inboxId: string, suggestionIds: string[]) => Promise<InboxConfirmationOutcome>
|
2026-07-21 19:54:25 +08:00
|
|
|
onListAISessions: (projectId: string, signal?: AbortSignal) => Promise<AISessionDTO[]>
|
|
|
|
|
onCreateAISession: (projectId: string, input: CreateAISessionInput, signal?: AbortSignal) => Promise<AISessionDTO>
|
2026-07-20 12:26:21 +08:00
|
|
|
}) {
|
|
|
|
|
switch (activeChannel) {
|
2026-07-21 18:24:15 +08:00
|
|
|
case 'inbox':
|
|
|
|
|
return <ProjectInbox key={activeWorkspace.project.id} activeWorkspace={activeWorkspace} onAnalyze={onAnalyzeInbox} onConfirm={onConfirmInbox} />
|
2026-07-20 12:26:21 +08:00
|
|
|
case 'tasks':
|
2026-07-21 01:18:06 +08:00
|
|
|
return <ProjectTasks activeWorkspace={activeWorkspace} activeTaskID={activeTaskID} onOpenTask={onOpenTask} onCloseTask={onCloseTask} onSelectItem={onSelectItem} onCreateTask={onCreateTask} onCreateProjectTag={onCreateProjectTag} onUpdateTask={onUpdateTask} />
|
2026-07-20 12:26:21 +08:00
|
|
|
case 'ai':
|
2026-07-21 19:54:25 +08:00
|
|
|
return <ProjectAi key={activeWorkspace.project.id} activeWorkspace={activeWorkspace} onSelectItem={onSelectItem} onListSessions={onListAISessions} onCreateSession={onCreateAISession} />
|
2026-07-20 12:26:21 +08:00
|
|
|
case 'notes':
|
2026-07-20 21:45:36 +08:00
|
|
|
return <ProjectNotes activeWorkspace={activeWorkspace} onSelectItem={onSelectItem} onUploadSource={onUploadSource} />
|
2026-07-20 12:26:21 +08:00
|
|
|
case 'cron':
|
2026-07-20 21:45:36 +08:00
|
|
|
return <ProjectCron activeWorkspace={activeWorkspace} onSelectItem={onSelectItem} onCreateCronPlan={onCreateCronPlan} />
|
2026-07-21 00:46:09 +08:00
|
|
|
case 'new-channel':
|
|
|
|
|
return <ProjectNewChannel activeWorkspace={activeWorkspace} />
|
2026-07-20 12:26:21 +08:00
|
|
|
case 'overview':
|
|
|
|
|
default:
|
2026-07-21 01:18:06 +08:00
|
|
|
return <ProjectOverview activeWorkspace={activeWorkspace} onSelectItem={onSelectItem} onUpdateTask={onUpdateTask} />
|
2026-07-20 12:26:21 +08:00
|
|
|
}
|
|
|
|
|
}
|