server templates: IdlServer.toHash()
authorBill Erickson <berickxx@gmail.com>
Fri, 19 Apr 2019 18:47:21 +0000 (14:47 -0400)
committerBill Erickson <berickxx@gmail.com>
Fri, 19 Apr 2019 18:47:21 +0000 (14:47 -0400)
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Open-ILS/src/eg2/src/app/core/idl.service.ts

index 56b8b90..468ae2d 100644 (file)
@@ -156,5 +156,45 @@ export class IdlService {
         }
         return null;
     }
+
+    toHash(obj: any, flatten?: boolean): any {
+
+        if (typeof obj !== 'object' || obj === null) {
+            return obj;
+        }
+
+        if (Array.isArray(obj)) {
+            return obj.map(item => this.toHash(item));
+        }
+
+        const fieldNames = obj._isfieldmapper ? 
+            Object.keys(this.classes[obj.classname].field_map) :
+            Object.keys(obj);
+
+        const hash: any = {};
+        fieldNames.forEach(field => {
+
+            var val = this.toHash(
+                typeof obj[field] === 'function' ?  obj[field]() : obj[field], 
+                flatten
+            );
+
+            if (val === undefined) { return; }
+
+            if (flatten && val !== null && 
+                typeof val === 'object' && !Array.isArray(val)) {
+
+                Object.keys(val).forEach(key => {
+                    let fname = field + '.' + key;
+                    hash[fname] = val[key];
+                });
+
+            } else {
+                hash[field] = val;
+            }
+        });
+
+        return hash;
+    }
 }