@@ -12,6 +12,7 @@ import PermissionsDialog, { Permission } from "./PermissionsDialog";
1212import NewFolderDialog from "./NewFolderDialog" ;
1313import RenameDialog from "./RenameDialog" ;
1414import PreviewModal from "./PreviewModal" ;
15+ import MoveDialog from "./MoveDialog" ;
1516import FileUploadHandler from "./FileUploadHandler" ;
1617import { FileItemData } from "./FileItem" ;
1718import LoadingSpinner from "./shared/LoadingSpinner" ;
@@ -46,6 +47,8 @@ export default function FileManager() {
4647 const [ fileToRename , setFileToRename ] = useState < FileItemData | null > ( null ) ;
4748 const [ showPreviewModal , setShowPreviewModal ] = useState ( false ) ;
4849 const [ fileToPreview , setFileToPreview ] = useState < FileItemData | null > ( null ) ;
50+ const [ showMoveDialog , setShowMoveDialog ] = useState ( false ) ;
51+ const [ fileToMove , setFileToMove ] = useState < FileItemData | null > ( null ) ;
4952
5053 const [ savedUrl , setSavedUrl ] = useState < string | null > ( ( ) => {
5154 if ( typeof window === "undefined" ) return null ;
@@ -250,6 +253,15 @@ export default function FileManager() {
250253 setShowPreviewModal ( true ) ;
251254 } ;
252255
256+ const handleMove = ( file : FileItemData ) => {
257+ setFileToMove ( file ) ;
258+ setShowMoveDialog ( true ) ;
259+ } ;
260+
261+ const handleMoved = ( ) => {
262+ setRefreshKey ( ( prev ) => prev + 1 ) ;
263+ } ;
264+
253265 const storageFiles : FileItemData [ ] = storages . map ( ( storage ) => ( {
254266 id : storage . id ,
255267 name : storage . name ,
@@ -259,6 +271,24 @@ export default function FileManager() {
259271
260272 const displayFiles = selectedStorageId ? browsedFiles : storageFiles ;
261273
274+ // Get all available folders for move dialog (storages + browsed folders)
275+ const availableFolders : FileItemData [ ] = [
276+ ...storageFiles ,
277+ ...( selectedStorageId ? browsedFiles . filter ( ( f ) => f . type === "folder" ) : [ ] ) ,
278+ ] ;
279+
280+ // Get current location URL for move dialog
281+ const getCurrentLocationUrl = ( ) : string => {
282+ if ( ! selectedStorageId ) {
283+ return "" ;
284+ }
285+ if ( currentPath === "/" ) {
286+ const storage = storages . find ( ( s ) => s . id === selectedStorageId ) ;
287+ return storage ?. url || "" ;
288+ }
289+ return currentPath ;
290+ } ;
291+
262292 const selectedStorage = storages . find ( ( s ) => s . id === selectedStorageId ) ;
263293 const breadcrumbItems = buildBreadcrumbItems (
264294 selectedStorageId ,
@@ -436,6 +466,7 @@ export default function FileManager() {
436466 onFileRename = { handleRename }
437467 onFilePreview = { handlePreview }
438468 onFileCopy = { handleCopy }
469+ onFileMove = { handleMove }
439470 selectedFileIds = { selectedFileIds }
440471 />
441472 </ div >
@@ -479,6 +510,17 @@ export default function FileManager() {
479510 } }
480511 file = { fileToPreview }
481512 />
513+ < MoveDialog
514+ isOpen = { showMoveDialog }
515+ onClose = { ( ) => {
516+ setShowMoveDialog ( false ) ;
517+ setFileToMove ( null ) ;
518+ } }
519+ file = { fileToMove }
520+ availableFolders = { availableFolders }
521+ currentLocationUrl = { getCurrentLocationUrl ( ) }
522+ onMoved = { handleMoved }
523+ />
482524 < FileUploadHandler
483525 currentContainerUrl = { containerUrlToBrowse }
484526 onUploadComplete = { handleFileUploaded }
0 commit comments