From 9cf8b0c3a362cbc22ef3fbce3717d1c579a7d706 Mon Sep 17 00:00:00 2001 From: santoslgl01-web Date: Wed, 29 Apr 2026 17:37:47 -0300 Subject: [PATCH] fix: improve rename popup\n\nFixes #1148 --- .../lib/hooks/useCloudResourceModals.tsx | 97 +++++++++++++------ 1 file changed, 66 insertions(+), 31 deletions(-) diff --git a/src/cloud/lib/hooks/useCloudResourceModals.tsx b/src/cloud/lib/hooks/useCloudResourceModals.tsx index c2bbcb4989..903fe3eda1 100644 --- a/src/cloud/lib/hooks/useCloudResourceModals.tsx +++ b/src/cloud/lib/hooks/useCloudResourceModals.tsx @@ -72,6 +72,25 @@ export function useCloudResourceModals() { const openRenameFolderForm = useCallback( (folder: SerializedFolder) => { + let renameSubmitted = false + const updateFolderName = async (inputValue: string, emoji?: string) => { + if (renameSubmitted) { + return + } + try { + renameSubmitted = true + await updateFolder(folder, { + workspaceId: folder.workspaceId, + parentFolderId: folder.parentFolderId, + folderName: inputValue, + emoji: typeof emoji === 'string' ? emoji : null, + }) + } catch (error) { + renameSubmitted = false + throw error + } + } + openModal( { - await updateFolder(folder, { - workspaceId: folder.workspaceId, - parentFolderId: folder.parentFolderId, - folderName: inputValue, - emoji: typeof emoji === 'string' ? emoji : null, - }) + await updateFolderName(inputValue, emoji) closeLastModal() }} />, { - showCloseIcon: true, + showCloseIcon: false, + width: 'small', title: translate(lngKeys.RenameFolder), } ) @@ -102,37 +117,47 @@ export function useCloudResourceModals() { const openRenameDocForm = useCallback( (doc: SerializedDoc) => { + let renameSubmitted = false + const updateDocTitle = async (inputValue: string, emoji?: string) => { + if (renameSubmitted) { + return + } + try { + renameSubmitted = true + await updateDoc(doc, { + workspaceId: doc.workspaceId, + parentFolderId: doc.parentFolderId, + title: inputValue, + emoji: emoji == null ? null : emoji, + }) + } catch (error) { + renameSubmitted = false + throw error + } + } + openModal( { - await updateDoc(doc, { - workspaceId: doc.workspaceId, - parentFolderId: doc.parentFolderId, - title: inputValue, - emoji: emoji == null ? null : emoji, - }) + await updateDocTitle(inputValue, emoji) closeLastModal() }} - onBlur={async (inputValue: string, emoji?: string) => { - await updateDoc(doc, { - workspaceId: doc.workspaceId, - parentFolderId: doc.parentFolderId, - title: inputValue, - emoji: emoji == null ? null : emoji, - }) - }} />, { showCloseIcon: false, width: 'small', + title: translate(lngKeys.RenameDoc), } ) }, - [closeLastModal, openModal, translate, updateDoc] + [closeLastModal, openModal, updateDoc, translate] ) const openNewFolderForm = useCallback( @@ -237,21 +262,31 @@ export function useCloudResourceModals() { const openRenameDashboardForm = useCallback( (dashboard: SerializedDashboard) => { + let renameSubmitted = false + const updateDashboardName = async (inputValue: string) => { + if (renameSubmitted) { + return + } + try { + renameSubmitted = true + await updateDashboard(dashboard, { + name: inputValue, + }) + } catch (error) { + renameSubmitted = false + throw error + } + } + openModal( { - await updateDashboard(dashboard, { - name: inputValue, - }) + await updateDashboardName(inputValue) closeLastModal() }} - onBlur={async (inputValue: string) => { - await updateDashboard(dashboard, { - name: inputValue, - }) - }} + onBlur={updateDashboardName} />, { showCloseIcon: false, @@ -259,7 +294,7 @@ export function useCloudResourceModals() { } ) }, - [closeLastModal, openModal, translate, updateDashboard] + [closeLastModal, openModal, updateDashboard, translate] ) const deleteWorkspace = useCallback(