import React, { useEffect } from 'react'; import ChatInterface from '../../chat/view/ChatInterface'; import FileTree from '../../FileTree'; import StandaloneShell from '../../StandaloneShell'; import GitPanel from '../../GitPanel'; import ErrorBoundary from '../../ErrorBoundary'; import MainContentHeader from './subcomponents/MainContentHeader'; import MainContentStateView from './subcomponents/MainContentStateView'; import EditorSidebar from './subcomponents/EditorSidebar'; import TaskMasterPanel from './subcomponents/TaskMasterPanel'; import type { MainContentProps } from '../types/types'; import { useTaskMaster } from '../../../contexts/TaskMasterContext'; import { useTasksSettings } from '../../../contexts/TasksSettingsContext'; import { useUiPreferences } from '../../../hooks/useUiPreferences'; import { useEditorSidebar } from '../hooks/useEditorSidebar'; import type { Project } from '../../../types/app'; const AnyStandaloneShell = StandaloneShell as any; const AnyGitPanel = GitPanel as any; 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, 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 && }
); } export default React.memo(MainContent);