SDNR UI module not showing under some parent module issue fix 17/132017/4
authorProjit Roy <projitr@aarnanetworks.com>
Fri, 4 Nov 2022 22:28:28 +0000 (03:58 +0530)
committerDan Timoney <dtimoney@att.com>
Sat, 12 Nov 2022 20:36:57 +0000 (20:36 +0000)
Issue-ID: CCSDK-3788
Signed-off-by: Projit Roy <projitr@aarnanetworks.com>
Change-Id: I350a6341687a756ba0faa33e3848316826a1ff1b

sdnr/wt/odlux/apps/configurationApp/src/models/yang.ts
sdnr/wt/odlux/apps/configurationApp/src/yang/yangParser.ts

index 10f538c..79704ae 100644 (file)
@@ -67,4 +67,5 @@ export type Module = {
   groupings: { [group: string]: ViewSpecification };
   views: { [view: string]: ViewSpecification };
   elements: { [view: string]: ViewElement };
+  executionOrder?: number;
 }
\ No newline at end of file
index 965935a..ee874c8 100644 (file)
@@ -467,8 +467,23 @@ export class YangParser {
       }
     });
 
+    /**
+     * This is to fix the issue for sequential execution of modules based on their child and parent relationship
+     * We are sorting the module object based on their augment status
+     */
+      Object.keys(this.modules)
+      .map(elem => {
+          if(this.modules[elem].augments && Object.keys(this.modules[elem].augments).length > 0) {
+              const {augments, ...rest} = this.modules[elem];
+              const partsOfKeys = Object.keys(augments).map((key) => (key.split("/").length - 1))
+              this.modules[elem].executionOrder= Math.max(...partsOfKeys)
+          } else {
+            this.modules[elem].executionOrder=0;
+          }
+      })
+
     // process all augmentations / sort by namespace changes to ensure proper order 
-    Object.keys(this.modules).forEach(modKey => {
+    Object.keys(this.modules).sort((a, b) => this.modules[a].executionOrder! - this.modules[b].executionOrder!).forEach(modKey => {
       const module = this.modules[modKey];
       const augmentKeysWithCounter = Object.keys(module.augments).map((key) => {
         const pathParts = splitVPath(key, /(?:(?:([^\/\:]+):)?([^\/]+))/g);  // 1 = opt: namespace / 2 = property