import FileActions from './FileActions'; import FileTree from './FileTree'; import ContentView from './ContentView'; import CreateFileModal from './modals/CreateFileModal'; import DeleteFileModal from './modals/DeleteFileModal'; import CommitMessageModal from './modals/CommitMessageModal'; import { useEditorContent } from '../contexts/EditorContentContext'; import { useFileSelection } from '../contexts/FileSelectionContext'; import { useSettings } from '../contexts/SettingsContext'; import { useFileOperations } from '../hooks/useFileOperations'; import { pullChanges, commitAndPush, fetchFileList } from '../services/api'; import { Breadcrumbs, Grid, Tabs, useToasts } from '@geist-ui/core'; import { Code, Eye } from '@geist-ui/icons'; import { useState, useCallback, useEffect } from 'react'; import React from 'react'; const MainContent = () => { const [activeTab, setActiveTab] = useState('source'); const [files, setFiles] = useState([]); const { hasUnsavedChanges } = useEditorContent(); const { selectedFile } = useFileSelection(); const { settings } = useSettings(); const { handleCreate, handleDelete } = useFileOperations(); const { setToast } = useToasts(); const refreshFileList = useCallback(async () => { try { const fileList = await fetchFileList(); setFiles(fileList); } catch (error) { console.error('Failed to fetch file list:', error); setToast({ text: 'Failed to refresh file list', type: 'error' }); } }, [setToast]); useEffect(() => { refreshFileList(); }, []); const handleTabChange = (value) => { setActiveTab(value); }; const pullLatestChanges = useCallback(async () => { if (!settings.gitEnabled) return; try { await pullChanges(); await refreshFileList(); setToast({ text: 'Successfully pulled latest changes', type: 'success' }); } catch (error) { console.error('Failed to pull latest changes:', error); setToast({ text: 'Failed to pull latest changes', type: 'error' }); } }, [settings.gitEnabled, setToast, refreshFileList]); const handleCommitAndPush = useCallback( async (message) => { if (!settings.gitEnabled) return; try { await commitAndPush(message); setToast({ text: 'Successfully committed and pushed changes', type: 'success', }); } catch (error) { console.error('Failed to commit and push changes:', error); setToast({ text: 'Failed to commit and push changes', type: 'error' }); } }, [settings.gitEnabled, setToast] ); const handleCreateFile = useCallback( async (fileName) => { await handleCreate(fileName); await refreshFileList(); }, [handleCreate, refreshFileList] ); const handleDeleteFile = useCallback( async (filePath) => { await handleDelete(filePath); await refreshFileList(); }, [handleDelete, refreshFileList] ); const renderBreadcrumbs = () => { if (!selectedFile) return
; const pathParts = selectedFile.split('/'); return (