@clr/angular
Version:
Angular components for Clarity
37 lines • 3.98 kB
JavaScript
/*
* Copyright (c) 2016-2023 VMware, Inc. All Rights Reserved.
* This software is released under MIT license.
* The full license information can be found in LICENSE in the root directory of this project.
*/
/**
* Generic accessor for deep object properties
* that can be specified as simple dot-separated strings.
*/
export class NestedProperty {
constructor(prop) {
this.prop = prop;
if (prop.indexOf('.') >= 0) {
this.splitProp = prop.split('.');
}
}
// Safe getter for a deep object property, will not throw an error but return
// undefined if one of the intermediate properties is null or undefined.
getPropValue(item) {
if (this.splitProp) {
let value = item;
for (const nestedProp of this.splitProp) {
if (value === null ||
typeof value === 'undefined' ||
typeof value[nestedProp] === 'undefined') {
return undefined;
}
value = value[nestedProp];
}
return value;
}
else {
return item[this.prop];
}
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVzdGVkLXByb3BlcnR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvZGF0YS9kYXRhZ3JpZC9idWlsdC1pbi9uZXN0ZWQtcHJvcGVydHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVIOzs7R0FHRztBQUNILE1BQU0sT0FBTyxjQUFjO0lBR3pCLFlBQW9CLElBQVk7UUFBWixTQUFJLEdBQUosSUFBSSxDQUFRO1FBQzlCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2xDO0lBQ0gsQ0FBQztJQUVELDZFQUE2RTtJQUM3RSx3RUFBd0U7SUFDeEUsWUFBWSxDQUFDLElBQU87UUFDbEIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztZQUNqQixLQUFLLE1BQU0sVUFBVSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ3ZDLElBQ0UsS0FBSyxLQUFLLElBQUk7b0JBQ2QsT0FBTyxLQUFLLEtBQUssV0FBVztvQkFDNUIsT0FBUSxLQUE2QixDQUFDLFVBQVUsQ0FBQyxLQUFLLFdBQVcsRUFDakU7b0JBQ0EsT0FBTyxTQUFTLENBQUM7aUJBQ2xCO2dCQUNELEtBQUssR0FBSSxLQUE2QixDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ3BEO1lBQ0QsT0FBTyxLQUFLLENBQUM7U0FDZDthQUFNO1lBQ0wsT0FBUSxJQUE0QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNqRDtJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMyBWTXdhcmUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UuXG4gKiBUaGUgZnVsbCBsaWNlbnNlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbiBMSUNFTlNFIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHByb2plY3QuXG4gKi9cblxuLyoqXG4gKiBHZW5lcmljIGFjY2Vzc29yIGZvciBkZWVwIG9iamVjdCBwcm9wZXJ0aWVzXG4gKiB0aGF0IGNhbiBiZSBzcGVjaWZpZWQgYXMgc2ltcGxlIGRvdC1zZXBhcmF0ZWQgc3RyaW5ncy5cbiAqL1xuZXhwb3J0IGNsYXNzIE5lc3RlZFByb3BlcnR5PFQgPSBhbnk+IHtcbiAgcHJpdmF0ZSBzcGxpdFByb3A6IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcHJvcDogc3RyaW5nKSB7XG4gICAgaWYgKHByb3AuaW5kZXhPZignLicpID49IDApIHtcbiAgICAgIHRoaXMuc3BsaXRQcm9wID0gcHJvcC5zcGxpdCgnLicpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNhZmUgZ2V0dGVyIGZvciBhIGRlZXAgb2JqZWN0IHByb3BlcnR5LCB3aWxsIG5vdCB0aHJvdyBhbiBlcnJvciBidXQgcmV0dXJuXG4gIC8vIHVuZGVmaW5lZCBpZiBvbmUgb2YgdGhlIGludGVybWVkaWF0ZSBwcm9wZXJ0aWVzIGlzIG51bGwgb3IgdW5kZWZpbmVkLlxuICBnZXRQcm9wVmFsdWUoaXRlbTogVCk6IGFueSB7XG4gICAgaWYgKHRoaXMuc3BsaXRQcm9wKSB7XG4gICAgICBsZXQgdmFsdWUgPSBpdGVtO1xuICAgICAgZm9yIChjb25zdCBuZXN0ZWRQcm9wIG9mIHRoaXMuc3BsaXRQcm9wKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB2YWx1ZSA9PT0gbnVsbCB8fFxuICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICAgICAgICB0eXBlb2YgKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW25lc3RlZFByb3BdID09PSAndW5kZWZpbmVkJ1xuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHZhbHVlID0gKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW25lc3RlZFByb3BdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gKGl0ZW0gYXMgUmVjb3JkPHN0cmluZywgYW55PilbdGhpcy5wcm9wXTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==