@mediusinc/mng-commons 0.0.1-rc.4 → 0.2.4

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 (453) hide show
  1. package/README.md +95 -0
  2. package/assets/i18n/en.json +54 -3
  3. package/assets/i18n/sl.json +54 -8
  4. package/assets/images/effect-ondark.png +0 -0
  5. package/assets/images/effect-ondark.svg +38 -0
  6. package/assets/images/effect-ondark@2x.png +0 -0
  7. package/assets/images/effect-onlight.png +0 -0
  8. package/assets/images/effect-onlight.svg +38 -0
  9. package/assets/images/effect-onlight@2x.png +0 -0
  10. package/assets/images/pages/exception-ondark.png +0 -0
  11. package/assets/images/pages/exception-onlight.png +0 -0
  12. package/assets/images/pages/login-ondark.png +0 -0
  13. package/assets/images/pages/login-onlight.png +0 -0
  14. package/esm2020/lib/api/models/builders/query-param.builder.mjs +48 -48
  15. package/esm2020/lib/api/models/filter-match-type.model.mjs +26 -24
  16. package/esm2020/lib/api/models/filter-param.model.mjs +46 -46
  17. package/esm2020/lib/api/models/index.mjs +9 -9
  18. package/esm2020/lib/api/models/mappers.mjs +17 -17
  19. package/esm2020/lib/api/models/query-mode.model.mjs +19 -19
  20. package/esm2020/lib/api/models/query-param.model.mjs +69 -69
  21. package/esm2020/lib/api/models/query-result.model.mjs +45 -45
  22. package/esm2020/lib/api/models/serialization.model.mjs +2 -2
  23. package/esm2020/lib/api/services/crud-api.abstract.service.mjs +72 -0
  24. package/esm2020/lib/api/services/index.mjs +2 -2
  25. package/esm2020/lib/api/utils/index.mjs +3 -3
  26. package/esm2020/lib/api/utils/medius-rest.util.mjs +122 -70
  27. package/esm2020/lib/api/utils/object-serializer.util.mjs +226 -226
  28. package/esm2020/lib/components/action/action.component.mjs +65 -63
  29. package/esm2020/lib/components/action/dialog/action-dialog.component.mjs +148 -157
  30. package/esm2020/lib/components/action/index.mjs +4 -4
  31. package/esm2020/lib/components/action/models/action-confirmation-service.model.mjs +2 -0
  32. package/esm2020/lib/components/action/models/action-execution.model.mjs +58 -0
  33. package/esm2020/lib/components/action/models/index.mjs +3 -0
  34. package/esm2020/lib/components/action/route/action-route.component.mjs +144 -144
  35. package/esm2020/lib/components/form/autocomplete/autocomplete.component.mjs +114 -0
  36. package/esm2020/lib/components/form/dropdown/dropdown.component.mjs +113 -0
  37. package/esm2020/lib/components/form/editor/form-editor.component.mjs +141 -142
  38. package/esm2020/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +19 -58
  39. package/esm2020/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +19 -51
  40. package/esm2020/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +16 -16
  41. package/esm2020/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +26 -26
  42. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +109 -109
  43. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +122 -122
  44. package/esm2020/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +17 -17
  45. package/esm2020/lib/components/form/formly/fields/index.mjs +8 -8
  46. package/esm2020/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +17 -17
  47. package/esm2020/lib/components/form/formly/wrappers/formly-table-wrapper/formly-table-wrapper.component.mjs +16 -16
  48. package/esm2020/lib/components/form/formly/wrappers/index.mjs +3 -3
  49. package/esm2020/lib/components/form/index.mjs +4 -2
  50. package/esm2020/lib/components/form/models/form-editor.event.mjs +7 -0
  51. package/esm2020/lib/components/form/models/index.mjs +2 -0
  52. package/esm2020/lib/components/layout/breadcrumb.component.mjs +17 -0
  53. package/esm2020/lib/components/layout/footer.component.mjs +17 -0
  54. package/esm2020/lib/components/layout/index.mjs +7 -7
  55. package/esm2020/lib/components/layout/main-layout.component.mjs +54 -0
  56. package/esm2020/lib/components/layout/menu-item.component.mjs +173 -0
  57. package/esm2020/lib/components/layout/menu.component.mjs +20 -0
  58. package/esm2020/lib/components/layout/services/index.mjs +2 -0
  59. package/esm2020/lib/components/layout/services/main-layout.component.service.mjs +190 -0
  60. package/esm2020/lib/components/layout/topbar.component.mjs +59 -0
  61. package/esm2020/lib/components/tableview/index.mjs +6 -4
  62. package/esm2020/lib/components/tableview/models/index.mjs +2 -0
  63. package/esm2020/lib/components/tableview/models/table.event.mjs +16 -0
  64. package/esm2020/lib/components/tableview/route/tableview-route.abstract.component.mjs +24 -24
  65. package/esm2020/lib/components/tableview/services/index.mjs +2 -0
  66. package/esm2020/lib/components/tableview/services/tableview.component.service.mjs +17 -0
  67. package/esm2020/lib/components/tableview/table/column-filter/column-filter.component.mjs +74 -0
  68. package/esm2020/lib/components/tableview/table/column-value/column-value.component.mjs +25 -0
  69. package/esm2020/lib/components/tableview/table/table.component.mjs +307 -173
  70. package/esm2020/lib/components/tableview/tableview.component.mjs +82 -83
  71. package/esm2020/lib/config/formly.config.mjs +136 -136
  72. package/esm2020/lib/config/index.mjs +2 -2
  73. package/esm2020/lib/config/models/index.mjs +2 -0
  74. package/esm2020/lib/config/models/mng-config.model.mjs +2 -0
  75. package/esm2020/lib/data-providers/base.data-provider.mjs +24 -0
  76. package/esm2020/lib/data-providers/editor.data-provider.mjs +37 -0
  77. package/esm2020/lib/data-providers/index.mjs +6 -0
  78. package/esm2020/lib/data-providers/lookup.data-provider.mjs +16 -0
  79. package/esm2020/lib/data-providers/table.data-provider.mjs +2 -0
  80. package/esm2020/lib/data-providers/tableview.data-provider.mjs +17 -0
  81. package/esm2020/lib/descriptors/action.descriptor.mjs +332 -0
  82. package/esm2020/lib/descriptors/editor.descriptor.mjs +670 -0
  83. package/esm2020/lib/descriptors/field.validator.mjs +21 -0
  84. package/esm2020/lib/descriptors/index.mjs +8 -0
  85. package/esm2020/lib/descriptors/lookup.descriptor.mjs +2 -0
  86. package/esm2020/lib/descriptors/model.descriptor.mjs +34 -0
  87. package/esm2020/lib/descriptors/table.descriptor.mjs +401 -0
  88. package/esm2020/lib/descriptors/tableview.descriptor.mjs +131 -0
  89. package/esm2020/lib/directives/component.directive.mjs +23 -0
  90. package/esm2020/lib/directives/index.mjs +3 -2
  91. package/esm2020/lib/directives/template.directive.mjs +29 -25
  92. package/esm2020/lib/mng-commons.module.mjs +410 -313
  93. package/esm2020/lib/models/index.mjs +3 -0
  94. package/esm2020/lib/models/router.model.mjs +2 -0
  95. package/esm2020/lib/models/user.model.mjs +2 -0
  96. package/esm2020/lib/pipes/boolean.pipe.mjs +22 -0
  97. package/esm2020/lib/pipes/index.mjs +3 -2
  98. package/esm2020/lib/pipes/property-path.pipe.mjs +36 -36
  99. package/esm2020/lib/services/action.service.mjs +269 -269
  100. package/esm2020/lib/services/commons.service.mjs +354 -0
  101. package/esm2020/lib/services/configuration.service.mjs +78 -77
  102. package/esm2020/lib/services/index.mjs +5 -7
  103. package/esm2020/lib/services/navigation.service.mjs +48 -49
  104. package/esm2020/lib/services/providers/commons-init.provider.mjs +4 -0
  105. package/esm2020/lib/services/providers/config-service.provider.mjs +20 -12
  106. package/esm2020/lib/services/providers/formly-config.provider.mjs +31 -31
  107. package/esm2020/lib/services/providers/index.mjs +4 -3
  108. package/esm2020/lib/services/tokens/browser-storage.token.mjs +6 -0
  109. package/esm2020/lib/services/tokens/index.mjs +3 -0
  110. package/esm2020/lib/services/tokens/module-config.token.mjs +3 -0
  111. package/esm2020/lib/types/index.mjs +3 -0
  112. package/esm2020/lib/types/type.decorator.mjs +7 -0
  113. package/esm2020/lib/types/type.model.mjs +2 -0
  114. package/esm2020/lib/utils/editor-formly.util.mjs +176 -176
  115. package/esm2020/lib/utils/i18n.util.mjs +125 -91
  116. package/esm2020/lib/utils/index.mjs +6 -5
  117. package/esm2020/lib/utils/model.util.mjs +57 -38
  118. package/esm2020/lib/utils/toast.util.mjs +39 -26
  119. package/esm2020/lib/utils/type.util.mjs +39 -39
  120. package/esm2020/mediusinc-mng-commons.mjs +5 -5
  121. package/esm2020/public-api.mjs +36 -33
  122. package/fesm2015/mediusinc-mng-commons.mjs +6093 -5081
  123. package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
  124. package/fesm2020/mediusinc-mng-commons.mjs +6018 -5030
  125. package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
  126. package/lib/api/models/builders/query-param.builder.d.ts +11 -11
  127. package/lib/api/models/filter-match-type.model.d.ts +23 -21
  128. package/lib/api/models/filter-param.model.d.ts +23 -23
  129. package/lib/api/models/index.d.ts +8 -8
  130. package/lib/api/models/mappers.d.ts +6 -6
  131. package/lib/api/models/query-mode.model.d.ts +16 -16
  132. package/lib/api/models/query-param.model.d.ts +31 -31
  133. package/lib/api/models/query-result.model.d.ts +36 -36
  134. package/lib/api/models/serialization.model.d.ts +8 -8
  135. package/lib/api/services/{abstract-crud-api.service.d.ts → crud-api.abstract.service.d.ts} +23 -23
  136. package/lib/api/services/index.d.ts +1 -1
  137. package/lib/api/utils/index.d.ts +2 -2
  138. package/lib/api/utils/medius-rest.util.d.ts +12 -6
  139. package/lib/api/utils/object-serializer.util.d.ts +30 -30
  140. package/lib/components/action/action.component.d.ts +36 -36
  141. package/lib/components/action/dialog/action-dialog.component.d.ts +46 -48
  142. package/lib/components/action/index.d.ts +3 -3
  143. package/lib/{models/interfaces/confirmation-service.model.d.ts → components/action/models/action-confirmation-service.model.d.ts} +6 -6
  144. package/lib/{models/action/action.model.d.ts → components/action/models/action-execution.model.d.ts} +53 -53
  145. package/lib/components/action/models/index.d.ts +2 -0
  146. package/lib/components/action/route/action-route.component.d.ts +32 -32
  147. package/lib/components/form/autocomplete/autocomplete.component.d.ts +36 -0
  148. package/lib/components/form/dropdown/dropdown.component.d.ts +34 -0
  149. package/lib/components/form/editor/form-editor.component.d.ts +39 -39
  150. package/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.d.ts +11 -21
  151. package/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.d.ts +11 -19
  152. package/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.d.ts +6 -6
  153. package/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.d.ts +12 -12
  154. package/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +17 -17
  155. package/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +36 -36
  156. package/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.d.ts +6 -6
  157. package/lib/components/form/formly/fields/index.d.ts +7 -7
  158. package/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.d.ts +8 -8
  159. package/lib/components/form/formly/wrappers/formly-table-wrapper/formly-table-wrapper.component.d.ts +8 -8
  160. package/lib/components/form/formly/wrappers/index.d.ts +2 -2
  161. package/lib/components/form/index.d.ts +3 -1
  162. package/lib/components/form/models/form-editor.event.d.ts +5 -0
  163. package/lib/components/form/models/index.d.ts +1 -0
  164. package/lib/components/layout/breadcrumb.component.d.ts +8 -0
  165. package/lib/components/layout/footer.component.d.ts +9 -0
  166. package/lib/components/layout/index.d.ts +6 -6
  167. package/lib/components/layout/main-layout.component.d.ts +21 -0
  168. package/lib/components/layout/menu-item.component.d.ts +29 -0
  169. package/lib/components/layout/menu.component.d.ts +10 -0
  170. package/lib/components/layout/services/index.d.ts +1 -0
  171. package/lib/components/layout/services/main-layout.component.service.d.ts +65 -0
  172. package/lib/components/layout/topbar.component.d.ts +25 -0
  173. package/lib/components/tableview/index.d.ts +5 -3
  174. package/lib/components/tableview/models/index.d.ts +1 -0
  175. package/lib/{models/events/table-event.model.d.ts → components/tableview/models/table.event.d.ts} +17 -17
  176. package/lib/components/tableview/route/tableview-route.abstract.component.d.ts +14 -14
  177. package/lib/components/tableview/services/index.d.ts +1 -0
  178. package/lib/components/tableview/{tableview.component.service.d.ts → services/tableview.component.service.d.ts} +13 -13
  179. package/lib/components/tableview/table/column-filter/column-filter.component.d.ts +22 -0
  180. package/lib/components/tableview/table/column-value/column-value.component.d.ts +12 -0
  181. package/lib/components/tableview/table/table.component.d.ts +79 -47
  182. package/lib/components/tableview/tableview.component.d.ts +35 -36
  183. package/lib/config/formly.config.d.ts +14 -14
  184. package/lib/config/index.d.ts +1 -1
  185. package/lib/{models/config → config/models}/index.d.ts +1 -1
  186. package/lib/config/models/mng-config.model.d.ts +34 -0
  187. package/lib/data-providers/base.data-provider.d.ts +17 -0
  188. package/lib/data-providers/editor.data-provider.d.ts +25 -0
  189. package/lib/data-providers/index.d.ts +5 -0
  190. package/lib/data-providers/lookup.data-provider.d.ts +14 -0
  191. package/lib/data-providers/table.data-provider.d.ts +6 -0
  192. package/lib/data-providers/tableview.data-provider.d.ts +15 -0
  193. package/lib/{models/descriptors/action-descriptor.model.d.ts → descriptors/action.descriptor.d.ts} +148 -145
  194. package/lib/{models/descriptors/editor-descriptor.model.d.ts → descriptors/editor.descriptor.d.ts} +255 -255
  195. package/lib/{models/validators → descriptors}/field.validator.d.ts +18 -18
  196. package/lib/descriptors/index.d.ts +7 -0
  197. package/lib/descriptors/lookup.descriptor.d.ts +17 -0
  198. package/lib/{models/descriptors/model-descriptor.model.d.ts → descriptors/model.descriptor.d.ts} +15 -15
  199. package/lib/descriptors/table.descriptor.d.ts +164 -0
  200. package/lib/{models/descriptors/tableview-descriptor.model.d.ts → descriptors/tableview.descriptor.d.ts} +39 -38
  201. package/lib/directives/component.directive.d.ts +11 -0
  202. package/lib/directives/index.d.ts +2 -1
  203. package/lib/directives/template.directive.d.ts +13 -11
  204. package/lib/mng-commons.module.d.ts +79 -71
  205. package/lib/models/index.d.ts +2 -0
  206. package/lib/models/router.model.d.ts +14 -0
  207. package/lib/models/user.model.d.ts +8 -0
  208. package/lib/pipes/boolean.pipe.d.ts +7 -0
  209. package/lib/pipes/index.d.ts +2 -1
  210. package/lib/pipes/property-path.pipe.d.ts +7 -7
  211. package/lib/services/action.service.d.ts +92 -92
  212. package/lib/services/commons.service.d.ts +72 -0
  213. package/lib/services/configuration.service.d.ts +35 -35
  214. package/lib/services/index.d.ts +4 -6
  215. package/lib/services/navigation.service.d.ts +14 -14
  216. package/lib/services/providers/commons-init.provider.d.ts +2 -0
  217. package/lib/services/providers/config-service.provider.d.ts +5 -5
  218. package/lib/services/providers/formly-config.provider.d.ts +4 -4
  219. package/lib/services/providers/index.d.ts +3 -2
  220. package/lib/services/tokens/browser-storage.token.d.ts +2 -0
  221. package/lib/services/tokens/index.d.ts +2 -0
  222. package/lib/services/tokens/module-config.token.d.ts +3 -0
  223. package/lib/{models/types → types}/index.d.ts +2 -2
  224. package/lib/{models/types → types}/type.decorator.d.ts +2 -2
  225. package/lib/{models/types → types}/type.model.d.ts +10 -10
  226. package/lib/utils/editor-formly.util.d.ts +9 -9
  227. package/lib/utils/i18n.util.d.ts +18 -15
  228. package/lib/utils/index.d.ts +5 -4
  229. package/lib/utils/model.util.d.ts +7 -5
  230. package/lib/utils/toast.util.d.ts +13 -12
  231. package/lib/utils/type.util.d.ts +15 -15
  232. package/mediusinc-mng-commons.d.ts +5 -5
  233. package/package.json +37 -36
  234. package/public-api.d.ts +25 -22
  235. package/scss/common/layout/_breadcrumb.scss +96 -0
  236. package/scss/common/layout/_config.scss +101 -0
  237. package/scss/common/layout/_dashboard.scss +16 -0
  238. package/scss/common/layout/_exception.scss +131 -0
  239. package/scss/common/layout/_footer.scss +29 -0
  240. package/scss/common/layout/_help.scss +157 -0
  241. package/scss/common/layout/_inlinemenu.scss +55 -0
  242. package/scss/common/layout/_invoice.scss +176 -0
  243. package/scss/common/layout/_landing.scss +639 -0
  244. package/scss/common/layout/_layout_dark.scss +23 -0
  245. package/scss/common/layout/_layout_light.scss +23 -0
  246. package/scss/common/layout/_loader.scss +18 -0
  247. package/scss/common/layout/_login.scss +106 -0
  248. package/scss/common/layout/_main.scss +45 -0
  249. package/scss/common/layout/_mixins.scss +214 -0
  250. package/scss/common/layout/_rightmenu.scss +125 -0
  251. package/scss/common/layout/_topbar.scss +189 -0
  252. package/scss/common/layout/_typography.scss +63 -0
  253. package/scss/common/layout/_utils.scss +96 -0
  254. package/scss/common/layout/_widgets.scss +391 -0
  255. package/scss/common/layout/menu/_menu.scss +7 -0
  256. package/scss/common/layout/menu/_menu_common.scss +183 -0
  257. package/scss/common/layout/menu/_menu_overlay.scss +52 -0
  258. package/scss/common/layout/menu/_menu_sidebar.scss +232 -0
  259. package/scss/common/layout/menu/_menu_slim.scss +138 -0
  260. package/scss/common/layout/menu/_menu_static.scss +70 -0
  261. package/scss/common/layout/menu/_menu_theme.scss +365 -0
  262. package/scss/common/theme/_theme_dark.scss +5 -0
  263. package/scss/common/theme/_theme_light.scss +5 -0
  264. package/scss/common/theme/designer/_colors.scss +18 -0
  265. package/scss/common/theme/designer/_common.scss +40 -0
  266. package/scss/common/theme/designer/_components.scss +101 -0
  267. package/scss/common/theme/designer/_mixins.scss +174 -0
  268. package/scss/common/theme/designer/components/button/_button.scss +560 -0
  269. package/scss/common/theme/designer/components/button/_speeddial.scss +79 -0
  270. package/scss/common/theme/designer/components/button/_splitbutton.scss +1 -0
  271. package/scss/common/theme/designer/components/data/_carousel.scss +37 -0
  272. package/scss/common/theme/designer/components/data/_datatable.scss +266 -0
  273. package/scss/common/theme/designer/components/data/_dataview.scss +55 -0
  274. package/scss/common/theme/designer/components/data/_filter.scss +138 -0
  275. package/scss/common/theme/designer/components/data/_fullcalendar.scss +324 -0
  276. package/scss/common/theme/designer/components/data/_orderlist.scss +91 -0
  277. package/scss/common/theme/designer/components/data/_organizationchart.scss +50 -0
  278. package/scss/common/theme/designer/components/data/_paginator.scss +83 -0
  279. package/scss/common/theme/designer/components/data/_picklist.scss +91 -0
  280. package/scss/common/theme/designer/components/data/_timeline.scss +38 -0
  281. package/scss/common/theme/designer/components/data/_tree.scss +144 -0
  282. package/scss/common/theme/designer/components/data/_treetable.scss +242 -0
  283. package/scss/common/theme/designer/components/data/_virtualscroller.scss +28 -0
  284. package/scss/common/theme/designer/components/file/_fileupload.scss +58 -0
  285. package/scss/common/theme/designer/components/input/_autocomplete.scss +103 -0
  286. package/scss/common/theme/designer/components/input/_calendar.scss +212 -0
  287. package/scss/common/theme/designer/components/input/_cascadeselect.scss +98 -0
  288. package/scss/common/theme/designer/components/input/_checkbox.scss +85 -0
  289. package/scss/common/theme/designer/components/input/_chips.scss +41 -0
  290. package/scss/common/theme/designer/components/input/_colorpicker.scss +19 -0
  291. package/scss/common/theme/designer/components/input/_dropdown.scss +136 -0
  292. package/scss/common/theme/designer/components/input/_editor.scss +122 -0
  293. package/scss/common/theme/designer/components/input/_inputgroup.scss +69 -0
  294. package/scss/common/theme/designer/components/input/_inputmask.scss +3 -0
  295. package/scss/common/theme/designer/components/input/_inputnumber.scss +3 -0
  296. package/scss/common/theme/designer/components/input/_inputswitch.scss +58 -0
  297. package/scss/common/theme/designer/components/input/_inputtext.scss +97 -0
  298. package/scss/common/theme/designer/components/input/_listbox.scss +82 -0
  299. package/scss/common/theme/designer/components/input/_multiselect.scss +164 -0
  300. package/scss/common/theme/designer/components/input/_password.scss +33 -0
  301. package/scss/common/theme/designer/components/input/_radiobutton.scss +78 -0
  302. package/scss/common/theme/designer/components/input/_rating.scss +48 -0
  303. package/scss/common/theme/designer/components/input/_selectbutton.scss +50 -0
  304. package/scss/common/theme/designer/components/input/_slider.scss +69 -0
  305. package/scss/common/theme/designer/components/input/_togglebutton.scss +48 -0
  306. package/scss/common/theme/designer/components/input/_treeselect.scss +89 -0
  307. package/scss/common/theme/designer/components/menu/_breadcrumb.scss +42 -0
  308. package/scss/common/theme/designer/components/menu/_contextmenu.scss +50 -0
  309. package/scss/common/theme/designer/components/menu/_dock.scss +51 -0
  310. package/scss/common/theme/designer/components/menu/_megamenu.scss +102 -0
  311. package/scss/common/theme/designer/components/menu/_menu.scss +41 -0
  312. package/scss/common/theme/designer/components/menu/_menubar.scss +179 -0
  313. package/scss/common/theme/designer/components/menu/_panelmenu.scss +137 -0
  314. package/scss/common/theme/designer/components/menu/_slidemenu.scss +55 -0
  315. package/scss/common/theme/designer/components/menu/_steps.scss +55 -0
  316. package/scss/common/theme/designer/components/menu/_tabmenu.scss +49 -0
  317. package/scss/common/theme/designer/components/menu/_tieredmenu.scss +56 -0
  318. package/scss/common/theme/designer/components/messages/_inlinemessage.scss +64 -0
  319. package/scss/common/theme/designer/components/messages/_message.scss +102 -0
  320. package/scss/common/theme/designer/components/messages/_toast.scss +95 -0
  321. package/scss/common/theme/designer/components/misc/_avatar.scss +30 -0
  322. package/scss/common/theme/designer/components/misc/_badge.scss +48 -0
  323. package/scss/common/theme/designer/components/misc/_blockui.scss +3 -0
  324. package/scss/common/theme/designer/components/misc/_chip.scss +36 -0
  325. package/scss/common/theme/designer/components/misc/_inplace.scss +17 -0
  326. package/scss/common/theme/designer/components/misc/_progressbar.scss +17 -0
  327. package/scss/common/theme/designer/components/misc/_scrolltop.scss +20 -0
  328. package/scss/common/theme/designer/components/misc/_skeleton.scss +8 -0
  329. package/scss/common/theme/designer/components/misc/_tag.scss +33 -0
  330. package/scss/common/theme/designer/components/misc/_terminal.scss +11 -0
  331. package/scss/common/theme/designer/components/multimedia/_galleria.scss +141 -0
  332. package/scss/common/theme/designer/components/overlay/_confirmpopup.scss +67 -0
  333. package/scss/common/theme/designer/components/overlay/_dialog.scss +63 -0
  334. package/scss/common/theme/designer/components/overlay/_overlaypanel.scss +62 -0
  335. package/scss/common/theme/designer/components/overlay/_sidebar.scss +27 -0
  336. package/scss/common/theme/designer/components/overlay/_tooltip.scss +33 -0
  337. package/scss/common/theme/designer/components/panel/_accordion.scss +119 -0
  338. package/scss/common/theme/designer/components/panel/_card.scss +30 -0
  339. package/scss/common/theme/designer/components/panel/_divider.scss +31 -0
  340. package/scss/common/theme/designer/components/panel/_fieldset.scss +47 -0
  341. package/scss/common/theme/designer/components/panel/_panel.scss +42 -0
  342. package/scss/common/theme/designer/components/panel/_scrollpanel.scss +6 -0
  343. package/scss/common/theme/designer/components/panel/_splitter.scss +19 -0
  344. package/scss/common/theme/designer/components/panel/_tabview.scss +66 -0
  345. package/scss/common/theme/designer/components/panel/_toolbar.scss +10 -0
  346. package/scss/common/theme/extensions/_button.scss +99 -0
  347. package/scss/common/theme/extensions/_calendar.scss +18 -0
  348. package/scss/common/theme/extensions/_card.scss +6 -0
  349. package/scss/common/theme/extensions/_carousel.scss +13 -0
  350. package/scss/common/theme/extensions/_checkbox.scss +10 -0
  351. package/scss/common/theme/extensions/_contextmenu.scss +16 -0
  352. package/scss/common/theme/extensions/_datatable.scss +83 -0
  353. package/scss/common/theme/extensions/_dialog.scss +14 -0
  354. package/scss/common/theme/extensions/_fieldset.scss +6 -0
  355. package/scss/common/theme/extensions/_galleria.scss +25 -0
  356. package/scss/common/theme/extensions/_megamenu.scss +18 -0
  357. package/scss/common/theme/extensions/_menu.scss +14 -0
  358. package/scss/common/theme/extensions/_menubar.scss +14 -0
  359. package/scss/common/theme/extensions/_orderlist.scss +38 -0
  360. package/scss/common/theme/extensions/_paginator.scss +19 -0
  361. package/scss/common/theme/extensions/_panelmenu.scss +20 -0
  362. package/scss/common/theme/extensions/_password.scss +5 -0
  363. package/scss/common/theme/extensions/_picklist.scss +38 -0
  364. package/scss/common/theme/extensions/_radiobutton.scss +8 -0
  365. package/scss/common/theme/extensions/_sidebar.scss +19 -0
  366. package/scss/common/theme/extensions/_slidemenu.scss +10 -0
  367. package/scss/common/theme/extensions/_slider.scss +6 -0
  368. package/scss/common/theme/extensions/_steps.scss +50 -0
  369. package/scss/common/theme/extensions/_tieredmenu.scss +14 -0
  370. package/scss/common/theme/extensions/_toast.scss +6 -0
  371. package/scss/common/theme/extensions/_tree.scss +36 -0
  372. package/scss/common/theme/extensions/_treetable.scss +35 -0
  373. package/scss/common/theme/extensions/_vendor_extensions.scss +27 -0
  374. package/scss/common/variables/layout/_common.scss +12 -0
  375. package/scss/common/variables/layout/_layout_dark.scss +71 -0
  376. package/scss/common/variables/layout/_layout_light.scss +71 -0
  377. package/scss/common/variables/theme/_theme_dark.scss +897 -0
  378. package/scss/common/variables/theme/_theme_light.scss +885 -0
  379. package/scss/layout/default/_mng-variables-layout-dark.scss +2 -0
  380. package/scss/layout/default/_mng-variables-layout-light.scss +2 -0
  381. package/scss/layout/default/layout-dark.scss +2 -0
  382. package/scss/layout/default/layout-light.scss +2 -0
  383. package/scss/mng-commons-dark.scss +5 -0
  384. package/scss/mng-commons-light.scss +5 -0
  385. package/scss/mng-overrides/_layout_action.scss +3 -0
  386. package/scss/mng-overrides/_layout_dialog.scss +34 -0
  387. package/scss/mng-overrides/_layout_forms.scss +31 -0
  388. package/scss/mng-overrides/_layout_radio.scss +3 -0
  389. package/scss/mng-overrides/_layout_styles.scss +4 -0
  390. package/scss/mng-overrides/_theme_datatable.scss +9 -0
  391. package/scss/mng-overrides/_theme_dialog.scss +9 -0
  392. package/scss/mng-overrides/_theme_dropdown.scss +6 -0
  393. package/scss/mng-overrides/_theme_styles.scss +9 -0
  394. package/scss/mng-overrides/_theme_tableview.scss +94 -0
  395. package/scss/theme/default/_mng-variables-theme-dark.scss +8 -0
  396. package/scss/theme/default/_mng-variables-theme-light.scss +8 -0
  397. package/scss/theme/default/theme-dark.scss +2 -0
  398. package/scss/theme/default/theme-light.scss +2 -0
  399. package/esm2020/lib/api/services/abstract-crud-api.service.mjs +0 -72
  400. package/esm2020/lib/components/layout/app.breadcrumb.component.mjs +0 -26
  401. package/esm2020/lib/components/layout/app.footer.component.mjs +0 -35
  402. package/esm2020/lib/components/layout/app.main.component.mjs +0 -25
  403. package/esm2020/lib/components/layout/app.main.component.service.mjs +0 -133
  404. package/esm2020/lib/components/layout/app.menu.component.mjs +0 -24
  405. package/esm2020/lib/components/layout/app.menuitem.component.mjs +0 -241
  406. package/esm2020/lib/components/layout/app.topbar.component.mjs +0 -135
  407. package/esm2020/lib/components/tableview/tableview.component.service.mjs +0 -18
  408. package/esm2020/lib/models/action/action.model.mjs +0 -58
  409. package/esm2020/lib/models/action/index.mjs +0 -2
  410. package/esm2020/lib/models/config/index.mjs +0 -2
  411. package/esm2020/lib/models/config/mng-config.model.mjs +0 -3
  412. package/esm2020/lib/models/descriptors/action-descriptor.model.mjs +0 -325
  413. package/esm2020/lib/models/descriptors/editor-descriptor.model.mjs +0 -666
  414. package/esm2020/lib/models/descriptors/index.mjs +0 -6
  415. package/esm2020/lib/models/descriptors/model-descriptor.model.mjs +0 -34
  416. package/esm2020/lib/models/descriptors/table-descriptor.model.mjs +0 -123
  417. package/esm2020/lib/models/descriptors/tableview-descriptor.model.mjs +0 -124
  418. package/esm2020/lib/models/events/editor-event.model.mjs +0 -14
  419. package/esm2020/lib/models/events/index.mjs +0 -3
  420. package/esm2020/lib/models/events/table-event.model.mjs +0 -16
  421. package/esm2020/lib/models/interfaces/confirmation-service.model.mjs +0 -2
  422. package/esm2020/lib/models/interfaces/index.mjs +0 -2
  423. package/esm2020/lib/models/providers/data-provider.model.mjs +0 -86
  424. package/esm2020/lib/models/providers/index.mjs +0 -2
  425. package/esm2020/lib/models/types/index.mjs +0 -3
  426. package/esm2020/lib/models/types/type.decorator.mjs +0 -7
  427. package/esm2020/lib/models/types/type.model.mjs +0 -2
  428. package/esm2020/lib/models/validators/field.validator.mjs +0 -21
  429. package/esm2020/lib/models/validators/index.mjs +0 -2
  430. package/esm2020/lib/services/breadcrumb.service.mjs +0 -74
  431. package/esm2020/lib/services/menu.service.mjs +0 -37
  432. package/esm2020/lib/services/settings.service.mjs +0 -81
  433. package/lib/components/layout/app.breadcrumb.component.d.ts +0 -14
  434. package/lib/components/layout/app.footer.component.d.ts +0 -8
  435. package/lib/components/layout/app.main.component.d.ts +0 -12
  436. package/lib/components/layout/app.main.component.service.d.ts +0 -40
  437. package/lib/components/layout/app.menu.component.d.ts +0 -15
  438. package/lib/components/layout/app.menuitem.component.d.ts +0 -31
  439. package/lib/components/layout/app.topbar.component.d.ts +0 -15
  440. package/lib/models/action/index.d.ts +0 -1
  441. package/lib/models/config/mng-config.model.d.ts +0 -20
  442. package/lib/models/descriptors/index.d.ts +0 -5
  443. package/lib/models/descriptors/table-descriptor.model.d.ts +0 -45
  444. package/lib/models/events/editor-event.model.d.ts +0 -11
  445. package/lib/models/events/index.d.ts +0 -2
  446. package/lib/models/interfaces/index.d.ts +0 -1
  447. package/lib/models/providers/data-provider.model.d.ts +0 -62
  448. package/lib/models/providers/index.d.ts +0 -1
  449. package/lib/models/validators/index.d.ts +0 -1
  450. package/lib/services/breadcrumb.service.d.ts +0 -15
  451. package/lib/services/menu.service.d.ts +0 -16
  452. package/lib/services/settings.service.d.ts +0 -30
  453. package/mediusinc-mng-commons-0.0.1-rc.4.tgz +0 -0
@@ -1,109 +1,109 @@
1
- import { ChangeDetectionStrategy, Component } from '@angular/core';
2
- import { FieldType } from '@ngx-formly/core';
3
- import { of, ReplaySubject } from 'rxjs';
4
- import { startWith } from 'rxjs/operators';
5
- import { FieldManyEditorDescriptor, ActionDescriptor, ActionEditorDescriptor, ActionLevelEnum } from '../../../../../models/descriptors';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "../../../../tableview/table/table.component";
8
- import * as i2 from "../../../../action/action.component";
9
- import * as i3 from "../../../../../directives/template.directive";
10
- import * as i4 from "@angular/common";
11
- import * as i5 from "@ngx-translate/core";
12
- export class FormlyFieldTableDialogFormComponent extends FieldType {
13
- constructor() {
14
- super(...arguments);
15
- this.itemsSubject = new ReplaySubject(1);
16
- this.items$ = this.itemsSubject.asObservable();
17
- this.toolbarActions = [];
18
- this.rowActions = [];
19
- this.subscriptions = [];
20
- }
21
- ngOnInit() {
22
- this.descriptor = this.to['descriptor'];
23
- const hasAddAction = this.descriptor.actions.some(a => a === FieldManyEditorDescriptor.ActionEnum.Add);
24
- const hasEditAction = this.descriptor.actions.some(a => a === FieldManyEditorDescriptor.ActionEnum.Edit);
25
- const hasDeleteAction = this.descriptor.actions.some(a => a === FieldManyEditorDescriptor.ActionEnum.Delete);
26
- if (hasAddAction) {
27
- console.log(this.descriptor.tableviewDescriptor.addEditor);
28
- const addAction = new ActionEditorDescriptor(this.descriptor.tableviewDescriptor.addEditor, 'add', this.descriptor.editor.model.type, this.descriptor.property)
29
- .withTitle(null)
30
- .withIcon('pi pi-plus')
31
- .withClassName('mng-formly-field-table-form-dialog')
32
- .withSubmitFunction(ctx => {
33
- if (!ctx.data?.item) {
34
- throw new Error(`No item was provided in context, edit cannot be done.`);
35
- }
36
- this.formState.submittedOn = Date.now();
37
- let value = this.formControl.value;
38
- value = [...value, ctx.data.item];
39
- this.formControl.patchValue(value);
40
- return of(ctx.data.item);
41
- })
42
- .withIsVisibleFunction(ctx => of(!this.options?.formState.disabled));
43
- this.toolbarActions.push(addAction);
44
- }
45
- if (hasEditAction) {
46
- const editAction = new ActionEditorDescriptor(this.descriptor.tableviewDescriptor.editEditor, 'edit', this.descriptor.editor.model.type, this.descriptor.property)
47
- .withTitle(null)
48
- .withIcon('pi pi-pencil')
49
- .withClassName('mng-formly-field-table-form-dialog')
50
- .withSubmitFunction(ctx => {
51
- if (!ctx.data?.item) {
52
- throw new Error(`No item was provided in context, edit cannot be done.`);
53
- }
54
- this.formState.submittedOn = Date.now();
55
- let formControlValue = this.formControl.value;
56
- formControlValue[ctx.data.actionData?.['itemIndex']] = ctx.data.item;
57
- this.formControl.patchValue(formControlValue);
58
- return of(ctx.data.item);
59
- })
60
- .withIsVisibleFunction(ctx => of(!this.options?.formState.disabled));
61
- this.rowActions.push(editAction);
62
- }
63
- if (hasDeleteAction) {
64
- const deleteAction = new ActionDescriptor(this.descriptor.tableviewDescriptor.model, 'delete', this.descriptor.editor.model.type, this.descriptor.property)
65
- .withLevel(ActionLevelEnum.Danger)
66
- .withTitle(null)
67
- .withIcon('pi pi-trash')
68
- .withRunFunction(ctx => {
69
- if (!ctx.data?.item) {
70
- throw new Error(`No item was provided in context, delete cannot be done.`);
71
- }
72
- let formControlValue = this.formControl.value;
73
- const compareProperty = this.descriptor.tableDescriptor.dataKeyProperty ? this.descriptor.tableDescriptor.dataKeyProperty : this.descriptor.tableDescriptor.model.idPropertyName;
74
- if (!compareProperty) {
75
- throw new Error('Cannot compare items, please provide main table data key property or model id property.');
76
- }
77
- const ctxItem = ctx.data.item;
78
- if (!ctxItem?.[compareProperty]) {
79
- return formControlValue;
80
- }
81
- formControlValue = formControlValue.filter((i) => i[compareProperty] !== ctxItem[compareProperty]);
82
- this.formControl.patchValue(formControlValue);
83
- return of(ctx.data.item);
84
- })
85
- .withIsVisibleFunction(ctx => of(!this.options?.formState.disabled));
86
- this.rowActions.push(deleteAction);
87
- }
88
- // init values
89
- if (typeof this.formControl.value === 'undefined' || this.formControl.value === null) {
90
- this.formControl.patchValue([]);
91
- }
92
- const subscription = this.formControl.valueChanges
93
- .pipe(startWith(this.formControl.value))
94
- .subscribe(v => {
95
- this.itemsSubject.next(v);
96
- });
97
- this.subscriptions.push(subscription);
98
- }
99
- ngOnDestroy() {
100
- this.subscriptions.forEach(s => s.unsubscribe());
101
- }
102
- }
103
- FormlyFieldTableDialogFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: FormlyFieldTableDialogFormComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
104
- FormlyFieldTableDialogFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: FormlyFieldTableDialogFormComponent, selector: "mng-formly-table-dialog-form-field", usesInheritance: true, ngImport: i0, template: "<mng-table [descriptor]=\"descriptor.tableDescriptor\" [items]=\"items$\">\n <ng-template mngTemplate=\"caption\">\n <div class=\"flex flex-column md:flex-row md:justify-content-end table-header\">\n <label class=\"mng-datatable-form-label p-m-0\" [for]=\"key\">{{ to?.label! | translate }} <span *ngIf=\"to.required && to['hideRequiredMarker'] !== true\">*</span></label>\n <mng-action *ngFor=\"let action of toolbarActions\" [action]=\"action\"></mng-action>\n </div>\n </ng-template>\n <ng-template mngTemplate=\"columnAction\" let-item=\"rowItem\" let-idx=\"rowIndex\">\n <mng-action *ngFor=\"let action of rowActions\"\n [action]=\"action\" [item]=\"item\" [itemId]=\"descriptor.tableviewDescriptor.model.idPropertyName ? item[descriptor.tableviewDescriptor.model.idPropertyName] : undefined\" [actionData]=\"{ itemIndex: idx }\">\n </mng-action>\n </ng-template>\n</mng-table>\n", styles: [".submit-button{display:none!important;visibility:hidden}\n"], components: [{ type: i1.TableComponent, selector: "mng-table", inputs: ["descriptor", "items", "queryResult", "loading", "dataProvider", "selectionEnabled"], outputs: ["onLoad", "onCellClick", "onSelectionChange"] }, { type: i2.ActionComponent, selector: "mng-action", inputs: ["action", "item", "itemId", "actionData"] }], directives: [{ type: i3.TemplateDirective, selector: "[mngTemplate]", inputs: ["type", "mngTemplate"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "translate": i5.TranslatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
105
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: FormlyFieldTableDialogFormComponent, decorators: [{
106
- type: Component,
107
- args: [{ selector: 'mng-formly-table-dialog-form-field', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mng-table [descriptor]=\"descriptor.tableDescriptor\" [items]=\"items$\">\n <ng-template mngTemplate=\"caption\">\n <div class=\"flex flex-column md:flex-row md:justify-content-end table-header\">\n <label class=\"mng-datatable-form-label p-m-0\" [for]=\"key\">{{ to?.label! | translate }} <span *ngIf=\"to.required && to['hideRequiredMarker'] !== true\">*</span></label>\n <mng-action *ngFor=\"let action of toolbarActions\" [action]=\"action\"></mng-action>\n </div>\n </ng-template>\n <ng-template mngTemplate=\"columnAction\" let-item=\"rowItem\" let-idx=\"rowIndex\">\n <mng-action *ngFor=\"let action of rowActions\"\n [action]=\"action\" [item]=\"item\" [itemId]=\"descriptor.tableviewDescriptor.model.idPropertyName ? item[descriptor.tableviewDescriptor.model.idPropertyName] : undefined\" [actionData]=\"{ itemIndex: idx }\">\n </mng-action>\n </ng-template>\n</mng-table>\n", styles: [".submit-button{display:none!important;visibility:hidden}\n"] }]
108
- }] });
109
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LWZpZWxkLXRhYmxlLWRpYWxvZy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21uZy1jb21tb25zL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL2Zvcm1seS9maWVsZHMvZm9ybWx5LWZpZWxkLXRhYmxlLWRpYWxvZy1mb3JtL2Zvcm1seS1maWVsZC10YWJsZS1kaWFsb2ctZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbmctY29tbW9ucy9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9mb3JtbHkvZmllbGRzL2Zvcm1seS1maWVsZC10YWJsZS1kaWFsb2ctZm9ybS9mb3JtbHktZmllbGQtdGFibGUtZGlhbG9nLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFFcEYsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzNDLE9BQU8sRUFBYSxFQUFFLEVBQUUsYUFBYSxFQUF3QixNQUFNLE1BQU0sQ0FBQztBQUMxRSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFekMsT0FBTyxFQUFDLHlCQUF5QixFQUFFLGdCQUFnQixFQUFFLHNCQUFzQixFQUFFLGVBQWUsRUFBQyxNQUFNLG1DQUFtQyxDQUFDOzs7Ozs7O0FBVXZJLE1BQU0sT0FBTyxtQ0FBMkMsU0FBUSxTQUFTO0lBTnpFOztRQVVXLGlCQUFZLEdBQXNCLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELFdBQU0sR0FBeUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVoRSxtQkFBYyxHQUErQixFQUFFLENBQUM7UUFDaEQsZUFBVSxH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LENBQUM7U0FDdEM7UUFFRCxjQUFjO1FBQ2QsSUFBSSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUU7WUFDbEYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDbkM7UUFDRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVk7YUFDN0MsSUFBSSxDQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUNwQzthQUNBLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNYLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVNLFdBQVc7UUFDZCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELENBQUM7O2dJQWxHUSxtQ0FBbUM7b0hBQW5DLG1DQUFtQyxpR0NoQmhELHU4QkFhQTsyRkRHYSxtQ0FBbUM7a0JBTi9DLFNBQVM7K0JBQ0ksb0NBQW9DLG1CQUc3Qix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7RmllbGRUeXBlfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgb2YsIFJlcGxheVN1YmplY3QsIFN1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge3N0YXJ0V2l0aH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge0ZpZWxkTWFueUVkaXRvckRlc2NyaXB0b3IsIEFjdGlvbkRlc2NyaXB0b3IsIEFjdGlvbkVkaXRvckRlc2NyaXB0b3IsIEFjdGlvbkxldmVsRW51bX0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vbW9kZWxzL2Rlc2NyaXB0b3JzJztcbmltcG9ydCB7QWN0aW9uRXhlY0NvbnRleHR9IGZyb20gJy4uLy4uLy4uLy4uLy4uL21vZGVscy9hY3Rpb24nO1xuaW1wb3J0IHtJRGF0YVByb3ZpZGVyLCBJRWRpdG9yRGF0YVByb3ZpZGVyfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9tb2RlbHMvcHJvdmlkZXJzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdtbmctZm9ybWx5LXRhYmxlLWRpYWxvZy1mb3JtLWZpZWxkJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZm9ybWx5LWZpZWxkLXRhYmxlLWRpYWxvZy1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9mb3JtbHktZmllbGQtdGFibGUtZGlhbG9nLWZvcm0uY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBGb3JtbHlGaWVsZFRhYmxlRGlhbG9nRm9ybUNvbXBvbmVudDxULCBFVD4gZXh0ZW5kcyBGaWVsZFR5cGUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgICBwdWJsaWMgZGVzY3JpcHRvciE6IEZpZWxkTWFueUVkaXRvckRlc2NyaXB0b3I8VCwgRVQ+O1xuXG4gICAgcHVibGljIGl0ZW1zU3ViamVjdDogU3ViamVjdDxBcnJheTxUPj4gPSBuZXcgUmVwbGF5U3ViamVjdCgxKTtcbiAgICBwdWJsaWMgaXRlbXMkOiBPYnNlcnZhYmxlPEFycmF5PFQ+PiA9IHRoaXMuaXRlbXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gICAgcHVibGljIHRvb2xiYXJBY3Rpb25zOiBBcnJheTxBY3Rpb25EZXNjcmlwdG9yPFQ+PiA9IFtdO1xuICAgIHB1YmxpYyByb3dBY3Rpb25zOiBBcnJheTxBY3Rpb25EZXNjcmlwdG9yPFQ+PiA9IFtdO1xuXG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuXG4gICAgICAgIHRoaXMuZGVzY3JpcHRvciA9IHRoaXMudG9bJ2Rlc2NyaXB0b3InXTtcbiAgICAgICAgY29uc3QgaGFzQWRkQWN0aW9uID0gdGhpcy5kZXNjcmlwdG9yLmFjdGlvbnMuc29tZShhID0+IGEgPT09IEZpZWxkTWFueUVkaXRvckRlc2NyaXB0b3IuQWN0aW9uRW51bS5BZGQpO1xuICAgICAgICBjb25zdCBoYXNFZGl0QWN0aW9uID0gdGhpcy5kZXNjcmlwdG9yLmFjdGlvbnMuc29tZShhID0+IGEgPT09IEZpZWxkTWFueUVkaXRvckRlc2NyaXB0b3IuQWN0aW9uRW51bS5FZGl0KTtcbiAgICAgICAgY29uc3QgaGFzRGVsZXRlQWN0aW9uID0gdGhpcy5kZXNjcmlwdG9yLmFjdGlvbnMuc29tZShhID0+IGEgPT09IEZpZWxkTWFueUVkaXRvckRlc2NyaXB0b3IuQWN0aW9uRW51bS5EZWxldGUpO1xuXG4gICAgICAgIGlmIChoYXNBZGRBY3Rpb24pIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZGVzY3JpcHRvci50YWJsZXZpZXdEZXNjcmlwdG9yLmFkZEVkaXRvcik7XG4gICAgICAgICAgICBjb25zdCBhZGRBY3Rpb24gPSBuZXcgQWN0aW9uRWRpdG9yRGVzY3JpcHRvcih0aGlzLmRlc2NyaXB0b3IudGFibGV2aWV3RGVzY3JpcHRvci5hZGRFZGl0b3IsICdhZGQnLCB0aGlzLmRlc2NyaXB0b3IuZWRpdG9yLm1vZGVsLnR5cGUsIHRoaXMuZGVzY3JpcHRvci5wcm9wZXJ0eSlcbiAgICAgICAgICAgICAgICAud2l0aFRpdGxlKG51bGwpXG4gICAgICAgICAgICAgICAgLndpdGhJY29uKCdwaSBwaS1wbHVzJylcbiAgICAgICAgICAgICAgICAud2l0aENsYXNzTmFtZSgnbW5nLWZvcm1seS1maWVsZC10YWJsZS1mb3JtLWRpYWxvZycpXG4gICAgICAgICAgICAgICAgLndpdGhTdWJtaXRGdW5jdGlvbihjdHggPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWN0eC5kYXRhPy5pdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGl0ZW0gd2FzIHByb3ZpZGVkIGluIGNvbnRleHQsIGVkaXQgY2Fubm90IGJlIGRvbmUuYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtU3RhdGUuc3VibWl0dGVkT24gPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IFsuLi52YWx1ZSwgY3R4LmRhdGEuaXRlbV07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wucGF0Y2hWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihjdHguZGF0YS5pdGVtKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC53aXRoSXNWaXNpYmxlRnVuY3Rpb24oY3R4ID0+IG9mKCF0aGlzLm9wdGlvbnM/LmZvcm1TdGF0ZS5kaXNhYmxlZCkpO1xuICAgICAgICAgICAgdGhpcy50b29sYmFyQWN0aW9ucy5wdXNoKGFkZEFjdGlvbiBhcyBBY3Rpb25EZXNjcmlwdG9yPFQ+KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFzRWRpdEFjdGlvbikge1xuICAgICAgICAgICAgY29uc3QgZWRpdEFjdGlvbiA9IG5ldyBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yKHRoaXMuZGVzY3JpcHRvci50YWJsZXZpZXdEZXNjcmlwdG9yLmVkaXRFZGl0b3IsICdlZGl0JywgdGhpcy5kZXNjcmlwdG9yLmVkaXRvci5tb2RlbC50eXBlLCB0aGlzLmRlc2NyaXB0b3IucHJvcGVydHkpXG4gICAgICAgICAgICAgICAgLndpdGhUaXRsZShudWxsKVxuICAgICAgICAgICAgICAgIC53aXRoSWNvbigncGkgcGktcGVuY2lsJylcbiAgICAgICAgICAgICAgICAud2l0aENsYXNzTmFtZSgnbW5nLWZvcm1seS1maWVsZC10YWJsZS1mb3JtLWRpYWxvZycpXG4gICAgICAgICAgICAgICAgLndpdGhTdWJtaXRGdW5jdGlvbihjdHggPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWN0eC5kYXRhPy5pdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGl0ZW0gd2FzIHByb3ZpZGVkIGluIGNvbnRleHQsIGVkaXQgY2Fubm90IGJlIGRvbmUuYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtU3RhdGUuc3VibWl0dGVkT24gPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZm9ybUNvbnRyb2xWYWx1ZSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sVmFsdWVbY3R4LmRhdGEuYWN0aW9uRGF0YT8uWydpdGVtSW5kZXgnXV0gPSBjdHguZGF0YS5pdGVtO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnBhdGNoVmFsdWUoZm9ybUNvbnRyb2xWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihjdHguZGF0YS5pdGVtKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC53aXRoSXNWaXNpYmxlRnVuY3Rpb24oY3R4ID0+IG9mKCF0aGlzLm9wdGlvbnM/LmZvcm1TdGF0ZS5kaXNhYmxlZCkpO1xuICAgICAgICAgICAgdGhpcy5yb3dBY3Rpb25zLnB1c2goZWRpdEFjdGlvbiBhcyBBY3Rpb25EZXNjcmlwdG9yPFQ+KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFzRGVsZXRlQWN0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBkZWxldGVBY3Rpb24gPSBuZXcgQWN0aW9uRGVzY3JpcHRvcih0aGlzLmRlc2NyaXB0b3IudGFibGV2aWV3RGVzY3JpcHRvci5tb2RlbCwgJ2RlbGV0ZScsIHRoaXMuZGVzY3JpcHRvci5lZGl0b3IubW9kZWwudHlwZSwgdGhpcy5kZXNjcmlwdG9yLnByb3BlcnR5KVxuICAgICAgICAgICAgICAgIC53aXRoTGV2ZWwoQWN0aW9uTGV2ZWxFbnVtLkRhbmdlcilcbiAgICAgICAgICAgICAgICAud2l0aFRpdGxlKG51bGwpXG4gICAgICAgICAgICAgICAgLndpdGhJY29uKCdwaSBwaS10cmFzaCcpXG4gICAgICAgICAgICAgICAgLndpdGhSdW5GdW5jdGlvbihjdHggPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWN0eC5kYXRhPy5pdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGl0ZW0gd2FzIHByb3ZpZGVkIGluIGNvbnRleHQsIGRlbGV0ZSBjYW5ub3QgYmUgZG9uZS5gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsZXQgZm9ybUNvbnRyb2xWYWx1ZSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBhcmVQcm9wZXJ0eSA9IHRoaXMuZGVzY3JpcHRvci50YWJsZURlc2NyaXB0b3IuZGF0YUtleVByb3BlcnR5ID8gdGhpcy5kZXNjcmlwdG9yLnRhYmxlRGVzY3JpcHRvci5kYXRhS2V5UHJvcGVydHkgOiB0aGlzLmRlc2NyaXB0b3IudGFibGVEZXNjcmlwdG9yLm1vZGVsLmlkUHJvcGVydHlOYW1lO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbXBhcmVQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29tcGFyZSBpdGVtcywgcGxlYXNlIHByb3ZpZGUgbWFpbiB0YWJsZSBkYXRhIGtleSBwcm9wZXJ0eSBvciBtb2RlbCBpZCBwcm9wZXJ0eS4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdHhJdGVtOiBhbnkgPSBjdHguZGF0YS5pdGVtO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWN0eEl0ZW0/Lltjb21wYXJlUHJvcGVydHldKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm9ybUNvbnRyb2xWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbFZhbHVlID0gZm9ybUNvbnRyb2xWYWx1ZS5maWx0ZXIoKGk6IGFueSkgPT4gaVtjb21wYXJlUHJvcGVydHldICE9PSBjdHhJdGVtW2NvbXBhcmVQcm9wZXJ0eV0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnBhdGNoVmFsdWUoZm9ybUNvbnRyb2xWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihjdHguZGF0YS5pdGVtKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC53aXRoSXNWaXNpYmxlRnVuY3Rpb24oY3R4ID0+IG9mKCF0aGlzLm9wdGlvbnM/LmZvcm1TdGF0ZS5kaXNhYmxlZCkpO1xuICAgICAgICAgICAgdGhpcy5yb3dBY3Rpb25zLnB1c2goZGVsZXRlQWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGluaXQgdmFsdWVzXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5mb3JtQ29udHJvbC52YWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHwgdGhpcy5mb3JtQ29udHJvbC52YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5wYXRjaFZhbHVlKFtdKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc3RhcnRXaXRoKHRoaXMuZm9ybUNvbnRyb2wudmFsdWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHYgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNTdWJqZWN0Lm5leHQodik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goc3Vic2NyaXB0aW9uKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICB9XG59XG4iLCI8bW5nLXRhYmxlIFtkZXNjcmlwdG9yXT1cImRlc2NyaXB0b3IudGFibGVEZXNjcmlwdG9yXCIgW2l0ZW1zXT1cIml0ZW1zJFwiPlxuICAgIDxuZy10ZW1wbGF0ZSBtbmdUZW1wbGF0ZT1cImNhcHRpb25cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gbWQ6ZmxleC1yb3cgbWQ6anVzdGlmeS1jb250ZW50LWVuZCB0YWJsZS1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cIm1uZy1kYXRhdGFibGUtZm9ybS1sYWJlbCBwLW0tMFwiIFtmb3JdPVwia2V5XCI+e3sgdG8/LmxhYmVsISB8IHRyYW5zbGF0ZSB9fSA8c3BhbiAqbmdJZj1cInRvLnJlcXVpcmVkICYmIHRvWydoaWRlUmVxdWlyZWRNYXJrZXInXSAhPT0gdHJ1ZVwiPio8L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgICAgIDxtbmctYWN0aW9uICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgdG9vbGJhckFjdGlvbnNcIiBbYWN0aW9uXT1cImFjdGlvblwiPjwvbW5nLWFjdGlvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgbW5nVGVtcGxhdGU9XCJjb2x1bW5BY3Rpb25cIiBsZXQtaXRlbT1cInJvd0l0ZW1cIiBsZXQtaWR4PVwicm93SW5kZXhcIj5cbiAgICAgICAgPG1uZy1hY3Rpb24gKm5nRm9yPVwibGV0IGFjdGlvbiBvZiByb3dBY3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgW2FjdGlvbl09XCJhY3Rpb25cIiBbaXRlbV09XCJpdGVtXCIgW2l0ZW1JZF09XCJkZXNjcmlwdG9yLnRhYmxldmlld0Rlc2NyaXB0b3IubW9kZWwuaWRQcm9wZXJ0eU5hbWUgPyBpdGVtW2Rlc2NyaXB0b3IudGFibGV2aWV3RGVzY3JpcHRvci5tb2RlbC5pZFByb3BlcnR5TmFtZV0gOiB1bmRlZmluZWRcIiBbYWN0aW9uRGF0YV09XCJ7IGl0ZW1JbmRleDogaWR4IH1cIj5cbiAgICAgICAgPC9tbmctYWN0aW9uPlxuICAgIDwvbmctdGVtcGxhdGU+XG48L21uZy10YWJsZT5cbiJdfQ==
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { FieldType } from '@ngx-formly/core';
3
+ import { of, ReplaySubject } from 'rxjs';
4
+ import { startWith } from 'rxjs/operators';
5
+ import { FieldManyEditorDescriptor, ActionDescriptor, ActionEditorDescriptor, ActionLevelEnum } from '../../../../../descriptors';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "../../../../tableview/table/table.component";
8
+ import * as i2 from "../../../../action/action.component";
9
+ import * as i3 from "../../../../../directives/template.directive";
10
+ import * as i4 from "@angular/common";
11
+ import * as i5 from "@ngx-translate/core";
12
+ export class MngFormlyFieldTableDialogFormComponent extends FieldType {
13
+ constructor() {
14
+ super(...arguments);
15
+ this.itemsSubject = new ReplaySubject(1);
16
+ this.items$ = this.itemsSubject.asObservable();
17
+ this.toolbarActions = [];
18
+ this.rowActions = [];
19
+ this.subscriptions = [];
20
+ }
21
+ ngOnInit() {
22
+ this.descriptor = this.to['descriptor'];
23
+ const hasAddAction = this.descriptor.actions.some(a => a === FieldManyEditorDescriptor.ActionEnum.Add);
24
+ const hasEditAction = this.descriptor.actions.some(a => a === FieldManyEditorDescriptor.ActionEnum.Edit);
25
+ const hasDeleteAction = this.descriptor.actions.some(a => a === FieldManyEditorDescriptor.ActionEnum.Delete);
26
+ if (hasAddAction) {
27
+ console.log(this.descriptor.tableviewDescriptor.addEditor);
28
+ const addAction = new ActionEditorDescriptor(this.descriptor.tableviewDescriptor.addEditor, 'add', this.descriptor.editor.model.type, this.descriptor.property)
29
+ .withTitle(null)
30
+ .withIcon('pi pi-plus')
31
+ .withClassName('mng-formly-field-table-form-dialog')
32
+ .withSubmitFunction(ctx => {
33
+ if (!ctx.data?.item) {
34
+ throw new Error(`No item was provided in context, edit cannot be done.`);
35
+ }
36
+ this.formState.submittedOn = Date.now();
37
+ let value = this.formControl.value;
38
+ value = [...value, ctx.data.item];
39
+ this.formControl.patchValue(value);
40
+ return of(ctx.data.item);
41
+ })
42
+ .withIsVisibleFunction(ctx => of(!this.options?.formState.disabled));
43
+ this.toolbarActions.push(addAction);
44
+ }
45
+ if (hasEditAction) {
46
+ const editAction = new ActionEditorDescriptor(this.descriptor.tableviewDescriptor.editEditor, 'edit', this.descriptor.editor.model.type, this.descriptor.property)
47
+ .withTitle(null)
48
+ .withIcon('pi pi-pencil')
49
+ .withClassName('mng-formly-field-table-form-dialog')
50
+ .withSubmitFunction(ctx => {
51
+ if (!ctx.data?.item) {
52
+ throw new Error(`No item was provided in context, edit cannot be done.`);
53
+ }
54
+ this.formState.submittedOn = Date.now();
55
+ let formControlValue = this.formControl.value;
56
+ formControlValue[ctx.data.actionData?.['itemIndex']] = ctx.data.item;
57
+ this.formControl.patchValue(formControlValue);
58
+ return of(ctx.data.item);
59
+ })
60
+ .withIsVisibleFunction(ctx => of(!this.options?.formState.disabled));
61
+ this.rowActions.push(editAction);
62
+ }
63
+ if (hasDeleteAction) {
64
+ const deleteAction = new ActionDescriptor(this.descriptor.tableviewDescriptor.model, 'delete', this.descriptor.editor.model.type, this.descriptor.property)
65
+ .withLevel(ActionLevelEnum.Danger)
66
+ .withTitle(null)
67
+ .withIcon('pi pi-trash')
68
+ .withRunFunction(ctx => {
69
+ if (!ctx.data?.item) {
70
+ throw new Error(`No item was provided in context, delete cannot be done.`);
71
+ }
72
+ let formControlValue = this.formControl.value;
73
+ const compareProperty = this.descriptor.tableDescriptor.dataKeyProperty ? this.descriptor.tableDescriptor.dataKeyProperty : this.descriptor.tableDescriptor.model.idPropertyName;
74
+ if (!compareProperty) {
75
+ throw new Error('Cannot compare items, please provide main table data key property or model id property.');
76
+ }
77
+ const ctxItem = ctx.data.item;
78
+ if (!ctxItem?.[compareProperty]) {
79
+ return formControlValue;
80
+ }
81
+ formControlValue = formControlValue.filter((i) => i[compareProperty] !== ctxItem[compareProperty]);
82
+ this.formControl.patchValue(formControlValue);
83
+ return of(ctx.data.item);
84
+ })
85
+ .withIsVisibleFunction(ctx => of(!this.options?.formState.disabled));
86
+ this.rowActions.push(deleteAction);
87
+ }
88
+ // init values
89
+ if (typeof this.formControl.value === 'undefined' || this.formControl.value === null) {
90
+ this.formControl.patchValue([]);
91
+ }
92
+ const subscription = this.formControl.valueChanges
93
+ .pipe(startWith(this.formControl.value))
94
+ .subscribe(v => {
95
+ this.itemsSubject.next(v);
96
+ });
97
+ this.subscriptions.push(subscription);
98
+ }
99
+ ngOnDestroy() {
100
+ this.subscriptions.forEach(s => s.unsubscribe());
101
+ }
102
+ }
103
+ MngFormlyFieldTableDialogFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngFormlyFieldTableDialogFormComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
104
+ MngFormlyFieldTableDialogFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.3", type: MngFormlyFieldTableDialogFormComponent, selector: "mng-formly-table-dialog-form-field", usesInheritance: true, ngImport: i0, template: "<mng-table [descriptor]=\"descriptor.tableDescriptor\" [items]=\"items$\">\n <ng-template mngTemplate=\"caption\">\n <div class=\"flex flex-column md:flex-row md:justify-content-end table-header\">\n <label class=\"mng-datatable-form-label p-m-0\" [for]=\"key\">{{ to?.label! | translate }} <span *ngIf=\"to.required && to['hideRequiredMarker'] !== true\">*</span></label>\n <mng-action *ngFor=\"let action of toolbarActions\" [action]=\"action\"></mng-action>\n </div>\n </ng-template>\n <ng-template mngTemplate=\"columnAction\" let-item=\"rowItem\" let-idx=\"rowIndex\">\n <mng-action *ngFor=\"let action of rowActions\"\n [action]=\"action\" [item]=\"item\" [itemId]=\"descriptor.tableviewDescriptor.model.idPropertyName ? item[descriptor.tableviewDescriptor.model.idPropertyName] : undefined\" [actionData]=\"{ itemIndex: idx }\">\n </mng-action>\n </ng-template>\n</mng-table>\n", styles: [".submit-button{display:none!important;visibility:hidden}\n"], components: [{ type: i1.MngTableComponent, selector: "mng-table", inputs: ["descriptor", "items", "queryResult", "loading", "dataProvider", "useQueryParams", "selectionEnabled"], outputs: ["onLoad", "onCellClick", "onSelectionChange"] }, { type: i2.MngActionComponent, selector: "mng-action", inputs: ["action", "item", "itemId", "actionData"] }], directives: [{ type: i3.MngTemplateDirective, selector: "[mngTemplate]", inputs: ["type", "mngTemplate"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "translate": i5.TranslatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
105
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngFormlyFieldTableDialogFormComponent, decorators: [{
106
+ type: Component,
107
+ args: [{ selector: 'mng-formly-table-dialog-form-field', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mng-table [descriptor]=\"descriptor.tableDescriptor\" [items]=\"items$\">\n <ng-template mngTemplate=\"caption\">\n <div class=\"flex flex-column md:flex-row md:justify-content-end table-header\">\n <label class=\"mng-datatable-form-label p-m-0\" [for]=\"key\">{{ to?.label! | translate }} <span *ngIf=\"to.required && to['hideRequiredMarker'] !== true\">*</span></label>\n <mng-action *ngFor=\"let action of toolbarActions\" [action]=\"action\"></mng-action>\n </div>\n </ng-template>\n <ng-template mngTemplate=\"columnAction\" let-item=\"rowItem\" let-idx=\"rowIndex\">\n <mng-action *ngFor=\"let action of rowActions\"\n [action]=\"action\" [item]=\"item\" [itemId]=\"descriptor.tableviewDescriptor.model.idPropertyName ? item[descriptor.tableviewDescriptor.model.idPropertyName] : undefined\" [actionData]=\"{ itemIndex: idx }\">\n </mng-action>\n </ng-template>\n</mng-table>\n", styles: [".submit-button{display:none!important;visibility:hidden}\n"] }]
108
+ }] });
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LWZpZWxkLXRhYmxlLWRpYWxvZy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL2Zvcm1seS9maWVsZHMvZm9ybWx5LWZpZWxkLXRhYmxlLWRpYWxvZy1mb3JtL2Zvcm1seS1maWVsZC10YWJsZS1kaWFsb2ctZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9mb3JtbHkvZmllbGRzL2Zvcm1seS1maWVsZC10YWJsZS1kaWFsb2ctZm9ybS9mb3JtbHktZmllbGQtdGFibGUtZGlhbG9nLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFFcEYsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzNDLE9BQU8sRUFBYSxFQUFFLEVBQUUsYUFBYSxFQUF3QixNQUFNLE1BQU0sQ0FBQztBQUMxRSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFekMsT0FBTyxFQUFDLHlCQUF5QixFQUFFLGdCQUFnQixFQUFFLHNCQUFzQixFQUFFLGVBQWUsRUFBQyxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7O0FBUWhJLE1BQU0sT0FBTyxzQ0FBOEMsU0FBUSxTQUFTO0lBTjVFOztRQVVXLGlCQUFZLEdBQXNCLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELFdBQU0sR0FBeUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVoRSxtQkFBYyxHQUErQixFQUFFLENBQUM7UUFDaEQsZUFBVSxHQUErQixFQUFFLENBQUM7UUFFM0Msa0JBQWEsR0FBbUIsRUFBRSxDQUFDO0tBeUY5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QUFXLENBQUMsS0FBSyxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUU7WUFDbEYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDbkM7UUFDRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVk7YUFDN0MsSUFBSSxDQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUNwQzthQUNBLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNYLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVNLFdBQVc7UUFDZCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELENBQUM7O21JQWxHUSxzQ0FBc0M7dUhBQXRDLHNDQUFzQyxpR0NkbkQsdThCQWFBOzJGRENhLHNDQUFzQztrQkFObEQsU0FBUzsrQkFDSSxvQ0FBb0MsbUJBRzdCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtGaWVsZFR5cGV9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBvZiwgUmVwbGF5U3ViamVjdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7c3RhcnRXaXRofSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7RmllbGRNYW55RWRpdG9yRGVzY3JpcHRvciwgQWN0aW9uRGVzY3JpcHRvciwgQWN0aW9uRWRpdG9yRGVzY3JpcHRvciwgQWN0aW9uTGV2ZWxFbnVtfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9kZXNjcmlwdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbW5nLWZvcm1seS10YWJsZS1kaWFsb2ctZm9ybS1maWVsZCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Zvcm1seS1maWVsZC10YWJsZS1kaWFsb2ctZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZm9ybWx5LWZpZWxkLXRhYmxlLWRpYWxvZy1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTW5nRm9ybWx5RmllbGRUYWJsZURpYWxvZ0Zvcm1Db21wb25lbnQ8VCwgRVQ+IGV4dGVuZHMgRmllbGRUeXBlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgcHVibGljIGRlc2NyaXB0b3IhOiBGaWVsZE1hbnlFZGl0b3JEZXNjcmlwdG9yPFQsIEVUPjtcblxuICAgIHB1YmxpYyBpdGVtc1N1YmplY3Q6IFN1YmplY3Q8QXJyYXk8VD4+ID0gbmV3IFJlcGxheVN1YmplY3QoMSk7XG4gICAgcHVibGljIGl0ZW1zJDogT2JzZXJ2YWJsZTxBcnJheTxUPj4gPSB0aGlzLml0ZW1zU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICAgIHB1YmxpYyB0b29sYmFyQWN0aW9uczogQXJyYXk8QWN0aW9uRGVzY3JpcHRvcjxUPj4gPSBbXTtcbiAgICBwdWJsaWMgcm93QWN0aW9uczogQXJyYXk8QWN0aW9uRGVzY3JpcHRvcjxUPj4gPSBbXTtcblxuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcblxuICAgICAgICB0aGlzLmRlc2NyaXB0b3IgPSB0aGlzLnRvWydkZXNjcmlwdG9yJ107XG4gICAgICAgIGNvbnN0IGhhc0FkZEFjdGlvbiA9IHRoaXMuZGVzY3JpcHRvci5hY3Rpb25zLnNvbWUoYSA9PiBhID09PSBGaWVsZE1hbnlFZGl0b3JEZXNjcmlwdG9yLkFjdGlvbkVudW0uQWRkKTtcbiAgICAgICAgY29uc3QgaGFzRWRpdEFjdGlvbiA9IHRoaXMuZGVzY3JpcHRvci5hY3Rpb25zLnNvbWUoYSA9PiBhID09PSBGaWVsZE1hbnlFZGl0b3JEZXNjcmlwdG9yLkFjdGlvbkVudW0uRWRpdCk7XG4gICAgICAgIGNvbnN0IGhhc0RlbGV0ZUFjdGlvbiA9IHRoaXMuZGVzY3JpcHRvci5hY3Rpb25zLnNvbWUoYSA9PiBhID09PSBGaWVsZE1hbnlFZGl0b3JEZXNjcmlwdG9yLkFjdGlvbkVudW0uRGVsZXRlKTtcblxuICAgICAgICBpZiAoaGFzQWRkQWN0aW9uKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmRlc2NyaXB0b3IudGFibGV2aWV3RGVzY3JpcHRvci5hZGRFZGl0b3IpO1xuICAgICAgICAgICAgY29uc3QgYWRkQWN0aW9uID0gbmV3IEFjdGlvbkVkaXRvckRlc2NyaXB0b3IodGhpcy5kZXNjcmlwdG9yLnRhYmxldmlld0Rlc2NyaXB0b3IuYWRkRWRpdG9yLCAnYWRkJywgdGhpcy5kZXNjcmlwdG9yLmVkaXRvci5tb2RlbC50eXBlLCB0aGlzLmRlc2NyaXB0b3IucHJvcGVydHkpXG4gICAgICAgICAgICAgICAgLndpdGhUaXRsZShudWxsKVxuICAgICAgICAgICAgICAgIC53aXRoSWNvbigncGkgcGktcGx1cycpXG4gICAgICAgICAgICAgICAgLndpdGhDbGFzc05hbWUoJ21uZy1mb3JtbHktZmllbGQtdGFibGUtZm9ybS1kaWFsb2cnKVxuICAgICAgICAgICAgICAgIC53aXRoU3VibWl0RnVuY3Rpb24oY3R4ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjdHguZGF0YT8uaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBpdGVtIHdhcyBwcm92aWRlZCBpbiBjb250ZXh0LCBlZGl0IGNhbm5vdCBiZSBkb25lLmApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybVN0YXRlLnN1Ym1pdHRlZE9uID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBbLi4udmFsdWUsIGN0eC5kYXRhLml0ZW1dO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnBhdGNoVmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoY3R4LmRhdGEuaXRlbSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAud2l0aElzVmlzaWJsZUZ1bmN0aW9uKGN0eCA9PiBvZighdGhpcy5vcHRpb25zPy5mb3JtU3RhdGUuZGlzYWJsZWQpKTtcbiAgICAgICAgICAgIHRoaXMudG9vbGJhckFjdGlvbnMucHVzaChhZGRBY3Rpb24gYXMgQWN0aW9uRGVzY3JpcHRvcjxUPik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc0VkaXRBY3Rpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGVkaXRBY3Rpb24gPSBuZXcgQWN0aW9uRWRpdG9yRGVzY3JpcHRvcih0aGlzLmRlc2NyaXB0b3IudGFibGV2aWV3RGVzY3JpcHRvci5lZGl0RWRpdG9yLCAnZWRpdCcsIHRoaXMuZGVzY3JpcHRvci5lZGl0b3IubW9kZWwudHlwZSwgdGhpcy5kZXNjcmlwdG9yLnByb3BlcnR5KVxuICAgICAgICAgICAgICAgIC53aXRoVGl0bGUobnVsbClcbiAgICAgICAgICAgICAgICAud2l0aEljb24oJ3BpIHBpLXBlbmNpbCcpXG4gICAgICAgICAgICAgICAgLndpdGhDbGFzc05hbWUoJ21uZy1mb3JtbHktZmllbGQtdGFibGUtZm9ybS1kaWFsb2cnKVxuICAgICAgICAgICAgICAgIC53aXRoU3VibWl0RnVuY3Rpb24oY3R4ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjdHguZGF0YT8uaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBpdGVtIHdhcyBwcm92aWRlZCBpbiBjb250ZXh0LCBlZGl0IGNhbm5vdCBiZSBkb25lLmApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybVN0YXRlLnN1Ym1pdHRlZE9uID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZvcm1Db250cm9sVmFsdWUgPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbFZhbHVlW2N0eC5kYXRhLmFjdGlvbkRhdGE/LlsnaXRlbUluZGV4J11dID0gY3R4LmRhdGEuaXRlbTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5wYXRjaFZhbHVlKGZvcm1Db250cm9sVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoY3R4LmRhdGEuaXRlbSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAud2l0aElzVmlzaWJsZUZ1bmN0aW9uKGN0eCA9PiBvZighdGhpcy5vcHRpb25zPy5mb3JtU3RhdGUuZGlzYWJsZWQpKTtcbiAgICAgICAgICAgIHRoaXMucm93QWN0aW9ucy5wdXNoKGVkaXRBY3Rpb24gYXMgQWN0aW9uRGVzY3JpcHRvcjxUPik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc0RlbGV0ZUFjdGlvbikge1xuICAgICAgICAgICAgY29uc3QgZGVsZXRlQWN0aW9uID0gbmV3IEFjdGlvbkRlc2NyaXB0b3IodGhpcy5kZXNjcmlwdG9yLnRhYmxldmlld0Rlc2NyaXB0b3IubW9kZWwsICdkZWxldGUnLCB0aGlzLmRlc2NyaXB0b3IuZWRpdG9yLm1vZGVsLnR5cGUsIHRoaXMuZGVzY3JpcHRvci5wcm9wZXJ0eSlcbiAgICAgICAgICAgICAgICAud2l0aExldmVsKEFjdGlvbkxldmVsRW51bS5EYW5nZXIpXG4gICAgICAgICAgICAgICAgLndpdGhUaXRsZShudWxsKVxuICAgICAgICAgICAgICAgIC53aXRoSWNvbigncGkgcGktdHJhc2gnKVxuICAgICAgICAgICAgICAgIC53aXRoUnVuRnVuY3Rpb24oY3R4ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjdHguZGF0YT8uaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBpdGVtIHdhcyBwcm92aWRlZCBpbiBjb250ZXh0LCBkZWxldGUgY2Fubm90IGJlIGRvbmUuYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbGV0IGZvcm1Db250cm9sVmFsdWUgPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wYXJlUHJvcGVydHkgPSB0aGlzLmRlc2NyaXB0b3IudGFibGVEZXNjcmlwdG9yLmRhdGFLZXlQcm9wZXJ0eSA/IHRoaXMuZGVzY3JpcHRvci50YWJsZURlc2NyaXB0b3IuZGF0YUtleVByb3BlcnR5IDogdGhpcy5kZXNjcmlwdG9yLnRhYmxlRGVzY3JpcHRvci5tb2RlbC5pZFByb3BlcnR5TmFtZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb21wYXJlUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbXBhcmUgaXRlbXMsIHBsZWFzZSBwcm92aWRlIG1haW4gdGFibGUgZGF0YSBrZXkgcHJvcGVydHkgb3IgbW9kZWwgaWQgcHJvcGVydHkuJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3R4SXRlbTogYW55ID0gY3R4LmRhdGEuaXRlbTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjdHhJdGVtPy5bY29tcGFyZVByb3BlcnR5XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1Db250cm9sVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xWYWx1ZSA9IGZvcm1Db250cm9sVmFsdWUuZmlsdGVyKChpOiBhbnkpID0+IGlbY29tcGFyZVByb3BlcnR5XSAhPT0gY3R4SXRlbVtjb21wYXJlUHJvcGVydHldKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5wYXRjaFZhbHVlKGZvcm1Db250cm9sVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoY3R4LmRhdGEuaXRlbSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAud2l0aElzVmlzaWJsZUZ1bmN0aW9uKGN0eCA9PiBvZighdGhpcy5vcHRpb25zPy5mb3JtU3RhdGUuZGlzYWJsZWQpKTtcbiAgICAgICAgICAgIHRoaXMucm93QWN0aW9ucy5wdXNoKGRlbGV0ZUFjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpbml0IHZhbHVlc1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wucGF0Y2hWYWx1ZShbXSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHN0YXJ0V2l0aCh0aGlzLmZvcm1Db250cm9sLnZhbHVlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh2ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zU3ViamVjdC5uZXh0KHYpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHN1YnNjcmlwdGlvbik7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgfVxufVxuIiwiPG1uZy10YWJsZSBbZGVzY3JpcHRvcl09XCJkZXNjcmlwdG9yLnRhYmxlRGVzY3JpcHRvclwiIFtpdGVtc109XCJpdGVtcyRcIj5cbiAgICA8bmctdGVtcGxhdGUgbW5nVGVtcGxhdGU9XCJjYXB0aW9uXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIG1kOmZsZXgtcm93IG1kOmp1c3RpZnktY29udGVudC1lbmQgdGFibGUtaGVhZGVyXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJtbmctZGF0YXRhYmxlLWZvcm0tbGFiZWwgcC1tLTBcIiBbZm9yXT1cImtleVwiPnt7IHRvPy5sYWJlbCEgfCB0cmFuc2xhdGUgfX0gPHNwYW4gKm5nSWY9XCJ0by5yZXF1aXJlZCAmJiB0b1snaGlkZVJlcXVpcmVkTWFya2VyJ10gIT09IHRydWVcIj4qPC9zcGFuPjwvbGFiZWw+XG4gICAgICAgICAgICA8bW5nLWFjdGlvbiAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIHRvb2xiYXJBY3Rpb25zXCIgW2FjdGlvbl09XCJhY3Rpb25cIj48L21uZy1hY3Rpb24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIG1uZ1RlbXBsYXRlPVwiY29sdW1uQWN0aW9uXCIgbGV0LWl0ZW09XCJyb3dJdGVtXCIgbGV0LWlkeD1cInJvd0luZGV4XCI+XG4gICAgICAgIDxtbmctYWN0aW9uICpuZ0Zvcj1cImxldCBhY3Rpb24gb2Ygcm93QWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIFthY3Rpb25dPVwiYWN0aW9uXCIgW2l0ZW1dPVwiaXRlbVwiIFtpdGVtSWRdPVwiZGVzY3JpcHRvci50YWJsZXZpZXdEZXNjcmlwdG9yLm1vZGVsLmlkUHJvcGVydHlOYW1lID8gaXRlbVtkZXNjcmlwdG9yLnRhYmxldmlld0Rlc2NyaXB0b3IubW9kZWwuaWRQcm9wZXJ0eU5hbWVdIDogdW5kZWZpbmVkXCIgW2FjdGlvbkRhdGFdPVwieyBpdGVtSW5kZXg6IGlkeCB9XCI+XG4gICAgICAgIDwvbW5nLWFjdGlvbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9tbmctdGFibGU+XG4iXX0=