@@ -25,12 +25,18 @@ import { Node } from "./types";
2525interface FileSystemManagerProps {
2626 path : string ;
2727 nodes : Node [ ] ;
28+ oldName : string ;
29+ newName : string ;
30+ renameOpen : boolean ;
31+ onNewNameChange : ( ) => ( event : ChangeEvent < HTMLInputElement > ) => Promise < void > ;
32+ onCloseRenameModal : ( ) => ( ) => Promise < void > ;
2833 onFileUpload : (
2934 isText : boolean
3035 ) => ( event : ChangeEvent < HTMLInputElement > ) => Promise < void > ;
3136 onDirClick : ( name : string ) => ( ) => Promise < void > ;
3237 onFileClick : ( name : string ) => ( option : string ) => Promise < void > ;
3338 onDirCreate : ( name : string ) => ( ) => Promise < void > ;
39+ onRename : ( old_name : string , new_name : string ) => ( ) => Promise < void > ;
3440 onRefresh : ( ) => Promise < void > ;
3541 onLoadSamples : ( ) => Promise < void > ;
3642}
@@ -46,6 +52,7 @@ const modalStyle = {
4652} ;
4753
4854export const options = [
55+ { text : "Rename" , key : "rename" } ,
4956 { text : "Download" , key : "download" } ,
5057 { text : "Download as Text File" , key : "download-text" } ,
5158 { text : "Delete" , key : "delete" } ,
@@ -54,17 +61,23 @@ export const options = [
5461export default function FileSystemManager ( {
5562 path = "/" ,
5663 nodes = [ ] ,
64+ oldName = "" ,
65+ newName = "" ,
66+ renameOpen = false ,
67+ onNewNameChange = ( ) => ( ) => Promise . resolve ( ) ,
68+ onCloseRenameModal = ( ) => ( ) => Promise . resolve ( ) ,
5769 onFileUpload = ( ) => ( ) => Promise . resolve ( ) ,
5870 onFileClick = ( ) => ( ) => Promise . resolve ( ) ,
5971 onDirClick = ( ) => ( ) => Promise . resolve ( ) ,
6072 onDirCreate = ( ) => ( ) => Promise . resolve ( ) ,
73+ onRename = ( ) => ( ) => Promise . resolve ( ) ,
6174 onRefresh = ( ) => Promise . resolve ( ) ,
6275 onLoadSamples = ( ) => Promise . resolve ( ) ,
6376} : FileSystemManagerProps ) {
64- const [ open , setOpen ] = useState ( false ) ;
77+ const [ newFolderOpen , setNewFolderOpen ] = useState ( false ) ;
6578 const [ dirName , setDirName ] = useState ( "" ) ;
66- const handleModalOpen = ( ) => setOpen ( true ) ;
67- const handleModalClose = ( ) => setOpen ( false ) ;
79+ const handleNewFolderModalOpen = ( ) => setNewFolderOpen ( true ) ;
80+ const handleNewFolderModalClose = ( ) => setNewFolderOpen ( false ) ;
6881
6982 return (
7083 < >
@@ -113,7 +126,7 @@ export default function FileSystemManager({
113126 < IconButton
114127 onClick = { ( ) => {
115128 setDirName ( "" ) ;
116- handleModalOpen ( ) ;
129+ handleNewFolderModalOpen ( ) ;
117130 } }
118131 aria-label = "create-a-new-folder"
119132 size = "small"
@@ -165,8 +178,8 @@ export default function FileSystemManager({
165178 </ Stack >
166179 </ Paper >
167180 < Modal
168- open = { open }
169- onClose = { handleModalClose }
181+ open = { newFolderOpen }
182+ onClose = { handleNewFolderModalClose }
170183 aria-labelledby = "new-folder-name"
171184 aria-describedby = "new-folder-name-description"
172185 >
@@ -183,12 +196,12 @@ export default function FileSystemManager({
183196 onChange = { ( event ) => setDirName ( event . target . value ) }
184197 />
185198 < Stack direction = "row" justifyContent = "flex-end" >
186- < Button onClick = { handleModalClose } > Cancel</ Button >
199+ < Button onClick = { handleNewFolderModalClose } > Cancel</ Button >
187200 < Button
188201 variant = "contained"
189202 onClick = { ( ) => {
190203 onDirCreate ( dirName ) ;
191- handleModalClose ( ) ;
204+ handleNewFolderModalClose ( ) ;
192205 } }
193206 >
194207 Create
@@ -197,6 +210,36 @@ export default function FileSystemManager({
197210 </ Stack >
198211 </ Box >
199212 </ Modal >
213+ < Modal
214+ open = { renameOpen }
215+ onClose = { onCloseRenameModal ( ) }
216+ aria-labelledby = "new-name"
217+ aria-describedby = "new-name-description"
218+ >
219+ < Box sx = { modalStyle } >
220+ < Stack spacing = { 4 } >
221+ < Typography id = "modal-modal-title" variant = "h6" component = "h2" >
222+ New Name:
223+ </ Typography >
224+ < TextField
225+ id = "outlined-basic"
226+ label = "my-file"
227+ variant = "outlined"
228+ value = { newName }
229+ onChange = { onNewNameChange ( ) }
230+ />
231+ < Stack direction = "row" justifyContent = "flex-end" >
232+ < Button onClick = { onCloseRenameModal ( ) } > Cancel</ Button >
233+ < Button
234+ variant = "contained"
235+ onClick = { onRename ( oldName , newName ) }
236+ >
237+ Rename
238+ </ Button >
239+ </ Stack >
240+ </ Stack >
241+ </ Box >
242+ </ Modal >
200243 </ >
201244 ) ;
202245}
0 commit comments