| 
									
										
										
										
											2018-03-25 13:41:29 -04:00
										 |  |  | import treeService from './tree.js'; | 
					
						
							| 
									
										
										
										
											2018-04-01 20:33:10 -04:00
										 |  |  | import treeChangesService from './branches.js'; | 
					
						
							| 
									
										
										
										
											2019-02-23 20:33:27 +01:00
										 |  |  | import fileService from '../services/file.js'; | 
					
						
							| 
									
										
										
										
											2018-03-25 11:09:17 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-09 12:06:15 -04:00
										 |  |  | const dragAndDropSetup = { | 
					
						
							|  |  |  |     autoExpandMS: 600, | 
					
						
							| 
									
										
										
										
											2017-10-09 18:53:11 -04:00
										 |  |  |     dragStart: (node, data) => { | 
					
						
							| 
									
										
										
										
											2018-12-09 21:18:53 +01:00
										 |  |  |         // don't allow dragging root node
 | 
					
						
							| 
									
										
										
										
											2018-10-21 22:42:20 +02:00
										 |  |  |         if (node.data.noteId === 'root') { | 
					
						
							|  |  |  |             return false; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-23 21:13:04 +01:00
										 |  |  |         if (!data.originalEvent.ctrlKey) { | 
					
						
							|  |  |  |             // keep existing selection only if CTRL key is pressed
 | 
					
						
							|  |  |  |             for (const selectedNode of treeService.getSelectedNodes()) { | 
					
						
							|  |  |  |                 selectedNode.setSelected(false); | 
					
						
							|  |  |  |                 selectedNode.renderTitle(); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-12 15:10:49 +01:00
										 |  |  |         node.setSelected(true); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-12 13:05:09 +01:00
										 |  |  |         // this is for dragging notes into relation map
 | 
					
						
							| 
									
										
										
										
											2018-11-19 11:19:56 +01:00
										 |  |  |         // we allow to drag only one note at a time because it multi-drag conflicts with multiple single drags
 | 
					
						
							|  |  |  |         // in UX and single drag is probably more useful
 | 
					
						
							|  |  |  |         data.dataTransfer.setData("text", JSON.stringify({ | 
					
						
							|  |  |  |             noteId: node.data.noteId, | 
					
						
							|  |  |  |             title: node.title | 
					
						
							|  |  |  |         })); | 
					
						
							| 
									
										
										
										
											2018-11-12 13:05:09 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-09 12:06:15 -04:00
										 |  |  |         // This function MUST be defined to enable dragging for the tree.
 | 
					
						
							|  |  |  |         // Return false to cancel dragging of node.
 | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     }, | 
					
						
							| 
									
										
										
										
											2018-12-09 21:18:53 +01:00
										 |  |  |     dragEnter: (node, data) => true, // allow drop on any node
 | 
					
						
							| 
									
										
										
										
											2019-02-23 20:33:27 +01:00
										 |  |  |     dragOver: (node, data) => true, | 
					
						
							| 
									
										
										
										
											2017-10-09 18:53:11 -04:00
										 |  |  |     dragDrop: (node, data) => { | 
					
						
							| 
									
										
										
										
											2019-02-23 20:33:27 +01:00
										 |  |  |         const dataTransfer = data.dataTransfer; | 
					
						
							| 
									
										
										
										
											2017-09-09 12:06:15 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-23 20:33:27 +01:00
										 |  |  |         if (dataTransfer && dataTransfer.files && dataTransfer.files.length > 0) { | 
					
						
							|  |  |  |             fileService.uploadFiles(node.data.noteId, dataTransfer.files); | 
					
						
							| 
									
										
										
										
											2017-09-09 12:06:15 -04:00
										 |  |  |         } | 
					
						
							|  |  |  |         else { | 
					
						
							| 
									
										
										
										
											2019-02-23 20:33:27 +01:00
										 |  |  |             // This function MUST be defined to enable dropping of items on the tree.
 | 
					
						
							|  |  |  |             // data.hitMode is 'before', 'after', or 'over'.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             const selectedNodes = treeService.getSelectedNodes(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if (data.hitMode === "before") { | 
					
						
							|  |  |  |                 treeChangesService.moveBeforeNode(selectedNodes, node); | 
					
						
							|  |  |  |             } else if (data.hitMode === "after") { | 
					
						
							|  |  |  |                 treeChangesService.moveAfterNode(selectedNodes, node); | 
					
						
							|  |  |  |             } else if (data.hitMode === "over") { | 
					
						
							|  |  |  |                 treeChangesService.moveToNode(selectedNodes, node); | 
					
						
							|  |  |  |             } else { | 
					
						
							|  |  |  |                 throw new Error("Unknown hitMode=" + data.hitMode); | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2017-09-09 12:06:15 -04:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2018-03-25 11:09:17 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | export default dragAndDropSetup; |