From d77dcec068cc84340dffeee270293d93ea7dede8 Mon Sep 17 00:00:00 2001 From: Kobe Date: Wed, 28 May 2025 12:32:40 +0200 Subject: [PATCH] fix move --- static/js/rooms/fileManager.js | 123 ++++++++++++++++++++++++++++---- static/js/rooms/modalManager.js | 16 ++++- static/js/rooms/viewManager.js | 2 +- 3 files changed, 125 insertions(+), 16 deletions(-) diff --git a/static/js/rooms/fileManager.js b/static/js/rooms/fileManager.js index 63d71a3..034f0f9 100644 --- a/static/js/rooms/fileManager.js +++ b/static/js/rooms/fileManager.js @@ -8,6 +8,8 @@ export class FileManager { this.batchDeleteItems = null; this.fileToDelete = null; this.fileToDeletePath = ''; + this.fileToMove = null; + this.fileToMovePath = ''; console.log('[FileManager] Initialized with roomManager:', roomManager); } @@ -112,38 +114,135 @@ export class FileManager { } async moveFile(fileId, targetPath) { - console.log('[FileManager] Moving file:', { fileId, targetPath }); + console.log('[FileManager] Starting moveFile...'); + console.log('[FileManager] Parameters:', { fileId, targetPath }); + try { - const response = await fetch(`/api/rooms/${this.roomManager.roomId}/files/${fileId}/move`, { + const file = this.currentFiles.find(f => f.id === fileId); + console.log('[FileManager] Found file to move:', file); + + if (!file) { + console.error('[FileManager] File not found with ID:', fileId); + throw new Error('File not found'); + } + + console.log('[FileManager] Sending move request...'); + const response = await fetch(`/api/rooms/${this.roomManager.roomId}/move`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-CSRF-Token': document.querySelector('meta[name="csrf-token"]').getAttribute('content') }, - body: JSON.stringify({ target_path: targetPath }) + body: JSON.stringify({ + filename: file.name, + source_path: file.path || '', + target_path: targetPath + }) }); + console.log('[FileManager] Move response status:', response.status); - - if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`); - } - const result = await response.json(); - console.log('[FileManager] Move result:', result); + console.log('[FileManager] Move response data:', result); if (result.success) { - this.currentFiles = this.currentFiles.filter(file => file.id !== fileId); + console.log('[FileManager] Move successful, updating view...'); + this.currentFiles = this.currentFiles.filter(f => f.id !== fileId); await this.roomManager.viewManager.renderFiles(this.currentFiles); - console.log('[FileManager] File moved and view updated'); + console.log('[FileManager] View updated after move'); return { success: true, message: 'File moved successfully' }; } else { + console.error('[FileManager] Move failed:', result.message); throw new Error(result.message || 'Failed to move file'); } } catch (error) { - console.error('[FileManager] Error moving file:', error); + console.error('[FileManager] Error in moveFile:', error); + console.error('[FileManager] Error details:', { + message: error.message, + stack: error.stack + }); return { success: false, message: error.message }; } } + + async moveFileConfirmed() { + console.log('[FileManager] Starting moveFileConfirmed...'); + console.log('[FileManager] Current state:', { + fileToMove: this.fileToMove, + fileToMovePath: this.fileToMovePath, + currentFiles: this.currentFiles + }); + + if (!this.fileToMove) { + console.error('[FileManager] No file selected for move operation'); + document.getElementById('moveError').textContent = 'No file selected for move.'; + return; + } + + const targetPath = document.getElementById('moveTargetFolder').value; + console.log('[FileManager] Selected target path:', targetPath); + + const csrfToken = document.querySelector('meta[name="csrf-token"]').getAttribute('content'); + console.log('[FileManager] CSRF Token:', csrfToken ? 'Present' : 'Missing'); + + // Get the file from currentFiles using the filename + console.log('[FileManager] Attempting to find file with name:', this.fileToMove); + const file = this.currentFiles.find(f => f.name === this.fileToMove); + console.log('[FileManager] Found file:', file); + + if (!file) { + console.error('[FileManager] File not found in currentFiles. Available files:', this.currentFiles); + document.getElementById('moveError').textContent = 'File not found.'; + return; + } + + console.log('[FileManager] Preparing move request with data:', { + filename: file.name, + source_path: this.fileToMovePath, + target_path: targetPath + }); + + try { + const url = `/api/rooms/${this.roomManager.roomId}/move`; + console.log('[FileManager] Sending request to:', url); + + const response = await fetch(url, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': csrfToken + }, + body: JSON.stringify({ + filename: file.name, + source_path: this.fileToMovePath, + target_path: targetPath + }) + }); + + console.log('[FileManager] Response status:', response.status); + const result = await response.json(); + console.log('[FileManager] Response data:', result); + + if (result.success) { + console.log('[FileManager] Move successful, refreshing files...'); + await this.fetchFiles(); + this.fileToMove = null; + this.fileToMovePath = ''; + this.roomManager.modalManager.moveModal.hide(); + document.getElementById('moveError').textContent = ''; + console.log('[FileManager] Move operation completed successfully'); + } else { + console.error('[FileManager] Move failed:', result.error); + document.getElementById('moveError').textContent = result.error || 'Move failed.'; + } + } catch (error) { + console.error('[FileManager] Error during move operation:', error); + console.error('[FileManager] Error details:', { + message: error.message, + stack: error.stack + }); + document.getElementById('moveError').textContent = 'Move failed.'; + } + } async toggleStar(filename, path) { console.log('[FileManager] Toggling star for:', filename, 'path:', path); diff --git a/static/js/rooms/modalManager.js b/static/js/rooms/modalManager.js index b5713aa..6944510 100644 --- a/static/js/rooms/modalManager.js +++ b/static/js/rooms/modalManager.js @@ -189,12 +189,21 @@ export class ModalManager { }); } - showMoveModal(filename, path) { + showMoveModal(fileId, path) { + console.log('[ModalManager] Showing move modal for file:', { fileId, path }); document.getElementById('moveError').textContent = ''; + // Set the file to move in the FileManager + this.roomManager.fileManager.fileToMove = fileId; + this.roomManager.fileManager.fileToMovePath = path; + + console.log('[ModalManager] Set fileToMove:', this.roomManager.fileManager.fileToMove); + console.log('[ModalManager] Set fileToMovePath:', this.roomManager.fileManager.fileToMovePath); + fetch(`/api/rooms/${this.roomManager.roomId}/folders`) .then(r => r.json()) .then(folders => { + console.log('[ModalManager] Fetched folders:', folders); const select = document.getElementById('moveTargetFolder'); select.innerHTML = ''; @@ -216,11 +225,12 @@ export class ModalManager { select.innerHTML += ``; }); + console.log('[ModalManager] Showing move modal'); this.moveModal.show(); }) .catch(error => { - document.getElementById('moveError').textContent = 'Failed to load folders.'; - console.error('Error loading folders:', error); + console.error('[ModalManager] Error fetching folders:', error); + document.getElementById('moveError').textContent = 'Failed to load folders. Please try again.'; }); } diff --git a/static/js/rooms/viewManager.js b/static/js/rooms/viewManager.js index a00e7d3..a40d5f8 100644 --- a/static/js/rooms/viewManager.js +++ b/static/js/rooms/viewManager.js @@ -266,7 +266,7 @@ export class ViewManager { if (this.roomManager.canMove) { actions.push(` -