From e384ede72eb96fd366f20d30eb06d0c5213cb5b3 Mon Sep 17 00:00:00 2001
From: vkovtun <viktor.kovtun@id.ethz.ch>
Date: Fri, 15 Sep 2023 17:58:32 +0200
Subject: [PATCH] SSDM-13579: Added loading dialog for copying, moving and
 renaming.

---
 .../database/data-browser/LeftToolbar.jsx     | 36 +++++++++++++------
 1 file changed, 26 insertions(+), 10 deletions(-)

diff --git a/ui-admin/src/js/components/database/data-browser/LeftToolbar.jsx b/ui-admin/src/js/components/database/data-browser/LeftToolbar.jsx
index 6474a5de28a..a9e1be13a59 100644
--- a/ui-admin/src/js/components/database/data-browser/LeftToolbar.jsx
+++ b/ui-admin/src/js/components/database/data-browser/LeftToolbar.jsx
@@ -36,6 +36,7 @@ import Popover from '@material-ui/core/Popover'
 import InputDialog from '@src/js/components/common/dialog/InputDialog.jsx'
 import ConfirmationDialog from '@src/js/components/common/dialog/ConfirmationDialog.jsx'
 import LocationDialog from '@src/js/components/database/data-browser/LocationDialog.jsx'
+import LoadingDialog from "@src/js/components/common/loading/LoadingDialog.jsx";
 
 const color = 'default'
 const iconButtonSize = 'medium'
@@ -81,7 +82,8 @@ class LeftToolbar extends React.Component {
       newFolderDialogOpen: false,
       deleteDialogOpen: false,
       renameDialogOpen: false,
-      locationDialogMode: null
+      locationDialogMode: null,
+      loading: false
     }
 
     this.controller = this.props.controller
@@ -125,7 +127,13 @@ class LeftToolbar extends React.Component {
     const { multiselectedFiles } = this.props
     const oldName = multiselectedFiles.values().next().value.name
     this.closeRenameDialog()
-    await this.controller.rename(oldName, newName)
+
+    try {
+      this.setState({ loading: true })
+      await this.controller.rename(oldName, newName)
+    } finally {
+      this.setState({ loading: false })
+    }
   }
 
   handleRenameCancel() {
@@ -149,10 +157,15 @@ class LeftToolbar extends React.Component {
     const { locationDialogMode} = this.state
     this.closeLocationDialog()
 
-    if (locationDialogMode === moveLocationMode) {
-      await this.controller.move(multiselectedFiles, newPath)
-    } else {
-      await this.controller.copy(multiselectedFiles, newPath)
+    try {
+      this.setState({ loading: true })
+      if (locationDialogMode === moveLocationMode) {
+        await this.controller.move(multiselectedFiles, newPath)
+      } else {
+        await this.controller.copy(multiselectedFiles, newPath)
+      }
+    } finally {
+      this.setState({ loading: false })
     }
   }
 
@@ -379,15 +392,18 @@ class LeftToolbar extends React.Component {
     logger.log(logger.DEBUG, 'LeftToolbar.render')
 
     const { multiselectedFiles, classes } = this.props
-    return (
-      <ResizeObserver onResize={this.onResize}>
+    const { loading } = this.state
+
+    return ([
+      <ResizeObserver key='resize-observer' onResize={this.onResize}>
         <div className={classes.buttons}>
           {multiselectedFiles && multiselectedFiles.size > 0
             ? this.renderSelectionContextToolbar()
             : this.renderNoSelectionContextToolbar()}
         </div>
-      </ResizeObserver>
-    )
+      </ResizeObserver>,
+      <LoadingDialog key='loaging-dialog' loading={loading} />
+    ])
   }
 }
 
-- 
GitLab