From: Bill Erickson Date: Fri, 19 Apr 2019 18:47:21 +0000 (-0400) Subject: server templates: IdlServer.toHash() X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=3a335d2ced26899200af2a6e22981e80ee9d3439;p=working%2FEvergreen.git server templates: IdlServer.toHash() Signed-off-by: Bill Erickson --- diff --git a/Open-ILS/src/eg2/src/app/core/idl.service.ts b/Open-ILS/src/eg2/src/app/core/idl.service.ts index 56b8b90e1f..468ae2dbe3 100644 --- a/Open-ILS/src/eg2/src/app/core/idl.service.ts +++ b/Open-ILS/src/eg2/src/app/core/idl.service.ts @@ -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; + } }