diff --git a/src/app/components/tree/tree.ts b/src/app/components/tree/tree.ts
index d313b9c4384..3e659142115 100755
--- a/src/app/components/tree/tree.ts
+++ b/src/app/components/tree/tree.ts
@@ -511,7 +511,7 @@ export class UITreeNode implements OnInit {
selector: 'p-tree',
template: `
@@ -898,6 +898,27 @@ export class Tree implements OnInit,AfterContentInit,OnChanges,OnDestroy,Blockab
return index;
}
+ processPointDrop(event, dragNodeIndex: number) {
+ let newNodeList = event.dropNode.parent ? event.dropNode.parent.children : this.value;
+ event.dragNodeSubNodes.splice(event.dragNodeIndex, 1);
+ let dropIndex = dragNodeIndex;
+
+ if (event.position < 0) {
+ dropIndex = (event.dragNodeSubNodes === newNodeList) ? ((event.dragNodeIndex > event.index) ? event.index : event.index - 1) : event.index;
+ newNodeList.splice(dropIndex, 0, event.dragNode);
+ }
+ else {
+ dropIndex = newNodeList.length;
+ newNodeList.push(event.dragNode);
+ }
+
+ this.dragDropService.stopDrag({
+ node: event.dragNode,
+ subNodes: event.dropNode.parent ? event.dropNode.parent.children : this.value,
+ index: event.dragNodeIndex
+ });
+ }
+
syncNodeOption(node, parentNodes, option, value?: any) {
// to synchronize the node option between the filtered nodes and the original nodes(this.value)
const _node = this.hasFilteredNodes() ? this.getNodeWithKey(node.key, parentNodes) : null;
@@ -1002,7 +1023,7 @@ export class Tree implements OnInit,AfterContentInit,OnChanges,OnDestroy,Blockab
return this.selectionMode && this.selectionMode == 'checkbox';
}
- isNodeLeaf(node) {
+ isNodeLeaf(node: TreeNode) {
return node.leaf == false ? false : !(node.children && node.children.length);
}
@@ -1033,12 +1054,17 @@ export class Tree implements OnInit,AfterContentInit,OnChanges,OnDestroy,Blockab
this.dragNodeSubNodes.splice(dragNodeIndex, 1);
this.value = this.value||[];
+ let dropParams = {...this.createDropNodeEventMetadata(null)};
+
if (this.value.length === 0) {
this.onNodeDrop.emit({
originalEvent: event,
dragNode: dragNode,
dropNode: null,
- index: dragNodeIndex
+ index: dragNodeIndex,
+ accept: () => {
+ this.processPointDrop(dropParams, dragNodeIndex);
+ }
})
}
@@ -1051,6 +1077,15 @@ export class Tree implements OnInit,AfterContentInit,OnChanges,OnDestroy,Blockab
}
}
+ createDropNodeEventMetadata(dropNode) {
+ return {
+ dragNode: this.dragNode,
+ dragNodeIndex: this.dragNodeIndex,
+ dragNodeSubNodes: this.dragNodeSubNodes,
+ dropNode: dropNode
+ };
+ }
+
onDragEnter(event) {
if (this.droppableNodes && this.allowDrop(this.dragNode, null, this.dragNodeScope)) {
this.dragHover = true;