From ba1a7b269ed6b0302ac38fd9468839631b2d1150 Mon Sep 17 00:00:00 2001 From: Reece Browne Date: Thu, 21 Aug 2025 13:21:57 +0100 Subject: [PATCH] File editor tweaks --- frontend/src/components/FileManager.tsx | 2 +- .../src/components/fileEditor/FileEditor.tsx | 36 +++++++++---------- frontend/src/hooks/useFileHandler.ts | 2 +- 3 files changed, 19 insertions(+), 21 deletions(-) diff --git a/frontend/src/components/FileManager.tsx b/frontend/src/components/FileManager.tsx index f21a8ae78..1c327cefa 100644 --- a/frontend/src/components/FileManager.tsx +++ b/frontend/src/components/FileManager.tsx @@ -43,7 +43,7 @@ const FileManager: React.FC = ({ selectedTool }) => { const handleFilesSelected = useCallback(async (files: FileMetadata[]) => { try { - // NEW: Use stored files flow that preserves original IDs + // Use stored files flow that preserves original IDs const filesWithMetadata = await Promise.all( files.map(async (metadata) => ({ file: await convertToFile(metadata), diff --git a/frontend/src/components/fileEditor/FileEditor.tsx b/frontend/src/components/fileEditor/FileEditor.tsx index 4981fa7a8..b5160b9f5 100644 --- a/frontend/src/components/fileEditor/FileEditor.tsx +++ b/frontend/src/components/fileEditor/FileEditor.tsx @@ -7,6 +7,7 @@ import { Dropzone } from '@mantine/dropzone'; import { useTranslation } from 'react-i18next'; import UploadFileIcon from '@mui/icons-material/UploadFile'; import { useToolFileSelection, useFileState, useFileManagement, useFileActions } from '../../contexts/FileContext'; +import { useNavigationActions } from '../../contexts/NavigationContext'; import { FileOperation } from '../../types/fileContext'; import { fileStorage } from '../../services/fileStorage'; import { generateThumbnailForFile } from '../../utils/thumbnailUtils'; @@ -55,28 +56,20 @@ const FileEditor = ({ // Get the real context actions const { actions } = useFileActions(); + const { actions: navActions } = useNavigationActions(); - // Create a stable ref to access current selected files and actions without dependency - const selectedFileIdsRef = useRef([]); - const actionsRef = useRef(actions); - selectedFileIdsRef.current = selectedFileIds; - actionsRef.current = actions; - - // Wrapper for context file selection updates (stable) + // Proper context-based file selection updater const setContextSelectedFiles = useCallback((fileIds: string[] | ((prev: string[]) => string[])) => { if (typeof fileIds === 'function') { - // Handle callback pattern - get current state from ref - const result = fileIds(selectedFileIdsRef.current); - actionsRef.current.setSelectedFiles(result); + // Handle callback pattern with current state + const result = fileIds(selectedFileIds); + actions.setSelectedFiles(result); } else { // Handle direct array pattern - actionsRef.current.setSelectedFiles(fileIds); + actions.setSelectedFiles(fileIds); } - }, []); // No dependencies at all - completely stable + }, [selectedFileIds, actions.setSelectedFiles]); - const setCurrentView = (mode: any) => { - // Will be handled by parent component actions - }; // Get tool file selection context (replaces FileSelectionContext) const { @@ -286,8 +279,9 @@ const FileEditor = ({ const closeAllFiles = useCallback(() => { if (activeFileRecords.length === 0) return; - // Remove all files from context but keep in storage + const allFileIds = activeFileRecords.map(record => record.id); + removeFiles(allFileIds, false); // false = keep in storage // Clear selections setContextSelectedFiles([]); @@ -440,9 +434,9 @@ const FileEditor = ({ if (record) { // Set the file as selected in context and switch to viewer for preview setContextSelectedFiles([fileId]); - setCurrentView('viewer'); + navActions.setMode('viewer'); } - }, [activeFileRecords, setContextSelectedFiles, setCurrentView]); + }, [activeFileRecords, setContextSelectedFiles, navActions.setMode]); const handleMergeFromHere = useCallback((fileId: string) => { const startIndex = activeFileRecords.findIndex(r => r.id === fileId); @@ -495,10 +489,14 @@ const FileEditor = ({ - {showBulkActions && !toolMode && ( + {toolMode && ( <> + + )} + {showBulkActions && !toolMode && ( + <> diff --git a/frontend/src/hooks/useFileHandler.ts b/frontend/src/hooks/useFileHandler.ts index 79c8f259d..b42b4e94c 100644 --- a/frontend/src/hooks/useFileHandler.ts +++ b/frontend/src/hooks/useFileHandler.ts @@ -16,7 +16,7 @@ export const useFileHandler = () => { await actions.addFiles(files); }, [actions.addFiles]); - // NEW: Add stored files preserving their original IDs to prevent session duplicates + // Add stored files preserving their original IDs to prevent session duplicates const addStoredFiles = useCallback(async (filesWithMetadata: Array<{ file: File; originalId: string; metadata: FileMetadata }>) => { // Filter out files that already exist with the same ID (exact match) const newFiles = filesWithMetadata.filter(({ originalId }) => {