import { useRef, useCallback, useEffect } from 'react' import FileTree from '@/components/Sidebar/FileTree' import SettingsPanel from '@/components/Settings/SettingsPanel' import { useFilesStore } from '@/stores/useFilesStore' import { useTabsStore } from '@/stores/useTabsStore' import { useLayoutStore } from '@/stores/useLayoutStore' function NewFileIcon() { return ( ) } function NewFolderIcon() { return ( ) } function OpenFolderIcon() { return ( ) } export default function SidePanel() { const fileTree = useFilesStore((s) => s.fileTree) const rootPath = useFilesStore((s) => s.rootPath) const loading = useFilesStore((s) => s.loading) const openFolder = useFilesStore((s) => s.openFolder) const createFolder = useFilesStore((s) => s.createFolder) const createUntitledFile = useTabsStore((s) => s.createUntitledFile) const sidePanelWidth = useLayoutStore((s) => s.sidePanelWidth) const setSidePanelWidth = useLayoutStore((s) => s.setSidePanelWidth) const activeView = useLayoutStore((s) => s.activeView) const dragRef = useRef(false) const panelRef = useRef(null) const handleMouseDown = useCallback(() => { dragRef.current = true document.body.style.cursor = 'col-resize' document.body.style.userSelect = 'none' }, []) const handleMouseMove = useCallback((e: MouseEvent) => { if (!dragRef.current || !panelRef.current) return const rect = panelRef.current.getBoundingClientRect() const newWidth = e.clientX - rect.left setSidePanelWidth(newWidth) }, [setSidePanelWidth]) const handleMouseUp = useCallback(() => { dragRef.current = false document.body.style.cursor = '' document.body.style.userSelect = '' }, []) useEffect(() => { window.addEventListener('mousemove', handleMouseMove) window.addEventListener('mouseup', handleMouseUp) return () => { window.removeEventListener('mousemove', handleMouseMove) window.removeEventListener('mouseup', handleMouseUp) } }, [handleMouseMove, handleMouseUp]) return ( {activeView === 'search' ? 'SEARCH' : activeView === 'extensions' ? 'EXTENSIONS' : activeView === 'settings' ? 'SETTINGS' : 'EXPLORER'} {activeView === 'explorer' && ( <> createUntitledFile()} className="p-1 rounded text-zinc-500 hover:text-zinc-300 hover:bg-panel-hover transition-all duration-fast" title="New File" > {rootPath && ( createFolder()} className="p-1 rounded text-zinc-500 hover:text-zinc-300 hover:bg-panel-hover transition-all duration-fast" title="New Folder" > )} > )} {activeView === 'explorer' && ( <> {!rootPath && !loading && ( No folder open Open Folder )} {loading && ( Loading... )} {rootPath && !loading && ( <> {rootPath.split(/[\\/]/).pop()} {fileTree.length > 0 ? ( ) : ( Empty directory )} > )} > )} {activeView === 'search' && ( Search coming soon )} {activeView === 'extensions' && ( Extensions coming soon )} {activeView === 'settings' && ( )} ) }
No folder open