import React, { useEffect } from 'react'; import ChatInterface from '../../chat/view/ChatInterface'; import FileTree from '../../file-tree/view/FileTree'; import StandaloneShell from '../../standalone-shell/view/StandaloneShell'; import GitPanel from '../../git-panel/view/GitPanel'; import ErrorBoundary from '../../ErrorBoundary'; import MainContentHeader from './subcomponents/MainContentHeader'; import MainContentStateView from './subcomponents/MainContentStateView'; import TaskMasterPanel from './subcomponents/TaskMasterPanel'; import PluginTabContent from '../../plugins/PluginTabContent'; import type { MainContentProps } from '../types/types'; import { useTaskMaster } from '../../../contexts/TaskMasterContext'; import { useTasksSettings } from '../../../contexts/TasksSettingsContext'; import { useUiPreferences } from '../../../hooks/useUiPreferences'; import { useEditorSidebar } from '../../code-editor/hooks/useEditorSidebar'; import EditorSidebar from '../../code-editor/view/EditorSidebar'; import type { Project } from '../../../types/app'; type TaskMasterContextValue = { currentProject?: Project | null; setCurrentProject?: ((project: Project) => void) | null; }; type TasksSettingsContextValue = { tasksEnabled: boolean; isTaskMasterInstalled: boolean | null; isTaskMasterReady: boolean | null; }; function MainContent({ selectedProject, selectedSession, activeTab, setActiveTab, ws, sendMessage, latestMessage, isMobile, onMenuClick, isLoading, onInputFocusChange, onSessionActive, onSessionInactive, onSessionProcessing, onSessionNotProcessing, processingSessions, onReplaceTemporarySession, onNavigateToSession, onShowSettings, externalMessageUpdate, }: MainContentProps) { const { preferences } = useUiPreferences(); const { autoExpandTools, showRawParameters, showThinking, autoScrollToBottom, sendByCtrlEnter } = preferences; const { currentProject, setCurrentProject } = useTaskMaster() as TaskMasterContextValue; const { tasksEnabled, isTaskMasterInstalled } = useTasksSettings() as TasksSettingsContextValue; const shouldShowTasksTab = Boolean(tasksEnabled && isTaskMasterInstalled); const { editingFile, editorWidth, editorExpanded, hasManualWidth, resizeHandleRef, handleFileOpen, handleCloseEditor, handleToggleEditorExpand, handleResizeStart, } = useEditorSidebar({ selectedProject, isMobile, }); useEffect(() => { if (selectedProject && selectedProject !== currentProject) { setCurrentProject?.(selectedProject); } }, [selectedProject, currentProject, setCurrentProject]); useEffect(() => { if (!shouldShowTasksTab && activeTab === 'tasks') { setActiveTab('chat'); } }, [shouldShowTasksTab, activeTab, setActiveTab]); if (isLoading) { return ; } if (!selectedProject) { return ; } return (
setActiveTab('tasks') : null} />
{activeTab === 'files' && (
)} {activeTab === 'shell' && (
)} {activeTab === 'git' && (
)} {shouldShowTasksTab && }
{activeTab.startsWith('plugin:') && (
)}
); } export default React.memo(MainContent);