Skip to content

Commit

Permalink
[p-tree] Include accept() with initial onDrop's event
Browse files Browse the repository at this point in the history
Untested proposal towards resolving primefaces#10093
  • Loading branch information
Leif Segen committed Apr 12, 2021
1 parent 2b339a1 commit 1e5c115
Showing 1 changed file with 38 additions and 3 deletions.
41 changes: 38 additions & 3 deletions src/app/components/tree/tree.ts
Original file line number Diff line number Diff line change
Expand Up @@ -511,7 +511,7 @@ export class UITreeNode implements OnInit {
selector: 'p-tree',
template: `
<div [ngClass]="{'p-tree p-component':true,'p-tree-selectable':selectionMode,
'p-treenode-dragover':dragHover,'p-tree-loading': loading, 'p-tree-flex-scrollable': scrollHeight === 'flex'}"
'p-treenode-dragover':dragHover,'p-tree-loading': loading, 'p-tree-flex-scrollable': scrollHeight === 'flex'}"
[ngStyle]="style" [class]="styleClass" *ngIf="!horizontal"
(drop)="onDrop($event)" (dragover)="onDragOver($event)" (dragenter)="onDragEnter($event)" (dragleave)="onDragLeave($event)">
<div class="p-tree-loading-overlay p-component-overlay" *ngIf="loading">
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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);
}

Expand Down Expand Up @@ -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);
}
})
}

Expand All @@ -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;
Expand Down

0 comments on commit 1e5c115

Please sign in to comment.