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 ? (
) : (
<>
{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 (
);
};
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;