From: Jason Etheridge Date: Mon, 15 May 2023 06:47:18 +0000 (-0400) Subject: copyNodes while preserving relative positions of selected source nodes X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=886d19d1bb89f9186b9e594d13d14b92dbdc86b6;p=working%2FEvergreen.git copyNodes while preserving relative positions of selected source nodes Signed-off-by: Jason Etheridge --- diff --git a/Open-ILS/src/eg2/src/app/staff/admin/server/custom-org-unit-trees.component.ts b/Open-ILS/src/eg2/src/app/staff/admin/server/custom-org-unit-trees.component.ts index b2bba4137a..3198fac082 100644 --- a/Open-ILS/src/eg2/src/app/staff/admin/server/custom-org-unit-trees.component.ts +++ b/Open-ILS/src/eg2/src/app/staff/admin/server/custom-org-unit-trees.component.ts @@ -217,18 +217,27 @@ export class CustomOrgUnitTreesComponent implements OnInit { } copyNodes() { - const sourceNodes = this.tree.selectedNodes(); - const targetNode = this.custom_tree.selectedNode(); - this.copyNodesDisabled = !this.isCopyNodesAllowed(); - if (this.copyNodesDisabled) { - return; - } - for (let sourceNode of sourceNodes) { - // Create a deep copy of sourceNode to prevent reference issues - let newNode = JSON.parse(JSON.stringify(sourceNode)); - newNode.children = []; - targetNode.children.push(newNode); - } + const sourceNodes = this.tree.selectedNodes(); + const targetNode = this.custom_tree.selectedNode(); + this.copyNodesDisabled = !this.isCopyNodesAllowed(); + if (this.copyNodesDisabled) { + return; + } + + const copySelectedNodes = (sourceNode: TreeNode, targetNode: TreeNode) => { + if (sourceNodes.includes(sourceNode)) { + let newNode = sourceNode.clone(); + newNode.children = []; + targetNode.children.push(newNode); + targetNode = newNode; + } + + for (let childNode of sourceNode.children) { + copySelectedNodes(childNode, targetNode); + } + } + + copySelectedNodes(this.tree.rootNode, targetNode); } isDeleteNodesAllowed(): boolean {