From ca9b8f3f73031a3ce19efc2ef5bd3c25bbe58575 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Wed, 24 Dec 2025 17:26:27 +0000 Subject: [PATCH] Fix: Improve rename functionality and error handling Co-authored-by: ijamespine --- core/src/ops/files/rename/action.rs | 2 +- core/src/volume/backend/local.rs | 18 +++++++++--------- .../Explorer/components/InlineNameEdit.tsx | 16 ++++++++-------- .../Explorer/hooks/useExplorerKeyboard.ts | 6 +++--- 4 files changed, 21 insertions(+), 21 deletions(-) diff --git a/core/src/ops/files/rename/action.rs b/core/src/ops/files/rename/action.rs index 259a6dfc1..31168fbd4 100644 --- a/core/src/ops/files/rename/action.rs +++ b/core/src/ops/files/rename/action.rs @@ -1,7 +1,7 @@ //! File rename action handler use super::input::FileRenameInput; -use super::validation::{validate_filename, FilenameValidationError}; +use super::validation::validate_filename; use crate::{ context::CoreContext, domain::addressing::SdPath, diff --git a/core/src/volume/backend/local.rs b/core/src/volume/backend/local.rs index 0f2be1f4a..2102007fc 100644 --- a/core/src/volume/backend/local.rs +++ b/core/src/volume/backend/local.rs @@ -223,15 +223,15 @@ impl VolumeBackend for LocalBackend { recursive ); - if recursive { - fs::create_dir_all(&full_path) - .await - .map_err(|e| VolumeError::Io(e))?; - } else { - fs::create_dir(&full_path) - .await - .map_err(|e| VolumeError::Io(e))?; - } + if recursive { + fs::create_dir_all(&full_path) + .await + .map_err(VolumeError::Io)?; + } else { + fs::create_dir(&full_path) + .await + .map_err(VolumeError::Io)?; + } Ok(()) } diff --git a/packages/interface/src/components/Explorer/components/InlineNameEdit.tsx b/packages/interface/src/components/Explorer/components/InlineNameEdit.tsx index 48f91a161..bbb9a0aff 100644 --- a/packages/interface/src/components/Explorer/components/InlineNameEdit.tsx +++ b/packages/interface/src/components/Explorer/components/InlineNameEdit.tsx @@ -5,7 +5,7 @@ import clsx from "clsx"; interface InlineNameEditProps { file: File; - onSave: (newName: string) => void; + onSave: (newName: string) => Promise; onCancel: () => void; className?: string; } @@ -55,13 +55,13 @@ export function InlineNameEdit({ file, onSave, onCancel, className }: InlineName return; } - setIsSaving(true); - try { - onSave(fullNewName); - } catch (error) { - setIsSaving(false); - // Keep in edit mode on error - let parent handle error display - } + setIsSaving(true); + try { + await onSave(fullNewName); + } catch (error) { + setIsSaving(false); + // Keep in edit mode on error - let parent handle error display + } }, [value, isSaving, hasExtension, file.extension, file.name, onSave, onCancel]); const handleKeyDown = useCallback((e: React.KeyboardEvent) => { diff --git a/packages/interface/src/components/Explorer/hooks/useExplorerKeyboard.ts b/packages/interface/src/components/Explorer/hooks/useExplorerKeyboard.ts index 5840ad60d..62cfeccbb 100644 --- a/packages/interface/src/components/Explorer/hooks/useExplorerKeyboard.ts +++ b/packages/interface/src/components/Explorer/hooks/useExplorerKeyboard.ts @@ -128,15 +128,15 @@ export function useExplorerKeyboard() { { enabled: clipboard.hasClipboard() && !!currentPath }, ); - // Rename: Enter key triggers rename mode when single file selected + // Rename: Enter key triggers rename mode when single file selected (not directories) useKeybind( "explorer.renameFile", () => { - if (selectedFiles.length === 1 && !isRenaming) { + if (selectedFiles.length === 1 && !isRenaming && selectedFiles[0].kind !== "Directory") { startRename(selectedFiles[0].id); } }, - { enabled: selectedFiles.length === 1 && !isRenaming }, + { enabled: selectedFiles.length === 1 && !isRenaming && selectedFiles[0]?.kind !== "Directory" }, ); useEffect(() => {