move node up and down
authorJason Etheridge <phasefx@gmail.com>
Mon, 15 May 2023 07:20:21 +0000 (03:20 -0400)
committerJason Etheridge <phasefx@gmail.com>
Thu, 25 May 2023 16:45:32 +0000 (12:45 -0400)
Signed-off-by: Jason Etheridge <phasefx@gmail.com>
Open-ILS/src/eg2/src/app/staff/admin/server/custom-org-unit-trees.component.html
Open-ILS/src/eg2/src/app/staff/admin/server/custom-org-unit-trees.component.ts

index 30e5f66..a543cef 100644 (file)
@@ -41,6 +41,8 @@
         (nodeClicked)="custom_nodeClicked($event)"
         (nodeChecked)="custon_nodeChecked($event)">
         <button [disabled]="deleteNodesDisabled" (click)="deleteNodes()" i18n>Delete Selected Nodes</button>
+        <button [disabled]="moveNodeUpDisabled" (click)="moveNodeUp()" i18n>Move Node Up</button>
+        <button [disabled]="moveNodeDownDisabled" (click)="moveNodeDown()" i18n>Move Node Down</button>
       </eg-tree>
     </div>
   </div>
index 9abcc74..8077096 100644 (file)
@@ -24,6 +24,8 @@ export class CustomOrgUnitTreesComponent implements OnInit {
     orgUnitTab: string;
     copyNodesDisabled = true;
     deleteNodesDisabled = true;
+    moveNodeUpDisabled = true;
+    moveNodeDownDisabled = true;
 
     @ViewChild('editString', { static: true }) editString: StringComponent;
     @ViewChild('errorString', { static: true }) errorString: StringComponent;
@@ -172,6 +174,8 @@ export class CustomOrgUnitTreesComponent implements OnInit {
         console.log('custom: nodeClicked',typeof $event);
         this.copyNodesDisabled = !this.isCopyNodesAllowed();
         this.deleteNodesDisabled = !this.isDeleteNodesAllowed();
+        this.moveNodeUpDisabled = !this.isMoveNodeUpAllowed();
+        this.moveNodeDownDisabled = !this.isMoveNodeDownAllowed();
     }
 
     custom_nodeClicked($event: any) {
@@ -179,6 +183,8 @@ export class CustomOrgUnitTreesComponent implements OnInit {
         console.log('custom: custom_nodeClicked',typeof $event);
         this.copyNodesDisabled = !this.isCopyNodesAllowed();
         this.deleteNodesDisabled = !this.isDeleteNodesAllowed();
+        this.moveNodeUpDisabled = !this.isMoveNodeUpAllowed();
+        this.moveNodeDownDisabled = !this.isMoveNodeDownAllowed();
     }
 
     nodeChecked($event: any) {
@@ -238,6 +244,8 @@ export class CustomOrgUnitTreesComponent implements OnInit {
         }
 
         copySelectedNodes(this.tree.rootNode, targetNode);
+        this.custom_tree.nodeList(); // re-index
+        this.copyNodesDisabled = !this.isCopyNodesAllowed();
     }
 
     isDeleteNodesAllowed(): boolean {
@@ -268,7 +276,93 @@ export class CustomOrgUnitTreesComponent implements OnInit {
                 this.custom_tree.removeNode(targetNode);
             }
         }
+        this.custom_tree.nodeList(); // re-index
         this.deleteNodesDisabled = !this.isDeleteNodesAllowed();
     }
+
+    isMoveNodeUpAllowed(): boolean {
+        const targetNodes = this.custom_tree.selectedNodes();
+        if (targetNodes.length !== 1) {
+            console.log('isMoveNodeUpAllowed: need exactly 1 targetNode selected', false);
+            return false;
+        }
+        const targetNode = targetNodes[0];
+        let parentNode = this.custom_tree.findParentNode(targetNode);
+        if (parentNode) {
+            let index = parentNode.children.indexOf(targetNode);
+            if (index === 0) {
+                console.log('isMoveNodeUpAllowed: cannot move farther', false);
+                return false;
+            }
+        }
+        console.log('isMoveNodeUpAllowed', true);
+        return true;
+    }
+
+    moveNodeUp() {
+        this.moveNodeUpDisabled = !this.isMoveNodeUpAllowed();
+        this.moveNodeDownDisabled = !this.isMoveNodeDownAllowed();
+        const selectedNode = this.custom_tree.selectedNode();
+        if (this.moveNodeUpDisabled) {
+            return;
+        }
+        let parentNode = this.custom_tree.findParentNode(selectedNode);
+        if (parentNode) {
+            let index = parentNode.children.indexOf(selectedNode);
+            if (index > 0) {
+                // Swap the selected node with its previous sibling.
+                let temp = parentNode.children[index - 1];
+                parentNode.children[index - 1] = selectedNode;
+                parentNode.children[index] = temp;
+                this.custom_tree.nodeList(); // re-index
+                this.moveNodeUpDisabled = !this.isMoveNodeUpAllowed();
+                this.moveNodeDownDisabled = !this.isMoveNodeDownAllowed();
+            }
+        }
+    }
+
+    isMoveNodeDownAllowed(): boolean {
+        const targetNodes = this.custom_tree.selectedNodes();
+        if (targetNodes.length !== 1) {
+            console.log('isMoveNodeDownAllowed: need exactly 1 targetNode selected', false);
+            return false;
+        }
+        const targetNode = targetNodes[0];
+        let parentNode = this.custom_tree.findParentNode(targetNode);
+        if (parentNode) {
+            let index = parentNode.children.indexOf(targetNode);
+            if (index < parentNode.children.length - 1) {
+                // great
+            } else {
+                console.log('isMoveNodeDownAllowed: cannot move farther', false);
+                return false;
+            }
+        }
+        console.log('isMoveNodeDownAllowed', true);
+        return true;
+    }
+
+    moveNodeDown() {
+        this.moveNodeDownDisabled = !this.isMoveNodeDownAllowed();
+        this.moveNodeUpDisabled = !this.isMoveNodeUpAllowed();
+        const selectedNode = this.custom_tree.selectedNode();
+        if (this.moveNodeDownDisabled) {
+            return;
+        }
+        let parentNode = this.custom_tree.findParentNode(selectedNode);
+        if (parentNode) {
+            let index = parentNode.children.indexOf(selectedNode);
+            if (index < parentNode.children.length - 1) {
+                // Swap the selected node with its next sibling.
+                let temp = parentNode.children[index + 1];
+                parentNode.children[index + 1] = selectedNode;
+                parentNode.children[index] = temp;
+                this.custom_tree.nodeList(); // re-index
+                this.moveNodeDownDisabled = !this.isMoveNodeDownAllowed();
+                this.moveNodeUpDisabled = !this.isMoveNodeUpAllowed();
+            }
+        }
+    }
+
 }