@@ -3,10 +3,12 @@ import Draggable from 'react-draggable';
33import { isMobile } from 'react-device-detect' ;
44
55import { IoMdDocument as DocumentIcon } from '@react-icons/all-files/io/IoMdDocument' ;
6+ import { IoIosFolderOpen as FolderIcon } from '@react-icons/all-files/io/IoIosFolderOpen' ;
7+ import { AiOutlineArrowLeft as BackArrowIcon } from '@react-icons/all-files/ai/AiOutlineArrowLeft' ;
68
7- import { useRecoilValue , useSetRecoilState } from 'recoil' ;
9+ import { useRecoilState , useRecoilValue , useSetRecoilState } from 'recoil' ;
810import { actionState , freeModeDisabledState , virtualFilesState } from './atoms/atoms' ;
9- import { openVirtualFilesWrapper , saveVirtualFilesWrapper } from './utils/goFunctions' ;
11+ import { exploreDirectoryWrapper , isDirectoryWrapper , openVirtualFilesWrapper , saveVirtualFilesWrapper } from './utils/goFunctions' ;
1012import Actions from './components/Actions/Actions' ;
1113
1214import Files from './components/Files/Files' ;
@@ -19,21 +21,37 @@ import { keyChecker } from './utils/utilityFunctions';
1921import './App.css' ;
2022
2123function App ( ) {
22- const virtualFiles = useRecoilValue ( virtualFilesState ) ;
24+ const [ virtualFiles , setVirtualFiles ] = useRecoilState ( virtualFilesState ) ;
2325 const setAction = useSetRecoilState ( actionState ) ;
2426 const freeModeDisabled = useRecoilValue ( freeModeDisabledState ) ;
2527
2628 const [ editorContent , setEditorContent ] = useState < string > ( '' ) ;
2729 const [ openFile , setOpenFile ] = useState < string > ( '' ) ;
2830 const [ prevOpenedFiles , setPrevOpenedFiles ] = useState < Array < string > > ( [ ] ) ;
31+ const [ openDir , setOpenDir ] = useState < string > ( '' ) ;
32+ const [ oldVirtualFiles , setOldVirtualFiles ] = useState < Array < never > > ( [ ] ) ;
33+
34+ const goBackInDirectories = ( ) => {
35+ if ( oldVirtualFiles . length > 0 ) {
36+ setVirtualFiles ( [ ...oldVirtualFiles ] ) ;
37+ return setOldVirtualFiles ( [ ] )
38+ }
39+ }
2940
30- const clickOnFileHandler = ( virtualFile : never ) => {
31- // Get the file content from Go functions
32- // Open the file
33- // DEPRECATED: keep track of prev opened files (put that to color them differently or for future usages)
34- setEditorContent ( openVirtualFilesWrapper ( virtualFile ) ) ;
35- setOpenFile ( virtualFile ) ;
36- setPrevOpenedFiles ( ( prev : Array < string > ) => [ ...prev , virtualFile ] ) ;
41+ const clickOnFileHandler = ( virtualFile : never , isDirectory : boolean = false ) => {
42+ if ( ! isDirectory ) {
43+ // Get the file content from Go functions
44+ // Open the file
45+ setEditorContent ( openVirtualFilesWrapper ( virtualFile ) ) ;
46+ setPrevOpenedFiles ( ( prev : Array < string > ) => [ ...prev , virtualFile ] ) ;
47+ setOpenFile ( virtualFile ) ;
48+ } else {
49+ // Keep track of the directory you open to go back
50+ setOldVirtualFiles ( virtualFiles ) ;
51+ // Explore direcory
52+ setVirtualFiles ( exploreDirectoryWrapper ( virtualFile ) as never [ ] ) ;
53+ setOpenDir ( virtualFile ) ;
54+ }
3755 } ;
3856
3957 const saveChanges = ( content : string ) => {
@@ -72,20 +90,30 @@ function App() {
7290 < Actions />
7391 < Files />
7492 < div className = "App" >
75- < div className = "files-area" style = { filesAreaStyle } >
93+ < div className = { `files-area ${ oldVirtualFiles . length > 0 ? 'dir-open' : '' } ` } style = { filesAreaStyle } >
94+ { oldVirtualFiles . length > 0 && < div className = "dir-menu" >
95+ { openDir }
96+ < BackArrowIcon onClick = { goBackInDirectories } />
97+ </ div > }
7698 { virtualFiles . map ( ( virtualFile , index ) => {
99+ // Check if directory
100+ const isDirectory = isDirectoryWrapper ( virtualFile ) ;
101+ // Check if file was prev opened
102+ const prevOpened = ! ! prevOpenedFiles . find ( ( f ) => f === virtualFile ) ? 'modified' : '' ;
103+ // Regex on name
104+ const virtualFileName = ( virtualFile as string ) . split ( '/' ) . at ( - 1 ) ;
77105 // Double click on files to open (on mobile should disable the drag - from the menu)
78106 return (
79107 < Draggable key = { index } bounds = "parent" disabled = { freeModeDisabled } >
80108 < div
81109 onDoubleClick = { ( ) => {
82- clickOnFileHandler ( virtualFile ) ;
110+ clickOnFileHandler ( virtualFile , isDirectory ) ;
83111 } }
84- className = { `virtual-file-wrapper ${ ! ! prevOpenedFiles . find ( ( f ) => f === virtualFile ) ? 'modified' : '' } ` }
112+ className = { `virtual-file-wrapper ${ prevOpened } ` }
85113 >
86- < DocumentIcon size = { 60 } />
114+ { isDirectory ? < FolderIcon size = { 60 } /> : < DocumentIcon size = { 60 } /> }
87115 < div key = { index } className = "file" >
88- { virtualFile }
116+ { virtualFileName }
89117 </ div >
90118 </ div >
91119 </ Draggable >
0 commit comments