From 3f92506ff96def45315a05ba5e3f541450971bc4 Mon Sep 17 00:00:00 2001
From: Sonia Zorba <sonia.zorba@inaf.it>
Date: Fri, 9 Jul 2021 16:18:13 +0200
Subject: [PATCH] Confirm delete modal: added warning message when some of the
 selected nodes are not deletable

---
 vospace-ui-frontend/src/components/Main.vue       | 15 +++++++++++----
 .../src/components/modal/ConfirmDeleteModal.vue   | 11 ++++++++++-
 vospace-ui-frontend/src/store.js                  |  4 ++++
 3 files changed, 25 insertions(+), 5 deletions(-)

diff --git a/vospace-ui-frontend/src/components/Main.vue b/vospace-ui-frontend/src/components/Main.vue
index ac26e0a..dfc5f2c 100644
--- a/vospace-ui-frontend/src/components/Main.vue
+++ b/vospace-ui-frontend/src/components/Main.vue
@@ -117,12 +117,19 @@ export default {
       this.$store.dispatch('startAsyncRecallJob');
     },
     deleteNodes() {
-      let deletableCheckboxes = document.querySelectorAll('#nodes input.deletable:checked');
-      let paths = [];
-      for (let i = 0; i < deletableCheckboxes.length; i++) {
-        paths.push(deletableCheckboxes[i].getAttribute('data-node'));
+      let selectedNodesCheckboxes = document.querySelectorAll('#nodes input:checked');
+      let paths = [], unDeletablePaths = [];
+      for (let i = 0; i < selectedNodesCheckboxes.length; i++) {
+        let checkbox = selectedNodesCheckboxes[i];
+        let dataNode = checkbox.getAttribute('data-node');
+        if(checkbox.classList.contains('deletable')) {
+          paths.push(dataNode);
+        } else {
+          unDeletablePaths.push(dataNode);
+        }
       }
       this.$store.commit('setNodesToDelete', paths);
+      this.$store.commit('setSelectedUndeletableNodes', unDeletablePaths);
       this.$bvModal.show('confirm-delete-modal');
     }
   }
diff --git a/vospace-ui-frontend/src/components/modal/ConfirmDeleteModal.vue b/vospace-ui-frontend/src/components/modal/ConfirmDeleteModal.vue
index b8e5a20..d96122e 100644
--- a/vospace-ui-frontend/src/components/modal/ConfirmDeleteModal.vue
+++ b/vospace-ui-frontend/src/components/modal/ConfirmDeleteModal.vue
@@ -11,6 +11,14 @@
     <li v-for="node in nodesToDelete" :key="node">{{node}}</li>
   </ul>
   </p>
+  <div v-if="selectedUndeletableNodes.length > 0">
+    <p><strong>Warning</strong>: following selected nodes can't be deleted and will be ignored:</p>
+    <p>
+    <ul>
+      <li v-for="node in selectedUndeletableNodes" :key="node">{{node}}</li>
+    </ul>
+    </p>
+  </div>
 </b-modal>
 </template>
 
@@ -18,7 +26,8 @@
 export default {
   name: 'ConfirmDeleteModal',
   computed: {
-    nodesToDelete() { return this.$store.state.nodesToDelete }
+    nodesToDelete() { return this.$store.state.nodesToDelete },
+    selectedUndeletableNodes() { return this.$store.state.selectedUndeletableNodes }
   },
   methods: {
     reset() {
diff --git a/vospace-ui-frontend/src/store.js b/vospace-ui-frontend/src/store.js
index 68f19dd..f610813 100644
--- a/vospace-ui-frontend/src/store.js
+++ b/vospace-ui-frontend/src/store.js
@@ -33,6 +33,7 @@ export default new Vuex.Store({
     lastJobsCheckTime: null,
     user: 'anonymous',
     nodesToDelete: [],
+    selectedUndeletableNodes: [],
     writable: false,
     nodeToShare: {
       path: null,
@@ -78,6 +79,9 @@ export default new Vuex.Store({
     setNodesToDelete(state, paths) {
       updateArray(state.nodesToDelete, paths);
     },
+    setSelectedUndeletableNodes(state, paths) {
+      updateArray(state.selectedUndeletableNodes, paths);
+    },
     setWritable(state, value) {
       state.writable = value;
     },
-- 
GitLab