mmhglobal-dynamicform 1.2.3 → 1.3.2

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.
Files changed (198) hide show
  1. package/README.md +14 -2
  2. package/esm2020/lib/directives/fieldelement.directive.mjs +16 -0
  3. package/esm2020/lib/directives/scrollbar.theme.directive.mjs +43 -0
  4. package/esm2020/lib/mmhglobal-dynamicform.module.mjs +464 -0
  5. package/esm2020/lib/services/main.service.mjs +752 -0
  6. package/esm2020/lib/services/zcomponent.debug.service.mjs +621 -0
  7. package/esm2020/lib/services/zcomponent.service.mjs +81 -0
  8. package/esm2020/lib/uiactionbutton/uiactionbutton.component.mjs +265 -0
  9. package/esm2020/lib/uiappmenucontent/uiappmenucontent.component.mjs +67 -0
  10. package/esm2020/lib/uicontent/uicontent.component.mjs +41 -0
  11. package/esm2020/lib/uiheader/uiheader.component.mjs +66 -0
  12. package/esm2020/lib/uimenubutton/uimenubutton.component.mjs +35 -0
  13. package/esm2020/lib/uimenucontent/uimenucontent.component.mjs +37 -0
  14. package/{esm2015/lib/uipage/uipage.component.js → esm2020/lib/uipage/uipage.component.mjs} +12 -13
  15. package/esm2020/lib/uivalidationmessage/uivalidationmessage.component.mjs +41 -0
  16. package/esm2020/lib/zbullet/zbullet.component.mjs +74 -0
  17. package/esm2020/lib/zbuttons/zbuttons.component.mjs +171 -0
  18. package/esm2020/lib/zcard/zcard.component.mjs +72 -0
  19. package/esm2020/lib/zchart/zchart.component.mjs +201 -0
  20. package/esm2020/lib/zcheckbox/zcheckbox.component.mjs +166 -0
  21. package/esm2020/lib/zchip/zchip.component.mjs +121 -0
  22. package/esm2020/lib/zcodeeditor/zcodeeditor.component.mjs +169 -0
  23. package/esm2020/lib/zcodeeditor/zcodeeditor.pipe.mjs +60 -0
  24. package/esm2020/lib/zdaterange/zdaterange.component.mjs +70 -0
  25. package/esm2020/lib/zdatetime/dateParser.pipe.mjs +30 -0
  26. package/esm2020/lib/zdatetime/zdatetime.component.mjs +285 -0
  27. package/esm2020/lib/zdiv/zdiv.component.mjs +50 -0
  28. package/esm2020/lib/zdiv/zdiv.pipe.mjs +31 -0
  29. package/esm2020/lib/zform/zform.component.mjs +147 -0
  30. package/esm2020/lib/zformcontrol/zformcontrol.component.mjs +49 -0
  31. package/esm2020/lib/zgauge/zgauge.component.mjs +148 -0
  32. package/esm2020/lib/zgrid/date-range-cell-filter.component.mjs +135 -0
  33. package/esm2020/lib/zgrid/zgrid.binding.directive.mjs +490 -0
  34. package/esm2020/lib/zgrid/zgrid.component.mjs +847 -0
  35. package/esm2020/lib/zgrid/zgrid.popup.anchor-target.directive.mjs +17 -0
  36. package/esm2020/lib/zimg/zimg.component.mjs +121 -0
  37. package/esm2020/lib/zkcard/zkcard.component.mjs +367 -0
  38. package/esm2020/lib/zlabel/zlabel.component.mjs +62 -0
  39. package/esm2020/lib/zmfb/zmfb.component.mjs +215 -0
  40. package/esm2020/lib/zmodal/zmodal-mobile.component.mjs +120 -0
  41. package/esm2020/lib/zmodal/zmodal.component.mjs +125 -0
  42. package/esm2020/lib/znumeric/znumeric.component.mjs +119 -0
  43. package/esm2020/lib/zpostselectinput/zpostselectinput.component.mjs +352 -0
  44. package/esm2020/lib/zquerybuilder/zquerybuilder.component.mjs +204 -0
  45. package/esm2020/lib/zreport/zreport.component.mjs +105 -0
  46. package/esm2020/lib/zreport/zreport.config.mjs +117 -0
  47. package/esm2020/lib/zscheduler/zscheduler.component.mjs +267 -0
  48. package/{esm2015/lib/zscheduler/zscheduler.toolbar.component.js → esm2020/lib/zscheduler/zscheduler.toolbar.component.mjs} +55 -19
  49. package/esm2020/lib/zselectmultiple/zselectmultiple.component.mjs +577 -0
  50. package/esm2020/lib/zselectmultiple/zselectmultiple.directive.mjs +35 -0
  51. package/esm2020/lib/ztab/ztab.component.mjs +187 -0
  52. package/esm2020/lib/ztab/ztab.pipe.mjs +26 -0
  53. package/esm2020/lib/ztext/ztext.component.mjs +297 -0
  54. package/esm2020/lib/ztextarea/ztextarea.component.mjs +109 -0
  55. package/esm2020/lib/ztexteditor/ztexteditor.component.mjs +57 -0
  56. package/esm2020/lib/ztree/ztree.component.mjs +380 -0
  57. package/esm2020/lib/ztreelist/ztreelist.component.mjs +544 -0
  58. package/esm2020/lib/ztrendcard/ztrendcard.component.mjs +92 -0
  59. package/esm2020/lib/zudf/zudf.component.mjs +205 -0
  60. package/esm2020/lib/zunknown/zunknown.component.mjs +20 -0
  61. package/esm2020/lib/zupload/zupload.component.mjs +359 -0
  62. package/esm2020/lib/zworkflowbuttons/zworkflowbuttons.component.mjs +216 -0
  63. package/esm2020/mmhglobal-dynamicform.mjs +5 -0
  64. package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
  65. package/fesm2015/mmhglobal-dynamicform.mjs +10790 -0
  66. package/fesm2015/mmhglobal-dynamicform.mjs.map +1 -0
  67. package/fesm2020/mmhglobal-dynamicform.mjs +10779 -0
  68. package/fesm2020/mmhglobal-dynamicform.mjs.map +1 -0
  69. package/lib/directives/fieldelement.directive.d.ts +3 -0
  70. package/lib/directives/scrollbar.theme.directive.d.ts +3 -0
  71. package/lib/mmhglobal-dynamicform.module.d.ts +92 -0
  72. package/lib/services/main.service.d.ts +3 -0
  73. package/lib/services/zcomponent.debug.service.d.ts +8 -5
  74. package/lib/services/zcomponent.service.d.ts +7 -2
  75. package/lib/uiactionbutton/uiactionbutton.component.d.ts +3 -0
  76. package/lib/uiappmenucontent/uiappmenucontent.component.d.ts +3 -0
  77. package/lib/uicontent/uicontent.component.d.ts +3 -0
  78. package/lib/uiheader/uiheader.component.d.ts +3 -0
  79. package/lib/uimenubutton/uimenubutton.component.d.ts +3 -0
  80. package/lib/uimenucontent/uimenucontent.component.d.ts +3 -0
  81. package/lib/uipage/uipage.component.d.ts +3 -0
  82. package/lib/uivalidationmessage/uivalidationmessage.component.d.ts +3 -0
  83. package/lib/zbullet/zbullet.component.d.ts +3 -0
  84. package/lib/zbuttons/zbuttons.component.d.ts +3 -0
  85. package/lib/zcard/zcard.component.d.ts +3 -0
  86. package/lib/zchart/zchart.component.d.ts +3 -0
  87. package/lib/zcheckbox/zcheckbox.component.d.ts +3 -0
  88. package/lib/zchip/zchip.component.d.ts +3 -0
  89. package/lib/zcodeeditor/zcodeeditor.component.d.ts +3 -0
  90. package/lib/zcodeeditor/zcodeeditor.pipe.d.ts +3 -0
  91. package/lib/zdaterange/zdaterange.component.d.ts +3 -0
  92. package/lib/zdatetime/dateParser.pipe.d.ts +3 -0
  93. package/lib/zdatetime/zdatetime.component.d.ts +3 -0
  94. package/lib/zdiv/zdiv.component.d.ts +3 -0
  95. package/lib/zdiv/zdiv.pipe.d.ts +3 -0
  96. package/lib/zform/zform.component.d.ts +3 -0
  97. package/lib/zformcontrol/zformcontrol.component.d.ts +3 -0
  98. package/lib/zgauge/zgauge.component.d.ts +3 -0
  99. package/lib/zgrid/date-range-cell-filter.component.d.ts +3 -0
  100. package/lib/zgrid/zgrid.binding.directive.d.ts +3 -0
  101. package/lib/zgrid/zgrid.component.d.ts +4 -1
  102. package/lib/zgrid/zgrid.popup.anchor-target.directive.d.ts +3 -0
  103. package/lib/zimg/zimg.component.d.ts +3 -0
  104. package/lib/zkcard/zkcard.component.d.ts +3 -0
  105. package/lib/zlabel/zlabel.component.d.ts +3 -0
  106. package/lib/zmfb/zmfb.component.d.ts +3 -0
  107. package/lib/zmodal/zmodal-mobile.component.d.ts +3 -0
  108. package/lib/zmodal/zmodal.component.d.ts +3 -0
  109. package/lib/znumeric/znumeric.component.d.ts +3 -0
  110. package/lib/zpostselectinput/zpostselectinput.component.d.ts +3 -0
  111. package/lib/zquerybuilder/zquerybuilder.component.d.ts +3 -0
  112. package/lib/zreport/zreport.component.d.ts +3 -0
  113. package/lib/zreport/zreport.config.d.ts +3 -0
  114. package/lib/zscheduler/zscheduler.component.d.ts +3 -0
  115. package/lib/zscheduler/zscheduler.toolbar.component.d.ts +3 -0
  116. package/lib/zselectmultiple/zselectmultiple.component.d.ts +3 -0
  117. package/lib/zselectmultiple/zselectmultiple.directive.d.ts +3 -0
  118. package/lib/ztab/ztab.component.d.ts +3 -0
  119. package/lib/ztab/ztab.pipe.d.ts +3 -0
  120. package/lib/ztext/ztext.component.d.ts +3 -0
  121. package/lib/ztextarea/ztextarea.component.d.ts +3 -0
  122. package/lib/ztexteditor/ztexteditor.component.d.ts +3 -0
  123. package/lib/ztree/ztree.component.d.ts +3 -0
  124. package/lib/ztreelist/ztreelist.component.d.ts +3 -0
  125. package/lib/ztrendcard/ztrendcard.component.d.ts +3 -0
  126. package/lib/zudf/zudf.component.d.ts +3 -0
  127. package/lib/zunknown/zunknown.component.d.ts +3 -0
  128. package/lib/zupload/zupload.component.d.ts +3 -0
  129. package/lib/zworkflowbuttons/zworkflowbuttons.component.d.ts +3 -0
  130. package/mmhglobal-dynamicform.d.ts +1 -2
  131. package/package.json +20 -11
  132. package/bundles/mmhglobal-dynamicform.umd.js +0 -11360
  133. package/bundles/mmhglobal-dynamicform.umd.js.map +0 -1
  134. package/bundles/mmhglobal-dynamicform.umd.min.js +0 -16
  135. package/bundles/mmhglobal-dynamicform.umd.min.js.map +0 -1
  136. package/esm2015/lib/directives/fieldelement.directive.js +0 -15
  137. package/esm2015/lib/directives/scrollbar.theme.directive.js +0 -42
  138. package/esm2015/lib/mmhglobal-dynamicform.module.js +0 -314
  139. package/esm2015/lib/services/main.service.js +0 -766
  140. package/esm2015/lib/services/zcomponent.debug.service.js +0 -626
  141. package/esm2015/lib/services/zcomponent.service.js +0 -167
  142. package/esm2015/lib/uiactionbutton/uiactionbutton.component.js +0 -271
  143. package/esm2015/lib/uiappmenucontent/uiappmenucontent.component.js +0 -69
  144. package/esm2015/lib/uicontent/uicontent.component.js +0 -41
  145. package/esm2015/lib/uiheader/uiheader.component.js +0 -65
  146. package/esm2015/lib/uimenubutton/uimenubutton.component.js +0 -40
  147. package/esm2015/lib/uimenucontent/uimenucontent.component.js +0 -34
  148. package/esm2015/lib/uivalidationmessage/uivalidationmessage.component.js +0 -39
  149. package/esm2015/lib/zbullet/zbullet.component.js +0 -71
  150. package/esm2015/lib/zbuttons/zbuttons.component.js +0 -168
  151. package/esm2015/lib/zcard/zcard.component.js +0 -68
  152. package/esm2015/lib/zchart/zchart.component.js +0 -199
  153. package/esm2015/lib/zcheckbox/zcheckbox.component.js +0 -158
  154. package/esm2015/lib/zchip/zchip.component.js +0 -117
  155. package/esm2015/lib/zcodeeditor/zcodeeditor.component.js +0 -163
  156. package/esm2015/lib/zcodeeditor/zcodeeditor.pipe.js +0 -56
  157. package/esm2015/lib/zdaterange/zdaterange.component.js +0 -63
  158. package/esm2015/lib/zdatetime/dateParser.pipe.js +0 -26
  159. package/esm2015/lib/zdatetime/zdatetime.component.js +0 -279
  160. package/esm2015/lib/zdiv/zdiv.component.js +0 -48
  161. package/esm2015/lib/zdiv/zdiv.pipe.js +0 -27
  162. package/esm2015/lib/zform/zform.component.js +0 -148
  163. package/esm2015/lib/zformcontrol/zformcontrol.component.js +0 -49
  164. package/esm2015/lib/zgauge/zgauge.component.js +0 -146
  165. package/esm2015/lib/zgrid/date-range-cell-filter.component.js +0 -102
  166. package/esm2015/lib/zgrid/zgrid.binding.directive.js +0 -493
  167. package/esm2015/lib/zgrid/zgrid.component.js +0 -834
  168. package/esm2015/lib/zgrid/zgrid.popup.anchor-target.directive.js +0 -16
  169. package/esm2015/lib/zimg/zimg.component.js +0 -123
  170. package/esm2015/lib/zkcard/zkcard.component.js +0 -372
  171. package/esm2015/lib/zlabel/zlabel.component.js +0 -59
  172. package/esm2015/lib/zmfb/zmfb.component.js +0 -215
  173. package/esm2015/lib/zmodal/zmodal-mobile.component.js +0 -119
  174. package/esm2015/lib/zmodal/zmodal.component.js +0 -130
  175. package/esm2015/lib/znumeric/znumeric.component.js +0 -114
  176. package/esm2015/lib/zpostselectinput/zpostselectinput.component.js +0 -345
  177. package/esm2015/lib/zquerybuilder/zquerybuilder.component.js +0 -196
  178. package/esm2015/lib/zreport/zreport.component.js +0 -104
  179. package/esm2015/lib/zreport/zreport.config.js +0 -115
  180. package/esm2015/lib/zscheduler/zscheduler.component.js +0 -268
  181. package/esm2015/lib/zselectmultiple/zselectmultiple.component.js +0 -565
  182. package/esm2015/lib/zselectmultiple/zselectmultiple.directive.js +0 -28
  183. package/esm2015/lib/ztab/ztab.component.js +0 -180
  184. package/esm2015/lib/ztab/ztab.pipe.js +0 -22
  185. package/esm2015/lib/ztext/ztext.component.js +0 -286
  186. package/esm2015/lib/ztextarea/ztextarea.component.js +0 -104
  187. package/esm2015/lib/ztexteditor/ztexteditor.component.js +0 -52
  188. package/esm2015/lib/ztree/ztree.component.js +0 -374
  189. package/esm2015/lib/ztreelist/ztreelist.component.js +0 -539
  190. package/esm2015/lib/ztrendcard/ztrendcard.component.js +0 -89
  191. package/esm2015/lib/zudf/zudf.component.js +0 -206
  192. package/esm2015/lib/zunknown/zunknown.component.js +0 -20
  193. package/esm2015/lib/zupload/zupload.component.js +0 -358
  194. package/esm2015/lib/zworkflowbuttons/zworkflowbuttons.component.js +0 -215
  195. package/esm2015/mmhglobal-dynamicform.js +0 -7
  196. package/fesm2015/mmhglobal-dynamicform.js +0 -10729
  197. package/fesm2015/mmhglobal-dynamicform.js.map +0 -1
  198. package/mmhglobal-dynamicform.metadata.json +0 -1
@@ -1,16 +0,0 @@
1
- import { Directive, ElementRef } from '@angular/core';
2
- export class ZGridPopupAnchorDirective {
3
- constructor(element) {
4
- this.element = element;
5
- }
6
- }
7
- ZGridPopupAnchorDirective.decorators = [
8
- { type: Directive, args: [{
9
- selector: '[popupAnchor]',
10
- exportAs: 'popupAnchor'
11
- },] }
12
- ];
13
- ZGridPopupAnchorDirective.ctorParameters = () => [
14
- { type: ElementRef }
15
- ];
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemdyaWQucG9wdXAuYW5jaG9yLXRhcmdldC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbWhnbG9iYWwtZHluYW1pY2Zvcm0vc3JjL2xpYi96Z3JpZC96Z3JpZC5wb3B1cC5hbmNob3ItdGFyZ2V0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFNeEUsTUFBTSxPQUFPLHlCQUF5QjtJQUNwQyxZQUFtQixPQUFtQjtRQUFuQixZQUFPLEdBQVAsT0FBTyxDQUFZO0lBRXRDLENBQUM7OztZQVBGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsZUFBZTtnQkFDekIsUUFBUSxFQUFFLGFBQWE7YUFDeEI7OztZQUxtQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1twb3B1cEFuY2hvcl0nLFxyXG4gIGV4cG9ydEFzOiAncG9wdXBBbmNob3InXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBaR3JpZFBvcHVwQW5jaG9yRGlyZWN0aXZlIHtcclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZWxlbWVudDogRWxlbWVudFJlZlxyXG4gICkge1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,123 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- /********** Angular **********/
3
- import { Component, Input } from "@angular/core";
4
- import { Validators } from '@angular/forms';
5
- /********** Component & Service **********/
6
- import { ZComponentHelper, ZComponentProperties, AttachmentService } from "mmhglobal-zcore";
7
- export class ZimgComponent {
8
- constructor(attachmentService) {
9
- this.attachmentService = attachmentService;
10
- this.imgWidth = null;
11
- this.imgHeight = null;
12
- this.imgSrc = null;
13
- this.randomNumber = Math.random();
14
- this.componentProperties = new ZComponentProperties();
15
- this.setEnable = (status) => {
16
- this.componentProperties.isReadOnly = !status;
17
- };
18
- this.setVisible = (status) => {
19
- this.componentProperties.isVisible = status;
20
- this.data.Visible = status;
21
- };
22
- this.setRequire = (status) => {
23
- this.componentProperties.isRequired = status;
24
- ZComponentHelper.changeValidator(status, this.group, this.data.Value, this.componentProperties, Validators.required);
25
- };
26
- }
27
- ngOnInit() {
28
- return __awaiter(this, void 0, void 0, function* () {
29
- ZComponentHelper.setComponentProperties(this);
30
- ZComponentHelper.registerComponent(this);
31
- if (this.data.Size && this.data.Size.toLowerCase().indexOf("x") !== -1) {
32
- const imgSize = this.data.Size.toLowerCase().split("x");
33
- this.imgWidth = imgSize[0];
34
- this.imgHeight = imgSize[1];
35
- }
36
- this.Guid = this.getGroupValue(this.data['Guid'], this.group); //this.data['Guid'];//this.getGroupValue(this.data['Guid'], this.group);
37
- this.FileName = this.getGroupValue(this.data['FileName'], this.group); //this.getGroupValue(this.data['FileName'], this.group);
38
- if (this.Guid != undefined && this.FileName != undefined) {
39
- let blobfile = yield this.attachmentService.getImageBlob(this.FileName, this.Guid);
40
- this.Image = yield this.attachmentService.convertBlobToBase64(blobfile);
41
- }
42
- // this.subscription = this.group.zModel$
43
- // .asObservable()
44
- // .subscribe((zmodel: any) => {
45
- // this.onDataSourceChange(zmodel);
46
- // });
47
- });
48
- }
49
- ngOnDestroy() {
50
- if (this.subscription) {
51
- this.subscription.unsubscribe();
52
- }
53
- }
54
- onDataSourceChange() {
55
- const value = this.getGroupValue(this.data.Value, this.group);
56
- const sourceUrl = this.getGroupValue(this.data.SourceUrl, this.group);
57
- if (value && sourceUrl) {
58
- // this.imgSrc =
59
- // this.imgSourceAvailable = true;
60
- return (sourceUrl +
61
- "?id=" +
62
- value +
63
- "&size=" +
64
- this.data.Size
65
- // + "&r=" + this.randomNumber
66
- );
67
- // console.log("image source: ", this.imgSrc);
68
- }
69
- else {
70
- // this.imgSourceAvailable = false;
71
- }
72
- }
73
- getGroupValue(value, group) {
74
- return ZComponentHelper.getGroupValue(value, group);
75
- }
76
- // getValue(data: string) {
77
- // let gArray: Array<string>;
78
- // if (data) {
79
- // gArray = data.split(".");
80
- // if (gArray.length === 3 && data.startsWith("group.zModel")) {
81
- // return this.group.zModel[gArray[2]];
82
- // } else if (gArray.length === 2 && data.startsWith("group.")) {
83
- // return this.group[gArray[1]];
84
- // }
85
- // }
86
- // return null;
87
- // }
88
- getImgStyle() { }
89
- onIconClick() {
90
- const iconClick = ZComponentHelper.getGroupEvalValue.call(this, this.data.OnItemClick, this.group);
91
- if (typeof iconClick === 'function') {
92
- return iconClick();
93
- }
94
- if (!iconClick) {
95
- console.warn('ZImg OnItemClick property is invalid: ', iconClick);
96
- return;
97
- }
98
- if (typeof iconClick !== 'function') {
99
- console.warn('ZImg OnItemClick property is not a function: ', iconClick);
100
- return;
101
- }
102
- }
103
- getIconName() {
104
- const iconName = ZComponentHelper.getGroupEvalValue.call(this, this.data.Icon, this.group);
105
- return iconName;
106
- }
107
- }
108
- ZimgComponent.decorators = [
109
- { type: Component, args: [{
110
- selector: "app-zimg",
111
- template: "<ion-item>\r\n <ion-label *ngIf=\"data.ShowLabel === undefined || data.ShowLabel\" position=\"stacked\">{{data.Label}} <ion-text\r\n *ngIf=\"(!!componentProperties.isRequiredField ? group[componentProperties.isRequiredField] : componentProperties.isRequired)\" color=\"danger\">*</ion-text>\r\n </ion-label>\r\n <img *ngIf=\"!!getGroupValue(data.Value, group)\" [src]=\"onDataSourceChange()\" [width]=\"imgWidth\" [height]=\"imgHeight\" style=\"border-radius: 50%; margin: 5px auto\" />\r\n <img *ngIf=\"this.Guid !==undefined && this.Guid !==FileName\" [src]=\"this.Image\" [width]=\"imgWidth\" [height]=\"imgHeight\" style=\"border-radius: 50%; margin: 5px auto\" />\r\n \r\n <div *ngIf=\"!getGroupValue(data.Value, group)\" (click)=\"onIconClick()\">\r\n <ion-icon name=\"getIconName()\" style=\"zoom:4.0;\">\r\n </ion-icon>\r\n </div>\r\n</ion-item>",
112
- styles: [""]
113
- },] }
114
- ];
115
- ZimgComponent.ctorParameters = () => [
116
- { type: AttachmentService }
117
- ];
118
- ZimgComponent.propDecorators = {
119
- data: [{ type: Input }],
120
- group: [{ type: Input }],
121
- form: [{ type: Input }]
122
- };
123
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemltZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbWhnbG9iYWwtZHluYW1pY2Zvcm0vc3JjL2xpYi96aW1nL3ppbWcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDcEUsT0FBTyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBT3ZELDJDQUEyQztBQUMzQyxPQUFPLEVBQ08sZ0JBQWdCLEVBQWtCLG9CQUFvQixFQUNuRCxpQkFBaUIsRUFDakMsTUFBTSxpQkFBaUIsQ0FBQztBQVF6QixNQUFNLE9BQU8sYUFBYTtJQWV4QixZQUFvQixpQkFBb0M7UUFBcEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQVh4RCxhQUFRLEdBQVcsSUFBSSxDQUFDO1FBQ3hCLGNBQVMsR0FBVyxJQUFJLENBQUM7UUFDekIsV0FBTSxHQUFXLElBQUksQ0FBQztRQUN0QixpQkFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM3Qix3QkFBbUIsR0FBRyxJQUFJLG9CQUFvQixFQUFFLENBQUM7UUE2RzFDLGNBQVMsR0FBRyxDQUFDLE1BQWUsRUFBRSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFDaEQsQ0FBQyxDQUFBO1FBRU0sZUFBVSxHQUFHLENBQUMsTUFBZSxFQUFFLEVBQUU7WUFDdEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7WUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQzdCLENBQUMsQ0FBQTtRQUVNLGVBQVUsR0FBRyxDQUFDLE1BQWUsRUFBRSxFQUFFO1lBQ3RDLElBQUksQ0FBQyxtQkFB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KioqKiovXHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT25EZXN0cm95IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuXHJcbi8qKioqKioqKioqIFBsdWdpbiAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQge1xyXG4gIFpDb21wb25lbnQsIFpDb21wb25lbnRIZWxwZXIsIFpGaWVsZCwgWkdyb3VwLCBaQ29tcG9uZW50UHJvcGVydGllcyxcclxuICBXZWJBcGlTZXJ2aWNlLCBBdHRhY2htZW50U2VydmljZVxyXG59IGZyb20gXCJtbWhnbG9iYWwtemNvcmVcIjtcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJhcHAtemltZ1wiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vemltZy5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi96aW1nLmNvbXBvbmVudC5zY3NzXCJdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBaaW1nQ29tcG9uZW50IGltcGxlbWVudHMgWkNvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIGRhdGE6IFpGaWVsZDtcclxuICBASW5wdXQoKSBncm91cDogWkdyb3VwO1xyXG4gIEBJbnB1dCgpIGZvcm06IEZvcm1Hcm91cDtcclxuICBpbWdXaWR0aDogc3RyaW5nID0gbnVsbDtcclxuICBpbWdIZWlnaHQ6IHN0cmluZyA9IG51bGw7XHJcbiAgaW1nU3JjOiBzdHJpbmcgPSBudWxsO1xyXG4gIHJhbmRvbU51bWJlciA9IE1hdGgucmFuZG9tKCk7XHJcbiAgY29tcG9uZW50UHJvcGVydGllcyA9IG5ldyBaQ29tcG9uZW50UHJvcGVydGllcygpO1xyXG4gIC8vIGltZ1NvdXJjZUF2YWlsYWJsZSA9IGZhbHNlO1xyXG4gIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBHdWlkO1xyXG4gIEZpbGVOYW1lO1xyXG4gIEltYWdlOnN0cmluZztcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF0dGFjaG1lbnRTZXJ2aWNlOiBBdHRhY2htZW50U2VydmljZSkgeyB9XHJcblxyXG4gIGFzeW5jIG5nT25Jbml0KCkge1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5zZXRDb21wb25lbnRQcm9wZXJ0aWVzKHRoaXMpO1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5yZWdpc3RlckNvbXBvbmVudCh0aGlzKTtcclxuICAgIGlmICh0aGlzLmRhdGEuU2l6ZSAmJiB0aGlzLmRhdGEuU2l6ZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoXCJ4XCIpICE9PSAtMSkge1xyXG4gICAgICBjb25zdCBpbWdTaXplID0gdGhpcy5kYXRhLlNpemUudG9Mb3dlckNhc2UoKS5zcGxpdChcInhcIik7XHJcbiAgICAgIHRoaXMuaW1nV2lkdGggPSBpbWdTaXplWzBdO1xyXG4gICAgICB0aGlzLmltZ0hlaWdodCA9IGltZ1NpemVbMV07XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5HdWlkID0gdGhpcy5nZXRHcm91cFZhbHVlKHRoaXMuZGF0YVsnR3VpZCddLCB0aGlzLmdyb3VwKTsvL3RoaXMuZGF0YVsnR3VpZCddOy8vdGhpcy5nZXRHcm91cFZhbHVlKHRoaXMuZGF0YVsnR3VpZCddLCB0aGlzLmdyb3VwKTtcclxuICAgIHRoaXMuRmlsZU5hbWUgPSAgIHRoaXMuZ2V0R3JvdXBWYWx1ZSh0aGlzLmRhdGFbJ0ZpbGVOYW1lJ10sIHRoaXMuZ3JvdXApOy8vdGhpcy5nZXRHcm91cFZhbHVlKHRoaXMuZGF0YVsnRmlsZU5hbWUnXSwgdGhpcy5ncm91cCk7XHJcblxyXG4gICAgaWYodGhpcy5HdWlkICE9IHVuZGVmaW5lZCAmJiAgdGhpcy5GaWxlTmFtZSAhPSB1bmRlZmluZWQpe1xyXG4gICAgICBsZXQgYmxvYmZpbGUgPSBhd2FpdCB0aGlzLmF0dGFjaG1lbnRTZXJ2aWNlLmdldEltYWdlQmxvYih0aGlzLkZpbGVOYW1lLCB0aGlzLkd1aWQpO1xyXG4gICAgICB0aGlzLkltYWdlPSBhd2FpdCB0aGlzLmF0dGFjaG1lbnRTZXJ2aWNlLmNvbnZlcnRCbG9iVG9CYXNlNjQoYmxvYmZpbGUpO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgICAvLyB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuZ3JvdXAuek1vZGVsJFxyXG4gICAgLy8gICAuYXNPYnNlcnZhYmxlKClcclxuICAgIC8vICAgLnN1YnNjcmliZSgoem1vZGVsOiBhbnkpID0+IHtcclxuICAgIC8vICAgICB0aGlzLm9uRGF0YVNvdXJjZUNoYW5nZSh6bW9kZWwpO1xyXG4gICAgLy8gICB9KTtcclxuICB9XHJcblxyXG5cclxuXHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkRhdGFTb3VyY2VDaGFuZ2UoKSB7XHJcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0R3JvdXBWYWx1ZSh0aGlzLmRhdGEuVmFsdWUsIHRoaXMuZ3JvdXApO1xyXG4gICAgY29uc3Qgc291cmNlVXJsID0gdGhpcy5nZXRHcm91cFZhbHVlKHRoaXMuZGF0YS5Tb3VyY2VVcmwsIHRoaXMuZ3JvdXApO1xyXG5cclxuICAgIGlmICh2YWx1ZSAmJiBzb3VyY2VVcmwpIHtcclxuICAgICAgLy8gdGhpcy5pbWdTcmMgPVxyXG4gICAgICAvLyB0aGlzLmltZ1NvdXJjZUF2YWlsYWJsZSA9IHRydWU7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgc291cmNlVXJsICtcclxuICAgICAgICBcIj9pZD1cIiArXHJcbiAgICAgICAgdmFsdWUgK1xyXG4gICAgICAgIFwiJnNpemU9XCIgK1xyXG4gICAgICAgIHRoaXMuZGF0YS5TaXplXHJcbiAgICAgICAgLy8gKyBcIiZyPVwiICsgdGhpcy5yYW5kb21OdW1iZXJcclxuICAgICAgKTtcclxuICAgICAgLy8gY29uc29sZS5sb2coXCJpbWFnZSBzb3VyY2U6IFwiLCB0aGlzLmltZ1NyYyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyB0aGlzLmltZ1NvdXJjZUF2YWlsYWJsZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0R3JvdXBWYWx1ZSh2YWx1ZTogc3RyaW5nLCBncm91cDogYW55KSB7XHJcbiAgICByZXR1cm4gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKHZhbHVlLCBncm91cCk7XHJcbiAgfVxyXG5cclxuICAvLyBnZXRWYWx1ZShkYXRhOiBzdHJpbmcpIHtcclxuICAvLyAgIGxldCBnQXJyYXk6IEFycmF5PHN0cmluZz47XHJcbiAgLy8gICBpZiAoZGF0YSkge1xyXG4gIC8vICAgICBnQXJyYXkgPSBkYXRhLnNwbGl0KFwiLlwiKTtcclxuXHJcbiAgLy8gICAgIGlmIChnQXJyYXkubGVuZ3RoID09PSAzICYmIGRhdGEuc3RhcnRzV2l0aChcImdyb3VwLnpNb2RlbFwiKSkge1xyXG4gIC8vICAgICAgIHJldHVybiB0aGlzLmdyb3VwLnpNb2RlbFtnQXJyYXlbMl1dO1xyXG4gIC8vICAgICB9IGVsc2UgaWYgKGdBcnJheS5sZW5ndGggPT09IDIgJiYgZGF0YS5zdGFydHNXaXRoKFwiZ3JvdXAuXCIpKSB7XHJcbiAgLy8gICAgICAgcmV0dXJuIHRoaXMuZ3JvdXBbZ0FycmF5WzFdXTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG4gIC8vICAgcmV0dXJuIG51bGw7XHJcbiAgLy8gfVxyXG5cclxuICBnZXRJbWdTdHlsZSgpOiBhbnkgeyB9XHJcblxyXG4gIG9uSWNvbkNsaWNrKCkge1xyXG4gICAgY29uc3QgaWNvbkNsaWNrID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIHRoaXMuZGF0YS5Pbkl0ZW1DbGljaywgdGhpcy5ncm91cCk7XHJcbiAgICBpZiAodHlwZW9mIGljb25DbGljayA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICByZXR1cm4gaWNvbkNsaWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFpY29uQ2xpY2spIHtcclxuICAgICAgY29uc29sZS53YXJuKCdaSW1nIE9uSXRlbUNsaWNrIHByb3BlcnR5IGlzIGludmFsaWQ6ICcsIGljb25DbGljayk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIGljb25DbGljayAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ1pJbWcgT25JdGVtQ2xpY2sgcHJvcGVydHkgaXMgbm90IGEgZnVuY3Rpb246ICcsIGljb25DbGljayk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEljb25OYW1lKCkge1xyXG4gICAgY29uc3QgaWNvbk5hbWUgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5kYXRhLkljb24sIHRoaXMuZ3JvdXApO1xyXG4gICAgcmV0dXJuIGljb25OYW1lO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEVuYWJsZSA9IChzdGF0dXM6IGJvb2xlYW4pID0+IHtcclxuICAgIHRoaXMuY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5ID0gIXN0YXR1cztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRWaXNpYmxlID0gKHN0YXR1czogYm9vbGVhbikgPT4ge1xyXG4gICAgdGhpcy5jb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZSA9IHN0YXR1cztcclxuICAgIHRoaXMuZGF0YS5WaXNpYmxlID0gc3RhdHVzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFJlcXVpcmUgPSAoc3RhdHVzOiBib29sZWFuKSA9PiB7XHJcbiAgICB0aGlzLmNvbXBvbmVudFByb3BlcnRpZXMuaXNSZXF1aXJlZCA9IHN0YXR1cztcclxuICAgIFpDb21wb25lbnRIZWxwZXIuY2hhbmdlVmFsaWRhdG9yKHN0YXR1cywgdGhpcy5ncm91cCwgdGhpcy5kYXRhLlZhbHVlLCB0aGlzLmNvbXBvbmVudFByb3BlcnRpZXMsIFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,372 +0,0 @@
1
- /********** Angular **********/
2
- import { Component } from '@angular/core';
3
- import { ActivatedRoute, Router } from '@angular/router';
4
- import { delay, tap } from 'rxjs/operators';
5
- /********** Component & Service **********/
6
- import { AuthService, ResourceApiService, WebApiService, ZComponentHelper, ZGridStatePersistingService } from 'mmhglobal-zcore';
7
- export class ZkcardComponent {
8
- constructor(activatedRoute, resourceApiService, authService, zGridStatePersistingService, webapiService, router) {
9
- this.activatedRoute = activatedRoute;
10
- this.resourceApiService = resourceApiService;
11
- this.authService = authService;
12
- this.zGridStatePersistingService = zGridStatePersistingService;
13
- this.webapiService = webapiService;
14
- this.router = router;
15
- this.zgrid = null;
16
- this.scrollViewCards = { data: [], total: 0 };
17
- this.responseData = { data: [], total: 0 };
18
- this.params = {
19
- referId: null,
20
- pageNo: 0,
21
- pageSize: 20,
22
- sortColumnName: "",
23
- sortOrder: "",
24
- sortColumnNames: [],
25
- sortOrders: [],
26
- filterParams: [],
27
- parameters: "",
28
- filters: "",
29
- columns: "",
30
- grantType: 4
31
- };
32
- this.gridColumns = [];
33
- this.usableColumns = [];
34
- this.dataSource = null;
35
- this.state = {
36
- skip: 0,
37
- take: 10,
38
- };
39
- this.paginationApiPostUrl = null;
40
- this.resourceURL = null;
41
- this.filterItems = [];
42
- this.progressStyles = {
43
- color: '',
44
- background: 'green'
45
- };
46
- this.loadingPanelVisible = false;
47
- this.label = {
48
- visible: true,
49
- format: 'percent',
50
- position: 'center'
51
- };
52
- }
53
- ngOnInit() {
54
- ZComponentHelper.setComponentProperties(this);
55
- ZComponentHelper.registerComponent(this);
56
- this.dataSource = this.field.DataSource ? this.field.DataSource : null;
57
- this.filterItems = this.group['filterItems'];
58
- if (!this.dataSource) {
59
- this.resourceURL = ZComponentHelper.getGroupValue(this.field.ResourceURL, this.grp);
60
- // console.log("At zgrid.component (OnInit) resourceURL: ", resourceURL);
61
- if (!this.resourceURL) {
62
- // this.grid.loading = false;
63
- //if (this.zgridbinding.data.Name !== "ActivityLogGrid") {
64
- // console.warn(
65
- // "No initialise for Field.ResourceURL: ",
66
- // this.field.ResourceURL
67
- // );
68
- //}
69
- return;
70
- }
71
- const array = this.resourceURL.split("/api/");
72
- if (!!array[1]) {
73
- array[1] = "Page" + array[1];
74
- this.paginationApiPostUrl = array.join("/api/");
75
- }
76
- else {
77
- const arr = this.resourceURL.split("/");
78
- arr[arr.length - 2] = "Page" + arr[arr.length - 2];
79
- this.paginationApiPostUrl = arr.join("/");
80
- }
81
- this.setFilterParamsByParentRefId();
82
- }
83
- this.generateGridColumns();
84
- }
85
- ngOnDestroy() {
86
- if (this.subscription) {
87
- this.subscription.unsubscribe();
88
- }
89
- }
90
- getData() {
91
- if (this.zgrid) {
92
- this.zgrid.getDataBinding();
93
- }
94
- //if (this.data.SkipDirective) {
95
- // this.gridData = process(this.gData, this.state);
96
- // this.createFormControls();
97
- //}
98
- }
99
- generateGridColumns() {
100
- this.loadingPanelVisible = true;
101
- const columnFields$ = ZComponentHelper.getGroupValue(this.field.ColumnFields, this.grp);
102
- columnFields$
103
- .pipe(tap((data) => {
104
- const gridSetting = this.getGridSettings();
105
- const fieldName = this.field["FieldElementName"];
106
- ZComponentHelper.getGridColumns(data, this.gridColumns, this.group, this.authService, fieldName, gridSetting, this.usableColumns);
107
- this.getFilterParamsColumns();
108
- this.getFilter();
109
- //this.getSorting();
110
- //this.getGrantType();
111
- //this.setHiddenColumn(gridSetting);
112
- //this.params.referId = this.getFieldReferenceId() || this.grp.referenceId || null;
113
- }), tap(() => {
114
- this.getDataBinding();
115
- }))
116
- .subscribe(() => {
117
- });
118
- }
119
- getDataBinding() {
120
- var _a;
121
- if (!this.dataSource) {
122
- this.param.pageSize = (_a = this.field.PageSize) !== null && _a !== void 0 ? _a : 50;
123
- if (this.field.ExternalPagination) {
124
- // For POST method Page WebAPI
125
- this.webapiService
126
- .postApi(this.paginationApiPostUrl, this.param, null, null, null, null, true)
127
- .subscribe((data) => {
128
- delay(2500);
129
- this.responseData = { data: data.dataSet, total: data.totalCount };
130
- this.scrollViewCards = { data: data.dataSet, total: data.totalCount };
131
- if (data.dataSet.length > 0) {
132
- this.getRecordsSummary();
133
- }
134
- if (this.data.ResourceURLAlt) {
135
- this.getNewSurvey();
136
- }
137
- //this.aggregateHandling(data.dataSet);
138
- //this.grid.data = { data: data.dataSet, total: data.totalCount };
139
- //this.grid.loading = false;
140
- this.loadingPanelVisible = false;
141
- //this.notifyDataChange();
142
- });
143
- }
144
- else {
145
- // For GET method
146
- this.webapiService
147
- .getApi(this.resourceURL, null, null, null, null, null, true)
148
- .subscribe((data) => {
149
- let _data = null;
150
- let _totalCount = 0;
151
- if (data.dataSet) {
152
- _data = data.dataSet;
153
- _totalCount = data.totalCount;
154
- }
155
- else {
156
- _data = data;
157
- _totalCount = data.length;
158
- }
159
- this.loadingPanelVisible = false;
160
- //this.aggregateHandling(_data);
161
- //this.grid.data = { data: _data, total: _totalCount };
162
- //this.grid.pageSize = _totalCount;
163
- //this.grid.loading = false;
164
- //this.notifyDataChange();
165
- });
166
- }
167
- }
168
- else {
169
- const ds = ZComponentHelper.getGroupValue(this.field.DataSource, this.grp);
170
- }
171
- }
172
- getRecordsSummary() {
173
- let SurveyIds = [];
174
- this.responseData.data.forEach(value => {
175
- SurveyIds.push(value.Id);
176
- });
177
- this.webapiService
178
- .postApi(this.resourceApiService.getURL('ppsapsurveysummaryinfoURL'), SurveyIds, null, null, null, null, true)
179
- .subscribe(data => {
180
- this.responseData.data.forEach(value => {
181
- data.forEach(x => {
182
- if (x.SurveyId == value.Id) {
183
- value['value'] = Number.isNaN(((x.TotalTakenQuestions / x.TotalQuestions) * 100)) ? 0 : Math.round(((x.TotalTakenQuestions / x.TotalQuestions) * 100));
184
- // value['value'] = 100;
185
- }
186
- });
187
- });
188
- });
189
- }
190
- getNewSurvey() {
191
- var _a;
192
- let requestBody = {
193
- columns: "PartnerMillId,SurveyTemplateId,WFS_StatusCode,WFS_StatusName",
194
- pageSize: (_a = this.field.PageSize) !== null && _a !== void 0 ? _a : 50,
195
- };
196
- this.webapiService
197
- .postApi(this.resourceApiService.getPageUrl(this.data.ResourceURLAlt), requestBody, null, null, null, null, true)
198
- .subscribe((data) => {
199
- data.dataSet.forEach(value => {
200
- value['value'] = 0;
201
- this.scrollViewCards.data.push(value);
202
- this.scrollViewCards.total += 1;
203
- //data.forEach(x => {
204
- // if (x.SurveyId == value.Id) {
205
- // value['value'] = Number.isNaN(((x.TotalTakenQuestions / x.TotalQuestions) * 100)) ? 0 : Math.round(((x.TotalTakenQuestions / x.TotalQuestions) * 100));
206
- // }
207
- //})
208
- });
209
- });
210
- }
211
- get field() {
212
- return this.data;
213
- }
214
- get grp() {
215
- return this.group;
216
- }
217
- get param() {
218
- return this.params;
219
- }
220
- getGridSettings() {
221
- const _storageKey = 'ionic-field::' + this.authService.e1Token.userName;
222
- const _gridName = this.field.Name + '::' + this.field.Value;
223
- // Find any setting from localstorage..
224
- let _arrGridCaching = this.zGridStatePersistingService.get(_storageKey);
225
- if (_arrGridCaching && _arrGridCaching[0]) {
226
- const _gridCaching = _arrGridCaching.find(x => x['dataFormFields'] === _gridName);
227
- if (_gridCaching) {
228
- return _gridCaching.gridSettings.columnsConfig.sort((a, b) => a.orderIndex - b.orderIndex);
229
- }
230
- }
231
- }
232
- setFilterParamsByParentRefId() {
233
- // Use field own referenceId if available
234
- const refId = this.getFieldReferenceId() || this.grp.referenceId;
235
- const refField = this.field.ReferenceField || this.grp.parentReferenceField;
236
- if (refId && this.grp.parentReferenceField) {
237
- const filterValue = {
238
- key: refField,
239
- ops: "=",
240
- value: refId,
241
- };
242
- // if (this.params.filterParams.find(x => x.key === filterValue.key) === undefined) {
243
- this.params.filterParams.push(filterValue);
244
- // }
245
- }
246
- }
247
- getFieldReferenceId() {
248
- let fieldReferenceId = null;
249
- if (this.field.ReferenceId) {
250
- fieldReferenceId = ZComponentHelper.getGroupValue(this.field.ReferenceId, this.grp);
251
- }
252
- return fieldReferenceId;
253
- }
254
- getFilterParamsColumns() {
255
- const colFields = [];
256
- this.gridColumns.forEach((field) => {
257
- if (field.valueExpr) {
258
- colFields.push(field.valueExpr + " as " + field.field);
259
- }
260
- else {
261
- colFields.push(field.field);
262
- }
263
- });
264
- if (colFields.length > 0) {
265
- if (colFields.indexOf("Id") === -1) {
266
- colFields.push("Id");
267
- }
268
- }
269
- let tmpGridColumn = [];
270
- tmpGridColumn.push(colFields.join(","));
271
- if (this.usableColumns.length > 0) {
272
- tmpGridColumn.push(this.usableColumns.join(","));
273
- }
274
- this.params.columns = tmpGridColumn.join(",");
275
- }
276
- start(event) {
277
- this.group;
278
- this.group.isLoading = true;
279
- if (event.WFS_StatusName == 'New') {
280
- let param = {
281
- UserId: this.group['PSAPUSERID'],
282
- SurveyMillId: event.Id
283
- };
284
- this.webapiService
285
- .postApi(this.resourceApiService.getURL('ppsapsurveycreateURL'), param, null, null, null, null, true)
286
- .subscribe((data) => {
287
- this.group.isLoading = false;
288
- if (this.data.EditClickURL) {
289
- // TODO:
290
- // debugger;
291
- // this.router.navigate([this.data.EditClickURL, dataItem.Id]);
292
- const colFields = ZComponentHelper.getGroupValue(this.data.ColumnFields, this.group);
293
- this.group.subject.next({
294
- type: "zgrid-cellClick",
295
- target: this.data.EditClickURL,
296
- data: event,
297
- columnFields$: colFields
298
- });
299
- }
300
- else {
301
- this.router.navigate([this.group.editModelURL, data.Id, 'edit'], {
302
- relativeTo: this.activatedRoute
303
- });
304
- }
305
- });
306
- }
307
- else {
308
- this.group.isLoading = false;
309
- if (this.data.EditClickURL) {
310
- // TODO:
311
- // debugger;
312
- // this.router.navigate([this.data.EditClickURL, dataItem.Id]);
313
- const colFields = ZComponentHelper.getGroupValue(this.data.ColumnFields, this.group);
314
- this.group.subject.next({
315
- type: "zgrid-cellClick",
316
- target: this.data.EditClickURL,
317
- data: event,
318
- columnFields$: colFields
319
- });
320
- }
321
- else {
322
- this.router.navigate([this.group.editModelURL, event.Id, 'edit'], {
323
- relativeTo: this.activatedRoute
324
- });
325
- }
326
- }
327
- }
328
- getFontAwesome(iconName) {
329
- return ZComponentHelper.getFontAwesome(iconName);
330
- }
331
- getFilter() {
332
- if (this.params.filters && this.field.Filters) {
333
- this.params.filters = this.params.filters + " && " + this.field.Filters;
334
- }
335
- else if (!this.params.filters && this.field.Filters) {
336
- this.params.filters = this.field.Filters;
337
- }
338
- if (this.field.Filters && this.field.Filters.indexOf("group.") !== -1) {
339
- const filterKeyValPairs = this.field.Filters.split(" ");
340
- const grpValues = filterKeyValPairs.filter((element) => element.trim().indexOf("group.") !== -1);
341
- grpValues.forEach((val) => {
342
- const actualVal = ZComponentHelper.getGroupValue(val, this.grp);
343
- this.params.filters = this.params.filters.replace(val, actualVal);
344
- });
345
- }
346
- }
347
- valueChange(event) {
348
- if (event.length < 1) {
349
- this.scrollViewCards.data = this.responseData.data;
350
- this.scrollViewCards.total = this.responseData.total;
351
- return;
352
- }
353
- this.scrollViewCards.data = this.responseData.data.filter(x => event.includes(x.WFS_StatusName));
354
- this.scrollViewCards.total = this.responseData.data.filter(x => event.includes(x.WFS_StatusName)).length;
355
- }
356
- }
357
- ZkcardComponent.decorators = [
358
- { type: Component, args: [{
359
- selector: 'app-zkcard',
360
- template: "<!--<kendo-multiselect [data]=\"filterItems\" [value]=\"value\" [placeholder]=\"'Survey Status'\" [filterable]=\"true\"\r\n (valueChange)=\"valueChange($event)\"></kendo-multiselect>\r\n&nbsp;-->\r\n<div class=\"survey-card-list\">\r\n <div *ngFor=\"let card of scrollViewCards.data\">\r\n <!--<scrollview-card [card]=\"card\"></scrollview-card>-->\r\n <kendo-card class=\"custom-card-draft\" *ngIf=\"card.WFS_StatusName == 'Draft'\" [width]=\"'250px'\">\r\n <kendo-card-header class=\"k-hbox\">\r\n <div>\r\n <h1 kendoCardTitle>{{ card.SurveyTemplateName }}</h1>\r\n <p kendoCardSubtitle>Survey Doc No: {{card.DocumentNo}}</p>\r\n </div>\r\n </kendo-card-header>\r\n <kendo-card-body class=\"card-body\">\r\n Mill Name: {{card.PartnerMillName}}\r\n <br />\r\n Survey Status: {{card.WFS_StatusName}}\r\n </kendo-card-body>\r\n <kendo-card-footer>\r\n Survey Progression:\r\n <kendo-progressbar style=\"width: 210px; border-radius:10px\" [value]=\"card.value\" [label]=\"label\" [progressCssStyle]=\"progressStyles\">\r\n </kendo-progressbar>\r\n\r\n <kendo-card-actions class=\"k-hbox-actionBtn\" orientation=\"horizontal\" [layout]=\"'end'\">\r\n <button class=\"k-button k-navigation\"\r\n (click)=\"start(card)\">\r\n <div style=\"justify-content:space-between\">\r\n <span> Continue &nbsp;</span>\r\n <fa-icon [icon]=\"getFontAwesome('play')\"></fa-icon>\r\n </div>\r\n </button>\r\n </kendo-card-actions>\r\n </kendo-card-footer>\r\n </kendo-card>\r\n\r\n <kendo-card class=\"custom-card-submit\" *ngIf=\"card.WFS_StatusName == 'Submitted'\" [width]=\"'250px'\">\r\n <kendo-card-header class=\"k-hbox\">\r\n <div>\r\n <h1 kendoCardTitle>{{ card.SurveyTemplateName }}</h1>\r\n <p kendoCardSubtitle>Survey Doc No: {{card.DocumentNo}}</p>\r\n </div>\r\n </kendo-card-header>\r\n <kendo-card-body class=\"card-body\">\r\n Mill Name: {{card.PartnerMillName}}\r\n <br />\r\n Survey Status: {{card.WFS_StatusName}}\r\n </kendo-card-body>\r\n <kendo-card-footer>\r\n Survey Progression:\r\n <kendo-progressbar style=\"width: 210px; border-radius:10px\" [value]=\"card.value\" [label]=\"label\" [progressCssStyle]=\"progressStyles\">\r\n </kendo-progressbar>\r\n <kendo-card-actions class=\"k-hbox-actionBtn\" orientation=\"horizontal\" [layout]=\"'end'\">\r\n <button class=\"k-button k-navigation\"\r\n (click)=\"start(card)\">\r\n <div style=\"justify-content:space-between\">\r\n <span> View &nbsp;</span>\r\n <fa-icon [icon]=\"getFontAwesome('file-alt')\"></fa-icon>\r\n </div>\r\n </button>\r\n </kendo-card-actions>\r\n </kendo-card-footer>\r\n </kendo-card>\r\n\r\n <kendo-card class=\"custom-card-new\" *ngIf=\"card.WFS_StatusName == 'New'\" [width]=\"'250px'\">\r\n <kendo-card-header class=\"k-hbox\">\r\n <div>\r\n <h1 kendoCardTitle>{{ card.SurveyTemplateName }}</h1>\r\n <p kendoCardSubtitle>{{card.DocumentNo}}</p>\r\n </div>\r\n </kendo-card-header>\r\n <kendo-card-body class=\"card-body\">\r\n Mill Name: {{card.PartnerMillName}}\r\n <br />\r\n Survey Status: {{card.WFS_StatusName}}\r\n </kendo-card-body>\r\n <kendo-card-footer>\r\n Survey Progression: \r\n <kendo-progressbar style=\"width: 210px; border-radius:10px\" [value]=\"card.value\" [label]=\"label\" [progressCssStyle]=\"progressStyles\">\r\n </kendo-progressbar>\r\n <kendo-card-actions class=\"k-hbox-actionBtn\" orientation=\"horizontal\" [layout]=\"'end'\">\r\n <button class=\"k-button k-navigation\"\r\n (click)=\"start(card)\">\r\n <div style=\"justify-content:space-between\">\r\n <span> Start &nbsp;</span>\r\n <fa-icon [icon]=\"getFontAwesome('play')\"></fa-icon>\r\n </div>\r\n </button>\r\n </kendo-card-actions>\r\n </kendo-card-footer>\r\n </kendo-card>\r\n </div>\r\n</div>\r\n",
361
- styles: [".survey-card-list{display:flex;flex-wrap:wrap;background-color:#f0dcd9;align-items:center;border-radius:10px}.custom-card-submit{margin:20px;border:3px solid green;border-radius:15px}.custom-card-draft,.custom-card-new{margin:20px;border:3px solid orange;border-radius:15px}"]
362
- },] }
363
- ];
364
- ZkcardComponent.ctorParameters = () => [
365
- { type: ActivatedRoute },
366
- { type: ResourceApiService },
367
- { type: AuthService },
368
- { type: ZGridStatePersistingService },
369
- { type: WebApiService },
370
- { type: Router }
371
- ];
372
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemtjYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21taGdsb2JhbC1keW5hbWljZm9ybS9zcmMvbGliL3prY2FyZC96a2NhcmQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUU3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBTXpELE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJNUMsMkNBQTJDO0FBQzNDLE9BQU8sRUFDTCxXQUFXLEVBQWtCLGtCQUFrQixFQUFFLGFBQWEsRUFDbEQsZ0JBQWdCLEVBQzVCLDJCQUEyQixFQUM1QixNQUFNLGlCQUFpQixDQUFDO0FBUXpCLE1BQU0sT0FBTyxlQUFlO0lBRTFCLFlBQ1UsY0FBOEIsRUFDOUIsa0JBQXNDLEVBQ3RDLFdBQXdCLEVBQ3hCLDJCQUF3RCxFQUN4RCxhQUE0QixFQUM1QixNQUFjO1FBTGQsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsZ0NBQTJCLEdBQTNCLDJCQUEyQixDQUE2QjtRQUN4RCxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBTXhCLFVBQUssR0FBUSxJQUFJLENBQUM7UUFDbEIsb0JBQWUsR0FBUSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQzlDLGlCQUFZLEdBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUMzQyxXQUFNLEdBQXVCO1lBQzNCLE9BQU8s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UjtRQUNELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDakcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDM0csQ0FBQzs7O1lBL2JGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsWUFBWTtnQkFDdEIsd3VJQUFzQzs7YUFFdkM7OztZQXRCUSxjQUFjO1lBWVEsa0JBQWtCO1lBQS9DLFdBQVc7WUFFWCwyQkFBMkI7WUFGc0IsYUFBYTtZQVp2QyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKiogQW5ndWxhciAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG4vKioqKioqKioqKiBJb25pYyAqKioqKioqKioqL1xyXG5cclxuLyoqKioqKioqKiogUGx1Z2luICoqKioqKioqKiovXHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWxheSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBMYWJlbFNldHRpbmdzIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItcHJvZ3Jlc3NiYXInO1xyXG5pbXBvcnQgeyBTdGF0ZSB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1kYXRhLXF1ZXJ5JztcclxuXHJcbi8qKioqKioqKioqIENvbXBvbmVudCAmIFNlcnZpY2UgKioqKioqKioqKi9cclxuaW1wb3J0IHtcclxuICBBdXRoU2VydmljZSwgWkZpZWxkLCBaR3JvdXAsIFJlc291cmNlQXBpU2VydmljZSwgV2ViQXBpU2VydmljZSwgR3JpZENhY2hpbmcsXHJcbiAgWkNvbXBvbmVudCwgWkNvbXBvbmVudEhlbHBlciwgWkNvbXBvbmVudE91dHB1dEV2ZW50LFxyXG4gIFpHcmlkU3RhdGVQZXJzaXN0aW5nU2VydmljZSwgWkdyaWRDb2x1bW5TZXR0aW5ncywgWkdyaWRQb3N0QXBpUGFyYW1zXHJcbn0gZnJvbSAnbW1oZ2xvYmFsLXpjb3JlJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC16a2NhcmQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi96a2NhcmQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3prY2FyZC5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgWmtjYXJkQ29tcG9uZW50IGltcGxlbWVudHMgWkNvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSByZXNvdXJjZUFwaVNlcnZpY2U6IFJlc291cmNlQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB6R3JpZFN0YXRlUGVyc2lzdGluZ1NlcnZpY2U6IFpHcmlkU3RhdGVQZXJzaXN0aW5nU2VydmljZSxcclxuICAgIHByaXZhdGUgd2ViYXBpU2VydmljZTogV2ViQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgKSB7IH1cclxuXHJcbiAgZGF0YTogWkZpZWxkO1xyXG4gIGdyb3VwOiBaR3JvdXA7XHJcbiAgZm9ybTogRm9ybUdyb3VwO1xyXG4gIHpncmlkOiBhbnkgPSBudWxsO1xyXG4gIHNjcm9sbFZpZXdDYXJkczogYW55ID0geyBkYXRhOiBbXSwgdG90YWw6IDAgfTtcclxuICByZXNwb25zZURhdGE6IGFueSA9IHsgZGF0YTogW10sIHRvdGFsOiAwIH07XHJcbiAgcGFyYW1zOiBaR3JpZFBvc3RBcGlQYXJhbXMgPSB7XHJcbiAgICByZWZlcklkOiBudWxsLFxyXG4gICAgcGFnZU5vOiAwLFxyXG4gICAgcGFnZVNpemU6IDIwLFxyXG4gICAgc29ydENvbHVtbk5hbWU6IFwiXCIsXHJcbiAgICBzb3J0T3JkZXI6IFwiXCIsXHJcbiAgICBzb3J0Q29sdW1uTmFtZXM6IFtdLFxyXG4gICAgc29ydE9yZGVyczogW10sXHJcbiAgICBmaWx0ZXJQYXJhbXM6IFtdLFxyXG4gICAgcGFyYW1ldGVyczogXCJcIixcclxuICAgIGZpbHRlcnM6IFwiXCIsXHJcbiAgICBjb2x1bW5zOiBcIlwiLFxyXG4gICAgZ3JhbnRUeXBlOiA0XHJcbiAgfTtcclxuICAvL2dyaWREYXRhOiBHcmlkRGF0YVJlc3VsdDtcclxuICBjb2x1bW5zOiBhbnlbXTtcclxuICBncmlkQ29sdW1uczogYW55W10gPSBbXTtcclxuICB1c2FibGVDb2x1bW5zOiBhbnlbXSA9IFtdO1xyXG4gIGRhdGFTb3VyY2UgPSBudWxsO1xyXG4gIHN0YXRlOiBTdGF0ZSA9IHtcclxuICAgIHNraXA6IDAsXHJcbiAgICB0YWtlOiAxMCxcclxuICB9O1xyXG4gIHBhZ2luYXRpb25BcGlQb3N0VXJsID0gbnVsbDtcclxuICByZXNvdXJjZVVSTCA9IG51bGw7XHJcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgcHVibGljIGZpbHRlckl0ZW1zOiBBcnJheTxzdHJpbmc+ID0gW107XHJcbiAgcHVibGljIHByb2dyZXNzU3R5bGVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge1xyXG4gICAgY29sb3I6ICcnLFxyXG4gICAgYmFja2dyb3VuZDogJ2dyZWVuJ1xyXG4gIH07XHJcbiAgcHVibGljIGxvYWRpbmdQYW5lbFZpc2libGUgPSBmYWxzZTtcclxuXHJcblxyXG4gIHB1YmxpYyBsYWJlbDogTGFiZWxTZXR0aW5ncyA9IHtcclxuICAgIHZpc2libGU6IHRydWUsXHJcbiAgICBmb3JtYXQ6ICdwZXJjZW50JyxcclxuICAgIHBvc2l0aW9uOiAnY2VudGVyJ1xyXG4gIH07XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5zZXRDb21wb25lbnRQcm9wZXJ0aWVzKHRoaXMpO1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5yZWdpc3RlckNvbXBvbmVudCh0aGlzKTtcclxuXHJcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSB0aGlzLmZpZWxkLkRhdGFTb3VyY2UgPyB0aGlzLmZpZWxkLkRhdGFTb3VyY2UgOiBudWxsO1xyXG4gICAgdGhpcy5maWx0ZXJJdGVtcyA9IHRoaXMuZ3JvdXBbJ2ZpbHRlckl0ZW1zJ107XHJcbiAgICBpZiAoIXRoaXMuZGF0YVNvdXJjZSkge1xyXG4gICAgICB0aGlzLnJlc291cmNlVVJMID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKFxyXG4gICAgICAgIHRoaXMuZmllbGQuUmVzb3VyY2VVUkwsXHJcbiAgICAgICAgdGhpcy5ncnBcclxuICAgICAgKTtcclxuICAgICAgLy8gY29uc29sZS5sb2coXCJBdCB6Z3JpZC5jb21wb25lbnQgKE9uSW5pdCkgcmVzb3VyY2VVUkw6IFwiLCByZXNvdXJjZVVSTCk7XHJcbiAgICAgIGlmICghdGhpcy5yZXNvdXJjZVVSTCkge1xyXG4gICAgICAgIC8vIHRoaXMuZ3JpZC5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgLy9pZiAodGhpcy56Z3JpZGJpbmRpbmcuZGF0YS5OYW1lICE9PSBcIkFjdGl2aXR5TG9nR3JpZFwiKSB7XHJcbiAgICAgICAgLy8gIGNvbnNvbGUud2FybihcclxuICAgICAgICAvLyAgICBcIk5vIGluaXRpYWxpc2UgZm9yIEZpZWxkLlJlc291cmNlVVJMOiBcIixcclxuICAgICAgICAvLyAgICB0aGlzLmZpZWxkLlJlc291cmNlVVJMXHJcbiAgICAgICAgLy8gICk7XHJcbiAgICAgICAgLy99XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBhcnJheSA9IHRoaXMucmVzb3VyY2VVUkwuc3BsaXQoXCIvYXBpL1wiKTtcclxuICAgICAgaWYgKCEhYXJyYXlbMV0pIHtcclxuICAgICAgICBhcnJheVsxXSA9IFwiUGFnZVwiICsgYXJyYXlbMV07XHJcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uQXBpUG9zdFVybCA9IGFycmF5LmpvaW4oXCIvYXBpL1wiKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBhcnIgPSB0aGlzLnJlc291cmNlVVJMLnNwbGl0KFwiL1wiKTtcclxuICAgICAgICBhcnJbYXJyLmxlbmd0aCAtIDJdID0gXCJQYWdlXCIgKyBhcnJbYXJyLmxlbmd0aCAtIDJdO1xyXG4gICAgICAgIHRoaXMucGFnaW5hdGlvbkFwaVBvc3RVcmwgPSBhcnIuam9pbihcIi9cIik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2V0RmlsdGVyUGFyYW1zQnlQYXJlbnRSZWZJZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZ2VuZXJhdGVHcmlkQ29sdW1ucygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldERhdGEoKSB7XHJcbiAgICBpZiAodGhpcy56Z3JpZCkge1xyXG4gICAgICB0aGlzLnpncmlkLmdldERhdGFCaW5kaW5nKCk7XHJcbiAgICB9XHJcbiAgICAvL2lmICh0aGlzLmRhdGEuU2tpcERpcmVjdGl2ZSkge1xyXG4gICAgLy8gIHRoaXMuZ3JpZERhdGEgPSBwcm9jZXNzKHRoaXMuZ0RhdGEsIHRoaXMuc3RhdGUpO1xyXG4gICAgLy8gIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2xzKCk7XHJcbiAgICAvL31cclxuICB9XHJcblxyXG4gIGdlbmVyYXRlR3JpZENvbHVtbnMoKSB7XHJcbiAgICB0aGlzLmxvYWRpbmdQYW5lbFZpc2libGUgPSB0cnVlO1xyXG4gICAgY29uc3QgY29sdW1uRmllbGRzJDogT2JzZXJ2YWJsZTxhbnk+ID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKFxyXG4gICAgICB0aGlzLmZpZWxkLkNvbHVtbkZpZWxkcyxcclxuICAgICAgdGhpcy5ncnBcclxuICAgICk7XHJcbiAgICBjb2x1bW5GaWVsZHMkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRhcCgoZGF0YSkgPT4ge1xyXG5cclxuICAgICAgICAgIGNvbnN0IGdyaWRTZXR0aW5nID0gdGhpcy5nZXRHcmlkU2V0dGluZ3MoKTtcclxuICAgICAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IHRoaXMuZmllbGRbXCJGaWVsZEVsZW1lbnROYW1lXCJdO1xyXG4gICAgICAgICAgWkNvbXBvbmVudEhlbHBlci5nZXRHcmlkQ29sdW1ucyhcclxuICAgICAgICAgICAgZGF0YSxcclxuICAgICAgICAgICAgdGhpcy5ncmlkQ29sdW1ucyxcclxuICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgdGhpcy5hdXRoU2VydmljZSxcclxuICAgICAgICAgICAgZmllbGROYW1lLFxyXG4gICAgICAgICAgICBncmlkU2V0dGluZyxcclxuICAgICAgICAgICAgdGhpcy51c2FibGVDb2x1bW5zXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5nZXRGaWx0ZXJQYXJhbXNDb2x1bW5zKCk7XHJcbiAgICAgICAgICB0aGlzLmdldEZpbHRlcigpO1xyXG4gICAgICAgICAgLy90aGlzLmdldFNvcnRpbmcoKTtcclxuICAgICAgICAgIC8vdGhpcy5nZXRHcmFudFR5cGUoKTtcclxuICAgICAgICAgIC8vdGhpcy5zZXRIaWRkZW5Db2x1bW4oZ3JpZFNldHRpbmcpO1xyXG4gICAgICAgICAgLy90aGlzLnBhcmFtcy5yZWZlcklkID0gdGhpcy5nZXRGaWVsZFJlZmVyZW5jZUlkKCkgfHwgdGhpcy5ncnAucmVmZXJlbmNlSWQgfHwgbnVsbDtcclxuICAgICAgICB9KSxcclxuICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5nZXREYXRhQmluZGluZygpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGF0YUJpbmRpbmcoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZGF0YVNvdXJjZSkge1xyXG4gICAgICB0aGlzLnBhcmFtLnBhZ2VTaXplID0gdGhpcy5maWVsZC5QYWdlU2l6ZSA/PyA1MDtcclxuICAgICAgaWYgKHRoaXMuZmllbGQuRXh0ZXJuYWxQYWdpbmF0aW9uKSB7XHJcbiAgICAgICAgLy8gRm9yIFBPU1QgbWV0aG9kIFBhZ2UgV2ViQVBJXHJcbiAgICAgICAgdGhpcy53ZWJhcGlTZXJ2aWNlXHJcbiAgICAgICAgICAucG9zdEFwaShcclxuICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uQXBpUG9zdFVybCxcclxuICAgICAgICAgICAgdGhpcy5wYXJhbSxcclxuICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBkZWxheSgyNTAwKVxyXG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNlRGF0YSA9IHsgZGF0YTogZGF0YS5kYXRhU2V0LCB0b3RhbDogZGF0YS50b3RhbENvdW50IH07XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVmlld0NhcmRzID0geyBkYXRhOiBkYXRhLmRhdGFTZXQsIHRvdGFsOiBkYXRhLnRvdGFsQ291bnQgfTtcclxuICAgICAgICAgICAgaWYgKGRhdGEuZGF0YVNldC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRSZWNvcmRzU3VtbWFyeSgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhLlJlc291cmNlVVJMQWx0KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXROZXdTdXJ2ZXkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL3RoaXMuYWdncmVnYXRlSGFuZGxpbmcoZGF0YS5kYXRhU2V0KTtcclxuICAgICAgICAgICAgLy90aGlzLmdyaWQuZGF0YSA9IHsgZGF0YTogZGF0YS5kYXRhU2V0LCB0b3RhbDogZGF0YS50b3RhbENvdW50IH07XHJcbiAgICAgICAgICAgIC8vdGhpcy5ncmlkLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nUGFuZWxWaXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIC8vdGhpcy5ub3RpZnlEYXRhQ2hhbmdlKCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBGb3IgR0VUIG1ldGhvZFxyXG4gICAgICAgIHRoaXMud2ViYXBpU2VydmljZVxyXG4gICAgICAgICAgLmdldEFwaSh0aGlzLnJlc291cmNlVVJMLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCB0cnVlKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgX2RhdGEgPSBudWxsO1xyXG4gICAgICAgICAgICBsZXQgX3RvdGFsQ291bnQgPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYgKGRhdGEuZGF0YVNldCkge1xyXG4gICAgICAgICAgICAgIF9kYXRhID0gZGF0YS5kYXRhU2V0O1xyXG4gICAgICAgICAgICAgIF90b3RhbENvdW50ID0gZGF0YS50b3RhbENvdW50O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIF9kYXRhID0gZGF0YTtcclxuICAgICAgICAgICAgICBfdG90YWxDb3VudCA9IGRhdGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1BhbmVsVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvL3RoaXMuYWdncmVnYXRlSGFuZGxpbmcoX2RhdGEpO1xyXG4gICAgICAgICAgICAvL3RoaXMuZ3JpZC5kYXRhID0geyBkYXRhOiBfZGF0YSwgdG90YWw6IF90b3RhbENvdW50IH07XHJcbiAgICAgICAgICAgIC8vdGhpcy5ncmlkLnBhZ2VTaXplID0gX3RvdGFsQ291bnQ7XHJcbiAgICAgICAgICAgIC8vdGhpcy5ncmlkLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgLy90aGlzLm5vdGlmeURhdGFDaGFuZ2UoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBkcyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZShcclxuICAgICAgICB0aGlzLmZpZWxkLkRhdGFTb3VyY2UsXHJcbiAgICAgICAgdGhpcy5ncnBcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFJlY29yZHNTdW1tYXJ5KCkge1xyXG4gICAgbGV0IFN1cnZleUlkcyA9IFtdO1xyXG5cclxuICAgIHRoaXMucmVzcG9uc2VEYXRhLmRhdGEuZm9yRWFjaCh2YWx1ZSA9PiB7XHJcbiAgICAgIFN1cnZleUlkcy5wdXNoKHZhbHVlLklkKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMud2ViYXBpU2VydmljZVxyXG4gICAgICAucG9zdEFwaShcclxuICAgICAgICB0aGlzLnJlc291cmNlQXBpU2VydmljZS5nZXRVUkwoJ3Bwc2Fwc3VydmV5c3VtbWFyeWluZm9VUkwnKSxcclxuICAgICAgICBTdXJ2ZXlJZHMsXHJcbiAgICAgICAgbnVsbCxcclxuICAgICAgICBudWxsLFxyXG4gICAgICAgIG51bGwsXHJcbiAgICAgICAgbnVsbCxcclxuICAgICAgICB0cnVlXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICB0aGlzLnJlc3BvbnNlRGF0YS5kYXRhLmZvckVhY2godmFsdWUgPT4ge1xyXG4gICAgICAgICAgZGF0YS5mb3JFYWNoKHggPT4ge1xyXG4gICAgICAgICAgICBpZiAoeC5TdXJ2ZXlJZCA9PSB2YWx1ZS5JZCkge1xyXG4gICAgICAgICAgICAgIHZhbHVlWyd2YWx1ZSddID0gTnVtYmVyLmlzTmFOKCgoeC5Ub3RhbFRha2VuUXVlc3Rpb25zIC8geC5Ub3RhbFF1ZXN0aW9ucykgKiAxMDApKSA/IDAgOiBNYXRoLnJvdW5kKCgoeC5Ub3RhbFRha2VuUXVlc3Rpb25zIC8geC5Ub3RhbFF1ZXN0aW9ucykgKiAxMDApKTtcclxuICAgICAgICAgICAgICAvLyB2YWx1ZVsndmFsdWUnXSA9IDEwMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIGdldE5ld1N1cnZleSgpIHtcclxuICAgIGxldCByZXF1ZXN0Qm9keSA9IHtcclxuICAgICAgY29sdW1uczogXCJQYXJ0bmVyTWlsbElkLFN1cnZleVRlbXBsYXRlSWQsV0ZTX1N0YXR1c0NvZGUsV0ZTX1N0YXR1c05hbWVcIixcclxuICAgICAgcGFnZVNpemU6IHRoaXMuZmllbGQuUGFnZVNpemUgPz8gNTAsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMud2ViYXBpU2VydmljZVxyXG4gICAgICAucG9zdEFwaShcclxuICAgICAgICB0aGlzLnJlc291cmNlQXBpU2VydmljZS5nZXRQYWdlVXJsKHRoaXMuZGF0YS5SZXNvdXJjZVVSTEFsdCksXHJcbiAgICAgICAgcmVxdWVzdEJvZHksXHJcbiAgICAgICAgbnVsbCxcclxuICAgICAgICBudWxsLFxyXG4gICAgICAgIG51bGwsXHJcbiAgICAgICAgbnVsbCxcclxuICAgICAgICB0cnVlXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xyXG4gICAgICAgIGRhdGEuZGF0YVNldC5mb3JFYWNoKHZhbHVlID0+IHtcclxuICAgICAgICAgIHZhbHVlWyd2YWx1ZSddID0gMDtcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsVmlld0NhcmRzLmRhdGEucHVzaCh2YWx1ZSk7XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbFZpZXdDYXJkcy50b3RhbCArPSAxO1xyXG5cclxuICAgICAgICAgIC8vZGF0YS5mb3JFYWNoKHggPT4ge1xyXG4gICAgICAgICAgLy8gIGlmICh4LlN1cnZleUlkID09IHZhbHVlLklkKSB7XHJcbiAgICAgICAgICAvLyAgICB2YWx1ZVsndmFsdWUnXSA9IE51bWJlci5pc05hTigoKHguVG90YWxUYWtlblF1ZXN0aW9ucyAvIHguVG90YWxRdWVzdGlvbnMpICogMTAwKSkgPyAwIDogTWF0aC5yb3VuZCgoKHguVG90YWxUYWtlblF1ZXN0aW9ucyAvIHguVG90YWxRdWVzdGlvbnMpICogMTAwKSk7XHJcbiAgICAgICAgICAvLyAgfVxyXG4gICAgICAgICAgLy99KVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGZpZWxkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YTtcclxuICB9XHJcblxyXG4gIGdldCBncnAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5ncm91cDtcclxuICB9XHJcblxyXG4gIGdldCBwYXJhbSgpOiBaR3JpZFBvc3RBcGlQYXJhbXMge1xyXG4gICAgcmV0dXJuIHRoaXMucGFyYW1zO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRHcmlkU2V0dGluZ3MoKTogWkdyaWRDb2x1bW5TZXR0aW5nc1tdIHtcclxuICAgIGNvbnN0IF9zdG9yYWdlS2V5ID0gJ2lvbmljLWZpZWxkOjonICsgdGhpcy5hdXRoU2VydmljZS5lMVRva2VuLnVzZXJOYW1lO1xyXG4gICAgY29uc3QgX2dyaWROYW1lID0gdGhpcy5maWVsZC5OYW1lICsgJzo6JyArIHRoaXMuZmllbGQuVmFsdWU7XHJcblxyXG4gICAgLy8gRmluZCBhbnkgc2V0dGluZyBmcm9tIGxvY2Fsc3RvcmFnZS4uXHJcbiAgICBsZXQgX2FyckdyaWRDYWNoaW5nOiBHcmlkQ2FjaGluZ1tdID0gdGhpcy56R3JpZFN0YXRlUGVyc2lzdGluZ1NlcnZpY2UuZ2V0KF9zdG9yYWdlS2V5KTtcclxuICAgIGlmIChfYXJyR3JpZENhY2hpbmcgJiYgX2FyckdyaWRDYWNoaW5nWzBdKSB7XHJcbiAgICAgIGNvbnN0IF9ncmlkQ2FjaGluZzogR3JpZENhY2hpbmcgPSBfYXJyR3JpZENhY2hpbmcuZmluZCh4ID0+IHhbJ2RhdGFGb3JtRmllbGRzJ10gPT09IF9ncmlkTmFtZSk7XHJcblxyXG4gICAgICBpZiAoX2dyaWRDYWNoaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIF9ncmlkQ2FjaGluZy5ncmlkU2V0dGluZ3MuY29sdW1uc0NvbmZpZy5zb3J0KChhLCBiKSA9PiBhLm9yZGVySW5kZXggLSBiLm9yZGVySW5kZXgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEZpbHRlclBhcmFtc0J5UGFyZW50UmVmSWQoKSB7XHJcbiAgICAvLyBVc2UgZmllbGQgb3duIHJlZmVyZW5jZUlkIGlmIGF2YWlsYWJsZVxyXG4gICAgY29uc3QgcmVmSWQgPSB0aGlzLmdldEZpZWxkUmVmZXJlbmNlSWQoKSB8fCB0aGlzLmdycC5yZWZlcmVuY2VJZDtcclxuICAgIGNvbnN0IHJlZkZpZWxkID0gdGhpcy5maWVsZC5SZWZlcmVuY2VGaWVsZCB8fCB0aGlzLmdycC5wYXJlbnRSZWZlcmVuY2VGaWVsZDtcclxuICAgIGlmIChyZWZJZCAmJiB0aGlzLmdycC5wYXJlbnRSZWZlcmVuY2VGaWVsZCkge1xyXG4gICAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IHtcclxuICAgICAgICBrZXk6IHJlZkZpZWxkLFxyXG4gICAgICAgIG9wczogXCI9XCIsXHJcbiAgICAgICAgdmFsdWU6IHJlZklkLFxyXG4gICAgICB9O1xyXG4gICAgICAvLyBpZiAodGhpcy5wYXJhbXMuZmlsdGVyUGFyYW1zLmZpbmQoeCA9PiB4LmtleSA9PT0gZmlsdGVyVmFsdWUua2V5KSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMucGFyYW1zLmZpbHRlclBhcmFtcy5wdXNoKGZpbHRlclZhbHVlKTtcclxuICAgICAgLy8gfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRGaWVsZFJlZmVyZW5jZUlkKCkge1xyXG4gICAgbGV0IGZpZWxkUmVmZXJlbmNlSWQgPSBudWxsO1xyXG4gICAgaWYgKHRoaXMuZmllbGQuUmVmZXJlbmNlSWQpIHtcclxuICAgICAgZmllbGRSZWZlcmVuY2VJZCA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZShcclxuICAgICAgICB0aGlzLmZpZWxkLlJlZmVyZW5jZUlkLFxyXG4gICAgICAgIHRoaXMuZ3JwXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmllbGRSZWZlcmVuY2VJZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RmlsdGVyUGFyYW1zQ29sdW1ucygpIHtcclxuICAgIGNvbnN0IGNvbEZpZWxkczogQXJyYXk8c3RyaW5nPiA9IFtdO1xyXG4gICAgdGhpcy5ncmlkQ29sdW1ucy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICBpZiAoZmllbGQudmFsdWVFeHByKSB7XHJcbiAgICAgICAgY29sRmllbGRzLnB1c2goZmllbGQudmFsdWVFeHByICsgXCIgYXMgXCIgKyBmaWVsZC5maWVsZCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29sRmllbGRzLnB1c2goZmllbGQuZmllbGQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoY29sRmllbGRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgaWYgKGNvbEZpZWxkcy5pbmRleE9mKFwiSWRcIikgPT09IC0xKSB7XHJcbiAgICAgICAgY29sRmllbGRzLnB1c2goXCJJZFwiKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCB0bXBHcmlkQ29sdW1uOiBhbnlbXSA9IFtdO1xyXG4gICAgdG1wR3JpZENvbHVtbi5wdXNoKGNvbEZpZWxkcy5qb2luKFwiLFwiKSk7XHJcbiAgICBpZiAodGhpcy51c2FibGVDb2x1bW5zLmxlbmd0aCA+IDApIHtcclxuICAgICAgdG1wR3JpZENvbHVtbi5wdXNoKHRoaXMudXNhYmxlQ29sdW1ucy5qb2luKFwiLFwiKSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnBhcmFtcy5jb2x1bW5zID0gdG1wR3JpZENvbHVtbi5qb2luKFwiLFwiKTtcclxuICB9XHJcblxyXG4gIHN0YXJ0KGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuZ3JvdXA7XHJcbiAgICB0aGlzLmdyb3VwLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICBpZiAoZXZlbnQuV0ZTX1N0YXR1c05hbWUgPT0gJ05ldycpIHtcclxuICAgICAgbGV0IHBhcmFtID0ge1xyXG4gICAgICAgIFVzZXJJZDogdGhpcy5ncm91cFsnUFNBUFVTRVJJRCddLFxyXG4gICAgICAgIFN1cnZleU1pbGxJZDogZXZlbnQuSWRcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy53ZWJhcGlTZXJ2aWNlXHJcbiAgICAgICAgLnBvc3RBcGkoXHJcbiAgICAgICAgICB0aGlzLnJlc291cmNlQXBpU2VydmljZS5nZXRVUkwoJ3Bwc2Fwc3VydmV5Y3JlYXRlVVJMJyksXHJcbiAgICAgICAgICBwYXJhbSxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICB0cnVlXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgICAgIHRoaXMuZ3JvdXAuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAodGhpcy5kYXRhLkVkaXRDbGlja1VSTCkge1xyXG4gICAgICAgICAgICAvLyBUT0RPOlxyXG4gICAgICAgICAgICAvLyBkZWJ1Z2dlcjtcclxuICAgICAgICAgICAgLy8gdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMuZGF0YS5FZGl0Q2xpY2tVUkwsIGRhdGFJdGVtLklkXSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbEZpZWxkcyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZSh0aGlzLmRhdGEuQ29sdW1uRmllbGRzLCB0aGlzLmdyb3VwKTtcclxuICAgICAgICAgICAgdGhpcy5ncm91cC5zdWJqZWN0Lm5leHQoe1xyXG4gICAgICAgICAgICAgIHR5cGU6IFwiemdyaWQtY2VsbENsaWNrXCIsXHJcbiAgICAgICAgICAgICAgdGFyZ2V0OiB0aGlzLmRhdGEuRWRpdENsaWNrVVJMLFxyXG4gICAgICAgICAgICAgIGRhdGE6IGV2ZW50LFxyXG4gICAgICAgICAgICAgIGNvbHVtbkZpZWxkcyQ6IGNvbEZpZWxkc1xyXG4gICAgICAgICAgICB9IGFzIFpDb21wb25lbnRPdXRwdXRFdmVudCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5ncm91cC5lZGl0TW9kZWxVUkwsIGRhdGEuSWQsICdlZGl0J10sIHtcclxuICAgICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2YXRlZFJvdXRlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmdyb3VwLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICBpZiAodGhpcy5kYXRhLkVkaXRDbGlja1VSTCkge1xyXG4gICAgICAgIC8vIFRPRE86XHJcbiAgICAgICAgLy8gZGVidWdnZXI7XHJcbiAgICAgICAgLy8gdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMuZGF0YS5FZGl0Q2xpY2tVUkwsIGRhdGFJdGVtLklkXSk7XHJcbiAgICAgICAgY29uc3QgY29sRmllbGRzID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKHRoaXMuZGF0YS5Db2x1bW5GaWVsZHMsIHRoaXMuZ3JvdXApO1xyXG4gICAgICAgIHRoaXMuZ3JvdXAuc3ViamVjdC5uZXh0KHtcclxuICAgICAgICAgIHR5cGU6IFwiemdyaWQtY2VsbENsaWNrXCIsXHJcbiAgICAgICAgICB0YXJnZXQ6IHRoaXMuZGF0YS5FZGl0Q2xpY2tVUkwsXHJcbiAgICAgICAgICBkYXRhOiBldmVudCxcclxuICAgICAgICAgIGNvbHVtbkZpZWxkcyQ6IGNvbEZpZWxkc1xyXG4gICAgICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5ncm91cC5lZGl0TW9kZWxVUkwsIGV2ZW50LklkLCAnZWRpdCddLCB7XHJcbiAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2YXRlZFJvdXRlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEZvbnRBd2Vzb21lKGljb25OYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBaQ29tcG9uZW50SGVscGVyLmdldEZvbnRBd2Vzb21lKGljb25OYW1lKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RmlsdGVyKCkge1xyXG4gICAgaWYgKHRoaXMucGFyYW1zLmZpbHRlcnMgJiYgdGhpcy5maWVsZC5GaWx0ZXJzKSB7XHJcbiAgICAgIHRoaXMucGFyYW1zLmZpbHRlcnMgPSB0aGlzLnBhcmFtcy5maWx0ZXJzICsgXCIgJiYgXCIgKyB0aGlzLmZpZWxkLkZpbHRlcnM7XHJcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnBhcmFtcy5maWx0ZXJzICYmIHRoaXMuZmllbGQuRmlsdGVycykge1xyXG4gICAgICB0aGlzLnBhcmFtcy5maWx0ZXJzID0gdGhpcy5maWVsZC5GaWx0ZXJzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmZpZWxkLkZpbHRlcnMgJiYgdGhpcy5maWVsZC5GaWx0ZXJzLmluZGV4T2YoXCJncm91cC5cIikgIT09IC0xKSB7XHJcbiAgICAgIGNvbnN0IGZpbHRlcktleVZhbFBhaXJzID0gdGhpcy5maWVsZC5GaWx0ZXJzLnNwbGl0KFwiIFwiKTtcclxuICAgICAgY29uc3QgZ3JwVmFsdWVzID0gZmlsdGVyS2V5VmFsUGFpcnMuZmlsdGVyKFxyXG4gICAgICAgIChlbGVtZW50KSA9PiBlbGVtZW50LnRyaW0oKS5pbmRleE9mKFwiZ3JvdXAuXCIpICE9PSAtMVxyXG4gICAgICApO1xyXG5cclxuICAgICAgZ3JwVmFsdWVzLmZvckVhY2goKHZhbCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGFjdHVhbFZhbCA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZSh2YWwsIHRoaXMuZ3JwKTtcclxuICAgICAgICB0aGlzLnBhcmFtcy5maWx0ZXJzID0gdGhpcy5wYXJhbXMuZmlsdGVycy5yZXBsYWNlKHZhbCwgYWN0dWFsVmFsKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB2YWx1ZUNoYW5nZShldmVudDogYW55KSB7XHJcbiAgICBpZiAoZXZlbnQubGVuZ3RoIDwgMSkge1xyXG4gICAgICB0aGlzLnNjcm9sbFZpZXdDYXJkcy5kYXRhID0gdGhpcy5yZXNwb25zZURhdGEuZGF0YTtcclxuICAgICAgdGhpcy5zY3JvbGxWaWV3Q2FyZHMudG90YWwgPSB0aGlzLnJlc3BvbnNlRGF0YS50b3RhbDtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zY3JvbGxWaWV3Q2FyZHMuZGF0YSA9IHRoaXMucmVzcG9uc2VEYXRhLmRhdGEuZmlsdGVyKHggPT4gZXZlbnQuaW5jbHVkZXMoeC5XRlNfU3RhdHVzTmFtZSkpO1xyXG4gICAgdGhpcy5zY3JvbGxWaWV3Q2FyZHMudG90YWwgPSB0aGlzLnJlc3BvbnNlRGF0YS5kYXRhLmZpbHRlcih4ID0+IGV2ZW50LmluY2x1ZGVzKHguV0ZTX1N0YXR1c05hbWUpKS5sZW5ndGg7XHJcbiAgfVxyXG59XHJcbiJdfQ==