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,279 +0,0 @@
1
- /********** Angular **********/
2
- import { Component, Input } from "@angular/core";
3
- import { Validators } from "@angular/forms";
4
- /********** Component & Service **********/
5
- import { ZComponentHelper, ZComponentProperties } from "mmhglobal-zcore";
6
- export class ZdatetimeComponent {
7
- constructor() {
8
- this.dateFormat = "DD-MMM-YYYY";
9
- // dateValue = null;
10
- this.componentProperties = new ZComponentProperties();
11
- this.setEnable = (status) => {
12
- const fc = this.group.form.controls[this.data.Value];
13
- status ? fc.enable() : fc.disable();
14
- this.componentProperties.isReadOnly = !status;
15
- };
16
- this.setVisible = (status) => {
17
- this.componentProperties.isVisible = status;
18
- this.data.Visible = status;
19
- };
20
- this.setRequire = (status) => {
21
- this.componentProperties.isRequired = status;
22
- ZComponentHelper.changeValidator(status, this.group, this.data.Value, this.componentProperties, Validators.required);
23
- };
24
- this.SetDateRange = (MinDate, MaxDate) => {
25
- var thisComponent = this;
26
- if (!isNaN(Date.parse(MinDate))) {
27
- this.data.MinDate = new Date(MinDate);
28
- }
29
- if (!isNaN(Date.parse(MaxDate))) {
30
- this.data.MaxDate = new Date(MaxDate);
31
- }
32
- };
33
- }
34
- ngOnInit() {
35
- ZComponentHelper.setComponentProperties(this);
36
- ZComponentHelper.registerComponent(this);
37
- if (this.data.Type === "ztime") {
38
- this.dateFormat = "HH:mm";
39
- }
40
- if (this.data.Type === "zuidatetime") {
41
- this.dateFormat = "DD-MMM-YYYY h:mm A";
42
- }
43
- if (this.data.Type === "zuitime") {
44
- this.dateFormat = "HH:mm:ss";
45
- }
46
- if (this.data.Type === "zshortdate") {
47
- this.dateFormat = "MMM-YYYY";
48
- }
49
- // if (this.group.zModel[this.data.Value]) {
50
- // this.dateValue = new Date(this.group.zModel[this.data.Value]);
51
- // }
52
- }
53
- toKendoDateFormat() {
54
- return this.dateFormat
55
- .replace("DD", "dd")
56
- .replace("YYYY", "yyyy")
57
- .replace("h", "H")
58
- .replace("A", "a");
59
- }
60
- getReadOnlyValue() {
61
- const readOnlyValue = ZComponentHelper.getGroupEvalValue.call(this, this.data.ReadOnly, this.group);
62
- if (typeof readOnlyValue === "function") {
63
- return readOnlyValue();
64
- }
65
- return readOnlyValue;
66
- }
67
- isMobileScreen() {
68
- const v = ZComponentHelper.isMobileScreen();
69
- return v;
70
- }
71
- getDateValue() {
72
- const value = this.form.controls[this.data.Value].value;
73
- if (value) {
74
- return new Date(value);
75
- }
76
- else {
77
- return null;
78
- }
79
- }
80
- GetDate(date) {
81
- // convert the date to ISOString
82
- const myDate = new Date(date).toISOString();
83
- // assign to the zModel
84
- ZComponentHelper.setModelValue(this.data.Value, myDate, this.group);
85
- }
86
- onChange(value) {
87
- // console.log(
88
- // "date change ",
89
- // value.toISOString(),
90
- // " date value: ",
91
- // new Date(value.toISOString())
92
- // );
93
- // // this.group.zModel[this.data.Value] = value.toISOString();
94
- // const v = value.toISOString();
95
- // this.dateValue = new Date(value.toISOString());
96
- if (value === null) {
97
- ZComponentHelper.setModelValue(this.data.Value, value, this.group);
98
- }
99
- else {
100
- ZComponentHelper.setModelValue(this.data.Value, value.toISOString(), this.group);
101
- const fc = this.form.controls[this.data.Value];
102
- fc.setValue(value.toISOString());
103
- }
104
- this.group.subject.next({
105
- type: "onChange",
106
- target: this.data.OnChange,
107
- data: value,
108
- });
109
- }
110
- handlePreventableEvent(event, eventName, preventDefault) {
111
- // keep "this" to use in binding.
112
- var thisComponent = this;
113
- // need a timeout for ui to display the calender popup
114
- setTimeout(function () {
115
- // only available when popup is shown, get the element by class
116
- // for date
117
- thisComponent.dateAppendEvent(thisComponent);
118
- // for time
119
- thisComponent.timeAppendEvent(thisComponent);
120
- }, 500);
121
- }
122
- dateAppendEvent(thisComponent) {
123
- let dateCell = $("tbody.k-calendar-tbody").find("td.k-calendar-td");
124
- for (var i = 0; i < dateCell.length; i++) {
125
- const node = dateCell[i];
126
- if (node.title != "") {
127
- // when date clicked
128
- node.addEventListener("click", function () {
129
- if (!isNaN(Date.parse(node.title))) {
130
- const nodeDate = new Date(node.title).toISOString();
131
- // assign to the zModel
132
- ZComponentHelper.setModelValue(thisComponent.data.Value, nodeDate, thisComponent.group);
133
- }
134
- // timeout append time click event
135
- setTimeout(function () {
136
- thisComponent.hoursOnClick(thisComponent);
137
- thisComponent.minutesOnClick(thisComponent);
138
- thisComponent.ampmOnClick(thisComponent);
139
- thisComponent.nowOnClick(thisComponent);
140
- }, 500);
141
- });
142
- }
143
- }
144
- // Today clicked
145
- const todayDate = $("span.k-today")[0];
146
- todayDate.addEventListener("click", function () {
147
- const dateNow = new Date().toJSON().slice(0, 10).replace(/-/g, '/');
148
- // set to Model
149
- thisComponent.setDateTimeToModel(thisComponent, dateNow);
150
- thisComponent.hoursOnClick(thisComponent);
151
- thisComponent.minutesOnClick(thisComponent);
152
- thisComponent.ampmOnClick(thisComponent);
153
- thisComponent.nowOnClick(thisComponent);
154
- });
155
- }
156
- timeAppendEvent(thisComponent) {
157
- var timeTab = $("button.k-button.k-time-tab")[0];
158
- timeTab.addEventListener("click", function () {
159
- thisComponent.hoursOnClick(thisComponent);
160
- thisComponent.minutesOnClick(thisComponent);
161
- thisComponent.ampmOnClick(thisComponent);
162
- thisComponent.nowOnClick(thisComponent);
163
- });
164
- }
165
- nowOnClick(thisComponent) {
166
- const nowTime = $("button.k-button.k-bare.k-time-now")[0];
167
- if (nowTime) {
168
- nowTime.addEventListener("click", function (e) {
169
- // get model current value
170
- let valueDateTime = thisComponent.currentDateTimeValue(thisComponent);
171
- const dateTimeNow = new Date();
172
- // convert current value to datetime
173
- valueDateTime.setHours(dateTimeNow.getHours());
174
- valueDateTime.setMinutes(dateTimeNow.getMinutes());
175
- valueDateTime.setSeconds(dateTimeNow.getSeconds());
176
- // set to Model
177
- thisComponent.setDateTimeToModel(thisComponent, valueDateTime);
178
- });
179
- }
180
- }
181
- hoursOnClick(thisComponent) {
182
- const timeWrapper = $("div.k-time-list-wrapper").find("ul");
183
- if (timeWrapper.length > 0) {
184
- const hour = timeWrapper[0].children;
185
- for (var i = 0; i < hour.length; i++) {
186
- hour[i].addEventListener("click", function (e) {
187
- // get clicked node value
188
- const nodeValue = e.currentTarget.textContent;
189
- // get model current value
190
- let valueDateTime = thisComponent.currentDateTimeValue(thisComponent);
191
- // set new hour
192
- valueDateTime.setHours(nodeValue);
193
- // set to Model
194
- thisComponent.setDateTimeToModel(thisComponent, valueDateTime);
195
- });
196
- }
197
- }
198
- }
199
- minutesOnClick(thisComponent) {
200
- const timeWrapper = $("div.k-time-list-wrapper").find("ul");
201
- if (timeWrapper.length > 0) {
202
- const minutes = timeWrapper[1].children;
203
- for (var i = 0; i < minutes.length; i++) {
204
- minutes[i].addEventListener("click", function (e) {
205
- // get clicked node value
206
- const nodeValue = e.currentTarget.textContent;
207
- // get model current value
208
- const valueDateTime = thisComponent.currentDateTimeValue(thisComponent);
209
- // set new minute
210
- valueDateTime.setMinutes(nodeValue);
211
- // set to Model
212
- thisComponent.setDateTimeToModel(thisComponent, valueDateTime);
213
- });
214
- }
215
- }
216
- }
217
- ampmOnClick(thisComponent) {
218
- const timeWrapper = $("div.k-time-list-wrapper").find("ul");
219
- if (timeWrapper.length > 0) {
220
- const ampm = timeWrapper[2].children;
221
- for (var i = 0; i < ampm.length; i++) {
222
- ampm[i].addEventListener("click", function (e) {
223
- // get clicked node value
224
- const nodeValue = e.currentTarget.textContent;
225
- // get model current value
226
- const valueDateTime = thisComponent.currentDateTimeValue(thisComponent);
227
- // set new minutes
228
- var _hour = valueDateTime.getHours();
229
- if (nodeValue.toLowerCase() == "am") {
230
- _hour -= 12;
231
- }
232
- else {
233
- _hour += 12;
234
- }
235
- valueDateTime.setHours(_hour);
236
- // set to Model
237
- thisComponent.setDateTimeToModel(thisComponent, valueDateTime);
238
- });
239
- }
240
- }
241
- }
242
- currentDateTimeValue(thisComponent) {
243
- // get current value
244
- const zModelValue = ZComponentHelper.getZModelValue(thisComponent.data.Value, thisComponent.group, thisComponent.group.zModel);
245
- let valueDateTime = new Date();
246
- if (zModelValue != "" && zModelValue != undefined) {
247
- // convert current value to datetime
248
- valueDateTime = new Date(zModelValue);
249
- }
250
- return valueDateTime;
251
- }
252
- setDateTimeToModel(thisComponent, valueDateTime) {
253
- // convert the date to ISOString
254
- const newDateTime = new Date(valueDateTime).toISOString();
255
- // assign to the zModel
256
- ZComponentHelper.setModelValue(thisComponent.data.Value, newDateTime, thisComponent.group);
257
- // set timeout do add event again after node clicked. if not it only work 1 time.
258
- setTimeout(function () {
259
- thisComponent.hoursOnClick(thisComponent);
260
- thisComponent.minutesOnClick(thisComponent);
261
- thisComponent.ampmOnClick(thisComponent);
262
- thisComponent.nowOnClick(thisComponent);
263
- }, 500);
264
- }
265
- }
266
- ZdatetimeComponent.decorators = [
267
- { type: Component, args: [{
268
- selector: "app-zdatetime",
269
- template: "<ion-item [ngClass]=\"data.Class\" [formGroup]=\"form\" *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\">\r\n <ion-label [attr.for]=\"data.Value\" *ngIf=\"data.ShowLabel === undefined || data.ShowLabel\" position=\"stacked\">\r\n {{data.Label}} <ion-text *ngIf=\"componentProperties.isRequired\" color=\"danger\">*</ion-text>\r\n </ion-label>\r\n <div class=\"ion-row\" style=\"justify-content: space-between; width: 100%\">\r\n <span style=\"flex: 1;\">\r\n <ion-datetime *ngIf=\"isMobileScreen()\"\r\n style=\"padding: 8px 0px;\"\r\n [required]=\"(!!componentProperties.isRequiredField ? group[componentProperties.isRequiredField] : componentProperties.isRequired)\"\r\n [placeholder]=\"data.PlaceHolder\"\r\n [id]=\"data.Value\"\r\n [displayFormat]=\"dateFormat\"\r\n [pickerFormat]=\"dateFormat\"\r\n [class.disabled]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [formControlName]=\"data.Value\"\r\n [readonly]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\">\r\n </ion-datetime>\r\n <kendo-datepicker *ngIf=\"!isMobileScreen() && dateFormat==='MMM-YYYY'\"\r\n [id]=\"data.Value\"\r\n [value]=\"form.get(data.Value).value | dateParser\"\r\n (valueChange)=\"onChange($event)\"\r\n [min]=\"data.MinDate\"\r\n [max]=\"data.MaxDate\"\r\n [activeView]=\"'year'\"\r\n [bottomView]=\"'year'\"\r\n style=\"margin-top: 7px; width: 100%;\"\r\n [class.disabled]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [readonly]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [format]=\"toKendoDateFormat()\"\r\n [placeholder]=\"data.PlaceHolder\">\r\n </kendo-datepicker>\r\n <kendo-datepicker *ngIf=\"!isMobileScreen() && dateFormat==='DD-MMM-YYYY'\"\r\n [id]=\"data.Value\"\r\n [value]=\"form.get(data.Value).value | dateParser\"\r\n (valueChange)=\"onChange($event)\"\r\n [min]=\"data.MinDate\"\r\n [max]=\"data.MaxDate\"\r\n style=\"margin-top: 7px; width: 100%;\"\r\n [class.disabled]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [readonly]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [format]=\"toKendoDateFormat()\"\r\n [placeholder]=\"data.PlaceHolder\"></kendo-datepicker>\r\n <kendo-datetimepicker *ngIf=\"!isMobileScreen() && dateFormat==='DD-MMM-YYYY h:mm A'\"\r\n [id]=\"data.Value\"\r\n [value]=\"form.get(data.Value).value | dateParser\"\r\n (valueChange)=\"onChange($event)\"\r\n (open)=\"handlePreventableEvent($event, 'open', false)\"\r\n style=\"margin-top: 7px; width: 100%;\"\r\n [class.disabled]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [readonly]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [format]=\"toKendoDateFormat()\"\r\n [placeholder]=\"data.PlaceHolder\">\r\n <ng-template kendoCalendarMonthCellTemplate let-date>\r\n <span (click)=\"GetDate(date)\">{{date.getDate()}}</span>\r\n </ng-template>\r\n </kendo-datetimepicker>\r\n <kendo-timepicker *ngIf=\"!isMobileScreen() && (dateFormat==='HH:mm:ss' || dateFormat==='HH:mm')\"\r\n [id]=\"data.Value\"\r\n [value]=\"form.get(data.Value).value | dateParser\"\r\n (valueChange)=\"onChange($event)\"\r\n style=\"margin-top: 7px; width: 100%;\"\r\n [class.disabled]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [readonly]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [format]=\"toKendoDateFormat()\"\r\n [placeholder]=\"data.PlaceHolder\"></kendo-timepicker>\r\n </span>\r\n <app-uivalidationmessage [group]=\"group\"\r\n [data]=\"data\"\r\n [form]=\"form\"></app-uivalidationmessage>\r\n </div>\r\n</ion-item>\r\n",
270
- styles: [".gridInlineEdit{--background:transparent}.item.sc-ion-label-md-h,.item .sc-ion-label-md-h{font-weight:var(--z-label-weight);color:var(--z-label-color);text-shadow:var(--z-label-shadow)}.k-datepicker{color:var(--z-text-color)}"]
271
- },] }
272
- ];
273
- ZdatetimeComponent.ctorParameters = () => [];
274
- ZdatetimeComponent.propDecorators = {
275
- data: [{ type: Input }],
276
- group: [{ type: Input }],
277
- form: [{ type: Input }]
278
- };
279
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemRhdGV0aW1lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21taGdsb2JhbC1keW5hbWljZm9ybS9zcmMvbGliL3pkYXRldGltZS96ZGF0ZXRpbWUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQWEsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFPdkQsMkNBQTJDO0FBQzNDLE9BQU8sRUFDTyxnQkFBZ0IsRUFDWixvQkFBb0IsRUFDckMsTUFBTSxpQkFBaUIsQ0FBQztBQVd6QixNQUFNLE9BQU8sa0JBQWtCO0lBUzdCO1FBTEEsZUFBVSxHQUFHLGFBQWEsQ0FBQztRQUMzQixvQkFBb0I7UUFFcEIsd0JBQW1CLEdBQUcsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO1FBbUcxQyxjQUFTLEdBQUcsQ0FBQyxNQUFlLEVBQUUsRUFBRTtZQUNyQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFDaEQsQ0FBQyxDQUFBO1FBRU0sZUFBVSxHQUFHLENBQUMsTUFBZSxFQUFFLEVBQUU7WUFDdEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7WUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQzdCLENBQUMsQ0FB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QyxDQUFDO0lBQ1YsQ0FBQzs7O1lBeFVGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsZUFBZTtnQkFDekIsazRLQUF5Qzs7YUFFMUM7Ozs7bUJBRUUsS0FBSztvQkFDTCxLQUFLO21CQUNMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuXHJcbi8qKioqKioqKioqIFBsdWdpbiAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBQcmV2ZW50YWJsZUV2ZW50IH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItZGF0ZWlucHV0cyc7XHJcblxyXG4vKioqKioqKioqKiBDb21wb25lbnQgJiBTZXJ2aWNlICoqKioqKioqKiovXHJcbmltcG9ydCB7XHJcbiAgWkNvbXBvbmVudCwgWkNvbXBvbmVudEhlbHBlciwgWkNvbXBvbmVudE91dHB1dEV2ZW50LFxyXG4gIFpGaWVsZCwgWkdyb3VwLCBaQ29tcG9uZW50UHJvcGVydGllc1xyXG59IGZyb20gXCJtbWhnbG9iYWwtemNvcmVcIjtcclxuXHJcblxyXG4vLyBpbXBvcnQgKiBhcyAkIGZyb20gJ2pxdWVyeSc7XHJcbmRlY2xhcmUgdmFyICQ6IGFueTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImFwcC16ZGF0ZXRpbWVcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3pkYXRldGltZS5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi96ZGF0ZXRpbWUuY29tcG9uZW50LnNjc3NcIl0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBaZGF0ZXRpbWVDb21wb25lbnQgaW1wbGVtZW50cyBaQ29tcG9uZW50LCBPbkluaXQge1xyXG4gIEBJbnB1dCgpIGRhdGE6IFpGaWVsZDtcclxuICBASW5wdXQoKSBncm91cDogWkdyb3VwO1xyXG4gIEBJbnB1dCgpIGZvcm06IEZvcm1Hcm91cDtcclxuICBkYXRlRm9ybWF0ID0gXCJERC1NTU0tWVlZWVwiO1xyXG4gIC8vIGRhdGVWYWx1ZSA9IG51bGw7XHJcblxyXG4gIGNvbXBvbmVudFByb3BlcnRpZXMgPSBuZXcgWkNvbXBvbmVudFByb3BlcnRpZXMoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnNldENvbXBvbmVudFByb3BlcnRpZXModGhpcyk7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnJlZ2lzdGVyQ29tcG9uZW50KHRoaXMpO1xyXG5cclxuICAgIGlmICh0aGlzLmRhdGEuVHlwZSA9PT0gXCJ6dGltZVwiKSB7XHJcbiAgICAgIHRoaXMuZGF0ZUZvcm1hdCA9IFwiSEg6bW1cIjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRhdGEuVHlwZSA9PT0gXCJ6dWlkYXRldGltZVwiKSB7XHJcbiAgICAgIHRoaXMuZGF0ZUZvcm1hdCA9IFwiREQtTU1NLVlZWVkgaDptbSBBXCI7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kYXRhLlR5cGUgPT09IFwienVpdGltZVwiKSB7XHJcbiAgICAgIHRoaXMuZGF0ZUZvcm1hdCA9IFwiSEg6bW06c3NcIjtcclxuICAgIH1cclxuXHRpZiAodGhpcy5kYXRhLlR5cGUgPT09IFwienNob3J0ZGF0ZVwiKSB7XHJcbiAgICAgIHRoaXMuZGF0ZUZvcm1hdCA9IFwiTU1NLVlZWVlcIjtcclxuICAgIH1cclxuICAgIC8vIGlmICh0aGlzLmdyb3VwLnpNb2RlbFt0aGlzLmRhdGEuVmFsdWVdKSB7XHJcbiAgICAvLyAgIHRoaXMuZGF0ZVZhbHVlID0gbmV3IERhdGUodGhpcy5ncm91cC56TW9kZWxbdGhpcy5kYXRhLlZhbHVlXSk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICB0b0tlbmRvRGF0ZUZvcm1hdCgpIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGVGb3JtYXRcclxuICAgICAgLnJlcGxhY2UoXCJERFwiLCBcImRkXCIpXHJcbiAgICAgIC5yZXBsYWNlKFwiWVlZWVwiLCBcInl5eXlcIilcclxuICAgICAgLnJlcGxhY2UoXCJoXCIsIFwiSFwiKVxyXG4gICAgICAucmVwbGFjZShcIkFcIiwgXCJhXCIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UmVhZE9ubHlWYWx1ZSgpIHtcclxuICAgIGNvbnN0IHJlYWRPbmx5VmFsdWUgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwoXHJcbiAgICAgIHRoaXMsXHJcbiAgICAgIHRoaXMuZGF0YS5SZWFkT25seSxcclxuICAgICAgdGhpcy5ncm91cFxyXG4gICAgKTtcclxuICAgIGlmICh0eXBlb2YgcmVhZE9ubHlWYWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgIHJldHVybiByZWFkT25seVZhbHVlKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVhZE9ubHlWYWx1ZTtcclxuICB9XHJcblxyXG4gIGlzTW9iaWxlU2NyZWVuKCkge1xyXG4gICAgY29uc3QgdiA9IFpDb21wb25lbnRIZWxwZXIuaXNNb2JpbGVTY3JlZW4oKTtcclxuICAgIHJldHVybiB2O1xyXG4gIH1cclxuXHJcbiAgZ2V0RGF0ZVZhbHVlKCkge1xyXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5kYXRhLlZhbHVlXS52YWx1ZTtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICByZXR1cm4gbmV3IERhdGUodmFsdWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgR2V0RGF0ZShkYXRlOiBEYXRlKSB7XHJcbiAgICAvLyBjb252ZXJ0IHRoZSBkYXRlIHRvIElTT1N0cmluZ1xyXG4gICAgY29uc3QgbXlEYXRlID0gbmV3IERhdGUoZGF0ZSkudG9JU09TdHJpbmcoKTtcclxuICAgIC8vIGFzc2lnbiB0byB0aGUgek1vZGVsXHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnNldE1vZGVsVmFsdWUodGhpcy5kYXRhLlZhbHVlLCBteURhdGUsIHRoaXMuZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQ2hhbmdlKHZhbHVlOiBEYXRlKTogdm9pZCB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcclxuICAgIC8vICAgXCJkYXRlIGNoYW5nZSBcIixcclxuICAgIC8vICAgdmFsdWUudG9JU09TdHJpbmcoKSxcclxuICAgIC8vICAgXCIgZGF0ZSB2YWx1ZTogXCIsXHJcbiAgICAvLyAgIG5ldyBEYXRlKHZhbHVlLnRvSVNPU3RyaW5nKCkpXHJcbiAgICAvLyApO1xyXG4gICAgLy8gLy8gdGhpcy5ncm91cC56TW9kZWxbdGhpcy5kYXRhLlZhbHVlXSA9IHZhbHVlLnRvSVNPU3RyaW5nKCk7XHJcbiAgICAvLyBjb25zdCB2ID0gdmFsdWUudG9JU09TdHJpbmcoKTtcclxuICAgIC8vIHRoaXMuZGF0ZVZhbHVlID0gbmV3IERhdGUodmFsdWUudG9JU09TdHJpbmcoKSk7XHJcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgWkNvbXBvbmVudEhlbHBlci5zZXRNb2RlbFZhbHVlKFxyXG4gICAgICAgIHRoaXMuZGF0YS5WYWx1ZSxcclxuICAgICAgICB2YWx1ZSxcclxuICAgICAgICB0aGlzLmdyb3VwXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBaQ29tcG9uZW50SGVscGVyLnNldE1vZGVsVmFsdWUoXHJcbiAgICAgICAgdGhpcy5kYXRhLlZhbHVlLFxyXG4gICAgICAgIHZhbHVlLnRvSVNPU3RyaW5nKCksXHJcbiAgICAgICAgdGhpcy5ncm91cFxyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc3QgZmMgPSB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5kYXRhLlZhbHVlXTtcclxuICAgICAgZmMuc2V0VmFsdWUodmFsdWUudG9JU09TdHJpbmcoKSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgIHR5cGU6IFwib25DaGFuZ2VcIixcclxuICAgICAgdGFyZ2V0OiB0aGlzLmRhdGEuT25DaGFuZ2UsXHJcbiAgICAgIGRhdGE6IHZhbHVlLFxyXG4gICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEVuYWJsZSA9IChzdGF0dXM6IGJvb2xlYW4pID0+IHtcclxuICAgIGNvbnN0IGZjID0gdGhpcy5ncm91cC5mb3JtLmNvbnRyb2xzW3RoaXMuZGF0YS5WYWx1ZV07XHJcbiAgICBzdGF0dXMgPyBmYy5lbmFibGUoKSA6IGZjLmRpc2FibGUoKTtcclxuICAgIHRoaXMuY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5ID0gIXN0YXR1cztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRWaXNpYmxlID0gKHN0YXR1czogYm9vbGVhbikgPT4ge1xyXG4gICAgdGhpcy5jb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZSA9IHN0YXR1cztcclxuICAgIHRoaXMuZGF0YS5WaXNpYmxlID0gc3RhdHVzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFJlcXVpcmUgPSAoc3RhdHVzOiBib29sZWFuKSA9PiB7XHJcbiAgICB0aGlzLmNvbXBvbmVudFByb3BlcnRpZXMuaXNSZXF1aXJlZCA9IHN0YXR1cztcclxuICAgIFpDb21wb25lbnRIZWxwZXIuY2hhbmdlVmFsaWRhdG9yKHN0YXR1cywgdGhpcy5ncm91cCwgdGhpcy5kYXRhLlZhbHVlLCB0aGlzLmNvbXBvbmVudFByb3BlcnRpZXMsIFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNldERhdGVSYW5nZSA9IChNaW5EYXRlOiBzdHJpbmcsTWF4RGF0ZTogc3RyaW5nKTogYW55ID0+XHJcbiAge1xyXG4gICAgdmFyIHRoaXNDb21wb25lbnQgPSB0aGlzO1xyXG5cclxuICAgIGlmICghaXNOYU4oRGF0ZS5wYXJzZShNaW5EYXRlKSkpXHJcbiAgICB7XHJcbiAgICAgIHRoaXMuZGF0YS5NaW5EYXRlID0gbmV3IERhdGUoTWluRGF0ZSk7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzTmFOKERhdGUucGFyc2UoTWF4RGF0ZSkpKVxyXG4gICAge1xyXG4gICAgICB0aGlzLmRhdGEuTWF4RGF0ZSA9IG5ldyBEYXRlKE1heERhdGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZVByZXZlbnRhYmxlRXZlbnQoZXZlbnQ6IFByZXZlbnRhYmxlRXZlbnQsIGV2ZW50TmFtZTogc3RyaW5nLCBwcmV2ZW50RGVmYXVsdDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgLy8ga2VlcCBcInRoaXNcIiB0byB1c2UgaW4gYmluZGluZy5cclxuICAgIHZhciB0aGlzQ29tcG9uZW50ID0gdGhpcztcclxuXHJcbiAgICAvLyBuZWVkIGEgdGltZW91dCBmb3IgdWkgdG8gZGlzcGxheSB0aGUgY2FsZW5kZXIgcG9wdXBcclxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAvLyBvbmx5IGF2YWlsYWJsZSB3aGVuIHBvcHVwIGlzIHNob3duLCBnZXQgdGhlIGVsZW1lbnQgYnkgY2xhc3NcclxuICAgICAgLy8gZm9yIGRhdGVcclxuICAgICAgdGhpc0NvbXBvbmVudC5kYXRlQXBwZW5kRXZlbnQodGhpc0NvbXBvbmVudCk7XHJcblxyXG4gICAgICAvLyBmb3IgdGltZVxyXG4gICAgICB0aGlzQ29tcG9uZW50LnRpbWVBcHBlbmRFdmVudCh0aGlzQ29tcG9uZW50KTtcclxuICAgIH0sIDUwMCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRhdGVBcHBlbmRFdmVudCh0aGlzQ29tcG9uZW50OiBhbnkpIHtcclxuICAgIGxldCBkYXRlQ2VsbCA9ICQoXCJ0Ym9keS5rLWNhbGVuZGFyLXRib2R5XCIpLmZpbmQoXCJ0ZC5rLWNhbGVuZGFyLXRkXCIpO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRlQ2VsbC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBub2RlID0gZGF0ZUNlbGxbaV07XHJcblxyXG4gICAgICBpZiAobm9kZS50aXRsZSAhPSBcIlwiKSB7XHJcbiAgICAgICAgLy8gd2hlbiBkYXRlIGNsaWNrZWRcclxuICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBpZiAoIWlzTmFOKERhdGUucGFyc2Uobm9kZS50aXRsZSkpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5vZGVEYXRlID0gbmV3IERhdGUobm9kZS50aXRsZSkudG9JU09TdHJpbmcoKTtcclxuICAgICAgICAgICAgLy8gYXNzaWduIHRvIHRoZSB6TW9kZWxcclxuICAgICAgICAgICAgWkNvbXBvbmVudEhlbHBlci5zZXRNb2RlbFZhbHVlKHRoaXNDb21wb25lbnQuZGF0YS5WYWx1ZSwgbm9kZURhdGUsIHRoaXNDb21wb25lbnQuZ3JvdXApO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIHRpbWVvdXQgYXBwZW5kIHRpbWUgY2xpY2sgZXZlbnRcclxuICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzQ29tcG9uZW50LmhvdXJzT25DbGljayh0aGlzQ29tcG9uZW50KTtcclxuICAgICAgICAgICAgdGhpc0NvbXBvbmVudC5taW51dGVzT25DbGljayh0aGlzQ29tcG9uZW50KTtcclxuICAgICAgICAgICAgdGhpc0NvbXBvbmVudC5hbXBtT25DbGljayh0aGlzQ29tcG9uZW50KTtcclxuICAgICAgICAgICAgdGhpc0NvbXBvbmVudC5ub3dPbkNsaWNrKHRoaXNDb21wb25lbnQpO1xyXG4gICAgICAgICAgfSwgNTAwKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFRvZGF5IGNsaWNrZWRcclxuICAgIGNvbnN0IHRvZGF5RGF0ZSA9ICQoXCJzcGFuLmstdG9kYXlcIilbMF07XHJcbiAgICB0b2RheURhdGUuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgY29uc3QgZGF0ZU5vdyA9IG5ldyBEYXRlKCkudG9KU09OKCkuc2xpY2UoMCwgMTApLnJlcGxhY2UoLy0vZywgJy8nKTtcclxuICAgICAgLy8gc2V0IHRvIE1vZGVsXHJcbiAgICAgIHRoaXNDb21wb25lbnQuc2V0RGF0ZVRpbWVUb01vZGVsKHRoaXNDb21wb25lbnQsIGRhdGVOb3cpO1xyXG5cclxuICAgICAgdGhpc0NvbXBvbmVudC5ob3Vyc09uQ2xpY2sodGhpc0NvbXBvbmVudCk7XHJcbiAgICAgIHRoaXNDb21wb25lbnQubWludXRlc09uQ2xpY2sodGhpc0NvbXBvbmVudCk7XHJcbiAgICAgIHRoaXNDb21wb25lbnQuYW1wbU9uQ2xpY2sodGhpc0NvbXBvbmVudCk7XHJcbiAgICAgIHRoaXNDb21wb25lbnQubm93T25DbGljayh0aGlzQ29tcG9uZW50KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0aW1lQXBwZW5kRXZlbnQodGhpc0NvbXBvbmVudDogYW55KSB7XHJcbiAgICB2YXIgdGltZVRhYiA9ICQoXCJidXR0b24uay1idXR0b24uay10aW1lLXRhYlwiKVswXTtcclxuICAgIHRpbWVUYWIuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgdGhpc0NvbXBvbmVudC5ob3Vyc09uQ2xpY2sodGhpc0NvbXBvbmVudCk7XHJcbiAgICAgIHRoaXNDb21wb25lbnQubWludXRlc09uQ2xpY2sodGhpc0NvbXBvbmVudCk7XHJcbiAgICAgIHRoaXNDb21wb25lbnQuYW1wbU9uQ2xpY2sodGhpc0NvbXBvbmVudCk7XHJcbiAgICAgIHRoaXNDb21wb25lbnQubm93T25DbGljayh0aGlzQ29tcG9uZW50KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBub3dPbkNsaWNrKHRoaXNDb21wb25lbnQ6IGFueSkge1xyXG4gICAgY29uc3Qgbm93VGltZSA9ICQoXCJidXR0b24uay1idXR0b24uay1iYXJlLmstdGltZS1ub3dcIilbMF07XHJcbiAgICBpZiAobm93VGltZSkge1xyXG4gICAgICBub3dUaW1lLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIC8vIGdldCBtb2RlbCBjdXJyZW50IHZhbHVlXHJcbiAgICAgICAgbGV0IHZhbHVlRGF0ZVRpbWUgPSB0aGlzQ29tcG9uZW50LmN1cnJlbnREYXRlVGltZVZhbHVlKHRoaXNDb21wb25lbnQpO1xyXG4gICAgICAgIGNvbnN0IGRhdGVUaW1lTm93ID0gbmV3IERhdGUoKTtcclxuXHJcbiAgICAgICAgLy8gY29udmVydCBjdXJyZW50IHZhbHVlIHRvIGRhdGV0aW1lXHJcbiAgICAgICAgdmFsdWVEYXRlVGltZS5zZXRIb3VycyhkYXRlVGltZU5vdy5nZXRIb3VycygpKTtcclxuICAgICAgICB2YWx1ZURhdGVUaW1lLnNldE1pbnV0ZXMoZGF0ZVRpbWVOb3cuZ2V0TWludXRlcygpKTtcclxuICAgICAgICB2YWx1ZURhdGVUaW1lLnNldFNlY29uZHMoZGF0ZVRpbWVOb3cuZ2V0U2Vjb25kcygpKTtcclxuXHJcbiAgICAgICAgLy8gc2V0IHRvIE1vZGVsXHJcbiAgICAgICAgdGhpc0NvbXBvbmVudC5zZXREYXRlVGltZVRvTW9kZWwodGhpc0NvbXBvbmVudCwgdmFsdWVEYXRlVGltZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBob3Vyc09uQ2xpY2sodGhpc0NvbXBvbmVudDogYW55KSB7XHJcbiAgICBjb25zdCB0aW1lV3JhcHBlciA9ICQoXCJkaXYuay10aW1lLWxpc3Qtd3JhcHBlclwiKS5maW5kKFwidWxcIik7XHJcbiAgICBpZiAodGltZVdyYXBwZXIubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBob3VyID0gdGltZVdyYXBwZXJbMF0uY2hpbGRyZW47XHJcblxyXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvdXIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBob3VyW2ldLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgLy8gZ2V0IGNsaWNrZWQgbm9kZSB2YWx1ZVxyXG4gICAgICAgICAgY29uc3Qgbm9kZVZhbHVlID0gZS5jdXJyZW50VGFyZ2V0LnRleHRDb250ZW50O1xyXG5cclxuICAgICAgICAgIC8vIGdldCBtb2RlbCBjdXJyZW50IHZhbHVlXHJcbiAgICAgICAgICBsZXQgdmFsdWVEYXRlVGltZSA9IHRoaXNDb21wb25lbnQuY3VycmVudERhdGVUaW1lVmFsdWUodGhpc0NvbXBvbmVudCk7XHJcblxyXG4gICAgICAgICAgLy8gc2V0IG5ldyBob3VyXHJcbiAgICAgICAgICB2YWx1ZURhdGVUaW1lLnNldEhvdXJzKG5vZGVWYWx1ZSk7XHJcblxyXG4gICAgICAgICAgLy8gc2V0IHRvIE1vZGVsXHJcbiAgICAgICAgICB0aGlzQ29tcG9uZW50LnNldERhdGVUaW1lVG9Nb2RlbCh0aGlzQ29tcG9uZW50LCB2YWx1ZURhdGVUaW1lKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtaW51dGVzT25DbGljayh0aGlzQ29tcG9uZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IHRpbWVXcmFwcGVyID0gJChcImRpdi5rLXRpbWUtbGlzdC13cmFwcGVyXCIpLmZpbmQoXCJ1bFwiKTtcclxuICAgIGlmICh0aW1lV3JhcHBlci5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IG1pbnV0ZXMgPSB0aW1lV3JhcHBlclsxXS5jaGlsZHJlbjtcclxuXHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWludXRlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIG1pbnV0ZXNbaV0uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAvLyBnZXQgY2xpY2tlZCBub2RlIHZhbHVlXHJcbiAgICAgICAgICBjb25zdCBub2RlVmFsdWUgPSBlLmN1cnJlbnRUYXJnZXQudGV4dENvbnRlbnQ7XHJcblxyXG4gICAgICAgICAgLy8gZ2V0IG1vZGVsIGN1cnJlbnQgdmFsdWVcclxuICAgICAgICAgIGNvbnN0IHZhbHVlRGF0ZVRpbWUgPSB0aGlzQ29tcG9uZW50LmN1cnJlbnREYXRlVGltZVZhbHVlKHRoaXNDb21wb25lbnQpO1xyXG5cclxuICAgICAgICAgIC8vIHNldCBuZXcgbWludXRlXHJcbiAgICAgICAgICB2YWx1ZURhdGVUaW1lLnNldE1pbnV0ZXMobm9kZVZhbHVlKTtcclxuXHJcbiAgICAgICAgICAvLyBzZXQgdG8gTW9kZWxcclxuICAgICAgICAgIHRoaXNDb21wb25lbnQuc2V0RGF0ZVRpbWVUb01vZGVsKHRoaXNDb21wb25lbnQsIHZhbHVlRGF0ZVRpbWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFtcG1PbkNsaWNrKHRoaXNDb21wb25lbnQ6IGFueSkge1xyXG4gICAgY29uc3QgdGltZVdyYXBwZXIgPSAkKFwiZGl2LmstdGltZS1saXN0LXdyYXBwZXJcIikuZmluZChcInVsXCIpO1xyXG4gICAgaWYgKHRpbWVXcmFwcGVyLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgYW1wbSA9IHRpbWVXcmFwcGVyWzJdLmNoaWxkcmVuO1xyXG5cclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbXBtLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgYW1wbVtpXS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgIC8vIGdldCBjbGlja2VkIG5vZGUgdmFsdWVcclxuICAgICAgICAgIGNvbnN0IG5vZGVWYWx1ZSA9IGUuY3VycmVudFRhcmdldC50ZXh0Q29udGVudDtcclxuXHJcbiAgICAgICAgICAvLyBnZXQgbW9kZWwgY3VycmVudCB2YWx1ZVxyXG4gICAgICAgICAgY29uc3QgdmFsdWVEYXRlVGltZSA9IHRoaXNDb21wb25lbnQuY3VycmVudERhdGVUaW1lVmFsdWUodGhpc0NvbXBvbmVudCk7XHJcblxyXG4gICAgICAgICAgLy8gc2V0IG5ldyBtaW51dGVzXHJcbiAgICAgICAgICB2YXIgX2hvdXIgPSB2YWx1ZURhdGVUaW1lLmdldEhvdXJzKCk7XHJcbiAgICAgICAgICBpZiAobm9kZVZhbHVlLnRvTG93ZXJDYXNlKCkgPT0gXCJhbVwiKSB7XHJcbiAgICAgICAgICAgIF9ob3VyIC09IDEyO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIF9ob3VyICs9IDEyO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdmFsdWVEYXRlVGltZS5zZXRIb3VycyhfaG91cik7XHJcblxyXG4gICAgICAgICAgLy8gc2V0IHRvIE1vZGVsXHJcbiAgICAgICAgICB0aGlzQ29tcG9uZW50LnNldERhdGVUaW1lVG9Nb2RlbCh0aGlzQ29tcG9uZW50LCB2YWx1ZURhdGVUaW1lKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjdXJyZW50RGF0ZVRpbWVWYWx1ZSh0aGlzQ29tcG9uZW50OiBhbnkpIHtcclxuICAgIC8vIGdldCBjdXJyZW50IHZhbHVlXHJcbiAgICBjb25zdCB6TW9kZWxWYWx1ZSA9IFpDb21wb25lbnRIZWxwZXIuZ2V0Wk1vZGVsVmFsdWUodGhpc0NvbXBvbmVudC5kYXRhLlZhbHVlLCB0aGlzQ29tcG9uZW50Lmdyb3VwLCB0aGlzQ29tcG9uZW50Lmdyb3VwLnpNb2RlbCk7XHJcblxyXG4gICAgbGV0IHZhbHVlRGF0ZVRpbWUgPSBuZXcgRGF0ZSgpO1xyXG5cclxuICAgIGlmICh6TW9kZWxWYWx1ZSAhPSBcIlwiICYmIHpNb2RlbFZhbHVlICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAvLyBjb252ZXJ0IGN1cnJlbnQgdmFsdWUgdG8gZGF0ZXRpbWVcclxuICAgICAgdmFsdWVEYXRlVGltZSA9IG5ldyBEYXRlKHpNb2RlbFZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdmFsdWVEYXRlVGltZVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXREYXRlVGltZVRvTW9kZWwodGhpc0NvbXBvbmVudDogYW55LCB2YWx1ZURhdGVUaW1lOiBhbnkpIHtcclxuICAgIC8vIGNvbnZlcnQgdGhlIGRhdGUgdG8gSVNPU3RyaW5nXHJcbiAgICBjb25zdCBuZXdEYXRlVGltZSA9IG5ldyBEYXRlKHZhbHVlRGF0ZVRpbWUpLnRvSVNPU3RyaW5nKCk7XHJcblxyXG4gICAgLy8gYXNzaWduIHRvIHRoZSB6TW9kZWxcclxuICAgIFpDb21wb25lbnRIZWxwZXIuc2V0TW9kZWxWYWx1ZSh0aGlzQ29tcG9uZW50LmRhdGEuVmFsdWUsIG5ld0RhdGVUaW1lLCB0aGlzQ29tcG9uZW50Lmdyb3VwKTtcclxuXHJcbiAgICAvLyBzZXQgdGltZW91dCBkbyBhZGQgZXZlbnQgYWdhaW4gYWZ0ZXIgbm9kZSBjbGlja2VkLiBpZiBub3QgaXQgb25seSB3b3JrIDEgdGltZS5cclxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICB0aGlzQ29tcG9uZW50LmhvdXJzT25DbGljayh0aGlzQ29tcG9uZW50KTtcclxuICAgICAgdGhpc0NvbXBvbmVudC5taW51dGVzT25DbGljayh0aGlzQ29tcG9uZW50KTtcclxuICAgICAgdGhpc0NvbXBvbmVudC5hbXBtT25DbGljayh0aGlzQ29tcG9uZW50KTtcclxuICAgICAgdGhpc0NvbXBvbmVudC5ub3dPbkNsaWNrKHRoaXNDb21wb25lbnQpO1xyXG4gICAgfSwgNTAwKTtcclxuICB9XHJcbn1cclxuIl19
@@ -1,48 +0,0 @@
1
- /********** Angular **********/
2
- import { Component, Input } from "@angular/core";
3
- import { Validators } from "@angular/forms";
4
- /********** Ionic **********/
5
- /********** Plugin **********/
6
- /********** Component & Service **********/
7
- import { ZComponentHelper, ZComponentProperties, AuthService, } from 'mmhglobal-zcore';
8
- export class ZdivComponent {
9
- constructor(authService) {
10
- this.authService = authService;
11
- this.componentProperties = new ZComponentProperties();
12
- this.setEnable = (status) => {
13
- this.componentProperties.isReadOnly = !status;
14
- };
15
- this.setVisible = (status) => {
16
- this.componentProperties.isVisible = status;
17
- this.data.Visible = status;
18
- };
19
- this.setRequire = (status) => {
20
- this.componentProperties.isRequired = status;
21
- ZComponentHelper.changeValidator(status, this.group, this.data.Value, this.componentProperties, Validators.required);
22
- };
23
- }
24
- ngOnInit() {
25
- ZComponentHelper.setComponentProperties(this);
26
- ZComponentHelper.registerComponent(this);
27
- ZComponentHelper.setFieldsDivClass(this.group._projectName, this.group.fieldName, this.data, this.authService);
28
- }
29
- ComponentIsVisible(field) {
30
- return ZComponentHelper.ComponentIsVisible(field, this.group);
31
- }
32
- }
33
- ZdivComponent.decorators = [
34
- { type: Component, args: [{
35
- selector: 'app-zdiv',
36
- template: "<div *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\" class=\"ion-row\">\r\n <app-zformcontrol \r\n [ngClass]=\"group[field.isVisibleField] ? field.DivClass : \r\n ((field.Visible === true) ? field.DivClass : 'flex-hide')\" \r\n *ngFor=\"let field of data.Value | divzlayout: data.zlayout\" [field]=\"field\"\r\n [group]=\"group\" [form]=\"form\" id=\"{{field.Type}}-{{field.Name}}\">\r\n </app-zformcontrol>\r\n</div>",
37
- styles: [""]
38
- },] }
39
- ];
40
- ZdivComponent.ctorParameters = () => [
41
- { type: AuthService }
42
- ];
43
- ZdivComponent.propDecorators = {
44
- data: [{ type: Input }],
45
- group: [{ type: Input }],
46
- form: [{ type: Input }]
47
- };
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemRpdi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbWhnbG9iYWwtZHluYW1pY2Zvcm0vc3JjL2xpYi96ZGl2L3pkaXYuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQWEsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkQsNkJBQTZCO0FBRTdCLDhCQUE4QjtBQUU5QiwyQ0FBMkM7QUFDM0MsT0FBTyxFQUNPLGdCQUFnQixFQUNaLG9CQUFvQixFQUFFLFdBQVcsR0FDbEQsTUFBTSxpQkFBaUIsQ0FBQztBQVF6QixNQUFNLE9BQU8sYUFBYTtJQU94QixZQUNVLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBSGxDLHdCQUFtQixHQUFHLElBQUksb0JBQW9CLEVBQUUsQ0FBQztRQWlCMUMsY0FBUyxHQUFHLENBQUMsTUFBZSxFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUNoRCxDQUFDLENBQUE7UUFFTSxlQUFVLEdBQUcsQ0FBQyxNQUFlLEVBQUUsRUFBRTtZQUN0QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztZQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDN0IsQ0FBQyxDQUFBO1FBRU0sZUFBVSxHQUFHLENBQUMsTUFBZSxFQUFFLEVBQUU7WUFDdEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7WUFDN0MsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkgsQ0FBQyxDQUFBO0lBekJHLENBQUM7SUFFTCxRQUFRO1FBQ04sZ0JBQWdCLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDakgsQ0FBQztJQUdELGtCQUFrQixDQUFDLEtBQWE7UUFDOUIsT0FBTyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hFLENBQUM7OztZQXpCRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLFVBQVU7Z0JBQ3BCLDJnQkFBb0M7O2FBRXJDOzs7WUFSdUMsV0FBVzs7O21CQVVoRCxLQUFLO29CQUNMLEtBQUs7bUJBQ0wsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqIEFuZ3VsYXIgKioqKioqKioqKi9cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcblxyXG4vKioqKioqKioqKiBJb25pYyAqKioqKioqKioqL1xyXG5cclxuLyoqKioqKioqKiogUGx1Z2luICoqKioqKioqKiovXHJcblxyXG4vKioqKioqKioqKiBDb21wb25lbnQgJiBTZXJ2aWNlICoqKioqKioqKiovXHJcbmltcG9ydCB7IFxyXG4gIFpDb21wb25lbnQsIFpDb21wb25lbnRIZWxwZXIsXHJcbiAgWkZpZWxkLCBaR3JvdXAsIFpDb21wb25lbnRQcm9wZXJ0aWVzLCBBdXRoU2VydmljZSxcclxufSBmcm9tICdtbWhnbG9iYWwtemNvcmUnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXpkaXYnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi96ZGl2LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi96ZGl2LmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBaZGl2Q29tcG9uZW50IGltcGxlbWVudHMgWkNvbXBvbmVudCwgT25Jbml0IHtcclxuICBASW5wdXQoKSBkYXRhOiBaRmllbGQ7XHJcbiAgQElucHV0KCkgZ3JvdXA6IFpHcm91cDtcclxuICBASW5wdXQoKSBmb3JtOiBGb3JtR3JvdXA7XHJcblxyXG4gIGNvbXBvbmVudFByb3BlcnRpZXMgPSBuZXcgWkNvbXBvbmVudFByb3BlcnRpZXMoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5zZXRDb21wb25lbnRQcm9wZXJ0aWVzKHRoaXMpO1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5yZWdpc3RlckNvbXBvbmVudCh0aGlzKTtcclxuICAgIFpDb21wb25lbnRIZWxwZXIuc2V0RmllbGRzRGl2Q2xhc3ModGhpcy5ncm91cC5fcHJvamVjdE5hbWUsIHRoaXMuZ3JvdXAuZmllbGROYW1lLCB0aGlzLmRhdGEsIHRoaXMuYXV0aFNlcnZpY2UpO1xyXG4gIH1cclxuXHJcblxyXG4gIENvbXBvbmVudElzVmlzaWJsZShmaWVsZDogWkZpZWxkKTogYW55IHtcclxuICAgIHJldHVybiBaQ29tcG9uZW50SGVscGVyLkNvbXBvbmVudElzVmlzaWJsZShmaWVsZCwgdGhpcy5ncm91cCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RW5hYmxlID0gKHN0YXR1czogYm9vbGVhbikgPT4ge1xyXG4gICAgdGhpcy5jb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHkgPSAhc3RhdHVzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFZpc2libGUgPSAoc3RhdHVzOiBib29sZWFuKSA9PiB7XHJcbiAgICB0aGlzLmNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlID0gc3RhdHVzO1xyXG4gICAgdGhpcy5kYXRhLlZpc2libGUgPSBzdGF0dXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0UmVxdWlyZSA9IChzdGF0dXM6IGJvb2xlYW4pID0+IHtcclxuICAgIHRoaXMuY29tcG9uZW50UHJvcGVydGllcy5pc1JlcXVpcmVkID0gc3RhdHVzO1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5jaGFuZ2VWYWxpZGF0b3Ioc3RhdHVzLCB0aGlzLmdyb3VwLCB0aGlzLmRhdGEuVmFsdWUsIHRoaXMuY29tcG9uZW50UHJvcGVydGllcywgVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
@@ -1,27 +0,0 @@
1
- import { Pipe } from '@angular/core';
2
- export class DivzLayout {
3
- transform(items, zlayout) {
4
- if (!items || !zlayout) {
5
- return items;
6
- }
7
- // if got zlayout, in div: 2 = 2 col per row; 3 = 1 col per row;
8
- if (zlayout == "2") {
9
- Object.values(items).forEach(value => {
10
- value['DivClass'] = "col-sm-6";
11
- });
12
- }
13
- else if (zlayout == '3') {
14
- Object.values(items).forEach(value => {
15
- value['DivClass'] = "col-sm-12";
16
- });
17
- }
18
- return items;
19
- }
20
- }
21
- DivzLayout.decorators = [
22
- { type: Pipe, args: [{
23
- name: 'divzlayout',
24
- pure: true
25
- },] }
26
- ];
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemRpdi5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvemRpdi96ZGl2LnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFNcEQsTUFBTSxPQUFPLFVBQVU7SUFDckIsU0FBUyxDQUFDLEtBQVUsRUFBRSxPQUFlO1FBQ25DLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDdEIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELGlFQUFpRTtRQUNqRSxJQUFJLE9BQU8sSUFBSSxHQUFHLEVBQUU7WUFDbEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ25DLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxVQUFVLENBQUM7WUFDakMsQ0FBQyxDQUFDLENBQUM7U0FDSjthQUNJLElBQUksT0FBTyxJQUFJLEdBQUcsRUFBRTtZQUN2QixNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDbkMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLFdBQVcsQ0FBQztZQUNsQyxDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOzs7WUF2QkYsSUFBSSxTQUFDO2dCQUNKLElBQUksRUFBRSxZQUFZO2dCQUNsQixJQUFJLEVBQUUsSUFBSTthQUNYIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQFBpcGUoe1xyXG4gIG5hbWU6ICdkaXZ6bGF5b3V0JyxcclxuICBwdXJlOiB0cnVlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEaXZ6TGF5b3V0IGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XHJcbiAgdHJhbnNmb3JtKGl0ZW1zOiBhbnksIHpsYXlvdXQ6IHN0cmluZyk6IGFueSB7XHJcbiAgICBpZiAoIWl0ZW1zIHx8ICF6bGF5b3V0KSB7XHJcbiAgICAgIHJldHVybiBpdGVtcztcclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiBnb3QgemxheW91dCwgaW4gZGl2OiAyID0gMiBjb2wgcGVyIHJvdzsgMyA9IDEgY29sIHBlciByb3c7IFxyXG4gICAgaWYgKHpsYXlvdXQgPT0gXCIyXCIpIHtcclxuICAgICAgT2JqZWN0LnZhbHVlcyhpdGVtcykuZm9yRWFjaCh2YWx1ZSA9PiB7XHJcbiAgICAgICAgdmFsdWVbJ0RpdkNsYXNzJ10gPSBcImNvbC1zbS02XCI7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoemxheW91dCA9PSAnMycpIHtcclxuICAgICAgT2JqZWN0LnZhbHVlcyhpdGVtcykuZm9yRWFjaCh2YWx1ZSA9PiB7XHJcbiAgICAgICAgdmFsdWVbJ0RpdkNsYXNzJ10gPSBcImNvbC1zbS0xMlwiO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXRlbXM7XHJcbiAgfVxyXG59Il19
@@ -1,148 +0,0 @@
1
- /********** Angular **********/
2
- import { Component, Input } from "@angular/core";
3
- import { FormGroup, FormControl } from "@angular/forms";
4
- /********** Ionic **********/
5
- /********** Plugin **********/
6
- import { of } from 'rxjs';
7
- import { switchMap, delay } from 'rxjs/operators';
8
- /********** Component & Service **********/
9
- import { ZComponentDebugService } from '../services/zcomponent.debug.service';
10
- import { AuthService, FieldService, ZComponentHelper } from 'mmhglobal-zcore';
11
- export class ZformComponent {
12
- // @ViewChild('frm', {static: true}) form: NgForm;
13
- constructor(authService, fieldService, debugService
14
- // private modalService: ModalService,
15
- // private router: Router
16
- ) {
17
- this.authService = authService;
18
- this.fieldService = fieldService;
19
- this.debugService = debugService;
20
- this.isLoading = true;
21
- this.fieldIndex = [];
22
- }
23
- ngOnInit() {
24
- if (!this.fieldName) {
25
- this.onInitNormal();
26
- // this.form = this.toFormGroup(this.group.fields);
27
- // this.group.form = this.form;
28
- // this.fields = this.group.fields;
29
- this.isLoading = false;
30
- }
31
- else {
32
- this.fieldService.getFormFieldCode(this.fieldName, 'FormField', this, 'fields').pipe(switchMap(fieldElements => {
33
- if (this.fieldName === 'debug') {
34
- return this.debugService.onStartDebugger(fieldElements, this);
35
- }
36
- else {
37
- this.group.fields = fieldElements;
38
- this.onInitNormal();
39
- }
40
- }), switchMap(() => {
41
- this.isLoading = false;
42
- if (this.group._isDebugging && this.group._debug.isLoading) {
43
- this.group._debug.isLoading = false;
44
- }
45
- return of([]);
46
- }), delay(500))
47
- .subscribe(() => {
48
- this.debugService.LoadGridData();
49
- this.debugService.loadWorkflowData();
50
- });
51
- }
52
- }
53
- ngOnDestroy() {
54
- if (this.subscription) { // for debugger subscription
55
- this.subscription.unsubscribe();
56
- }
57
- }
58
- getGroup() {
59
- if (this.fieldName !== 'debug') {
60
- return this.group;
61
- }
62
- else {
63
- return this.group._debug;
64
- }
65
- }
66
- onInitNormal() {
67
- this.form = this.toFormGroup(this.group.fields);
68
- this.group.form = this.form;
69
- this.fields = this.group.fields;
70
- ZComponentHelper.setFieldsDivClass(this.group._projectName, this.group.fieldName, this.fields, this.authService);
71
- }
72
- ComponentIsVisible(field) {
73
- return ZComponentHelper.ComponentIsVisible(field, this.group);
74
- }
75
- toFormGroup(fieldElements) {
76
- const formControls = {};
77
- this.getFormControls(fieldElements, formControls);
78
- const newFormGroup = new FormGroup(formControls);
79
- return newFormGroup;
80
- }
81
- addToFieldIndex(field) {
82
- if (!field.Name) {
83
- console.error('Field Name undefined: ', field);
84
- }
85
- if (field.Name && !this.fieldIndex.includes(field.Name)) {
86
- this.fieldIndex.push(field.Name);
87
- }
88
- else {
89
- console.error('Field Name Duplication: ' + field.Name + '; ', field);
90
- }
91
- }
92
- getFormControls(fieldArray, formControls) {
93
- fieldArray.forEach(field => {
94
- this.addToFieldIndex(field);
95
- if (typeof field.Value === "string" && field.Value.indexOf(".") !== -1) {
96
- if (['zgrid', 'ztree', 'zimg', 'textareajson'].indexOf(field.Type) === -1) {
97
- console.warn("FormControl - invalid field value", field.Value);
98
- }
99
- }
100
- else {
101
- if (Array.isArray(field.Value)) {
102
- this.getFormControls(field.Value, formControls);
103
- }
104
- else {
105
- const isFormControl = ZComponentHelper.isFormControl(field);
106
- const isVisible = ZComponentHelper.isVisibleFormControl(this, field);
107
- const isRequired = ZComponentHelper.isRequiredFormControl(this, field);
108
- if (isFormControl === true) {
109
- const validators = ZComponentHelper.getValidators(field, isVisible, isRequired);
110
- formControls[field.Value] = new FormControl(this.group.zModel[field.Value], validators);
111
- if (ZComponentHelper.hasCCField(field.Type)) {
112
- const ccValidators = ZComponentHelper.getCCValidators(field, isVisible, isRequired);
113
- formControls[field.CCValue] = new FormControl(this.group.zModel[field.CCValue], ccValidators);
114
- }
115
- }
116
- }
117
- }
118
- });
119
- }
120
- getReadOnlyValue(field) {
121
- const readOnlyValue = ZComponentHelper.getGroupEvalValue.call(this, field.ReadOnly);
122
- if (typeof readOnlyValue === 'function') {
123
- return readOnlyValue();
124
- }
125
- return readOnlyValue;
126
- }
127
- trackByFn(index, item) {
128
- //return item['Type'] + '-' + item['Name'];
129
- return index;
130
- }
131
- }
132
- ZformComponent.decorators = [
133
- { type: Component, args: [{
134
- selector: "app-zform",
135
- template: "<div class=\"e1-form\">\r\n <!--<div class=\"k-overlay\" *ngIf=\"isLoading\"></div>-->\r\n <form [formGroup]=\"form\" autocomplete=\"off\" *ngIf=\"!isLoading\">\r\n <ion-grid>\r\n <ion-row id=\"dynamic-form-host\" class=\"ion-align-items-start\">\r\n <app-zformcontrol *ngFor=\"let field of fields; trackBy: trackByFn\"\r\n [ngClass]=\"group[field['isVisibleField']] ? field.DivClass :\r\n ((field.Visible === true) ? field.DivClass : 'flex-hide')\"\r\n [field]=\"field\"\r\n [group]=\"getGroup()\"\r\n [form]=\"form\"\r\n id=\"{{field.Type}}-{{field.Name}}\"></app-zformcontrol>\r\n </ion-row>\r\n </ion-grid>\r\n </form>\r\n</div>\r\n",
136
- styles: ["#dynamic-form-host app-zformcontrol{overflow-x:auto;overflow-y:hidden}"]
137
- },] }
138
- ];
139
- ZformComponent.ctorParameters = () => [
140
- { type: AuthService },
141
- { type: FieldService },
142
- { type: ZComponentDebugService }
143
- ];
144
- ZformComponent.propDecorators = {
145
- group: [{ type: Input }],
146
- fieldName: [{ type: Input }]
147
- };
148
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvemZvcm0vemZvcm0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUNwRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBZSxNQUFNLGdCQUFnQixDQUFDO0FBRXJFLDZCQUE2QjtBQUU3Qiw4QkFBOEI7QUFDOUIsT0FBTyxFQUFFLEVBQUUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDeEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVsRCwyQ0FBMkM7QUFDM0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQWtCLE1BQU0saUJBQWlCLENBQUM7QUFROUYsTUFBTSxPQUFPLGNBQWM7SUFRekIsa0RBQWtEO0lBRWxELFlBQ1UsV0FBd0IsRUFDeEIsWUFBMEIsRUFDMUIsWUFBb0M7SUFDNUMsc0NBQXNDO0lBQ3RDLHlCQUF5Qjs7UUFKakIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsaUJBQVksR0FBWixZQUFZLENBQXdCO1FBUjlDLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFFakIsZUFBVSxHQUFHLEVBQUUsQ0FBQztJQVNaLENBQUM7SUFFTCxRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLG1EQUFtRDtZQUNuRCwrQkFBK0I7WUFDL0IsbUNBQW1DO1lBQ25DLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1NBQ3hCO2FBQU07WUFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQ2xGLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRTtnQkFDeEIsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLE9BQU8sRUFBRTtvQkFDOUIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7aUJBQy9EO3FCQUFNO29CQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLGFBQWEsQ0FBQztvQkFDbEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2lCQUNyQjtZQUNILENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Z0JBQ3ZCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO29CQUMxRCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO2lCQUNyQztnQkFDRCxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoQixDQUFDLENBQUMsRUFDRixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ1YsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDdkMsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUcsNEJBQTRCO1lBQ3BELElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDakM7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxPQUFPLEVBQUU7WUFDOUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO1NBQ25CO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1NBQzFCO0lBQ0gsQ0FBQztJQUVPLFlBQVk7UUFDbEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUM1QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQ2hDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ25ILENBQUM7SUFHRCxrQkFBa0IsQ0FBQyxLQUFhO1FBQzlCLE9BQU8sZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRU8sV0FBVyxDQUFDLGFBQTRCO1FBQzlDLE1BQU0sWUFBWSxHQUFtQyxFQUFFLENBQUM7UUFDeEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDbEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDakQsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVPLGVBQWUsQ0FBQyxLQUFhO1FBQ25DLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNoRDtRQUNELElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN2RCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbEM7YUFBTTtZQUNMLE9BQU8sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLEdBQUcsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDdkU7SUFDSCxDQUFDO0lBR08sZUFBZSxDQUNyQixVQUF5QixFQUN6QixZQUE0QztRQUU1QyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUN0RSxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtvQkFDekUsT0FBTyxDQUFDLElBQUksQ0FBQyxtQ0FBbUMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ2hFO2FBQ0Y7aUJBQU07Z0JBQ0wsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDOUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO2lCQUNqRDtxQkFBTTtvQkFDTCxNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQzVELE1BQU0sU0FBUyxHQUFHLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDckUsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUN2RSxJQUFJLGFBQWEsS0FBSyxJQUFJLEVBQUU7d0JBQzFCLE1BQU0sVUFBVSxHQUFrQixnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQzt3QkFDL0YsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FDekMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLFVBQVUsQ0FDM0MsQ0FBQzt3QkFDRixJQUFJLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7NEJBQzNDLE1BQU0sWUFBWSxHQUFrQixnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQzs0QkFDbkcsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FDM0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUNoQyxZQUFZLENBQ2IsQ0FBQzt5QkFDSDtxQkFDRjtpQkFDRjthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsS0FBYTtRQUNwQyxNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwRixJQUFJLE9BQU8sYUFBYSxLQUFLLFVBQVUsRUFBRTtZQUN2QyxPQUFPLGFBQWEsRUFBRSxDQUFDO1NBQ3hCO1FBQ0QsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFhLEVBQUUsSUFBSTtRQUMzQiwyQ0FBMkM7UUFDM0MsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOzs7WUFsSkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxXQUFXO2dCQUNyQix5ekJBQXFDOzthQUV0Qzs7O1lBUFEsV0FBVztZQUFFLFlBQVk7WUFEekIsc0JBQXNCOzs7b0JBVTVCLEtBQUs7d0JBQ0wsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqIEFuZ3VsYXIgKioqKioqKioqKi9cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPbkRlc3Ryb3kgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1Db250cm9sLCBWYWxpZGF0b3JGbiB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuXHJcbi8qKioqKioqKioqIFBsdWdpbiAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBvZiwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHN3aXRjaE1hcCwgZGVsYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG4vKioqKioqKioqKiBDb21wb25lbnQgJiBTZXJ2aWNlICoqKioqKioqKiovXHJcbmltcG9ydCB7IFpDb21wb25lbnREZWJ1Z1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy96Y29tcG9uZW50LmRlYnVnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSwgRmllbGRTZXJ2aWNlLCBaQ29tcG9uZW50SGVscGVyLCBaR3JvdXAsIFpGaWVsZCB9IGZyb20gJ21taGdsb2JhbC16Y29yZSc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiYXBwLXpmb3JtXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi96Zm9ybS5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi96Zm9ybS5jb21wb25lbnQuc2Nzc1wiXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgWmZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KCkgZ3JvdXA6IFpHcm91cDtcclxuICBASW5wdXQoKSBmaWVsZE5hbWU6IHN0cmluZztcclxuICBmb3JtOiBGb3JtR3JvdXA7XHJcbiAgZmllbGRzOiBBcnJheTxaRmllbGQ+O1xyXG4gIGlzTG9hZGluZyA9IHRydWU7XHJcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgZmllbGRJbmRleCA9IFtdO1xyXG4gIC8vIEBWaWV3Q2hpbGQoJ2ZybScsIHtzdGF0aWM6IHRydWV9KSBmb3JtOiBOZ0Zvcm07XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGZpZWxkU2VydmljZTogRmllbGRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkZWJ1Z1NlcnZpY2U6IFpDb21wb25lbnREZWJ1Z1NlcnZpY2VcclxuICAgIC8vIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXHJcbiAgICAvLyBwcml2YXRlIHJvdXRlcjogUm91dGVyXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAoIXRoaXMuZmllbGROYW1lKSB7XHJcbiAgICAgIHRoaXMub25Jbml0Tm9ybWFsKCk7XHJcbiAgICAgIC8vIHRoaXMuZm9ybSA9IHRoaXMudG9Gb3JtR3JvdXAodGhpcy5ncm91cC5maWVsZHMpO1xyXG4gICAgICAvLyB0aGlzLmdyb3VwLmZvcm0gPSB0aGlzLmZvcm07XHJcbiAgICAgIC8vIHRoaXMuZmllbGRzID0gdGhpcy5ncm91cC5maWVsZHM7XHJcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpZWxkU2VydmljZS5nZXRGb3JtRmllbGRDb2RlKHRoaXMuZmllbGROYW1lLCAnRm9ybUZpZWxkJywgdGhpcywgJ2ZpZWxkcycpLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKGZpZWxkRWxlbWVudHMgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMuZmllbGROYW1lID09PSAnZGVidWcnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlYnVnU2VydmljZS5vblN0YXJ0RGVidWdnZXIoZmllbGRFbGVtZW50cywgdGhpcyk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmdyb3VwLmZpZWxkcyA9IGZpZWxkRWxlbWVudHM7XHJcbiAgICAgICAgICAgIHRoaXMub25Jbml0Tm9ybWFsKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAodGhpcy5ncm91cC5faXNEZWJ1Z2dpbmcgJiYgdGhpcy5ncm91cC5fZGVidWcuaXNMb2FkaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXAuX2RlYnVnLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBkZWxheSg1MDApKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5kZWJ1Z1NlcnZpY2UuTG9hZEdyaWREYXRhKCk7XHJcbiAgICAgICAgICB0aGlzLmRlYnVnU2VydmljZS5sb2FkV29ya2Zsb3dEYXRhKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikgeyAgLy8gZm9yIGRlYnVnZ2VyIHN1YnNjcmlwdGlvblxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0R3JvdXAoKSB7XHJcbiAgICBpZiAodGhpcy5maWVsZE5hbWUgIT09ICdkZWJ1ZycpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ3JvdXA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5ncm91cC5fZGVidWc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uSW5pdE5vcm1hbCgpIHtcclxuICAgIHRoaXMuZm9ybSA9IHRoaXMudG9Gb3JtR3JvdXAodGhpcy5ncm91cC5maWVsZHMpO1xyXG4gICAgdGhpcy5ncm91cC5mb3JtID0gdGhpcy5mb3JtO1xyXG4gICAgdGhpcy5maWVsZHMgPSB0aGlzLmdyb3VwLmZpZWxkcztcclxuICAgIFpDb21wb25lbnRIZWxwZXIuc2V0RmllbGRzRGl2Q2xhc3ModGhpcy5ncm91cC5fcHJvamVjdE5hbWUsIHRoaXMuZ3JvdXAuZmllbGROYW1lLCB0aGlzLmZpZWxkcywgdGhpcy5hdXRoU2VydmljZSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgQ29tcG9uZW50SXNWaXNpYmxlKGZpZWxkOiBaRmllbGQpOiBhbnkge1xyXG4gICAgcmV0dXJuIFpDb21wb25lbnRIZWxwZXIuQ29tcG9uZW50SXNWaXNpYmxlKGZpZWxkLCB0aGlzLmdyb3VwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdG9Gb3JtR3JvdXAoZmllbGRFbGVtZW50czogQXJyYXk8WkZpZWxkPikge1xyXG4gICAgY29uc3QgZm9ybUNvbnRyb2xzOiB7IFtrZXk6IHN0cmluZ106IEZvcm1Db250cm9sIH0gPSB7fTtcclxuICAgIHRoaXMuZ2V0Rm9ybUNvbnRyb2xzKGZpZWxkRWxlbWVudHMsIGZvcm1Db250cm9scyk7XHJcbiAgICBjb25zdCBuZXdGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKGZvcm1Db250cm9scyk7XHJcbiAgICByZXR1cm4gbmV3Rm9ybUdyb3VwO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGRUb0ZpZWxkSW5kZXgoZmllbGQ6IFpGaWVsZCkge1xyXG4gICAgaWYgKCFmaWVsZC5OYW1lKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZpZWxkIE5hbWUgdW5kZWZpbmVkOiAnLCBmaWVsZCk7XHJcbiAgICB9XHJcbiAgICBpZiAoZmllbGQuTmFtZSAmJiAhdGhpcy5maWVsZEluZGV4LmluY2x1ZGVzKGZpZWxkLk5hbWUpKSB7XHJcbiAgICAgIHRoaXMuZmllbGRJbmRleC5wdXNoKGZpZWxkLk5hbWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRmllbGQgTmFtZSBEdXBsaWNhdGlvbjogJyArIGZpZWxkLk5hbWUgKyAnOyAgJywgZmllbGQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgZ2V0Rm9ybUNvbnRyb2xzKFxyXG4gICAgZmllbGRBcnJheTogQXJyYXk8WkZpZWxkPixcclxuICAgIGZvcm1Db250cm9sczogeyBba2V5OiBzdHJpbmddOiBGb3JtQ29udHJvbCB9XHJcbiAgKSB7XHJcbiAgICBmaWVsZEFycmF5LmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICB0aGlzLmFkZFRvRmllbGRJbmRleChmaWVsZCk7XHJcbiAgICAgIGlmICh0eXBlb2YgZmllbGQuVmFsdWUgPT09IFwic3RyaW5nXCIgJiYgZmllbGQuVmFsdWUuaW5kZXhPZihcIi5cIikgIT09IC0xKSB7XHJcbiAgICAgICAgaWYgKFsnemdyaWQnLCAnenRyZWUnLCAnemltZycsICd0ZXh0YXJlYWpzb24nXS5pbmRleE9mKGZpZWxkLlR5cGUpID09PSAtMSkge1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKFwiRm9ybUNvbnRyb2wgLSBpbnZhbGlkIGZpZWxkIHZhbHVlXCIsIGZpZWxkLlZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmllbGQuVmFsdWUpKSB7XHJcbiAgICAgICAgICB0aGlzLmdldEZvcm1Db250cm9scyhmaWVsZC5WYWx1ZSwgZm9ybUNvbnRyb2xzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgaXNGb3JtQ29udHJvbCA9IFpDb21wb25lbnRIZWxwZXIuaXNGb3JtQ29udHJvbChmaWVsZCk7XHJcbiAgICAgICAgICBjb25zdCBpc1Zpc2libGUgPSBaQ29tcG9uZW50SGVscGVyLmlzVmlzaWJsZUZvcm1Db250cm9sKHRoaXMsIGZpZWxkKTtcclxuICAgICAgICAgIGNvbnN0IGlzUmVxdWlyZWQgPSBaQ29tcG9uZW50SGVscGVyLmlzUmVxdWlyZWRGb3JtQ29udHJvbCh0aGlzLCBmaWVsZCk7XHJcbiAgICAgICAgICBpZiAoaXNGb3JtQ29udHJvbCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gWkNvbXBvbmVudEhlbHBlci5nZXRWYWxpZGF0b3JzKGZpZWxkLCBpc1Zpc2libGUsIGlzUmVxdWlyZWQpO1xyXG4gICAgICAgICAgICBmb3JtQ29udHJvbHNbZmllbGQuVmFsdWVdID0gbmV3IEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXAuek1vZGVsW2ZpZWxkLlZhbHVlXSwgdmFsaWRhdG9yc1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoWkNvbXBvbmVudEhlbHBlci5oYXNDQ0ZpZWxkKGZpZWxkLlR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgY2NWYWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gWkNvbXBvbmVudEhlbHBlci5nZXRDQ1ZhbGlkYXRvcnMoZmllbGQsIGlzVmlzaWJsZSwgaXNSZXF1aXJlZCk7XHJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xzW2ZpZWxkLkNDVmFsdWVdID0gbmV3IEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cC56TW9kZWxbZmllbGQuQ0NWYWx1ZV0sXHJcbiAgICAgICAgICAgICAgICBjY1ZhbGlkYXRvcnNcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UmVhZE9ubHlWYWx1ZShmaWVsZDogWkZpZWxkKSB7XHJcbiAgICBjb25zdCByZWFkT25seVZhbHVlID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIGZpZWxkLlJlYWRPbmx5KTtcclxuICAgIGlmICh0eXBlb2YgcmVhZE9ubHlWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICByZXR1cm4gcmVhZE9ubHlWYWx1ZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlYWRPbmx5VmFsdWU7XHJcbiAgfVxyXG5cclxuICB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgaXRlbSk6IG51bWJlciB7XHJcbiAgICAvL3JldHVybiBpdGVtWydUeXBlJ10gKyAnLScgKyBpdGVtWydOYW1lJ107XHJcbiAgICByZXR1cm4gaW5kZXg7XHJcbiAgfVxyXG5cclxuICAvLyBwcml2YXRlIGdldFZhbHVlKGZpZWxkOiBaRmllbGQpIHtcclxuICAvLyAgIGlmIChmaWVsZC5UeXBlLmluZGV4T2YoJ2RhdGUnKSAhPT0gLTEpIHtcclxuICAvLyAgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMuZ3JvdXAuek1vZGVsW2ZpZWxkLlZhbHVlXSk7XHJcbiAgLy8gICB9IGVsc2Uge1xyXG4gIC8vICAgICByZXR1cm4gdGhpcy5ncm91cC56TW9kZWxbZmllbGQuVmFsdWVdO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxufVxyXG4iXX0=