@mediusinc/mng-commons 6.0.0-rc.5 → 6.0.0-rc.6

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 (386) hide show
  1. package/core/components/notification/notification-wrapper.component.d.ts +4 -4
  2. package/core/error/error.model.d.ts +4 -4
  3. package/core/helpers/notification.d.ts +2 -2
  4. package/core/provide.d.ts +3 -3
  5. package/core/styles/style-constants.d.ts +9 -8
  6. package/core/styles/style.model.d.ts +2 -1
  7. package/fesm2022/mediusinc-mng-commons-core.mjs +91 -104
  8. package/fesm2022/mediusinc-mng-commons-core.mjs.map +1 -1
  9. package/fesm2022/mediusinc-mng-commons-form-api.mjs +8 -9
  10. package/fesm2022/mediusinc-mng-commons-form-api.mjs.map +1 -1
  11. package/fesm2022/mediusinc-mng-commons-form.mjs +149 -49
  12. package/fesm2022/mediusinc-mng-commons-form.mjs.map +1 -1
  13. package/fesm2022/mediusinc-mng-commons-table-column-toggle.component-DTSBP9WQ.mjs +31 -0
  14. package/fesm2022/mediusinc-mng-commons-table-column-toggle.component-DTSBP9WQ.mjs.map +1 -0
  15. package/fesm2022/mediusinc-mng-commons-table-mediusinc-mng-commons-table-JZpyiDIL.mjs +2118 -0
  16. package/fesm2022/mediusinc-mng-commons-table-mediusinc-mng-commons-table-JZpyiDIL.mjs.map +1 -0
  17. package/fesm2022/mediusinc-mng-commons-table.mjs +1 -2154
  18. package/fesm2022/mediusinc-mng-commons-table.mjs.map +1 -1
  19. package/fesm2022/mediusinc-mng-commons-tableview-api.mjs +97 -49
  20. package/fesm2022/mediusinc-mng-commons-tableview-api.mjs.map +1 -1
  21. package/fesm2022/mediusinc-mng-commons-tableview.mjs +326 -290
  22. package/fesm2022/mediusinc-mng-commons-tableview.mjs.map +1 -1
  23. package/fesm2022/mediusinc-mng-commons.mjs.map +1 -1
  24. package/form/api/index.d.ts +1 -0
  25. package/form/api/models/empty-value.model.d.ts +7 -0
  26. package/form/components/autocomplete/autocomplete.component.d.ts +1 -2
  27. package/form/components/date-range/date-range.component.d.ts +4 -3
  28. package/form/components/dropdown/dropdown.component.d.ts +3 -2
  29. package/form/components/number-range/number-range.component.d.ts +3 -2
  30. package/form/directives/input-empty-value.directive.d.ts +40 -0
  31. package/form/directives/input-trim.directive.d.ts +3 -5
  32. package/form/index.d.ts +1 -0
  33. package/i18n/en.json +57 -8
  34. package/i18n/sl.json +1 -3
  35. package/package.json +16 -42
  36. package/provide.d.ts +2 -2
  37. package/table/components/column-toggle/column-toggle.component.d.ts +12 -0
  38. package/table/components/filter/filter-form/filter-form.component.d.ts +2 -2
  39. package/table/components/table/table.component.d.ts +0 -1
  40. package/table/helpers/filters.d.ts +3 -2
  41. package/table/helpers/notification.d.ts +2 -2
  42. package/table/services/table-metadata.service.d.ts +3 -3
  43. package/tableview/action/components/action/action.component.d.ts +1 -0
  44. package/tableview/action/components/editor/action-editor.component.d.ts +1 -1
  45. package/tableview/action/components/table/action-table.component.d.ts +2 -1
  46. package/tableview/action/helpers/notification.d.ts +3 -3
  47. package/tableview/action/models/execution/action-context.model.d.ts +2 -2
  48. package/tableview/action/services/action-executor.service.d.ts +1 -1
  49. package/tableview/api/action/models/execution/action-context.model.d.ts +2 -2
  50. package/tableview/api/editor/descriptors/editor.descriptor.d.ts +5 -0
  51. package/tableview/api/editor/descriptors/field-base.descriptor.d.ts +14 -10
  52. package/tableview/api/editor/descriptors/field-group.descriptor.d.ts +10 -0
  53. package/tableview/api/editor/descriptors/field.descriptor.d.ts +36 -9
  54. package/tableview/api/editor/descriptors/wrappers/editor-descriptor-nested-object-wrapper.d.ts +1 -1
  55. package/tableview/api/editor/models/field-action-context.model.d.ts +1 -1
  56. package/tableview/api/editor/models/field.model.d.ts +1 -2
  57. package/tableview/api/editor/models/form-editor.interface.d.ts +2 -2
  58. package/tableview/api/editor/models/formly-custom-field.model.d.ts +1 -1
  59. package/tableview/api/editor/models/formly-field.model.d.ts +2 -2
  60. package/tableview/editor/components/editor/form-editor.component.d.ts +2 -2
  61. package/tableview/editor/components/formly/fields/formly-field-action/formly-field-action.component.d.ts +1 -1
  62. package/tableview/editor/components/formly/fields/formly-field-datepicker/formly-field-datepicker.component.d.ts +2 -1
  63. package/tableview/editor/components/formly/fields/formly-field-fieldset/formly-field-fieldset.component.d.ts +4 -6
  64. package/tableview/editor/components/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.d.ts +0 -2
  65. package/tableview/editor/components/formly/fields/formly-field-tabs/formly-field-tabs.component.d.ts +2 -2
  66. package/tableview/editor/components/formly/fields/formly-field-type.abstract.component.d.ts +8 -15
  67. package/tableview/editor/components/formly/fields/formly-group-type.abstract.component.d.ts +7 -0
  68. package/tableview/editor/components/formly/fields/formly-type.abstract.component.d.ts +20 -0
  69. package/tableview/editor/components/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.d.ts +11 -4
  70. package/tableview/editor/components/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.d.ts +2 -1
  71. package/tableview/editor/helpers/formly-config.d.ts +1 -1
  72. package/tableview/editor/helpers/notification.d.ts +3 -3
  73. package/tableview/editor/models/formly-config.model.d.ts +10 -1
  74. package/tableview/editor/models/formly.model.d.ts +23 -0
  75. package/tableview/editor/services/form-editor.service.d.ts +2 -2
  76. package/tableview/tableview/router/tableview-route-builder.d.ts +10 -3
  77. package/tableview/tableview/services/tableview-feature-config.token.d.ts +1 -1
  78. package/version-info.json +3 -3
  79. package/esm2022/core/action/action-data.model.mjs +0 -2
  80. package/esm2022/core/action/action-parameters.model.mjs +0 -2
  81. package/esm2022/core/components/notification/notification-wrapper.component.mjs +0 -50
  82. package/esm2022/core/data-list/data-list-params-helpers.mjs +0 -465
  83. package/esm2022/core/data-list/data-list.model.mjs +0 -2
  84. package/esm2022/core/data-list/filter-match.model.mjs +0 -105
  85. package/esm2022/core/data-list/filter-metadata.model.mjs +0 -2
  86. package/esm2022/core/data-providers/base.data-provider.mjs +0 -16
  87. package/esm2022/core/data-providers/lookup.data-provider.mjs +0 -2
  88. package/esm2022/core/descriptors/action.descriptor.mjs +0 -2
  89. package/esm2022/core/descriptors/column.descriptor.mjs +0 -2
  90. package/esm2022/core/descriptors/editor.descriptor.mjs +0 -2
  91. package/esm2022/core/descriptors/enum.descriptor.mjs +0 -2
  92. package/esm2022/core/descriptors/filter.descriptor.mjs +0 -2
  93. package/esm2022/core/descriptors/lookup.descriptor.mjs +0 -2
  94. package/esm2022/core/descriptors/model.descriptor.mjs +0 -2
  95. package/esm2022/core/descriptors/table.descriptor.mjs +0 -2
  96. package/esm2022/core/descriptors/tableview.descriptor.mjs +0 -2
  97. package/esm2022/core/directives/component.directive.mjs +0 -75
  98. package/esm2022/core/directives/rerender.directive.mjs +0 -25
  99. package/esm2022/core/directives/template.directive.mjs +0 -29
  100. package/esm2022/core/enum/enum-helpers.mjs +0 -90
  101. package/esm2022/core/enum/enum.model.mjs +0 -2
  102. package/esm2022/core/error/error-handler.mjs +0 -20
  103. package/esm2022/core/error/error-helpers.mjs +0 -273
  104. package/esm2022/core/error/error.model.mjs +0 -33
  105. package/esm2022/core/helpers/coercion.mjs +0 -55
  106. package/esm2022/core/helpers/date.mjs +0 -119
  107. package/esm2022/core/helpers/notification.mjs +0 -21
  108. package/esm2022/core/helpers/number.mjs +0 -19
  109. package/esm2022/core/helpers/object.mjs +0 -152
  110. package/esm2022/core/helpers/route.mjs +0 -58
  111. package/esm2022/core/helpers/string.mjs +0 -57
  112. package/esm2022/core/helpers/templates.mjs +0 -4
  113. package/esm2022/core/helpers/type-helpers.mjs +0 -2
  114. package/esm2022/core/i18n/i18n-common.mjs +0 -24
  115. package/esm2022/core/i18n/i18n-error.mjs +0 -29
  116. package/esm2022/core/i18n/i18n-type.mjs +0 -46
  117. package/esm2022/core/index.mjs +0 -107
  118. package/esm2022/core/log/log-publisher-console.service.mjs +0 -40
  119. package/esm2022/core/log/log.model.mjs +0 -10
  120. package/esm2022/core/log/logger.service.mjs +0 -131
  121. package/esm2022/core/mediusinc-mng-commons-core.mjs +0 -5
  122. package/esm2022/core/models/class-attribute.model.mjs +0 -2
  123. package/esm2022/core/models/class-service.model.mjs +0 -2
  124. package/esm2022/core/models/getter.model.mjs +0 -2
  125. package/esm2022/core/models/i18n.model.mjs +0 -2
  126. package/esm2022/core/models/menu.model.mjs +0 -2
  127. package/esm2022/core/models/user.model.mjs +0 -2
  128. package/esm2022/core/models/version.model.mjs +0 -2
  129. package/esm2022/core/pipes/boolean.pipe.mjs +0 -34
  130. package/esm2022/core/pipes/class-map.pipe.mjs +0 -23
  131. package/esm2022/core/pipes/enum.pipe.mjs +0 -38
  132. package/esm2022/core/pipes/enumerate-async.pipe.mjs +0 -36
  133. package/esm2022/core/pipes/enumerate.pipe.mjs +0 -49
  134. package/esm2022/core/pipes/getter.pipe.mjs +0 -21
  135. package/esm2022/core/pipes/i18n-property.pipe.mjs +0 -19
  136. package/esm2022/core/pipes/json-path.pipe.mjs +0 -25
  137. package/esm2022/core/pipes/parametrize.pipe.mjs +0 -86
  138. package/esm2022/core/pipes/template.pipe.mjs +0 -25
  139. package/esm2022/core/provide.mjs +0 -79
  140. package/esm2022/core/reactivity/effect.mjs +0 -22
  141. package/esm2022/core/reflect/type-enum-decorator.mjs +0 -12
  142. package/esm2022/core/reflect/type-enum-metadata.mjs +0 -62
  143. package/esm2022/core/registry/registry.model.mjs +0 -2
  144. package/esm2022/core/registry/type-registry.mjs +0 -106
  145. package/esm2022/core/router/route-builder.mjs +0 -431
  146. package/esm2022/core/router/router.model.mjs +0 -2
  147. package/esm2022/core/router/routes-builder.mjs +0 -52
  148. package/esm2022/core/rxjs/map-data-list-result-operator.mjs +0 -22
  149. package/esm2022/core/security/permission-helpers.mjs +0 -14
  150. package/esm2022/core/security/permission.guard.mjs +0 -15
  151. package/esm2022/core/security/permission.service.mjs +0 -101
  152. package/esm2022/core/security/permissions.model.mjs +0 -93
  153. package/esm2022/core/services/commons-configuration.service.mjs +0 -189
  154. package/esm2022/core/services/commons-init.service.mjs +0 -111
  155. package/esm2022/core/services/commons-router.service.mjs +0 -181
  156. package/esm2022/core/services/commons-storage.service.mjs +0 -31
  157. package/esm2022/core/services/commons.service.mjs +0 -324
  158. package/esm2022/core/services/providers/commons-init.provider.mjs +0 -4
  159. package/esm2022/core/services/tokens/browser-storage.token.mjs +0 -3
  160. package/esm2022/core/services/tokens/commons-init.token.mjs +0 -3
  161. package/esm2022/core/services/tokens/log-publisher.token.mjs +0 -3
  162. package/esm2022/core/services/tokens/module-config.token.mjs +0 -3
  163. package/esm2022/core/styles/style-constants.mjs +0 -11
  164. package/esm2022/core/styles/style.model.mjs +0 -20
  165. package/esm2022/filter/descriptors/filter-generic.descriptor.mjs +0 -31
  166. package/esm2022/filter/descriptors/filter-lookup.descriptor.mjs +0 -168
  167. package/esm2022/filter/descriptors/filter.descriptor.mjs +0 -421
  168. package/esm2022/filter/index.mjs +0 -8
  169. package/esm2022/filter/mediusinc-mng-commons-filter.mjs +0 -5
  170. package/esm2022/filter/models/filter-generic-property.model.mjs +0 -2
  171. package/esm2022/filter/models/filter.model.mjs +0 -20
  172. package/esm2022/form/api/data-providers/lookup-data-provider.factory.mjs +0 -15
  173. package/esm2022/form/api/data-providers/lookup.data-provider.mjs +0 -15
  174. package/esm2022/form/api/descriptors/action-button.descriptor.mjs +0 -56
  175. package/esm2022/form/api/descriptors/button-style.builder.mjs +0 -153
  176. package/esm2022/form/api/index.mjs +0 -10
  177. package/esm2022/form/api/mediusinc-mng-commons-form-api.mjs +0 -5
  178. package/esm2022/form/api/models/button.model.mjs +0 -2
  179. package/esm2022/form/api/models/trim.model.mjs +0 -2
  180. package/esm2022/form/components/autocomplete/autocomplete.component.mjs +0 -436
  181. package/esm2022/form/components/date-range/date-range.component.mjs +0 -147
  182. package/esm2022/form/components/dropdown/dropdown.component.mjs +0 -372
  183. package/esm2022/form/components/number-range/number-range.component.mjs +0 -123
  184. package/esm2022/form/directives/input-trim.directive.mjs +0 -50
  185. package/esm2022/form/index.mjs +0 -8
  186. package/esm2022/form/mediusinc-mng-commons-form.mjs +0 -5
  187. package/esm2022/index.mjs +0 -2
  188. package/esm2022/mediusinc-mng-commons.mjs +0 -5
  189. package/esm2022/model/class/data-providers/base-from-class-data-provider.factory.mjs +0 -5
  190. package/esm2022/model/class/descriptors/model-class.descriptor.mjs +0 -28
  191. package/esm2022/model/class/descriptors/type-class.descriptor.mjs +0 -6
  192. package/esm2022/model/class/helpers/model.mjs +0 -53
  193. package/esm2022/model/class/index.mjs +0 -8
  194. package/esm2022/model/class/mediusinc-mng-commons-model-class.mjs +0 -5
  195. package/esm2022/model/data-providers/base-from-type-data-provider.factory.mjs +0 -13
  196. package/esm2022/model/descriptors/enum.descriptor.mjs +0 -28
  197. package/esm2022/model/descriptors/model.descriptor.mjs +0 -53
  198. package/esm2022/model/descriptors/type.descriptor.mjs +0 -7
  199. package/esm2022/model/helpers/i18n.mjs +0 -47
  200. package/esm2022/model/index.mjs +0 -9
  201. package/esm2022/model/mediusinc-mng-commons-model.mjs +0 -5
  202. package/esm2022/provide.mjs +0 -6
  203. package/esm2022/table/api/class/class-table-attribute-converter.mjs +0 -80
  204. package/esm2022/table/api/class/class-table-attribute.model.mjs +0 -2
  205. package/esm2022/table/api/class/class-table-data-provider.factory.mjs +0 -5
  206. package/esm2022/table/api/class/class-table-descriptor-helpers.mjs +0 -99
  207. package/esm2022/table/api/class/class-table-descriptor.factory.mjs +0 -21
  208. package/esm2022/table/api/class/index.mjs +0 -6
  209. package/esm2022/table/api/class/mediusinc-mng-commons-table-api-class.mjs +0 -5
  210. package/esm2022/table/api/data-providers/table-data-provider.factory.mjs +0 -15
  211. package/esm2022/table/api/data-providers/table.data-provider.mjs +0 -33
  212. package/esm2022/table/api/descriptors/column.descriptor.mjs +0 -475
  213. package/esm2022/table/api/descriptors/sort.descriptor.mjs +0 -67
  214. package/esm2022/table/api/descriptors/table-descriptor.factory.mjs +0 -22
  215. package/esm2022/table/api/descriptors/table.descriptor.mjs +0 -1116
  216. package/esm2022/table/api/helpers/column-converter.mjs +0 -25
  217. package/esm2022/table/api/helpers/table-data-provider-descriptor-convert.mjs +0 -7
  218. package/esm2022/table/api/index.mjs +0 -19
  219. package/esm2022/table/api/mediusinc-mng-commons-table-api.mjs +0 -5
  220. package/esm2022/table/api/models/column-value.model.mjs +0 -2
  221. package/esm2022/table/api/models/column.model.mjs +0 -21
  222. package/esm2022/table/api/models/row-expandable-component.model.mjs +0 -2
  223. package/esm2022/table/api/models/table-columns.model.mjs +0 -2
  224. package/esm2022/table/api/models/table-event.model.mjs +0 -2
  225. package/esm2022/table/api/models/table.model.mjs +0 -21
  226. package/esm2022/table/components/column-filter/column-filter.component.mjs +0 -389
  227. package/esm2022/table/components/column-value/column-value.component.mjs +0 -78
  228. package/esm2022/table/components/filter/filter-active-tag/filter-active-tag.component.mjs +0 -55
  229. package/esm2022/table/components/filter/filter-form/filter-form.component.mjs +0 -226
  230. package/esm2022/table/components/filter/filter-overlay-with-tag/filter-overlay-with-tag.component.mjs +0 -219
  231. package/esm2022/table/components/table/table.component.mjs +0 -319
  232. package/esm2022/table/helpers/filters.mjs +0 -312
  233. package/esm2022/table/helpers/notification.mjs +0 -21
  234. package/esm2022/table/helpers/table-layout-prefs.mjs +0 -10
  235. package/esm2022/table/helpers/table.mjs +0 -24
  236. package/esm2022/table/index.mjs +0 -24
  237. package/esm2022/table/mediusinc-mng-commons-table.mjs +0 -5
  238. package/esm2022/table/models/column-preferences.model.mjs +0 -2
  239. package/esm2022/table/models/filter.model.mjs +0 -2
  240. package/esm2022/table/pipes/filter-value.pipe.mjs +0 -77
  241. package/esm2022/table/pipes/locale-default-row-class.pipe.mjs +0 -27
  242. package/esm2022/table/pipes/table-column-filter-class.pipe.mjs +0 -25
  243. package/esm2022/table/provide.mjs +0 -19
  244. package/esm2022/table/services/table-data.service.mjs +0 -194
  245. package/esm2022/table/services/table-feature-config.token.mjs +0 -3
  246. package/esm2022/table/services/table-metadata.service.mjs +0 -136
  247. package/esm2022/table/services/table-preferences.service.mjs +0 -142
  248. package/esm2022/tableview/action/components/action/action.component.mjs +0 -277
  249. package/esm2022/tableview/action/components/editor/action-editor.component.mjs +0 -86
  250. package/esm2022/tableview/action/components/editor/injector-context/action-editor-injector-context.component.mjs +0 -428
  251. package/esm2022/tableview/action/components/localization/data-language-dropdown.component.mjs +0 -35
  252. package/esm2022/tableview/action/components/route/action-route.component.mjs +0 -146
  253. package/esm2022/tableview/action/components/table/action-table.component.mjs +0 -102
  254. package/esm2022/tableview/action/guards/unsaved-changes.guard.mjs +0 -4
  255. package/esm2022/tableview/action/helpers/action-execution.mjs +0 -25
  256. package/esm2022/tableview/action/helpers/i18n.mjs +0 -102
  257. package/esm2022/tableview/action/helpers/notification.mjs +0 -78
  258. package/esm2022/tableview/action/helpers/styles.mjs +0 -32
  259. package/esm2022/tableview/action/models/action-editor-dialog-data.model.mjs +0 -2
  260. package/esm2022/tableview/action/models/can-component-deactivate.model.mjs +0 -2
  261. package/esm2022/tableview/action/models/execution/action-context.model.mjs +0 -64
  262. package/esm2022/tableview/action/models/execution/action-instance.model.mjs +0 -169
  263. package/esm2022/tableview/action/services/action-error-mapper.service.mjs +0 -20
  264. package/esm2022/tableview/action/services/action-executor.service.mjs +0 -772
  265. package/esm2022/tableview/action/services/component-action-executor.service.mjs +0 -19
  266. package/esm2022/tableview/action/services/data-provider-executor.service.mjs +0 -41
  267. package/esm2022/tableview/action/services/navigation.service.mjs +0 -53
  268. package/esm2022/tableview/action/services/providers/provide-action-executor.mjs +0 -9
  269. package/esm2022/tableview/action/services/providers/provide-view-container.mjs +0 -17
  270. package/esm2022/tableview/action/services/root-action-executor.service.mjs +0 -18
  271. package/esm2022/tableview/action/services/tokens/action-editor.token.mjs +0 -3
  272. package/esm2022/tableview/action/services/view-container.service.mjs +0 -40
  273. package/esm2022/tableview/api/action/descriptors/action-descriptor.factory.mjs +0 -28
  274. package/esm2022/tableview/api/action/descriptors/action-editor-descriptor.factory.mjs +0 -30
  275. package/esm2022/tableview/api/action/descriptors/action-editor.descriptor.mjs +0 -223
  276. package/esm2022/tableview/api/action/descriptors/action-link-descriptor.factory.mjs +0 -32
  277. package/esm2022/tableview/api/action/descriptors/action-link.descriptor.mjs +0 -74
  278. package/esm2022/tableview/api/action/descriptors/action.descriptor.mjs +0 -302
  279. package/esm2022/tableview/api/action/descriptors/editor-action-descriptor.factory.mjs +0 -21
  280. package/esm2022/tableview/api/action/descriptors/editor-action-editor-descriptor.factory.mjs +0 -21
  281. package/esm2022/tableview/api/action/descriptors/table-action-descriptor.factory.mjs +0 -37
  282. package/esm2022/tableview/api/action/descriptors/table-action-editor-descriptor.factory.mjs +0 -40
  283. package/esm2022/tableview/api/action/helpers/data-provider-executors.mjs +0 -100
  284. package/esm2022/tableview/api/action/models/action-component.model.mjs +0 -2
  285. package/esm2022/tableview/api/action/models/action-confirmation.model.mjs +0 -2
  286. package/esm2022/tableview/api/action/models/action-descriptor.types.mjs +0 -2
  287. package/esm2022/tableview/api/action/models/action-editor.model.mjs +0 -2
  288. package/esm2022/tableview/api/action/models/action-error.model.mjs +0 -14
  289. package/esm2022/tableview/api/action/models/action.type.mjs +0 -26
  290. package/esm2022/tableview/api/action/models/execution/action-context-validation.model.mjs +0 -2
  291. package/esm2022/tableview/api/action/models/execution/action-context.model.mjs +0 -2
  292. package/esm2022/tableview/api/action/models/execution/action-execution-error.model.mjs +0 -2
  293. package/esm2022/tableview/api/action/models/execution/action-instance-state.model.mjs +0 -32
  294. package/esm2022/tableview/api/action/models/execution/action-instance.model.mjs +0 -2
  295. package/esm2022/tableview/api/action/models/execution/view-container.model.mjs +0 -2
  296. package/esm2022/tableview/api/action/models/tableview-action-default-categories.model.mjs +0 -11
  297. package/esm2022/tableview/api/action/services/data-provider-executor.service.mjs +0 -28
  298. package/esm2022/tableview/api/action/services/tokens/data-language-dropdown.token.mjs +0 -3
  299. package/esm2022/tableview/api/class/editor/class-editor-attribute-converter.mjs +0 -85
  300. package/esm2022/tableview/api/class/editor/class-editor-attribute.model.mjs +0 -2
  301. package/esm2022/tableview/api/class/editor/class-editor-data-provider.factory.mjs +0 -5
  302. package/esm2022/tableview/api/class/editor/class-editor-descriptor-helpers.mjs +0 -95
  303. package/esm2022/tableview/api/class/editor/class-editor-descriptor.factory.mjs +0 -21
  304. package/esm2022/tableview/api/class/index.mjs +0 -13
  305. package/esm2022/tableview/api/class/mediusinc-mng-commons-tableview-api-class.mjs +0 -5
  306. package/esm2022/tableview/api/class/tableview/class-tableview-attribute-converter.mjs +0 -35
  307. package/esm2022/tableview/api/class/tableview/class-tableview-attribute.model.mjs +0 -2
  308. package/esm2022/tableview/api/class/tableview/class-tableview-data-provider.factory.mjs +0 -5
  309. package/esm2022/tableview/api/class/tableview/class-tableview-descriptor-helpers.mjs +0 -111
  310. package/esm2022/tableview/api/class/tableview/class-tableview-descriptor.factory.mjs +0 -26
  311. package/esm2022/tableview/api/editor/data-providers/editor-data-provider.factory.mjs +0 -15
  312. package/esm2022/tableview/api/editor/data-providers/editor.data-provider.mjs +0 -114
  313. package/esm2022/tableview/api/editor/descriptors/editor-descriptor.factory.mjs +0 -15
  314. package/esm2022/tableview/api/editor/descriptors/editor.descriptor.mjs +0 -437
  315. package/esm2022/tableview/api/editor/descriptors/field-action.descriptor.mjs +0 -51
  316. package/esm2022/tableview/api/editor/descriptors/field-base.descriptor.mjs +0 -314
  317. package/esm2022/tableview/api/editor/descriptors/field-group.descriptor.mjs +0 -103
  318. package/esm2022/tableview/api/editor/descriptors/field-lookup.descriptor.mjs +0 -211
  319. package/esm2022/tableview/api/editor/descriptors/field-many.descriptor.mjs +0 -142
  320. package/esm2022/tableview/api/editor/descriptors/field-validation.descriptor.mjs +0 -25
  321. package/esm2022/tableview/api/editor/descriptors/field.descriptor.mjs +0 -402
  322. package/esm2022/tableview/api/editor/descriptors/wrappers/editor-descriptor-nested-object-wrapper.mjs +0 -51
  323. package/esm2022/tableview/api/editor/models/editor-fields.model.mjs +0 -2
  324. package/esm2022/tableview/api/editor/models/editor.model.mjs +0 -9
  325. package/esm2022/tableview/api/editor/models/field-action-context.model.mjs +0 -2
  326. package/esm2022/tableview/api/editor/models/field-image-preview.model.mjs +0 -2
  327. package/esm2022/tableview/api/editor/models/field-validation.model.mjs +0 -2
  328. package/esm2022/tableview/api/editor/models/field.model.mjs +0 -57
  329. package/esm2022/tableview/api/editor/models/form-editor.event.mjs +0 -28
  330. package/esm2022/tableview/api/editor/models/form-editor.interface.mjs +0 -2
  331. package/esm2022/tableview/api/editor/models/formly-custom-field.model.mjs +0 -70
  332. package/esm2022/tableview/api/editor/models/formly-field.model.mjs +0 -2
  333. package/esm2022/tableview/api/editor/models/formly-options.model.mjs +0 -2
  334. package/esm2022/tableview/api/editor/models/radio.model.mjs +0 -2
  335. package/esm2022/tableview/api/index.mjs +0 -76
  336. package/esm2022/tableview/api/mediusinc-mng-commons-tableview-api.mjs +0 -5
  337. package/esm2022/tableview/api/tableview/data-providers/tableview-data-provider.factory.mjs +0 -18
  338. package/esm2022/tableview/api/tableview/data-providers/tableview.data-provider.mjs +0 -84
  339. package/esm2022/tableview/api/tableview/descriptors/tableview-descriptor.factory.mjs +0 -34
  340. package/esm2022/tableview/api/tableview/descriptors/tableview.descriptor.mjs +0 -377
  341. package/esm2022/tableview/api/tableview/helpers/files-export.mjs +0 -34
  342. package/esm2022/tableview/api/tableview/helpers/tableview-create.mjs +0 -26
  343. package/esm2022/tableview/api/tableview/helpers/tableview-data-provider-descriptor-convert.mjs +0 -7
  344. package/esm2022/tableview/api/tableview/helpers/tableview-default-actions.mjs +0 -324
  345. package/esm2022/tableview/api/tableview/helpers/tableview-input-builder.mjs +0 -319
  346. package/esm2022/tableview/api/tableview/models/tableview-descriptor-fields-manage-helper.type.mjs +0 -2
  347. package/esm2022/tableview/api/tableview/models/tableview-descriptor-helper.type.mjs +0 -2
  348. package/esm2022/tableview/api/tableview/models/tableview-input.model.mjs +0 -2
  349. package/esm2022/tableview/api/tableview/models/tableview-route.model.mjs +0 -2
  350. package/esm2022/tableview/editor/components/editor/auto-save-status/auto-save-status.component.mjs +0 -82
  351. package/esm2022/tableview/editor/components/editor/form-editor.component.mjs +0 -480
  352. package/esm2022/tableview/editor/components/formly/constants.mjs +0 -2
  353. package/esm2022/tableview/editor/components/formly/fields/formly-field-action/formly-field-action.component.mjs +0 -66
  354. package/esm2022/tableview/editor/components/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +0 -47
  355. package/esm2022/tableview/editor/components/formly/fields/formly-field-custom/formly-field-custom.component.mjs +0 -39
  356. package/esm2022/tableview/editor/components/formly/fields/formly-field-datepicker/formly-field-datepicker.component.mjs +0 -165
  357. package/esm2022/tableview/editor/components/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +0 -42
  358. package/esm2022/tableview/editor/components/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +0 -34
  359. package/esm2022/tableview/editor/components/formly/fields/formly-field-input/formly-field-input.component.mjs +0 -211
  360. package/esm2022/tableview/editor/components/formly/fields/formly-field-label/formly-field-label.component.mjs +0 -23
  361. package/esm2022/tableview/editor/components/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +0 -195
  362. package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +0 -239
  363. package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +0 -205
  364. package/esm2022/tableview/editor/components/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +0 -28
  365. package/esm2022/tableview/editor/components/formly/fields/formly-field-type.abstract.component.mjs +0 -46
  366. package/esm2022/tableview/editor/components/formly/pipes/formly-field-label.pipe.mjs +0 -19
  367. package/esm2022/tableview/editor/components/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.mjs +0 -33
  368. package/esm2022/tableview/editor/components/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +0 -59
  369. package/esm2022/tableview/editor/helpers/editor-autosave.mjs +0 -49
  370. package/esm2022/tableview/editor/helpers/editor-field.mjs +0 -39
  371. package/esm2022/tableview/editor/helpers/editor-formly.mjs +0 -388
  372. package/esm2022/tableview/editor/helpers/editor-validators.mjs +0 -25
  373. package/esm2022/tableview/editor/helpers/field-create.mjs +0 -21
  374. package/esm2022/tableview/editor/helpers/formly-config.mjs +0 -260
  375. package/esm2022/tableview/editor/helpers/notification.mjs +0 -11
  376. package/esm2022/tableview/editor/models/editor-auto-save-preview.model.mjs +0 -2
  377. package/esm2022/tableview/editor/models/formly-config.model.mjs +0 -2
  378. package/esm2022/tableview/editor/services/form-editor.service.mjs +0 -96
  379. package/esm2022/tableview/editor/services/formly-config.provider.mjs +0 -31
  380. package/esm2022/tableview/index.mjs +0 -67
  381. package/esm2022/tableview/mediusinc-mng-commons-tableview.mjs +0 -5
  382. package/esm2022/tableview/provide.mjs +0 -105
  383. package/esm2022/tableview/tableview/components/route/tableview-route.component.mjs +0 -15
  384. package/esm2022/tableview/tableview/components/tableview/tableview.component.mjs +0 -59
  385. package/esm2022/tableview/tableview/router/tableview-route-builder.mjs +0 -175
  386. package/esm2022/tableview/tableview/services/tableview-feature-config.token.mjs +0 -3
@@ -1,428 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, HostListener, computed, inject, input, output, signal, viewChild } from '@angular/core';
2
- import { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';
3
- import { TranslateService } from '@ngx-translate/core';
4
- import { ConfirmationService } from 'primeng/api';
5
- import { DialogService } from 'primeng/dynamicdialog';
6
- import { ProgressSpinnerModule } from 'primeng/progressspinner';
7
- import { ToolbarModule } from 'primeng/toolbar';
8
- import { ZIndexUtils } from 'primeng/utils';
9
- import { NEVER, Subject, combineLatestWith, mergeMap, of, switchMap } from 'rxjs';
10
- import { take } from 'rxjs/operators';
11
- import { CommonsInternalError, CommonsService, LoggerService, effectWithDeps, objectDeepCopy } from '@mediusinc/mng-commons/core';
12
- import { ActionActivationTriggerEnum, ActionEditorSubmitDescriptorInst, ActionEditorSubmitTypeEnum, ActionInstanceStateEnum, ActionPositionEnum, ActionTypeEnum, TableviewActionDefaultCategories } from '@mediusinc/mng-commons/tableview/api';
13
- import { EditorAutoSaveStatusComponent } from '../../../../editor/components/editor/auto-save-status/auto-save-status.component';
14
- import { FormEditorComponent } from '../../../../editor/components/editor/form-editor.component';
15
- import { getI18nActionEditorTitleAsync } from '../../../helpers/i18n';
16
- import { ActionInstance } from '../../../models/execution/action-instance.model';
17
- import { ActionExecutorService } from '../../../services/action-executor.service';
18
- import { provideActionExecutor } from '../../../services/providers/provide-action-executor';
19
- import { ViewContainer } from '../../../services/view-container.service';
20
- import { ActionComponent } from '../../action/action.component';
21
- import * as i0 from "@angular/core";
22
- import * as i1 from "primeng/progressspinner";
23
- import * as i2 from "primeng/toolbar";
24
- import * as i3 from "primeng/api";
25
- export class ActionEditorInjectorContextComponent {
26
- constructor() {
27
- this.ActionActivationTriggerEnum = ActionActivationTriggerEnum;
28
- this.actionEditorSubmitTypeSubmit = ActionEditorSubmitTypeEnum.Submit;
29
- this.translate = inject(TranslateService);
30
- this.confirmationService = inject(ConfirmationService);
31
- this.dialogService = inject(DialogService);
32
- this.logger = inject(LoggerService).create('ActionEditorInjectorContextComponent');
33
- this.commonsService = inject(CommonsService);
34
- this.actionExecutor = inject(ActionExecutorService);
35
- this.viewContainer = inject(ViewContainer, { optional: true });
36
- // metadata and editor mode input
37
- this.data = input.required();
38
- this.actionRun = output();
39
- this.actionCancel = output();
40
- // content and view queries
41
- this.formEditorCmp = viewChild(FormEditorComponent);
42
- this.hasTitle = computed(() => this.editorAction().editorTitle !== null);
43
- this.title = signal(undefined);
44
- this.isFormDisabled = signal(false);
45
- // data
46
- this.item = signal(undefined);
47
- this.itemId = signal(undefined);
48
- this.actionData = signal(undefined);
49
- this.editorAction = computed(() => this.data().descriptor);
50
- // actions
51
- this.actions = computed(() => {
52
- const actions = [];
53
- for (const action of this.editorAction().editorActions) {
54
- if (action instanceof ActionEditorSubmitDescriptorInst) {
55
- action.withButtonOpts({
56
- ...action.button,
57
- icon: action.button?.icon === undefined ? (action.submitType === ActionEditorSubmitTypeEnum.Submit ? 'pi pi-check' : 'pi pi-times') : action.button.icon,
58
- label: action.button?.label === undefined
59
- ? action.submitType === ActionEditorSubmitTypeEnum.Submit
60
- ? 'general.save'
61
- : this.data().isDialog
62
- ? 'general.close'
63
- : 'general.cancel'
64
- : action.button.label
65
- });
66
- // assign run operations
67
- action.withNotifications(false);
68
- if (action.submitType === ActionEditorSubmitTypeEnum.Submit) {
69
- action.withRunFunction(() => {
70
- this.triggerSubmit();
71
- return of(null);
72
- });
73
- }
74
- else {
75
- action.withRunFunction(() => {
76
- this.closeWithUnsavedChangesConfirmation();
77
- return of(null);
78
- });
79
- }
80
- }
81
- actions.push(action);
82
- }
83
- for (const action of this.viewContainer?.actions().filter(value => value.positionTableviewCategories?.includes(this.editorAction().tableviewCategory)) ?? []) {
84
- actions.push(action);
85
- }
86
- return actions;
87
- });
88
- this.toolbarLeftActions = computed(() => this.actions().filter(a => a.position === ActionPositionEnum.ToolbarLeft));
89
- this.toolbarRightActions = computed(() => this.actions()
90
- .filter(a => a.position === ActionPositionEnum.ToolbarRight)
91
- .reverse());
92
- this.footerLeftActions = computed(() => this.actions().filter(a => a.position === ActionPositionEnum.FooterLeft));
93
- this.footerRightActions = computed(() => this.actions()
94
- .filter(a => a.position === ActionPositionEnum.FooterRight)
95
- .reverse());
96
- this.loading = signal(false);
97
- this.formValue = signal(undefined);
98
- this.submitLoading = signal(false);
99
- this.autoSaveStatus = signal(undefined);
100
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
101
- this.#dataEffect = effectWithDeps([this.data], ([data]) => {
102
- this.item.set(data.item);
103
- this.itemId.set(data.itemId);
104
- this.actionData.set(data.actionData);
105
- if (data.actionInstance) {
106
- this.processActionInstance(data.actionInstance);
107
- }
108
- // notify executor to for activation to end
109
- this.processActionInstance(this.actionExecutor.onActionEditorInit(this.editorAction(), this.instance, this));
110
- }, { firstOnly: true });
111
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
112
- this.#hasTitleEffect = effectWithDeps([this.hasTitle], ([hasTitle]) => {
113
- if (!hasTitle) {
114
- this.title.set(undefined);
115
- }
116
- else {
117
- this.#titleSubscription?.unsubscribe();
118
- this.#titleSubscription = getI18nActionEditorTitleAsync(this.translate, this.editorAction(), this.item()).subscribe(t => {
119
- this.title.set(t ?? undefined);
120
- });
121
- }
122
- });
123
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
124
- this.#titleUpdateSubscription = toObservable(this.hasTitle)
125
- .pipe(combineLatestWith(toObservable(this.editorAction), toObservable(this.item)), mergeMap(([hasTitle, editorAction, item]) => (hasTitle ? getI18nActionEditorTitleAsync(this.translate, editorAction, item) : of(undefined))), takeUntilDestroyed())
126
- .subscribe(title => {
127
- this.title.set(title ?? undefined);
128
- const dataDialogConfig = this.data().dialogConfig;
129
- if (dataDialogConfig) {
130
- dataDialogConfig.header = title ?? undefined;
131
- }
132
- if (this.editorAction().activationTrigger === ActionActivationTriggerEnum.OnRoute) {
133
- this.commonsService.setPageTitle(title ?? undefined);
134
- }
135
- });
136
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
137
- this.#viewContainerEditorResetSubscription = this.viewContainer
138
- ? toObservable(this.editorAction)
139
- .pipe(switchMap(a => (this.isActionMainTwEditor(a) ? (this.viewContainer?.editorReset$ ?? NEVER) : NEVER)), takeUntilDestroyed())
140
- .subscribe({
141
- next: e => this.onEditorReset(e)
142
- })
143
- : undefined;
144
- this.#viewContainerEditorCloseSubscription = this.viewContainer
145
- ? toObservable(this.editorAction)
146
- .pipe(switchMap(a => (this.isActionMainTwEditor(a) ? (this.viewContainer?.editorClose$ ?? NEVER) : NEVER)), takeUntilDestroyed())
147
- .subscribe({
148
- next: () => this.cancel()
149
- })
150
- : undefined;
151
- this.#dataProviderEditorResetSubscription = toObservable(this.editorAction)
152
- .pipe(switchMap(action => action.dataProvider?.editorReset$ ?? NEVER), takeUntilDestroyed())
153
- .subscribe({
154
- next: e => this.onEditorReset(e)
155
- });
156
- this.#viewContainerDataProviderEditorResetSubscription = this.viewContainer
157
- ? toObservable(this.viewContainer.dataProvider)
158
- .pipe(combineLatestWith(toObservable(this.editorAction)), switchMap(([dataProvider, action]) => this.isActionMainTwEditor(action) && action.dataProvider == null ? (dataProvider?.editorReset$ ?? NEVER) : NEVER), takeUntilDestroyed())
159
- .subscribe({
160
- next: e => this.onEditorReset(e)
161
- })
162
- : undefined;
163
- }
164
- // subscriptions and effects
165
- #titleSubscription;
166
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
167
- #dataEffect;
168
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
169
- #hasTitleEffect;
170
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
171
- #titleUpdateSubscription;
172
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
173
- #viewContainerEditorResetSubscription;
174
- #viewContainerEditorCloseSubscription;
175
- #dataProviderEditorResetSubscription;
176
- #viewContainerDataProviderEditorResetSubscription;
177
- ngOnDestroy() {
178
- this.#titleSubscription?.unsubscribe();
179
- this.fetchExecutionSubscription?.unsubscribe();
180
- this.submitExecutionSubscription?.unsubscribe();
181
- const instance = this.instance;
182
- this.unsetInstance();
183
- this.actionExecutor.onActionEditorDestroy(instance);
184
- }
185
- onSubmit(event) {
186
- if (!this.instance) {
187
- throw new CommonsInternalError(`Action is not instantiated in action editor for action ${this.editorAction().actionName}.`);
188
- }
189
- if (event.success) {
190
- // prepare parameters
191
- const actionParameters = {
192
- itemId: this.itemId(),
193
- item: event.formItem,
194
- actionData: this.actionData()
195
- };
196
- if (this.editorAction().editorDescriptor.isLocalized) {
197
- actionParameters.locale = this.commonsService.getDefaultLocale();
198
- }
199
- const context = this.actionExecutor.prepareContextForEditorSubmit(this.editorAction(), actionParameters, this.data().dataProvider, this.instance, this.data().previousActionInstance);
200
- this.submitExecutionSubscription?.unsubscribe();
201
- this.submitExecutionSubscription = context.execution$.pipe(take(1)).subscribe({
202
- next: res => {
203
- this.lastSubmitItem = event.formItem;
204
- const modelIdProp = this.editorAction().editorDescriptor.model?.idProperty;
205
- if (res && typeof res === 'object' && !this.itemId() && modelIdProp) {
206
- // to cover creation!
207
- this.updateItemId(res[modelIdProp]);
208
- }
209
- this.actionRun.emit(res);
210
- }
211
- });
212
- this.actionExecutor.run(context);
213
- }
214
- }
215
- cancel() {
216
- if (!this.instance) {
217
- this.logger.warn(`Action editor cannot be canceled for ${this.editorAction().actionName}, because no action instance is present`);
218
- return;
219
- }
220
- this.actionCancel.emit(undefined);
221
- this.actionExecutor.finishAction(this.instance);
222
- }
223
- updateItemId(itemId) {
224
- this.itemId.set(itemId);
225
- }
226
- updateItem(item) {
227
- this.item.set(item);
228
- }
229
- triggerSubmit() {
230
- this.formEditorCmp()?.submit();
231
- }
232
- onValueChange(value) {
233
- this.formValue.set(value);
234
- }
235
- onAutoSave(value) {
236
- this.autoSaveStatus.set(value);
237
- }
238
- fetchItem() {
239
- if (!this.instance) {
240
- throw new CommonsInternalError(`Action is not instantiated in action editor for action ${this.editorAction().actionName}.`);
241
- }
242
- const actionParameters = {
243
- itemId: this.itemId(),
244
- item: this.item(),
245
- actionData: this.actionData()
246
- };
247
- if (this.editorAction().editorDescriptor.isLocalized) {
248
- if (this.editorAction().editorDescriptor.disabled) {
249
- actionParameters.locale = this.commonsService.appDataLocale();
250
- }
251
- else {
252
- actionParameters.locale = this.commonsService.getDefaultLocale();
253
- }
254
- }
255
- if (this.instance?.previousInstance instanceof ActionInstance && this.instance.previousInstance.context?.parameters.item) {
256
- actionParameters.formItem = this.instance.previousInstance.context.parameters.item;
257
- }
258
- if (typeof this.instance?.previousInstance?.result !== 'undefined') {
259
- actionParameters.submitResult = this.instance?.previousInstance?.result;
260
- }
261
- const context = this.actionExecutor.prepareContextForEditorFetch(this.editorAction(), actionParameters, this.data().dataProvider, this.instance, this.data().previousActionInstance);
262
- this.fetchExecutionSubscription?.unsubscribe();
263
- this.fetchExecutionSubscription = context.execution$.pipe(take(1)).subscribe(res => {
264
- this.updateItem(res ?? undefined);
265
- });
266
- this.actionExecutor.run(context);
267
- }
268
- setEditorEnabled(isEnabled = true) {
269
- this.isFormDisabled.set(!isEnabled);
270
- }
271
- processActionInstance(instance) {
272
- if (!(instance instanceof ActionInstance)) {
273
- throw new CommonsInternalError('Unknown type of action instance received', { details: instance });
274
- }
275
- if (!this.instance || this.instance.instanceLongName !== instance.instanceLongName) {
276
- this.unsetInstance();
277
- this.instance = instance;
278
- this.instanceStateSubscription = this.instance.state$.subscribe(s => {
279
- switch (s) {
280
- case ActionInstanceStateEnum.ActivationEnd:
281
- this.fetchItem();
282
- break;
283
- case ActionInstanceStateEnum.FetchStart:
284
- this.setEditorEnabled(false);
285
- this.loading.set(true);
286
- break;
287
- case ActionInstanceStateEnum.FetchError:
288
- this.loading.set(false);
289
- break;
290
- case ActionInstanceStateEnum.FetchEnd:
291
- this.setEditorEnabled(true);
292
- this.loading.set(false);
293
- break;
294
- case ActionInstanceStateEnum.RunStart:
295
- this.setEditorEnabled(false);
296
- this.submitLoading.set(true);
297
- break;
298
- case ActionInstanceStateEnum.RunEnd:
299
- case ActionInstanceStateEnum.RunError:
300
- this.setEditorEnabled(true);
301
- this.submitLoading.set(false);
302
- break;
303
- case ActionInstanceStateEnum.NextActionStart:
304
- if (this.instance?.nextActionInstance?.action.type === ActionTypeEnum.Direct) {
305
- this.submitLoading.set(true);
306
- }
307
- break;
308
- case ActionInstanceStateEnum.NextActionEnd:
309
- if (this.instance?.nextActionInstance?.action.type === ActionTypeEnum.Direct) {
310
- this.submitLoading.set(false);
311
- }
312
- break;
313
- case ActionInstanceStateEnum.ErrorActionStart:
314
- if (this.instance?.errorActionInstance?.action.type === ActionTypeEnum.Direct) {
315
- this.submitLoading.set(true);
316
- }
317
- break;
318
- case ActionInstanceStateEnum.ErrorActionEnd:
319
- if (this.instance?.errorActionInstance?.action.type === ActionTypeEnum.Direct) {
320
- this.submitLoading.set(false);
321
- }
322
- break;
323
- case ActionInstanceStateEnum.FinishErrorFinal:
324
- this.setEditorEnabled(false);
325
- break;
326
- case ActionInstanceStateEnum.FinishSuccessFinal:
327
- case ActionInstanceStateEnum.FinishDismissedFinal:
328
- this.setEditorEnabled(false);
329
- this.unsetInstance();
330
- break;
331
- case ActionInstanceStateEnum.FinishSuccessReactivateFinal:
332
- this.setEditorEnabled(false);
333
- // make copy of item and update title to be on the latest
334
- this.updateItem(objectDeepCopy(this.lastSubmitItem));
335
- // should also unsetInstance, but let this for reactivationInstance$ listener to not interfere
336
- break;
337
- }
338
- });
339
- this.instanceReactivationSubscription = this.instance.reactivationInstance$.subscribe(newInstance => {
340
- this.processActionInstance(newInstance);
341
- });
342
- }
343
- }
344
- unsetInstance() {
345
- this.instance = undefined;
346
- this.instanceStateSubscription?.unsubscribe();
347
- this.instanceReactivationSubscription?.unsubscribe();
348
- }
349
- isActionMainTwEditor(action) {
350
- return (action.tableviewCategory != null &&
351
- [TableviewActionDefaultCategories.DETAILS, TableviewActionDefaultCategories.EDIT, TableviewActionDefaultCategories.ADD].includes(action.tableviewCategory));
352
- }
353
- beforeWindowUnload() {
354
- if (this.data().isDialog && this.formEditorCmp()?.form.pristine === false) {
355
- return confirm(this.translate.instant('mngEditor.unsavedChangesConfirmation.message'));
356
- }
357
- return true;
358
- }
359
- onEscapePressed() {
360
- if (this.data().isDialog &&
361
- this.editorAction().activationTrigger === ActionActivationTriggerEnum.OnRoute &&
362
- this.instance?.activationDialogRef &&
363
- parseInt(this.dialogService.dialogComponentRefMap.get(this.instance?.activationDialogRef)?.instance.container?.style.zIndex ?? '') === ZIndexUtils.getCurrent())
364
- this.closeWithUnsavedChangesConfirmation();
365
- }
366
- closeWithUnsavedChangesConfirmation(callFromGuard = false) {
367
- if (this.formEditorCmp()?.form.pristine === false && this.editorAction().unsavedChangesConfirmation) {
368
- return this.showUnsavedChangesConfirmationDialog(callFromGuard);
369
- }
370
- else {
371
- if (!callFromGuard) {
372
- this.cancel();
373
- }
374
- }
375
- return of(true);
376
- }
377
- showUnsavedChangesConfirmationDialog(callFromGuard) {
378
- const subject = new Subject();
379
- this.confirmationService.confirm({
380
- header: this.translate.instant('mngEditor.unsavedChangesConfirmation.header'),
381
- message: this.translate.instant('mngEditor.unsavedChangesConfirmation.message'),
382
- acceptLabel: this.translate.instant('general.yes'),
383
- rejectLabel: this.translate.instant('general.no'),
384
- icon: 'pi pi-exclamation-triangle',
385
- accept: () => {
386
- if (!callFromGuard) {
387
- this.cancel();
388
- }
389
- subject.next(true);
390
- subject.complete();
391
- },
392
- reject: () => {
393
- subject.next(false);
394
- subject.complete();
395
- }
396
- });
397
- return subject.asObservable();
398
- }
399
- onEditorReset(event) {
400
- if (event?.fetch) {
401
- this.fetchItem();
402
- }
403
- else if (event?.item) {
404
- this.formEditorCmp()?.resetFormModel(event.item);
405
- }
406
- else if (event?.fields) {
407
- for (const key in event.fields) {
408
- this.formEditorCmp()?.resetFieldValue(key, event.fields[key]);
409
- }
410
- }
411
- else {
412
- this.formEditorCmp()?.resetFormModel();
413
- }
414
- }
415
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ActionEditorInjectorContextComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
416
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: ActionEditorInjectorContextComponent, isStandalone: true, selector: "mng-action-editor-injector-context", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { actionRun: "actionRun", actionCancel: "actionCancel" }, host: { listeners: { "window:beforeunload": "beforeWindowUnload()", "window:keydown.Escape": "onEscapePressed()" } }, providers: [provideActionExecutor()], viewQueries: [{ propertyName: "formEditorCmp", first: true, predicate: FormEditorComponent, descendants: true, isSignal: true }], ngImport: i0, template: "@if (!data().isDialog && title()) {\n <h5>{{ title() }}</h5>\n}\n@if (data().isDialog && editorAction().activationTrigger === ActionActivationTriggerEnum.OnRoute) {\n <span class=\"p-dialog-header dialog-close-button-wrapper\">\n <button\n class=\"p-dialog-header-icon p-dialog-header-maximize p-link\"\n type=\"button\"\n (click)=\"closeWithUnsavedChangesConfirmation()\"\n (keydown.enter)=\"closeWithUnsavedChangesConfirmation()\">\n <span class=\"p-dialog-header-close-icon pi pi-times\"></span>\n </button>\n </span>\n}\n<div class=\"h-full flex flex-column\">\n @if (toolbarLeftActions().length > 0 || toolbarRightActions().length > 0) {\n <div class=\"flex-grow-1 mng-action-editor-toolbar-container\">\n <p-toolbar styleClass=\"mng-action-editor-toolbar\">\n <ng-template pTemplate=\"left\">\n @for (action of toolbarLeftActions(); track action) {\n <mng-action\n [action]=\"action\"\n [disabled]=\"submitLoading()\"\n [loading]=\"$any(action).submitType === actionEditorSubmitTypeSubmit ? submitLoading() : false\"\n [hostComponent]=\"this\"\n [item]=\"formValue()\"\n [itemId]=\"itemId()\"></mng-action>\n }\n </ng-template>\n <ng-template pTemplate=\"right\">\n @for (action of toolbarRightActions(); track action) {\n <mng-action\n [action]=\"action\"\n [disabled]=\"submitLoading()\"\n [loading]=\"$any(action).submitType === actionEditorSubmitTypeSubmit ? submitLoading() : false\"\n [hostComponent]=\"this\"\n [item]=\"formValue()\"\n [itemId]=\"itemId()\"></mng-action>\n }\n </ng-template>\n </p-toolbar>\n </div>\n }\n\n <div class=\"flex-grow-1 mng-action-editor-form-container\">\n @if (loading()) {\n <div class=\"text-center\">\n <p-progressSpinner [style]=\"{width: '3rem', height: '3rem'}\" strokeWidth=\"3\"></p-progressSpinner>\n </div>\n }\n @if (editorAction().editorDescriptor && !loading()) {\n <mng-form-editor\n [descriptor]=\"editorAction().editorDescriptor\"\n [editorId]=\"editorAction().actionNameLong\"\n [item]=\"item()\"\n [itemId]=\"itemId()\"\n [isFormDisabled]=\"isFormDisabled()\"\n showAutoSaveStatus=\"false\"\n (valueChange)=\"onValueChange($event)\"\n (formSubmit)=\"onSubmit($event)\"\n (autoSaveStatus)=\"onAutoSave($event)\" />\n }\n </div>\n\n <div class=\"flex flex-row justify-content-between align-items-center mng-action-editor-footer-container\">\n <div>\n @for (action of footerLeftActions(); track action) {\n <mng-action\n [action]=\"action\"\n [disabled]=\"submitLoading()\"\n [loading]=\"$any(action).submitType === actionEditorSubmitTypeSubmit ? submitLoading() : false\"\n [hostComponent]=\"this\"\n [item]=\"formValue()\"\n [itemId]=\"itemId()\"></mng-action>\n }\n @if (editorAction().editorDescriptor.autoSave) {\n <mng-editor-auto-save-status [status]=\"autoSaveStatus()\"></mng-editor-auto-save-status>\n }\n </div>\n <div>\n @for (action of footerRightActions(); track action) {\n <mng-action\n [action]=\"action\"\n [disabled]=\"submitLoading()\"\n [loading]=\"$any(action).submitType === actionEditorSubmitTypeSubmit ? submitLoading() : false\"\n [hostComponent]=\"this\"\n [item]=\"formValue()\"\n [itemId]=\"itemId()\"></mng-action>\n }\n </div>\n </div>\n</div>\n", styles: [".dialog-close-button-wrapper{position:absolute;top:1.286rem;right:1.714rem;background:transparent;padding:0}\n"], dependencies: [{ kind: "component", type: ActionComponent, selector: "mng-action", inputs: ["action", "item", "itemId", "actionData", "dataListParams", "dataProvider", "hostComponent", "route", "disabled", "loading", "selectedItems"], outputs: ["finish"] }, { kind: "ngmodule", type: ProgressSpinnerModule }, { kind: "component", type: i1.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: FormEditorComponent, selector: "mng-form-editor", inputs: ["descriptor", "submitLoading", "item", "isFormDisabled", "editorId", "itemId", "showAutoSaveStatus"], outputs: ["itemChange", "formSubmit", "valueChange", "autoSaveStatus"] }, { kind: "ngmodule", type: ToolbarModule }, { kind: "component", type: i2.Toolbar, selector: "p-toolbar", inputs: ["style", "styleClass", "ariaLabelledBy"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: EditorAutoSaveStatusComponent, selector: "mng-editor-auto-save-status", inputs: ["status"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
417
- }
418
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ActionEditorInjectorContextComponent, decorators: [{
419
- type: Component,
420
- args: [{ standalone: true, selector: 'mng-action-editor-injector-context', imports: [ActionComponent, ProgressSpinnerModule, FormEditorComponent, ToolbarModule, EditorAutoSaveStatusComponent], changeDetection: ChangeDetectionStrategy.OnPush, providers: [provideActionExecutor()], template: "@if (!data().isDialog && title()) {\n <h5>{{ title() }}</h5>\n}\n@if (data().isDialog && editorAction().activationTrigger === ActionActivationTriggerEnum.OnRoute) {\n <span class=\"p-dialog-header dialog-close-button-wrapper\">\n <button\n class=\"p-dialog-header-icon p-dialog-header-maximize p-link\"\n type=\"button\"\n (click)=\"closeWithUnsavedChangesConfirmation()\"\n (keydown.enter)=\"closeWithUnsavedChangesConfirmation()\">\n <span class=\"p-dialog-header-close-icon pi pi-times\"></span>\n </button>\n </span>\n}\n<div class=\"h-full flex flex-column\">\n @if (toolbarLeftActions().length > 0 || toolbarRightActions().length > 0) {\n <div class=\"flex-grow-1 mng-action-editor-toolbar-container\">\n <p-toolbar styleClass=\"mng-action-editor-toolbar\">\n <ng-template pTemplate=\"left\">\n @for (action of toolbarLeftActions(); track action) {\n <mng-action\n [action]=\"action\"\n [disabled]=\"submitLoading()\"\n [loading]=\"$any(action).submitType === actionEditorSubmitTypeSubmit ? submitLoading() : false\"\n [hostComponent]=\"this\"\n [item]=\"formValue()\"\n [itemId]=\"itemId()\"></mng-action>\n }\n </ng-template>\n <ng-template pTemplate=\"right\">\n @for (action of toolbarRightActions(); track action) {\n <mng-action\n [action]=\"action\"\n [disabled]=\"submitLoading()\"\n [loading]=\"$any(action).submitType === actionEditorSubmitTypeSubmit ? submitLoading() : false\"\n [hostComponent]=\"this\"\n [item]=\"formValue()\"\n [itemId]=\"itemId()\"></mng-action>\n }\n </ng-template>\n </p-toolbar>\n </div>\n }\n\n <div class=\"flex-grow-1 mng-action-editor-form-container\">\n @if (loading()) {\n <div class=\"text-center\">\n <p-progressSpinner [style]=\"{width: '3rem', height: '3rem'}\" strokeWidth=\"3\"></p-progressSpinner>\n </div>\n }\n @if (editorAction().editorDescriptor && !loading()) {\n <mng-form-editor\n [descriptor]=\"editorAction().editorDescriptor\"\n [editorId]=\"editorAction().actionNameLong\"\n [item]=\"item()\"\n [itemId]=\"itemId()\"\n [isFormDisabled]=\"isFormDisabled()\"\n showAutoSaveStatus=\"false\"\n (valueChange)=\"onValueChange($event)\"\n (formSubmit)=\"onSubmit($event)\"\n (autoSaveStatus)=\"onAutoSave($event)\" />\n }\n </div>\n\n <div class=\"flex flex-row justify-content-between align-items-center mng-action-editor-footer-container\">\n <div>\n @for (action of footerLeftActions(); track action) {\n <mng-action\n [action]=\"action\"\n [disabled]=\"submitLoading()\"\n [loading]=\"$any(action).submitType === actionEditorSubmitTypeSubmit ? submitLoading() : false\"\n [hostComponent]=\"this\"\n [item]=\"formValue()\"\n [itemId]=\"itemId()\"></mng-action>\n }\n @if (editorAction().editorDescriptor.autoSave) {\n <mng-editor-auto-save-status [status]=\"autoSaveStatus()\"></mng-editor-auto-save-status>\n }\n </div>\n <div>\n @for (action of footerRightActions(); track action) {\n <mng-action\n [action]=\"action\"\n [disabled]=\"submitLoading()\"\n [loading]=\"$any(action).submitType === actionEditorSubmitTypeSubmit ? submitLoading() : false\"\n [hostComponent]=\"this\"\n [item]=\"formValue()\"\n [itemId]=\"itemId()\"></mng-action>\n }\n </div>\n </div>\n</div>\n", styles: [".dialog-close-button-wrapper{position:absolute;top:1.286rem;right:1.714rem;background:transparent;padding:0}\n"] }]
421
- }], propDecorators: { beforeWindowUnload: [{
422
- type: HostListener,
423
- args: ['window:beforeunload']
424
- }], onEscapePressed: [{
425
- type: HostListener,
426
- args: ['window:keydown.Escape']
427
- }] } });
428
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWVkaXRvci1pbmplY3Rvci1jb250ZXh0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RhYmxldmlldy9zcmMvYWN0aW9uL2NvbXBvbmVudHMvZWRpdG9yL2luamVjdG9yLWNvbnRleHQvYWN0aW9uLWVkaXRvci1pbmplY3Rvci1jb250ZXh0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RhYmxldmlldy9zcmMvYWN0aW9uL2NvbXBvbmVudHMvZWRpdG9yL2luamVjdG9yLWNvbnRleHQvYWN0aW9uLWVkaXRvci1pbmplY3Rvci1jb250ZXh0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFhLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzlJLE9BQU8sRUFBQyxrQkFBa0IsRUFBRSxZQUFZLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUU1RSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDaEQsT0FBTyxFQUFDLGFBQWEsRUFBc0IsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RSxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUMsS0FBSyxFQUFjLE9BQU8sRUFBZ0IsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFD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LENBQUM7WUFDbEUsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLGNBQWMsRUFBRSxDQUFDO1FBQzNDLENBQUM7SUFDTCxDQUFDOytHQWhkUSxvQ0FBb0M7bUdBQXBDLG9DQUFvQywwWUFGbEMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLHlFQXFCSCxtQkFBbUIsZ0VDOUV4RCxrd0lBNEZBLHdLRHJDYyxlQUFlLG1PQUFFLHFCQUFxQix5TUFBRSxtQkFBbUIsa1BBQUUsYUFBYSx5UEFBRSw2QkFBNkI7OzRGQUkxRyxvQ0FBb0M7a0JBVGhELFNBQVM7aUNBQ00sSUFBSSxZQUNOLG9DQUFvQyxXQUdyQyxDQUFDLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsNkJBQTZCLENBQUMsbUJBQ25HLHVCQUF1QixDQUFDLE1BQU0sYUFDcEMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDOzhCQWlaNUIsa0JBQWtCO3NCQUR6QixZQUFZO3VCQUFDLHFCQUFxQjtnQkFTM0IsZUFBZTtzQkFEdEIsWUFBWTt1QkFBQyx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEhvc3RMaXN0ZW5lciwgT25EZXN0cm95LCBjb21wdXRlZCwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0LCBzaWduYWwsIHZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge3Rha2VVbnRpbERlc3Ryb3llZCwgdG9PYnNlcnZhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0NvbmZpcm1hdGlvblNlcnZpY2V9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7RGlhbG9nU2VydmljZSwgRHluYW1pY0RpYWxvZ0NvbmZpZ30gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcbmltcG9ydCB7UHJvZ3Jlc3NTcGlubmVyTW9kdWxlfSBmcm9tICdwcmltZW5nL3Byb2dyZXNzc3Bpbm5lcic7XG5pbXBvcnQge1Rvb2xiYXJNb2R1bGV9IGZyb20gJ3ByaW1lbmcvdG9vbGJhcic7XG5pbXBvcnQge1pJbmRleFV0aWxzfSBmcm9tICdwcmltZW5nL3V0aWxzJztcbmltcG9ydCB7TkVWRVIsIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgY29tYmluZUxhdGVzdFdpdGgsIG1lcmdlTWFwLCBvZiwgc3dpdGNoTWFwfSBmcm9tICdyeGpzJztcbmltcG9ydCB7dGFrZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1xuICAgIEFjdGlvbkRhdGEsXG4gICAgQWN0aW9uUGFyYW1ldGVycyxcbiAgICBDb21tb25zSW50ZXJuYWxFcnJvcixcbiAgICBDb21tb25zU2VydmljZSxcbiAgICBJRGF0YVByb3ZpZGVyLFxuICAgIElkVHlwZSxcbiAgICBMb2dnZXJTZXJ2aWNlLFxuICAgIGVmZmVjdFdpdGhEZXBzLFxuICAgIG9iamVjdERlZXBDb3B5XG59IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge1xuICAgIEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bSxcbiAgICBBY3Rpb25EZXNjcmlwdG9ySW5zdCxcbiAgICBBY3Rpb25FZGl0b3JEZXNjcmlwdG9ySW5zdCxcbiAgICBBY3Rpb25FZGl0b3JTdWJtaXREZXNjcmlwdG9ySW5zdCxcbiAgICBBY3Rpb25FZGl0b3JTdWJtaXRUeXBlRW51bSxcbiAgICBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bSxcbiAgICBBY3Rpb25Qb3NpdGlvbkVudW0sXG4gICAgQWN0aW9uVHlwZUVudW0sXG4gICAgRWRpdG9yUmVzZXRFdmVudCxcbiAgICBGb3JtRWRpdG9yU3VibWl0RXZlbnQsXG4gICAgSUFjdGlvbkVkaXRvckNvbXBvbmVudCxcbiAgICBJQWN0aW9uSW5zdGFuY2UsXG4gICAgSUVkaXRvckRhdGFQcm92aWRlcixcbiAgICBUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllc1xufSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL3RhYmxldmlldy9hcGknO1xuXG5pbXBvcnQge0VkaXRvckF1dG9TYXZlU3RhdHVzQ29tcG9uZW50fSBmcm9tICcuLi8uLi8uLi8uLi9lZGl0b3IvY29tcG9uZW50cy9lZGl0b3IvYXV0by1zYXZlLXN0YXR1cy9hdXRvLXNhdmUtc3RhdHVzLmNvbXBvbmVudCc7XG5pbXBvcnQge0Zvcm1FZGl0b3JDb21wb25lbnR9IGZyb20gJy4uLy4uLy4uLy4uL2VkaXRvci9jb21wb25lbnRzL2VkaXRvci9mb3JtLWVkaXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHtFZGl0b3JBdXRvU2F2ZVN0YXR1c30gZnJvbSAnLi4vLi4vLi4vLi4vZWRpdG9yL21vZGVscy9lZGl0b3ItYXV0by1zYXZlLXByZXZpZXcubW9kZWwnO1xuaW1wb3J0IHtnZXRJMThuQWN0aW9uRWRpdG9yVGl0bGVBc3luY30gZnJvbSAnLi4vLi4vLi4vaGVscGVycy9pMThuJztcbmltcG9ydCB7QWN0aW9uSW5zdGFuY2V9IGZyb20gJy4uLy4uLy4uL21vZGVscy9leGVjdXRpb24vYWN0aW9uLWluc3RhbmNlLm1vZGVsJztcbmltcG9ydCB7QWN0aW9uRXhlY3V0b3JTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hY3Rpb24tZXhlY3V0b3Iuc2VydmljZSc7XG5pbXBvcnQge3Byb3ZpZGVBY3Rpb25FeGVjdXRvcn0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcHJvdmlkZXJzL3Byb3ZpZGUtYWN0aW9uLWV4ZWN1dG9yJztcbmltcG9ydCB7Vmlld0NvbnRhaW5lcn0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdmlldy1jb250YWluZXIuc2VydmljZSc7XG5pbXBvcnQge0FjdGlvbkNvbXBvbmVudH0gZnJvbSAnLi4vLi4vYWN0aW9uL2FjdGlvbi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnbW5nLWFjdGlvbi1lZGl0b3ItaW5qZWN0b3ItY29udGV4dCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FjdGlvbi1lZGl0b3ItaW5qZWN0b3ItY29udGV4dC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJ2FjdGlvbi1lZGl0b3ItaW5qZWN0b3ItY29udGV4dC5jb21wb25lbnQuc2NzcyddLFxuICAgIGltcG9ydHM6IFtBY3Rpb25Db21wb25lbnQsIFByb2dyZXNzU3Bpbm5lck1vZHVsZSwgRm9ybUVkaXRvckNvbXBvbmVudCwgVG9vbGJhck1vZHVsZSwgRWRpdG9yQXV0b1NhdmVTdGF0dXNDb21wb25lbnRdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW3Byb3ZpZGVBY3Rpb25FeGVjdXRvcigpXVxufSlcbmV4cG9ydCBjbGFzcyBBY3Rpb25FZGl0b3JJbmplY3RvckNvbnRleHRDb21wb25lbnQ8SXRlbSA9IGFueSwgU2VydmljZSA9IGFueT4gaW1wbGVtZW50cyBPbkRlc3Ryb3ksIElBY3Rpb25FZGl0b3JDb21wb25lbnQge1xuICAgIHByb3RlY3RlZCByZWFkb25seSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0gPSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW07XG4gICAgcHVibGljIHJlYWRvbmx5IGFjdGlvbkVkaXRvclN1Ym1pdFR5cGVTdWJtaXQgPSBBY3Rpb25FZGl0b3JTdWJtaXRUeXBlRW51bS5TdWJtaXQ7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpcm1hdGlvblNlcnZpY2UgPSBpbmplY3QoQ29uZmlybWF0aW9uU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2dTZXJ2aWNlID0gaW5qZWN0KERpYWxvZ1NlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyID0gaW5qZWN0KExvZ2dlclNlcnZpY2UpLmNyZWF0ZSgnQWN0aW9uRWRpdG9ySW5qZWN0b3JDb250ZXh0Q29tcG9uZW50Jyk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjb21tb25zU2VydmljZSA9IGluamVjdChDb21tb25zU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhY3Rpb25FeGVjdXRvciA9IGluamVjdChBY3Rpb25FeGVjdXRvclNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdmlld0NvbnRhaW5lciA9IGluamVjdChWaWV3Q29udGFpbmVyLCB7b3B0aW9uYWw6IHRydWV9KTtcblxuICAgIC8vIG1ldGFkYXRhIGFuZCBlZGl0b3IgbW9kZSBpbnB1dFxuICAgIGRhdGEgPSBpbnB1dC5yZXF1aXJlZDxBY3Rpb25FZGl0b3JJbmplY3RvckNvbnRleHRJbnB1dERhdGE8SXRlbSwgU2VydmljZT4+KCk7XG5cbiAgICBwdWJsaWMgYWN0aW9uUnVuID0gb3V0cHV0PEl0ZW0gfCBudWxsIHwgdW5kZWZpbmVkPigpO1xuICAgIHB1YmxpYyBhY3Rpb25DYW5jZWwgPSBvdXRwdXQ8SXRlbSB8IG51bGwgfCB1bmRlZmluZWQ+KCk7XG5cbiAgICAvLyBjb250ZW50IGFuZCB2aWV3IHF1ZXJpZXNcbiAgICBwdWJsaWMgZm9ybUVkaXRvckNtcCA9IHZpZXdDaGlsZChGb3JtRWRpdG9yQ29tcG9uZW50KTtcblxuICAgIHByaXZhdGUgaGFzVGl0bGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmVkaXRvckFjdGlvbigpLmVkaXRvclRpdGxlICE9PSBudWxsKTtcbiAgICBwdWJsaWMgdGl0bGUgPSBzaWduYWw8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAgIHB1YmxpYyBpc0Zvcm1EaXNhYmxlZCA9IHNpZ25hbChmYWxzZSk7XG5cbiAgICAvLyBkYXRhXG4gICAgcHVibGljIGl0ZW0gPSBzaWduYWw8SXRlbSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgICBwdWJsaWMgaXRlbUlkID0gc2lnbmFsPElkVHlwZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgICBwdWJsaWMgYWN0aW9uRGF0YSA9IHNpZ25hbDxBY3Rpb25EYXRhIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAgIHB1YmxpYyBlZGl0b3JBY3Rpb24gPSBjb21wdXRlZCgoKSA9PiB0aGlzLmRhdGEoKS5kZXNjcmlwdG9yKTtcblxuICAgIC8vIGFjdGlvbnNcbiAgICBwcml2YXRlIGFjdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGFjdGlvbnM6IEFjdGlvbkRlc2NyaXB0b3JJbnN0PEl0ZW0+W10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBhY3Rpb24gb2YgdGhpcy5lZGl0b3JBY3Rpb24oKS5lZGl0b3JBY3Rpb25zKSB7XG4gICAgICAgICAgICBpZiAoYWN0aW9uIGluc3RhbmNlb2YgQWN0aW9uRWRpdG9yU3VibWl0RGVzY3JpcHRvckluc3QpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24ud2l0aEJ1dHRvbk9wdHMoe1xuICAgICAgICAgICAgICAgICAgICAuLi5hY3Rpb24uYnV0dG9uLFxuICAgICAgICAgICAgICAgICAgICBpY29uOiBhY3Rpb24uYnV0dG9uPy5pY29uID09PSB1bmRlZmluZWQgPyAoYWN0aW9uLnN1Ym1pdFR5cGUgPT09IEFjdGlvbkVkaXRvclN1Ym1pdFR5cGVFbnVtLlN1Ym1pdCA/ICdwaSBwaS1jaGVjaycgOiAncGkgcGktdGltZXMnKSA6IGFjdGlvbi5idXR0b24uaWNvbixcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24uYnV0dG9uPy5sYWJlbCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhY3Rpb24uc3VibWl0VHlwZSA9PT0gQWN0aW9uRWRpdG9yU3VibWl0VHlwZUVudW0uU3VibWl0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2dlbmVyYWwuc2F2ZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmRhdGEoKS5pc0RpYWxvZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2dlbmVyYWwuY2xvc2UnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnZ2VuZXJhbC5jYW5jZWwnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhY3Rpb24uYnV0dG9uLmxhYmVsXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvLyBhc3NpZ24gcnVuIG9wZXJhdGlvbnNcbiAgICAgICAgICAgICAgICBhY3Rpb24ud2l0aE5vdGlmaWNhdGlvbnMoZmFsc2UpO1xuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24uc3VibWl0VHlwZSA9PT0gQWN0aW9uRWRpdG9yU3VibWl0VHlwZUVudW0uU3VibWl0KSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbi53aXRoUnVuRnVuY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyU3VibWl0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbi53aXRoUnVuRnVuY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZVdpdGhVbnNhdmVkQ2hhbmdlc0NvbmZpcm1hdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIHRoaXMudmlld0NvbnRhaW5lcj8uYWN0aW9ucygpLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZS5wb3NpdGlvblRhYmxldmlld0NhdGVnb3JpZXM/LmluY2x1ZGVzKHRoaXMuZWRpdG9yQWN0aW9uKCkudGFibGV2aWV3Q2F0ZWdvcnkhKSkgPz8gW10pIHtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFjdGlvbnM7XG4gICAgfSk7XG4gICAgcHVibGljIHRvb2xiYXJMZWZ0QWN0aW9ucyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuYWN0aW9ucygpLmZpbHRlcihhID0+IGEucG9zaXRpb24gPT09IEFjdGlvblBvc2l0aW9uRW51bS5Ub29sYmFyTGVmdCkpO1xuICAgIHB1YmxpYyB0b29sYmFyUmlnaHRBY3Rpb25zID0gY29tcHV0ZWQoKCkgPT5cbiAgICAgICAgdGhpcy5hY3Rpb25zKClcbiAgICAgICAgICAgIC5maWx0ZXIoYSA9PiBhLnBvc2l0aW9uID09PSBBY3Rpb25Qb3NpdGlvbkVudW0uVG9vbGJhclJpZ2h0KVxuICAgICAgICAgICAgLnJldmVyc2UoKVxuICAgICk7XG4gICAgcHVibGljIGZvb3RlckxlZnRBY3Rpb25zID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5hY3Rpb25zKCkuZmlsdGVyKGEgPT4gYS5wb3NpdGlvbiA9PT0gQWN0aW9uUG9zaXRpb25FbnVtLkZvb3RlckxlZnQpKTtcbiAgICBwdWJsaWMgZm9vdGVyUmlnaHRBY3Rpb25zID0gY29tcHV0ZWQoKCkgPT5cbiAgICAgICAgdGhpcy5hY3Rpb25zKClcbiAgICAgICAgICAgIC5maWx0ZXIoYSA9PiBhLnBvc2l0aW9uID09PSBBY3Rpb25Qb3NpdGlvbkVudW0uRm9vdGVyUmlnaHQpXG4gICAgICAgICAgICAucmV2ZXJzZSgpXG4gICAgKTtcblxuICAgIHByaXZhdGUgaW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPjtcbiAgICBwcml2YXRlIGluc3RhbmNlU3RhdGVTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBpbnN0YW5jZVJlYWN0aXZhdGlvblN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICAgIHB1YmxpYyBsb2FkaW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgICBwcml2YXRlIGZldGNoRXhlY3V0aW9uU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIHB1YmxpYyBmb3JtVmFsdWUgPSBzaWduYWw8SXRlbSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgICBwdWJsaWMgc3VibWl0TG9hZGluZyA9IHNpZ25hbChmYWxzZSk7XG4gICAgcHVibGljIGF1dG9TYXZlU3RhdHVzID0gc2lnbmFsPEVkaXRvckF1dG9TYXZlU3RhdHVzIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAgIHByaXZhdGUgc3VibWl0RXhlY3V0aW9uU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgbGFzdFN1Ym1pdEl0ZW0/OiBJdGVtO1xuXG4gICAgLy8gc3Vic2NyaXB0aW9ucyBhbmQgZWZmZWN0c1xuICAgICN0aXRsZVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgI2RhdGFFZmZlY3QgPSBlZmZlY3RXaXRoRGVwcyhcbiAgICAgICAgW3RoaXMuZGF0YV0sXG4gICAgICAgIChbZGF0YV0pID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXRlbS5zZXQoZGF0YS5pdGVtKTtcbiAgICAgICAgICAgIHRoaXMuaXRlbUlkLnNldChkYXRhLml0ZW1JZCk7XG4gICAgICAgICAgICB0aGlzLmFjdGlvbkRhdGEuc2V0KGRhdGEuYWN0aW9uRGF0YSk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmFjdGlvbkluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzQWN0aW9uSW5zdGFuY2UoZGF0YS5hY3Rpb25JbnN0YW5jZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIG5vdGlmeSBleGVjdXRvciB0byBmb3IgYWN0aXZhdGlvbiB0byBlbmRcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0FjdGlvbkluc3RhbmNlKHRoaXMuYWN0aW9uRXhlY3V0b3Iub25BY3Rpb25FZGl0b3JJbml0KHRoaXMuZWRpdG9yQWN0aW9uKCksIHRoaXMuaW5zdGFuY2UsIHRoaXMpKTtcbiAgICAgICAgfSxcbiAgICAgICAge2ZpcnN0T25seTogdHJ1ZX1cbiAgICApO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAjaGFzVGl0bGVFZmZlY3QgPSBlZmZlY3RXaXRoRGVwcyhbdGhpcy5oYXNUaXRsZV0sIChbaGFzVGl0bGVdKSA9PiB7XG4gICAgICAgIGlmICghaGFzVGl0bGUpIHtcbiAgICAgICAgICAgIHRoaXMudGl0bGUuc2V0KHVuZGVmaW5lZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiN0aXRsZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuI3RpdGxlU3Vic2NyaXB0aW9uID0gZ2V0STE4bkFjdGlvbkVkaXRvclRpdGxlQXN5bmModGhpcy50cmFuc2xhdGUsIHRoaXMuZWRpdG9yQWN0aW9uKCksIHRoaXMuaXRlbSgpKS5zdWJzY3JpYmUodCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50aXRsZS5zZXQodCA/PyB1bmRlZmluZWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgI3RpdGxlVXBkYXRlU3Vic2NyaXB0aW9uID0gdG9PYnNlcnZhYmxlKHRoaXMuaGFzVGl0bGUpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgICAgY29tYmluZUxhdGVzdFdpdGgodG9PYnNlcnZhYmxlKHRoaXMuZWRpdG9yQWN0aW9uKSwgdG9PYnNlcnZhYmxlKHRoaXMuaXRlbSkpLFxuICAgICAgICAgICAgbWVyZ2VNYXAoKFtoYXNUaXRsZSwgZWRpdG9yQWN0aW9uLCBpdGVtXSkgPT4gKGhhc1RpdGxlID8gZ2V0STE4bkFjdGlvbkVkaXRvclRpdGxlQXN5bmModGhpcy50cmFuc2xhdGUsIGVkaXRvckFjdGlvbiwgaXRlbSkgOiBvZih1bmRlZmluZWQpKSksXG4gICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUodGl0bGUgPT4ge1xuICAgICAgICAgICAgdGhpcy50aXRsZS5zZXQodGl0bGUgPz8gdW5kZWZpbmVkKTtcblxuICAgICAgICAgICAgY29uc3QgZGF0YURpYWxvZ0NvbmZpZyA9IHRoaXMuZGF0YSgpLmRpYWxvZ0NvbmZpZztcbiAgICAgICAgICAgIGlmIChkYXRhRGlhbG9nQ29uZmlnKSB7XG4gICAgICAgICAgICAgICAgZGF0YURpYWxvZ0NvbmZpZy5oZWFkZXIgPSB0aXRsZSA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5lZGl0b3JBY3Rpb24oKS5hY3RpdmF0aW9uVHJpZ2dlciA9PT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vbnNTZXJ2aWNlLnNldFBhZ2VUaXRsZSh0aXRsZSA/PyB1bmRlZmluZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgI3ZpZXdDb250YWluZXJFZGl0b3JSZXNldFN1YnNjcmlwdGlvbiA9IHRoaXMudmlld0NvbnRhaW5lclxuICAgICAgICA/IHRvT2JzZXJ2YWJsZSh0aGlzLmVkaXRvckFjdGlvbilcbiAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoYSA9PiAodGhpcy5pc0FjdGlvbk1haW5Ud0VkaXRvcihhKSA/ICh0aGlzLnZpZXdDb250YWluZXI/LmVkaXRvclJlc2V0JCA/PyBORVZFUikgOiBORVZFUikpLFxuICAgICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgIG5leHQ6IGUgPT4gdGhpcy5vbkVkaXRvclJlc2V0KGUpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICN2aWV3Q29udGFpbmVyRWRpdG9yQ2xvc2VTdWJzY3JpcHRpb24gPSB0aGlzLnZpZXdDb250YWluZXJcbiAgICAgICAgPyB0b09ic2VydmFibGUodGhpcy5lZGl0b3JBY3Rpb24pXG4gICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKGEgPT4gKHRoaXMuaXNBY3Rpb25NYWluVHdFZGl0b3IoYSkgPyAodGhpcy52aWV3Q29udGFpbmVyPy5lZGl0b3JDbG9zZSQgPz8gTkVWRVIpIDogTkVWRVIpKSxcbiAgICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICBuZXh0OiAoKSA9PiB0aGlzLmNhbmNlbCgpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICNkYXRhUHJvdmlkZXJFZGl0b3JSZXNldFN1YnNjcmlwdGlvbiA9IHRvT2JzZXJ2YWJsZSh0aGlzLmVkaXRvckFjdGlvbilcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAoYWN0aW9uID0+IChhY3Rpb24uZGF0YVByb3ZpZGVyIGFzIElFZGl0b3JEYXRhUHJvdmlkZXIgfCB1bmRlZmluZWQpPy5lZGl0b3JSZXNldCQgPz8gTkVWRVIpLFxuICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IGUgPT4gdGhpcy5vbkVkaXRvclJlc2V0KGUpXG4gICAgICAgIH0pO1xuICAgICN2aWV3Q29udGFpbmVyRGF0YVByb3ZpZGVyRWRpdG9yUmVzZXRTdWJzY3JpcHRpb24gPSB0aGlzLnZpZXdDb250YWluZXJcbiAgICAgICAgPyB0b09ic2VydmFibGUodGhpcy52aWV3Q29udGFpbmVyLmRhdGFQcm92aWRlcilcbiAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICBjb21iaW5lTGF0ZXN0V2l0aCh0b09ic2VydmFibGUodGhpcy5lZGl0b3JBY3Rpb24pKSxcbiAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoW2RhdGFQcm92aWRlciwgYWN0aW9uXSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQWN0aW9uTWFpblR3RWRpdG9yKGFjdGlvbikgJiYgYWN0aW9uLmRhdGFQcm92aWRlciA9PSBudWxsID8gKChkYXRhUHJvdmlkZXIgYXMgSUVkaXRvckRhdGFQcm92aWRlciB8IHVuZGVmaW5lZCk/LmVkaXRvclJlc2V0JCA/PyBORVZFUikgOiBORVZFUlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICBuZXh0OiBlID0+IHRoaXMub25FZGl0b3JSZXNldChlKVxuICAgICAgICAgICAgICB9KVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy4jdGl0bGVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuZmV0Y2hFeGVjdXRpb25TdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuc3VibWl0RXhlY3V0aW9uU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuaW5zdGFuY2U7XG4gICAgICAgIHRoaXMudW5zZXRJbnN0YW5jZSgpO1xuICAgICAgICB0aGlzLmFjdGlvbkV4ZWN1dG9yLm9uQWN0aW9uRWRpdG9yRGVzdHJveShpbnN0YW5jZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uU3VibWl0KGV2ZW50OiBGb3JtRWRpdG9yU3VibWl0RXZlbnQ8SXRlbT4pIHtcbiAgICAgICAgaWYgKCF0aGlzLmluc3RhbmNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYEFjdGlvbiBpcyBub3QgaW5zdGFudGlhdGVkIGluIGFjdGlvbiBlZGl0b3IgZm9yIGFjdGlvbiAke3RoaXMuZWRpdG9yQWN0aW9uKCkuYWN0aW9uTmFtZX0uYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIC8vIHByZXBhcmUgcGFyYW1ldGVyc1xuICAgICAgICAgICAgY29uc3QgYWN0aW9uUGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyczxJdGVtPiA9IHtcbiAgICAgICAgICAgICAgICBpdGVtSWQ6IHRoaXMuaXRlbUlkKCksXG4gICAgICAgICAgICAgICAgaXRlbTogZXZlbnQuZm9ybUl0ZW0sXG4gICAgICAgICAgICAgICAgYWN0aW9uRGF0YTogdGhpcy5hY3Rpb25EYXRhKClcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodGhpcy5lZGl0b3JBY3Rpb24oKS5lZGl0b3JEZXNjcmlwdG9yLmlzTG9jYWxpemVkKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uUGFyYW1ldGVycy5sb2NhbGUgPSB0aGlzLmNvbW1vbnNTZXJ2aWNlLmdldERlZmF1bHRMb2NhbGUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuYWN0aW9uRXhlY3V0b3IucHJlcGFyZUNvbnRleHRGb3JFZGl0b3JTdWJtaXQoXG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3JBY3Rpb24oKSxcbiAgICAgICAgICAgICAgICBhY3Rpb25QYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSgpLmRhdGFQcm92aWRlcixcbiAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSgpLnByZXZpb3VzQWN0aW9uSW5zdGFuY2VcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuc3VibWl0RXhlY3V0aW9uU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5zdWJtaXRFeGVjdXRpb25TdWJzY3JpcHRpb24gPSBjb250ZXh0LmV4ZWN1dGlvbiQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdFN1Ym1pdEl0ZW0gPSBldmVudC5mb3JtSXRlbTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9kZWxJZFByb3AgPSB0aGlzLmVkaXRvckFjdGlvbigpLmVkaXRvckRlc2NyaXB0b3IubW9kZWw/LmlkUHJvcGVydHk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMgJiYgdHlwZW9mIHJlcyA9PT0gJ29iamVjdCcgJiYgIXRoaXMuaXRlbUlkKCkgJiYgbW9kZWxJZFByb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGNvdmVyIGNyZWF0aW9uIVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVJdGVtSWQocmVzW21vZGVsSWRQcm9wIGFzIGtleW9mIG9iamVjdF0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uUnVuLmVtaXQocmVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5hY3Rpb25FeGVjdXRvci5ydW4oY29udGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2FuY2VsKCkge1xuICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oYEFjdGlvbiBlZGl0b3IgY2Fubm90IGJlIGNhbmNlbGVkIGZvciAke3RoaXMuZWRpdG9yQWN0aW9uKCkuYWN0aW9uTmFtZX0sIGJlY2F1c2Ugbm8gYWN0aW9uIGluc3RhbmNlIGlzIHByZXNlbnRgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFjdGlvbkNhbmNlbC5lbWl0KHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMuYWN0aW9uRXhlY3V0b3IuZmluaXNoQWN0aW9uKHRoaXMuaW5zdGFuY2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVJdGVtSWQoaXRlbUlkOiBJZFR5cGUgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5pdGVtSWQuc2V0KGl0ZW1JZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZUl0ZW0oaXRlbTogSXRlbSB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLml0ZW0uc2V0KGl0ZW0pO1xuICAgIH1cblxuICAgIHB1YmxpYyB0cmlnZ2VyU3VibWl0KCkge1xuICAgICAgICB0aGlzLmZvcm1FZGl0b3JDbXAoKT8uc3VibWl0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uVmFsdWVDaGFuZ2UodmFsdWU6IEl0ZW0pIHtcbiAgICAgICAgdGhpcy5mb3JtVmFsdWUuc2V0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25BdXRvU2F2ZSh2YWx1ZTogRWRpdG9yQXV0b1NhdmVTdGF0dXMpIHtcbiAgICAgICAgdGhpcy5hdXRvU2F2ZVN0YXR1cy5zZXQodmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmV0Y2hJdGVtKCkge1xuICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgQWN0aW9uIGlzIG5vdCBpbnN0YW50aWF0ZWQgaW4gYWN0aW9uIGVkaXRvciBmb3IgYWN0aW9uICR7dGhpcy5lZGl0b3JBY3Rpb24oKS5hY3Rpb25OYW1lfS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFjdGlvblBhcmFtZXRlcnM6IEFjdGlvblBhcmFtZXRlcnM8SXRlbT4gPSB7XG4gICAgICAgICAgICBpdGVtSWQ6IHRoaXMuaXRlbUlkKCksXG4gICAgICAgICAgICBpdGVtOiB0aGlzLml0ZW0oKSxcbiAgICAgICAgICAgIGFjdGlvbkRhdGE6IHRoaXMuYWN0aW9uRGF0YSgpXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLmVkaXRvckFjdGlvbigpLmVkaXRvckRlc2NyaXB0b3IuaXNMb2NhbGl6ZWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmVkaXRvckFjdGlvbigpLmVkaXRvckRlc2NyaXB0b3IuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25QYXJhbWV0ZXJzLmxvY2FsZSA9IHRoaXMuY29tbW9uc1NlcnZpY2UuYXBwRGF0YUxvY2FsZSgpITtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uUGFyYW1ldGVycy5sb2NhbGUgPSB0aGlzLmNvbW1vbnNTZXJ2aWNlLmdldERlZmF1bHRMb2NhbGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZT8ucHJldmlvdXNJbnN0YW5jZSBpbnN0YW5jZW9mIEFjdGlvbkluc3RhbmNlICYmIHRoaXMuaW5zdGFuY2UucHJldmlvdXNJbnN0YW5jZS5jb250ZXh0Py5wYXJhbWV0ZXJzLml0ZW0pIHtcbiAgICAgICAgICAgIGFjdGlvblBhcmFtZXRlcnMuZm9ybUl0ZW0gPSB0aGlzLmluc3RhbmNlLnByZXZpb3VzSW5zdGFuY2UuY29udGV4dC5wYXJhbWV0ZXJzLml0ZW07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmluc3RhbmNlPy5wcmV2aW91c0luc3RhbmNlPy5yZXN1bHQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBhY3Rpb25QYXJhbWV0ZXJzLnN1Ym1pdFJlc3VsdCA9IHRoaXMuaW5zdGFuY2U/LnByZXZpb3VzSW5zdGFuY2U/LnJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmFjdGlvbkV4ZWN1dG9yLnByZXBhcmVDb250ZXh0Rm9yRWRpdG9yRmV0Y2goXG4gICAgICAgICAgICB0aGlzLmVkaXRvckFjdGlvbigpLFxuICAgICAgICAgICAgYWN0aW9uUGFyYW1ldGVycyxcbiAgICAgICAgICAgIHRoaXMuZGF0YSgpLmRhdGFQcm92aWRlcixcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UsXG4gICAgICAgICAgICB0aGlzLmRhdGEoKS5wcmV2aW91c0FjdGlvbkluc3RhbmNlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZmV0Y2hFeGVjdXRpb25TdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuZmV0Y2hFeGVjdXRpb25TdWJzY3JpcHRpb24gPSBjb250ZXh0LmV4ZWN1dGlvbiQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSXRlbShyZXMgPz8gdW5kZWZpbmVkKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5hY3Rpb25FeGVjdXRvci5ydW4oY29udGV4dCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRFZGl0b3JFbmFibGVkKGlzRW5hYmxlZCA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5pc0Zvcm1EaXNhYmxlZC5zZXQoIWlzRW5hYmxlZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcm9jZXNzQWN0aW9uSW5zdGFuY2UoaW5zdGFuY2U6IElBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPikge1xuICAgICAgICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIEFjdGlvbkluc3RhbmNlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKCdVbmtub3duIHR5cGUgb2YgYWN0aW9uIGluc3RhbmNlIHJlY2VpdmVkJywge2RldGFpbHM6IGluc3RhbmNlfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmluc3RhbmNlIHx8IHRoaXMuaW5zdGFuY2UuaW5zdGFuY2VMb25nTmFtZSAhPT0gaW5zdGFuY2UuaW5zdGFuY2VMb25nTmFtZSkge1xuICAgICAgICAgICAgdGhpcy51bnNldEluc3RhbmNlKCk7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlID0gaW5zdGFuY2U7XG5cbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2VTdGF0ZVN1YnNjcmlwdGlvbiA9IHRoaXMuaW5zdGFuY2Uuc3RhdGUkLnN1YnNjcmliZShzID0+IHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5BY3RpdmF0aW9uRW5kOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mZXRjaEl0ZW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZldGNoU3RhcnQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEVkaXRvckVuYWJsZWQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nLnNldCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZldGNoRXJyb3I6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZldGNoRW5kOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRFZGl0b3JFbmFibGVkKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5SdW5TdGFydDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RWRpdG9yRW5hYmxlZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdExvYWRpbmcuc2V0KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uUnVuRW5kOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlJ1bkVycm9yOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRFZGl0b3JFbmFibGVkKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXRMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5OZXh0QWN0aW9uU3RhcnQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZT8ubmV4dEFjdGlvbkluc3RhbmNlPy5hY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZUVudW0uRGlyZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXRMb2FkaW5nLnNldCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLk5leHRBY3Rpb25FbmQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZT8ubmV4dEFjdGlvbkluc3RhbmNlPy5hY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZUVudW0uRGlyZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXRMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5FcnJvckFjdGlvblN0YXJ0OlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2U/LmVycm9yQWN0aW9uSW5zdGFuY2U/LmFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlRW51bS5EaXJlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdExvYWRpbmcuc2V0KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRXJyb3JBY3Rpb25FbmQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZT8uZXJyb3JBY3Rpb25JbnN0YW5jZT8uYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGVFbnVtLkRpcmVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VibWl0TG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoRXJyb3JGaW5hbDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RWRpdG9yRW5hYmxlZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hTdWNjZXNzRmluYWw6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoRGlzbWlzc2VkRmluYWw6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEVkaXRvckVuYWJsZWQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51bnNldEluc3RhbmNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hTdWNjZXNzUmVhY3RpdmF0ZUZpbmFsOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRFZGl0b3JFbmFibGVkKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1ha2UgY29weSBvZiBpdGVtIGFuZCB1cGRhdGUgdGl0bGUgdG8gYmUgb24gdGhlIGxhdGVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVJdGVtKG9iamVjdERlZXBDb3B5KHRoaXMubGFzdFN1Ym1pdEl0ZW0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNob3VsZCBhbHNvIHVuc2V0SW5zdGFuY2UsIGJ1dCBsZXQgdGhpcyBmb3IgcmVhY3RpdmF0aW9uSW5zdGFuY2UkIGxpc3RlbmVyIHRvIG5vdCBpbnRlcmZlcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlUmVhY3RpdmF0aW9uU3Vic2NyaXB0aW9uID0gdGhpcy5pbnN0YW5jZS5yZWFjdGl2YXRpb25JbnN0YW5jZSQuc3Vic2NyaWJlKG5ld0luc3RhbmNlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NBY3Rpb25JbnN0YW5jZShuZXdJbnN0YW5jZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdW5zZXRJbnN0YW5jZSgpIHtcbiAgICAgICAgdGhpcy5pbnN0YW5jZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5pbnN0YW5jZVN0YXRlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmluc3RhbmNlUmVhY3RpdmF0aW9uU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNBY3Rpb25NYWluVHdFZGl0b3IoYWN0aW9uOiBBY3Rpb25FZGl0b3JEZXNjcmlwdG9ySW5zdDxhbnk+KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBhY3Rpb24udGFibGV2aWV3Q2F0ZWdvcnkgIT0gbnVsbCAmJlxuICAgICAgICAgICAgW1RhYmxldmlld0FjdGlvbkRlZmF1bHRDYXRlZ29yaWVzLkRFVEFJTFMsIFRhYmxldmlld0FjdGlvbkRlZmF1bHRDYXRlZ29yaWVzLkVESVQsIFRhYmxldmlld0FjdGlvbkRlZmF1bHRDYXRlZ29yaWVzLkFERF0uaW5jbHVkZXMoYWN0aW9uLnRhYmxldmlld0NhdGVnb3J5KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpiZWZvcmV1bmxvYWQnKVxuICAgIHByaXZhdGUgYmVmb3JlV2luZG93VW5sb2FkKCkge1xuICAgICAgICBpZiAodGhpcy5kYXRhKCkuaXNEaWFsb2cgJiYgdGhpcy5mb3JtRWRpdG9yQ21wKCk/LmZvcm0ucHJpc3RpbmUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gY29uZmlybSh0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdtbmdFZGl0b3IudW5zYXZlZENoYW5nZXNDb25maXJtYXRpb24ubWVzc2FnZScpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5ZG93bi5Fc2NhcGUnKVxuICAgIHByaXZhdGUgb25Fc2NhcGVQcmVzc2VkKCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmRhdGEoKS5pc0RpYWxvZyAmJlxuICAgICAgICAgICAgdGhpcy5lZGl0b3JBY3Rpb24oKS5hY3RpdmF0aW9uVHJpZ2dlciA9PT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUgJiZcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2U/LmFjdGl2YXRpb25EaWFsb2dSZWYgJiZcbiAgICAgICAgICAgIHBhcnNlSW50KHRoaXMuZGlhbG9nU2VydmljZS5kaWFsb2dDb21wb25lbnRSZWZNYXAuZ2V0KHRoaXMuaW5zdGFuY2U/LmFjdGl2YXRpb25EaWFsb2dSZWYpPy5pbnN0YW5jZS5jb250YWluZXI/LnN0eWxlLnpJbmRleCA/PyAnJykgPT09IFpJbmRleFV0aWxzLmdldEN1cnJlbnQoKVxuICAgICAgICApXG4gICAgICAgICAgICB0aGlzLmNsb3NlV2l0aFVuc2F2ZWRDaGFuZ2VzQ29uZmlybWF0aW9uKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsb3NlV2l0aFVuc2F2ZWRDaGFuZ2VzQ29uZmlybWF0aW9uKGNhbGxGcm9tR3VhcmQgPSBmYWxzZSk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICBpZiAodGhpcy5mb3JtRWRpdG9yQ21wKCk/LmZvcm0ucHJpc3RpbmUgPT09IGZhbHNlICYmIHRoaXMuZWRpdG9yQWN0aW9uKCkudW5zYXZlZENoYW5nZXNDb25maXJtYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNob3dVbnNhdmVkQ2hhbmdlc0NvbmZpcm1hdGlvbkRpYWxvZyhjYWxsRnJvbUd1YXJkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghY2FsbEZyb21HdWFyZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2YodHJ1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG93VW5zYXZlZENoYW5nZXNDb25maXJtYXRpb25EaWFsb2coY2FsbEZyb21HdWFyZDogYm9vbGVhbik6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICBjb25zdCBzdWJqZWN0ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xuICAgICAgICAgICAgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdtbmdFZGl0b3IudW5zYXZlZENoYW5nZXNDb25maXJtYXRpb24uaGVhZGVyJyksXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdtbmdFZGl0b3IudW5zYXZlZENoYW5nZXNDb25maXJtYXRpb24ubWVzc2FnZScpLFxuICAgICAgICAgICAgYWNjZXB0TGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2dlbmVyYWwueWVzJyksXG4gICAgICAgICAgICByZWplY3RMYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZ2VuZXJhbC5ubycpLFxuICAgICAgICAgICAgaWNvbjogJ3BpIHBpLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlJyxcbiAgICAgICAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghY2FsbEZyb21HdWFyZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlamVjdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkVkaXRvclJlc2V0KGV2ZW50PzogRWRpdG9yUmVzZXRFdmVudDxJdGVtPikge1xuICAgICAgICBpZiAoZXZlbnQ/LmZldGNoKSB7XG4gICAgICAgICAgICB0aGlzLmZldGNoSXRlbSgpO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50Py5pdGVtKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1FZGl0b3JDbXAoKT8ucmVzZXRGb3JtTW9kZWwoZXZlbnQuaXRlbSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQ/LmZpZWxkcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQuZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtRWRpdG9yQ21wKCk/LnJlc2V0RmllbGRWYWx1ZShrZXksIGV2ZW50LmZpZWxkc1trZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUVkaXRvckNtcCgpPy5yZXNldEZvcm1Nb2RlbCgpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbkVkaXRvckluamVjdG9yQ29udGV4dElucHV0RGF0YTxJdGVtLCBTZXJ2aWNlPiB7XG4gICAgZGVzY3JpcHRvcjogQWN0aW9uRWRpdG9yRGVzY3JpcHRvckluc3Q8SXRlbSwgU2VydmljZT47XG4gICAgaXNEaWFsb2c6IGJvb2xlYW47XG4gICAgZGlhbG9nQ29uZmlnPzogRHluYW1pY0RpYWxvZ0NvbmZpZztcbiAgICBpdGVtSWQ/OiBJZFR5cGU7XG4gICAgaXRlbT86IEl0ZW07XG4gICAgYWN0aW9uRGF0YT86IEFjdGlvbkRhdGE7XG4gICAgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcjxJdGVtLCBTZXJ2aWNlPjtcbiAgICBhY3Rpb25JbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPEl0ZW0sIFNlcnZpY2U+O1xuICAgIHByZXZpb3VzQWN0aW9uSW5zdGFuY2U/OiBJQWN0aW9uSW5zdGFuY2U8YW55LCBhbnk+O1xufVxuIiwiQGlmICghZGF0YSgpLmlzRGlhbG9nICYmIHRpdGxlKCkpIHtcbiAgICA8aDU+e3sgdGl0bGUoKSB9fTwvaDU+XG59XG5AaWYgKGRhdGEoKS5pc0RpYWxvZyAmJiBlZGl0b3JBY3Rpb24oKS5hY3RpdmF0aW9uVHJpZ2dlciA9PT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUpIHtcbiAgICA8c3BhbiBjbGFzcz1cInAtZGlhbG9nLWhlYWRlciBkaWFsb2ctY2xvc2UtYnV0dG9uLXdyYXBwZXJcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJwLWRpYWxvZy1oZWFkZXItaWNvbiBwLWRpYWxvZy1oZWFkZXItbWF4aW1pemUgcC1saW5rXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNsb3NlV2l0aFVuc2F2ZWRDaGFuZ2VzQ29uZmlybWF0aW9uKClcIlxuICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiY2xvc2VXaXRoVW5zYXZlZENoYW5nZXNDb25maXJtYXRpb24oKVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWRpYWxvZy1oZWFkZXItY2xvc2UtaWNvbiBwaSBwaS10aW1lc1wiPjwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9zcGFuPlxufVxuPGRpdiBjbGFzcz1cImgtZnVsbCBmbGV4IGZsZXgtY29sdW1uXCI+XG4gICAgQGlmICh0b29sYmFyTGVmdEFjdGlvbnMoKS5sZW5ndGggPiAwIHx8IHRvb2xiYXJSaWdodEFjdGlvbnMoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMSBtbmctYWN0aW9uLWVkaXRvci10b29sYmFyLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPHAtdG9vbGJhciBzdHlsZUNsYXNzPVwibW5nLWFjdGlvbi1lZGl0b3ItdG9vbGJhclwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJsZWZ0XCI+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGFjdGlvbiBvZiB0b29sYmFyTGVmdEFjdGlvbnMoKTsgdHJhY2sgYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bW5nLWFjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY3Rpb25dPVwiYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic3VibWl0TG9hZGluZygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbG9hZGluZ109XCIkYW55KGFjdGlvbikuc3VibWl0VHlwZSA9PT0gYWN0aW9uRWRpdG9yU3VibWl0VHlwZVN1Ym1pdCA/IHN1Ym1pdExvYWRpbmcoKSA6IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaG9zdENvbXBvbmVudF09XCJ0aGlzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJmb3JtVmFsdWUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1JZF09XCJpdGVtSWQoKVwiPjwvbW5nLWFjdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cInJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGFjdGlvbiBvZiB0b29sYmFyUmlnaHRBY3Rpb25zKCk7IHRyYWNrIGFjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgPG1uZy1hY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWN0aW9uXT1cImFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInN1Ym1pdExvYWRpbmcoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiJGFueShhY3Rpb24pLnN1Ym1pdFR5cGUgPT09IGFjdGlvbkVkaXRvclN1Ym1pdFR5cGVTdWJtaXQgPyBzdWJtaXRMb2FkaW5nKCkgOiBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hvc3RDb21wb25lbnRdPVwidGhpc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiZm9ybVZhbHVlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtSWRdPVwiaXRlbUlkKClcIj48L21uZy1hY3Rpb24+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9wLXRvb2xiYXI+XG4gICAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMSBtbmctYWN0aW9uLWVkaXRvci1mb3JtLWNvbnRhaW5lclwiPlxuICAgICAgICBAaWYgKGxvYWRpbmcoKSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPHAtcHJvZ3Jlc3NTcGlubmVyIFtzdHlsZV09XCJ7d2lkdGg6ICczcmVtJywgaGVpZ2h0OiAnM3JlbSd9XCIgc3Ryb2tlV2lkdGg9XCIzXCI+PC9wLXByb2dyZXNzU3Bpbm5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoZWRpdG9yQWN0aW9uKCkuZWRpdG9yRGVzY3JpcHRvciAmJiAhbG9hZGluZygpKSB7XG4gICAgICAgICAgICA8bW5nLWZvcm0tZWRpdG9yXG4gICAgICAgICAgICAgICAgW2Rlc2NyaXB0b3JdPVwiZWRpdG9yQWN0aW9uKCkuZWRpdG9yRGVzY3JpcHRvclwiXG4gICAgICAgICAgICAgICAgW2VkaXRvcklkXT1cImVkaXRvckFjdGlvbigpLmFjdGlvbk5hbWVMb25nXCJcbiAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtKClcIlxuICAgICAgICAgICAgICAgIFtpdGVtSWRdPVwiaXRlbUlkKClcIlxuICAgICAgICAgICAgICAgIFtpc0Zvcm1EaXNhYmxlZF09XCJpc0Zvcm1EaXNhYmxlZCgpXCJcbiAgICAgICAgICAgICAgICBzaG93QXV0b1NhdmVTdGF0dXM9XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGZvcm1TdWJtaXQpPVwib25TdWJtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGF1dG9TYXZlU3RhdHVzKT1cIm9uQXV0b1NhdmUoJGV2ZW50KVwiIC8+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtbmctYWN0aW9uLWVkaXRvci1mb290ZXItY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICBAZm9yIChhY3Rpb24gb2YgZm9vdGVyTGVmdEFjdGlvbnMoKTsgdHJhY2sgYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgPG1uZy1hY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgW2FjdGlvbl09XCJhY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic3VibWl0TG9hZGluZygpXCJcbiAgICAgICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiJGFueShhY3Rpb24pLnN1Ym1pdFR5cGUgPT09IGFjdGlvbkVkaXRvclN1Ym1pdFR5cGVTdWJtaXQgPyBzdWJtaXRMb2FkaW5nKCkgOiBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIFtob3N0Q29tcG9uZW50XT1cInRoaXNcIlxuICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJmb3JtVmFsdWUoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtSWRdPVwiaXRlbUlkKClcIj48L21uZy1hY3Rpb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGVkaXRvckFjdGlvbigpLmVkaXRvckRlc2NyaXB0b3IuYXV0b1NhdmUpIHtcbiAgICAgICAgICAgICAgICA8bW5nLWVkaXRvci1hdXRvLXNhdmUtc3RhdHVzIFtzdGF0dXNdPVwiYXV0b1NhdmVTdGF0dXMoKVwiPjwvbW5nLWVkaXRvci1hdXRvLXNhdmUtc3RhdHVzPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIEBmb3IgKGFjdGlvbiBvZiBmb290ZXJSaWdodEFjdGlvbnMoKTsgdHJhY2sgYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgPG1uZy1hY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgW2FjdGlvbl09XCJhY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic3VibWl0TG9hZGluZygpXCJcbiAgICAgICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiJGFueShhY3Rpb24pLnN1Ym1pdFR5cGUgPT09IGFjdGlvbkVkaXRvclN1Ym1pdFR5cGVTdWJtaXQgPyBzdWJtaXRMb2FkaW5nKCkgOiBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIFtob3N0Q29tcG9uZW50XT1cInRoaXNcIlxuICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJmb3JtVmFsdWUoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtSWRdPVwiaXRlbUlkKClcIj48L21uZy1hY3Rpb24+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -1,35 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, computed, inject, input, output } from '@angular/core';
2
- import { FormsModule } from '@angular/forms';
3
- import { of } from 'rxjs';
4
- import { CommonsService } from '@mediusinc/mng-commons/core';
5
- import { DropdownComponent } from '@mediusinc/mng-commons/form';
6
- import { lookupDataProvider } from '@mediusinc/mng-commons/form/api';
7
- import { ViewContainer } from '../../services/view-container.service';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "@angular/forms";
10
- export class DataLanguageDropdownComponent {
11
- constructor() {
12
- this.viewContainer = inject(ViewContainer, { optional: true });
13
- this.commons = inject(CommonsService);
14
- this.action = input.required();
15
- this.actionData = input.required();
16
- this.item = input.required();
17
- this.itemId = input.required();
18
- this.enabled = input.required();
19
- this.loading = input.required();
20
- this.trigger = output();
21
- // dropdown properties
22
- this.selectionItemsDataProvider = computed(() => lookupDataProvider().withLookup(() => of(this.commons.appDataLocales())));
23
- }
24
- updateDataLocale(dataLang) {
25
- this.commons.setAppDataLocale(dataLang);
26
- this.viewContainer?.reloadTable({});
27
- }
28
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: DataLanguageDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
29
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.12", type: DataLanguageDropdownComponent, isStandalone: true, selector: "mng-data-language-dropdown", inputs: { action: { classPropertyName: "action", publicName: "action", isSignal: true, isRequired: true, transformFunction: null }, actionData: { classPropertyName: "actionData", publicName: "actionData", isSignal: true, isRequired: true, transformFunction: null }, item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: true, transformFunction: null }, itemId: { classPropertyName: "itemId", publicName: "itemId", isSignal: true, isRequired: true, transformFunction: null }, enabled: { classPropertyName: "enabled", publicName: "enabled", isSignal: true, isRequired: true, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { trigger: "trigger" }, ngImport: i0, template: "<mng-dropdown [dataProvider]=\"selectionItemsDataProvider()\" [ngModel]=\"commons.appDataLocale()\" [showClear]=\"false\" (valueChange)=\"updateDataLocale($event)\"></mng-dropdown>\n", dependencies: [{ kind: "component", type: DropdownComponent, selector: "mng-dropdown", inputs: ["dataProvider", "options", "optionsTrackProperty", "optionsLabelProperty", "optionsLabelTranslate", "optionsValueProperty", "optionsDisabledProperty", "multiselect", "placeholder", "showClear", "selectFirstItem", "className", "dropdownClassName", "changeValueOnBlur", "loading", "disabled", "allowInput", "appendTo", "inlineSearch", "searchTrim"], outputs: ["valueChange", "blur"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
30
- }
31
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: DataLanguageDropdownComponent, decorators: [{
32
- type: Component,
33
- args: [{ standalone: true, selector: 'mng-data-language-dropdown', imports: [DropdownComponent, FormsModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mng-dropdown [dataProvider]=\"selectionItemsDataProvider()\" [ngModel]=\"commons.appDataLocale()\" [showClear]=\"false\" (valueChange)=\"updateDataLocale($event)\"></mng-dropdown>\n" }]
34
- }] });
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1sYW5ndWFnZS1kcm9wZG93bi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90YWJsZXZpZXcvc3JjL2FjdGlvbi9jb21wb25lbnRzL2xvY2FsaXphdGlvbi9kYXRhLWxhbmd1YWdlLWRyb3Bkb3duLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3RhYmxldmlldy9zcmMvYWN0aW9uL2NvbXBvbmVudHMvbG9jYWxpemF0aW9uL2RhdGEtbGFuZ3VhZ2UtZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDbEcsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFeEIsT0FBTyxFQUErQixjQUFjLEVBQVMsTUFBTSw2QkFBNkIsQ0FBQztBQUNqRyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUM5RCxPQUFPLEVBQXlCLGtCQUFrQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFHM0YsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHVDQUF1QyxDQUFDOzs7QUFTcEUsTUFBTSxPQUFPLDZCQUE2QjtJQVAxQztRQVFxQixrQkFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUUsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztRQUN6RCxZQUFPLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRTFDLFdBQU0sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUEyQixDQUFDO1FBQ25ELGVBQVUsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFjLENBQUM7UUFDMUMsU0FBSSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUssQ0FBQztRQUMzQixXQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVSxDQUFDO1FBQ2xDLFlBQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFXLENBQUM7UUFDcEMsWUFBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVcsQ0FBQztRQUVwQyxZQUFPLEdBQUcsTUFBTSxFQUF1QixDQUFDO1FBRS9DLHNCQUFzQjtRQUNmLCtCQUEwQixHQUFHLFFBQVEsQ0FBaUMsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FNeEs7SUFKVSxnQkFBZ0IsQ0FBQyxRQUFnQjtRQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7K0dBbkJRLDZCQUE2QjttR0FBN0IsNkJBQTZCLDIyQkNuQjFDLHdMQUNBLDRDRGNjLGlCQUFpQiwrYkFBRSxXQUFXOzs0RkFJL0IsNkJBQTZCO2tCQVB6QyxTQUFTO2lDQUNNLElBQUksWUFDTiw0QkFBNEIsV0FDN0IsQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLENBQUMsbUJBRXhCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBpbmplY3QsIGlucHV0LCBvdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQge29mfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtBY3Rpb25EYXRhLCBBY3Rpb25QYXJhbWV0ZXJzLCBDb21tb25zU2VydmljZSwgSWRUeXBlfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuaW1wb3J0IHtEcm9wZG93bkNvbXBvbmVudH0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9mb3JtJztcbmltcG9ydCB7TG9va3VwRGF0YVByb3ZpZGVySW5zdCwgbG9va3VwRGF0YVByb3ZpZGVyfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2Zvcm0vYXBpJztcbmltcG9ydCB7QWN0aW9uRGVzY3JpcHRvckluc3QsIElBY3Rpb25Db21wb25lbnR9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvdGFibGV2aWV3L2FwaSc7XG5cbmltcG9ydCB7Vmlld0NvbnRhaW5lcn0gZnJvbSAnLi4vLi4vc2VydmljZXMvdmlldy1jb250YWluZXIuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdtbmctZGF0YS1sYW5ndWFnZS1kcm9wZG93bicsXG4gICAgaW1wb3J0czogW0Ryb3Bkb3duQ29tcG9uZW50LCBGb3Jtc01vZHVsZV0sXG4gICAgdGVtcGxhdGVVcmw6ICdkYXRhLWxhbmd1YWdlLWRyb3Bkb3duLmNvbXBvbmVudC5odG1sJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBEYXRhTGFuZ3VhZ2VEcm9wZG93bkNvbXBvbmVudDxUID0gYW55PiBpbXBsZW1lbnRzIElBY3Rpb25Db21wb25lbnQ8VD4ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdmlld0NvbnRhaW5lciA9IGluamVjdChWaWV3Q29udGFpbmVyLCB7b3B0aW9uYWw6IHRydWV9KTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgY29tbW9ucyA9IGluamVjdChDb21tb25zU2VydmljZSk7XG5cbiAgICBwdWJsaWMgYWN0aW9uID0gaW5wdXQucmVxdWlyZWQ8QWN0aW9uRGVzY3JpcHRvckluc3Q8VD4+KCk7XG4gICAgcHVibGljIGFjdGlvbkRhdGEgPSBpbnB1dC5yZXF1aXJlZDxBY3Rpb25EYXRhPigpO1xuICAgIHB1YmxpYyBpdGVtID0gaW5wdXQucmVxdWlyZWQ8VD4oKTtcbiAgICBwdWJsaWMgaXRlbUlkID0gaW5wdXQucmVxdWlyZWQ8SWRUeXBlPigpO1xuICAgIHB1YmxpYyBlbmFibGVkID0gaW5wdXQucmVxdWlyZWQ8Ym9vbGVhbj4oKTtcbiAgICBwdWJsaWMgbG9hZGluZyA9IGlucHV0LnJlcXVpcmVkPGJvb2xlYW4+KCk7XG5cbiAgICBwdWJsaWMgdHJpZ2dlciA9IG91dHB1dDxBY3Rpb25QYXJhbWV0ZXJzPFQ+PigpO1xuXG4gICAgLy8gZHJvcGRvd24gcHJvcGVydGllc1xuICAgIHB1YmxpYyBzZWxlY3Rpb25JdGVtc0RhdGFQcm92aWRlciA9IGNvbXB1dGVkPExvb2t1cERhdGFQcm92aWRlckluc3Q8c3RyaW5nPj4oKCkgPT4gbG9va3VwRGF0YVByb3ZpZGVyPHN0cmluZz4oKS53aXRoTG9va3VwKCgpID0+IG9mKHRoaXMuY29tbW9ucy5hcHBEYXRhTG9jYWxlcygpKSkpO1xuXG4gICAgcHVibGljIHVwZGF0ZURhdGFMb2NhbGUoZGF0YUxhbmc6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbW1vbnMuc2V0QXBwRGF0YUxvY2FsZShkYXRhTGFuZyk7XG4gICAgICAgIHRoaXMudmlld0NvbnRhaW5lcj8ucmVsb2FkVGFibGUoe30pO1xuICAgIH1cbn1cbiIsIjxtbmctZHJvcGRvd24gW2RhdGFQcm92aWRlcl09XCJzZWxlY3Rpb25JdGVtc0RhdGFQcm92aWRlcigpXCIgW25nTW9kZWxdPVwiY29tbW9ucy5hcHBEYXRhTG9jYWxlKClcIiBbc2hvd0NsZWFyXT1cImZhbHNlXCIgKHZhbHVlQ2hhbmdlKT1cInVwZGF0ZURhdGFMb2NhbGUoJGV2ZW50KVwiPjwvbW5nLWRyb3Bkb3duPlxuIl19