From 8f7383e086a150352dfcfa3b19ab3be8f8f80ab5 Mon Sep 17 00:00:00 2001
From: Eugen Ciur <eugen@papermerge.com>
Date: Sun, 27 Feb 2022 11:15:09 +0100
Subject: [PATCH] drag multiple items from source to target

---
 app/components/commander/index.js |  3 ++-
 app/components/document/index.hbs |  1 +
 app/components/folder/index.hbs   |  1 +
 app/modifiers/draggable.js        | 20 ++++++++++++++++----
 4 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/app/components/commander/index.js b/app/components/commander/index.js
index d0849d9..a9a4fb2 100644
--- a/app/components/commander/index.js
+++ b/app/components/commander/index.js
@@ -261,7 +261,7 @@ export default class CommanderComponent extends Component {
       // dropping items from another panel
       source_data = data['application/x.node'];
       nodes_move_data = {
-        'nodes': [{ 'id': source_data.node.id }],
+        'nodes': source_data.nodes,
         'source_parent': {
           'id': source_data.source_parent.id
         },
@@ -273,6 +273,7 @@ export default class CommanderComponent extends Component {
         console.log('Source same as target. Nothing to do.');
         return;
       }
+
       this.requests.nodesMove(nodes_move_data);
       if (nodes_move_data.source_parent.id == this.currentUser.user.inbox_folder.get('id')) {
         this.router.refresh();
diff --git a/app/components/document/index.hbs b/app/components/document/index.hbs
index 53ebfca..67b7740 100644
--- a/app/components/document/index.hbs
+++ b/app/components/document/index.hbs
@@ -1,5 +1,6 @@
 <div class="node document {{if this.is_selected "checked"}}"
   {{draggable @model
+    selectedNodes=@selectedNodes
     sourceParent=@sourceParen
     onDragendSuccess=@onDragendSuccess
     onDragendCancel=@onDragendCancel}}>
diff --git a/app/components/folder/index.hbs b/app/components/folder/index.hbs
index c3e6f26..102ae6f 100644
--- a/app/components/folder/index.hbs
+++ b/app/components/folder/index.hbs
@@ -1,6 +1,7 @@
 <div class="node folder
   {{if this.is_selected "checked"}}"
   {{draggable @model
+    selectedNodes=@selectedNodes
     onDragendSuccess=@onDragendSuccess
     onDragendCancel=@onDragendCancel}}>
   <Input
diff --git a/app/modifiers/draggable.js b/app/modifiers/draggable.js
index 1bb683e..8f94caf 100644
--- a/app/modifiers/draggable.js
+++ b/app/modifiers/draggable.js
@@ -58,14 +58,26 @@ export default class DraggableModifier extends Modifier {
 
   @action
   onDragStart(event) {
-    let data;
+    let data, selected_nodes, nodes, source_nodes;
 
     this.model = this.args.positional[0];
+    selected_nodes = this.args.named['selectedNodes'];
+    nodes = [{
+      id: this.model.id
+    }];
+
+    if (selected_nodes && selected_nodes.length > 0) {
+      source_nodes = nodes.concat(
+        selected_nodes.map(item => {
+          return {'id': item.get('id')};
+        })
+      );
+    } else {
+      source_nodes = nodes;
+    }
 
     data = {
-      node: {
-        id: this.model.id
-      },
+      nodes: source_nodes,
       source_parent: {
         id: this.model.parent.get('id')
       }
-- 
GitLab