@huntsman-cancer-institute/dashboard 17.2.6 → 17.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -224,4 +224,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
224
224
  type: HostBinding,
225
225
  args: ["class"]
226
226
  }] } });
227
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWNvbmZpZ3VyZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXNoYm9hcmQvc3JjL2NvbmZpZ3VyZS93aWRnZXQtY29uZmlndXJlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE9BQU8sRUFBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUloRSxPQUFPLEVBQTRELE1BQU0sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2pHLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLCtCQUErQixDQUFDOzs7Ozs7O0FBRy9EOztHQUVHO0FBK0RILE1BQU0sT0FBTyx3QkFBd0I7SUFlbkMsWUFBb0IsZ0JBQWtDO1FBQWxDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFiaEMsY0FBUyxHQUFXLGVBQWUsQ0FBQztRQUluRCx3QkFBbUIsR0FBK0IsRUFBRSxDQUFDO0lBU0gsQ0FBQztJQUUxRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtDQUFrQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLGNBQThCLEVBQUUsRUFBRTtZQUNwRyxJQUFJLFNBQVMsRUFBRSxFQUFFLENBQUM7Z0JBQ2hCLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0VBQXdFLENBQUMsQ0FBQztnQkFDeEYsT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNoQyxDQUFDO1lBRUQsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUNwQixJQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUM7Z0JBQ2pDLElBQUksQ0FBQywwQkFBMEIsR0FBRyxTQUFTLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO2dCQUU3QixJQUFJLENB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aWdodCAoYykgMjAxNiBIdW50c21hbiBDYW5jZXIgSW5zdGl0dXRlIGF0IHRoZSBVbml2ZXJzaXR5IG9mIFV0YWgsIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnlcclxuICovXHJcbmltcG9ydCB7Q29tcG9uZW50LCBIb3N0QmluZGluZywgaXNEZXZNb2RlfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gXCJyeGpzXCI7XHJcblxyXG5pbXBvcnQge1dpZGdldEF0dHJpYnV0ZSwgV2lkZ2V0QXR0cmlidXRlQ29udGFpbmVyLCBXaWRnZXRJbnN0YW5jZSwgV2lkZ2V0fSBmcm9tIFwiLi4vbW9kZWwvbW9kZWxcIjtcclxuaW1wb3J0IHtEYXNoYm9hcmRTZXJ2aWNlfSBmcm9tIFwiLi4vc2VydmljZXMvZGFzaGJvYXJkLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtXaWRnZXRDb21wb25lbnR9IGZyb20gXCIuLi93aWRnZXQvd2lkZ2V0LmNvbXBvbmVudFwiO1xyXG5cclxuLyoqXHJcbiAqIEBzaW5jZSAxLjAuMFxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwid2lkZ2V0LWNvbmZpZ3VyZVwiLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2UgJiYgc2VsZWN0ZWRBdHRyaWJ1dGVDb250YWluZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImF0dHJpYnV0ZS1jb250YWluZXItaGVhZGVyLXBhcmVudFwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtYXR0cmlidXRlQ29udGFpbmVyIGxldC1pPVwiaW5kZXhcIiBbbmdGb3JPZl09XCJhdHRyaWJ1dGVDb250YWluZXJzIHwgaGFzRWRpdGFibGVBdHRyaWJ1dGVzXCI+XHJcbiAgICAgICAgICA8ZGl2IChjbGljayk9XCJzZWxlY3RlZEF0dHJpYnV0ZUNvbnRhaW5lciA9IGF0dHJpYnV0ZUNvbnRhaW5lcjsgaVNlbGVjdGVkID0gaTtcIlxyXG4gICAgICAgICAgICAgICBjbGFzcz1cImF0dHJpYnV0ZS1jb250YWluZXItaGVhZGVyXCJcclxuICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic2VsZWN0ZWRBdHRyaWJ1dGVDb250YWluZXIubmFtZSA9PT0gYXR0cmlidXRlQ29udGFpbmVyLm5hbWUgPyAnc2VsZWN0ZWQnIDogJydcIlxyXG4gICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJhdHRyaWJ1dGVDb250YWluZXIubmFtZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNlbGVjdGVkQXR0cmlidXRlQ29udGFpbmVyLm5hbWUgPT09IGF0dHJpYnV0ZUNvbnRhaW5lci5uYW1lXCI+e3tzZWxlY3RlZEF0dHJpYnV0ZUNvbnRhaW5lci5uYW1lfX08L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBmbGV4LWdyb3ctMSBhdHRyaWJ1dGUtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBmbGV4LWdyb3ctMSB5LWF1dG9cIj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtYXR0cmlidXRlIFtuZ0Zvck9mXT1cInNlbGVjdGVkQXR0cmlidXRlQ29udGFpbmVyLmF0dHJpYnV0ZXNcIj5cclxuICAgICAgICAgICAgPHdpZGdldC1hdHRyaWJ1dGUgW2F0dHJpYnV0ZV09XCJhdHRyaWJ1dGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRXaWRnZXRBdHRyaWJ1dGVWYWx1ZVNldF09XCJ3aWRnZXRJbnN0YW5jZS5hdHRyaWJ1dGVWYWx1ZVNldC5pZFdpZGdldEF0dHJpYnV0ZVZhbHVlU2V0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3dpZGdldENvbXBvbmVudF09XCJ3aWRnZXRDb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImF0dHJpYnV0ZS51c2VyRWRpdGFibGVcIj48L3dpZGdldC1hdHRyaWJ1dGU+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiAqbmdJZj1cImF0dHJpYnV0ZUNvbnRhaW5lcnMubGVuZ3RoID09PSAwXCI+XHJcbiAgICAgICAgVGhlcmUgYXJlIG5vIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhpcyB3aWRnZXQuXHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgYCxcclxuICBzdHlsZXM6IFtgXHJcblxyXG4gICAgLmF0dHJpYnV0ZS1jb250YWluZXItaGVhZGVyLXBhcmVudCB7XHJcbiAgICAgIGJvcmRlci1ib3R0b206IGJsYWNrIDJweCBzb2xpZDtcclxuICAgICAgcGFkZGluZy1ib3R0b206IDVweDtcclxuICAgICAgbWFyZ2luLWJvdHRvbTogNXB4O1xyXG4gICAgfVxyXG5cclxuICAgIC5hdHRyaWJ1dGUtY29udGFpbmVyLWhlYWRlciB7XHJcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgICAgd2lkdGg6IDM1cHg7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICM2NmFhZmY7XHJcbiAgICAgIGJvcmRlcjogYmxhY2sgMXB4IHNvbGlkO1xyXG4gICAgICBib3JkZXItcmFkaXVzOiAyMHB4O1xyXG4gICAgICBwYWRkaW5nOiA0cHg7XHJcbiAgICAgIGZvbnQtc2l6ZTogbGFyZ2U7XHJcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgIG1pbi1oZWlnaHQ6IDM1cHg7XHJcbiAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XHJcbiAgICB9XHJcblxyXG4gICAgLmF0dHJpYnV0ZS1jb250YWluZXItaGVhZGVyLnNlbGVjdGVkIHtcclxuICAgICAgd2lkdGg6IDQ1JTtcclxuICAgIH1cclxuXHJcbiAgICAuYXR0cmlidXRlLWNvbnRhaW5lciB7XHJcbiAgICAgIG92ZXJmbG93LXk6IGF1dG87XHJcbiAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjtcclxuICAgIH1cclxuXHJcbiAgYF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFdpZGdldENvbmZpZ3VyZUNvbXBvbmVudCB7XHJcblxyXG4gIEBIb3N0QmluZGluZyhcImNsYXNzXCIpIGNsYXNzTGlzdDogc3RyaW5nID0gXCJvdXRsZXQtY29sdW1uXCI7XHJcblxyXG4gIHB1YmxpYyBpU2VsZWN0ZWQ6IG51bWJlcjtcclxuICBwdWJsaWMgc2VsZWN0ZWRBdHRyaWJ1dGVDb250YWluZXI6IFdpZGdldEF0dHJpYnV0ZUNvbnRhaW5lcjtcclxuICBwdWJsaWMgYXR0cmlidXRlQ29udGFpbmVyczogV2lkZ2V0QXR0cmlidXRlQ29udGFpbmVyW10gPSBbXTtcclxuXHJcbiAgIHdpZGdldEluc3RhbmNlOiBXaWRnZXRJbnN0YW5jZTtcclxuICAgd2lkZ2V0Q29tcG9uZW50OiBXaWRnZXRDb21wb25lbnQ7XHJcbiAgIGF0dHJpYnV0ZUNvbnRhaW5lck1hcDogTWFwPHN0cmluZywgV2lkZ2V0QXR0cmlidXRlQ29udGFpbmVyPjtcclxuXHJcbiAgIHdpZGdldENvbXBvbmVudFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gICBhdHRyaWJ1dGVDb250YWluZXJzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGFzaGJvYXJkU2VydmljZTogRGFzaGJvYXJkU2VydmljZSkge31cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuY29uZmlndXJhdGlvbldpZGdldEluc3RhbmNlU3ViamVjdC5zdWJzY3JpYmUoKHdpZGdldEluc3RhbmNlOiBXaWRnZXRJbnN0YW5jZSkgPT4ge1xyXG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICBjb25zb2xlLmRlYnVnKFwiV2lkZ2V0Q29uZmlndXJlQ29tcG9uZW50LmNvbmZpZ3VyYXRpb25XaWRnZXRJbnN0YW5jZVN1YmplY3Quc3Vic2NyaWJlOlwiKTtcclxuICAgICAgICBjb25zb2xlLmRlYnVnKHdpZGdldEluc3RhbmNlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCF3aWRnZXRJbnN0YW5jZSkge1xyXG4gICAgICAgIHRoaXMud2lkZ2V0SW5zdGFuY2UgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy53aWRnZXRDb21wb25lbnQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEF0dHJpYnV0ZUNvbnRhaW5lciA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLmlTZWxlY3RlZCA9IHVuZGVmaW5lZDtcclxuXHJcblx0XHQgICAgdGhpcy51bnN1YnNjcmliZSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMud2lkZ2V0SW5zdGFuY2UgPSB3aWRnZXRJbnN0YW5jZTtcclxuXHJcbiAgICAgICAgdGhpcy53aWRnZXRDb21wb25lbnRTdWJzY3JpcHRpb24gPSB0aGlzLmRhc2hib2FyZFNlcnZpY2UuZ2V0V2lkZ2V0Q29tcG9uZW50U3ViamVjdCh3aWRnZXRJbnN0YW5jZS5pZFdpZGdldEluc3RhbmNlKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh3aWRnZXRDb21wb25lbnQ6IFdpZGdldENvbXBvbmVudCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJXaWRnZXRDb25maWd1cmVDb21wb25lbnQuZ2V0V2lkZ2V0Q29tcG9uZW50U3ViamVjdC5zdWJzY3JpYmVcIik7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcod2lkZ2V0Q29tcG9uZW50KTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5hdHRyaWJ1dGVDb250YWluZXJzU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlQ29udGFpbmVyc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMud2lkZ2V0Q29tcG9uZW50ID0gd2lkZ2V0Q29tcG9uZW50O1xyXG4gICAgICAgICAgaWYgKHRoaXMud2lkZ2V0Q29tcG9uZW50KSB7XHJcblx0XHRcdCAgICAgIHRoaXMud2lkZ2V0Q29tcG9uZW50LmNvbmZpZyh1bmRlZmluZWQpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVDb250YWluZXJzU3Vic2NyaXB0aW9uID0gdGhpcy53aWRnZXRDb21wb25lbnQuYXR0cmlidXRlQ29udGFpbmVycy5zdWJzY3JpYmUoKGF0dHJpYnV0ZUNvbnRhaW5lcnM6IE1hcDxzdHJpbmcsIFdpZGdldEF0dHJpYnV0ZUNvbnRhaW5lcj4pID0+IHtcclxuICAgICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJXaWRnZXRDb25maWd1cmVDb21wb25lbnQuYXR0cmlidXRlQ29udGFpbmVyc1N1YnNjcmlwdGlvblwiKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoYXR0cmlidXRlQ29udGFpbmVycyk7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlQ29udGFpbmVycykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVDb250YWluZXJNYXAgPSBXaWRnZXQubWVyZ2UoYXR0cmlidXRlQ29udGFpbmVycywgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmdldENvbW1vbkF0dHJpYnV0ZXMoKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlQXR0cmlidXRlQ29udGFpbmVycygpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZUNvbnRhaW5lck1hcCA9IHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXRDb21tb25BdHRyaWJ1dGVzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlQXR0cmlidXRlQ29udGFpbmVycygpO1xyXG4gICAgICAgICAgICAgIH1cclxuXHRcdFx0ICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICB1bnN1YnNjcmliZSgpIHtcclxuICAgIGlmICh0aGlzLndpZGdldENvbXBvbmVudFN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLndpZGdldENvbXBvbmVudFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYXR0cmlidXRlQ29udGFpbmVyc1N1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLmF0dHJpYnV0ZUNvbnRhaW5lcnNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRob3VnaCBhIG1hcCBpcyB1c2VkIHRvIG92ZXJyaWRlIGF0dHJpYnV0ZXMgZWFzaWx5LCB0cmFuc2ZlciBiYWNrIHRvIGFuIGFycmF5IGZvciBlYXN5IHNvcnRpbmcgYW5kIHRvIG1ha2VcclxuICAgKiB0aGUgbmdGb3IgaGFwcHkuXHJcbiAgICovXHJcbiAgZ2VuZXJhdGVBdHRyaWJ1dGVDb250YWluZXJzKCkge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJXaWRnZXRDb25maWd1cmVDb21wb25lbnQuZ2VuZXJhdGVBdHRyaWJ1dGVDb250YWluZXJzOiBcIiArIHRoaXMuYXR0cmlidXRlQ29udGFpbmVyTWFwLnNpemUpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB0ZW1wQ29udGFpbmVyczogV2lkZ2V0QXR0cmlidXRlQ29udGFpbmVyW10gPSBbXTtcclxuICAgIGZvciAobGV0IGF0dHJpYnV0ZUNvbnRhaW5lciBvZiB0aGlzLmF0dHJpYnV0ZUNvbnRhaW5lck1hcC52YWx1ZXMoKSkge1xyXG4gICAgICBpZiAoYXR0cmlidXRlQ29udGFpbmVyLmhpZGRlbikge1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBhdHRyaWJ1dGVDb250YWluZXIuYXR0cmlidXRlcyA9IFtdO1xyXG4gICAgICBmb3IgKGxldCBhdHRyaWJ1dGUgb2YgYXR0cmlidXRlQ29udGFpbmVyLmF0dHJpYnV0ZU1hcC52YWx1ZXMoKSkge1xyXG4gICAgICAgIC8qaWYgKGF0dHJpYnV0ZS51c2VyRWRpdGFibGUpIHtcclxuICAgICAgICAgIGF0dHJpYnV0ZUNvbnRhaW5lci5hdHRyaWJ1dGVzLnB1c2goYXR0cmlidXRlKTtcclxuICAgICAgICB9Ki9cclxuICAgICAgICBhdHRyaWJ1dGVDb250YWluZXIuYXR0cmlidXRlcy5wdXNoKGF0dHJpYnV0ZSk7XHJcbiAgICAgIH1cclxuICAgICAgYXR0cmlidXRlQ29udGFpbmVyLmF0dHJpYnV0ZXMuc29ydCgoYTogV2lkZ2V0QXR0cmlidXRlLCBiOiBXaWRnZXRBdHRyaWJ1dGUpID0+IHtcclxuICAgICAgICBpZiAoYS5zb3J0T3JkZXIgPCBiLnNvcnRPcmRlcikge1xyXG4gICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYS5zb3J0T3JkZXIgPiBiLnNvcnRPcmRlcikge1xyXG4gICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0ZW1wQ29udGFpbmVycy5wdXNoKGF0dHJpYnV0ZUNvbnRhaW5lcik7XHJcbiAgICB9XHJcblxyXG4gICAgdGVtcENvbnRhaW5lcnMuc29ydCgoYTogV2lkZ2V0QXR0cmlidXRlQ29udGFpbmVyLCBiOiBXaWRnZXRBdHRyaWJ1dGVDb250YWluZXIpID0+IHtcclxuICAgICAgaWYgKGEuc29ydE9yZGVyIDwgYi5zb3J0T3JkZXIpIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgIH0gZWxzZSBpZiAoYS5zb3J0T3JkZXIgPiBiLnNvcnRPcmRlcikge1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5hdHRyaWJ1dGVDb250YWluZXJzLmxlbmd0aCA9PT0gMCB8fCAhdGhpcy53YWNFcXVhbHModGVtcENvbnRhaW5lcnMsIHRoaXMuYXR0cmlidXRlQ29udGFpbmVycykpIHtcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVDb250YWluZXJzID0gdGVtcENvbnRhaW5lcnM7XHJcblxyXG4gICAgICBpZiAodGhpcy5pU2VsZWN0ZWQgJiYgdGhpcy5pU2VsZWN0ZWQgPCB0aGlzLmF0dHJpYnV0ZUNvbnRhaW5lcnMubGVuZ3RoICYmIHRoaXMuc2VsZWN0ZWRBdHRyaWJ1dGVDb250YWluZXIubmFtZSA9PT0gdGhpcy5hdHRyaWJ1dGVDb250YWluZXJzW3RoaXMuaVNlbGVjdGVkXS5uYW1lKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEF0dHJpYnV0ZUNvbnRhaW5lciA9IHRoaXMuYXR0cmlidXRlQ29udGFpbmVyc1t0aGlzLmlTZWxlY3RlZF07XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5hdHRyaWJ1dGVDb250YWluZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQXR0cmlidXRlQ29udGFpbmVyID0gdGhpcy5hdHRyaWJ1dGVDb250YWluZXJzWzBdO1xyXG4gICAgICAgIHRoaXMuaVNlbGVjdGVkID0gMDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQXR0cmlidXRlQ29udGFpbmVyID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuaVNlbGVjdGVkID0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5zZXRDb25maWd1cmF0aW9uQXR0cmlidXRlQ29udGFpbmVycyh0aGlzLmF0dHJpYnV0ZUNvbnRhaW5lcnMpO1xyXG5cclxuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgY29uc29sZS5kZWJ1Zyh0aGlzLmF0dHJpYnV0ZUNvbnRhaW5lcnMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB3YWNFcXVhbHMoYTogV2lkZ2V0QXR0cmlidXRlQ29udGFpbmVyW10sIGI6IFdpZGdldEF0dHJpYnV0ZUNvbnRhaW5lcltdKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmIChhW2ldLm5hbWUgIT09IGJbaV0ubmFtZSkge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYVtpXS5hdHRyaWJ1dGVzLmxlbmd0aCAhPT0gYltpXS5hdHRyaWJ1dGVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGFbaV0uYXR0cmlidXRlcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICBpZiAoYVtpXS5hdHRyaWJ1dGVzW2pdLm5hbWUgIT09IGJbaV0uYXR0cmlidXRlc1tqXS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcbn1cclxuIl19
227
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWNvbmZpZ3VyZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXNoYm9hcmQvc3JjL2NvbmZpZ3VyZS93aWRnZXQtY29uZmlndXJlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE9BQU8sRUFBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUloRSxPQUFPLEVBQTRELE1BQU0sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2pHLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLCtCQUErQixDQUFDOzs7Ozs7O0FBRy9EOztHQUVHO0FBK0RILE1BQU0sT0FBTyx3QkFBd0I7SUFlbkMsWUFBb0IsZ0JBQWtDO1FBQWxDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFiaEMsY0FBUyxHQUFXLGVBQWUsQ0FBQztRQUluRCx3QkFBbUIsR0FBK0IsRUFBRSxDQUFDO0lBU0gsQ0FBQztJQUUxRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtDQUFrQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLGNBQThCLEVBQUUsRUFBRTtZQUNwRyxJQUFJLFNBQVMsRUFBRSxFQUFFLENBQUM7Z0JBQ2hCLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0VBQXdFLENBQUMsQ0FBQztnQkFDeEYsT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNoQyxDQUFDO1lBRUQsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUNwQixJQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUM7Z0JBQ2pDLElBQUksQ0FBQywwQkFBMEIsR0FBRyxTQUFTLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO2dCQUU3QixJQUFJLENB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aWdodCAoYykgMjAxNiBIdW50c21hbiBDYW5jZXIgSW5zdGl0dXRlIGF0IHRoZSBVbml2ZXJzaXR5IG9mIFV0YWgsIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnlcclxuICovXHJcbmltcG9ydCB7Q29tcG9uZW50LCBIb3N0QmluZGluZywgaXNEZXZNb2RlfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gXCJyeGpzXCI7XHJcblxyXG5pbXBvcnQge1dpZGdldEF0dHJpYnV0ZSwgV2lkZ2V0QXR0cmlidXRlQ29udGFpbmVyLCBXaWRnZXRJbnN0YW5jZSwgV2lkZ2V0fSBmcm9tIFwiLi4vbW9kZWwvbW9kZWxcIjtcclxuaW1wb3J0IHtEYXNoYm9hcmRTZXJ2aWNlfSBmcm9tIFwiLi4vc2VydmljZXMvZGFzaGJvYXJkLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtXaWRnZXRDb21wb25lbnR9IGZyb20gXCIuLi93aWRnZXQvd2lkZ2V0LmNvbXBvbmVudFwiO1xyXG5cclxuLyoqXHJcbiAqIEBzaW5jZSAxLjAuMFxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwid2lkZ2V0LWNvbmZpZ3VyZVwiLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2UgJiYgc2VsZWN0ZWRBdHRyaWJ1dGVDb250YWluZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImF0dHJpYnV0ZS1jb250YWluZXItaGVhZGVyLXBhcmVudFwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtYXR0cmlidXRlQ29udGFpbmVyIGxldC1pPVwiaW5kZXhcIiBbbmdGb3JPZl09XCJhdHRyaWJ1dGVDb250YWluZXJzIHwgaGFzRWRpdGFibGVBdHRyaWJ1dGVzXCI+XHJcbiAgICAgICAgICA8ZGl2IChjbGljayk9XCJzZWxlY3RlZEF0dHJpYnV0ZUNvbnRhaW5lciA9IGF0dHJpYnV0ZUNvbnRhaW5lcjsgaVNlbGVjdGVkID0gaTtcIlxyXG4gICAgICAgICAgICAgICBjbGFzcz1cImF0dHJpYnV0ZS1jb250YWluZXItaGVhZGVyXCJcclxuICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic2VsZWN0ZWRBdHRyaWJ1dGVDb250YWluZXIubmFtZSA9PT0gYXR0cmlidXRlQ29udGFpbmVyLm5hbWUgPyAnc2VsZWN0ZWQnIDogJydcIlxyXG4gICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJhdHRyaWJ1dGVDb250YWluZXIubmFtZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNlbGVjdGVkQXR0cmlidXRlQ29udGFpbmVyLm5hbWUgPT09IGF0dHJpYnV0ZUNvbnRhaW5lci5uYW1lXCI+e3tzZWxlY3RlZEF0dHJpYnV0ZUNvbnRhaW5lci5uYW1lfX08L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBmbGV4LWdyb3ctMSBhdHRyaWJ1dGUtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBmbGV4LWdyb3ctMSB5LWF1dG9cIj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtYXR0cmlidXRlIFtuZ0Zvck9mXT1cInNlbGVjdGVkQXR0cmlidXRlQ29udGFpbmVyLmF0dHJpYnV0ZXNcIj5cclxuICAgICAgICAgICAgPHdpZGdldC1hdHRyaWJ1dGUgW2F0dHJpYnV0ZV09XCJhdHRyaWJ1dGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRXaWRnZXRBdHRyaWJ1dGVWYWx1ZVNldF09XCJ3aWRnZXRJbnN0YW5jZS5hdHRyaWJ1dGVWYWx1ZVNldC5pZFdpZGdldEF0dHJpYnV0ZVZhbHVlU2V0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3dpZGdldENvbXBvbmVudF09XCJ3aWRnZXRDb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImF0dHJpYnV0ZS51c2VyRWRpdGFibGVcIj48L3dpZGdldC1hdHRyaWJ1dGU+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiAqbmdJZj1cImF0dHJpYnV0ZUNvbnRhaW5lcnMubGVuZ3RoID09PSAwXCI+XHJcbiAgICAgICAgVGhlcmUgYXJlIG5vIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhpcyB3aWRnZXQuXHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgYCxcclxuICBzdHlsZXM6IFtgXHJcblxyXG4gICAgLmF0dHJpYnV0ZS1jb250YWluZXItaGVhZGVyLXBhcmVudCB7XHJcbiAgICAgIGJvcmRlci1ib3R0b206IGJsYWNrIDJweCBzb2xpZDtcclxuICAgICAgcGFkZGluZy1ib3R0b206IDVweDtcclxuICAgICAgbWFyZ2luLWJvdHRvbTogNXB4O1xyXG4gICAgfVxyXG5cclxuICAgIC5hdHRyaWJ1dGUtY29udGFpbmVyLWhlYWRlciB7XHJcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgICAgd2lkdGg6IDM1cHg7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICM2NmFhZmY7XHJcbiAgICAgIGJvcmRlcjogYmxhY2sgMXB4IHNvbGlkO1xyXG4gICAgICBib3JkZXItcmFkaXVzOiAyMHB4O1xyXG4gICAgICBwYWRkaW5nOiA0cHg7XHJcbiAgICAgIGZvbnQtc2l6ZTogbGFyZ2U7XHJcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgIG1pbi1oZWlnaHQ6IDM1cHg7XHJcbiAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XHJcbiAgICB9XHJcblxyXG4gICAgLmF0dHJpYnV0ZS1jb250YWluZXItaGVhZGVyLnNlbGVjdGVkIHtcclxuICAgICAgd2lkdGg6IDQ1JTtcclxuICAgIH1cclxuXHJcbiAgICAuYXR0cmlidXRlLWNvbnRhaW5lciB7XHJcbiAgICAgIG92ZXJmbG93LXk6IGF1dG87XHJcbiAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjtcclxuICAgIH1cclxuXHJcbiAgYF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFdpZGdldENvbmZpZ3VyZUNvbXBvbmVudCB7XHJcblxyXG4gIEBIb3N0QmluZGluZyhcImNsYXNzXCIpIGNsYXNzTGlzdDogc3RyaW5nID0gXCJvdXRsZXQtY29sdW1uXCI7XHJcblxyXG4gIHB1YmxpYyBpU2VsZWN0ZWQ6IG51bWJlcjtcclxuICBwdWJsaWMgc2VsZWN0ZWRBdHRyaWJ1dGVDb250YWluZXI6IFdpZGdldEF0dHJpYnV0ZUNvbnRhaW5lcjtcclxuICBwdWJsaWMgYXR0cmlidXRlQ29udGFpbmVyczogV2lkZ2V0QXR0cmlidXRlQ29udGFpbmVyW10gPSBbXTtcclxuXHJcbiAgcHVibGljIHdpZGdldEluc3RhbmNlOiBXaWRnZXRJbnN0YW5jZTtcclxuICAgd2lkZ2V0Q29tcG9uZW50OiBXaWRnZXRDb21wb25lbnQ7XHJcbiAgIGF0dHJpYnV0ZUNvbnRhaW5lck1hcDogTWFwPHN0cmluZywgV2lkZ2V0QXR0cmlidXRlQ29udGFpbmVyPjtcclxuXHJcbiAgIHdpZGdldENvbXBvbmVudFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gICBhdHRyaWJ1dGVDb250YWluZXJzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGFzaGJvYXJkU2VydmljZTogRGFzaGJvYXJkU2VydmljZSkge31cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuY29uZmlndXJhdGlvbldpZGdldEluc3RhbmNlU3ViamVjdC5zdWJzY3JpYmUoKHdpZGdldEluc3RhbmNlOiBXaWRnZXRJbnN0YW5jZSkgPT4ge1xyXG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICBjb25zb2xlLmRlYnVnKFwiV2lkZ2V0Q29uZmlndXJlQ29tcG9uZW50LmNvbmZpZ3VyYXRpb25XaWRnZXRJbnN0YW5jZVN1YmplY3Quc3Vic2NyaWJlOlwiKTtcclxuICAgICAgICBjb25zb2xlLmRlYnVnKHdpZGdldEluc3RhbmNlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCF3aWRnZXRJbnN0YW5jZSkge1xyXG4gICAgICAgIHRoaXMud2lkZ2V0SW5zdGFuY2UgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy53aWRnZXRDb21wb25lbnQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEF0dHJpYnV0ZUNvbnRhaW5lciA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLmlTZWxlY3RlZCA9IHVuZGVmaW5lZDtcclxuXHJcblx0XHQgICAgdGhpcy51bnN1YnNjcmliZSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMud2lkZ2V0SW5zdGFuY2UgPSB3aWRnZXRJbnN0YW5jZTtcclxuXHJcbiAgICAgICAgdGhpcy53aWRnZXRDb21wb25lbnRTdWJzY3JpcHRpb24gPSB0aGlzLmRhc2hib2FyZFNlcnZpY2UuZ2V0V2lkZ2V0Q29tcG9uZW50U3ViamVjdCh3aWRnZXRJbnN0YW5jZS5pZFdpZGdldEluc3RhbmNlKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh3aWRnZXRDb21wb25lbnQ6IFdpZGdldENvbXBvbmVudCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJXaWRnZXRDb25maWd1cmVDb21wb25lbnQuZ2V0V2lkZ2V0Q29tcG9uZW50U3ViamVjdC5zdWJzY3JpYmVcIik7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcod2lkZ2V0Q29tcG9uZW50KTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5hdHRyaWJ1dGVDb250YWluZXJzU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlQ29udGFpbmVyc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMud2lkZ2V0Q29tcG9uZW50ID0gd2lkZ2V0Q29tcG9uZW50O1xyXG4gICAgICAgICAgaWYgKHRoaXMud2lkZ2V0Q29tcG9uZW50KSB7XHJcblx0XHRcdCAgICAgIHRoaXMud2lkZ2V0Q29tcG9uZW50LmNvbmZpZyh1bmRlZmluZWQpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVDb250YWluZXJzU3Vic2NyaXB0aW9uID0gdGhpcy53aWRnZXRDb21wb25lbnQuYXR0cmlidXRlQ29udGFpbmVycy5zdWJzY3JpYmUoKGF0dHJpYnV0ZUNvbnRhaW5lcnM6IE1hcDxzdHJpbmcsIFdpZGdldEF0dHJpYnV0ZUNvbnRhaW5lcj4pID0+IHtcclxuICAgICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJXaWRnZXRDb25maWd1cmVDb21wb25lbnQuYXR0cmlidXRlQ29udGFpbmVyc1N1YnNjcmlwdGlvblwiKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoYXR0cmlidXRlQ29udGFpbmVycyk7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlQ29udGFpbmVycykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVDb250YWluZXJNYXAgPSBXaWRnZXQubWVyZ2UoYXR0cmlidXRlQ29udGFpbmVycywgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmdldENvbW1vbkF0dHJpYnV0ZXMoKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlQXR0cmlidXRlQ29udGFpbmVycygpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZUNvbnRhaW5lck1hcCA9IHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXRDb21tb25BdHRyaWJ1dGVzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlQXR0cmlidXRlQ29udGFpbmVycygpO1xyXG4gICAgICAgICAgICAgIH1cclxuXHRcdFx0ICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICB1bnN1YnNjcmliZSgpIHtcclxuICAgIGlmICh0aGlzLndpZGdldENvbXBvbmVudFN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLndpZGdldENvbXBvbmVudFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYXR0cmlidXRlQ29udGFpbmVyc1N1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLmF0dHJpYnV0ZUNvbnRhaW5lcnNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRob3VnaCBhIG1hcCBpcyB1c2VkIHRvIG92ZXJyaWRlIGF0dHJpYnV0ZXMgZWFzaWx5LCB0cmFuc2ZlciBiYWNrIHRvIGFuIGFycmF5IGZvciBlYXN5IHNvcnRpbmcgYW5kIHRvIG1ha2VcclxuICAgKiB0aGUgbmdGb3IgaGFwcHkuXHJcbiAgICovXHJcbiAgZ2VuZXJhdGVBdHRyaWJ1dGVDb250YWluZXJzKCkge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJXaWRnZXRDb25maWd1cmVDb21wb25lbnQuZ2VuZXJhdGVBdHRyaWJ1dGVDb250YWluZXJzOiBcIiArIHRoaXMuYXR0cmlidXRlQ29udGFpbmVyTWFwLnNpemUpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB0ZW1wQ29udGFpbmVyczogV2lkZ2V0QXR0cmlidXRlQ29udGFpbmVyW10gPSBbXTtcclxuICAgIGZvciAobGV0IGF0dHJpYnV0ZUNvbnRhaW5lciBvZiB0aGlzLmF0dHJpYnV0ZUNvbnRhaW5lck1hcC52YWx1ZXMoKSkge1xyXG4gICAgICBpZiAoYXR0cmlidXRlQ29udGFpbmVyLmhpZGRlbikge1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBhdHRyaWJ1dGVDb250YWluZXIuYXR0cmlidXRlcyA9IFtdO1xyXG4gICAgICBmb3IgKGxldCBhdHRyaWJ1dGUgb2YgYXR0cmlidXRlQ29udGFpbmVyLmF0dHJpYnV0ZU1hcC52YWx1ZXMoKSkge1xyXG4gICAgICAgIC8qaWYgKGF0dHJpYnV0ZS51c2VyRWRpdGFibGUpIHtcclxuICAgICAgICAgIGF0dHJpYnV0ZUNvbnRhaW5lci5hdHRyaWJ1dGVzLnB1c2goYXR0cmlidXRlKTtcclxuICAgICAgICB9Ki9cclxuICAgICAgICBhdHRyaWJ1dGVDb250YWluZXIuYXR0cmlidXRlcy5wdXNoKGF0dHJpYnV0ZSk7XHJcbiAgICAgIH1cclxuICAgICAgYXR0cmlidXRlQ29udGFpbmVyLmF0dHJpYnV0ZXMuc29ydCgoYTogV2lkZ2V0QXR0cmlidXRlLCBiOiBXaWRnZXRBdHRyaWJ1dGUpID0+IHtcclxuICAgICAgICBpZiAoYS5zb3J0T3JkZXIgPCBiLnNvcnRPcmRlcikge1xyXG4gICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYS5zb3J0T3JkZXIgPiBiLnNvcnRPcmRlcikge1xyXG4gICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0ZW1wQ29udGFpbmVycy5wdXNoKGF0dHJpYnV0ZUNvbnRhaW5lcik7XHJcbiAgICB9XHJcblxyXG4gICAgdGVtcENvbnRhaW5lcnMuc29ydCgoYTogV2lkZ2V0QXR0cmlidXRlQ29udGFpbmVyLCBiOiBXaWRnZXRBdHRyaWJ1dGVDb250YWluZXIpID0+IHtcclxuICAgICAgaWYgKGEuc29ydE9yZGVyIDwgYi5zb3J0T3JkZXIpIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgIH0gZWxzZSBpZiAoYS5zb3J0T3JkZXIgPiBiLnNvcnRPcmRlcikge1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5hdHRyaWJ1dGVDb250YWluZXJzLmxlbmd0aCA9PT0gMCB8fCAhdGhpcy53YWNFcXVhbHModGVtcENvbnRhaW5lcnMsIHRoaXMuYXR0cmlidXRlQ29udGFpbmVycykpIHtcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVDb250YWluZXJzID0gdGVtcENvbnRhaW5lcnM7XHJcblxyXG4gICAgICBpZiAodGhpcy5pU2VsZWN0ZWQgJiYgdGhpcy5pU2VsZWN0ZWQgPCB0aGlzLmF0dHJpYnV0ZUNvbnRhaW5lcnMubGVuZ3RoICYmIHRoaXMuc2VsZWN0ZWRBdHRyaWJ1dGVDb250YWluZXIubmFtZSA9PT0gdGhpcy5hdHRyaWJ1dGVDb250YWluZXJzW3RoaXMuaVNlbGVjdGVkXS5uYW1lKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEF0dHJpYnV0ZUNvbnRhaW5lciA9IHRoaXMuYXR0cmlidXRlQ29udGFpbmVyc1t0aGlzLmlTZWxlY3RlZF07XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5hdHRyaWJ1dGVDb250YWluZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQXR0cmlidXRlQ29udGFpbmVyID0gdGhpcy5hdHRyaWJ1dGVDb250YWluZXJzWzBdO1xyXG4gICAgICAgIHRoaXMuaVNlbGVjdGVkID0gMDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQXR0cmlidXRlQ29udGFpbmVyID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuaVNlbGVjdGVkID0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5zZXRDb25maWd1cmF0aW9uQXR0cmlidXRlQ29udGFpbmVycyh0aGlzLmF0dHJpYnV0ZUNvbnRhaW5lcnMpO1xyXG5cclxuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgY29uc29sZS5kZWJ1Zyh0aGlzLmF0dHJpYnV0ZUNvbnRhaW5lcnMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB3YWNFcXVhbHMoYTogV2lkZ2V0QXR0cmlidXRlQ29udGFpbmVyW10sIGI6IFdpZGdldEF0dHJpYnV0ZUNvbnRhaW5lcltdKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmIChhW2ldLm5hbWUgIT09IGJbaV0ubmFtZSkge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYVtpXS5hdHRyaWJ1dGVzLmxlbmd0aCAhPT0gYltpXS5hdHRyaWJ1dGVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGFbaV0uYXR0cmlidXRlcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICBpZiAoYVtpXS5hdHRyaWJ1dGVzW2pdLm5hbWUgIT09IGJbaV0uYXR0cmlidXRlc1tqXS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcbn1cclxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"huntsman-cancer-institute-dashboard.mjs","sources":["../../../projects/dashboard/src/model/widget-attribute-choice.entity.ts","../../../projects/dashboard/src/model/widget-attribute.entity.ts","../../../projects/dashboard/src/model/widget-attribute-container.entity.ts","../../../projects/dashboard/src/model/widget-attribute-value.entity.ts","../../../projects/dashboard/src/model/widget-attribute-value-set.entity.ts","../../../projects/dashboard/src/model/widget-category.entity.ts","../../../projects/dashboard/src/model/widget.entity.ts","../../../projects/dashboard/src/model/widget-instance.entity.ts","../../../projects/dashboard/src/model/dashboard.entity.ts","../../../projects/dashboard/src/model/user-profile.entity.ts","../../../projects/dashboard/src/model/model.ts","../../../projects/dashboard/src/services/dashboard.service.ts","../../../projects/dashboard/src/widget/widget.component.ts","../../../projects/dashboard/src/configure/widget-attribute.component.ts","../../../projects/dashboard/src/pipes/has-editable-attributes.pipe.ts","../../../projects/dashboard/src/configure/widget-configure.component.ts","../../../projects/dashboard/src/widget/widget-host.component.ts","../../../projects/dashboard/src/widget/widget-container.component.ts","../../../projects/dashboard/src/services/dashboard-global.service.ts","../../../projects/dashboard/src/configure/widget-add.component.ts","../../../projects/dashboard/src/dashboard.component.ts","../../../projects/dashboard/src/dashboard.module.ts","../../../projects/dashboard/src/index.ts","../../../projects/dashboard/src/huntsman-cancer-institute-dashboard.ts"],"sourcesContent":["import {WidgetAttribute} from \"./widget-attribute.entity\";\r\n\r\nexport class WidgetAttributeChoice {\r\n public idWidgetAttributeChoice: number;\r\n public value: string;\r\n public display: string;\r\n\r\n deserialize(object): WidgetAttributeChoice {\r\n this.idWidgetAttributeChoice = object.idWidgetAttributeChoice;\r\n this.value = object.value;\r\n this.display = object.display;\r\n\r\n return this;\r\n }\r\n\r\n deserializeArray(list: Object[]): WidgetAttributeChoice[] {\r\n let choices: WidgetAttributeChoice[] = [];\r\n for (var i = 0; i < list.length; i++) {\r\n choices.push(new WidgetAttributeChoice().deserialize(list[i]));\r\n }\r\n return choices;\r\n }\r\n}\r\n","import {WidgetAttributeChoice} from \"./widget-attribute-choice.entity\";\r\n\r\nexport class WidgetAttribute {\r\n public idWidgetAttribute: number;\r\n public idWidgetAttributeContainer: number;\r\n public name: string;\r\n public display: string;\r\n public dataType: string;\r\n public multiValue: boolean;\r\n public userEditable: boolean;\r\n public sortOrder: number;\r\n public defaultValue: string;\r\n public widgetAttributeChoices: WidgetAttributeChoice[];\r\n\r\n deserialize(object): WidgetAttribute {\r\n this.idWidgetAttribute = object.idWidgetAttribute;\r\n this.idWidgetAttributeContainer = object.idWidgetAttributeContainer;\r\n this.name = object.name;\r\n this.display = object.display;\r\n this.dataType = object.dataType;\r\n this.multiValue = object.multiValue;\r\n this.userEditable = object.userEditable;\r\n this.sortOrder = object.sortOrder;\r\n this.defaultValue = object.defaultValue;\r\n\r\n if (object.widgetAttributeChoices) {\r\n this.widgetAttributeChoices = [];\r\n for (var i = 0; i < object.widgetAttributeChoices.length; i++) {\r\n this.widgetAttributeChoices.push(new WidgetAttributeChoice().deserialize(object.widgetAttributeChoices[i]));\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n deserializeArray(list: Object[]): WidgetAttribute[] {\r\n let attributes: WidgetAttribute[] = [];\r\n for (var i = 0; i < list.length; i++) {\r\n attributes.push(new WidgetAttribute().deserialize(list[i]));\r\n }\r\n return attributes;\r\n }\r\n\r\n}\r\n","import {WidgetAttribute} from \"./widget-attribute.entity\";\r\n\r\nexport class WidgetAttributeContainer {\r\n public idWidgetAttributeContainer: number;\r\n public name: string;\r\n public sortOrder: number;\r\n public hidden: boolean;\r\n public attributes: WidgetAttribute[];\r\n public attributeMap: Map<string, WidgetAttribute> = new Map<string, WidgetAttribute>();\r\n\r\n static merge(attributeMapParent: Map<string, WidgetAttribute>, attributeMapChild: Map<string, WidgetAttribute>): Map<string, WidgetAttribute> {\r\n let attributeMap: Map<string, WidgetAttribute> = new Map<string, WidgetAttribute>();\r\n\r\n for (let attribute of attributeMapParent.values()) {\r\n attributeMap.set(attribute.name, attribute);\r\n }\r\n\r\n for (let attribute of attributeMapChild.values()) {\r\n attributeMap.set(attribute.name, attribute);\r\n }\r\n\r\n return attributeMap;\r\n }\r\n\r\n deserialize(object): WidgetAttributeContainer {\r\n this.idWidgetAttributeContainer = object.idWidgetAttributeContainer;\r\n this.name = object.name;\r\n this.sortOrder = object.sortOrder;\r\n this.hidden = object.hidden;\r\n this.attributeMap = new Map<string, WidgetAttribute>();\r\n\r\n if (object.attributes) {\r\n this.attributes = [];\r\n for (var i = 0; i < object.attributes.length; i++) {\r\n let attribute: WidgetAttribute = new WidgetAttribute().deserialize(object.attributes[i]);\r\n this.attributes.push(attribute);\r\n this.attributeMap.set(attribute.name, attribute);\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n deserializeArray(list: Object[]): WidgetAttributeContainer[] {\r\n let attributeContainers: WidgetAttributeContainer[] = [];\r\n for (var i = 0; i < list.length; i++) {\r\n attributeContainers.push(new WidgetAttributeContainer().deserialize(list[i]));\r\n }\r\n return attributeContainers;\r\n }\r\n\r\n generateAttributeMap() {\r\n this.attributeMap = new Map<string, WidgetAttribute>();\r\n for (let attribute of this.attributes) {\r\n this.attributeMap.set(attribute.name, attribute);\r\n }\r\n }\r\n\r\n}\r\n","export class WidgetAttributeValue {\r\n public idWidgetAttributeValue: number;\r\n //public idWidgetAttributeValueSet: number;\r\n public idWidgetAttribute: number;\r\n public valueString: string;\r\n public valueBoolean: boolean;\r\n public valueDate: number;\r\n public valueInteger: number;\r\n public valueNumeric: number;\r\n\r\n deserialize(object): WidgetAttributeValue {\r\n this.idWidgetAttributeValue = object.idWidgetAttributeValue;\r\n //this.idWidgetAttributeValueSet = object.idWidgetAttributeValueSet;\r\n this.idWidgetAttribute = object.idWidgetAttribute;\r\n this.valueString = object.valueString;\r\n this.valueBoolean = object.valueBoolean;\r\n this.valueDate = object.valueDate;\r\n this.valueInteger = object.valueInteger;\r\n this.valueNumeric = object.valueNumeric;\r\n\r\n return this;\r\n }\r\n}\r\n","import {WidgetAttributeValue} from \"./widget-attribute-value.entity\";\r\n\r\nexport class WidgetAttributeValueSet {\r\n public idWidgetAttributeValueSet: number = undefined;\r\n public attributeValues: WidgetAttributeValue[] = [];\r\n\r\n deserialize(object): WidgetAttributeValueSet {\r\n this.idWidgetAttributeValueSet = object.idWidgetAttributeValueSet;\r\n\r\n if (object.attributeValues) {\r\n this.attributeValues = [];\r\n for (var i = 0; i < object.attributeValues.length; i++) {\r\n this.attributeValues.push(new WidgetAttributeValue().deserialize(object.attributeValues[i]));\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n idReset() {\r\n if (this.idWidgetAttributeValueSet < 0) {\r\n this.idWidgetAttributeValueSet = undefined;\r\n }\r\n\r\n if (this.attributeValues) {\r\n for (let attributeValue of this.attributeValues) {\r\n if (attributeValue.idWidgetAttributeValue < 0) {\r\n attributeValue.idWidgetAttributeValue = undefined;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","export class WidgetCategory {\r\n public idWidgetCategory: number;\r\n public category: string;\r\n public icon: string;\r\n\r\n deserialize(object): WidgetCategory {\r\n this.idWidgetCategory = object.idWidgetCategory;\r\n this.category = object.category;\r\n this.icon = object.icon;\r\n\r\n return this;\r\n }\r\n\r\n deserializeArray(list: Object[]): WidgetCategory[] {\r\n let widgetCategories: WidgetCategory[] = [];\r\n for (var i = 0; i < list.length; i++) {\r\n widgetCategories.push(new WidgetCategory().deserialize(list[i]));\r\n }\r\n return widgetCategories;\r\n }\r\n}\r\n","import {WidgetAttributeContainer} from \"./widget-attribute-container.entity\";\r\nimport {WidgetAttributeValueSet} from \"./widget-attribute-value-set.entity\";\r\nimport {WidgetCategory} from \"./widget-category.entity\";\r\n\r\nexport class Widget {\r\n public idWidget: number;\r\n public instantiable: boolean;\r\n public parentWidget: Widget;\r\n public name: string;\r\n public component: string;\r\n public title: string;\r\n public icon: string;\r\n public description: string;\r\n public keywords: string;\r\n public widgetCategories: WidgetCategory[];\r\n public attributeContainers: WidgetAttributeContainer[];\r\n public attributeContainerMap: Map<string, WidgetAttributeContainer> = new Map<string, WidgetAttributeContainer>();\r\n public attributeValueSet: WidgetAttributeValueSet;\r\n\r\n static merge(attributeContainerMapParent: Map<string, WidgetAttributeContainer>, attributeContainerMapChild: Map<string, WidgetAttributeContainer>): Map<string, WidgetAttributeContainer> {\r\n let attributeContainerMap: Map<string, WidgetAttributeContainer> = new Map<string, WidgetAttributeContainer>();\r\n\r\n if (attributeContainerMapParent.size > 0) {\r\n for (let attributeContainer of attributeContainerMapParent.values()) {\r\n attributeContainerMap.set(attributeContainer.name, attributeContainer);\r\n }\r\n }\r\n\r\n for (let attributeContainer of attributeContainerMapChild.values()) {\r\n if (attributeContainerMap.has(attributeContainer.name)) {\r\n attributeContainer.attributeMap = WidgetAttributeContainer.merge(attributeContainerMap.get(attributeContainer.name).attributeMap, attributeContainer.attributeMap);\r\n }\r\n\r\n attributeContainerMap.set(attributeContainer.name, attributeContainer);\r\n }\r\n\r\n for (let attributeContainer of attributeContainerMap.values()) {\r\n attributeContainer.attributes = Array.from(attributeContainer.attributeMap.values());\r\n attributeContainerMap.set(attributeContainer.name, attributeContainer);\r\n }\r\n\r\n return attributeContainerMap;\r\n }\r\n\r\n deserialize(object): Widget {\r\n this.idWidget = object.idWidget;\r\n this.instantiable = object.instantiable;\r\n this.name = object.name;\r\n this.title = object.title;\r\n this.component = object.component;\r\n this.icon = object.icon;\r\n this.description = object.description;\r\n this.keywords = object.keywords;\r\n\r\n this.attributeContainerMap = new Map<string, WidgetAttributeContainer>();\r\n\r\n if (object.parentWidget) {\r\n this.parentWidget = new Widget().deserialize(object.parentWidget);\r\n }\r\n\r\n if (object.widgetCategories) {\r\n this.widgetCategories = new WidgetCategory().deserializeArray(object.widgetCategories);\r\n }\r\n\r\n if (object.attributeContainers) {\r\n this.attributeContainers = [];\r\n for (var i = 0; i < object.attributeContainers.length; i++) {\r\n let attributeContainer: WidgetAttributeContainer = new WidgetAttributeContainer().deserialize(object.attributeContainers[i]);\r\n this.attributeContainers.push(attributeContainer);\r\n this.attributeContainerMap.set(attributeContainer.name, attributeContainer);\r\n }\r\n }\r\n if (this.parentWidget) {\r\n this.attributeContainerMap = Widget.merge(this.attributeContainerMap, this.parentWidget.attributeContainerMap);\r\n }\r\n\r\n if (object.attributeValueSet) {\r\n this.attributeValueSet = new WidgetAttributeValueSet().deserialize(object.attributeValueSet);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n deserializeArray(list: Object[]): Widget[] {\r\n let widgets: Widget[] = [];\r\n for (var i = 0; i < list.length; i++) {\r\n widgets.push(new Widget().deserialize(list[i]));\r\n }\r\n return widgets;\r\n }\r\n\r\n /**\r\n * Convert the json array of containers in to a map based on the attribute container name.\r\n */\r\n generateAttributeContainerMap() {\r\n this.attributeContainerMap = new Map<string, WidgetAttributeContainer>();\r\n for (let attributeContainer of this.attributeContainers) {\r\n this.attributeContainerMap.set(attributeContainer.name, attributeContainer);\r\n }\r\n }\r\n\r\n hasAttributes() {\r\n if (this.attributeContainers === undefined) {\r\n return false;\r\n } else {\r\n for (let attributeContainer of this.attributeContainers) {\r\n if (attributeContainer.attributes && attributeContainer.attributes.length > 0) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n }\r\n\r\n}\r\n","import {Widget} from \"./widget.entity\";\r\nimport {WidgetAttributeValueSet} from \"./widget-attribute-value-set.entity\";\r\n\r\nexport class WidgetInstance {\r\n public idWidgetInstance: number;\r\n public idDashboard: number;\r\n public widget: Widget;\r\n public sortOrder: number;\r\n public attributeValueSet: WidgetAttributeValueSet;\r\n\r\n deserialize(object: any): WidgetInstance {\r\n this.idWidgetInstance = object.idWidgetInstance;\r\n this.idDashboard = object.idDashboard;\r\n this.sortOrder = object.sortOrder;\r\n\r\n if (object.widget) {\r\n this.widget = new Widget().deserialize(object.widget);\r\n }\r\n if (object.attributeValueSet) {\r\n this.attributeValueSet = new WidgetAttributeValueSet().deserialize(object.attributeValueSet);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n idReset() {\r\n if (this.idWidgetInstance < 0) {\r\n this.idWidgetInstance = undefined;\r\n }\r\n\r\n if (this.attributeValueSet) {\r\n this.attributeValueSet.idReset();\r\n }\r\n }\r\n\r\n}\r\n","import {WidgetInstance} from \"./widget-instance.entity\";\r\n\r\nexport class Dashboard {\r\n public idDashboard: number;\r\n public idUserProfile: number;\r\n public name: string;\r\n public sortOrder: number;\r\n public idDashboardType: number;\r\n public widgetInstances: WidgetInstance[] = [];\r\n\r\n deserialize(object): Dashboard {\r\n this.idDashboard = object.idDashboard;\r\n this.idUserProfile = object.idUserProfile;\r\n this.name = object.name;\r\n this.sortOrder = object.sortOrder;\r\n this.idDashboardType = object.idDashboardType;\r\n\r\n if (object.widgetInstances) {\r\n this.widgetInstances = [];\r\n for (var i = 0; i < object.widgetInstances.length; i++) {\r\n this.widgetInstances.push(new WidgetInstance().deserialize(object.widgetInstances[i]));\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n deserializeArray(list: Object[]): Dashboard[] {\r\n let dashboards: Dashboard[] = [];\r\n for (var i = 0; i < list.length; i++) {\r\n dashboards.push(new Dashboard().deserialize(list[i]));\r\n }\r\n return dashboards;\r\n }\r\n\r\n}\r\n","import {Dashboard} from \"./dashboard.entity\";\r\n\r\nexport class UserProfile {\r\n public idUserProfile: number;\r\n public idUser: number;\r\n public dashboards: Dashboard[];\r\n\r\n deserialize(object): UserProfile {\r\n this.idUserProfile = object.idUserProfile;\r\n this.idUser = object.idUser;\r\n\r\n if (object.dashboards) {\r\n this.dashboards = [];\r\n for (var i = 0; i < object.dashboards.length; i++) {\r\n this.dashboards.push(new Dashboard().deserialize(object.dashboards[i]));\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\n/**\r\n * A barrel file for dashboard models.\r\n *\r\n * @since 3.0.0\r\n */\r\nexport {Dashboard} from \"./dashboard.entity\";\r\nexport {UserProfile} from \"./user-profile.entity\";\r\nexport {Widget} from \"./widget.entity\";\r\nexport {WidgetAttribute} from \"./widget-attribute.entity\";\r\nexport {WidgetAttributeChoice} from \"./widget-attribute-choice.entity\";\r\nexport {WidgetAttributeContainer} from \"./widget-attribute-container.entity\";\r\nexport {WidgetAttributeValue} from \"./widget-attribute-value.entity\";\r\nexport {WidgetAttributeValueSet} from \"./widget-attribute-value-set.entity\";\r\nexport {WidgetCategory} from \"./widget-category.entity\";\r\nexport {WidgetInstance} from \"./widget-instance.entity\";\r\n","import {Inject, Injectable, InjectionToken, isDevMode, Type} from \"@angular/core\";\r\nimport {HttpClient, HttpParams} from \"@angular/common/http\";\r\n\r\nimport {BehaviorSubject, forkJoin, Observable, Subject} from \"rxjs\";\r\nimport {map} from \"rxjs/operators\";\r\n\r\nimport {WidgetComponent} from \"../widget/widget.component\";\r\nimport {Dashboard, Widget, WidgetAttribute, WidgetAttributeContainer,\r\n WidgetAttributeValue, WidgetAttributeValueSet, WidgetCategory, WidgetInstance} from \"../model/model\";\r\n\r\nexport let USER_PROFILE_ENDPOINT: InjectionToken<string> = new InjectionToken(\"userProfileEndpoint\");\r\nexport let DASHBOARD_TYPE: InjectionToken<string> = new InjectionToken(\"dashboardType\");\r\nexport let WIDGET_COMPONENTS: InjectionToken<Type<any>[]> = new InjectionToken(\"widgetComponents\");\r\n\r\n/**\r\n * The service holds the configuration array for the widgets. Widgets can access their configuration from here.\r\n *\r\n * @since 1.0.0\r\n */\r\n@Injectable()\r\nexport class DashboardService {\r\n\r\n public addWidgetSubject: Subject<boolean> = new Subject<boolean>();\r\n public configurationWidgetInstanceSubject: BehaviorSubject<WidgetInstance> = new BehaviorSubject<WidgetInstance>(undefined);\r\n public updateWidgetInstanceSubject: Subject<WidgetInstance> = new Subject<WidgetInstance>();\r\n\r\n public dashboardsState: Subject<Dashboard[]> = new Subject<Dashboard[]>();\r\n\r\n private widgetAttributeUpdatedSubject: Subject<number> = new Subject<number>();\r\n\r\n private dashboards: Dashboard[] = [];\r\n\r\n private widgets: BehaviorSubject<Widget[]> = new BehaviorSubject<Widget[]>(undefined);\r\n private widgetCategories: WidgetCategory[];\r\n\r\n private widgetRendered: Subject<boolean> = new Subject<boolean>();\r\n private editMode: boolean = false;\r\n private editModeSubject: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\r\n\r\n private idNew: number = -1;\r\n private configurationWidgetInstance: WidgetInstance;\r\n private configurationAttributeContainers: WidgetAttributeContainer[];\r\n private attributeContainerMap: Map<string, WidgetAttributeContainer> = new Map<string, WidgetAttributeContainer>();\r\n\r\n private configWidgetComponent: WidgetComponent;\r\n private preConfigAttributeValueSet: WidgetAttributeValueSet;\r\n\r\n private widgetComponentCreated: Subject<number> = new Subject<number>();\r\n private registeredWidgetComponents: Map<number, WidgetComponent> = new Map<number, WidgetComponent>();\r\n private widgetComponentSubjects: Map<number, BehaviorSubject<WidgetComponent>> = new Map<number, BehaviorSubject<WidgetComponent>>();\r\n\r\n /**\r\n * Interacts with the backend service to get the user profile and widgets. Also manages widgets as they are added and\r\n * edited such that widget attributes are stored in one place.\r\n *\r\n * @param http\r\n * @param userProfileEndpoint\r\n */\r\n constructor(private http: HttpClient,\r\n @Inject(USER_PROFILE_ENDPOINT) private userProfileEndpoint: string,\r\n @Inject(DASHBOARD_TYPE) private dashboardType: string) {\r\n if (isDevMode()) {\r\n console.debug(\"DashboardService constructor\");\r\n }\r\n\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.attributeContainerMap.set(\"Common\", new WidgetAttributeContainer());\r\n\r\n this.widgetRendered.next(false);\r\n this.editModeSubject.next(this.editMode);\r\n\r\n this.http.get(this.userProfileEndpoint + \"/user-profile/my\").subscribe((response: any) => {\r\n forkJoin([\r\n this.http.get(this.userProfileEndpoint + \"/attribute/common-attributes\"),\r\n this.http.get(this.userProfileEndpoint + \"/widget/widget-categories\"),\r\n this.http.get(this.userProfileEndpoint + \"/widget/widget-list\", {params: new HttpParams().set(\"dashboardType\", this.dashboardType)}),\r\n this.http.get(this.userProfileEndpoint + \"/dashboard\", {params: new HttpParams().set(\"dashboardType\", this.dashboardType)})\r\n ]).subscribe(responses => {\r\n this.setCommonAttributes(responses[0]);\r\n this.setWidgetCategories(responses[1]);\r\n this.setWidgets(responses[2]);\r\n this.setDashboards(responses[3]);\r\n\r\n this.pushDashboardState();\r\n });\r\n });\r\n }\r\n\r\n setConfigWidgetComponent(configWidgetComponent: WidgetComponent) {\r\n this.configWidgetComponent = configWidgetComponent;\r\n }\r\n\r\n getConfigWidgetComponent(): WidgetComponent {\r\n return this.configWidgetComponent;\r\n }\r\n\r\n doAddWidget() {\r\n this.addWidgetSubject.next(true);\r\n }\r\n\r\n getCommonAttributes(): Map<string, WidgetAttributeContainer> {\r\n return this.attributeContainerMap;\r\n }\r\n\r\n setCommonAttributes(response: any) {\r\n if (isDevMode()) {\r\n console.debug(\"DashboardService.setCommonAttributes()\");\r\n }\r\n\r\n let commonAttributeContainer: WidgetAttributeContainer = new WidgetAttributeContainer();\r\n commonAttributeContainer.name = \"Common\";\r\n commonAttributeContainer.sortOrder = 0;\r\n commonAttributeContainer.attributes = new WidgetAttribute().deserializeArray(response);\r\n commonAttributeContainer.generateAttributeMap();\r\n this.attributeContainerMap = new Map<string, WidgetAttributeContainer>();\r\n this.attributeContainerMap.set(\"Common\", commonAttributeContainer);\r\n\r\n if (isDevMode()) {\r\n console.debug(\"DashboardService.setCommonAttributes(); Setting common attributes:\");\r\n console.debug(commonAttributeContainer.attributes);\r\n }\r\n }\r\n\r\n /**\r\n * Return the array of dashboards. Each dashboard contains an array of widgets.\r\n *\r\n * @returns {Dashboard[]}\r\n */\r\n getDashboards(): Dashboard[] {\r\n return this.dashboards;\r\n }\r\n\r\n /**\r\n * Calls the backend to fetch the list of widgets available.\r\n *\r\n */\r\n setWidgets(response: any) {\r\n if (isDevMode()) {\r\n console.debug(\"DashboardService.setWidgets()\");\r\n }\r\n\r\n this.widgets.next(<Widget[]>response);\r\n }\r\n\r\n /**\r\n * Calls the backend to fetch the list of widget categories available.\r\n *\r\n */\r\n setWidgetCategories(response: any) {\r\n if (isDevMode()) {\r\n console.debug(\"DashboardService.setWidgetCategories()\");\r\n }\r\n\r\n this.widgetCategories = <WidgetCategory[]>response;\r\n }\r\n\r\n /**\r\n * Sets the dashboards after the user profile is fetched. Upon fetch, the widgets within each dashboard are sorted\r\n * by their sortOrder.\r\n *\r\n * @param dashboards\r\n */\r\n setDashboards(response: any) {\r\n if (isDevMode()) {\r\n console.debug(\"DashboardService.setDashboards()\");\r\n }\r\n\r\n this.dashboards = new Dashboard().deserializeArray(response);\r\n\r\n if (!this.dashboards) {\r\n this.dashboards = [];\r\n }\r\n\r\n if (isDevMode()) {\r\n console.debug(this.dashboards);\r\n }\r\n\r\n for (var d = 0; d < this.dashboards.length; d++) {\r\n this.dashboards[d].widgetInstances = this.dashboards[d].widgetInstances.sort((a: WidgetInstance, b: WidgetInstance) => {\r\n if (a.sortOrder !== undefined && b.sortOrder !== undefined) {\r\n let aa: number = <number>a.sortOrder;\r\n let bb: number = <number>b.sortOrder;\r\n if (aa < bb) {\r\n return -1;\r\n } else if (aa > bb) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n } else if (a.sortOrder !== undefined) {\r\n return -1;\r\n } else if (b.sortOrder !== undefined) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n });\r\n };\r\n }\r\n\r\n pushDashboardState() {\r\n this.dashboardsState.next(this.dashboards);\r\n }\r\n\r\n /**\r\n * Returns the list of widget categories for searching/filtering widgets.\r\n *\r\n * @returns {WidgetCategory[]}\r\n */\r\n getWidgetCategories() : WidgetCategory[] {\r\n return this.widgetCategories;\r\n }\r\n\r\n /**\r\n * Filter widgets by title or keyword.\r\n * TODO: Add any other metrics on which to filter by.\r\n *\r\n * @param filter\r\n * @returns {Widget[]}\r\n */\r\n getWidgetsByFilter(filter: string): Widget[] {\r\n if (!filter || filter.length === 0) {\r\n let filteredList: Widget[] = [];\r\n for (var i = 0; i < this.widgets.getValue().length; i++) {\r\n if (this.widgets.getValue()[i].instantiable) {\r\n filteredList.push(this.widgets.getValue()[i]);\r\n }\r\n }\r\n return filteredList;\r\n } else if (filter) {\r\n let filteredList: Widget[] = [];\r\n filter = filter.toLowerCase();\r\n for (var i = 0; i < this.widgets.getValue().length; i++) {\r\n if (this.widgets.getValue()[i].instantiable) {\r\n if (this.widgets.getValue()[i].title && this.widgets.getValue()[i].title.toLowerCase().indexOf(filter) !== -1) {\r\n filteredList.push(this.widgets.getValue()[i]);\r\n } else if (this.widgets.getValue()[i].description && this.widgets.getValue()[i].description.toLowerCase().indexOf(filter) !== -1) {\r\n filteredList.push(this.widgets.getValue()[i]);\r\n }\r\n }\r\n }\r\n return filteredList;\r\n } else {\r\n return this.widgets.getValue();\r\n }\r\n }\r\n\r\n /**\r\n * For a particular attribute, return all current attribute values for it.\r\n *\r\n * @param idWidgetInstance\r\n * @param idWidgetAttribute\r\n * @returns {WidgetInstanceAttributeValue[]}\r\n */\r\n getAttributeValues(idWidgetInstance: number, idWidgetAttribute: number): WidgetAttributeValue[] {\r\n let attributeValues: WidgetAttributeValue[] = [];\r\n\r\n for (var d = 0; d < this.dashboards.length; d++) {\r\n for (var w = 0; w < this.dashboards[d].widgetInstances.length; w++) {\r\n if (this.dashboards[d].widgetInstances[w].idWidgetInstance === idWidgetInstance) {\r\n attributeValues = this.dashboards[d].widgetInstances[w].attributeValueSet.attributeValues.filter((value: WidgetAttributeValue) => {\r\n return value.idWidgetAttribute === idWidgetAttribute;\r\n });\r\n if (attributeValues.length === 0) {\r\n return this.dashboards[d].widgetInstances[w].widget.attributeValueSet.attributeValues.filter((value: WidgetAttributeValue) => {\r\n return value.idWidgetAttribute === idWidgetAttribute;\r\n });\r\n } else {\r\n return attributeValues;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return [];\r\n }\r\n\r\n setConfigurationAttributeContainers(configurationAttributeContainers: WidgetAttributeContainer[]) {\r\n if (isDevMode()) {\r\n console.debug(\"DashboardService.setConfigurationAttributeContainers()\");\r\n console.debug(configurationAttributeContainers);\r\n }\r\n\r\n this.configurationAttributeContainers = configurationAttributeContainers;\r\n }\r\n\r\n /**\r\n * For a particular attribute, return all current attribute values for it.\r\n *\r\n * @param idWidgetAttribute\r\n * @returns {WidgetInstanceAttributeValue[]}\r\n */\r\n getConfigurationAttributeValues(idWidgetAttribute: number): WidgetAttributeValue[] {\r\n if (isDevMode()) {\r\n console.debug(\"DashboardService.getConfigurationAttributeValues(); idWidgetAttribute = \" + idWidgetAttribute);\r\n }\r\n\r\n let attributeValues: WidgetAttributeValue[] = [];\r\n\r\n if (this.configurationAttributeContainers) {\r\n for (var ac = 0; ac < this.configurationAttributeContainers.length; ac++) {\r\n for (var a = 0; a < this.configurationAttributeContainers[ac].attributes.length; a++) {\r\n if (this.configurationAttributeContainers[ac].attributes[a].idWidgetAttribute === idWidgetAttribute) {\r\n for (var v = 0; v < this.configurationWidgetInstance.attributeValueSet.attributeValues.length; v++) {\r\n if (this.configurationAttributeContainers[ac].attributes[a].idWidgetAttribute === this.configurationWidgetInstance.attributeValueSet.attributeValues[v].idWidgetAttribute) {\r\n attributeValues.push(this.configurationWidgetInstance.attributeValueSet.attributeValues[v]);\r\n }\r\n }\r\n if (attributeValues.length === 0) {\r\n let attributeValue: WidgetAttributeValue = new WidgetAttributeValue();\r\n attributeValue.idWidgetAttributeValue = this.getIdNew();\r\n attributeValue.idWidgetAttribute = idWidgetAttribute;\r\n\r\n if (this.configurationAttributeContainers[ac].attributes[a].defaultValue) {\r\n if (this.configurationAttributeContainers[ac].attributes[a].dataType === \"integer\") {\r\n attributeValue.valueInteger = parseInt(this.configurationAttributeContainers[ac].attributes[a].defaultValue);\r\n } else if (this.configurationAttributeContainers[ac].attributes[a].dataType === \"checkbox\") {\r\n attributeValue.valueBoolean = this.configurationAttributeContainers[ac].attributes[a].defaultValue.toLowerCase() === \"true\" ? true : false;\r\n } else {\r\n attributeValue.valueString = this.configurationAttributeContainers[ac].attributes[a].defaultValue;\r\n }\r\n }\r\n\r\n attributeValues.push(attributeValue);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (isDevMode()) {\r\n console.debug(attributeValues);\r\n }\r\n\r\n return attributeValues;\r\n }\r\n\r\n /**\r\n * After completion of a drag and drop, iterate the element selector with a number starting at 1 and save each\r\n * widget instance with the new sort order. If the existing sort order is the same, then don't update.\r\n *\r\n * @param selectedDashboard\r\n * @param idWidgetInstance\r\n * @param sortOrder\r\n */\r\n saveWidgetSortOrder(selectedDashboard: number, idWidgetInstance: number, sortOrder: number) {\r\n for (var w = 0; w < this.dashboards[selectedDashboard].widgetInstances.length; w++) {\r\n if (this.dashboards[selectedDashboard].widgetInstances[w].idWidgetInstance === idWidgetInstance\r\n && this.dashboards[selectedDashboard].widgetInstances[w].sortOrder !== sortOrder) {\r\n this.http\r\n .post(this.userProfileEndpoint + \"/widget/widget-instance/\" + idWidgetInstance + \"/sort-order\", { \"sortOrder\": sortOrder })\r\n .subscribe(response => {\r\n // 200\r\n });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Set the widget instance to be edited (or added).\r\n *\r\n * @param widgetInstance The widget which may or may not be persisted.\r\n * @param add Indicate if the widget is being added or an existing widget being configured.\r\n */\r\n setConfigurationWidgetInstance(widgetInstance: WidgetInstance, widgetComponent: WidgetComponent, add: boolean) {\r\n this.setConfigWidgetComponent(widgetComponent);\r\n\r\n if (!widgetInstance.attributeValueSet) {\r\n this.http\r\n .put(this.userProfileEndpoint + \"/widget/widget-instance/\" + widgetInstance.idWidgetInstance + \"/attribute-value-set\", JSON.stringify(new WidgetAttributeValueSet()))\r\n .subscribe((response: any) => {\r\n widgetInstance.attributeValueSet = new WidgetAttributeValueSet().deserialize(response);\r\n\r\n this.postSetConfigurationWidgetInstance(widgetInstance, add);\r\n });\r\n } else {\r\n this.postSetConfigurationWidgetInstance(widgetInstance, add);\r\n }\r\n }\r\n\r\n postSetConfigurationWidgetInstance(widgetInstance: WidgetInstance, add: boolean) {\r\n if (isDevMode()) {\r\n console.debug(\"postSetConfigurationWidgetInstance\");\r\n }\r\n\r\n this.configurationWidgetInstance = widgetInstance;\r\n this.configurationWidgetInstanceSubject.next(widgetInstance);\r\n\r\n this.preConfigAttributeValueSet = new WidgetAttributeValueSet().deserialize(widgetInstance.attributeValueSet);\r\n if (isDevMode()) {\r\n console.debug(\"postSetConfigurationWidgetInstance: \" + JSON.stringify(this.preConfigAttributeValueSet));\r\n }\r\n }\r\n\r\n /**\r\n * When values are updated in the add/config screen, push them to the stored instance. If any there are new values,\r\n * then they must be pushed. If there are values that no longer exist, then they must be deleted.\r\n *\r\n * @param idWidgetAttribute\r\n * @param attributeValues\r\n * @returns {WidgetInstanceAttributeValue[]}\r\n */\r\n setConfigurationAttributeValues(idWidgetAttribute: number, attributeValues: WidgetAttributeValue[]): WidgetAttributeValue[] {\r\n /* Add new values. */\r\n for (var i = 0; i < attributeValues.length; i++) {\r\n let exists: boolean = false;\r\n for (var v = 0; v < this.configurationWidgetInstance.attributeValueSet.attributeValues.length; v++) {\r\n if (this.configurationWidgetInstance.attributeValueSet.attributeValues[v].idWidgetAttributeValue === attributeValues[i].idWidgetAttributeValue) {\r\n this.configurationWidgetInstance.attributeValueSet.attributeValues[v] = attributeValues[i];\r\n exists = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!exists) {\r\n if (!attributeValues[i].idWidgetAttributeValue) {\r\n attributeValues[i].idWidgetAttributeValue = this.getIdNew();\r\n }\r\n this.configurationWidgetInstance.attributeValueSet.attributeValues.push(attributeValues[i]);\r\n }\r\n }\r\n\r\n /* Delete old values. */\r\n for (var v = this.configurationWidgetInstance.attributeValueSet.attributeValues.length - 1; v >= 0; v--) {\r\n if (this.configurationWidgetInstance.attributeValueSet.attributeValues[v].idWidgetAttribute !== idWidgetAttribute) {\r\n continue;\r\n }\r\n\r\n let exists: boolean = false;\r\n for (var i = 0; i < attributeValues.length; i++) {\r\n if (this.configurationWidgetInstance.attributeValueSet.attributeValues[v].idWidgetAttributeValue === attributeValues[i].idWidgetAttributeValue) {\r\n exists = true;\r\n break;\r\n }\r\n }\r\n if (!exists) {\r\n this.configurationWidgetInstance.attributeValueSet.attributeValues.splice(v, 1);\r\n }\r\n }\r\n\r\n return attributeValues;\r\n }\r\n\r\n /**\r\n * Maintain uniqueness of new instances. At some point we must decide when to persist to database to have the ids generated.\r\n *\r\n * @returns {number}\r\n */\r\n getIdNew(): number {\r\n return this.idNew--;\r\n }\r\n\r\n cancelConfigurationWidget() {\r\n if (isDevMode()) {\r\n console.debug(\"cancelConfigurationWidget: \" + JSON.stringify(this.preConfigAttributeValueSet));\r\n }\r\n\r\n let dashboardIndex: number = undefined;\r\n let widgetIndex: number = undefined;\r\n\r\n for (var d = 0; d < this.dashboards.length; d++) {\r\n for (var w = 0; w < this.dashboards[d].widgetInstances.length; w++) {\r\n if (this.dashboards[d].widgetInstances[w].idWidgetInstance === this.configurationWidgetInstance.idWidgetInstance) {\r\n dashboardIndex = d;\r\n widgetIndex = w;\r\n break;\r\n }\r\n }\r\n if (dashboardIndex && widgetIndex) {\r\n break;\r\n }\r\n }\r\n\r\n this.dashboards[dashboardIndex].widgetInstances[widgetIndex].attributeValueSet = this.preConfigAttributeValueSet;\r\n this.configurationWidgetInstanceSubject.next(undefined);\r\n this.updateWidgetInstanceSubject.next(this.dashboards[dashboardIndex].widgetInstances[widgetIndex]);\r\n }\r\n\r\n /**\r\n * When attributes are finalized after adding/editing a widget, this will set those attributes to the widget instance.\r\n */\r\n saveConfigurationWidget() {\r\n let dashboardIndex: number = undefined;\r\n let widgetIndex: number = undefined;\r\n\r\n for (var d = 0; d < this.dashboards.length; d++) {\r\n for (var w = 0; w < this.dashboards[d].widgetInstances.length; w++) {\r\n if (this.dashboards[d].widgetInstances[w].idWidgetInstance === this.configurationWidgetInstance.idWidgetInstance) {\r\n dashboardIndex = d;\r\n widgetIndex = w;\r\n break;\r\n }\r\n }\r\n if (dashboardIndex && widgetIndex) {\r\n break;\r\n }\r\n }\r\n\r\n let idWidgetInstance: number = this.dashboards[dashboardIndex].widgetInstances[widgetIndex].idWidgetInstance;\r\n\r\n this.http\r\n .post(this.userProfileEndpoint + \"/widget/widget-instance/\" + idWidgetInstance + \"/attribute-value-set\", JSON.stringify(this.configurationWidgetInstance.attributeValueSet))\r\n .subscribe(((response: any) => {\r\n this.dashboards[dashboardIndex].widgetInstances[widgetIndex].attributeValueSet = new WidgetAttributeValueSet().deserialize(response);\r\n\r\n this.updateWidgetInstanceSubject.next(this.dashboards[dashboardIndex].widgetInstances[widgetIndex]);\r\n }));\r\n\r\n this.configurationWidgetInstance = undefined;\r\n this.configurationWidgetInstanceSubject.next(undefined);\r\n }\r\n\r\n /**\r\n * Add a new widget into the currently selected dashboard.\r\n *\r\n * @param selectedWidget\r\n * @param widgetInstance\r\n * @param dashboardIndex\r\n * @param step\r\n */\r\n addWidget(selectedWidget: Widget, widgetInstance: WidgetInstance, dashboardIndex: number, step: number) {\r\n if (step === 2) {\r\n widgetInstance = this.configurationWidgetInstance;\r\n }\r\n\t widgetInstance.idDashboard = this.dashboards[dashboardIndex].idDashboard;\r\n widgetInstance.sortOrder = this.dashboards[dashboardIndex].widgetInstances.length;\r\n\t widgetInstance.idReset();\r\n\r\n this.http\r\n .put(this.userProfileEndpoint + \"/widget/widget-instance/\", JSON.stringify(widgetInstance))\r\n .subscribe((response: any) => {\r\n widgetInstance = new WidgetInstance().deserialize(response);\r\n this.dashboards[dashboardIndex].widgetInstances.push(widgetInstance);\r\n this.dashboardsState.next(this.dashboards);\r\n\r\n if (widgetInstance.widget && widgetInstance.widget.hasAttributes()) {\r\n this.setConfigurationWidgetInstance(widgetInstance, this.getWidgetComponent(widgetInstance.idWidgetInstance), false);\r\n }\r\n });\r\n }\r\n\r\n getWidget(component: string): Observable<Widget> {\r\n return this.http\r\n .get(this.userProfileEndpoint + \"/widget/component/\" + component)\r\n .pipe(map((response: any) => new Widget().deserialize(response)));\r\n }\r\n\r\n addDashboard(dashboard: Dashboard): Observable<number> {\r\n let newIndex: Observable<number> = new Observable(observer => {\r\n this.http\r\n .put(this.userProfileEndpoint + \"/dashboard/\", dashboard)\r\n .pipe(map((response: any) => new Dashboard().deserialize(response)))\r\n .subscribe((dashboard: Dashboard) => {\r\n this.dashboards.push(dashboard);\r\n observer.next(this.dashboards.length - 1);\r\n });\r\n });\r\n\r\n return newIndex;\r\n }\r\n\r\n deleteDashboard(index: number): Observable<number> {\r\n let newIndex: Observable<number> = new Observable(observer => {\r\n this.http\r\n .delete(this.userProfileEndpoint + \"/dashboard/\" + this.dashboards[index].idDashboard, {})\r\n .subscribe((response: any) => {\r\n this.dashboards.splice(index, 1);\r\n if (this.dashboards.length === index) {\r\n observer.next(index - 1);\r\n } else {\r\n observer.next(index);\r\n }\r\n this.dashboardsState.next(this.dashboards);\r\n });\r\n });\r\n\r\n return newIndex;\r\n }\r\n\r\n deleteWidget(widgetInstance: WidgetInstance) {\r\n this.http\r\n .delete(this.userProfileEndpoint + \"/widget/widget-instance/\" + widgetInstance.idWidgetInstance, {})\r\n .subscribe((response: any) => {\r\n for (var d = 0; d < this.dashboards.length; d++) {\r\n for (var w = 0; w < this.dashboards[d].widgetInstances.length; w++) {\r\n if (this.dashboards[d].widgetInstances[w].idWidgetInstance === widgetInstance.idWidgetInstance) {\r\n this.dashboards[d].widgetInstances.splice(w, 1);\r\n break;\r\n }\r\n }\r\n }\r\n this.configurationWidgetInstanceSubject.next(undefined);\r\n });\r\n }\r\n\r\n /**\r\n * Returns a subject which is used to notify widget add/edit windows when the widget is finished rendering. In some\r\n * cases attribute choices are based on data which the widget might fetch. Before trying to render attributes for editing\r\n * that widget, we have to wait for the data get to finish so the attribute choices will be available.\r\n *\r\n * @returns {Subject<boolean>}\r\n */\r\n getWidgetRendered(): Subject<boolean> {\r\n return this.widgetRendered;\r\n }\r\n\r\n /**\r\n * Allows any listeners to be made aware of when a widget rendering has finished.\r\n *\r\n * @param widgetRendered\r\n */\r\n setWidgetRendered(widgetRendered: boolean) {\r\n this.widgetRendered.next(widgetRendered);\r\n }\r\n\r\n getEditMode(): Subject<boolean> {\r\n return this.editModeSubject;\r\n }\r\n\r\n setEditMode(editMode: boolean) {\r\n this.editMode = editMode;\r\n this.editModeSubject.next(this.editMode);\r\n this.configurationWidgetInstanceSubject.next(undefined);\r\n }\r\n\r\n toggleEditMode() {\r\n this.editMode = !this.editMode;\r\n this.editModeSubject.next(this.editMode);\r\n }\r\n\r\n setWidgetAttributeUpdatedSubject(idWidgetAttribute: number) {\r\n this.widgetAttributeUpdatedSubject.next(idWidgetAttribute);\r\n }\r\n\r\n getWidgetAttributeUpdatedSubject(): Subject<number> {\r\n return this.widgetAttributeUpdatedSubject;\r\n }\r\n\r\n getWidgetComponent(idWidgetInstance: number): WidgetComponent {\r\n return this.registeredWidgetComponents.get(idWidgetInstance);\r\n }\r\n\r\n registerWidgetComponent(idWidgetInstance: number, widgetComponent: WidgetComponent) {\r\n this.registeredWidgetComponents.set(idWidgetInstance, widgetComponent);\r\n\r\n if (!this.widgetComponentSubjects.has(idWidgetInstance)) {\r\n this.widgetComponentSubjects.set(idWidgetInstance, new BehaviorSubject<WidgetComponent>(widgetComponent));\r\n }\r\n this.widgetComponentSubjects.get(idWidgetInstance).next(widgetComponent);\r\n }\r\n\r\n unregisterWidgetcomponent(idWidgetInstance: number) {\r\n this.registeredWidgetComponents.delete(idWidgetInstance);\r\n }\r\n\r\n getWidgetComponentSubject(idWidgetInstance: number): Subject<WidgetComponent> {\r\n if (!this.widgetComponentSubjects.has(idWidgetInstance)) {\r\n this.widgetComponentSubjects.set(idWidgetInstance, new BehaviorSubject<WidgetComponent>(undefined));\r\n }\r\n return this.widgetComponentSubjects.get(idWidgetInstance);\r\n }\r\n\r\n getWidgetComponentCreated(): Subject<number> {\r\n return this.widgetComponentCreated;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {Component, isDevMode, Output, EventEmitter} from \"@angular/core\";\r\n\r\nimport {BehaviorSubject, Subject} from \"rxjs\";\r\n\r\nimport {Widget, WidgetAttributeChoice, WidgetAttributeContainer, WidgetAttributeValue, WidgetInstance, WidgetAttribute} from \"../model/model\";\r\nimport {DashboardService} from \"../services/dashboard.service\";\r\n\r\nconst CARD_CLASS: number = -1;\r\nconst SHOW_TITLE: number = -2;\r\n\r\n/**\r\n * @since 1.0.0\r\n */\r\n@Component({\r\n selector: \"widget\",\r\n template: `\r\n <ng-template></ng-template>\r\n `\r\n})\r\nexport class WidgetComponent {\r\n\r\n @Output() cardClassEvent: EventEmitter<string> = new EventEmitter<string>();\r\n\r\n public showTitle: boolean = true;\r\n public cardClass: string = \"one-third\";\r\n public cardPaddingClass: string;\r\n\r\n public widget: Widget;\r\n public widgetInstance: WidgetInstance;\r\n\r\n public rendered: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\r\n public attributeContainers: BehaviorSubject<Map<string, WidgetAttributeContainer>> = new BehaviorSubject<Map<string, WidgetAttributeContainer>>(undefined);\r\n\r\n protected dashboardService: DashboardService;\r\n\r\n private initializedSubject: Subject<boolean> = new Subject<boolean>();\r\n\r\n constructor(dashboardService: DashboardService) {\r\n if (isDevMode()) {\r\n console.debug(\"WidgetComponent()\");\r\n }\r\n\r\n this.dashboardService = dashboardService;\r\n\r\n this.rendered.subscribe((rendered: boolean) => {\r\n if (rendered) {\r\n\t this.attributeContainers.next(this.getAttributeContainers());\r\n\t }\r\n\t });\r\n }\r\n\r\n config(attributeValues: WidgetAttributeValue[]): void {\r\n let commonAttributes: WidgetAttribute[] = this.dashboardService.getCommonAttributes().get(\"Common\").attributes;\r\n\r\n if (isDevMode()) {\r\n console.debug(\"Widget.config\");\r\n console.debug(commonAttributes);\r\n }\r\n\r\n if (!commonAttributes) {\r\n return;\r\n }\r\n\r\n if (this.widgetInstance && this.widgetInstance.widget.attributeValueSet && this.widgetInstance.widget.attributeValueSet.attributeValues) {\r\n for (let commonAttribute of commonAttributes) {\r\n for (var v = 0; v < this.widgetInstance.widget.attributeValueSet.attributeValues.length; v++) {\r\n if (commonAttribute.idWidgetAttribute === this.widgetInstance.widget.attributeValueSet.attributeValues[v].idWidgetAttribute) {\r\n if (commonAttribute.name === \"cardClass\" || commonAttribute.name === \"showTitle\") {\r\n this.setValues(commonAttribute.name, [this.widgetInstance.widget.attributeValueSet.attributeValues[v]]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (this.widgetInstance && this.widgetInstance.attributeValueSet && this.widgetInstance.attributeValueSet.attributeValues) {\r\n for (let commonAttribute of commonAttributes) {\r\n for (var v = 0; v < this.widgetInstance.attributeValueSet.attributeValues.length; v++) {\r\n if (commonAttribute.idWidgetAttribute === this.widgetInstance.attributeValueSet.attributeValues[v].idWidgetAttribute) {\r\n if (commonAttribute.name === \"cardClass\" || commonAttribute.name === \"showTitle\") {\r\n this.setValues(commonAttribute.name, [this.widgetInstance.attributeValueSet.attributeValues[v]]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n getInitializedSubject(): Subject<boolean> {\r\n return this.initializedSubject;\r\n }\r\n\r\n setWidget(widget: Widget) {\r\n this.widget = widget;\r\n }\r\n\r\n render() {\r\n this.rendered.next(true);\r\n }\r\n\r\n tryRender() {\r\n // Override\r\n }\r\n\r\n setValues(name: string, attributeValues: WidgetAttributeValue[]): boolean {\r\n if (isDevMode()) {\r\n console.debug(\"WidgetComponent.setValues: \" + name);\r\n }\r\n\r\n if (!attributeValues || attributeValues.length === 0) {\r\n return false;\r\n } if (name === \"cardClass\") {\r\n this.cardClass = attributeValues[0].valueString;\r\n this.cardClassEvent.emit(this.cardClass);\r\n } else if (name === \"showTitle\") {\r\n this.showTitle = attributeValues[0].valueBoolean;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n getWidgetChoices(name: string): Subject<WidgetAttributeChoice[]> {\r\n return undefined;\r\n }\r\n\r\n setWidgetInstance(widgetInstance: WidgetInstance) {\r\n this.widgetInstance = widgetInstance;\r\n }\r\n\r\n getWidgetInstance() {\r\n return this.widgetInstance;\r\n }\r\n\r\n getCardClass() {\r\n return this.cardClass;\r\n }\r\n\r\n getCardPaddingClass() {\r\n return this.cardPaddingClass;\r\n }\r\n\r\n getParentDimension(htmlElement: HTMLElement, type: string) {\r\n var x = 300;\r\n let parent: any = htmlElement.parentElement;\r\n while (parent) {\r\n if (parent.className.includes(\"widget-host\")) {\r\n break;\r\n }\r\n parent = parent.parentElement;\r\n }\r\n\r\n if (parent) {\r\n if (type === \"width\") {\r\n x = parent.offsetWidth;\r\n } else {\r\n x = parent.offsetHeight;\r\n }\r\n }\r\n return (x <= 0) ? 300 : x;\r\n }\r\n\r\n getAttributeContainers(): Map<string, WidgetAttributeContainer> {\r\n if (this.widgetInstance) {\r\n if (isDevMode()) {\r\n console.debug(\"WidgetComponent.getAttributeContainers from \" + this.widgetInstance.widget.name);\r\n }\r\n return this.widgetInstance.widget.attributeContainerMap;\r\n } else if (this.widget) {\r\n if (isDevMode()) {\r\n console.debug(\"WidgetComponent.getAttributeContainers from \" + this.widget.name);\r\n }\r\n return this.widget.attributeContainerMap;\r\n } else {\r\n if (isDevMode()) {\r\n console.debug(\"WidgetComponent.getAttributeContainers from none\");\r\n }\r\n return new Map<string, WidgetAttributeContainer>();\r\n }\r\n }\r\n\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {Component, EventEmitter, Input, isDevMode, OnChanges, Output, SimpleChange, ViewEncapsulation} from \"@angular/core\";\r\n\r\nimport {Subscription} from \"rxjs\";\r\n\r\nimport {WidgetAttributeValue, WidgetAttribute, WidgetAttributeChoice, WidgetInstance} from \"../model/model\";\r\nimport {DashboardService} from \"../services/dashboard.service\";\r\nimport {WidgetComponent} from \"../widget/widget.component\";\r\n\r\n/**\r\n * @since 1.0.0\r\n */\r\n@Component({\r\n selector: \"widget-attribute\",\r\n template: `\r\n <ng-container *ngIf=\"init && attributeValues?.length > 0\">\r\n <div *ngIf=\"attribute.dataType === 'string'\" class=\"form-group\">\r\n <label for=\"attr-string\" class=\"bold\">{{attribute.name}}</label>\r\n <input id=\"attr-string\"\r\n class=\"form-control\"\r\n [ngModel]=\"attributeValues[0].valueString\"\r\n (keypress)=\"onChangeString($event)\" />\r\n </div>\r\n <div *ngIf=\"attribute.dataType === 'integer'\" class=\"form-group\">\r\n <label for=\"attr-integer\" class=\"bold\">{{attribute.name}}</label>\r\n <input id=\"attr-integer\"\r\n class=\"form-control\"\r\n [ngModel]=\"attributeValues[0].valueInteger\"\r\n (keypress)=\"onChangeInteger($event)\" />\r\n </div>\r\n <div *ngIf=\"attribute.dataType === 'color'\" class=\"form-group\">\r\n <label for=\"attr-color\" class=\"bold\">{{attribute.display}}</label>\r\n <input id=\"attr-color\"\r\n class=\"form-control\"\r\n [colorPicker]=\"attributeValues[0].valueString\"\r\n (colorPickerChange)=\"onChangeColor($event)\"\r\n [style.background]=\"attributeValues[0].valueString\"\r\n [cpPositionRelativeToArrow]=\"true\"\r\n [cpCancelButton]=\"true\"\r\n [cpOKButtonClass]=\"'btn btn-primary btn-xs'\"\r\n [cpPosition]=\"'bottom'\"/>\r\n </div>\r\n <div *ngIf=\"attribute.dataType === 'choice'\" class=\"form-group\">\r\n <label for=\"attr-choice\" class=\"bold\">{{attribute.display}}</label>\r\n <select id=\"attr-choice\"\r\n class=\"form-control\"\r\n [ngModel]=\"attributeValues[0].valueString\"\r\n (ngModelChange)=\"onChoiceChange($event)\" >\r\n <option *ngFor=\"let choice of attribute.widgetAttributeChoices\"\r\n [ngValue]=\"choice.value\"\r\n [selected]=\"(attributeValues[0].valueString === choice.value) ? true : undefined\">\r\n {{choice.display}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"attribute.dataType === 'checkbox'\" class=\"form-group row\">\r\n <label for=\"attr-checkbox\" class=\"col-6 bold\">{{attribute.display}}</label>\r\n <input id=\"attr-checkbox\" class=\"col-6 form-check-input centered\" type=\"checkbox\" [checked]=\"attributeValues[0].valueBoolean\" (change)=\"onCheckboxChange($event)\" />\r\n </div>\r\n <div *ngIf=\"attribute.dataType === 'graphical-choice'\" class=\"form-group\">\r\n <label for=\"attr-choice\" class=\"bold\">{{attribute.display}}</label>\r\n <div class=\"card-group\">\r\n <ng-template ngFor let-choice [ngForOf]=\"attribute.widgetAttributeChoices\">\r\n <span class=\"graphical-choice\"\r\n [ngClass]=\"attributeValues[0].valueString === choice.value ? 'selected' : ''\"\r\n (click)=\"setGraphicalChoice(choice)\">\r\n <ng-container *ngIf=\"choice.display\">\r\n <img *ngIf=\"choice.display.indexOf('.svg') > 0\"\r\n [src]=\"choice.display\" />\r\n <ng-container *ngIf=\"choice.display.indexOf('.svg') === -1\">\r\n <i class=\"{{choice.display}} fa-2x\"></i>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!choice.display\">\r\n <i class=\"fas fa-question-circle fa-2x\"></i>\r\n </ng-container>\r\n </span>\r\n </ng-template>\r\n </div>\r\n </div>\r\n <div *ngIf=\"attribute.dataType === 'widget-choice'\" class=\"form-group\">\r\n <div ngbDropdown [autoClose]=\"true\" class=\"d-inline-block\">\r\n <button class=\"btn btn-outline-primary\" id=\"attr-widget-choice\" ngbDropdownToggle>{{attribute.display}}</button>\r\n <div ngbDropdownMenu class=\"dropdown-menu\" aria-labelledby=\"attr-widget-choice\">\r\n <ng-template ngFor let-choice [ngForOf]=\"attribute.widgetAttributeChoices\">\r\n <a class=\"dropdown-item bold\" (click)=\"setWidgetChoice(choice)\">{{choice.display}}</a>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"attribute.dataType === 'widget-multi-choice'\" class=\"form-group\">\r\n <div ngbDropdown [autoClose]=\"true\" class=\"d-inline-block\">\r\n <button class=\"btn btn-outline-primary\" id=\"attr-widget-choice\" ngbDropdownToggle>{{attribute.display}}</button>\r\n <div ngbDropdownMenu class=\"dropdown-menu\" aria-labelledby=\"attr-widget-choice\">\r\n <ng-template ngFor let-choice [ngForOf]=\"attribute.widgetAttributeChoices\">\r\n <div>\r\n <label for=\"attr-checkbox\" class=\"bold\">{{choice.display}}</label>\r\n <input id=\"attr-checkbox\"\r\n class=\"form-control checkbox\"\r\n type=\"checkbox\" [checked]=\"isMultiSelected(choice)\" (change)=\"setWidgetMultiChoice(choice)\" />\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n `,\r\n styles: [`\r\n .color-picker {\r\n left: inherit !important;\r\n top: inherit !important;\r\n }\r\n div.color-picker {\r\n left: inherit !important;\r\n top: inherit !important;\r\n }\r\n .form-control.checkbox {\r\n width: inherit;\r\n float: left;\r\n margin-top: 5px;\r\n margin-left: 4px;\r\n margin-right: 4px;\r\n }\r\n .graphical-choice {\r\n width: 64px;\r\n padding: 5px;\r\n }\r\n .graphical-choice.selected {\r\n border: red 1px solid !important;\r\n border-radius: 10px !important;\r\n }\r\n label.bold {\r\n font-weight: bold;\r\n }\r\n .form-control.centered {\r\n margin-top: auto;\r\n margin-bottom: auto;\r\n }\r\n .form-check-input {\r\n height: 1rem;\r\n }\r\n `],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class WidgetAttributeComponent implements OnChanges {\r\n\r\n @Input() idWidgetAttributeValueSet: number;\r\n @Input() attribute: WidgetAttribute;\r\n @Input() widgetComponent: WidgetComponent;\r\n\r\n @Output() changed: EventEmitter<boolean> = new EventEmitter<boolean>();\r\n\r\n public init: boolean = false;\r\n public attributeValues: WidgetAttributeValue[] = [];\r\n\r\n private widgetAttributeUpdatedSubscription: Subscription;\r\n private widgetAttributeChoicesSubscription: Subscription;\r\n\r\n constructor(private dashboardService: DashboardService) {}\r\n\r\n ngOnInit() {\r\n this.init = false;\r\n\r\n this.dashboardService.configurationWidgetInstanceSubject.subscribe((widgetInstance: WidgetInstance) => {\r\n if (widgetInstance) {\r\n this.refresh();\r\n }\r\n });\r\n\r\n this.widgetAttributeUpdatedSubscription = this.dashboardService.getWidgetAttributeUpdatedSubject().subscribe((idWidgetAttribute: number) => {\r\n this.refresh();\r\n });\r\n\r\n this.refresh();\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.widgetAttributeUpdatedSubscription) {\r\n this.widgetAttributeUpdatedSubscription.unsubscribe();\r\n }\r\n if (this.widgetAttributeChoicesSubscription) {\r\n this.widgetAttributeChoicesSubscription.unsubscribe();\r\n }\r\n }\r\n\r\n ngOnChanges(changes: {[propName: string]: SimpleChange}) {\r\n if (this.init && changes[\"attribute\"]) {\r\n this.refresh();\r\n }\r\n }\r\n\r\n refresh() {\r\n if (isDevMode()) {\r\n console.debug(\"refresh: \" + this.attribute.name);\r\n }\r\n\r\n this.attributeValues = this.dashboardService.getConfigurationAttributeValues(this.attribute.idWidgetAttribute);\r\n\r\n if (this.attribute.dataType === \"widget-choice\" || this.attribute.dataType === \"widget-multi-choice\") {\r\n this.widgetAttributeChoicesSubscription = this.widgetComponent.getWidgetChoices(this.attribute.name).subscribe((widgetAttributeChoices: WidgetAttributeChoice[]) => {\r\n this.attribute.widgetAttributeChoices = widgetAttributeChoices;\r\n this.init = true;\r\n });\r\n } else {\r\n this.init = true;\r\n }\r\n }\r\n\r\n onCheckboxChange(value: boolean) {\r\n // TODO: Implement\r\n }\r\n\r\n onChangeColor(color: string) {\r\n if (this.init && this.attributeValues[0].valueString !== color) {\r\n this.attributeValues[0].valueString = color;\r\n this.attributeValues = this.dashboardService.setConfigurationAttributeValues(this.attribute.idWidgetAttribute, this.attributeValues);\r\n this.updateConfigurationWidgetValues(this.attributeValues);\r\n }\r\n }\r\n\r\n onChoiceChange(value: string) {\r\n if (this.init && this.attributeValues[0].valueString !== value) {\r\n this.attributeValues[0].valueString = value;\r\n this.attributeValues = this.dashboardService.setConfigurationAttributeValues(this.attribute.idWidgetAttribute, this.attributeValues);\r\n this.updateConfigurationWidgetValues(this.attributeValues);\r\n }\r\n }\r\n\r\n onChangeString(event: KeyboardEvent) {\r\n if (this.init) {\r\n if (event.keyCode === 13 && this.attributeValues[0].valueString !== event.target[\"value\"]) {\r\n this.attributeValues[0].valueString = event.target[\"value\"];\r\n this.attributeValues = this.dashboardService.setConfigurationAttributeValues(this.attribute.idWidgetAttribute, this.attributeValues);\r\n this.updateConfigurationWidgetValues(this.attributeValues);\r\n }\r\n }\r\n }\r\n\r\n onChangeInteger(event: KeyboardEvent) {\r\n if (this.init) {\r\n if (event.keyCode === 13 && this.attributeValues[0].valueInteger !== event.target[\"value\"]) {\r\n this.attributeValues[0].valueInteger = event.target[\"value\"];\r\n this.attributeValues = this.dashboardService.setConfigurationAttributeValues(this.attribute.idWidgetAttribute, this.attributeValues);\r\n this.updateConfigurationWidgetValues(this.attributeValues);\r\n }\r\n }\r\n }\r\n\r\n setGraphicalChoice(widgetAttributeChoice: WidgetAttributeChoice) {\r\n if (this.init && this.attributeValues[0].valueString !== widgetAttributeChoice.value) {\r\n this.attributeValues[0].valueString = widgetAttributeChoice.value;\r\n this.attributeValues = this.dashboardService.setConfigurationAttributeValues(this.attribute.idWidgetAttribute, this.attributeValues);\r\n this.updateConfigurationWidgetValues(this.attributeValues);\r\n }\r\n }\r\n\r\n isMultiSelected(widgetAttributeChoice: WidgetAttributeChoice) {\r\n for (var i = 0; i < this.attributeValues.length; i++) {\r\n if (this.attributeValues[i].valueString === widgetAttributeChoice.value) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n setWidgetChoice(widgetAttributeChoice: WidgetAttributeChoice) {\r\n if (isDevMode()) {\r\n console.debug(\"setWidgetChoice: \" + widgetAttributeChoice.idWidgetAttributeChoice);\r\n }\r\n\r\n if (this.init && this.attributeValues[0].valueString !== widgetAttributeChoice.value) {\r\n this.attributeValues[0].valueString = widgetAttributeChoice.value;\r\n this.attributeValues = this.dashboardService.setConfigurationAttributeValues(this.attribute.idWidgetAttribute, this.attributeValues);\r\n this.updateConfigurationWidgetValues(this.attributeValues);\r\n this.changed.emit(true);\r\n\r\n this.dashboardService.setWidgetAttributeUpdatedSubject(this.attribute.idWidgetAttribute);\r\n }\r\n }\r\n\r\n setWidgetMultiChoice(widgetAttributeChoice: WidgetAttributeChoice) {\r\n if (this.init) {\r\n let exists: boolean = false;\r\n for (var i = 0; i < this.attributeValues.length; i++) {\r\n if (this.attributeValues[i].valueString === widgetAttributeChoice.value) {\r\n exists = true;\r\n this.attributeValues.splice(i, 1);\r\n break;\r\n }\r\n }\r\n if (!exists) {\r\n let value: WidgetAttributeValue = new WidgetAttributeValue();\r\n value.idWidgetAttributeValue = this.dashboardService.getIdNew();\r\n value.idWidgetAttribute = this.attribute.idWidgetAttribute;\r\n value.valueString = widgetAttributeChoice.value;\r\n this.attributeValues.push(value);\r\n }\r\n\r\n this.attributeValues = this.dashboardService.setConfigurationAttributeValues(this.attribute.idWidgetAttribute, this.attributeValues);\r\n this.updateConfigurationWidgetValues(this.attributeValues);\r\n this.changed.emit(true);\r\n }\r\n }\r\n\r\n updateConfigurationWidgetValues(attributeValues: WidgetAttributeValue[]) {\r\n if (isDevMode()) {\r\n console.debug(\"updateConfigurationWidgetValues\");\r\n }\r\n\r\n // If setValues returns true, re-config the widget.\r\n if (this.widgetComponent.setValues(this.attribute.name, attributeValues)) {\r\n this.widgetComponent.config(this.dashboardService.getConfigWidgetComponent().widgetInstance.attributeValueSet.attributeValues);\r\n }\r\n }\r\n}\r\n","import {Pipe} from \"@angular/core\";\r\n\r\nimport {WidgetAttributeContainer} from \"../model/widget-attribute-container.entity\";\r\n\r\n@Pipe({\r\n name: \"hasEditableAttributes\",\r\n pure: true\r\n})\r\nexport class HasEditableAttributesPipe {\r\n\r\n transform(list: WidgetAttributeContainer[]): any {\r\n return list.filter((wac: WidgetAttributeContainer) => {\r\n if (wac.attributes && wac.attributes.length > 0) {\r\n for (let attribute of wac.attributes) {\r\n if (attribute.userEditable) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n });\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {Component, HostBinding, isDevMode} from \"@angular/core\";\r\n\r\nimport {Subscription} from \"rxjs\";\r\n\r\nimport {WidgetAttribute, WidgetAttributeContainer, WidgetInstance, Widget} from \"../model/model\";\r\nimport {DashboardService} from \"../services/dashboard.service\";\r\nimport {WidgetComponent} from \"../widget/widget.component\";\r\n\r\n/**\r\n * @since 1.0.0\r\n */\r\n@Component({\r\n selector: \"widget-configure\",\r\n template: `\r\n <ng-container *ngIf=\"widgetInstance && selectedAttributeContainer\">\r\n <div class=\"attribute-container-header-parent\">\r\n <ng-template ngFor let-attributeContainer let-i=\"index\" [ngForOf]=\"attributeContainers | hasEditableAttributes\">\r\n <div (click)=\"selectedAttributeContainer = attributeContainer; iSelected = i;\"\r\n class=\"attribute-container-header\"\r\n [ngClass]=\"selectedAttributeContainer.name === attributeContainer.name ? 'selected' : ''\"\r\n [ngbTooltip]=\"attributeContainer.name\">\r\n <span *ngIf=\"selectedAttributeContainer.name === attributeContainer.name\">{{selectedAttributeContainer.name}}</span>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <div class=\"d-flex flex-column flex-grow-1 attribute-container\">\r\n <div class=\"d-flex flex-column flex-grow-1 y-auto\">\r\n <ng-template ngFor let-attribute [ngForOf]=\"selectedAttributeContainer.attributes\">\r\n <widget-attribute [attribute]=\"attribute\"\r\n [idWidgetAttributeValueSet]=\"widgetInstance.attributeValueSet.idWidgetAttributeValueSet\"\r\n [widgetComponent]=\"widgetComponent\"\r\n *ngIf=\"attribute.userEditable\"></widget-attribute>\r\n </ng-template>\r\n </div>\r\n </div>\r\n <div *ngIf=\"attributeContainers.length === 0\">\r\n There are no configuration options for this widget.\r\n </div>\r\n </ng-container>\r\n `,\r\n styles: [`\r\n\r\n .attribute-container-header-parent {\r\n border-bottom: black 2px solid;\r\n padding-bottom: 5px;\r\n margin-bottom: 5px;\r\n }\r\n\r\n .attribute-container-header {\r\n display: inline-block;\r\n width: 35px;\r\n background-color: #66aaff;\r\n border: black 1px solid;\r\n border-radius: 20px;\r\n padding: 4px;\r\n font-size: large;\r\n font-weight: bold;\r\n text-align: center;\r\n min-height: 35px;\r\n vertical-align: top;\r\n }\r\n\r\n .attribute-container-header.selected {\r\n width: 45%;\r\n }\r\n\r\n .attribute-container {\r\n overflow-y: auto;\r\n overflow-x: hidden;\r\n }\r\n\r\n `]\r\n})\r\nexport class WidgetConfigureComponent {\r\n\r\n @HostBinding(\"class\") classList: string = \"outlet-column\";\r\n\r\n public iSelected: number;\r\n public selectedAttributeContainer: WidgetAttributeContainer;\r\n public attributeContainers: WidgetAttributeContainer[] = [];\r\n\r\n widgetInstance: WidgetInstance;\r\n widgetComponent: WidgetComponent;\r\n attributeContainerMap: Map<string, WidgetAttributeContainer>;\r\n\r\n widgetComponentSubscription: Subscription;\r\n attributeContainersSubscription: Subscription;\r\n\r\n constructor(private dashboardService: DashboardService) {}\r\n\r\n ngOnInit() {\r\n this.dashboardService.configurationWidgetInstanceSubject.subscribe((widgetInstance: WidgetInstance) => {\r\n if (isDevMode()) {\r\n console.debug(\"WidgetConfigureComponent.configurationWidgetInstanceSubject.subscribe:\");\r\n console.debug(widgetInstance);\r\n }\r\n\r\n if (!widgetInstance) {\r\n this.widgetInstance = undefined;\r\n this.widgetComponent = undefined;\r\n this.selectedAttributeContainer = undefined;\r\n this.iSelected = undefined;\r\n\r\n\t\t this.unsubscribe();\r\n } else {\r\n this.widgetInstance = widgetInstance;\r\n\r\n this.widgetComponentSubscription = this.dashboardService.getWidgetComponentSubject(widgetInstance.idWidgetInstance)\r\n .subscribe((widgetComponent: WidgetComponent) => {\r\n if (isDevMode()) {\r\n console.debug(\"WidgetConfigureComponent.getWidgetComponentSubject.subscribe\");\r\n console.debug(widgetComponent);\r\n }\r\n\r\n if (this.attributeContainersSubscription) {\r\n this.attributeContainersSubscription.unsubscribe();\r\n }\r\n\r\n this.widgetComponent = widgetComponent;\r\n if (this.widgetComponent) {\r\n\t\t\t this.widgetComponent.config(undefined);\r\n\r\n this.attributeContainersSubscription = this.widgetComponent.attributeContainers.subscribe((attributeContainers: Map<string, WidgetAttributeContainer>) => {\r\n if (isDevMode()) {\r\n console.debug(\"WidgetConfigureComponent.attributeContainersSubscription\");\r\n console.debug(attributeContainers);\r\n }\r\n\r\n if (attributeContainers) {\r\n this.attributeContainerMap = Widget.merge(attributeContainers, this.dashboardService.getCommonAttributes());\r\n this.generateAttributeContainers();\r\n } else {\r\n this.attributeContainerMap = this.dashboardService.getCommonAttributes();\r\n this.generateAttributeContainers();\r\n }\r\n\t\t\t });\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.unsubscribe();\r\n }\r\n\r\n unsubscribe() {\r\n if (this.widgetComponentSubscription) {\r\n this.widgetComponentSubscription.unsubscribe();\r\n }\r\n if (this.attributeContainersSubscription) {\r\n this.attributeContainersSubscription.unsubscribe();\r\n }\r\n }\r\n\r\n /**\r\n * Though a map is used to override attributes easily, transfer back to an array for easy sorting and to make\r\n * the ngFor happy.\r\n */\r\n generateAttributeContainers() {\r\n if (isDevMode()) {\r\n console.debug(\"WidgetConfigureComponent.generateAttributeContainers: \" + this.attributeContainerMap.size);\r\n }\r\n\r\n let tempContainers: WidgetAttributeContainer[] = [];\r\n for (let attributeContainer of this.attributeContainerMap.values()) {\r\n if (attributeContainer.hidden) {\r\n continue;\r\n }\r\n\r\n attributeContainer.attributes = [];\r\n for (let attribute of attributeContainer.attributeMap.values()) {\r\n /*if (attribute.userEditable) {\r\n attributeContainer.attributes.push(attribute);\r\n }*/\r\n attributeContainer.attributes.push(attribute);\r\n }\r\n attributeContainer.attributes.sort((a: WidgetAttribute, b: WidgetAttribute) => {\r\n if (a.sortOrder < b.sortOrder) {\r\n return -1;\r\n } else if (a.sortOrder > b.sortOrder) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n });\r\n\r\n tempContainers.push(attributeContainer);\r\n }\r\n\r\n tempContainers.sort((a: WidgetAttributeContainer, b: WidgetAttributeContainer) => {\r\n if (a.sortOrder < b.sortOrder) {\r\n return -1;\r\n } else if (a.sortOrder > b.sortOrder) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n });\r\n\r\n if (this.attributeContainers.length === 0 || !this.wacEquals(tempContainers, this.attributeContainers)) {\r\n this.attributeContainers = tempContainers;\r\n\r\n if (this.iSelected && this.iSelected < this.attributeContainers.length && this.selectedAttributeContainer.name === this.attributeContainers[this.iSelected].name) {\r\n this.selectedAttributeContainer = this.attributeContainers[this.iSelected];\r\n } else if (this.attributeContainers.length > 0) {\r\n this.selectedAttributeContainer = this.attributeContainers[0];\r\n this.iSelected = 0;\r\n } else {\r\n this.selectedAttributeContainer = undefined;\r\n this.iSelected = undefined;\r\n }\r\n this.dashboardService.setConfigurationAttributeContainers(this.attributeContainers);\r\n\r\n if (isDevMode()) {\r\n console.debug(this.attributeContainers);\r\n }\r\n }\r\n }\r\n\r\n wacEquals(a: WidgetAttributeContainer[], b: WidgetAttributeContainer[]): boolean {\r\n if (a.length !== b.length) {\r\n return false;\r\n } else {\r\n for (var i = 0; i < a.length; i++) {\r\n if (a[i].name !== b[i].name) {\r\n return false;\r\n } else if (a[i].attributes.length !== b[i].attributes.length) {\r\n return false;\r\n } else {\r\n for (var j = 0; j < a[i].attributes.length; j++) {\r\n if (a[i].attributes[j].name !== b[i].attributes[j].name) {\r\n return false;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {Component, ComponentFactoryResolver, ElementRef, Input, isDevMode, Renderer2, Type, ViewChild, ViewContainerRef} from \"@angular/core\";\r\n\r\nimport {ComponentInjector} from \"@huntsman-cancer-institute/utils\";\r\n\r\nimport {WidgetInstance} from \"../model/model\";\r\nimport {WidgetComponent} from \"./widget.component\";\r\nimport {DashboardService} from \"../services/dashboard.service\";\r\n\r\n/**\r\n * Based upon the main configuration property which is { widget: \"WidgetComponent\" }, this will dynamically inject\r\n * an instance of that widget based on its class name.\r\n *\r\n * @since 1.0.0\r\n */\r\n@Component({\r\n selector: \"widget-host\",\r\n template: `\r\n <div class=\"widget-host card-padding\" (dblclick)=\"openConfiguration()\">\r\n <ng-container #widgetComponent></ng-container>\r\n </div>\r\n `,\r\n styles: [`\r\n\r\n .card-padding {\r\n padding: .75rem;\r\n border: 1px solid rgba(0,0,0,.125);\r\n height: 100%;\r\n background-color: #f8f8fc;\r\n }\r\n\r\n .widget-right-corner {\r\n float: right;\r\n margin-right: 0px;\r\n margin-left: auto;\r\n }\r\n .widget-right-corner.next {\r\n padding-right: 10px;\r\n }\r\n .widget-right-corner.light {\r\n color: #dddddd;\r\n }\r\n .no-dropdown-icon.dropdown-toggle::after {\r\n display: none;\r\n }\r\n .dropdown-menu {\r\n top: 0 !important;\r\n margin-top: -2px;\r\n }\r\n .dropdown-menu.submenu {\r\n padding-left: 15px;\r\n border: none;\r\n position: relative;\r\n }\r\n `]\r\n})\r\nexport class WidgetHostComponent {\r\n\r\n @Input() widgetInstance: WidgetInstance;\r\n\r\n public editMode: boolean = false;\r\n public showIcons: boolean = false;\r\n public sizeCollapsed: boolean = true;\r\n public isFullscreen: boolean = false;\r\n\r\n public widgetComponent: WidgetComponent;\r\n\r\n configMode: boolean = false;\r\n\r\n @ViewChild(\"widgetComponent\", { read: ViewContainerRef, static: true })\r\n private widgetHolderRef: any;\r\n\r\n constructor(private renderer: Renderer2, private elementRef: ElementRef, private resolver: ComponentFactoryResolver, private dashboardService: DashboardService) {}\r\n\r\n ngOnInit() {\r\n this.createWidget();\r\n\r\n this.dashboardService.getEditMode().subscribe((editMode: boolean) => {\r\n this.editMode = editMode;\r\n });\r\n\r\n this.dashboardService.configurationWidgetInstanceSubject.subscribe((widgetInstance: WidgetInstance) => {\r\n if (!widgetInstance) {\r\n this.setConfigMode(false);\r\n } else if (widgetInstance.idWidgetInstance === this.widgetInstance.idWidgetInstance) {\r\n this.setConfigMode(true);\r\n } else {\r\n this.setConfigMode(false);\r\n }\r\n });\r\n\r\n this.dashboardService.updateWidgetInstanceSubject.subscribe((widgetInstance: WidgetInstance) => {\r\n if (widgetInstance.idWidgetInstance === this.widgetInstance.idWidgetInstance) {\r\n this.widgetInstance = widgetInstance;\r\n this.configureComponentRef();\r\n }\r\n });\r\n }\r\n\r\n setConfigMode(configMode: boolean) {\r\n this.configMode = configMode;\r\n\r\n if (this.configMode) {\r\n this.renderer.setStyle(this.elementRef.nativeElement, \"z-index\", \"8\");\r\n this.renderer.setStyle(this.elementRef.nativeElement, \"background-color\", \"rgba(255, 0, 0, 0.25)\");\r\n } else {\r\n this.renderer.removeStyle(this.elementRef.nativeElement, \"z-index\");\r\n this.renderer.removeStyle(this.elementRef.nativeElement, \"background-color\");\r\n }\r\n }\r\n\r\n /**\r\n * Create the widget based upon the widget's specified component.\r\n */\r\n createWidget() {\r\n if (this.widgetInstance.widget) {\r\n let factories: Type<any>[];\r\n\r\n try {\r\n if (isDevMode()) {\r\n console.debug(\"createWidget: \" + this.widgetInstance.widget.component);\r\n console.debug(this.widgetInstance);\r\n }\r\n\r\n this.widgetComponent = ComponentInjector.getComponent(this.resolver, this.widgetHolderRef, this.widgetInstance.widget.component);\r\n\r\n this.dashboardService.registerWidgetComponent(this.widgetInstance.idWidgetInstance, this.widgetComponent);\r\n\r\n this.configureComponentRef();\r\n } catch (e) {\r\n let widgetName: string = (this.widgetInstance) ? ((this.widgetInstance.widget) ? this.widgetInstance.widget.component : \"Undefined Widget\") : \"Undefined WidgetInstance\";\r\n console.error(\"createWidget for '\" + widgetName + \"'\", e);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * TODO: Update actual attribute value. If one doesn't exist, create it.\r\n *\r\n * @param cardClass\r\n */\r\n setSize(cardClass: string) {\r\n this.renderer.setAttribute(this.elementRef.nativeElement, \"class\", \"\");\r\n this.renderer.addClass(this.elementRef.nativeElement, \"card\");\r\n this.renderer.addClass(this.elementRef.nativeElement, cardClass);\r\n }\r\n\r\n /**\r\n * Notify any service listeners that we want to open a user configuration window on this widget.\r\n */\r\n openConfiguration() {\r\n if (!this.editMode) {\r\n return;\r\n }\r\n\r\n this.dashboardService.setConfigurationWidgetInstance(this.widgetInstance, this.widgetComponent, false);\r\n }\r\n\r\n configureComponentRef() {\r\n this.widgetComponent.setWidgetInstance(this.widgetInstance);\r\n this.widgetComponent.config(undefined);\r\n if (this.widgetComponent.getCardClass() && this.widgetComponent.getCardClass().length > 0) {\r\n this.renderer.setAttribute(this.elementRef.nativeElement, \"class\", \"\");\r\n this.renderer.addClass(this.elementRef.nativeElement, \"card\");\r\n this.renderer.addClass(this.elementRef.nativeElement, this.widgetComponent.getCardClass());\r\n }\r\n this.widgetComponent.cardClassEvent.subscribe((cardClass: string) => {\r\n this.setSize(cardClass);\r\n });\r\n }\r\n\r\n deleteWidget() {\r\n this.dashboardService.deleteWidget(this.widgetInstance);\r\n }\r\n\r\n fullscreenOpen() {\r\n this.isFullscreen = true;\r\n this.showIcons = false;\r\n this.renderer.addClass(this.elementRef.nativeElement, \"widget-fullscreen\");\r\n }\r\n\r\n fullscreenClose() {\r\n this.isFullscreen = false;\r\n this.showIcons = false;\r\n this.renderer.removeClass(this.elementRef.nativeElement, \"widget-fullscreen\");\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {Component, ElementRef, Input, HostListener, HostBinding, isDevMode} from \"@angular/core\";\r\n\r\nimport {DragulaService} from \"ng2-dragula\";\r\n\r\nimport {Dashboard, WidgetInstance} from \"../model/model\";\r\nimport {DashboardService} from \"../services/dashboard.service\";\r\n\r\n/**\r\n * Dashboard (within a card-group) iterates over configured widgets to produce each one in a card. The widgets can\r\n * always get access to any configuration held by the dashboard service, but they are intended to be largely\r\n * independent.\r\n *\r\n * @since 1.0.0\r\n */\r\n@Component({\r\n selector: \"widget-container\",\r\n template: `\r\n <div [id]=\"'widget-container-' + dashboardIndex\"\r\n [dragula]=\"'widget-container-' + dashboardIndex\"\r\n class=\"d-flex flex-grow-1 flex-wrap y-auto p-3 pb-5\">\r\n <ng-container *ngIf=\"dashboard?.widgetInstances?.length === 0\">\r\n <div class=\"card one-third\">\r\n <div class=\"widget-host card-padding\">\r\n <div style=\"text-align: center; height: 200px; display: inline-grid; width: 100%;\">\r\n <button class=\"btn btn-secondary\"\r\n style=\"margin: auto;\"\r\n (click)=\"addWidget()\">\r\n <i class=\"fas fa-plus fa-4x\"></i>\r\n <br />\r\n <h4>Add Widget</h4>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n \r\n <ng-template ngFor let-widgetInstance [ngForOf]=\"dashboard.widgetInstances\" let-widgetIndex=\"index\">\r\n <widget-host [id]=\"widgetInstance.idWidgetInstance\"\r\n [widgetInstance]=\"widgetInstance\"\r\n class=\"card\"></widget-host>\r\n </ng-template>\r\n </div>\r\n `,\r\n styles: [`\r\n .gu-mirror{position:fixed!important;margin:0!important;z-index:9999!important;opacity:.8;-ms-filter:\"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)\";filter:alpha(opacity=80)}.gu-hide{display:none!important}.gu-unselectable{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.gu-transit{opacity:.2;-ms-filter:\"progid:DXImageTransform.Microsoft.Alpha(Opacity=20)\";filter:alpha(opacity=20)}\r\n `]\r\n})\r\nexport class WidgetContainerComponent {\r\n\r\n @HostBinding(\"class\") classList: string = \"outlet-row\";\r\n\r\n @Input()\r\n public dashboard: Dashboard;\r\n\r\n @Input()\r\n public dashboardIndex: number;\r\n\r\n public editMode: boolean = false;\r\n\r\n configMode: boolean = false;\r\n widgetContainerWidth: number = 0;\r\n widgetContainerHeight: number = 0;\r\n\r\n constructor(private elementRef: ElementRef, private dashboardService: DashboardService, private dragulaService: DragulaService) {}\r\n\r\n ngOnInit() {\r\n this.dashboardService.getEditMode().subscribe((editMode: boolean) => {\r\n this.editMode = editMode;\r\n\r\n // Upon switch editMode, destroy or re-add dragula to container.\r\n var bag = this.dragulaService.find(\"widget-container-\" + this.dashboardIndex);\r\n if (bag !== undefined) {\r\n this.dragulaService.destroy(\"widget-container-\" + this.dashboardIndex);\r\n }\r\n this.dragulaService.createGroup(\"widget-container-\" + this.dashboardIndex, {\r\n moves: function (el: any, container: any, handle: any) {\r\n return editMode;\r\n }\r\n });\r\n this.dragulaService.find(\"widget-container-\" + this.dashboardIndex)\r\n .drake\r\n .containers\r\n .push(this.elementRef.nativeElement.querySelector(\"#widget-container-\" + this.dashboardIndex));\r\n\r\n /**\r\n * Upon drop, persist the new sortOrder to the backend.\r\n */\r\n this.dragulaService.drop(\"widget-container-\" + this.dashboardIndex).subscribe((value: any) => {\r\n let n: number = 1;\r\n\r\n for (let el of this.elementRef.nativeElement.querySelectorAll(\"widget-host\")) {\r\n this.dashboardService.saveWidgetSortOrder(this.dashboardIndex, +el.getAttribute(\"id\"), n++);\r\n }\r\n });\r\n });\r\n\r\n this.dashboardService.configurationWidgetInstanceSubject.subscribe((widgetInstance: WidgetInstance) => {\r\n if (widgetInstance) {\r\n this.updateSize();\r\n this.configMode = true;\r\n } else {\r\n this.configMode = false;\r\n }\r\n });\r\n }\r\n\r\n @HostListener(\"window:resize\", [\"$event\"])\r\n onResize(event: Event) {\r\n this.updateSize();\r\n }\r\n\r\n updateSize() {\r\n this.widgetContainerWidth = this.elementRef.nativeElement.offsetWidth;\r\n this.widgetContainerHeight = this.elementRef.nativeElement.offsetHeight;\r\n }\r\n\r\n addWidget() {\r\n this.dashboardService.addWidgetSubject.next(true);\r\n }\r\n\r\n}\r\n","import {Injectable} from \"@angular/core\";\r\n\r\nimport {DashboardService} from \"./dashboard.service\";\r\n\r\n/**\r\n * Single instance of this service which can be used to reference dashboard anywhere within the application. The\r\n * dashboard service has been moved to be provided by the dashboard component so this is needed to hook in.\r\n */\r\n@Injectable()\r\nexport class DashboardGlobalService {\r\n\r\n activeDashboardService: DashboardService\r\n\r\n setActiveDashboardService(activeDashboardService?: DashboardService): void {\r\n this.activeDashboardService = activeDashboardService;\r\n }\r\n\r\n getActiveDashboardService(): DashboardService {\r\n return this.activeDashboardService;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {Component, Input, ViewChild} from \"@angular/core\";\r\nimport {animate, state, style, transition, trigger} from \"@angular/animations\";\r\n\r\nimport {Subscription} from \"rxjs\";\r\n\r\nimport { Widget, WidgetCategory, WidgetInstance, WidgetAttributeValue, WidgetAttributeValueSet, WidgetAttributeContainer} from \"../model/model\";\r\nimport {DashboardService} from \"../services/dashboard.service\";\r\nimport {WidgetComponent} from \"../widget/widget.component\";\r\nimport {WidgetConfigureComponent} from \"./widget-configure.component\";\r\n\r\n/**\r\n * @since 1.0.0\r\n */\r\n@Component({\r\n selector: \"widget-add\",\r\n template: `\r\n <div class=\"overlay\" [@openBacksplash]=\"openState\">\r\n <div class=\"modal-dialog\" [@openModal]=\"openState\" role=\"document\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\">Add Widget</h4>\r\n <button type=\"button\" class=\"close\" aria-label=\"Close\" (click)=\"close()\">\r\n <span aria-hidden=\"true\">&times;</span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\" [style.display]=\"step === 1 ? 'block' : 'none'\">\r\n <div class=\"modal-body-left\">\r\n <ng-template ngFor let-widgetCategory [ngForOf]=\"widgetCategories\">\r\n <div class=\"widget-category\"\r\n [ngClass]=\"widgetCategory.idWidgetCategory === selectedWidgetCategory?.idWidgetCategory ? 'selected' : ''\"\r\n (click)=\"selectWidgetCategory(widgetCategory)\">\r\n <ng-container *ngIf=\"widgetCategory.icon\">\r\n <ng-container *ngIf=\"widgetCategory.icon.indexOf('.svg') > 0; else faIcon\">\r\n <img [src]=\"widgetCategory.icon\" class=\"widget-category-icon\" />\r\n </ng-container>\r\n <ng-template #faIcon>\r\n <i class=\"{{widgetCategory.icon}} fa-2x widget-category-icon\"></i>\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngIf=\"!widgetCategory.icon\">\r\n <i class=\"fas fa-question-circle fa-2x widget-category-icon\"></i>\r\n </ng-container>\r\n \r\n </div>\r\n </ng-template>\r\n </div>\r\n <div class=\"modal-body-right\">\r\n <div class=\"input-group widget-search\">\r\n <div class=\"input-group-prepend\">\r\n <span class=\"input-group-text\" id=\"search\"><i class=\"fas fa-search fa-lg\"></i></span>\r\n </div>\r\n <input type=\"text\"\r\n #searchWidget\r\n class=\"form-control\"\r\n placeholder=\"\"\r\n aria-describedby=\"search\"\r\n (keyup)=\"searchWidgets(searchWidget.value)\">\r\n <button class=\"btn\" style=\"margin-left: 10px;\" (click)=\"setDisplayMode('list')\">\r\n <i class=\"fas fa-list\"></i>\r\n </button>\r\n <button class=\"btn\" style=\"margin-left: 10px;\" (click)=\"setDisplayMode('grid')\">\r\n <i class=\"fas fa-th\"></i>\r\n </button>\r\n </div>\r\n <ng-container *ngIf=\"widgets && widgets.length > 0\">\r\n <div>No widgets matched the search criteria.</div>\r\n </ng-container>\r\n <ng-template ngFor let-widget [ngForOf]=\"widgets\">\r\n <div class=\"widget-label\"\r\n *ngIf=\"displayMode === 'list'\"\r\n (click)=\"selectWidget(widget)\">\r\n <div class=\"widget-icon-host\">\r\n <ng-container *ngIf=\"widget.icon\">\r\n <ng-container *ngIf=\"widget.icon.indexOf('.svg') > 0; else faIcon\">\r\n <img [src]=\"widget.icon\" class=\"widget-icon\" />\r\n </ng-container>\r\n <ng-template #faIcon>\r\n <i class=\"{{widget.icon}} fa-2x widget-icon\"></i>\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngIf=\"!widget.icon\">\r\n <i class=\"fas fa-question-circle fa-2x widget-icon\"></i>\r\n </ng-container>\r\n </div>\r\n <div class=\"widget-description-host\">\r\n <div class=\"widget-title\">{{widget.title}}</div>\r\n <div>{{widget.description}}</div>\r\n </div>\r\n </div>\r\n <div class=\"grid widget-label\"\r\n *ngIf=\"displayMode === 'grid'\"\r\n (click)=\"selectWidget(widget)\">\r\n <div class=\"grid widget-icon-host\">\r\n <ng-container *ngIf=\"widget.icon\">\r\n <ng-container *ngIf=\"widget.icon.indexOf('.svg') > 0; else faIcon\">\r\n <img [src]=\"widget.icon\" class=\"widget-icon\" />\r\n </ng-container>\r\n <ng-template #faIcon>\r\n <i class=\"{{widget.icon}} fa-2x widget-icon\"></i>\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngIf=\"!widget.icon\">\r\n <i class=\"fas fa-question-circle fa-2x widget-icon\"></i>\r\n </ng-container>\r\n </div>\r\n <div class=\"grid widget-description-host\">\r\n <div class=\"grid widget-title\">{{widget.title}}</div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <ng-container *ngIf=\"step === 1\">\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"close()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"add()\">Add</button>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n animations: [\r\n trigger(\"openBacksplash\",\r\n [\r\n state(\"in\", style({\r\n display: \"none\"\r\n })),\r\n state(\"hidden\", style({\r\n display: \"none\"\r\n })),\r\n state(\"opened\", style({\r\n display: \"flex\"\r\n })),\r\n transition(\"hidden => opened\", animate(0)),\r\n transition(\"opened => hidden\", animate(200))\r\n ]\r\n ),\r\n trigger(\"openModal\",\r\n [\r\n state(\"in\", style({\r\n opacity: \"0\"\r\n })),\r\n state(\"hidden\", style({\r\n opacity: \"0\"\r\n })),\r\n state(\"opened\", style({\r\n opacity: \"1\"\r\n })),\r\n transition(\"hidden => opened\", animate(500)),\r\n transition(\"opened => hidden\", animate(200))\r\n ]\r\n )\r\n ],\r\n styles: [`\r\n\r\n .overlay {\r\n position: fixed;\r\n z-index: 9999;\r\n top: 0;\r\n bottom: 0;\r\n background-color: rgba(0, 0, 0, 0.4);\r\n width: 100vw;\r\n display: none;\r\n }\r\n \r\n .modal-dialog {\r\n max-width: 75vw;\r\n min-width: 75vw;\r\n margin-left: auto;\r\n margin-right: auto;\r\n margin-top: auto;\r\n margin-bottom: auto;\r\n background-color: white;\r\n border: black 1px solid;\r\n border-left: none;\r\n pointer-events: all;\r\n }\r\n \r\n .modal-body {\r\n width: 100%;\r\n display: inline-flex;\r\n }\r\n \r\n .modal-body-left {\r\n display: inline-block;\r\n overflow-y: auto;\r\n overflow-x: hidden;\r\n min-height: 300px;\r\n max-height: 300px;\r\n }\r\n \r\n .modal-body-right {\r\n width: 70%;\r\n vertical-align: top;\r\n padding-left: 15px;\r\n border-left: black 1px solid;\r\n margin-left: 15px;\r\n display: inline-block;\r\n overflow-y: auto;\r\n min-height: 300px;\r\n max-height: 300px;\r\n }\r\n \r\n .widget-category {\r\n margin: 10px;\r\n border-radius: 20px;\r\n background-color: #eeeeee;\r\n }\r\n \r\n .widget-category.selected {\r\n border: red 2px solid;\r\n }\r\n \r\n .widget-category-icon {\r\n width: 80px;\r\n height: 80px;\r\n padding: 5px;\r\n margin-left: auto;\r\n margin-right: auto;\r\n display: flex;\r\n }\r\n \r\n .widget-search {\r\n margin-bottom: 10px;\r\n }\r\n\r\n .widget-label {\r\n padding: 10px;\r\n background-color: #eeeeee;\r\n border-radius: 10px;\r\n margin-bottom: 5px;\r\n }\r\n\r\n .widget-label.grid {\r\n display: inline-block;\r\n width: 150px;\r\n overflow-y: hidden;\r\n overflow-x: hidden;\r\n max-height: 100px;\r\n min-height: 100px;\r\n margin: 5px;\r\n }\r\n\r\n .widget-icon-host {\r\n display: inline-block;\r\n width: 50px;\r\n vertical-align: top;\r\n }\r\n\r\n .widget-icon {\r\n width: 50px;\r\n height: 50px;\r\n margin-left: auto;\r\n margin-right: auto;\r\n display: flex;\r\n }\r\n\r\n .widget-title {\r\n font-weight: bold;\r\n }\r\n \r\n .widget-description-host {\r\n display: inline-block;\r\n width: calc(100% - 55px);\r\n }\r\n \r\n `]\r\n})\r\nexport class WidgetAddComponent {\r\n\r\n @Input()\r\n dashboardIndex: number = 0;\r\n\r\n public step: number = 0;\r\n\r\n public widgets: Widget[];\r\n public widgetCategories: WidgetCategory[];\r\n\r\n public displayMode: string = \"list\";\r\n public openState: string = \"hidden\";\r\n public widgetRendered: boolean = false;\r\n\r\n public selectedWidget: Widget;\r\n public selectedWidgetCategory: WidgetCategory;\r\n\r\n private widgetInstance: WidgetInstance;\r\n\r\n private widgetRenderedSubscription: Subscription;\r\n\r\n @ViewChild(WidgetConfigureComponent, {static: false})\r\n private widgetConfigureComponent: WidgetConfigureComponent;\r\n\r\n constructor(private dashboardService: DashboardService) {}\r\n\r\n ngOnInit() {\r\n this.dashboardService.addWidgetSubject.subscribe((addWidget: boolean) => {\r\n this.init();\r\n this.openState = \"opened\";\r\n });\r\n }\r\n\r\n init() {\r\n this.widgetRenderedSubscription = this.dashboardService.getWidgetRendered().subscribe((widgetRendered: boolean) => {\r\n if (widgetRendered && this.step === 2) {\r\n this.widgetRendered = true;\r\n }\r\n this.widgetRenderedSubscription.unsubscribe();\r\n });\r\n\r\n this.widgets = this.dashboardService.getWidgetsByFilter(undefined);\r\n this.widgetCategories = this.dashboardService.getWidgetCategories();\r\n this.step = 1;\r\n }\r\n\r\n /**\r\n * Re-filter the widget list based upon a change in widget category.\r\n *\r\n * @param {WidgetCategory} widgetCategory\r\n */\r\n selectWidgetCategory(selectedWidgetCategory: WidgetCategory) {\r\n this.widgets = this.dashboardService.getWidgetsByFilter(undefined);\r\n if (this.selectedWidgetCategory && this.selectedWidgetCategory.idWidgetCategory === selectedWidgetCategory.idWidgetCategory) {\r\n this.selectedWidgetCategory = undefined;\r\n } else {\r\n this.selectedWidgetCategory = selectedWidgetCategory;\r\n this.widgets = this.widgets.filter((widget: Widget) => {\r\n if (widget.widgetCategories && widget.widgetCategories.length > 0) {\r\n return widget.widgetCategories.filter((widgetCategory: WidgetCategory) => {\r\n return widgetCategory.idWidgetCategory === selectedWidgetCategory.idWidgetCategory;\r\n }).length > 0;\r\n } else {\r\n return false;\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * When the widget is selected there are two options. If there are no attributes to be set by the user, then add the\r\n * widget. If there are instance attributes that must be set, then switch to a widget configuration screen.\r\n *\r\n * @param widget\r\n */\r\n selectWidget(widget: Widget) {\r\n this.widgetInstance = new WidgetInstance();\r\n this.widgetInstance.idWidgetInstance = this.dashboardService.getIdNew();\r\n this.widgetInstance.widget = widget;\r\n this.widgetInstance.attributeValueSet = this.getDefaultWidgetAttributeValues(this.widgetInstance.idWidgetInstance, widget.attributeContainers);\r\n this.add();\r\n }\r\n\r\n setDisplayMode(displayMode: string) {\r\n this.displayMode = displayMode;\r\n }\r\n\r\n getDefaultWidgetAttributeValues(idWidgetInstance: number, attributeContainers: WidgetAttributeContainer[]): WidgetAttributeValueSet {\r\n let valueSet: WidgetAttributeValueSet = new WidgetAttributeValueSet();\r\n valueSet.idWidgetAttributeValueSet = this.dashboardService.getIdNew();\r\n let values: WidgetAttributeValue[] = [];\r\n\r\n for (let container of attributeContainers) {\r\n for (let attribute of container.attributes) {\r\n if (!attribute.userEditable) {\r\n continue;\r\n }\r\n if (attribute.multiValue) {\r\n continue;\r\n }\r\n\r\n let value = new WidgetAttributeValue();\r\n value.idWidgetAttributeValue = this.dashboardService.getIdNew();\r\n value.idWidgetAttribute = attribute.idWidgetAttribute;\r\n\r\n if (attribute.dataType === \"integer\") {\r\n value.valueInteger = parseInt(attribute.defaultValue);\r\n } else {\r\n value.valueString = attribute.defaultValue;\r\n }\r\n values.push(value);\r\n }\r\n }\r\n\r\n valueSet.attributeValues = values;\r\n return valueSet;\r\n }\r\n\r\n add() {\r\n this.dashboardService.addWidget(this.selectedWidget, this.widgetInstance, this.dashboardIndex, this.step);\r\n this.close();\r\n }\r\n\r\n back() {\r\n this.dashboardService.setWidgetRendered(false);\r\n this.widgetRendered = false;\r\n this.step = 1;\r\n }\r\n\r\n close() {\r\n this.dashboardService.setWidgetRendered(false);\r\n this.widgetRendered = false;\r\n this.step = 0;\r\n this.openState = \"hidden\";\r\n }\r\n\r\n searchWidgets(filter: string) {\r\n this.widgets = this.dashboardService.getWidgetsByFilter(filter);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {\r\n ChangeDetectorRef, Component, ElementRef, isDevMode, QueryList, ViewChildren, ViewChild,\r\n HostBinding\r\n} from \"@angular/core\";\r\nimport {animate, state, style, transition, trigger} from \"@angular/animations\";\r\n\r\nimport {DragulaService} from \"ng2-dragula\";\r\nimport domtoimage from \"dom-to-image\";\r\nimport {NgbModal} from \"@ng-bootstrap/ng-bootstrap\";\r\n\r\nimport {Dashboard, WidgetInstance} from \"./model/model\";\r\nimport {DashboardService} from \"./services/dashboard.service\";\r\nimport {WidgetConfigureComponent} from \"./configure/widget-configure.component\";\r\nimport {WidgetContainerComponent} from \"./widget/widget-container.component\";\r\nimport {DashboardGlobalService} from \"./services/dashboard-global.service\";\r\n\r\n/**\r\n * Dashboard (within a card-group) iterates over configured widgets to produce each one in a card. The widgets can\r\n * always get access to any configuration held by the dashboard service, but they are intended to be largely\r\n * independent.\r\n *\r\n * @since 1.0.0\r\n */\r\n@Component({\r\n selector: \"dashboard\",\r\n template: `\r\n <ng-template #confirmDialog let-c=\"close\" let-d=\"dismiss\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\">Delete</h5>\r\n </div>\r\n <div class=\"modal-body\">\r\n <p>Are you sure?</p>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"c('Yes')\">Yes</button>\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"d('No')\">No</button>\r\n </div>\r\n </ng-template>\r\n \r\n <widget-add [dashboardIndex]=\"selectedIndex\"></widget-add>\r\n\r\n <div class=\"edit-mode-header\"\r\n [@openEditModeHeader]=\"editMode\"\r\n [@openEditModeHeaderDisplay]=\"editMode\">\r\n <button class=\"btn btn-primary btn-space\"\r\n (click)=\"addWidget()\">\r\n <i class=\"fas fa-plus fa-2x\"></i>\r\n <br />\r\n <span>Widget</span>\r\n </button>\r\n <button *ngIf=\"configMode === 'true'\"\r\n class=\"btn btn-primary btn-space red\"\r\n (click)=\"deleteWidget()\">\r\n <i class=\"fas fa-times fa-2x\"></i>\r\n <br />\r\n <span>Widget</span>\r\n </button>\r\n <button class=\"btn btn-primary btn-space\"\r\n (click)=\"addDashboard()\">\r\n <i class=\"fas fa-plus fa-2x\"></i>\r\n <br />\r\n <span>Dashboard</span>\r\n </button>\r\n <button class=\"btn btn-primary btn-space red\"\r\n *ngIf=\"dashboards.length > 1\"\r\n (click)=\"deleteDashboard(confirmDialog)\">\r\n <i class=\"fas fa-times fa-2x\"></i>\r\n <br />\r\n <span>Dashboard</span>\r\n </button>\r\n <button class=\"btn btn-primary btn-space green\"\r\n (click)=\"setEditMode(false)\">\r\n <i class=\"fas fa-check fa-2x\"></i>\r\n <br />\r\n <span>Done</span>\r\n </button>\r\n </div>\r\n \r\n <div class=\"outlet-row\">\r\n\r\n <!-- Iterate over all dashboards. Show non selected dashboards off screen. -->\r\n <ng-template ngFor let-dashboard [ngForOf]=\"dashboards\" let-dashboardIndex=\"index\">\r\n <div class=\"d-flex\"\r\n [style.left]=\"selectedIndex !== dashboardIndex ? '100vw' : 'inherit'\"\r\n [style.position]=\"selectedIndex !== dashboardIndex ? 'fixed' : 'inherit'\"\r\n [@openConfigContent]=\"configMode\">\r\n <widget-container\r\n [dashboard]=\"dashboard\"\r\n [dashboardIndex]=\"dashboardIndex\">\r\n </widget-container>\r\n </div>\r\n </ng-template>\r\n \r\n <div [style.display]=\"configMode === 'true' ? 'flex' : 'none'\" class=\"sidebar-widget-config\" [@openConfigSidebar]=\"configMode\">\r\n <div class=\"outlet-column\" style=\"background-color: white; height: 100%; padding: 2px;\">\r\n <div class=\"d-flex flex-nowrap\">\r\n <div><h4>Settings</h4></div>\r\n <div style=\"margin-right: 0px; margin-left: auto;\">\r\n <span style=\"color: green;\" (click)=\"saveConfiguration()\">\r\n <i class=\"fas fa-check-circle fa-2x\"></i>\r\n </span>\r\n <span style=\"color: red;\" (click)=\"cancelConfiguration()\">\r\n <i class=\"fas fa-times-circle fa-2x\"></i>\r\n </span>\r\n </div>\r\n </div>\r\n <widget-configure #widgetConfigure></widget-configure>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <ng-container *ngIf=\"dashboards?.length > 1\">\r\n <div class=\"dashboard-nav-trigger\">\r\n <span (mouseenter)=\"openDashboardNavState = 'opened'\">\r\n <i class=\"fas fa-th fa-2x\"></i>\r\n </span>\r\n </div>\r\n \r\n <div class=\"dashboard-nav\"\r\n [@openDashboardNav]=\"openDashboardNavState\"\r\n [style.left]=\"'calc(50vw - ' + dashboards?.length * 50 + 'px)'\"\r\n (mouseleave)=\"openDashboardNavState = 'closed'\">\r\n <ng-container *ngFor=\"let dashboard of dashboards; index as i\">\r\n <div [id]=\"'dash-image-' + i\"\r\n class=\"widget-image\"\r\n [ngClass]=\"i === selectedIndex ? 'selected' : ''\"\r\n (click)=\"selectDashboard(i)\">\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"helpMode\">\r\n <div id=\"helpParent\">\r\n <div id=\"helpChild\">\r\n <div style=\"width: 100%; display: inline-flex;\">\r\n <h4>Help</h4>\r\n <span style=\"margin-right: 0; margin-left: auto; color: red;\" (click)=\"setHelpMode(false)\">\r\n <i class=\"fas fa-times fa-lg\"></i>\r\n </span>\r\n </div>\r\n <div>\r\n The dashboard is a collection of widgets that you can customize to your own needs. In this edit mode, you\r\n can drag and drop widgets to change the order and double click a widget to change its configuration.\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n `,\r\n animations: [\r\n trigger(\"openConfigContent\",\r\n [\r\n state(\"false\", style({\r\n width: \"100%\"\r\n })),\r\n state(\"true\", style({\r\n width: \"80%\"\r\n })),\r\n transition(\"false => true\", animate(300)),\r\n transition(\"true => false\", animate(300))\r\n ]\r\n ),\r\n trigger(\"openConfigSidebar\",\r\n [\r\n state(\"false\", style({\r\n opacity: \"0\",\r\n width: \"0%\"\r\n })),\r\n state(\"true\", style({\r\n opacity: \"1\",\r\n width: \"20%\"\r\n })),\r\n transition(\"false => true\", animate(300)),\r\n transition(\"true => false\", animate(300))\r\n ]\r\n ),\r\n trigger(\"openDashboardNav\",\r\n [\r\n state(\"closed\", style({\r\n opacity: \"0\",\r\n bottom: \"-150px\"\r\n })),\r\n state(\"opened\", style({\r\n opacity: \"1\",\r\n bottom: \"40px\"\r\n })),\r\n transition(\"closed => opened\", animate(250)),\r\n transition(\"opened => closed\", animate(100))\r\n ]\r\n ),\r\n /*trigger(\"openEditModeHeaderContent\", [\r\n state(\"closed\", style({\r\n \"padding-top\": \"0px\"\r\n })),\r\n state(\"opened\", style({\r\n \"padding-top\": \"91px\"\r\n })),\r\n transition(\"closed => opened\", animate(300)),\r\n transition(\"opened => closed\", animate(300))\r\n ]),*/\r\n trigger(\"openEditModeHeader\", [\r\n state(\"closed\", style({\r\n \"opacity\": \"0\",\r\n \"overflow-y\": \"hidden\"\r\n })),\r\n state(\"opened\", style({\r\n \"opacity\": \"1\",\r\n \"overflow-y\": \"visible\"\r\n })),\r\n transition(\"closed => opened\", animate(300)),\r\n transition(\"opened => closed\", animate(300))\r\n ]),\r\n trigger(\"openEditModeHeaderDisplay\", [\r\n state(\"closed\", style({\r\n \"display\": \"none\"\r\n })),\r\n state(\"opened\", style({\r\n \"display\": \"flex\"\r\n })),\r\n transition(\"closed => opened\", animate(100)),\r\n transition(\"opened => closed\", animate(\"100ms 100ms\"))\r\n ])\r\n ],\r\n styles: [`\r\n \r\n #helpParent {\r\n position: fixed;\r\n display: flex;\r\n width: 100vw;\r\n height: 100vh;\r\n left: 0;\r\n top: 0;\r\n z-index: 999;\r\n background: rgba(0, 0, 0, 0.25);\r\n }\r\n \r\n #helpChild {\r\n width: 75%;\r\n height: 75%;\r\n margin-left: auto;\r\n margin-right: auto;\r\n margin-top: auto;\r\n margin-bottom: auto;\r\n background: white;\r\n border-radius: 25px;\r\n box-shadow: 2px 2px black;\r\n padding: 20px;\r\n }\r\n \r\n .sidebar-widget-config {\r\n background-color: #ffdddd;\r\n border-left: gray 1px solid;\r\n padding: 10px;\r\n padding-right: 0px;\r\n opacity: 0;\r\n width: 0%;\r\n }\r\n \r\n .modal {\r\n background-color: rgba(0, 0, 0, 0.25);\r\n }\r\n \r\n .edit-mode-header {\r\n border-bottom: black 1px dashed;\r\n padding-top: 10px;\r\n padding-bottom: 10px;\r\n z-index: 10;\r\n background-color: white;\r\n }\r\n \r\n .edit-mode-header button {\r\n padding: .2rem .5rem;\r\n }\r\n \r\n .btn-space {\r\n margin-left: 10px;\r\n }\r\n \r\n .btn.green {\r\n background-color: green;\r\n }\r\n\r\n .btn.red {\r\n background-color: red;\r\n }\r\n\r\n .dashboard-nav-trigger {\r\n bottom: 40px;\r\n position: fixed;\r\n z-index: 100;\r\n display: inline-block;\r\n width: 100%;\r\n text-align: center;\r\n padding-top: 15px;\r\n background: white;\r\n background: linear-gradient(0deg, white, white, transparent);\r\n }\r\n\r\n .dashboard-nav {\r\n bottom: -150px;\r\n position: fixed;\r\n z-index: 101;\r\n display: inline-block;\r\n background-color: white;\r\n }\r\n \r\n .widget-image {\r\n display: inline-block;\r\n max-height: 100px;\r\n height: 100px;\r\n min-height: 100px;\r\n max-width: 100px;\r\n width: 100px;\r\n min-width: 100px;\r\n border: black 1px solid;\r\n vertical-align: bottom;\r\n overflow-y: hidden;\r\n overflow-x: hidden;\r\n }\r\n \r\n .widget-image.selected {\r\n border: red 2px solid;\r\n }\r\n `],\r\n providers: [\r\n DashboardService\r\n ]\r\n})\r\nexport class DashboardComponent {\r\n\r\n @HostBinding(\"class\") classList: string = \"outlet-column\";\r\n\r\n public openDashboardNavState: string = \"closed\";\r\n\r\n public helpMode: boolean = false;\r\n public editMode: string = \"closed\";\r\n public selectedIndex = 0;\r\n\r\n public dashboards: Dashboard[] = [];\r\n\r\n public showWidgetContainerNav: boolean = false;\r\n\r\n configMode: string = \"false\";\r\n\r\n @ViewChildren(WidgetContainerComponent, { read: ElementRef }) widgetContainers: QueryList<ElementRef>;\r\n\r\n @ViewChild(\"widgetConfigure\", {static: false}) widgetConfigure: WidgetConfigureComponent;\r\n\r\n constructor(private changeDetectorRef: ChangeDetectorRef,\r\n private elementRef: ElementRef,\r\n private dashboardService: DashboardService,\r\n private dashboardGlobalService: DashboardGlobalService,\r\n private dragulaService: DragulaService,\r\n private modalService: NgbModal) {\r\n this.dashboards = this.dashboardService.getDashboards();\r\n\r\n this.dashboardService.dashboardsState.subscribe((dashboards: Dashboard[]) => {\r\n this.dashboards = dashboards;\r\n });\r\n\r\n this.dashboardService.configurationWidgetInstanceSubject.subscribe((widgetInstance: WidgetInstance) => {\r\n if (widgetInstance) {\r\n this.configMode = \"true\";\r\n } else {\r\n this.configMode = \"false\";\r\n }\r\n });\r\n\r\n this.dashboardService.getEditMode().subscribe((editMode: boolean) => {\r\n if (isDevMode()) {\r\n console.info(\"getEditMode \" + editMode);\r\n }\r\n\r\n if (editMode) {\r\n this.editMode = \"opened\";\r\n } else {\r\n this.editMode = \"closed\";\r\n }\r\n });\r\n\r\n /*let bag = this.dragulaService.find(\"attribute-choices\");\r\n if (bag !== undefined) {\r\n this.dragulaService.destroy(\"attribute-choices\");\r\n }\r\n this.dragulaService.createGroup(\"attribute-choices\", {\r\n direction: \"vertical\",\r\n moves: function (el: any, container: any, handle: any) {\r\n return true;\r\n }\r\n });\r\n this.dragulaService.find(\"attribute-choices\")\r\n .drake\r\n .containers\r\n .push(this.elementRef.nativeElement.querySelector(\"#attribute-choices\"));\r\n this.dragulaService.drop(\"\").subscribe((value: any) => {\r\n let n: number = 1;\r\n\r\n for (let el of this.elementRef.nativeElement.querySelectorAll(\"widget-host\")) {\r\n this.dashboardService.saveWidgetSortOrder(this.selectedIndex, +el.getAttribute(\"id\"), n++);\r\n }\r\n });*/\r\n }\r\n\r\n ngOnInit(): void {\r\n this.dashboardGlobalService.setActiveDashboardService(this.dashboardService);\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.widgetContainers.changes.subscribe((widgetContainers: QueryList <ElementRef>) => {\r\n this.renderDashboardNavImages();\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.dashboardGlobalService.setActiveDashboardService();\r\n }\r\n\r\n selectDashboard(index: number) {\r\n this.selectedIndex = index;\r\n }\r\n\r\n /**\r\n * Informs dashboardService of editMode change. Widget hosts will listen for this change.\r\n *\r\n * @param editMode\r\n */\r\n setEditMode(editMode: boolean) {\r\n this.dashboardService.setEditMode(editMode);\r\n }\r\n\r\n setHelpMode(helpMode: boolean) {\r\n if (isDevMode()) {\r\n console.info(\"setHelpMode \" + helpMode);\r\n }\r\n\r\n this.helpMode = helpMode;\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n\r\n /**\r\n * Use dom-to-image to render each widgetContainer as an image. Add an image for each widgetContainer\r\n * to the dashboardNav view.\r\n */\r\n renderDashboardNavImages() {\r\n setTimeout(() => {\r\n var self = this;\r\n this.widgetContainers.forEach((elementRef: ElementRef, index: number) => {\r\n var el = self.elementRef.nativeElement.querySelector(\"#dash-image-\" + index);\r\n if (el) {\r\n domtoimage.toPng(elementRef.nativeElement)\r\n .then(function (dataUrl) {\r\n var img = new Image();\r\n img.width = 100;\r\n img.src = dataUrl;\r\n el.innerHTML = \"\";\r\n el.appendChild(img);\r\n self.showWidgetContainerNav = true;\r\n })\r\n .catch(function (error) {\r\n console.error(\"Widget Image Error\", error);\r\n });\r\n }\r\n });\r\n }, 2000);\r\n }\r\n\r\n /**\r\n * Sends trigger to dashboardService to open the widget add component. That component listens for\r\n * this trigger.\r\n */\r\n addWidget() {\r\n this.dashboardService.addWidgetSubject.next(true);\r\n }\r\n\r\n deleteWidget() {\r\n this.dashboardService.deleteWidget(this.dashboardService.configurationWidgetInstanceSubject.getValue());\r\n }\r\n\r\n cancelConfiguration() {\r\n this.dashboardService.cancelConfigurationWidget();\r\n }\r\n\r\n saveConfiguration() {\r\n this.dashboardService.saveConfigurationWidget();\r\n }\r\n\r\n /**\r\n * Calls dashboardService to add a dashboard. Add dashboard will update dashboards through subscribe and\r\n * this waits for completion of the process which returns the new selectedIndex (which is the last dashboard).\r\n */\r\n addDashboard() {\r\n let dashboard: Dashboard = new Dashboard();\r\n dashboard.name = \"Temp\";\r\n dashboard.sortOrder = this.dashboards.length;\r\n dashboard.widgetInstances = [];\r\n this.dashboardService.addDashboard(dashboard).subscribe((index: number) => {\r\n this.selectedIndex = index;\r\n });\r\n }\r\n\r\n /**\r\n * Calls dashboardService to delete dashboard. Delete dashboard will update dashboards through subscribe and\r\n * this waits for completion of the process which returns the new selectedIndex.\r\n *\r\n * @param content\r\n */\r\n deleteDashboard(content) {\r\n this.modalService.open(content).result.then((result: string) => {\r\n if (result === \"Yes\") {\r\n this.dashboardService.deleteDashboard(this.selectedIndex).subscribe((index: number) => {\r\n this.selectedIndex = index;\r\n });\r\n }\r\n });\r\n }\r\n\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {NgModule} from \"@angular/core\";\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {FormsModule} from \"@angular/forms\";\r\n\r\nimport {ColorPickerModule, ColorPickerService} from \"ngx-color-picker\";\r\nimport {NgbModule} from \"@ng-bootstrap/ng-bootstrap\";\r\nimport {DragulaModule, DragulaService} from \"ng2-dragula\";\r\n\r\nimport {DashboardComponent} from \"./dashboard.component\";\r\nimport {WidgetAttributeComponent} from \"./configure/widget-attribute.component\";\r\nimport {WidgetConfigureComponent} from \"./configure/widget-configure.component\";\r\nimport {WidgetAddComponent} from \"./configure/widget-add.component\";\r\nimport {WidgetContainerComponent} from \"./widget/widget-container.component\";\r\nimport {WidgetHostComponent} from \"./widget/widget-host.component\";\r\nimport {WidgetComponent} from \"./widget/widget.component\";\r\nimport {HasEditableAttributesPipe} from \"./pipes/has-editable-attributes.pipe\";\r\n\r\n/**\r\n * A feature module for the dashboard layout and dashboard widgets.\r\n *\r\n * @since 1.0.0\r\n */\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ColorPickerModule,\r\n DragulaModule,\r\n NgbModule\r\n ],\r\n declarations: [\r\n DashboardComponent,\r\n WidgetContainerComponent,\r\n WidgetHostComponent,\r\n WidgetComponent,\r\n WidgetAddComponent,\r\n WidgetConfigureComponent,\r\n WidgetAttributeComponent,\r\n HasEditableAttributesPipe\r\n ],\r\n providers: [\r\n ColorPickerService\r\n ],\r\n exports: [\r\n DashboardComponent,\r\n WidgetContainerComponent,\r\n WidgetHostComponent,\r\n WidgetComponent,\r\n WidgetAddComponent,\r\n WidgetConfigureComponent,\r\n WidgetAttributeComponent\r\n ]\r\n})\r\nexport class DashboardModule {}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\n/**\r\n * A barrel file for the HCI ng dashboard package.\r\n *\r\n * @since 1.0.0\r\n */\r\nexport {DashboardModule} from \"./dashboard.module\";\r\nexport {DashboardComponent} from \"./dashboard.component\";\r\nexport {DashboardService, USER_PROFILE_ENDPOINT, DASHBOARD_TYPE} from \"./services/dashboard.service\";\r\nexport {DashboardGlobalService} from \"./services/dashboard-global.service\";\r\nexport {WidgetHostComponent} from \"./widget/widget-host.component\";\r\nexport {WidgetComponent} from \"./widget/widget.component\";\r\nexport {WidgetContainerComponent} from \"./widget/widget-container.component\";\r\nexport {WidgetAddComponent} from \"./configure/widget-add.component\";\r\nexport {WidgetConfigureComponent} from \"./configure/widget-configure.component\";\r\nexport {WidgetAttributeComponent} from \"./configure/widget-attribute.component\";\r\n\r\nexport {Dashboard} from \"./model/dashboard.entity\";\r\nexport {UserProfile} from \"./model/user-profile.entity\";\r\nexport {Widget} from \"./model/widget.entity\";\r\nexport {WidgetAttribute} from \"./model/widget-attribute.entity\";\r\nexport {WidgetAttributeChoice} from \"./model/widget-attribute-choice.entity\";\r\nexport {WidgetAttributeContainer} from \"./model/widget-attribute-container.entity\";\r\nexport {WidgetAttributeValue} from \"./model/widget-attribute-value.entity\";\r\nexport {WidgetAttributeValueSet} from \"./model/widget-attribute-value-set.entity\";\r\nexport {WidgetCategory} from \"./model/widget-category.entity\";\r\nexport {WidgetInstance} from \"./model/widget-instance.entity\";\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.DashboardService","i3","i4.WidgetAttributeComponent","i5.HasEditableAttributesPipe","i2","i4.WidgetHostComponent","i2.DashboardGlobalService","i4","i5","i6.WidgetContainerComponent","i7.WidgetAddComponent","i8.WidgetConfigureComponent"],"mappings":"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"}
1
+ {"version":3,"file":"huntsman-cancer-institute-dashboard.mjs","sources":["../../../projects/dashboard/src/model/widget-attribute-choice.entity.ts","../../../projects/dashboard/src/model/widget-attribute.entity.ts","../../../projects/dashboard/src/model/widget-attribute-container.entity.ts","../../../projects/dashboard/src/model/widget-attribute-value.entity.ts","../../../projects/dashboard/src/model/widget-attribute-value-set.entity.ts","../../../projects/dashboard/src/model/widget-category.entity.ts","../../../projects/dashboard/src/model/widget.entity.ts","../../../projects/dashboard/src/model/widget-instance.entity.ts","../../../projects/dashboard/src/model/dashboard.entity.ts","../../../projects/dashboard/src/model/user-profile.entity.ts","../../../projects/dashboard/src/model/model.ts","../../../projects/dashboard/src/services/dashboard.service.ts","../../../projects/dashboard/src/widget/widget.component.ts","../../../projects/dashboard/src/configure/widget-attribute.component.ts","../../../projects/dashboard/src/pipes/has-editable-attributes.pipe.ts","../../../projects/dashboard/src/configure/widget-configure.component.ts","../../../projects/dashboard/src/widget/widget-host.component.ts","../../../projects/dashboard/src/widget/widget-container.component.ts","../../../projects/dashboard/src/services/dashboard-global.service.ts","../../../projects/dashboard/src/configure/widget-add.component.ts","../../../projects/dashboard/src/dashboard.component.ts","../../../projects/dashboard/src/dashboard.module.ts","../../../projects/dashboard/src/index.ts","../../../projects/dashboard/src/huntsman-cancer-institute-dashboard.ts"],"sourcesContent":["import {WidgetAttribute} from \"./widget-attribute.entity\";\r\n\r\nexport class WidgetAttributeChoice {\r\n public idWidgetAttributeChoice: number;\r\n public value: string;\r\n public display: string;\r\n\r\n deserialize(object): WidgetAttributeChoice {\r\n this.idWidgetAttributeChoice = object.idWidgetAttributeChoice;\r\n this.value = object.value;\r\n this.display = object.display;\r\n\r\n return this;\r\n }\r\n\r\n deserializeArray(list: Object[]): WidgetAttributeChoice[] {\r\n let choices: WidgetAttributeChoice[] = [];\r\n for (var i = 0; i < list.length; i++) {\r\n choices.push(new WidgetAttributeChoice().deserialize(list[i]));\r\n }\r\n return choices;\r\n }\r\n}\r\n","import {WidgetAttributeChoice} from \"./widget-attribute-choice.entity\";\r\n\r\nexport class WidgetAttribute {\r\n public idWidgetAttribute: number;\r\n public idWidgetAttributeContainer: number;\r\n public name: string;\r\n public display: string;\r\n public dataType: string;\r\n public multiValue: boolean;\r\n public userEditable: boolean;\r\n public sortOrder: number;\r\n public defaultValue: string;\r\n public widgetAttributeChoices: WidgetAttributeChoice[];\r\n\r\n deserialize(object): WidgetAttribute {\r\n this.idWidgetAttribute = object.idWidgetAttribute;\r\n this.idWidgetAttributeContainer = object.idWidgetAttributeContainer;\r\n this.name = object.name;\r\n this.display = object.display;\r\n this.dataType = object.dataType;\r\n this.multiValue = object.multiValue;\r\n this.userEditable = object.userEditable;\r\n this.sortOrder = object.sortOrder;\r\n this.defaultValue = object.defaultValue;\r\n\r\n if (object.widgetAttributeChoices) {\r\n this.widgetAttributeChoices = [];\r\n for (var i = 0; i < object.widgetAttributeChoices.length; i++) {\r\n this.widgetAttributeChoices.push(new WidgetAttributeChoice().deserialize(object.widgetAttributeChoices[i]));\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n deserializeArray(list: Object[]): WidgetAttribute[] {\r\n let attributes: WidgetAttribute[] = [];\r\n for (var i = 0; i < list.length; i++) {\r\n attributes.push(new WidgetAttribute().deserialize(list[i]));\r\n }\r\n return attributes;\r\n }\r\n\r\n}\r\n","import {WidgetAttribute} from \"./widget-attribute.entity\";\r\n\r\nexport class WidgetAttributeContainer {\r\n public idWidgetAttributeContainer: number;\r\n public name: string;\r\n public sortOrder: number;\r\n public hidden: boolean;\r\n public attributes: WidgetAttribute[];\r\n public attributeMap: Map<string, WidgetAttribute> = new Map<string, WidgetAttribute>();\r\n\r\n static merge(attributeMapParent: Map<string, WidgetAttribute>, attributeMapChild: Map<string, WidgetAttribute>): Map<string, WidgetAttribute> {\r\n let attributeMap: Map<string, WidgetAttribute> = new Map<string, WidgetAttribute>();\r\n\r\n for (let attribute of attributeMapParent.values()) {\r\n attributeMap.set(attribute.name, attribute);\r\n }\r\n\r\n for (let attribute of attributeMapChild.values()) {\r\n attributeMap.set(attribute.name, attribute);\r\n }\r\n\r\n return attributeMap;\r\n }\r\n\r\n deserialize(object): WidgetAttributeContainer {\r\n this.idWidgetAttributeContainer = object.idWidgetAttributeContainer;\r\n this.name = object.name;\r\n this.sortOrder = object.sortOrder;\r\n this.hidden = object.hidden;\r\n this.attributeMap = new Map<string, WidgetAttribute>();\r\n\r\n if (object.attributes) {\r\n this.attributes = [];\r\n for (var i = 0; i < object.attributes.length; i++) {\r\n let attribute: WidgetAttribute = new WidgetAttribute().deserialize(object.attributes[i]);\r\n this.attributes.push(attribute);\r\n this.attributeMap.set(attribute.name, attribute);\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n deserializeArray(list: Object[]): WidgetAttributeContainer[] {\r\n let attributeContainers: WidgetAttributeContainer[] = [];\r\n for (var i = 0; i < list.length; i++) {\r\n attributeContainers.push(new WidgetAttributeContainer().deserialize(list[i]));\r\n }\r\n return attributeContainers;\r\n }\r\n\r\n generateAttributeMap() {\r\n this.attributeMap = new Map<string, WidgetAttribute>();\r\n for (let attribute of this.attributes) {\r\n this.attributeMap.set(attribute.name, attribute);\r\n }\r\n }\r\n\r\n}\r\n","export class WidgetAttributeValue {\r\n public idWidgetAttributeValue: number;\r\n //public idWidgetAttributeValueSet: number;\r\n public idWidgetAttribute: number;\r\n public valueString: string;\r\n public valueBoolean: boolean;\r\n public valueDate: number;\r\n public valueInteger: number;\r\n public valueNumeric: number;\r\n\r\n deserialize(object): WidgetAttributeValue {\r\n this.idWidgetAttributeValue = object.idWidgetAttributeValue;\r\n //this.idWidgetAttributeValueSet = object.idWidgetAttributeValueSet;\r\n this.idWidgetAttribute = object.idWidgetAttribute;\r\n this.valueString = object.valueString;\r\n this.valueBoolean = object.valueBoolean;\r\n this.valueDate = object.valueDate;\r\n this.valueInteger = object.valueInteger;\r\n this.valueNumeric = object.valueNumeric;\r\n\r\n return this;\r\n }\r\n}\r\n","import {WidgetAttributeValue} from \"./widget-attribute-value.entity\";\r\n\r\nexport class WidgetAttributeValueSet {\r\n public idWidgetAttributeValueSet: number = undefined;\r\n public attributeValues: WidgetAttributeValue[] = [];\r\n\r\n deserialize(object): WidgetAttributeValueSet {\r\n this.idWidgetAttributeValueSet = object.idWidgetAttributeValueSet;\r\n\r\n if (object.attributeValues) {\r\n this.attributeValues = [];\r\n for (var i = 0; i < object.attributeValues.length; i++) {\r\n this.attributeValues.push(new WidgetAttributeValue().deserialize(object.attributeValues[i]));\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n idReset() {\r\n if (this.idWidgetAttributeValueSet < 0) {\r\n this.idWidgetAttributeValueSet = undefined;\r\n }\r\n\r\n if (this.attributeValues) {\r\n for (let attributeValue of this.attributeValues) {\r\n if (attributeValue.idWidgetAttributeValue < 0) {\r\n attributeValue.idWidgetAttributeValue = undefined;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","export class WidgetCategory {\r\n public idWidgetCategory: number;\r\n public category: string;\r\n public icon: string;\r\n\r\n deserialize(object): WidgetCategory {\r\n this.idWidgetCategory = object.idWidgetCategory;\r\n this.category = object.category;\r\n this.icon = object.icon;\r\n\r\n return this;\r\n }\r\n\r\n deserializeArray(list: Object[]): WidgetCategory[] {\r\n let widgetCategories: WidgetCategory[] = [];\r\n for (var i = 0; i < list.length; i++) {\r\n widgetCategories.push(new WidgetCategory().deserialize(list[i]));\r\n }\r\n return widgetCategories;\r\n }\r\n}\r\n","import {WidgetAttributeContainer} from \"./widget-attribute-container.entity\";\r\nimport {WidgetAttributeValueSet} from \"./widget-attribute-value-set.entity\";\r\nimport {WidgetCategory} from \"./widget-category.entity\";\r\n\r\nexport class Widget {\r\n public idWidget: number;\r\n public instantiable: boolean;\r\n public parentWidget: Widget;\r\n public name: string;\r\n public component: string;\r\n public title: string;\r\n public icon: string;\r\n public description: string;\r\n public keywords: string;\r\n public widgetCategories: WidgetCategory[];\r\n public attributeContainers: WidgetAttributeContainer[];\r\n public attributeContainerMap: Map<string, WidgetAttributeContainer> = new Map<string, WidgetAttributeContainer>();\r\n public attributeValueSet: WidgetAttributeValueSet;\r\n\r\n static merge(attributeContainerMapParent: Map<string, WidgetAttributeContainer>, attributeContainerMapChild: Map<string, WidgetAttributeContainer>): Map<string, WidgetAttributeContainer> {\r\n let attributeContainerMap: Map<string, WidgetAttributeContainer> = new Map<string, WidgetAttributeContainer>();\r\n\r\n if (attributeContainerMapParent.size > 0) {\r\n for (let attributeContainer of attributeContainerMapParent.values()) {\r\n attributeContainerMap.set(attributeContainer.name, attributeContainer);\r\n }\r\n }\r\n\r\n for (let attributeContainer of attributeContainerMapChild.values()) {\r\n if (attributeContainerMap.has(attributeContainer.name)) {\r\n attributeContainer.attributeMap = WidgetAttributeContainer.merge(attributeContainerMap.get(attributeContainer.name).attributeMap, attributeContainer.attributeMap);\r\n }\r\n\r\n attributeContainerMap.set(attributeContainer.name, attributeContainer);\r\n }\r\n\r\n for (let attributeContainer of attributeContainerMap.values()) {\r\n attributeContainer.attributes = Array.from(attributeContainer.attributeMap.values());\r\n attributeContainerMap.set(attributeContainer.name, attributeContainer);\r\n }\r\n\r\n return attributeContainerMap;\r\n }\r\n\r\n deserialize(object): Widget {\r\n this.idWidget = object.idWidget;\r\n this.instantiable = object.instantiable;\r\n this.name = object.name;\r\n this.title = object.title;\r\n this.component = object.component;\r\n this.icon = object.icon;\r\n this.description = object.description;\r\n this.keywords = object.keywords;\r\n\r\n this.attributeContainerMap = new Map<string, WidgetAttributeContainer>();\r\n\r\n if (object.parentWidget) {\r\n this.parentWidget = new Widget().deserialize(object.parentWidget);\r\n }\r\n\r\n if (object.widgetCategories) {\r\n this.widgetCategories = new WidgetCategory().deserializeArray(object.widgetCategories);\r\n }\r\n\r\n if (object.attributeContainers) {\r\n this.attributeContainers = [];\r\n for (var i = 0; i < object.attributeContainers.length; i++) {\r\n let attributeContainer: WidgetAttributeContainer = new WidgetAttributeContainer().deserialize(object.attributeContainers[i]);\r\n this.attributeContainers.push(attributeContainer);\r\n this.attributeContainerMap.set(attributeContainer.name, attributeContainer);\r\n }\r\n }\r\n if (this.parentWidget) {\r\n this.attributeContainerMap = Widget.merge(this.attributeContainerMap, this.parentWidget.attributeContainerMap);\r\n }\r\n\r\n if (object.attributeValueSet) {\r\n this.attributeValueSet = new WidgetAttributeValueSet().deserialize(object.attributeValueSet);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n deserializeArray(list: Object[]): Widget[] {\r\n let widgets: Widget[] = [];\r\n for (var i = 0; i < list.length; i++) {\r\n widgets.push(new Widget().deserialize(list[i]));\r\n }\r\n return widgets;\r\n }\r\n\r\n /**\r\n * Convert the json array of containers in to a map based on the attribute container name.\r\n */\r\n generateAttributeContainerMap() {\r\n this.attributeContainerMap = new Map<string, WidgetAttributeContainer>();\r\n for (let attributeContainer of this.attributeContainers) {\r\n this.attributeContainerMap.set(attributeContainer.name, attributeContainer);\r\n }\r\n }\r\n\r\n hasAttributes() {\r\n if (this.attributeContainers === undefined) {\r\n return false;\r\n } else {\r\n for (let attributeContainer of this.attributeContainers) {\r\n if (attributeContainer.attributes && attributeContainer.attributes.length > 0) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n }\r\n\r\n}\r\n","import {Widget} from \"./widget.entity\";\r\nimport {WidgetAttributeValueSet} from \"./widget-attribute-value-set.entity\";\r\n\r\nexport class WidgetInstance {\r\n public idWidgetInstance: number;\r\n public idDashboard: number;\r\n public widget: Widget;\r\n public sortOrder: number;\r\n public attributeValueSet: WidgetAttributeValueSet;\r\n\r\n deserialize(object: any): WidgetInstance {\r\n this.idWidgetInstance = object.idWidgetInstance;\r\n this.idDashboard = object.idDashboard;\r\n this.sortOrder = object.sortOrder;\r\n\r\n if (object.widget) {\r\n this.widget = new Widget().deserialize(object.widget);\r\n }\r\n if (object.attributeValueSet) {\r\n this.attributeValueSet = new WidgetAttributeValueSet().deserialize(object.attributeValueSet);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n idReset() {\r\n if (this.idWidgetInstance < 0) {\r\n this.idWidgetInstance = undefined;\r\n }\r\n\r\n if (this.attributeValueSet) {\r\n this.attributeValueSet.idReset();\r\n }\r\n }\r\n\r\n}\r\n","import {WidgetInstance} from \"./widget-instance.entity\";\r\n\r\nexport class Dashboard {\r\n public idDashboard: number;\r\n public idUserProfile: number;\r\n public name: string;\r\n public sortOrder: number;\r\n public idDashboardType: number;\r\n public widgetInstances: WidgetInstance[] = [];\r\n\r\n deserialize(object): Dashboard {\r\n this.idDashboard = object.idDashboard;\r\n this.idUserProfile = object.idUserProfile;\r\n this.name = object.name;\r\n this.sortOrder = object.sortOrder;\r\n this.idDashboardType = object.idDashboardType;\r\n\r\n if (object.widgetInstances) {\r\n this.widgetInstances = [];\r\n for (var i = 0; i < object.widgetInstances.length; i++) {\r\n this.widgetInstances.push(new WidgetInstance().deserialize(object.widgetInstances[i]));\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n deserializeArray(list: Object[]): Dashboard[] {\r\n let dashboards: Dashboard[] = [];\r\n for (var i = 0; i < list.length; i++) {\r\n dashboards.push(new Dashboard().deserialize(list[i]));\r\n }\r\n return dashboards;\r\n }\r\n\r\n}\r\n","import {Dashboard} from \"./dashboard.entity\";\r\n\r\nexport class UserProfile {\r\n public idUserProfile: number;\r\n public idUser: number;\r\n public dashboards: Dashboard[];\r\n\r\n deserialize(object): UserProfile {\r\n this.idUserProfile = object.idUserProfile;\r\n this.idUser = object.idUser;\r\n\r\n if (object.dashboards) {\r\n this.dashboards = [];\r\n for (var i = 0; i < object.dashboards.length; i++) {\r\n this.dashboards.push(new Dashboard().deserialize(object.dashboards[i]));\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\n/**\r\n * A barrel file for dashboard models.\r\n *\r\n * @since 3.0.0\r\n */\r\nexport {Dashboard} from \"./dashboard.entity\";\r\nexport {UserProfile} from \"./user-profile.entity\";\r\nexport {Widget} from \"./widget.entity\";\r\nexport {WidgetAttribute} from \"./widget-attribute.entity\";\r\nexport {WidgetAttributeChoice} from \"./widget-attribute-choice.entity\";\r\nexport {WidgetAttributeContainer} from \"./widget-attribute-container.entity\";\r\nexport {WidgetAttributeValue} from \"./widget-attribute-value.entity\";\r\nexport {WidgetAttributeValueSet} from \"./widget-attribute-value-set.entity\";\r\nexport {WidgetCategory} from \"./widget-category.entity\";\r\nexport {WidgetInstance} from \"./widget-instance.entity\";\r\n","import {Inject, Injectable, InjectionToken, isDevMode, Type} from \"@angular/core\";\r\nimport {HttpClient, HttpParams} from \"@angular/common/http\";\r\n\r\nimport {BehaviorSubject, forkJoin, Observable, Subject} from \"rxjs\";\r\nimport {map} from \"rxjs/operators\";\r\n\r\nimport {WidgetComponent} from \"../widget/widget.component\";\r\nimport {Dashboard, Widget, WidgetAttribute, WidgetAttributeContainer,\r\n WidgetAttributeValue, WidgetAttributeValueSet, WidgetCategory, WidgetInstance} from \"../model/model\";\r\n\r\nexport let USER_PROFILE_ENDPOINT: InjectionToken<string> = new InjectionToken(\"userProfileEndpoint\");\r\nexport let DASHBOARD_TYPE: InjectionToken<string> = new InjectionToken(\"dashboardType\");\r\nexport let WIDGET_COMPONENTS: InjectionToken<Type<any>[]> = new InjectionToken(\"widgetComponents\");\r\n\r\n/**\r\n * The service holds the configuration array for the widgets. Widgets can access their configuration from here.\r\n *\r\n * @since 1.0.0\r\n */\r\n@Injectable()\r\nexport class DashboardService {\r\n\r\n public addWidgetSubject: Subject<boolean> = new Subject<boolean>();\r\n public configurationWidgetInstanceSubject: BehaviorSubject<WidgetInstance> = new BehaviorSubject<WidgetInstance>(undefined);\r\n public updateWidgetInstanceSubject: Subject<WidgetInstance> = new Subject<WidgetInstance>();\r\n\r\n public dashboardsState: Subject<Dashboard[]> = new Subject<Dashboard[]>();\r\n\r\n private widgetAttributeUpdatedSubject: Subject<number> = new Subject<number>();\r\n\r\n private dashboards: Dashboard[] = [];\r\n\r\n private widgets: BehaviorSubject<Widget[]> = new BehaviorSubject<Widget[]>(undefined);\r\n private widgetCategories: WidgetCategory[];\r\n\r\n private widgetRendered: Subject<boolean> = new Subject<boolean>();\r\n private editMode: boolean = false;\r\n private editModeSubject: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\r\n\r\n private idNew: number = -1;\r\n private configurationWidgetInstance: WidgetInstance;\r\n private configurationAttributeContainers: WidgetAttributeContainer[];\r\n private attributeContainerMap: Map<string, WidgetAttributeContainer> = new Map<string, WidgetAttributeContainer>();\r\n\r\n private configWidgetComponent: WidgetComponent;\r\n private preConfigAttributeValueSet: WidgetAttributeValueSet;\r\n\r\n private widgetComponentCreated: Subject<number> = new Subject<number>();\r\n private registeredWidgetComponents: Map<number, WidgetComponent> = new Map<number, WidgetComponent>();\r\n private widgetComponentSubjects: Map<number, BehaviorSubject<WidgetComponent>> = new Map<number, BehaviorSubject<WidgetComponent>>();\r\n\r\n /**\r\n * Interacts with the backend service to get the user profile and widgets. Also manages widgets as they are added and\r\n * edited such that widget attributes are stored in one place.\r\n *\r\n * @param http\r\n * @param userProfileEndpoint\r\n */\r\n constructor(private http: HttpClient,\r\n @Inject(USER_PROFILE_ENDPOINT) private userProfileEndpoint: string,\r\n @Inject(DASHBOARD_TYPE) private dashboardType: string) {\r\n if (isDevMode()) {\r\n console.debug(\"DashboardService constructor\");\r\n }\r\n\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.attributeContainerMap.set(\"Common\", new WidgetAttributeContainer());\r\n\r\n this.widgetRendered.next(false);\r\n this.editModeSubject.next(this.editMode);\r\n\r\n this.http.get(this.userProfileEndpoint + \"/user-profile/my\").subscribe((response: any) => {\r\n forkJoin([\r\n this.http.get(this.userProfileEndpoint + \"/attribute/common-attributes\"),\r\n this.http.get(this.userProfileEndpoint + \"/widget/widget-categories\"),\r\n this.http.get(this.userProfileEndpoint + \"/widget/widget-list\", {params: new HttpParams().set(\"dashboardType\", this.dashboardType)}),\r\n this.http.get(this.userProfileEndpoint + \"/dashboard\", {params: new HttpParams().set(\"dashboardType\", this.dashboardType)})\r\n ]).subscribe(responses => {\r\n this.setCommonAttributes(responses[0]);\r\n this.setWidgetCategories(responses[1]);\r\n this.setWidgets(responses[2]);\r\n this.setDashboards(responses[3]);\r\n\r\n this.pushDashboardState();\r\n });\r\n });\r\n }\r\n\r\n setConfigWidgetComponent(configWidgetComponent: WidgetComponent) {\r\n this.configWidgetComponent = configWidgetComponent;\r\n }\r\n\r\n getConfigWidgetComponent(): WidgetComponent {\r\n return this.configWidgetComponent;\r\n }\r\n\r\n doAddWidget() {\r\n this.addWidgetSubject.next(true);\r\n }\r\n\r\n getCommonAttributes(): Map<string, WidgetAttributeContainer> {\r\n return this.attributeContainerMap;\r\n }\r\n\r\n setCommonAttributes(response: any) {\r\n if (isDevMode()) {\r\n console.debug(\"DashboardService.setCommonAttributes()\");\r\n }\r\n\r\n let commonAttributeContainer: WidgetAttributeContainer = new WidgetAttributeContainer();\r\n commonAttributeContainer.name = \"Common\";\r\n commonAttributeContainer.sortOrder = 0;\r\n commonAttributeContainer.attributes = new WidgetAttribute().deserializeArray(response);\r\n commonAttributeContainer.generateAttributeMap();\r\n this.attributeContainerMap = new Map<string, WidgetAttributeContainer>();\r\n this.attributeContainerMap.set(\"Common\", commonAttributeContainer);\r\n\r\n if (isDevMode()) {\r\n console.debug(\"DashboardService.setCommonAttributes(); Setting common attributes:\");\r\n console.debug(commonAttributeContainer.attributes);\r\n }\r\n }\r\n\r\n /**\r\n * Return the array of dashboards. Each dashboard contains an array of widgets.\r\n *\r\n * @returns {Dashboard[]}\r\n */\r\n getDashboards(): Dashboard[] {\r\n return this.dashboards;\r\n }\r\n\r\n /**\r\n * Calls the backend to fetch the list of widgets available.\r\n *\r\n */\r\n setWidgets(response: any) {\r\n if (isDevMode()) {\r\n console.debug(\"DashboardService.setWidgets()\");\r\n }\r\n\r\n this.widgets.next(<Widget[]>response);\r\n }\r\n\r\n /**\r\n * Calls the backend to fetch the list of widget categories available.\r\n *\r\n */\r\n setWidgetCategories(response: any) {\r\n if (isDevMode()) {\r\n console.debug(\"DashboardService.setWidgetCategories()\");\r\n }\r\n\r\n this.widgetCategories = <WidgetCategory[]>response;\r\n }\r\n\r\n /**\r\n * Sets the dashboards after the user profile is fetched. Upon fetch, the widgets within each dashboard are sorted\r\n * by their sortOrder.\r\n *\r\n * @param dashboards\r\n */\r\n setDashboards(response: any) {\r\n if (isDevMode()) {\r\n console.debug(\"DashboardService.setDashboards()\");\r\n }\r\n\r\n this.dashboards = new Dashboard().deserializeArray(response);\r\n\r\n if (!this.dashboards) {\r\n this.dashboards = [];\r\n }\r\n\r\n if (isDevMode()) {\r\n console.debug(this.dashboards);\r\n }\r\n\r\n for (var d = 0; d < this.dashboards.length; d++) {\r\n this.dashboards[d].widgetInstances = this.dashboards[d].widgetInstances.sort((a: WidgetInstance, b: WidgetInstance) => {\r\n if (a.sortOrder !== undefined && b.sortOrder !== undefined) {\r\n let aa: number = <number>a.sortOrder;\r\n let bb: number = <number>b.sortOrder;\r\n if (aa < bb) {\r\n return -1;\r\n } else if (aa > bb) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n } else if (a.sortOrder !== undefined) {\r\n return -1;\r\n } else if (b.sortOrder !== undefined) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n });\r\n };\r\n }\r\n\r\n pushDashboardState() {\r\n this.dashboardsState.next(this.dashboards);\r\n }\r\n\r\n /**\r\n * Returns the list of widget categories for searching/filtering widgets.\r\n *\r\n * @returns {WidgetCategory[]}\r\n */\r\n getWidgetCategories() : WidgetCategory[] {\r\n return this.widgetCategories;\r\n }\r\n\r\n /**\r\n * Filter widgets by title or keyword.\r\n * TODO: Add any other metrics on which to filter by.\r\n *\r\n * @param filter\r\n * @returns {Widget[]}\r\n */\r\n getWidgetsByFilter(filter: string): Widget[] {\r\n if (!filter || filter.length === 0) {\r\n let filteredList: Widget[] = [];\r\n for (var i = 0; i < this.widgets.getValue().length; i++) {\r\n if (this.widgets.getValue()[i].instantiable) {\r\n filteredList.push(this.widgets.getValue()[i]);\r\n }\r\n }\r\n return filteredList;\r\n } else if (filter) {\r\n let filteredList: Widget[] = [];\r\n filter = filter.toLowerCase();\r\n for (var i = 0; i < this.widgets.getValue().length; i++) {\r\n if (this.widgets.getValue()[i].instantiable) {\r\n if (this.widgets.getValue()[i].title && this.widgets.getValue()[i].title.toLowerCase().indexOf(filter) !== -1) {\r\n filteredList.push(this.widgets.getValue()[i]);\r\n } else if (this.widgets.getValue()[i].description && this.widgets.getValue()[i].description.toLowerCase().indexOf(filter) !== -1) {\r\n filteredList.push(this.widgets.getValue()[i]);\r\n }\r\n }\r\n }\r\n return filteredList;\r\n } else {\r\n return this.widgets.getValue();\r\n }\r\n }\r\n\r\n /**\r\n * For a particular attribute, return all current attribute values for it.\r\n *\r\n * @param idWidgetInstance\r\n * @param idWidgetAttribute\r\n * @returns {WidgetInstanceAttributeValue[]}\r\n */\r\n getAttributeValues(idWidgetInstance: number, idWidgetAttribute: number): WidgetAttributeValue[] {\r\n let attributeValues: WidgetAttributeValue[] = [];\r\n\r\n for (var d = 0; d < this.dashboards.length; d++) {\r\n for (var w = 0; w < this.dashboards[d].widgetInstances.length; w++) {\r\n if (this.dashboards[d].widgetInstances[w].idWidgetInstance === idWidgetInstance) {\r\n attributeValues = this.dashboards[d].widgetInstances[w].attributeValueSet.attributeValues.filter((value: WidgetAttributeValue) => {\r\n return value.idWidgetAttribute === idWidgetAttribute;\r\n });\r\n if (attributeValues.length === 0) {\r\n return this.dashboards[d].widgetInstances[w].widget.attributeValueSet.attributeValues.filter((value: WidgetAttributeValue) => {\r\n return value.idWidgetAttribute === idWidgetAttribute;\r\n });\r\n } else {\r\n return attributeValues;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return [];\r\n }\r\n\r\n setConfigurationAttributeContainers(configurationAttributeContainers: WidgetAttributeContainer[]) {\r\n if (isDevMode()) {\r\n console.debug(\"DashboardService.setConfigurationAttributeContainers()\");\r\n console.debug(configurationAttributeContainers);\r\n }\r\n\r\n this.configurationAttributeContainers = configurationAttributeContainers;\r\n }\r\n\r\n /**\r\n * For a particular attribute, return all current attribute values for it.\r\n *\r\n * @param idWidgetAttribute\r\n * @returns {WidgetInstanceAttributeValue[]}\r\n */\r\n getConfigurationAttributeValues(idWidgetAttribute: number): WidgetAttributeValue[] {\r\n if (isDevMode()) {\r\n console.debug(\"DashboardService.getConfigurationAttributeValues(); idWidgetAttribute = \" + idWidgetAttribute);\r\n }\r\n\r\n let attributeValues: WidgetAttributeValue[] = [];\r\n\r\n if (this.configurationAttributeContainers) {\r\n for (var ac = 0; ac < this.configurationAttributeContainers.length; ac++) {\r\n for (var a = 0; a < this.configurationAttributeContainers[ac].attributes.length; a++) {\r\n if (this.configurationAttributeContainers[ac].attributes[a].idWidgetAttribute === idWidgetAttribute) {\r\n for (var v = 0; v < this.configurationWidgetInstance.attributeValueSet.attributeValues.length; v++) {\r\n if (this.configurationAttributeContainers[ac].attributes[a].idWidgetAttribute === this.configurationWidgetInstance.attributeValueSet.attributeValues[v].idWidgetAttribute) {\r\n attributeValues.push(this.configurationWidgetInstance.attributeValueSet.attributeValues[v]);\r\n }\r\n }\r\n if (attributeValues.length === 0) {\r\n let attributeValue: WidgetAttributeValue = new WidgetAttributeValue();\r\n attributeValue.idWidgetAttributeValue = this.getIdNew();\r\n attributeValue.idWidgetAttribute = idWidgetAttribute;\r\n\r\n if (this.configurationAttributeContainers[ac].attributes[a].defaultValue) {\r\n if (this.configurationAttributeContainers[ac].attributes[a].dataType === \"integer\") {\r\n attributeValue.valueInteger = parseInt(this.configurationAttributeContainers[ac].attributes[a].defaultValue);\r\n } else if (this.configurationAttributeContainers[ac].attributes[a].dataType === \"checkbox\") {\r\n attributeValue.valueBoolean = this.configurationAttributeContainers[ac].attributes[a].defaultValue.toLowerCase() === \"true\" ? true : false;\r\n } else {\r\n attributeValue.valueString = this.configurationAttributeContainers[ac].attributes[a].defaultValue;\r\n }\r\n }\r\n\r\n attributeValues.push(attributeValue);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (isDevMode()) {\r\n console.debug(attributeValues);\r\n }\r\n\r\n return attributeValues;\r\n }\r\n\r\n /**\r\n * After completion of a drag and drop, iterate the element selector with a number starting at 1 and save each\r\n * widget instance with the new sort order. If the existing sort order is the same, then don't update.\r\n *\r\n * @param selectedDashboard\r\n * @param idWidgetInstance\r\n * @param sortOrder\r\n */\r\n saveWidgetSortOrder(selectedDashboard: number, idWidgetInstance: number, sortOrder: number) {\r\n for (var w = 0; w < this.dashboards[selectedDashboard].widgetInstances.length; w++) {\r\n if (this.dashboards[selectedDashboard].widgetInstances[w].idWidgetInstance === idWidgetInstance\r\n && this.dashboards[selectedDashboard].widgetInstances[w].sortOrder !== sortOrder) {\r\n this.http\r\n .post(this.userProfileEndpoint + \"/widget/widget-instance/\" + idWidgetInstance + \"/sort-order\", { \"sortOrder\": sortOrder })\r\n .subscribe(response => {\r\n // 200\r\n });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Set the widget instance to be edited (or added).\r\n *\r\n * @param widgetInstance The widget which may or may not be persisted.\r\n * @param add Indicate if the widget is being added or an existing widget being configured.\r\n */\r\n setConfigurationWidgetInstance(widgetInstance: WidgetInstance, widgetComponent: WidgetComponent, add: boolean) {\r\n this.setConfigWidgetComponent(widgetComponent);\r\n\r\n if (!widgetInstance.attributeValueSet) {\r\n this.http\r\n .put(this.userProfileEndpoint + \"/widget/widget-instance/\" + widgetInstance.idWidgetInstance + \"/attribute-value-set\", JSON.stringify(new WidgetAttributeValueSet()))\r\n .subscribe((response: any) => {\r\n widgetInstance.attributeValueSet = new WidgetAttributeValueSet().deserialize(response);\r\n\r\n this.postSetConfigurationWidgetInstance(widgetInstance, add);\r\n });\r\n } else {\r\n this.postSetConfigurationWidgetInstance(widgetInstance, add);\r\n }\r\n }\r\n\r\n postSetConfigurationWidgetInstance(widgetInstance: WidgetInstance, add: boolean) {\r\n if (isDevMode()) {\r\n console.debug(\"postSetConfigurationWidgetInstance\");\r\n }\r\n\r\n this.configurationWidgetInstance = widgetInstance;\r\n this.configurationWidgetInstanceSubject.next(widgetInstance);\r\n\r\n this.preConfigAttributeValueSet = new WidgetAttributeValueSet().deserialize(widgetInstance.attributeValueSet);\r\n if (isDevMode()) {\r\n console.debug(\"postSetConfigurationWidgetInstance: \" + JSON.stringify(this.preConfigAttributeValueSet));\r\n }\r\n }\r\n\r\n /**\r\n * When values are updated in the add/config screen, push them to the stored instance. If any there are new values,\r\n * then they must be pushed. If there are values that no longer exist, then they must be deleted.\r\n *\r\n * @param idWidgetAttribute\r\n * @param attributeValues\r\n * @returns {WidgetInstanceAttributeValue[]}\r\n */\r\n setConfigurationAttributeValues(idWidgetAttribute: number, attributeValues: WidgetAttributeValue[]): WidgetAttributeValue[] {\r\n /* Add new values. */\r\n for (var i = 0; i < attributeValues.length; i++) {\r\n let exists: boolean = false;\r\n for (var v = 0; v < this.configurationWidgetInstance.attributeValueSet.attributeValues.length; v++) {\r\n if (this.configurationWidgetInstance.attributeValueSet.attributeValues[v].idWidgetAttributeValue === attributeValues[i].idWidgetAttributeValue) {\r\n this.configurationWidgetInstance.attributeValueSet.attributeValues[v] = attributeValues[i];\r\n exists = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!exists) {\r\n if (!attributeValues[i].idWidgetAttributeValue) {\r\n attributeValues[i].idWidgetAttributeValue = this.getIdNew();\r\n }\r\n this.configurationWidgetInstance.attributeValueSet.attributeValues.push(attributeValues[i]);\r\n }\r\n }\r\n\r\n /* Delete old values. */\r\n for (var v = this.configurationWidgetInstance.attributeValueSet.attributeValues.length - 1; v >= 0; v--) {\r\n if (this.configurationWidgetInstance.attributeValueSet.attributeValues[v].idWidgetAttribute !== idWidgetAttribute) {\r\n continue;\r\n }\r\n\r\n let exists: boolean = false;\r\n for (var i = 0; i < attributeValues.length; i++) {\r\n if (this.configurationWidgetInstance.attributeValueSet.attributeValues[v].idWidgetAttributeValue === attributeValues[i].idWidgetAttributeValue) {\r\n exists = true;\r\n break;\r\n }\r\n }\r\n if (!exists) {\r\n this.configurationWidgetInstance.attributeValueSet.attributeValues.splice(v, 1);\r\n }\r\n }\r\n\r\n return attributeValues;\r\n }\r\n\r\n /**\r\n * Maintain uniqueness of new instances. At some point we must decide when to persist to database to have the ids generated.\r\n *\r\n * @returns {number}\r\n */\r\n getIdNew(): number {\r\n return this.idNew--;\r\n }\r\n\r\n cancelConfigurationWidget() {\r\n if (isDevMode()) {\r\n console.debug(\"cancelConfigurationWidget: \" + JSON.stringify(this.preConfigAttributeValueSet));\r\n }\r\n\r\n let dashboardIndex: number = undefined;\r\n let widgetIndex: number = undefined;\r\n\r\n for (var d = 0; d < this.dashboards.length; d++) {\r\n for (var w = 0; w < this.dashboards[d].widgetInstances.length; w++) {\r\n if (this.dashboards[d].widgetInstances[w].idWidgetInstance === this.configurationWidgetInstance.idWidgetInstance) {\r\n dashboardIndex = d;\r\n widgetIndex = w;\r\n break;\r\n }\r\n }\r\n if (dashboardIndex && widgetIndex) {\r\n break;\r\n }\r\n }\r\n\r\n this.dashboards[dashboardIndex].widgetInstances[widgetIndex].attributeValueSet = this.preConfigAttributeValueSet;\r\n this.configurationWidgetInstanceSubject.next(undefined);\r\n this.updateWidgetInstanceSubject.next(this.dashboards[dashboardIndex].widgetInstances[widgetIndex]);\r\n }\r\n\r\n /**\r\n * When attributes are finalized after adding/editing a widget, this will set those attributes to the widget instance.\r\n */\r\n saveConfigurationWidget() {\r\n let dashboardIndex: number = undefined;\r\n let widgetIndex: number = undefined;\r\n\r\n for (var d = 0; d < this.dashboards.length; d++) {\r\n for (var w = 0; w < this.dashboards[d].widgetInstances.length; w++) {\r\n if (this.dashboards[d].widgetInstances[w].idWidgetInstance === this.configurationWidgetInstance.idWidgetInstance) {\r\n dashboardIndex = d;\r\n widgetIndex = w;\r\n break;\r\n }\r\n }\r\n if (dashboardIndex && widgetIndex) {\r\n break;\r\n }\r\n }\r\n\r\n let idWidgetInstance: number = this.dashboards[dashboardIndex].widgetInstances[widgetIndex].idWidgetInstance;\r\n\r\n this.http\r\n .post(this.userProfileEndpoint + \"/widget/widget-instance/\" + idWidgetInstance + \"/attribute-value-set\", JSON.stringify(this.configurationWidgetInstance.attributeValueSet))\r\n .subscribe(((response: any) => {\r\n this.dashboards[dashboardIndex].widgetInstances[widgetIndex].attributeValueSet = new WidgetAttributeValueSet().deserialize(response);\r\n\r\n this.updateWidgetInstanceSubject.next(this.dashboards[dashboardIndex].widgetInstances[widgetIndex]);\r\n }));\r\n\r\n this.configurationWidgetInstance = undefined;\r\n this.configurationWidgetInstanceSubject.next(undefined);\r\n }\r\n\r\n /**\r\n * Add a new widget into the currently selected dashboard.\r\n *\r\n * @param selectedWidget\r\n * @param widgetInstance\r\n * @param dashboardIndex\r\n * @param step\r\n */\r\n addWidget(selectedWidget: Widget, widgetInstance: WidgetInstance, dashboardIndex: number, step: number) {\r\n if (step === 2) {\r\n widgetInstance = this.configurationWidgetInstance;\r\n }\r\n\t widgetInstance.idDashboard = this.dashboards[dashboardIndex].idDashboard;\r\n widgetInstance.sortOrder = this.dashboards[dashboardIndex].widgetInstances.length;\r\n\t widgetInstance.idReset();\r\n\r\n this.http\r\n .put(this.userProfileEndpoint + \"/widget/widget-instance/\", JSON.stringify(widgetInstance))\r\n .subscribe((response: any) => {\r\n widgetInstance = new WidgetInstance().deserialize(response);\r\n this.dashboards[dashboardIndex].widgetInstances.push(widgetInstance);\r\n this.dashboardsState.next(this.dashboards);\r\n\r\n if (widgetInstance.widget && widgetInstance.widget.hasAttributes()) {\r\n this.setConfigurationWidgetInstance(widgetInstance, this.getWidgetComponent(widgetInstance.idWidgetInstance), false);\r\n }\r\n });\r\n }\r\n\r\n getWidget(component: string): Observable<Widget> {\r\n return this.http\r\n .get(this.userProfileEndpoint + \"/widget/component/\" + component)\r\n .pipe(map((response: any) => new Widget().deserialize(response)));\r\n }\r\n\r\n addDashboard(dashboard: Dashboard): Observable<number> {\r\n let newIndex: Observable<number> = new Observable(observer => {\r\n this.http\r\n .put(this.userProfileEndpoint + \"/dashboard/\", dashboard)\r\n .pipe(map((response: any) => new Dashboard().deserialize(response)))\r\n .subscribe((dashboard: Dashboard) => {\r\n this.dashboards.push(dashboard);\r\n observer.next(this.dashboards.length - 1);\r\n });\r\n });\r\n\r\n return newIndex;\r\n }\r\n\r\n deleteDashboard(index: number): Observable<number> {\r\n let newIndex: Observable<number> = new Observable(observer => {\r\n this.http\r\n .delete(this.userProfileEndpoint + \"/dashboard/\" + this.dashboards[index].idDashboard, {})\r\n .subscribe((response: any) => {\r\n this.dashboards.splice(index, 1);\r\n if (this.dashboards.length === index) {\r\n observer.next(index - 1);\r\n } else {\r\n observer.next(index);\r\n }\r\n this.dashboardsState.next(this.dashboards);\r\n });\r\n });\r\n\r\n return newIndex;\r\n }\r\n\r\n deleteWidget(widgetInstance: WidgetInstance) {\r\n this.http\r\n .delete(this.userProfileEndpoint + \"/widget/widget-instance/\" + widgetInstance.idWidgetInstance, {})\r\n .subscribe((response: any) => {\r\n for (var d = 0; d < this.dashboards.length; d++) {\r\n for (var w = 0; w < this.dashboards[d].widgetInstances.length; w++) {\r\n if (this.dashboards[d].widgetInstances[w].idWidgetInstance === widgetInstance.idWidgetInstance) {\r\n this.dashboards[d].widgetInstances.splice(w, 1);\r\n break;\r\n }\r\n }\r\n }\r\n this.configurationWidgetInstanceSubject.next(undefined);\r\n });\r\n }\r\n\r\n /**\r\n * Returns a subject which is used to notify widget add/edit windows when the widget is finished rendering. In some\r\n * cases attribute choices are based on data which the widget might fetch. Before trying to render attributes for editing\r\n * that widget, we have to wait for the data get to finish so the attribute choices will be available.\r\n *\r\n * @returns {Subject<boolean>}\r\n */\r\n getWidgetRendered(): Subject<boolean> {\r\n return this.widgetRendered;\r\n }\r\n\r\n /**\r\n * Allows any listeners to be made aware of when a widget rendering has finished.\r\n *\r\n * @param widgetRendered\r\n */\r\n setWidgetRendered(widgetRendered: boolean) {\r\n this.widgetRendered.next(widgetRendered);\r\n }\r\n\r\n getEditMode(): Subject<boolean> {\r\n return this.editModeSubject;\r\n }\r\n\r\n setEditMode(editMode: boolean) {\r\n this.editMode = editMode;\r\n this.editModeSubject.next(this.editMode);\r\n this.configurationWidgetInstanceSubject.next(undefined);\r\n }\r\n\r\n toggleEditMode() {\r\n this.editMode = !this.editMode;\r\n this.editModeSubject.next(this.editMode);\r\n }\r\n\r\n setWidgetAttributeUpdatedSubject(idWidgetAttribute: number) {\r\n this.widgetAttributeUpdatedSubject.next(idWidgetAttribute);\r\n }\r\n\r\n getWidgetAttributeUpdatedSubject(): Subject<number> {\r\n return this.widgetAttributeUpdatedSubject;\r\n }\r\n\r\n getWidgetComponent(idWidgetInstance: number): WidgetComponent {\r\n return this.registeredWidgetComponents.get(idWidgetInstance);\r\n }\r\n\r\n registerWidgetComponent(idWidgetInstance: number, widgetComponent: WidgetComponent) {\r\n this.registeredWidgetComponents.set(idWidgetInstance, widgetComponent);\r\n\r\n if (!this.widgetComponentSubjects.has(idWidgetInstance)) {\r\n this.widgetComponentSubjects.set(idWidgetInstance, new BehaviorSubject<WidgetComponent>(widgetComponent));\r\n }\r\n this.widgetComponentSubjects.get(idWidgetInstance).next(widgetComponent);\r\n }\r\n\r\n unregisterWidgetcomponent(idWidgetInstance: number) {\r\n this.registeredWidgetComponents.delete(idWidgetInstance);\r\n }\r\n\r\n getWidgetComponentSubject(idWidgetInstance: number): Subject<WidgetComponent> {\r\n if (!this.widgetComponentSubjects.has(idWidgetInstance)) {\r\n this.widgetComponentSubjects.set(idWidgetInstance, new BehaviorSubject<WidgetComponent>(undefined));\r\n }\r\n return this.widgetComponentSubjects.get(idWidgetInstance);\r\n }\r\n\r\n getWidgetComponentCreated(): Subject<number> {\r\n return this.widgetComponentCreated;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {Component, isDevMode, Output, EventEmitter} from \"@angular/core\";\r\n\r\nimport {BehaviorSubject, Subject} from \"rxjs\";\r\n\r\nimport {Widget, WidgetAttributeChoice, WidgetAttributeContainer, WidgetAttributeValue, WidgetInstance, WidgetAttribute} from \"../model/model\";\r\nimport {DashboardService} from \"../services/dashboard.service\";\r\n\r\nconst CARD_CLASS: number = -1;\r\nconst SHOW_TITLE: number = -2;\r\n\r\n/**\r\n * @since 1.0.0\r\n */\r\n@Component({\r\n selector: \"widget\",\r\n template: `\r\n <ng-template></ng-template>\r\n `\r\n})\r\nexport class WidgetComponent {\r\n\r\n @Output() cardClassEvent: EventEmitter<string> = new EventEmitter<string>();\r\n\r\n public showTitle: boolean = true;\r\n public cardClass: string = \"one-third\";\r\n public cardPaddingClass: string;\r\n\r\n public widget: Widget;\r\n public widgetInstance: WidgetInstance;\r\n\r\n public rendered: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\r\n public attributeContainers: BehaviorSubject<Map<string, WidgetAttributeContainer>> = new BehaviorSubject<Map<string, WidgetAttributeContainer>>(undefined);\r\n\r\n protected dashboardService: DashboardService;\r\n\r\n private initializedSubject: Subject<boolean> = new Subject<boolean>();\r\n\r\n constructor(dashboardService: DashboardService) {\r\n if (isDevMode()) {\r\n console.debug(\"WidgetComponent()\");\r\n }\r\n\r\n this.dashboardService = dashboardService;\r\n\r\n this.rendered.subscribe((rendered: boolean) => {\r\n if (rendered) {\r\n\t this.attributeContainers.next(this.getAttributeContainers());\r\n\t }\r\n\t });\r\n }\r\n\r\n config(attributeValues: WidgetAttributeValue[]): void {\r\n let commonAttributes: WidgetAttribute[] = this.dashboardService.getCommonAttributes().get(\"Common\").attributes;\r\n\r\n if (isDevMode()) {\r\n console.debug(\"Widget.config\");\r\n console.debug(commonAttributes);\r\n }\r\n\r\n if (!commonAttributes) {\r\n return;\r\n }\r\n\r\n if (this.widgetInstance && this.widgetInstance.widget.attributeValueSet && this.widgetInstance.widget.attributeValueSet.attributeValues) {\r\n for (let commonAttribute of commonAttributes) {\r\n for (var v = 0; v < this.widgetInstance.widget.attributeValueSet.attributeValues.length; v++) {\r\n if (commonAttribute.idWidgetAttribute === this.widgetInstance.widget.attributeValueSet.attributeValues[v].idWidgetAttribute) {\r\n if (commonAttribute.name === \"cardClass\" || commonAttribute.name === \"showTitle\") {\r\n this.setValues(commonAttribute.name, [this.widgetInstance.widget.attributeValueSet.attributeValues[v]]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (this.widgetInstance && this.widgetInstance.attributeValueSet && this.widgetInstance.attributeValueSet.attributeValues) {\r\n for (let commonAttribute of commonAttributes) {\r\n for (var v = 0; v < this.widgetInstance.attributeValueSet.attributeValues.length; v++) {\r\n if (commonAttribute.idWidgetAttribute === this.widgetInstance.attributeValueSet.attributeValues[v].idWidgetAttribute) {\r\n if (commonAttribute.name === \"cardClass\" || commonAttribute.name === \"showTitle\") {\r\n this.setValues(commonAttribute.name, [this.widgetInstance.attributeValueSet.attributeValues[v]]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n getInitializedSubject(): Subject<boolean> {\r\n return this.initializedSubject;\r\n }\r\n\r\n setWidget(widget: Widget) {\r\n this.widget = widget;\r\n }\r\n\r\n render() {\r\n this.rendered.next(true);\r\n }\r\n\r\n tryRender() {\r\n // Override\r\n }\r\n\r\n setValues(name: string, attributeValues: WidgetAttributeValue[]): boolean {\r\n if (isDevMode()) {\r\n console.debug(\"WidgetComponent.setValues: \" + name);\r\n }\r\n\r\n if (!attributeValues || attributeValues.length === 0) {\r\n return false;\r\n } if (name === \"cardClass\") {\r\n this.cardClass = attributeValues[0].valueString;\r\n this.cardClassEvent.emit(this.cardClass);\r\n } else if (name === \"showTitle\") {\r\n this.showTitle = attributeValues[0].valueBoolean;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n getWidgetChoices(name: string): Subject<WidgetAttributeChoice[]> {\r\n return undefined;\r\n }\r\n\r\n setWidgetInstance(widgetInstance: WidgetInstance) {\r\n this.widgetInstance = widgetInstance;\r\n }\r\n\r\n getWidgetInstance() {\r\n return this.widgetInstance;\r\n }\r\n\r\n getCardClass() {\r\n return this.cardClass;\r\n }\r\n\r\n getCardPaddingClass() {\r\n return this.cardPaddingClass;\r\n }\r\n\r\n getParentDimension(htmlElement: HTMLElement, type: string) {\r\n var x = 300;\r\n let parent: any = htmlElement.parentElement;\r\n while (parent) {\r\n if (parent.className.includes(\"widget-host\")) {\r\n break;\r\n }\r\n parent = parent.parentElement;\r\n }\r\n\r\n if (parent) {\r\n if (type === \"width\") {\r\n x = parent.offsetWidth;\r\n } else {\r\n x = parent.offsetHeight;\r\n }\r\n }\r\n return (x <= 0) ? 300 : x;\r\n }\r\n\r\n getAttributeContainers(): Map<string, WidgetAttributeContainer> {\r\n if (this.widgetInstance) {\r\n if (isDevMode()) {\r\n console.debug(\"WidgetComponent.getAttributeContainers from \" + this.widgetInstance.widget.name);\r\n }\r\n return this.widgetInstance.widget.attributeContainerMap;\r\n } else if (this.widget) {\r\n if (isDevMode()) {\r\n console.debug(\"WidgetComponent.getAttributeContainers from \" + this.widget.name);\r\n }\r\n return this.widget.attributeContainerMap;\r\n } else {\r\n if (isDevMode()) {\r\n console.debug(\"WidgetComponent.getAttributeContainers from none\");\r\n }\r\n return new Map<string, WidgetAttributeContainer>();\r\n }\r\n }\r\n\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {Component, EventEmitter, Input, isDevMode, OnChanges, Output, SimpleChange, ViewEncapsulation} from \"@angular/core\";\r\n\r\nimport {Subscription} from \"rxjs\";\r\n\r\nimport {WidgetAttributeValue, WidgetAttribute, WidgetAttributeChoice, WidgetInstance} from \"../model/model\";\r\nimport {DashboardService} from \"../services/dashboard.service\";\r\nimport {WidgetComponent} from \"../widget/widget.component\";\r\n\r\n/**\r\n * @since 1.0.0\r\n */\r\n@Component({\r\n selector: \"widget-attribute\",\r\n template: `\r\n <ng-container *ngIf=\"init && attributeValues?.length > 0\">\r\n <div *ngIf=\"attribute.dataType === 'string'\" class=\"form-group\">\r\n <label for=\"attr-string\" class=\"bold\">{{attribute.name}}</label>\r\n <input id=\"attr-string\"\r\n class=\"form-control\"\r\n [ngModel]=\"attributeValues[0].valueString\"\r\n (keypress)=\"onChangeString($event)\" />\r\n </div>\r\n <div *ngIf=\"attribute.dataType === 'integer'\" class=\"form-group\">\r\n <label for=\"attr-integer\" class=\"bold\">{{attribute.name}}</label>\r\n <input id=\"attr-integer\"\r\n class=\"form-control\"\r\n [ngModel]=\"attributeValues[0].valueInteger\"\r\n (keypress)=\"onChangeInteger($event)\" />\r\n </div>\r\n <div *ngIf=\"attribute.dataType === 'color'\" class=\"form-group\">\r\n <label for=\"attr-color\" class=\"bold\">{{attribute.display}}</label>\r\n <input id=\"attr-color\"\r\n class=\"form-control\"\r\n [colorPicker]=\"attributeValues[0].valueString\"\r\n (colorPickerChange)=\"onChangeColor($event)\"\r\n [style.background]=\"attributeValues[0].valueString\"\r\n [cpPositionRelativeToArrow]=\"true\"\r\n [cpCancelButton]=\"true\"\r\n [cpOKButtonClass]=\"'btn btn-primary btn-xs'\"\r\n [cpPosition]=\"'bottom'\"/>\r\n </div>\r\n <div *ngIf=\"attribute.dataType === 'choice'\" class=\"form-group\">\r\n <label for=\"attr-choice\" class=\"bold\">{{attribute.display}}</label>\r\n <select id=\"attr-choice\"\r\n class=\"form-control\"\r\n [ngModel]=\"attributeValues[0].valueString\"\r\n (ngModelChange)=\"onChoiceChange($event)\" >\r\n <option *ngFor=\"let choice of attribute.widgetAttributeChoices\"\r\n [ngValue]=\"choice.value\"\r\n [selected]=\"(attributeValues[0].valueString === choice.value) ? true : undefined\">\r\n {{choice.display}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"attribute.dataType === 'checkbox'\" class=\"form-group row\">\r\n <label for=\"attr-checkbox\" class=\"col-6 bold\">{{attribute.display}}</label>\r\n <input id=\"attr-checkbox\" class=\"col-6 form-check-input centered\" type=\"checkbox\" [checked]=\"attributeValues[0].valueBoolean\" (change)=\"onCheckboxChange($event)\" />\r\n </div>\r\n <div *ngIf=\"attribute.dataType === 'graphical-choice'\" class=\"form-group\">\r\n <label for=\"attr-choice\" class=\"bold\">{{attribute.display}}</label>\r\n <div class=\"card-group\">\r\n <ng-template ngFor let-choice [ngForOf]=\"attribute.widgetAttributeChoices\">\r\n <span class=\"graphical-choice\"\r\n [ngClass]=\"attributeValues[0].valueString === choice.value ? 'selected' : ''\"\r\n (click)=\"setGraphicalChoice(choice)\">\r\n <ng-container *ngIf=\"choice.display\">\r\n <img *ngIf=\"choice.display.indexOf('.svg') > 0\"\r\n [src]=\"choice.display\" />\r\n <ng-container *ngIf=\"choice.display.indexOf('.svg') === -1\">\r\n <i class=\"{{choice.display}} fa-2x\"></i>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!choice.display\">\r\n <i class=\"fas fa-question-circle fa-2x\"></i>\r\n </ng-container>\r\n </span>\r\n </ng-template>\r\n </div>\r\n </div>\r\n <div *ngIf=\"attribute.dataType === 'widget-choice'\" class=\"form-group\">\r\n <div ngbDropdown [autoClose]=\"true\" class=\"d-inline-block\">\r\n <button class=\"btn btn-outline-primary\" id=\"attr-widget-choice\" ngbDropdownToggle>{{attribute.display}}</button>\r\n <div ngbDropdownMenu class=\"dropdown-menu\" aria-labelledby=\"attr-widget-choice\">\r\n <ng-template ngFor let-choice [ngForOf]=\"attribute.widgetAttributeChoices\">\r\n <a class=\"dropdown-item bold\" (click)=\"setWidgetChoice(choice)\">{{choice.display}}</a>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"attribute.dataType === 'widget-multi-choice'\" class=\"form-group\">\r\n <div ngbDropdown [autoClose]=\"true\" class=\"d-inline-block\">\r\n <button class=\"btn btn-outline-primary\" id=\"attr-widget-choice\" ngbDropdownToggle>{{attribute.display}}</button>\r\n <div ngbDropdownMenu class=\"dropdown-menu\" aria-labelledby=\"attr-widget-choice\">\r\n <ng-template ngFor let-choice [ngForOf]=\"attribute.widgetAttributeChoices\">\r\n <div>\r\n <label for=\"attr-checkbox\" class=\"bold\">{{choice.display}}</label>\r\n <input id=\"attr-checkbox\"\r\n class=\"form-control checkbox\"\r\n type=\"checkbox\" [checked]=\"isMultiSelected(choice)\" (change)=\"setWidgetMultiChoice(choice)\" />\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n `,\r\n styles: [`\r\n .color-picker {\r\n left: inherit !important;\r\n top: inherit !important;\r\n }\r\n div.color-picker {\r\n left: inherit !important;\r\n top: inherit !important;\r\n }\r\n .form-control.checkbox {\r\n width: inherit;\r\n float: left;\r\n margin-top: 5px;\r\n margin-left: 4px;\r\n margin-right: 4px;\r\n }\r\n .graphical-choice {\r\n width: 64px;\r\n padding: 5px;\r\n }\r\n .graphical-choice.selected {\r\n border: red 1px solid !important;\r\n border-radius: 10px !important;\r\n }\r\n label.bold {\r\n font-weight: bold;\r\n }\r\n .form-control.centered {\r\n margin-top: auto;\r\n margin-bottom: auto;\r\n }\r\n .form-check-input {\r\n height: 1rem;\r\n }\r\n `],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class WidgetAttributeComponent implements OnChanges {\r\n\r\n @Input() idWidgetAttributeValueSet: number;\r\n @Input() attribute: WidgetAttribute;\r\n @Input() widgetComponent: WidgetComponent;\r\n\r\n @Output() changed: EventEmitter<boolean> = new EventEmitter<boolean>();\r\n\r\n public init: boolean = false;\r\n public attributeValues: WidgetAttributeValue[] = [];\r\n\r\n private widgetAttributeUpdatedSubscription: Subscription;\r\n private widgetAttributeChoicesSubscription: Subscription;\r\n\r\n constructor(private dashboardService: DashboardService) {}\r\n\r\n ngOnInit() {\r\n this.init = false;\r\n\r\n this.dashboardService.configurationWidgetInstanceSubject.subscribe((widgetInstance: WidgetInstance) => {\r\n if (widgetInstance) {\r\n this.refresh();\r\n }\r\n });\r\n\r\n this.widgetAttributeUpdatedSubscription = this.dashboardService.getWidgetAttributeUpdatedSubject().subscribe((idWidgetAttribute: number) => {\r\n this.refresh();\r\n });\r\n\r\n this.refresh();\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.widgetAttributeUpdatedSubscription) {\r\n this.widgetAttributeUpdatedSubscription.unsubscribe();\r\n }\r\n if (this.widgetAttributeChoicesSubscription) {\r\n this.widgetAttributeChoicesSubscription.unsubscribe();\r\n }\r\n }\r\n\r\n ngOnChanges(changes: {[propName: string]: SimpleChange}) {\r\n if (this.init && changes[\"attribute\"]) {\r\n this.refresh();\r\n }\r\n }\r\n\r\n refresh() {\r\n if (isDevMode()) {\r\n console.debug(\"refresh: \" + this.attribute.name);\r\n }\r\n\r\n this.attributeValues = this.dashboardService.getConfigurationAttributeValues(this.attribute.idWidgetAttribute);\r\n\r\n if (this.attribute.dataType === \"widget-choice\" || this.attribute.dataType === \"widget-multi-choice\") {\r\n this.widgetAttributeChoicesSubscription = this.widgetComponent.getWidgetChoices(this.attribute.name).subscribe((widgetAttributeChoices: WidgetAttributeChoice[]) => {\r\n this.attribute.widgetAttributeChoices = widgetAttributeChoices;\r\n this.init = true;\r\n });\r\n } else {\r\n this.init = true;\r\n }\r\n }\r\n\r\n onCheckboxChange(value: boolean) {\r\n // TODO: Implement\r\n }\r\n\r\n onChangeColor(color: string) {\r\n if (this.init && this.attributeValues[0].valueString !== color) {\r\n this.attributeValues[0].valueString = color;\r\n this.attributeValues = this.dashboardService.setConfigurationAttributeValues(this.attribute.idWidgetAttribute, this.attributeValues);\r\n this.updateConfigurationWidgetValues(this.attributeValues);\r\n }\r\n }\r\n\r\n onChoiceChange(value: string) {\r\n if (this.init && this.attributeValues[0].valueString !== value) {\r\n this.attributeValues[0].valueString = value;\r\n this.attributeValues = this.dashboardService.setConfigurationAttributeValues(this.attribute.idWidgetAttribute, this.attributeValues);\r\n this.updateConfigurationWidgetValues(this.attributeValues);\r\n }\r\n }\r\n\r\n onChangeString(event: KeyboardEvent) {\r\n if (this.init) {\r\n if (event.keyCode === 13 && this.attributeValues[0].valueString !== event.target[\"value\"]) {\r\n this.attributeValues[0].valueString = event.target[\"value\"];\r\n this.attributeValues = this.dashboardService.setConfigurationAttributeValues(this.attribute.idWidgetAttribute, this.attributeValues);\r\n this.updateConfigurationWidgetValues(this.attributeValues);\r\n }\r\n }\r\n }\r\n\r\n onChangeInteger(event: KeyboardEvent) {\r\n if (this.init) {\r\n if (event.keyCode === 13 && this.attributeValues[0].valueInteger !== event.target[\"value\"]) {\r\n this.attributeValues[0].valueInteger = event.target[\"value\"];\r\n this.attributeValues = this.dashboardService.setConfigurationAttributeValues(this.attribute.idWidgetAttribute, this.attributeValues);\r\n this.updateConfigurationWidgetValues(this.attributeValues);\r\n }\r\n }\r\n }\r\n\r\n setGraphicalChoice(widgetAttributeChoice: WidgetAttributeChoice) {\r\n if (this.init && this.attributeValues[0].valueString !== widgetAttributeChoice.value) {\r\n this.attributeValues[0].valueString = widgetAttributeChoice.value;\r\n this.attributeValues = this.dashboardService.setConfigurationAttributeValues(this.attribute.idWidgetAttribute, this.attributeValues);\r\n this.updateConfigurationWidgetValues(this.attributeValues);\r\n }\r\n }\r\n\r\n isMultiSelected(widgetAttributeChoice: WidgetAttributeChoice) {\r\n for (var i = 0; i < this.attributeValues.length; i++) {\r\n if (this.attributeValues[i].valueString === widgetAttributeChoice.value) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n setWidgetChoice(widgetAttributeChoice: WidgetAttributeChoice) {\r\n if (isDevMode()) {\r\n console.debug(\"setWidgetChoice: \" + widgetAttributeChoice.idWidgetAttributeChoice);\r\n }\r\n\r\n if (this.init && this.attributeValues[0].valueString !== widgetAttributeChoice.value) {\r\n this.attributeValues[0].valueString = widgetAttributeChoice.value;\r\n this.attributeValues = this.dashboardService.setConfigurationAttributeValues(this.attribute.idWidgetAttribute, this.attributeValues);\r\n this.updateConfigurationWidgetValues(this.attributeValues);\r\n this.changed.emit(true);\r\n\r\n this.dashboardService.setWidgetAttributeUpdatedSubject(this.attribute.idWidgetAttribute);\r\n }\r\n }\r\n\r\n setWidgetMultiChoice(widgetAttributeChoice: WidgetAttributeChoice) {\r\n if (this.init) {\r\n let exists: boolean = false;\r\n for (var i = 0; i < this.attributeValues.length; i++) {\r\n if (this.attributeValues[i].valueString === widgetAttributeChoice.value) {\r\n exists = true;\r\n this.attributeValues.splice(i, 1);\r\n break;\r\n }\r\n }\r\n if (!exists) {\r\n let value: WidgetAttributeValue = new WidgetAttributeValue();\r\n value.idWidgetAttributeValue = this.dashboardService.getIdNew();\r\n value.idWidgetAttribute = this.attribute.idWidgetAttribute;\r\n value.valueString = widgetAttributeChoice.value;\r\n this.attributeValues.push(value);\r\n }\r\n\r\n this.attributeValues = this.dashboardService.setConfigurationAttributeValues(this.attribute.idWidgetAttribute, this.attributeValues);\r\n this.updateConfigurationWidgetValues(this.attributeValues);\r\n this.changed.emit(true);\r\n }\r\n }\r\n\r\n updateConfigurationWidgetValues(attributeValues: WidgetAttributeValue[]) {\r\n if (isDevMode()) {\r\n console.debug(\"updateConfigurationWidgetValues\");\r\n }\r\n\r\n // If setValues returns true, re-config the widget.\r\n if (this.widgetComponent.setValues(this.attribute.name, attributeValues)) {\r\n this.widgetComponent.config(this.dashboardService.getConfigWidgetComponent().widgetInstance.attributeValueSet.attributeValues);\r\n }\r\n }\r\n}\r\n","import {Pipe} from \"@angular/core\";\r\n\r\nimport {WidgetAttributeContainer} from \"../model/widget-attribute-container.entity\";\r\n\r\n@Pipe({\r\n name: \"hasEditableAttributes\",\r\n pure: true\r\n})\r\nexport class HasEditableAttributesPipe {\r\n\r\n transform(list: WidgetAttributeContainer[]): any {\r\n return list.filter((wac: WidgetAttributeContainer) => {\r\n if (wac.attributes && wac.attributes.length > 0) {\r\n for (let attribute of wac.attributes) {\r\n if (attribute.userEditable) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n });\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {Component, HostBinding, isDevMode} from \"@angular/core\";\r\n\r\nimport {Subscription} from \"rxjs\";\r\n\r\nimport {WidgetAttribute, WidgetAttributeContainer, WidgetInstance, Widget} from \"../model/model\";\r\nimport {DashboardService} from \"../services/dashboard.service\";\r\nimport {WidgetComponent} from \"../widget/widget.component\";\r\n\r\n/**\r\n * @since 1.0.0\r\n */\r\n@Component({\r\n selector: \"widget-configure\",\r\n template: `\r\n <ng-container *ngIf=\"widgetInstance && selectedAttributeContainer\">\r\n <div class=\"attribute-container-header-parent\">\r\n <ng-template ngFor let-attributeContainer let-i=\"index\" [ngForOf]=\"attributeContainers | hasEditableAttributes\">\r\n <div (click)=\"selectedAttributeContainer = attributeContainer; iSelected = i;\"\r\n class=\"attribute-container-header\"\r\n [ngClass]=\"selectedAttributeContainer.name === attributeContainer.name ? 'selected' : ''\"\r\n [ngbTooltip]=\"attributeContainer.name\">\r\n <span *ngIf=\"selectedAttributeContainer.name === attributeContainer.name\">{{selectedAttributeContainer.name}}</span>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <div class=\"d-flex flex-column flex-grow-1 attribute-container\">\r\n <div class=\"d-flex flex-column flex-grow-1 y-auto\">\r\n <ng-template ngFor let-attribute [ngForOf]=\"selectedAttributeContainer.attributes\">\r\n <widget-attribute [attribute]=\"attribute\"\r\n [idWidgetAttributeValueSet]=\"widgetInstance.attributeValueSet.idWidgetAttributeValueSet\"\r\n [widgetComponent]=\"widgetComponent\"\r\n *ngIf=\"attribute.userEditable\"></widget-attribute>\r\n </ng-template>\r\n </div>\r\n </div>\r\n <div *ngIf=\"attributeContainers.length === 0\">\r\n There are no configuration options for this widget.\r\n </div>\r\n </ng-container>\r\n `,\r\n styles: [`\r\n\r\n .attribute-container-header-parent {\r\n border-bottom: black 2px solid;\r\n padding-bottom: 5px;\r\n margin-bottom: 5px;\r\n }\r\n\r\n .attribute-container-header {\r\n display: inline-block;\r\n width: 35px;\r\n background-color: #66aaff;\r\n border: black 1px solid;\r\n border-radius: 20px;\r\n padding: 4px;\r\n font-size: large;\r\n font-weight: bold;\r\n text-align: center;\r\n min-height: 35px;\r\n vertical-align: top;\r\n }\r\n\r\n .attribute-container-header.selected {\r\n width: 45%;\r\n }\r\n\r\n .attribute-container {\r\n overflow-y: auto;\r\n overflow-x: hidden;\r\n }\r\n\r\n `]\r\n})\r\nexport class WidgetConfigureComponent {\r\n\r\n @HostBinding(\"class\") classList: string = \"outlet-column\";\r\n\r\n public iSelected: number;\r\n public selectedAttributeContainer: WidgetAttributeContainer;\r\n public attributeContainers: WidgetAttributeContainer[] = [];\r\n\r\n public widgetInstance: WidgetInstance;\r\n widgetComponent: WidgetComponent;\r\n attributeContainerMap: Map<string, WidgetAttributeContainer>;\r\n\r\n widgetComponentSubscription: Subscription;\r\n attributeContainersSubscription: Subscription;\r\n\r\n constructor(private dashboardService: DashboardService) {}\r\n\r\n ngOnInit() {\r\n this.dashboardService.configurationWidgetInstanceSubject.subscribe((widgetInstance: WidgetInstance) => {\r\n if (isDevMode()) {\r\n console.debug(\"WidgetConfigureComponent.configurationWidgetInstanceSubject.subscribe:\");\r\n console.debug(widgetInstance);\r\n }\r\n\r\n if (!widgetInstance) {\r\n this.widgetInstance = undefined;\r\n this.widgetComponent = undefined;\r\n this.selectedAttributeContainer = undefined;\r\n this.iSelected = undefined;\r\n\r\n\t\t this.unsubscribe();\r\n } else {\r\n this.widgetInstance = widgetInstance;\r\n\r\n this.widgetComponentSubscription = this.dashboardService.getWidgetComponentSubject(widgetInstance.idWidgetInstance)\r\n .subscribe((widgetComponent: WidgetComponent) => {\r\n if (isDevMode()) {\r\n console.debug(\"WidgetConfigureComponent.getWidgetComponentSubject.subscribe\");\r\n console.debug(widgetComponent);\r\n }\r\n\r\n if (this.attributeContainersSubscription) {\r\n this.attributeContainersSubscription.unsubscribe();\r\n }\r\n\r\n this.widgetComponent = widgetComponent;\r\n if (this.widgetComponent) {\r\n\t\t\t this.widgetComponent.config(undefined);\r\n\r\n this.attributeContainersSubscription = this.widgetComponent.attributeContainers.subscribe((attributeContainers: Map<string, WidgetAttributeContainer>) => {\r\n if (isDevMode()) {\r\n console.debug(\"WidgetConfigureComponent.attributeContainersSubscription\");\r\n console.debug(attributeContainers);\r\n }\r\n\r\n if (attributeContainers) {\r\n this.attributeContainerMap = Widget.merge(attributeContainers, this.dashboardService.getCommonAttributes());\r\n this.generateAttributeContainers();\r\n } else {\r\n this.attributeContainerMap = this.dashboardService.getCommonAttributes();\r\n this.generateAttributeContainers();\r\n }\r\n\t\t\t });\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.unsubscribe();\r\n }\r\n\r\n unsubscribe() {\r\n if (this.widgetComponentSubscription) {\r\n this.widgetComponentSubscription.unsubscribe();\r\n }\r\n if (this.attributeContainersSubscription) {\r\n this.attributeContainersSubscription.unsubscribe();\r\n }\r\n }\r\n\r\n /**\r\n * Though a map is used to override attributes easily, transfer back to an array for easy sorting and to make\r\n * the ngFor happy.\r\n */\r\n generateAttributeContainers() {\r\n if (isDevMode()) {\r\n console.debug(\"WidgetConfigureComponent.generateAttributeContainers: \" + this.attributeContainerMap.size);\r\n }\r\n\r\n let tempContainers: WidgetAttributeContainer[] = [];\r\n for (let attributeContainer of this.attributeContainerMap.values()) {\r\n if (attributeContainer.hidden) {\r\n continue;\r\n }\r\n\r\n attributeContainer.attributes = [];\r\n for (let attribute of attributeContainer.attributeMap.values()) {\r\n /*if (attribute.userEditable) {\r\n attributeContainer.attributes.push(attribute);\r\n }*/\r\n attributeContainer.attributes.push(attribute);\r\n }\r\n attributeContainer.attributes.sort((a: WidgetAttribute, b: WidgetAttribute) => {\r\n if (a.sortOrder < b.sortOrder) {\r\n return -1;\r\n } else if (a.sortOrder > b.sortOrder) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n });\r\n\r\n tempContainers.push(attributeContainer);\r\n }\r\n\r\n tempContainers.sort((a: WidgetAttributeContainer, b: WidgetAttributeContainer) => {\r\n if (a.sortOrder < b.sortOrder) {\r\n return -1;\r\n } else if (a.sortOrder > b.sortOrder) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n });\r\n\r\n if (this.attributeContainers.length === 0 || !this.wacEquals(tempContainers, this.attributeContainers)) {\r\n this.attributeContainers = tempContainers;\r\n\r\n if (this.iSelected && this.iSelected < this.attributeContainers.length && this.selectedAttributeContainer.name === this.attributeContainers[this.iSelected].name) {\r\n this.selectedAttributeContainer = this.attributeContainers[this.iSelected];\r\n } else if (this.attributeContainers.length > 0) {\r\n this.selectedAttributeContainer = this.attributeContainers[0];\r\n this.iSelected = 0;\r\n } else {\r\n this.selectedAttributeContainer = undefined;\r\n this.iSelected = undefined;\r\n }\r\n this.dashboardService.setConfigurationAttributeContainers(this.attributeContainers);\r\n\r\n if (isDevMode()) {\r\n console.debug(this.attributeContainers);\r\n }\r\n }\r\n }\r\n\r\n wacEquals(a: WidgetAttributeContainer[], b: WidgetAttributeContainer[]): boolean {\r\n if (a.length !== b.length) {\r\n return false;\r\n } else {\r\n for (var i = 0; i < a.length; i++) {\r\n if (a[i].name !== b[i].name) {\r\n return false;\r\n } else if (a[i].attributes.length !== b[i].attributes.length) {\r\n return false;\r\n } else {\r\n for (var j = 0; j < a[i].attributes.length; j++) {\r\n if (a[i].attributes[j].name !== b[i].attributes[j].name) {\r\n return false;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {Component, ComponentFactoryResolver, ElementRef, Input, isDevMode, Renderer2, Type, ViewChild, ViewContainerRef} from \"@angular/core\";\r\n\r\nimport {ComponentInjector} from \"@huntsman-cancer-institute/utils\";\r\n\r\nimport {WidgetInstance} from \"../model/model\";\r\nimport {WidgetComponent} from \"./widget.component\";\r\nimport {DashboardService} from \"../services/dashboard.service\";\r\n\r\n/**\r\n * Based upon the main configuration property which is { widget: \"WidgetComponent\" }, this will dynamically inject\r\n * an instance of that widget based on its class name.\r\n *\r\n * @since 1.0.0\r\n */\r\n@Component({\r\n selector: \"widget-host\",\r\n template: `\r\n <div class=\"widget-host card-padding\" (dblclick)=\"openConfiguration()\">\r\n <ng-container #widgetComponent></ng-container>\r\n </div>\r\n `,\r\n styles: [`\r\n\r\n .card-padding {\r\n padding: .75rem;\r\n border: 1px solid rgba(0,0,0,.125);\r\n height: 100%;\r\n background-color: #f8f8fc;\r\n }\r\n\r\n .widget-right-corner {\r\n float: right;\r\n margin-right: 0px;\r\n margin-left: auto;\r\n }\r\n .widget-right-corner.next {\r\n padding-right: 10px;\r\n }\r\n .widget-right-corner.light {\r\n color: #dddddd;\r\n }\r\n .no-dropdown-icon.dropdown-toggle::after {\r\n display: none;\r\n }\r\n .dropdown-menu {\r\n top: 0 !important;\r\n margin-top: -2px;\r\n }\r\n .dropdown-menu.submenu {\r\n padding-left: 15px;\r\n border: none;\r\n position: relative;\r\n }\r\n `]\r\n})\r\nexport class WidgetHostComponent {\r\n\r\n @Input() widgetInstance: WidgetInstance;\r\n\r\n public editMode: boolean = false;\r\n public showIcons: boolean = false;\r\n public sizeCollapsed: boolean = true;\r\n public isFullscreen: boolean = false;\r\n\r\n public widgetComponent: WidgetComponent;\r\n\r\n configMode: boolean = false;\r\n\r\n @ViewChild(\"widgetComponent\", { read: ViewContainerRef, static: true })\r\n private widgetHolderRef: any;\r\n\r\n constructor(private renderer: Renderer2, private elementRef: ElementRef, private resolver: ComponentFactoryResolver, private dashboardService: DashboardService) {}\r\n\r\n ngOnInit() {\r\n this.createWidget();\r\n\r\n this.dashboardService.getEditMode().subscribe((editMode: boolean) => {\r\n this.editMode = editMode;\r\n });\r\n\r\n this.dashboardService.configurationWidgetInstanceSubject.subscribe((widgetInstance: WidgetInstance) => {\r\n if (!widgetInstance) {\r\n this.setConfigMode(false);\r\n } else if (widgetInstance.idWidgetInstance === this.widgetInstance.idWidgetInstance) {\r\n this.setConfigMode(true);\r\n } else {\r\n this.setConfigMode(false);\r\n }\r\n });\r\n\r\n this.dashboardService.updateWidgetInstanceSubject.subscribe((widgetInstance: WidgetInstance) => {\r\n if (widgetInstance.idWidgetInstance === this.widgetInstance.idWidgetInstance) {\r\n this.widgetInstance = widgetInstance;\r\n this.configureComponentRef();\r\n }\r\n });\r\n }\r\n\r\n setConfigMode(configMode: boolean) {\r\n this.configMode = configMode;\r\n\r\n if (this.configMode) {\r\n this.renderer.setStyle(this.elementRef.nativeElement, \"z-index\", \"8\");\r\n this.renderer.setStyle(this.elementRef.nativeElement, \"background-color\", \"rgba(255, 0, 0, 0.25)\");\r\n } else {\r\n this.renderer.removeStyle(this.elementRef.nativeElement, \"z-index\");\r\n this.renderer.removeStyle(this.elementRef.nativeElement, \"background-color\");\r\n }\r\n }\r\n\r\n /**\r\n * Create the widget based upon the widget's specified component.\r\n */\r\n createWidget() {\r\n if (this.widgetInstance.widget) {\r\n let factories: Type<any>[];\r\n\r\n try {\r\n if (isDevMode()) {\r\n console.debug(\"createWidget: \" + this.widgetInstance.widget.component);\r\n console.debug(this.widgetInstance);\r\n }\r\n\r\n this.widgetComponent = ComponentInjector.getComponent(this.resolver, this.widgetHolderRef, this.widgetInstance.widget.component);\r\n\r\n this.dashboardService.registerWidgetComponent(this.widgetInstance.idWidgetInstance, this.widgetComponent);\r\n\r\n this.configureComponentRef();\r\n } catch (e) {\r\n let widgetName: string = (this.widgetInstance) ? ((this.widgetInstance.widget) ? this.widgetInstance.widget.component : \"Undefined Widget\") : \"Undefined WidgetInstance\";\r\n console.error(\"createWidget for '\" + widgetName + \"'\", e);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * TODO: Update actual attribute value. If one doesn't exist, create it.\r\n *\r\n * @param cardClass\r\n */\r\n setSize(cardClass: string) {\r\n this.renderer.setAttribute(this.elementRef.nativeElement, \"class\", \"\");\r\n this.renderer.addClass(this.elementRef.nativeElement, \"card\");\r\n this.renderer.addClass(this.elementRef.nativeElement, cardClass);\r\n }\r\n\r\n /**\r\n * Notify any service listeners that we want to open a user configuration window on this widget.\r\n */\r\n openConfiguration() {\r\n if (!this.editMode) {\r\n return;\r\n }\r\n\r\n this.dashboardService.setConfigurationWidgetInstance(this.widgetInstance, this.widgetComponent, false);\r\n }\r\n\r\n configureComponentRef() {\r\n this.widgetComponent.setWidgetInstance(this.widgetInstance);\r\n this.widgetComponent.config(undefined);\r\n if (this.widgetComponent.getCardClass() && this.widgetComponent.getCardClass().length > 0) {\r\n this.renderer.setAttribute(this.elementRef.nativeElement, \"class\", \"\");\r\n this.renderer.addClass(this.elementRef.nativeElement, \"card\");\r\n this.renderer.addClass(this.elementRef.nativeElement, this.widgetComponent.getCardClass());\r\n }\r\n this.widgetComponent.cardClassEvent.subscribe((cardClass: string) => {\r\n this.setSize(cardClass);\r\n });\r\n }\r\n\r\n deleteWidget() {\r\n this.dashboardService.deleteWidget(this.widgetInstance);\r\n }\r\n\r\n fullscreenOpen() {\r\n this.isFullscreen = true;\r\n this.showIcons = false;\r\n this.renderer.addClass(this.elementRef.nativeElement, \"widget-fullscreen\");\r\n }\r\n\r\n fullscreenClose() {\r\n this.isFullscreen = false;\r\n this.showIcons = false;\r\n this.renderer.removeClass(this.elementRef.nativeElement, \"widget-fullscreen\");\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {Component, ElementRef, Input, HostListener, HostBinding, isDevMode} from \"@angular/core\";\r\n\r\nimport {DragulaService} from \"ng2-dragula\";\r\n\r\nimport {Dashboard, WidgetInstance} from \"../model/model\";\r\nimport {DashboardService} from \"../services/dashboard.service\";\r\n\r\n/**\r\n * Dashboard (within a card-group) iterates over configured widgets to produce each one in a card. The widgets can\r\n * always get access to any configuration held by the dashboard service, but they are intended to be largely\r\n * independent.\r\n *\r\n * @since 1.0.0\r\n */\r\n@Component({\r\n selector: \"widget-container\",\r\n template: `\r\n <div [id]=\"'widget-container-' + dashboardIndex\"\r\n [dragula]=\"'widget-container-' + dashboardIndex\"\r\n class=\"d-flex flex-grow-1 flex-wrap y-auto p-3 pb-5\">\r\n <ng-container *ngIf=\"dashboard?.widgetInstances?.length === 0\">\r\n <div class=\"card one-third\">\r\n <div class=\"widget-host card-padding\">\r\n <div style=\"text-align: center; height: 200px; display: inline-grid; width: 100%;\">\r\n <button class=\"btn btn-secondary\"\r\n style=\"margin: auto;\"\r\n (click)=\"addWidget()\">\r\n <i class=\"fas fa-plus fa-4x\"></i>\r\n <br />\r\n <h4>Add Widget</h4>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n \r\n <ng-template ngFor let-widgetInstance [ngForOf]=\"dashboard.widgetInstances\" let-widgetIndex=\"index\">\r\n <widget-host [id]=\"widgetInstance.idWidgetInstance\"\r\n [widgetInstance]=\"widgetInstance\"\r\n class=\"card\"></widget-host>\r\n </ng-template>\r\n </div>\r\n `,\r\n styles: [`\r\n .gu-mirror{position:fixed!important;margin:0!important;z-index:9999!important;opacity:.8;-ms-filter:\"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)\";filter:alpha(opacity=80)}.gu-hide{display:none!important}.gu-unselectable{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.gu-transit{opacity:.2;-ms-filter:\"progid:DXImageTransform.Microsoft.Alpha(Opacity=20)\";filter:alpha(opacity=20)}\r\n `]\r\n})\r\nexport class WidgetContainerComponent {\r\n\r\n @HostBinding(\"class\") classList: string = \"outlet-row\";\r\n\r\n @Input()\r\n public dashboard: Dashboard;\r\n\r\n @Input()\r\n public dashboardIndex: number;\r\n\r\n public editMode: boolean = false;\r\n\r\n configMode: boolean = false;\r\n widgetContainerWidth: number = 0;\r\n widgetContainerHeight: number = 0;\r\n\r\n constructor(private elementRef: ElementRef, private dashboardService: DashboardService, private dragulaService: DragulaService) {}\r\n\r\n ngOnInit() {\r\n this.dashboardService.getEditMode().subscribe((editMode: boolean) => {\r\n this.editMode = editMode;\r\n\r\n // Upon switch editMode, destroy or re-add dragula to container.\r\n var bag = this.dragulaService.find(\"widget-container-\" + this.dashboardIndex);\r\n if (bag !== undefined) {\r\n this.dragulaService.destroy(\"widget-container-\" + this.dashboardIndex);\r\n }\r\n this.dragulaService.createGroup(\"widget-container-\" + this.dashboardIndex, {\r\n moves: function (el: any, container: any, handle: any) {\r\n return editMode;\r\n }\r\n });\r\n this.dragulaService.find(\"widget-container-\" + this.dashboardIndex)\r\n .drake\r\n .containers\r\n .push(this.elementRef.nativeElement.querySelector(\"#widget-container-\" + this.dashboardIndex));\r\n\r\n /**\r\n * Upon drop, persist the new sortOrder to the backend.\r\n */\r\n this.dragulaService.drop(\"widget-container-\" + this.dashboardIndex).subscribe((value: any) => {\r\n let n: number = 1;\r\n\r\n for (let el of this.elementRef.nativeElement.querySelectorAll(\"widget-host\")) {\r\n this.dashboardService.saveWidgetSortOrder(this.dashboardIndex, +el.getAttribute(\"id\"), n++);\r\n }\r\n });\r\n });\r\n\r\n this.dashboardService.configurationWidgetInstanceSubject.subscribe((widgetInstance: WidgetInstance) => {\r\n if (widgetInstance) {\r\n this.updateSize();\r\n this.configMode = true;\r\n } else {\r\n this.configMode = false;\r\n }\r\n });\r\n }\r\n\r\n @HostListener(\"window:resize\", [\"$event\"])\r\n onResize(event: Event) {\r\n this.updateSize();\r\n }\r\n\r\n updateSize() {\r\n this.widgetContainerWidth = this.elementRef.nativeElement.offsetWidth;\r\n this.widgetContainerHeight = this.elementRef.nativeElement.offsetHeight;\r\n }\r\n\r\n addWidget() {\r\n this.dashboardService.addWidgetSubject.next(true);\r\n }\r\n\r\n}\r\n","import {Injectable} from \"@angular/core\";\r\n\r\nimport {DashboardService} from \"./dashboard.service\";\r\n\r\n/**\r\n * Single instance of this service which can be used to reference dashboard anywhere within the application. The\r\n * dashboard service has been moved to be provided by the dashboard component so this is needed to hook in.\r\n */\r\n@Injectable()\r\nexport class DashboardGlobalService {\r\n\r\n activeDashboardService: DashboardService\r\n\r\n setActiveDashboardService(activeDashboardService?: DashboardService): void {\r\n this.activeDashboardService = activeDashboardService;\r\n }\r\n\r\n getActiveDashboardService(): DashboardService {\r\n return this.activeDashboardService;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {Component, Input, ViewChild} from \"@angular/core\";\r\nimport {animate, state, style, transition, trigger} from \"@angular/animations\";\r\n\r\nimport {Subscription} from \"rxjs\";\r\n\r\nimport { Widget, WidgetCategory, WidgetInstance, WidgetAttributeValue, WidgetAttributeValueSet, WidgetAttributeContainer} from \"../model/model\";\r\nimport {DashboardService} from \"../services/dashboard.service\";\r\nimport {WidgetComponent} from \"../widget/widget.component\";\r\nimport {WidgetConfigureComponent} from \"./widget-configure.component\";\r\n\r\n/**\r\n * @since 1.0.0\r\n */\r\n@Component({\r\n selector: \"widget-add\",\r\n template: `\r\n <div class=\"overlay\" [@openBacksplash]=\"openState\">\r\n <div class=\"modal-dialog\" [@openModal]=\"openState\" role=\"document\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\">Add Widget</h4>\r\n <button type=\"button\" class=\"close\" aria-label=\"Close\" (click)=\"close()\">\r\n <span aria-hidden=\"true\">&times;</span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\" [style.display]=\"step === 1 ? 'block' : 'none'\">\r\n <div class=\"modal-body-left\">\r\n <ng-template ngFor let-widgetCategory [ngForOf]=\"widgetCategories\">\r\n <div class=\"widget-category\"\r\n [ngClass]=\"widgetCategory.idWidgetCategory === selectedWidgetCategory?.idWidgetCategory ? 'selected' : ''\"\r\n (click)=\"selectWidgetCategory(widgetCategory)\">\r\n <ng-container *ngIf=\"widgetCategory.icon\">\r\n <ng-container *ngIf=\"widgetCategory.icon.indexOf('.svg') > 0; else faIcon\">\r\n <img [src]=\"widgetCategory.icon\" class=\"widget-category-icon\" />\r\n </ng-container>\r\n <ng-template #faIcon>\r\n <i class=\"{{widgetCategory.icon}} fa-2x widget-category-icon\"></i>\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngIf=\"!widgetCategory.icon\">\r\n <i class=\"fas fa-question-circle fa-2x widget-category-icon\"></i>\r\n </ng-container>\r\n \r\n </div>\r\n </ng-template>\r\n </div>\r\n <div class=\"modal-body-right\">\r\n <div class=\"input-group widget-search\">\r\n <div class=\"input-group-prepend\">\r\n <span class=\"input-group-text\" id=\"search\"><i class=\"fas fa-search fa-lg\"></i></span>\r\n </div>\r\n <input type=\"text\"\r\n #searchWidget\r\n class=\"form-control\"\r\n placeholder=\"\"\r\n aria-describedby=\"search\"\r\n (keyup)=\"searchWidgets(searchWidget.value)\">\r\n <button class=\"btn\" style=\"margin-left: 10px;\" (click)=\"setDisplayMode('list')\">\r\n <i class=\"fas fa-list\"></i>\r\n </button>\r\n <button class=\"btn\" style=\"margin-left: 10px;\" (click)=\"setDisplayMode('grid')\">\r\n <i class=\"fas fa-th\"></i>\r\n </button>\r\n </div>\r\n <ng-container *ngIf=\"widgets && widgets.length > 0\">\r\n <div>No widgets matched the search criteria.</div>\r\n </ng-container>\r\n <ng-template ngFor let-widget [ngForOf]=\"widgets\">\r\n <div class=\"widget-label\"\r\n *ngIf=\"displayMode === 'list'\"\r\n (click)=\"selectWidget(widget)\">\r\n <div class=\"widget-icon-host\">\r\n <ng-container *ngIf=\"widget.icon\">\r\n <ng-container *ngIf=\"widget.icon.indexOf('.svg') > 0; else faIcon\">\r\n <img [src]=\"widget.icon\" class=\"widget-icon\" />\r\n </ng-container>\r\n <ng-template #faIcon>\r\n <i class=\"{{widget.icon}} fa-2x widget-icon\"></i>\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngIf=\"!widget.icon\">\r\n <i class=\"fas fa-question-circle fa-2x widget-icon\"></i>\r\n </ng-container>\r\n </div>\r\n <div class=\"widget-description-host\">\r\n <div class=\"widget-title\">{{widget.title}}</div>\r\n <div>{{widget.description}}</div>\r\n </div>\r\n </div>\r\n <div class=\"grid widget-label\"\r\n *ngIf=\"displayMode === 'grid'\"\r\n (click)=\"selectWidget(widget)\">\r\n <div class=\"grid widget-icon-host\">\r\n <ng-container *ngIf=\"widget.icon\">\r\n <ng-container *ngIf=\"widget.icon.indexOf('.svg') > 0; else faIcon\">\r\n <img [src]=\"widget.icon\" class=\"widget-icon\" />\r\n </ng-container>\r\n <ng-template #faIcon>\r\n <i class=\"{{widget.icon}} fa-2x widget-icon\"></i>\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngIf=\"!widget.icon\">\r\n <i class=\"fas fa-question-circle fa-2x widget-icon\"></i>\r\n </ng-container>\r\n </div>\r\n <div class=\"grid widget-description-host\">\r\n <div class=\"grid widget-title\">{{widget.title}}</div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <ng-container *ngIf=\"step === 1\">\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"close()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"add()\">Add</button>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n animations: [\r\n trigger(\"openBacksplash\",\r\n [\r\n state(\"in\", style({\r\n display: \"none\"\r\n })),\r\n state(\"hidden\", style({\r\n display: \"none\"\r\n })),\r\n state(\"opened\", style({\r\n display: \"flex\"\r\n })),\r\n transition(\"hidden => opened\", animate(0)),\r\n transition(\"opened => hidden\", animate(200))\r\n ]\r\n ),\r\n trigger(\"openModal\",\r\n [\r\n state(\"in\", style({\r\n opacity: \"0\"\r\n })),\r\n state(\"hidden\", style({\r\n opacity: \"0\"\r\n })),\r\n state(\"opened\", style({\r\n opacity: \"1\"\r\n })),\r\n transition(\"hidden => opened\", animate(500)),\r\n transition(\"opened => hidden\", animate(200))\r\n ]\r\n )\r\n ],\r\n styles: [`\r\n\r\n .overlay {\r\n position: fixed;\r\n z-index: 9999;\r\n top: 0;\r\n bottom: 0;\r\n background-color: rgba(0, 0, 0, 0.4);\r\n width: 100vw;\r\n display: none;\r\n }\r\n \r\n .modal-dialog {\r\n max-width: 75vw;\r\n min-width: 75vw;\r\n margin-left: auto;\r\n margin-right: auto;\r\n margin-top: auto;\r\n margin-bottom: auto;\r\n background-color: white;\r\n border: black 1px solid;\r\n border-left: none;\r\n pointer-events: all;\r\n }\r\n \r\n .modal-body {\r\n width: 100%;\r\n display: inline-flex;\r\n }\r\n \r\n .modal-body-left {\r\n display: inline-block;\r\n overflow-y: auto;\r\n overflow-x: hidden;\r\n min-height: 300px;\r\n max-height: 300px;\r\n }\r\n \r\n .modal-body-right {\r\n width: 70%;\r\n vertical-align: top;\r\n padding-left: 15px;\r\n border-left: black 1px solid;\r\n margin-left: 15px;\r\n display: inline-block;\r\n overflow-y: auto;\r\n min-height: 300px;\r\n max-height: 300px;\r\n }\r\n \r\n .widget-category {\r\n margin: 10px;\r\n border-radius: 20px;\r\n background-color: #eeeeee;\r\n }\r\n \r\n .widget-category.selected {\r\n border: red 2px solid;\r\n }\r\n \r\n .widget-category-icon {\r\n width: 80px;\r\n height: 80px;\r\n padding: 5px;\r\n margin-left: auto;\r\n margin-right: auto;\r\n display: flex;\r\n }\r\n \r\n .widget-search {\r\n margin-bottom: 10px;\r\n }\r\n\r\n .widget-label {\r\n padding: 10px;\r\n background-color: #eeeeee;\r\n border-radius: 10px;\r\n margin-bottom: 5px;\r\n }\r\n\r\n .widget-label.grid {\r\n display: inline-block;\r\n width: 150px;\r\n overflow-y: hidden;\r\n overflow-x: hidden;\r\n max-height: 100px;\r\n min-height: 100px;\r\n margin: 5px;\r\n }\r\n\r\n .widget-icon-host {\r\n display: inline-block;\r\n width: 50px;\r\n vertical-align: top;\r\n }\r\n\r\n .widget-icon {\r\n width: 50px;\r\n height: 50px;\r\n margin-left: auto;\r\n margin-right: auto;\r\n display: flex;\r\n }\r\n\r\n .widget-title {\r\n font-weight: bold;\r\n }\r\n \r\n .widget-description-host {\r\n display: inline-block;\r\n width: calc(100% - 55px);\r\n }\r\n \r\n `]\r\n})\r\nexport class WidgetAddComponent {\r\n\r\n @Input()\r\n dashboardIndex: number = 0;\r\n\r\n public step: number = 0;\r\n\r\n public widgets: Widget[];\r\n public widgetCategories: WidgetCategory[];\r\n\r\n public displayMode: string = \"list\";\r\n public openState: string = \"hidden\";\r\n public widgetRendered: boolean = false;\r\n\r\n public selectedWidget: Widget;\r\n public selectedWidgetCategory: WidgetCategory;\r\n\r\n private widgetInstance: WidgetInstance;\r\n\r\n private widgetRenderedSubscription: Subscription;\r\n\r\n @ViewChild(WidgetConfigureComponent, {static: false})\r\n private widgetConfigureComponent: WidgetConfigureComponent;\r\n\r\n constructor(private dashboardService: DashboardService) {}\r\n\r\n ngOnInit() {\r\n this.dashboardService.addWidgetSubject.subscribe((addWidget: boolean) => {\r\n this.init();\r\n this.openState = \"opened\";\r\n });\r\n }\r\n\r\n init() {\r\n this.widgetRenderedSubscription = this.dashboardService.getWidgetRendered().subscribe((widgetRendered: boolean) => {\r\n if (widgetRendered && this.step === 2) {\r\n this.widgetRendered = true;\r\n }\r\n this.widgetRenderedSubscription.unsubscribe();\r\n });\r\n\r\n this.widgets = this.dashboardService.getWidgetsByFilter(undefined);\r\n this.widgetCategories = this.dashboardService.getWidgetCategories();\r\n this.step = 1;\r\n }\r\n\r\n /**\r\n * Re-filter the widget list based upon a change in widget category.\r\n *\r\n * @param {WidgetCategory} widgetCategory\r\n */\r\n selectWidgetCategory(selectedWidgetCategory: WidgetCategory) {\r\n this.widgets = this.dashboardService.getWidgetsByFilter(undefined);\r\n if (this.selectedWidgetCategory && this.selectedWidgetCategory.idWidgetCategory === selectedWidgetCategory.idWidgetCategory) {\r\n this.selectedWidgetCategory = undefined;\r\n } else {\r\n this.selectedWidgetCategory = selectedWidgetCategory;\r\n this.widgets = this.widgets.filter((widget: Widget) => {\r\n if (widget.widgetCategories && widget.widgetCategories.length > 0) {\r\n return widget.widgetCategories.filter((widgetCategory: WidgetCategory) => {\r\n return widgetCategory.idWidgetCategory === selectedWidgetCategory.idWidgetCategory;\r\n }).length > 0;\r\n } else {\r\n return false;\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * When the widget is selected there are two options. If there are no attributes to be set by the user, then add the\r\n * widget. If there are instance attributes that must be set, then switch to a widget configuration screen.\r\n *\r\n * @param widget\r\n */\r\n selectWidget(widget: Widget) {\r\n this.widgetInstance = new WidgetInstance();\r\n this.widgetInstance.idWidgetInstance = this.dashboardService.getIdNew();\r\n this.widgetInstance.widget = widget;\r\n this.widgetInstance.attributeValueSet = this.getDefaultWidgetAttributeValues(this.widgetInstance.idWidgetInstance, widget.attributeContainers);\r\n this.add();\r\n }\r\n\r\n setDisplayMode(displayMode: string) {\r\n this.displayMode = displayMode;\r\n }\r\n\r\n getDefaultWidgetAttributeValues(idWidgetInstance: number, attributeContainers: WidgetAttributeContainer[]): WidgetAttributeValueSet {\r\n let valueSet: WidgetAttributeValueSet = new WidgetAttributeValueSet();\r\n valueSet.idWidgetAttributeValueSet = this.dashboardService.getIdNew();\r\n let values: WidgetAttributeValue[] = [];\r\n\r\n for (let container of attributeContainers) {\r\n for (let attribute of container.attributes) {\r\n if (!attribute.userEditable) {\r\n continue;\r\n }\r\n if (attribute.multiValue) {\r\n continue;\r\n }\r\n\r\n let value = new WidgetAttributeValue();\r\n value.idWidgetAttributeValue = this.dashboardService.getIdNew();\r\n value.idWidgetAttribute = attribute.idWidgetAttribute;\r\n\r\n if (attribute.dataType === \"integer\") {\r\n value.valueInteger = parseInt(attribute.defaultValue);\r\n } else {\r\n value.valueString = attribute.defaultValue;\r\n }\r\n values.push(value);\r\n }\r\n }\r\n\r\n valueSet.attributeValues = values;\r\n return valueSet;\r\n }\r\n\r\n add() {\r\n this.dashboardService.addWidget(this.selectedWidget, this.widgetInstance, this.dashboardIndex, this.step);\r\n this.close();\r\n }\r\n\r\n back() {\r\n this.dashboardService.setWidgetRendered(false);\r\n this.widgetRendered = false;\r\n this.step = 1;\r\n }\r\n\r\n close() {\r\n this.dashboardService.setWidgetRendered(false);\r\n this.widgetRendered = false;\r\n this.step = 0;\r\n this.openState = \"hidden\";\r\n }\r\n\r\n searchWidgets(filter: string) {\r\n this.widgets = this.dashboardService.getWidgetsByFilter(filter);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {\r\n ChangeDetectorRef, Component, ElementRef, isDevMode, QueryList, ViewChildren, ViewChild,\r\n HostBinding\r\n} from \"@angular/core\";\r\nimport {animate, state, style, transition, trigger} from \"@angular/animations\";\r\n\r\nimport {DragulaService} from \"ng2-dragula\";\r\nimport domtoimage from \"dom-to-image\";\r\nimport {NgbModal} from \"@ng-bootstrap/ng-bootstrap\";\r\n\r\nimport {Dashboard, WidgetInstance} from \"./model/model\";\r\nimport {DashboardService} from \"./services/dashboard.service\";\r\nimport {WidgetConfigureComponent} from \"./configure/widget-configure.component\";\r\nimport {WidgetContainerComponent} from \"./widget/widget-container.component\";\r\nimport {DashboardGlobalService} from \"./services/dashboard-global.service\";\r\n\r\n/**\r\n * Dashboard (within a card-group) iterates over configured widgets to produce each one in a card. The widgets can\r\n * always get access to any configuration held by the dashboard service, but they are intended to be largely\r\n * independent.\r\n *\r\n * @since 1.0.0\r\n */\r\n@Component({\r\n selector: \"dashboard\",\r\n template: `\r\n <ng-template #confirmDialog let-c=\"close\" let-d=\"dismiss\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\">Delete</h5>\r\n </div>\r\n <div class=\"modal-body\">\r\n <p>Are you sure?</p>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"c('Yes')\">Yes</button>\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"d('No')\">No</button>\r\n </div>\r\n </ng-template>\r\n \r\n <widget-add [dashboardIndex]=\"selectedIndex\"></widget-add>\r\n\r\n <div class=\"edit-mode-header\"\r\n [@openEditModeHeader]=\"editMode\"\r\n [@openEditModeHeaderDisplay]=\"editMode\">\r\n <button class=\"btn btn-primary btn-space\"\r\n (click)=\"addWidget()\">\r\n <i class=\"fas fa-plus fa-2x\"></i>\r\n <br />\r\n <span>Widget</span>\r\n </button>\r\n <button *ngIf=\"configMode === 'true'\"\r\n class=\"btn btn-primary btn-space red\"\r\n (click)=\"deleteWidget()\">\r\n <i class=\"fas fa-times fa-2x\"></i>\r\n <br />\r\n <span>Widget</span>\r\n </button>\r\n <button class=\"btn btn-primary btn-space\"\r\n (click)=\"addDashboard()\">\r\n <i class=\"fas fa-plus fa-2x\"></i>\r\n <br />\r\n <span>Dashboard</span>\r\n </button>\r\n <button class=\"btn btn-primary btn-space red\"\r\n *ngIf=\"dashboards.length > 1\"\r\n (click)=\"deleteDashboard(confirmDialog)\">\r\n <i class=\"fas fa-times fa-2x\"></i>\r\n <br />\r\n <span>Dashboard</span>\r\n </button>\r\n <button class=\"btn btn-primary btn-space green\"\r\n (click)=\"setEditMode(false)\">\r\n <i class=\"fas fa-check fa-2x\"></i>\r\n <br />\r\n <span>Done</span>\r\n </button>\r\n </div>\r\n \r\n <div class=\"outlet-row\">\r\n\r\n <!-- Iterate over all dashboards. Show non selected dashboards off screen. -->\r\n <ng-template ngFor let-dashboard [ngForOf]=\"dashboards\" let-dashboardIndex=\"index\">\r\n <div class=\"d-flex\"\r\n [style.left]=\"selectedIndex !== dashboardIndex ? '100vw' : 'inherit'\"\r\n [style.position]=\"selectedIndex !== dashboardIndex ? 'fixed' : 'inherit'\"\r\n [@openConfigContent]=\"configMode\">\r\n <widget-container\r\n [dashboard]=\"dashboard\"\r\n [dashboardIndex]=\"dashboardIndex\">\r\n </widget-container>\r\n </div>\r\n </ng-template>\r\n \r\n <div [style.display]=\"configMode === 'true' ? 'flex' : 'none'\" class=\"sidebar-widget-config\" [@openConfigSidebar]=\"configMode\">\r\n <div class=\"outlet-column\" style=\"background-color: white; height: 100%; padding: 2px;\">\r\n <div class=\"d-flex flex-nowrap\">\r\n <div><h4>Settings</h4></div>\r\n <div style=\"margin-right: 0px; margin-left: auto;\">\r\n <span style=\"color: green;\" (click)=\"saveConfiguration()\">\r\n <i class=\"fas fa-check-circle fa-2x\"></i>\r\n </span>\r\n <span style=\"color: red;\" (click)=\"cancelConfiguration()\">\r\n <i class=\"fas fa-times-circle fa-2x\"></i>\r\n </span>\r\n </div>\r\n </div>\r\n <widget-configure #widgetConfigure></widget-configure>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <ng-container *ngIf=\"dashboards?.length > 1\">\r\n <div class=\"dashboard-nav-trigger\">\r\n <span (mouseenter)=\"openDashboardNavState = 'opened'\">\r\n <i class=\"fas fa-th fa-2x\"></i>\r\n </span>\r\n </div>\r\n \r\n <div class=\"dashboard-nav\"\r\n [@openDashboardNav]=\"openDashboardNavState\"\r\n [style.left]=\"'calc(50vw - ' + dashboards?.length * 50 + 'px)'\"\r\n (mouseleave)=\"openDashboardNavState = 'closed'\">\r\n <ng-container *ngFor=\"let dashboard of dashboards; index as i\">\r\n <div [id]=\"'dash-image-' + i\"\r\n class=\"widget-image\"\r\n [ngClass]=\"i === selectedIndex ? 'selected' : ''\"\r\n (click)=\"selectDashboard(i)\">\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"helpMode\">\r\n <div id=\"helpParent\">\r\n <div id=\"helpChild\">\r\n <div style=\"width: 100%; display: inline-flex;\">\r\n <h4>Help</h4>\r\n <span style=\"margin-right: 0; margin-left: auto; color: red;\" (click)=\"setHelpMode(false)\">\r\n <i class=\"fas fa-times fa-lg\"></i>\r\n </span>\r\n </div>\r\n <div>\r\n The dashboard is a collection of widgets that you can customize to your own needs. In this edit mode, you\r\n can drag and drop widgets to change the order and double click a widget to change its configuration.\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n `,\r\n animations: [\r\n trigger(\"openConfigContent\",\r\n [\r\n state(\"false\", style({\r\n width: \"100%\"\r\n })),\r\n state(\"true\", style({\r\n width: \"80%\"\r\n })),\r\n transition(\"false => true\", animate(300)),\r\n transition(\"true => false\", animate(300))\r\n ]\r\n ),\r\n trigger(\"openConfigSidebar\",\r\n [\r\n state(\"false\", style({\r\n opacity: \"0\",\r\n width: \"0%\"\r\n })),\r\n state(\"true\", style({\r\n opacity: \"1\",\r\n width: \"20%\"\r\n })),\r\n transition(\"false => true\", animate(300)),\r\n transition(\"true => false\", animate(300))\r\n ]\r\n ),\r\n trigger(\"openDashboardNav\",\r\n [\r\n state(\"closed\", style({\r\n opacity: \"0\",\r\n bottom: \"-150px\"\r\n })),\r\n state(\"opened\", style({\r\n opacity: \"1\",\r\n bottom: \"40px\"\r\n })),\r\n transition(\"closed => opened\", animate(250)),\r\n transition(\"opened => closed\", animate(100))\r\n ]\r\n ),\r\n /*trigger(\"openEditModeHeaderContent\", [\r\n state(\"closed\", style({\r\n \"padding-top\": \"0px\"\r\n })),\r\n state(\"opened\", style({\r\n \"padding-top\": \"91px\"\r\n })),\r\n transition(\"closed => opened\", animate(300)),\r\n transition(\"opened => closed\", animate(300))\r\n ]),*/\r\n trigger(\"openEditModeHeader\", [\r\n state(\"closed\", style({\r\n \"opacity\": \"0\",\r\n \"overflow-y\": \"hidden\"\r\n })),\r\n state(\"opened\", style({\r\n \"opacity\": \"1\",\r\n \"overflow-y\": \"visible\"\r\n })),\r\n transition(\"closed => opened\", animate(300)),\r\n transition(\"opened => closed\", animate(300))\r\n ]),\r\n trigger(\"openEditModeHeaderDisplay\", [\r\n state(\"closed\", style({\r\n \"display\": \"none\"\r\n })),\r\n state(\"opened\", style({\r\n \"display\": \"flex\"\r\n })),\r\n transition(\"closed => opened\", animate(100)),\r\n transition(\"opened => closed\", animate(\"100ms 100ms\"))\r\n ])\r\n ],\r\n styles: [`\r\n \r\n #helpParent {\r\n position: fixed;\r\n display: flex;\r\n width: 100vw;\r\n height: 100vh;\r\n left: 0;\r\n top: 0;\r\n z-index: 999;\r\n background: rgba(0, 0, 0, 0.25);\r\n }\r\n \r\n #helpChild {\r\n width: 75%;\r\n height: 75%;\r\n margin-left: auto;\r\n margin-right: auto;\r\n margin-top: auto;\r\n margin-bottom: auto;\r\n background: white;\r\n border-radius: 25px;\r\n box-shadow: 2px 2px black;\r\n padding: 20px;\r\n }\r\n \r\n .sidebar-widget-config {\r\n background-color: #ffdddd;\r\n border-left: gray 1px solid;\r\n padding: 10px;\r\n padding-right: 0px;\r\n opacity: 0;\r\n width: 0%;\r\n }\r\n \r\n .modal {\r\n background-color: rgba(0, 0, 0, 0.25);\r\n }\r\n \r\n .edit-mode-header {\r\n border-bottom: black 1px dashed;\r\n padding-top: 10px;\r\n padding-bottom: 10px;\r\n z-index: 10;\r\n background-color: white;\r\n }\r\n \r\n .edit-mode-header button {\r\n padding: .2rem .5rem;\r\n }\r\n \r\n .btn-space {\r\n margin-left: 10px;\r\n }\r\n \r\n .btn.green {\r\n background-color: green;\r\n }\r\n\r\n .btn.red {\r\n background-color: red;\r\n }\r\n\r\n .dashboard-nav-trigger {\r\n bottom: 40px;\r\n position: fixed;\r\n z-index: 100;\r\n display: inline-block;\r\n width: 100%;\r\n text-align: center;\r\n padding-top: 15px;\r\n background: white;\r\n background: linear-gradient(0deg, white, white, transparent);\r\n }\r\n\r\n .dashboard-nav {\r\n bottom: -150px;\r\n position: fixed;\r\n z-index: 101;\r\n display: inline-block;\r\n background-color: white;\r\n }\r\n \r\n .widget-image {\r\n display: inline-block;\r\n max-height: 100px;\r\n height: 100px;\r\n min-height: 100px;\r\n max-width: 100px;\r\n width: 100px;\r\n min-width: 100px;\r\n border: black 1px solid;\r\n vertical-align: bottom;\r\n overflow-y: hidden;\r\n overflow-x: hidden;\r\n }\r\n \r\n .widget-image.selected {\r\n border: red 2px solid;\r\n }\r\n `],\r\n providers: [\r\n DashboardService\r\n ]\r\n})\r\nexport class DashboardComponent {\r\n\r\n @HostBinding(\"class\") classList: string = \"outlet-column\";\r\n\r\n public openDashboardNavState: string = \"closed\";\r\n\r\n public helpMode: boolean = false;\r\n public editMode: string = \"closed\";\r\n public selectedIndex = 0;\r\n\r\n public dashboards: Dashboard[] = [];\r\n\r\n public showWidgetContainerNav: boolean = false;\r\n\r\n configMode: string = \"false\";\r\n\r\n @ViewChildren(WidgetContainerComponent, { read: ElementRef }) widgetContainers: QueryList<ElementRef>;\r\n\r\n @ViewChild(\"widgetConfigure\", {static: false}) widgetConfigure: WidgetConfigureComponent;\r\n\r\n constructor(private changeDetectorRef: ChangeDetectorRef,\r\n private elementRef: ElementRef,\r\n private dashboardService: DashboardService,\r\n private dashboardGlobalService: DashboardGlobalService,\r\n private dragulaService: DragulaService,\r\n private modalService: NgbModal) {\r\n this.dashboards = this.dashboardService.getDashboards();\r\n\r\n this.dashboardService.dashboardsState.subscribe((dashboards: Dashboard[]) => {\r\n this.dashboards = dashboards;\r\n });\r\n\r\n this.dashboardService.configurationWidgetInstanceSubject.subscribe((widgetInstance: WidgetInstance) => {\r\n if (widgetInstance) {\r\n this.configMode = \"true\";\r\n } else {\r\n this.configMode = \"false\";\r\n }\r\n });\r\n\r\n this.dashboardService.getEditMode().subscribe((editMode: boolean) => {\r\n if (isDevMode()) {\r\n console.info(\"getEditMode \" + editMode);\r\n }\r\n\r\n if (editMode) {\r\n this.editMode = \"opened\";\r\n } else {\r\n this.editMode = \"closed\";\r\n }\r\n });\r\n\r\n /*let bag = this.dragulaService.find(\"attribute-choices\");\r\n if (bag !== undefined) {\r\n this.dragulaService.destroy(\"attribute-choices\");\r\n }\r\n this.dragulaService.createGroup(\"attribute-choices\", {\r\n direction: \"vertical\",\r\n moves: function (el: any, container: any, handle: any) {\r\n return true;\r\n }\r\n });\r\n this.dragulaService.find(\"attribute-choices\")\r\n .drake\r\n .containers\r\n .push(this.elementRef.nativeElement.querySelector(\"#attribute-choices\"));\r\n this.dragulaService.drop(\"\").subscribe((value: any) => {\r\n let n: number = 1;\r\n\r\n for (let el of this.elementRef.nativeElement.querySelectorAll(\"widget-host\")) {\r\n this.dashboardService.saveWidgetSortOrder(this.selectedIndex, +el.getAttribute(\"id\"), n++);\r\n }\r\n });*/\r\n }\r\n\r\n ngOnInit(): void {\r\n this.dashboardGlobalService.setActiveDashboardService(this.dashboardService);\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.widgetContainers.changes.subscribe((widgetContainers: QueryList <ElementRef>) => {\r\n this.renderDashboardNavImages();\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.dashboardGlobalService.setActiveDashboardService();\r\n }\r\n\r\n selectDashboard(index: number) {\r\n this.selectedIndex = index;\r\n }\r\n\r\n /**\r\n * Informs dashboardService of editMode change. Widget hosts will listen for this change.\r\n *\r\n * @param editMode\r\n */\r\n setEditMode(editMode: boolean) {\r\n this.dashboardService.setEditMode(editMode);\r\n }\r\n\r\n setHelpMode(helpMode: boolean) {\r\n if (isDevMode()) {\r\n console.info(\"setHelpMode \" + helpMode);\r\n }\r\n\r\n this.helpMode = helpMode;\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n\r\n /**\r\n * Use dom-to-image to render each widgetContainer as an image. Add an image for each widgetContainer\r\n * to the dashboardNav view.\r\n */\r\n renderDashboardNavImages() {\r\n setTimeout(() => {\r\n var self = this;\r\n this.widgetContainers.forEach((elementRef: ElementRef, index: number) => {\r\n var el = self.elementRef.nativeElement.querySelector(\"#dash-image-\" + index);\r\n if (el) {\r\n domtoimage.toPng(elementRef.nativeElement)\r\n .then(function (dataUrl) {\r\n var img = new Image();\r\n img.width = 100;\r\n img.src = dataUrl;\r\n el.innerHTML = \"\";\r\n el.appendChild(img);\r\n self.showWidgetContainerNav = true;\r\n })\r\n .catch(function (error) {\r\n console.error(\"Widget Image Error\", error);\r\n });\r\n }\r\n });\r\n }, 2000);\r\n }\r\n\r\n /**\r\n * Sends trigger to dashboardService to open the widget add component. That component listens for\r\n * this trigger.\r\n */\r\n addWidget() {\r\n this.dashboardService.addWidgetSubject.next(true);\r\n }\r\n\r\n deleteWidget() {\r\n this.dashboardService.deleteWidget(this.dashboardService.configurationWidgetInstanceSubject.getValue());\r\n }\r\n\r\n cancelConfiguration() {\r\n this.dashboardService.cancelConfigurationWidget();\r\n }\r\n\r\n saveConfiguration() {\r\n this.dashboardService.saveConfigurationWidget();\r\n }\r\n\r\n /**\r\n * Calls dashboardService to add a dashboard. Add dashboard will update dashboards through subscribe and\r\n * this waits for completion of the process which returns the new selectedIndex (which is the last dashboard).\r\n */\r\n addDashboard() {\r\n let dashboard: Dashboard = new Dashboard();\r\n dashboard.name = \"Temp\";\r\n dashboard.sortOrder = this.dashboards.length;\r\n dashboard.widgetInstances = [];\r\n this.dashboardService.addDashboard(dashboard).subscribe((index: number) => {\r\n this.selectedIndex = index;\r\n });\r\n }\r\n\r\n /**\r\n * Calls dashboardService to delete dashboard. Delete dashboard will update dashboards through subscribe and\r\n * this waits for completion of the process which returns the new selectedIndex.\r\n *\r\n * @param content\r\n */\r\n deleteDashboard(content) {\r\n this.modalService.open(content).result.then((result: string) => {\r\n if (result === \"Yes\") {\r\n this.dashboardService.deleteDashboard(this.selectedIndex).subscribe((index: number) => {\r\n this.selectedIndex = index;\r\n });\r\n }\r\n });\r\n }\r\n\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {NgModule} from \"@angular/core\";\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {FormsModule} from \"@angular/forms\";\r\n\r\nimport {ColorPickerModule, ColorPickerService} from \"ngx-color-picker\";\r\nimport {NgbModule} from \"@ng-bootstrap/ng-bootstrap\";\r\nimport {DragulaModule, DragulaService} from \"ng2-dragula\";\r\n\r\nimport {DashboardComponent} from \"./dashboard.component\";\r\nimport {WidgetAttributeComponent} from \"./configure/widget-attribute.component\";\r\nimport {WidgetConfigureComponent} from \"./configure/widget-configure.component\";\r\nimport {WidgetAddComponent} from \"./configure/widget-add.component\";\r\nimport {WidgetContainerComponent} from \"./widget/widget-container.component\";\r\nimport {WidgetHostComponent} from \"./widget/widget-host.component\";\r\nimport {WidgetComponent} from \"./widget/widget.component\";\r\nimport {HasEditableAttributesPipe} from \"./pipes/has-editable-attributes.pipe\";\r\n\r\n/**\r\n * A feature module for the dashboard layout and dashboard widgets.\r\n *\r\n * @since 1.0.0\r\n */\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ColorPickerModule,\r\n DragulaModule,\r\n NgbModule\r\n ],\r\n declarations: [\r\n DashboardComponent,\r\n WidgetContainerComponent,\r\n WidgetHostComponent,\r\n WidgetComponent,\r\n WidgetAddComponent,\r\n WidgetConfigureComponent,\r\n WidgetAttributeComponent,\r\n HasEditableAttributesPipe\r\n ],\r\n providers: [\r\n ColorPickerService\r\n ],\r\n exports: [\r\n DashboardComponent,\r\n WidgetContainerComponent,\r\n WidgetHostComponent,\r\n WidgetComponent,\r\n WidgetAddComponent,\r\n WidgetConfigureComponent,\r\n WidgetAttributeComponent\r\n ]\r\n})\r\nexport class DashboardModule {}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\n/**\r\n * A barrel file for the HCI ng dashboard package.\r\n *\r\n * @since 1.0.0\r\n */\r\nexport {DashboardModule} from \"./dashboard.module\";\r\nexport {DashboardComponent} from \"./dashboard.component\";\r\nexport {DashboardService, USER_PROFILE_ENDPOINT, DASHBOARD_TYPE} from \"./services/dashboard.service\";\r\nexport {DashboardGlobalService} from \"./services/dashboard-global.service\";\r\nexport {WidgetHostComponent} from \"./widget/widget-host.component\";\r\nexport {WidgetComponent} from \"./widget/widget.component\";\r\nexport {WidgetContainerComponent} from \"./widget/widget-container.component\";\r\nexport {WidgetAddComponent} from \"./configure/widget-add.component\";\r\nexport {WidgetConfigureComponent} from \"./configure/widget-configure.component\";\r\nexport {WidgetAttributeComponent} from \"./configure/widget-attribute.component\";\r\n\r\nexport {Dashboard} from \"./model/dashboard.entity\";\r\nexport {UserProfile} from \"./model/user-profile.entity\";\r\nexport {Widget} from \"./model/widget.entity\";\r\nexport {WidgetAttribute} from \"./model/widget-attribute.entity\";\r\nexport {WidgetAttributeChoice} from \"./model/widget-attribute-choice.entity\";\r\nexport {WidgetAttributeContainer} from \"./model/widget-attribute-container.entity\";\r\nexport {WidgetAttributeValue} from \"./model/widget-attribute-value.entity\";\r\nexport {WidgetAttributeValueSet} from \"./model/widget-attribute-value-set.entity\";\r\nexport {WidgetCategory} from \"./model/widget-category.entity\";\r\nexport {WidgetInstance} from \"./model/widget-instance.entity\";\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.DashboardService","i3","i4.WidgetAttributeComponent","i5.HasEditableAttributesPipe","i2","i4.WidgetHostComponent","i2.DashboardGlobalService","i4","i5","i6.WidgetContainerComponent","i7.WidgetAddComponent","i8.WidgetConfigureComponent"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@huntsman-cancer-institute/dashboard",
3
- "version": "17.2.6",
3
+ "version": "17.3.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git@gitlab.com:huntsman-cancer-institute/risr/ng/hci-ng-lib.git"
@@ -20,7 +20,7 @@
20
20
  "ngx-color-picker": "16.x"
21
21
  },
22
22
  "dependencies": {
23
- "@huntsman-cancer-institute/utils": "17.2.6",
23
+ "@huntsman-cancer-institute/utils": "^17.x",
24
24
  "tslib": "^2.3.0"
25
25
  },
26
26
  "overrides": {