import React from "react"; import { useState, useEffect } from "react"; const Sidebar = ({ activeView, width, fileStructure, expandedFolders, setExpandedFolders, handleContextMenu, openFile, unsavedChanges, activeTab, isRenaming, renamePath, renameValue, handleRename, renameInputRef, cancelRename, setIsNewFileModalOpen, // Add this prop createNewFolder }) => { const toggleFolder = (folderPath) => { setExpandedFolders((prev) => ({ ...prev, [folderPath]: !prev[folderPath], })); }; const renderExplorer = () => { const renderFileTree = (structure, path = "") => { if (!structure) return null; return Object.entries(structure).map(([name, item]) => { const currentPath = path ? `${path}/${name}` : name; if (item.type === "folder") { const isExpanded = expandedFolders[currentPath]; return (
toggleFolder(currentPath)} onContextMenu={(e) => handleContextMenu(e, currentPath, 'folder')} > {isExpanded ? ( ) : ( )} {name}
{isExpanded && (
{renderFileTree(item.children, currentPath)}
)}
); } else { // It's a file const isActive = activeTab === currentPath; return (
openFile(currentPath)} onContextMenu={(e) => handleContextMenu(e, currentPath, 'file')} > {getFileIcon(name)} {isRenaming && renamePath === currentPath ? (
setRenameValue(e.target.value)} onBlur={cancelRename} className="rename-input" />
) : ( <> {name} {unsavedChanges[currentPath] && } )}
); } }); }; return (
EXPLORER
{renderFileTree(fileStructure)}
); }; const getFileIcon = (fileName) => { const extension = fileName.split('.').pop().toLowerCase(); if (['jsx', 'js', 'ts', 'tsx'].includes(extension)) { return ( ); } else if (['css', 'scss', 'less'].includes(extension)) { return ( ); } else if (['md', 'markdown'].includes(extension)) { return ( ); } return ( ); }; const renderSearch = () => { return (
SEARCH
); }; const renderGit = () => { return (
SOURCE CONTROL
No changes detected
); }; const renderContent = () => { switch (activeView) { case "explorer": return renderExplorer(); case "search": return renderSearch(); case "git": return renderGit(); default: return
Content for {activeView}
; } }; return (
{renderContent()}
); }; export default Sidebar;