CirclonGroup / angular-tree-component

A simple yet powerful tree component for Angular (>=2)
https://angular2-tree.readme.io/docs
MIT License
1.09k stars 488 forks source link

How to swap two nodes? #916

Closed rootspain closed 3 years ago

rootspain commented 3 years ago

I want to override drop function.

treeOptions:ITreeOptions = { actionMapping: { drop: (tree:TreeModel, node:TreeNode, $event:any, {from, to}) => { if (to.dropOnNode==undefined) { TREE_ACTIONS.MOVE_NODE(tree,node,$event,{from,to}); } else { let tmpFrom = tree.getNodeBy((x: TreeNode) => { return x.index === from.index; }); let tmpTo = tree.getNodeBy((x: TreeNode) => { return x.index === node.index; }); let tmp = tmpFrom.data; tmpFrom.data = tmpTo.data; tmpTo.data = tmp; / also not work let idx = node.index; node.index = from.index; from.index = idx; / tree.update(); } } }

rootspain commented 3 years ago

I solve it by swaping in the source dataset;

        let fromIdx = this.treeItems.findIndex(x=>x.id==from.data.id);
        let toIdx = this.treeItems.findIndex(x=>x.id==node.data.id);
        let tmp = this.treeItems[fromIdx];
        this.treeItems[fromIdx] = this.treeItems[toIdx];
        this.treeItems[toIdx] = tmp;
        tree.update();