@codetectonics/mantle 0.0.2 → 0.0.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 (272) hide show
  1. package/README.md +10 -49
  2. package/bundles/codetectonics-mantle.umd.js +6907 -0
  3. package/bundles/codetectonics-mantle.umd.js.map +1 -0
  4. package/esm2015/codetectonics-mantle.js +5 -0
  5. package/esm2015/lib/components/dashboard/containers/dynamic-dashboard-container/dynamic-dashboard-container.component.js +24 -0
  6. package/esm2015/lib/components/dashboard/containers/plain-dashboard-container/plain-dashboard-container.component.js +35 -0
  7. package/esm2015/lib/components/dashboard/dashboard-card/dashboard-card.component.js +133 -0
  8. package/esm2015/lib/components/dashboard/dashboard-card-search-menu/dashboard-card-search-menu.component.js +55 -0
  9. package/esm2015/lib/components/dashboard/dynamic-dashboard/dynamic-dashboard.component.js +23 -0
  10. package/esm2015/lib/components/dashboard/sections/dashboard-section/dashboard-section.component.js +71 -0
  11. package/esm2015/lib/components/dashboard/widgets/dashboard-info-card/dashboard-info-card.component.js +26 -0
  12. package/esm2015/lib/components/dashboard/widgets/dashboard-table/dashboard-table-datasource.js +30 -0
  13. package/esm2015/lib/components/dashboard/widgets/dashboard-table/dashboard-table.component.js +58 -0
  14. package/esm2015/lib/components/dashboard/widgets/dynamic-chart/dynamic-chart.component.js +85 -0
  15. package/esm2015/lib/components/dashboard/widgets/dynamic-widget-display/dynamic-widget-display.component.js +29 -0
  16. package/esm2015/lib/components/details/containers/accordion-details-container/accordion-details-container.component.js +26 -0
  17. package/esm2015/lib/components/details/containers/dynamic-details-container/dynamic-details-container.component.js +25 -0
  18. package/esm2015/lib/components/details/containers/plain-details-container/plain-details-container.component.js +25 -0
  19. package/esm2015/lib/components/details/dialog-details/dialog-details.component.js +77 -0
  20. package/esm2015/lib/components/details/dialog-nested-details/dialog-nested-details.component.js +40 -0
  21. package/esm2015/lib/components/details/dynamic-details/dynamic-details.component.js +23 -0
  22. package/esm2015/lib/components/details/fields/actions-attribute-display/actions-attribute-display.component.js +27 -0
  23. package/esm2015/lib/components/details/fields/chip-attribute-display/chip-attribute-display.component.js +40 -0
  24. package/esm2015/lib/components/details/fields/dynamic-attribute-display/dynamic-attribute-display.component.js +46 -0
  25. package/esm2015/lib/components/details/fields/file-attribute-display/file-attribute-display.component.js +37 -0
  26. package/esm2015/lib/components/details/fields/image-attribute-display/image-attribute-display.component.js +36 -0
  27. package/esm2015/lib/components/details/fields/link-attribute-display/link-attribute-display.component.js +30 -0
  28. package/esm2015/lib/components/details/fields/markdown-attribute-display/markdown-attribute-display.component.js +21 -0
  29. package/esm2015/lib/components/details/fields/thumbnail-display/thumbnail-display.component.js +33 -0
  30. package/esm2015/lib/components/details/sections/dynamic-details-section/dynamic-details-section.component.js +42 -0
  31. package/esm2015/lib/components/details/sections/grid-details-section/grid-details-section.component.js +53 -0
  32. package/esm2015/lib/components/details/sections/markdown-details-section/markdown-details-section.component.js +19 -0
  33. package/esm2015/lib/components/details/sections/table-details-section/table-details-section.component.js +37 -0
  34. package/esm2015/lib/components/form/containers/accordion-form-container/accordion-form-container.component.js +29 -0
  35. package/esm2015/lib/components/form/containers/dynamic-form-container/dynamic-form-container.component.js +28 -0
  36. package/esm2015/lib/components/form/containers/plain-form-container/plain-form-container.component.js +28 -0
  37. package/esm2015/lib/components/form/dialog-form/dialog-form.component.js +91 -0
  38. package/esm2015/lib/components/form/dialog-nested-form/dialog-nested-form.component.js +57 -0
  39. package/esm2015/lib/components/form/dynamic-form/dynamic-form.component.js +52 -0
  40. package/esm2015/lib/components/form/fields/autocomplete-input/autocomplete-input.component.js +69 -0
  41. package/esm2015/lib/components/form/fields/chip-input/chip-input.component.js +84 -0
  42. package/esm2015/lib/components/form/fields/datepicker/datepicker.component.js +91 -0
  43. package/esm2015/lib/components/form/fields/datetimepicker/datetimepicker.component.js +92 -0
  44. package/esm2015/lib/components/form/fields/dropdown/dropdown.component.js +73 -0
  45. package/esm2015/lib/components/form/fields/dynamic-form-field/dynamic-form-field.component.js +37 -0
  46. package/esm2015/lib/components/form/fields/filepicker/filepicker.component.js +97 -0
  47. package/esm2015/lib/components/form/fields/image-cropper/image-cropper.component.js +52 -0
  48. package/esm2015/lib/components/form/fields/imagepicker/imagepicker.component.js +139 -0
  49. package/esm2015/lib/components/form/fields/markdown-input/markdown-input.component.js +53 -0
  50. package/esm2015/lib/components/form/fields/number-input/number-input.component.js +91 -0
  51. package/esm2015/lib/components/form/fields/password-input/password-input.component.js +58 -0
  52. package/esm2015/lib/components/form/fields/text-input/text-input.component.js +55 -0
  53. package/esm2015/lib/components/form/fields/textarea/textarea.component.js +58 -0
  54. package/esm2015/lib/components/form/sections/dynamic-form-section/dynamic-form-section.component.js +47 -0
  55. package/esm2015/lib/components/form/sections/grid-form-section/grid-form-section.component.js +69 -0
  56. package/esm2015/lib/components/form/sections/table-form-section/table-form-section.component.js +107 -0
  57. package/esm2015/lib/components/layout-editor/containers/accordion-layout-editor-container/accordion-layout-editor-container.component.js +24 -0
  58. package/esm2015/lib/components/layout-editor/containers/dynamic-layout-editor-container/dynamic-layout-editor-container.component.js +23 -0
  59. package/esm2015/lib/components/layout-editor/containers/plain-layout-editor-container/plain-layout-editor-container.component.js +24 -0
  60. package/esm2015/lib/components/layout-editor/dynamic-layout-editor/dynamic-layout-editor.component.js +23 -0
  61. package/esm2015/lib/components/layout-editor/elements/dynamic-layout-editor-element/dynamic-layout-editor-element.component.js +38 -0
  62. package/esm2015/lib/components/layout-editor/elements/layout-editor-field-element/layout-editor-field-element.component.js +76 -0
  63. package/esm2015/lib/components/layout-editor/elements/layout-editor-table-column-element/layout-editor-table-column-element.component.js +76 -0
  64. package/esm2015/lib/components/layout-editor/elements/layout-editor-widget-element/layout-editor-widget-element.component.js +19 -0
  65. package/esm2015/lib/components/layout-editor/sections/dashboard-layout-editor-section/dashboard-layout-editor-section.component.js +21 -0
  66. package/esm2015/lib/components/layout-editor/sections/dynamic-layout-editor-section/dynamic-layout-editor-section.component.js +25 -0
  67. package/esm2015/lib/components/layout-editor/sections/grid-layout-editor-section/grid-layout-editor-section.component.js +102 -0
  68. package/esm2015/lib/components/layout-editor/sections/markdown-layout-editor-section/markdown-layout-editor-section.component.js +19 -0
  69. package/esm2015/lib/components/layout-editor/sections/table-layout-editor-section/table-layout-editor-section.component.js +74 -0
  70. package/esm2015/lib/components/navigation/nav-tree/nav-tree.component.js +65 -0
  71. package/esm2015/lib/components/navigation/reroute/reroute.component.js +28 -0
  72. package/esm2015/lib/components/pages/dashboard-page/dashboard-page.component.js +34 -0
  73. package/esm2015/lib/components/pages/detail-page/detail-page.component.js +101 -0
  74. package/esm2015/lib/components/pages/documents-page/documents-page.component.js +109 -0
  75. package/esm2015/lib/components/pages/export-page/export-page.component.js +65 -0
  76. package/esm2015/lib/components/pages/form-page/form-page.component.js +133 -0
  77. package/esm2015/lib/components/pages/layout-editor-page/layout-editor-page.component.js +72 -0
  78. package/esm2015/lib/components/pages/list-page/list-page-datasource.js +62 -0
  79. package/esm2015/lib/components/pages/list-page/list-page.component.js +159 -0
  80. package/esm2015/lib/components/pages/tabbed-page/tabbed-page.component.js +35 -0
  81. package/esm2015/lib/components/titles/content-title/content-title.component.js +23 -0
  82. package/esm2015/lib/components/titles/page-title/page-title.component.js +28 -0
  83. package/esm2015/lib/components/titles/section-title/section-title.component.js +18 -0
  84. package/esm2015/lib/components/widgets/delete-confirmation-dialog/delete-confirmation-dialog.component.js +36 -0
  85. package/esm2015/lib/components/widgets/dynamic-table/dynamic-table-datasource.js +89 -0
  86. package/esm2015/lib/components/widgets/dynamic-table/dynamic-table.component.js +67 -0
  87. package/esm2015/lib/components/widgets/file-preview-dialog/file-preview-dialog.component.js +42 -0
  88. package/esm2015/lib/components/widgets/loader/loader.component.js +21 -0
  89. package/esm2015/lib/components/widgets/save-confirmation-dialog/save-confirmation-dialog.component.js +35 -0
  90. package/esm2015/lib/components/widgets/search-panel/search-panel.component.js +67 -0
  91. package/esm2015/lib/components/widgets/snackbar/snackbar.component.js +42 -0
  92. package/esm2015/lib/config/charts/column-chart.data.js +38 -0
  93. package/esm2015/lib/config/charts/gantt-chart.data.js +18 -0
  94. package/esm2015/lib/config/charts/pie-chart.data.js +21 -0
  95. package/esm2015/lib/config/charts/progress-bar-chart.data.js +50 -0
  96. package/esm2015/lib/config/charts/spline-chart.data.js +24 -0
  97. package/esm2015/lib/data-structures/dynamic-layout.structure.js +2 -0
  98. package/esm2015/lib/data-structures/file-attachment.structure.js +2 -0
  99. package/esm2015/lib/directives/click-stop-propagation.directive.js +19 -0
  100. package/esm2015/lib/directives/file-dropzone.directive.js +53 -0
  101. package/esm2015/lib/guards/feature.guard.js +42 -0
  102. package/esm2015/lib/guards/password-check.guard.js +21 -0
  103. package/esm2015/lib/guards/session.guard.js +21 -0
  104. package/esm2015/lib/mantle.module.js +518 -0
  105. package/esm2015/lib/material.module.js +290 -0
  106. package/esm2015/lib/models/screen-size-map.model.js +9 -0
  107. package/esm2015/lib/pipes/dynamic.pipe.js +45 -0
  108. package/esm2015/lib/pipes/secure-image.pipe.js +35 -0
  109. package/esm2015/lib/services/adapters/web-api-crud.adapter.js +22 -0
  110. package/esm2015/lib/services/adapters/websocket.adapter.js +2 -0
  111. package/esm2015/lib/services/announcement.service.js +43 -0
  112. package/esm2015/lib/services/array.service.js +82 -0
  113. package/esm2015/lib/services/chart.service.js +45 -0
  114. package/esm2015/lib/services/confirmation.service.js +45 -0
  115. package/esm2015/lib/services/current-user.service.js +120 -0
  116. package/esm2015/lib/services/dynamic-form.service.js +59 -0
  117. package/esm2015/lib/services/feature-config.service.js +240 -0
  118. package/esm2015/lib/services/interfaces/authorisable-feature.service.js +2 -0
  119. package/esm2015/lib/services/interfaces/dashboard-page.service.js +2 -0
  120. package/esm2015/lib/services/interfaces/dashboard-widget.service.js +2 -0
  121. package/esm2015/lib/services/interfaces/detail-page.service.js +2 -0
  122. package/esm2015/lib/services/interfaces/export-page.service.js +2 -0
  123. package/esm2015/lib/services/interfaces/form-page.service.js +2 -0
  124. package/esm2015/lib/services/interfaces/layout-editor-page.service.js +2 -0
  125. package/esm2015/lib/services/interfaces/list-page.service.js +2 -0
  126. package/esm2015/lib/services/interfaces/nav-tabs.service.js +2 -0
  127. package/esm2015/lib/services/interfaces/reroute.service.js +2 -0
  128. package/esm2015/lib/services/object.service.js +69 -0
  129. package/esm2015/lib/services/password-check.service.js +93 -0
  130. package/esm2015/lib/services/screen-size.service.js +41 -0
  131. package/esm2015/lib/services/web-api.service.js +99 -0
  132. package/esm2015/lib/services/websocket.service.js +58 -0
  133. package/esm2015/lib/tokens/environment.token.js +3 -0
  134. package/esm2015/public-api.js +133 -0
  135. package/fesm2015/codetectonics-mantle.js +5940 -0
  136. package/fesm2015/codetectonics-mantle.js.map +1 -0
  137. package/lib/components/dashboard/containers/dynamic-dashboard-container/dynamic-dashboard-container.component.d.ts +11 -0
  138. package/lib/components/dashboard/containers/plain-dashboard-container/plain-dashboard-container.component.d.ts +14 -0
  139. package/lib/components/dashboard/dashboard-card/dashboard-card.component.d.ts +41 -0
  140. package/lib/components/dashboard/dashboard-card-search-menu/dashboard-card-search-menu.component.d.ts +20 -0
  141. package/lib/components/dashboard/dynamic-dashboard/dynamic-dashboard.component.d.ts +10 -0
  142. package/lib/components/dashboard/sections/dashboard-section/dashboard-section.component.d.ts +27 -0
  143. package/lib/components/dashboard/widgets/dashboard-info-card/dashboard-info-card.component.d.ts +8 -0
  144. package/lib/components/dashboard/widgets/dashboard-table/dashboard-table-datasource.d.ts +22 -0
  145. package/lib/components/dashboard/widgets/dashboard-table/dashboard-table.component.d.ts +28 -0
  146. package/lib/components/dashboard/widgets/dynamic-chart/dynamic-chart.component.d.ts +20 -0
  147. package/lib/components/dashboard/widgets/dynamic-widget-display/dynamic-widget-display.component.d.ts +9 -0
  148. package/lib/components/details/containers/accordion-details-container/accordion-details-container.component.d.ts +11 -0
  149. package/lib/components/details/containers/dynamic-details-container/dynamic-details-container.component.d.ts +11 -0
  150. package/lib/components/details/containers/plain-details-container/plain-details-container.component.d.ts +11 -0
  151. package/lib/components/details/dialog-details/dialog-details.component.d.ts +36 -0
  152. package/lib/components/details/dialog-nested-details/dialog-nested-details.component.d.ts +22 -0
  153. package/lib/components/details/dynamic-details/dynamic-details.component.d.ts +10 -0
  154. package/lib/components/details/fields/actions-attribute-display/actions-attribute-display.component.d.ts +7 -0
  155. package/lib/components/details/fields/chip-attribute-display/chip-attribute-display.component.d.ts +9 -0
  156. package/lib/components/details/fields/dynamic-attribute-display/dynamic-attribute-display.component.d.ts +15 -0
  157. package/lib/components/details/fields/file-attribute-display/file-attribute-display.component.d.ts +12 -0
  158. package/lib/components/details/fields/image-attribute-display/image-attribute-display.component.d.ts +12 -0
  159. package/lib/components/details/fields/link-attribute-display/link-attribute-display.component.d.ts +10 -0
  160. package/lib/components/details/fields/markdown-attribute-display/markdown-attribute-display.component.d.ts +6 -0
  161. package/lib/components/details/fields/thumbnail-display/thumbnail-display.component.d.ts +10 -0
  162. package/lib/components/details/sections/dynamic-details-section/dynamic-details-section.component.d.ts +17 -0
  163. package/lib/components/details/sections/grid-details-section/grid-details-section.component.d.ts +17 -0
  164. package/lib/components/details/sections/markdown-details-section/markdown-details-section.component.d.ts +7 -0
  165. package/lib/components/details/sections/table-details-section/table-details-section.component.d.ts +12 -0
  166. package/lib/components/form/containers/accordion-form-container/accordion-form-container.component.d.ts +13 -0
  167. package/lib/components/form/containers/dynamic-form-container/dynamic-form-container.component.d.ts +13 -0
  168. package/lib/components/form/containers/plain-form-container/plain-form-container.component.d.ts +13 -0
  169. package/lib/components/form/dialog-form/dialog-form.component.d.ts +39 -0
  170. package/lib/components/form/dialog-nested-form/dialog-nested-form.component.d.ts +31 -0
  171. package/lib/components/form/dynamic-form/dynamic-form.component.d.ts +21 -0
  172. package/lib/components/form/fields/autocomplete-input/autocomplete-input.component.d.ts +32 -0
  173. package/lib/components/form/fields/chip-input/chip-input.component.d.ts +27 -0
  174. package/lib/components/form/fields/datepicker/datepicker.component.d.ts +24 -0
  175. package/lib/components/form/fields/datetimepicker/datetimepicker.component.d.ts +24 -0
  176. package/lib/components/form/fields/dropdown/dropdown.component.d.ts +31 -0
  177. package/lib/components/form/fields/dynamic-form-field/dynamic-form-field.component.d.ts +10 -0
  178. package/lib/components/form/fields/filepicker/filepicker.component.d.ts +27 -0
  179. package/lib/components/form/fields/image-cropper/image-cropper.component.d.ts +27 -0
  180. package/lib/components/form/fields/imagepicker/imagepicker.component.d.ts +41 -0
  181. package/lib/components/form/fields/markdown-input/markdown-input.component.d.ts +17 -0
  182. package/lib/components/form/fields/number-input/number-input.component.d.ts +27 -0
  183. package/lib/components/form/fields/password-input/password-input.component.d.ts +19 -0
  184. package/lib/components/form/fields/text-input/text-input.component.d.ts +18 -0
  185. package/lib/components/form/fields/textarea/textarea.component.d.ts +19 -0
  186. package/lib/components/form/sections/dynamic-form-section/dynamic-form-section.component.d.ts +19 -0
  187. package/lib/components/form/sections/grid-form-section/grid-form-section.component.d.ts +23 -0
  188. package/lib/components/form/sections/table-form-section/table-form-section.component.d.ts +22 -0
  189. package/lib/components/layout-editor/containers/accordion-layout-editor-container/accordion-layout-editor-container.component.d.ts +10 -0
  190. package/lib/components/layout-editor/containers/dynamic-layout-editor-container/dynamic-layout-editor-container.component.d.ts +10 -0
  191. package/lib/components/layout-editor/containers/plain-layout-editor-container/plain-layout-editor-container.component.d.ts +10 -0
  192. package/lib/components/layout-editor/dynamic-layout-editor/dynamic-layout-editor.component.d.ts +10 -0
  193. package/lib/components/layout-editor/elements/dynamic-layout-editor-element/dynamic-layout-editor-element.component.d.ts +13 -0
  194. package/lib/components/layout-editor/elements/layout-editor-field-element/layout-editor-field-element.component.d.ts +14 -0
  195. package/lib/components/layout-editor/elements/layout-editor-table-column-element/layout-editor-table-column-element.component.d.ts +14 -0
  196. package/lib/components/layout-editor/elements/layout-editor-widget-element/layout-editor-widget-element.component.d.ts +8 -0
  197. package/lib/components/layout-editor/sections/dashboard-layout-editor-section/dashboard-layout-editor-section.component.d.ts +8 -0
  198. package/lib/components/layout-editor/sections/dynamic-layout-editor-section/dynamic-layout-editor-section.component.d.ts +10 -0
  199. package/lib/components/layout-editor/sections/grid-layout-editor-section/grid-layout-editor-section.component.d.ts +21 -0
  200. package/lib/components/layout-editor/sections/markdown-layout-editor-section/markdown-layout-editor-section.component.d.ts +7 -0
  201. package/lib/components/layout-editor/sections/table-layout-editor-section/table-layout-editor-section.component.d.ts +14 -0
  202. package/lib/components/navigation/nav-tree/nav-tree.component.d.ts +46 -0
  203. package/lib/components/navigation/reroute/reroute.component.d.ts +14 -0
  204. package/lib/components/pages/dashboard-page/dashboard-page.component.d.ts +16 -0
  205. package/lib/components/pages/detail-page/detail-page.component.d.ts +35 -0
  206. package/lib/components/pages/documents-page/documents-page.component.d.ts +41 -0
  207. package/lib/components/pages/export-page/export-page.component.d.ts +29 -0
  208. package/lib/components/pages/form-page/form-page.component.d.ts +37 -0
  209. package/lib/components/pages/layout-editor-page/layout-editor-page.component.d.ts +26 -0
  210. package/lib/components/pages/list-page/list-page-datasource.d.ts +32 -0
  211. package/lib/components/pages/list-page/list-page.component.d.ts +46 -0
  212. package/lib/components/pages/tabbed-page/tabbed-page.component.d.ts +16 -0
  213. package/lib/components/titles/content-title/content-title.component.d.ts +8 -0
  214. package/lib/components/titles/page-title/page-title.component.d.ts +10 -0
  215. package/lib/components/titles/section-title/section-title.component.d.ts +7 -0
  216. package/lib/components/widgets/delete-confirmation-dialog/delete-confirmation-dialog.component.d.ts +20 -0
  217. package/lib/components/widgets/dynamic-table/dynamic-table-datasource.d.ts +40 -0
  218. package/lib/components/widgets/dynamic-table/dynamic-table.component.d.ts +30 -0
  219. package/lib/components/widgets/file-preview-dialog/file-preview-dialog.component.d.ts +17 -0
  220. package/lib/components/widgets/loader/loader.component.d.ts +6 -0
  221. package/lib/components/widgets/save-confirmation-dialog/save-confirmation-dialog.component.d.ts +16 -0
  222. package/lib/components/widgets/search-panel/search-panel.component.d.ts +21 -0
  223. package/lib/components/widgets/snackbar/snackbar.component.d.ts +11 -0
  224. package/lib/config/charts/column-chart.data.d.ts +37 -0
  225. package/lib/config/charts/gantt-chart.data.d.ts +17 -0
  226. package/lib/config/charts/pie-chart.data.d.ts +20 -0
  227. package/lib/config/charts/progress-bar-chart.data.d.ts +49 -0
  228. package/lib/config/charts/spline-chart.data.d.ts +23 -0
  229. package/lib/data-structures/dynamic-layout.structure.d.ts +161 -0
  230. package/lib/data-structures/file-attachment.structure.d.ts +6 -0
  231. package/lib/directives/click-stop-propagation.directive.d.ts +6 -0
  232. package/lib/directives/file-dropzone.directive.d.ts +12 -0
  233. package/lib/guards/feature.guard.d.ts +15 -0
  234. package/lib/guards/password-check.guard.d.ts +11 -0
  235. package/lib/guards/session.guard.d.ts +10 -0
  236. package/lib/mantle.module.d.ts +106 -0
  237. package/lib/material.module.d.ts +34 -0
  238. package/lib/models/screen-size-map.model.d.ts +13 -0
  239. package/lib/pipes/dynamic.pipe.d.ts +12 -0
  240. package/lib/pipes/secure-image.pipe.d.ts +11 -0
  241. package/lib/services/adapters/web-api-crud.adapter.d.ts +63 -0
  242. package/lib/services/adapters/websocket.adapter.d.ts +6 -0
  243. package/lib/services/announcement.service.d.ts +11 -0
  244. package/lib/services/array.service.d.ts +21 -0
  245. package/lib/services/chart.service.d.ts +14 -0
  246. package/lib/services/confirmation.service.d.ts +11 -0
  247. package/lib/services/current-user.service.d.ts +28 -0
  248. package/lib/services/dynamic-form.service.d.ts +30 -0
  249. package/lib/services/feature-config.service.d.ts +82 -0
  250. package/lib/services/interfaces/authorisable-feature.service.d.ts +5 -0
  251. package/lib/services/interfaces/dashboard-page.service.d.ts +13 -0
  252. package/lib/services/interfaces/dashboard-widget.service.d.ts +34 -0
  253. package/lib/services/interfaces/detail-page.service.d.ts +36 -0
  254. package/lib/services/interfaces/export-page.service.d.ts +6 -0
  255. package/lib/services/interfaces/form-page.service.d.ts +30 -0
  256. package/lib/services/interfaces/layout-editor-page.service.d.ts +14 -0
  257. package/lib/services/interfaces/list-page.service.d.ts +44 -0
  258. package/lib/services/interfaces/nav-tabs.service.d.ts +7 -0
  259. package/lib/services/interfaces/reroute.service.d.ts +3 -0
  260. package/lib/services/object.service.d.ts +11 -0
  261. package/lib/services/password-check.service.d.ts +21 -0
  262. package/lib/services/screen-size.service.d.ts +14 -0
  263. package/lib/services/web-api.service.d.ts +21 -0
  264. package/lib/services/websocket.service.d.ts +20 -0
  265. package/lib/tokens/environment.token.d.ts +2 -0
  266. package/package.json +33 -15
  267. package/public-api.d.ts +129 -2
  268. package/fesm2022/codetectonics-mantle.mjs +0 -42
  269. package/fesm2022/codetectonics-mantle.mjs.map +0 -1
  270. package/lib/mantle.component.d.ts +0 -5
  271. package/lib/mantle.service.d.ts +0 -6
  272. /package/{index.d.ts → codetectonics-mantle.d.ts} +0 -0
@@ -0,0 +1,101 @@
1
+ import { Component, Injector } from '@angular/core';
2
+ import { ActivatedRoute } from '@angular/router';
3
+ import { map } from 'rxjs/operators';
4
+ import { AnnouncementService } from '../../../services/announcement.service';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/router";
7
+ import * as i2 from "../../../services/announcement.service";
8
+ import * as i3 from "@angular/material/button";
9
+ import * as i4 from "@angular/material/icon";
10
+ import * as i5 from "../../titles/content-title/content-title.component";
11
+ import * as i6 from "../../details/dynamic-details/dynamic-details.component";
12
+ import * as i7 from "@angular/material/progress-spinner";
13
+ import * as i8 from "@angular/flex-layout/flex";
14
+ import * as i9 from "@angular/common";
15
+ import * as i10 from "@angular/flex-layout/extended";
16
+ import * as i11 from "@angular/material/form-field";
17
+ export class DetailPageComponent {
18
+ constructor(route, injector, announcementService) {
19
+ this.route = route;
20
+ this.injector = injector;
21
+ this.announcementService = announcementService;
22
+ this.bottomLeftButtons = [];
23
+ this.bottomRightButtons = [];
24
+ this.isTabbedContent = false;
25
+ const detailPageServiceInjectionToken = this.route.snapshot.data['detailPageService'];
26
+ this.detailPageService = this.injector.get(detailPageServiceInjectionToken);
27
+ this.detailPageService.setParentComponent(this);
28
+ this.exportOptions = this.detailPageService.detailPageExportOptions();
29
+ this.isTabbedContent = this.route.snapshot.data['isTabbedContent'];
30
+ }
31
+ ngOnInit() {
32
+ this.loadData();
33
+ }
34
+ loadData() {
35
+ this.route.params.subscribe(params => {
36
+ this.id = this.route.snapshot.params['id'];
37
+ this.content$ = this.detailPageService.get(this.id).pipe(map(res => {
38
+ this.header = res.header;
39
+ this.detailPageService.onDetailContentLoaded(res.content);
40
+ res.content.containers.forEach((container) => {
41
+ container.sections.forEach((section) => {
42
+ this.loadSectionActions(section);
43
+ });
44
+ });
45
+ this.loadAdditionalButtons(res.content.data);
46
+ this.exportOptions = this.detailPageService.detailPageExportOptions(res.content.data);
47
+ return res.content;
48
+ }));
49
+ });
50
+ }
51
+ loadSectionActions(section) {
52
+ let sectionActions = this.detailPageService.detailPageSectionActions(section.slug);
53
+ if (sectionActions.length == 0)
54
+ return;
55
+ if (section.layout == 'table') {
56
+ let actionsColumn = { header: '', attr: 'table_row_actions', type: 'actions', options: { actions: sectionActions } };
57
+ section.elements.push(actionsColumn);
58
+ }
59
+ }
60
+ loadAdditionalButtons(record) {
61
+ let additionalDetailPageButtons = this.detailPageService.additionalDetailPageButtons(record);
62
+ this.bottomLeftButtons = additionalDetailPageButtons.filter(button => {
63
+ return button.position == 'left';
64
+ });
65
+ this.bottomRightButtons = additionalDetailPageButtons.filter(button => {
66
+ return button.position == 'right';
67
+ });
68
+ }
69
+ onEditClicked() {
70
+ this.detailPageService.openForm({ id: this.id });
71
+ }
72
+ onBackClicked() {
73
+ this.detailPageService.openList();
74
+ }
75
+ onDeleteClicked() {
76
+ this.detailPageService.delete(this.id, () => { this.isDeleteInProgress = true; }, (res) => { this.onDeleteSuccess(res); }, (res) => { this.onDeleteFailure(res); });
77
+ }
78
+ onDeleteSuccess(res) {
79
+ this.announcementService.success('Delete successful!');
80
+ this.back();
81
+ this.isDeleteInProgress = false;
82
+ }
83
+ onDeleteFailure(res) {
84
+ this.announcementService.error('Delete failed!');
85
+ this.isDeleteInProgress = false;
86
+ }
87
+ back() {
88
+ this.detailPageService.openList();
89
+ }
90
+ }
91
+ DetailPageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DetailPageComponent, deps: [{ token: i1.ActivatedRoute }, { token: i0.Injector }, { token: i2.AnnouncementService }], target: i0.ɵɵFactoryTarget.Component });
92
+ DetailPageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: DetailPageComponent, selector: "mantle-detail-page", ngImport: i0, template: "<div fxLayout=\"column\" fxLayoutAlign=\"stretch\" class=\"full-height-min\" [ngClass]=\"{'page full-height-only vertically-scrollable': !isTabbedContent}\">\n <div fxFlex=\"0 0 auto\" class=\"page-header\">\n <div fxLayout=\"row\" fxLayoutAlign=\"center start\" fxLayoutGap=\"16px\">\n <div fxFlex=\"0 0 auto\" *ngIf=\"!detailPageService.hideBackButton\">\n <button class=\"back-button\" mat-mini-fab color=\"primary\" type=\"button\" (click)=\"onBackClicked()\">\n <mat-icon>arrow_back</mat-icon>\n </button>\n </div>\n\n <div fxFlex=\"1 1 auto\">\n <mantle-content-title *ngIf=\"header\" [thumbnail]=\"header.thumbnail\" [title]=\"header.title\"></mantle-content-title>\n </div>\n\n <div fxFlex=\"0 0 auto\" *ngIf=\"detailPageService.showEditButton && detailPageService.canWrite()\">\n <button mat-mini-fab\n color=\"primary\"\n type=\"button\"\n class=\"edit-button\"\n (click)=\"onEditClicked()\"\n [disabled]=\"detailPageService.isCommitInProgress\">\n <mat-icon>edit</mat-icon>\n </button>\n </div>\n </div>\n </div>\n\n <div fxFlex=\"1 0 auto\" class=\"main-content\">\n <mantle-dynamic-details [content]=\"content$ | async\" [detailPageService]=\"detailPageService\"></mantle-dynamic-details>\n </div>\n\n <div fxFlex=\"0 0 auto\" class=\"page-footer\">\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\" fxLayoutGap=\"16px\">\n <ng-container *ngFor=\"let button of bottomLeftButtons\">\n <div fxFlex=\"0 0 auto\" *ngIf=\"button.show\">\n <button mat-raised-button\n color=\"{{ button.color }}\"\n type=\"button\"\n class=\"additional-button\"\n [ngClass]=\"{ 'in-progress-button': button.isInProgress() }\"\n [disabled]=\"detailPageService.isCommitInProgress || button.disabled\"\n (click)=\"button.onClick(id)\">\n {{ button.label }}\n <mat-spinner *ngIf=\"button.isInProgress()\" matSuffix [diameter]=\"16\"></mat-spinner>\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"content$ | async as content\">\n <div fxFlex=\"0 0 auto\" *ngFor=\"let exportOption of exportOptions\">\n <div *ngIf=\"(exportOption.show == null) || (exportOption.show)\">\n <button mat-button\n type=\"button\"\n class=\"export-button\"\n (click)=\"exportOption.export(content.data).subscribe()\"\n [disabled]=\"detailPageService.isCommitInProgress\">\n <span class=\"export-button-label\">{{ exportOption.label }}</span>\n <mat-icon>download</mat-icon>\n </button>\n </div>\n </div>\n </ng-container>\n\n <div fxFlex=\"1 1 auto\"></div>\n\n <ng-container *ngFor=\"let button of bottomRightButtons\">\n <div fxFlex=\"0 0 auto\" *ngIf=\"button.show\">\n <button mat-raised-button\n color=\"{{ button.color }}\"\n type=\"button\"\n class=\"additional-button\"\n [ngClass]=\"{ 'in-progress-button': button.isInProgress() }\"\n [disabled]=\"detailPageService.isCommitInProgress || button.disabled\"\n (click)=\"button.onClick(id)\">\n {{ button.label }}\n <mat-spinner *ngIf=\"button.isInProgress()\" matSuffix [diameter]=\"16\"></mat-spinner>\n </button>\n </div>\n </ng-container>\n\n <div fxFlex=\"0 0 auto\" *ngIf=\"detailPageService.showDeleteButton && detailPageService.canWrite()\">\n <button mat-button\n color=\"warn\"\n type=\"button\"\n class=\"delete-button\"\n [ngClass]=\"{ 'in-progress-button': isDeleteInProgress }\"\n [disabled]=\"detailPageService.isCommitInProgress\"\n (click)=\"onDeleteClicked()\">\n Delete {{ detailPageService.noun() }}\n <mat-spinner *ngIf=\"isDeleteInProgress\" matSuffix [diameter]=\"16\"></mat-spinner>\n </button>\n </div>\n </div>\n </div>\n</div>\n", styles: [".edit-button{margin-bottom:8px}.export-button{display:block;width:144px;background-color:transparent;white-space:nowrap;padding:0;margin:16px 0 16px auto}.export-button .export-button-label{display:inline-block;width:100px;white-space:normal;text-align:right;text-transform:uppercase;font-weight:normal;line-height:1.25rem;margin-right:.25rem}.export-button .mat-icon{height:auto;width:auto;font-size:2.5rem}.additional-button{min-width:140px}.in-progress-button .mat-spinner{position:absolute;top:10px;right:12px}\n"], components: [{ type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i5.ContentTitleComponent, selector: "mantle-content-title", inputs: ["thumbnail", "title"] }, { type: i6.DynamicDetailsComponent, selector: "mantle-dynamic-details", inputs: ["detailPageService", "content"] }, { type: i7.MatSpinner, selector: "mat-spinner", inputs: ["color"] }], directives: [{ type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i8.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i10.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { type: i8.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i8.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i11.MatSuffix, selector: "[matSuffix]" }], pipes: { "async": i9.AsyncPipe } });
93
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DetailPageComponent, decorators: [{
94
+ type: Component,
95
+ args: [{
96
+ selector: 'mantle-detail-page',
97
+ templateUrl: './detail-page.component.html',
98
+ styleUrls: ['./detail-page.component.scss']
99
+ }]
100
+ }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i0.Injector }, { type: i2.AnnouncementService }]; } });
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlsLXBhZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWFudGxlL3NyYy9saWIvY29tcG9uZW50cy9wYWdlcy9kZXRhaWwtcGFnZS9kZXRhaWwtcGFnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYW50bGUvc3JjL2xpYi9jb21wb25lbnRzL3BhZ2VzL2RldGFpbC1wYWdlL2RldGFpbC1wYWdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVqRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJckMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFTN0UsTUFBTSxPQUFPLG1CQUFtQjtJQWE5QixZQUFvQixLQUFxQixFQUFVLFFBQWtCLEVBQ2pELG1CQUF3QztRQUR4QyxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUFVLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDakQsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQU5yRCxzQkFBaUIsR0FBdUIsRUFBRSxDQUFDO1FBQzNDLHVCQUFrQixHQUF1QixFQUFFLENBQUM7UUFDNUMsb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFLdEMsTUFBTSwrQkFBK0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN0RixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQW9CLCtCQUErQixDQUFDLENBQUM7UUFDL0YsSUFBSSxDQUFD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LG1CQUFtQjtrQkFML0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixXQUFXLEVBQUUsOEJBQThCO29CQUMzQyxTQUFTLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQztpQkFDNUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdG9yLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIER5bmFtaWNMYXlvdXRDb250YWluZXIsIER5bmFtaWNMYXlvdXRTZWN0aW9uLCBEeW5hbWljTGF5b3V0VGFibGVTZWN0aW9uXG59IGZyb20gJy4uLy4uLy4uL2RhdGEtc3RydWN0dXJlcy9keW5hbWljLWxheW91dC5zdHJ1Y3R1cmUnO1xuaW1wb3J0IHsgQW5ub3VuY2VtZW50U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Fubm91bmNlbWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IERldGFpbFBhZ2VCdXR0b24sIERldGFpbFBhZ2VFeHBvcnRPcHRpb24sIERldGFpbFBhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaW50ZXJmYWNlcy9kZXRhaWwtcGFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IFdlYkFwaURlbGV0ZVJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYWRhcHRlcnMvd2ViLWFwaS1jcnVkLmFkYXB0ZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtYW50bGUtZGV0YWlsLXBhZ2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGV0YWlsLXBhZ2UuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kZXRhaWwtcGFnZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIERldGFpbFBhZ2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIHB1YmxpYyBkZXRhaWxQYWdlU2VydmljZTogRGV0YWlsUGFnZVNlcnZpY2U7XG5cbiAgcHVibGljIGlkITogc3RyaW5nO1xuICBwdWJsaWMgaGVhZGVyOiBhbnk7XG4gIHB1YmxpYyBjb250ZW50JCE6IE9ic2VydmFibGU8YW55PjtcbiAgcHVibGljIGV4cG9ydE9wdGlvbnMhOiBEZXRhaWxQYWdlRXhwb3J0T3B0aW9uW107XG4gIHB1YmxpYyBib3R0b21MZWZ0QnV0dG9uczogRGV0YWlsUGFnZUJ1dHRvbltdID0gW107XG4gIHB1YmxpYyBib3R0b21SaWdodEJ1dHRvbnM6IERldGFpbFBhZ2VCdXR0b25bXSA9IFtdO1xuICBwdWJsaWMgaXNUYWJiZWRDb250ZW50OiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBpc0RlbGV0ZUluUHJvZ3Jlc3MhOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLCBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBhbm5vdW5jZW1lbnRTZXJ2aWNlOiBBbm5vdW5jZW1lbnRTZXJ2aWNlKSB7XG4gICAgY29uc3QgZGV0YWlsUGFnZVNlcnZpY2VJbmplY3Rpb25Ub2tlbiA9IHRoaXMucm91dGUuc25hcHNob3QuZGF0YVsnZGV0YWlsUGFnZVNlcnZpY2UnXTtcbiAgICB0aGlzLmRldGFpbFBhZ2VTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQ8RGV0YWlsUGFnZVNlcnZpY2U+KGRldGFpbFBhZ2VTZXJ2aWNlSW5qZWN0aW9uVG9rZW4pO1xuICAgIHRoaXMuZGV0YWlsUGFnZVNlcnZpY2Uuc2V0UGFyZW50Q29tcG9uZW50KHRoaXMpO1xuICAgIHRoaXMuZXhwb3J0T3B0aW9ucyA9IHRoaXMuZGV0YWlsUGFnZVNlcnZpY2UuZGV0YWlsUGFnZUV4cG9ydE9wdGlvbnMoKTtcbiAgICB0aGlzLmlzVGFiYmVkQ29udGVudCA9IHRoaXMucm91dGUuc25hcHNob3QuZGF0YVsnaXNUYWJiZWRDb250ZW50J107XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWREYXRhKCk7XG4gIH1cblxuICBsb2FkRGF0YSgpIHtcbiAgICB0aGlzLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUocGFyYW1zID0+IHtcbiAgICAgIHRoaXMuaWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtc1snaWQnXTtcblxuICAgICAgdGhpcy5jb250ZW50JCA9IHRoaXMuZGV0YWlsUGFnZVNlcnZpY2UuZ2V0KHRoaXMuaWQpLnBpcGUoXG4gICAgICAgIG1hcChyZXMgPT4ge1xuICAgICAgICAgIHRoaXMuaGVhZGVyID0gcmVzLmhlYWRlcjtcbiAgICAgICAgICB0aGlzLmRldGFpbFBhZ2VTZXJ2aWNlLm9uRGV0YWlsQ29udGVudExvYWRlZChyZXMuY29udGVudCk7XG5cbiAgICAgICAgICByZXMuY29udGVudC5jb250YWluZXJzLmZvckVhY2goKGNvbnRhaW5lcjogRHluYW1pY0xheW91dENvbnRhaW5lcikgPT4ge1xuICAgICAgICAgICAgY29udGFpbmVyLnNlY3Rpb25zLmZvckVhY2goKHNlY3Rpb246IER5bmFtaWNMYXlvdXRTZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMubG9hZFNlY3Rpb25BY3Rpb25zKHNlY3Rpb24pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB0aGlzLmxvYWRBZGRpdGlvbmFsQnV0dG9ucyhyZXMuY29udGVudC5kYXRhKTtcbiAgICAgICAgICB0aGlzLmV4cG9ydE9wdGlvbnMgPSB0aGlzLmRldGFpbFBhZ2VTZXJ2aWNlLmRldGFpbFBhZ2VFeHBvcnRPcHRpb25zKHJlcy5jb250ZW50LmRhdGEpO1xuXG4gICAgICAgICAgcmV0dXJuIHJlcy5jb250ZW50O1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIGxvYWRTZWN0aW9uQWN0aW9ucyhzZWN0aW9uOiBEeW5hbWljTGF5b3V0U2VjdGlvbikge1xuICAgIGxldCBzZWN0aW9uQWN0aW9ucyA9IHRoaXMuZGV0YWlsUGFnZVNlcnZpY2UuZGV0YWlsUGFnZVNlY3Rpb25BY3Rpb25zKHNlY3Rpb24uc2x1ZyEpO1xuICAgIGlmIChzZWN0aW9uQWN0aW9ucy5sZW5ndGggPT0gMCkgcmV0dXJuO1xuXG4gICAgaWYgKHNlY3Rpb24ubGF5b3V0ID09ICd0YWJsZScpIHtcbiAgICAgIGxldCBhY3Rpb25zQ29sdW1uID0geyBoZWFkZXI6ICcnLCBhdHRyOiAndGFibGVfcm93X2FjdGlvbnMnLCB0eXBlOiAnYWN0aW9ucycsIG9wdGlvbnM6IHsgYWN0aW9uczogc2VjdGlvbkFjdGlvbnMgfSB9O1xuICAgICAgKHNlY3Rpb24gYXMgRHluYW1pY0xheW91dFRhYmxlU2VjdGlvbikuZWxlbWVudHMucHVzaChhY3Rpb25zQ29sdW1uKTtcbiAgICB9XG4gIH1cblxuICBsb2FkQWRkaXRpb25hbEJ1dHRvbnMocmVjb3JkOiBhbnkpIHtcbiAgICBsZXQgYWRkaXRpb25hbERldGFpbFBhZ2VCdXR0b25zID0gdGhpcy5kZXRhaWxQYWdlU2VydmljZS5hZGRpdGlvbmFsRGV0YWlsUGFnZUJ1dHRvbnMocmVjb3JkKTtcbiAgICB0aGlzLmJvdHRvbUxlZnRCdXR0b25zID0gYWRkaXRpb25hbERldGFpbFBhZ2VCdXR0b25zLmZpbHRlcihidXR0b24gPT4ge1xuICAgICAgcmV0dXJuIGJ1dHRvbi5wb3NpdGlvbiA9PSAnbGVmdCc7XG4gICAgfSk7XG4gICAgdGhpcy5ib3R0b21SaWdodEJ1dHRvbnMgPSBhZGRpdGlvbmFsRGV0YWlsUGFnZUJ1dHRvbnMuZmlsdGVyKGJ1dHRvbiA9PiB7XG4gICAgICByZXR1cm4gYnV0dG9uLnBvc2l0aW9uID09ICdyaWdodCc7XG4gICAgfSk7XG4gIH1cblxuICBvbkVkaXRDbGlja2VkKCk6IHZvaWQge1xuICAgIHRoaXMuZGV0YWlsUGFnZVNlcnZpY2Uub3BlbkZvcm0oeyBpZDogdGhpcy5pZCB9KTtcbiAgfVxuXG4gIG9uQmFja0NsaWNrZWQoKTogdm9pZCB7XG4gICAgdGhpcy5kZXRhaWxQYWdlU2VydmljZS5vcGVuTGlzdCgpO1xuICB9XG5cbiAgb25EZWxldGVDbGlja2VkKCk6IHZvaWQge1xuICAgIHRoaXMuZGV0YWlsUGFnZVNlcnZpY2UuZGVsZXRlKFxuICAgICAgdGhpcy5pZCxcbiAgICAgICgpID0+IHsgdGhpcy5pc0RlbGV0ZUluUHJvZ3Jlc3MgPSB0cnVlOyB9LFxuICAgICAgKHJlczogV2ViQXBpRGVsZXRlUmVzcG9uc2UpID0+IHsgdGhpcy5vbkRlbGV0ZVN1Y2Nlc3MocmVzKTsgfSxcbiAgICAgIChyZXM6IFdlYkFwaURlbGV0ZVJlc3BvbnNlKSA9PiB7IHRoaXMub25EZWxldGVGYWlsdXJlKHJlcyk7IH1cbiAgICApO1xuICB9XG5cbiAgb25EZWxldGVTdWNjZXNzKHJlczogV2ViQXBpRGVsZXRlUmVzcG9uc2UpOiB2b2lkIHtcbiAgICB0aGlzLmFubm91bmNlbWVudFNlcnZpY2Uuc3VjY2VzcygnRGVsZXRlIHN1Y2Nlc3NmdWwhJyk7XG4gICAgdGhpcy5iYWNrKCk7XG5cbiAgICB0aGlzLmlzRGVsZXRlSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICB9XG5cbiAgb25EZWxldGVGYWlsdXJlKHJlczogV2ViQXBpRGVsZXRlUmVzcG9uc2UpOiB2b2lkIHtcbiAgICB0aGlzLmFubm91bmNlbWVudFNlcnZpY2UuZXJyb3IoJ0RlbGV0ZSBmYWlsZWQhJyk7XG5cbiAgICB0aGlzLmlzRGVsZXRlSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICB9XG5cbiAgYmFjaygpIHtcbiAgICB0aGlzLmRldGFpbFBhZ2VTZXJ2aWNlLm9wZW5MaXN0KCk7XG4gIH1cblxufVxuIiwiPGRpdiBmeExheW91dD1cImNvbHVtblwiIGZ4TGF5b3V0QWxpZ249XCJzdHJldGNoXCIgY2xhc3M9XCJmdWxsLWhlaWdodC1taW5cIiBbbmdDbGFzc109XCJ7J3BhZ2UgZnVsbC1oZWlnaHQtb25seSB2ZXJ0aWNhbGx5LXNjcm9sbGFibGUnOiAhaXNUYWJiZWRDb250ZW50fVwiPlxuICA8ZGl2IGZ4RmxleD1cIjAgMCBhdXRvXCIgY2xhc3M9XCJwYWdlLWhlYWRlclwiPlxuICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwiY2VudGVyIHN0YXJ0XCIgZnhMYXlvdXRHYXA9XCIxNnB4XCI+XG4gICAgICA8ZGl2IGZ4RmxleD1cIjAgMCBhdXRvXCIgKm5nSWY9XCIhZGV0YWlsUGFnZVNlcnZpY2UuaGlkZUJhY2tCdXR0b25cIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJhY2stYnV0dG9uXCIgbWF0LW1pbmktZmFiIGNvbG9yPVwicHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25CYWNrQ2xpY2tlZCgpXCI+XG4gICAgICAgICAgPG1hdC1pY29uPmFycm93X2JhY2s8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGZ4RmxleD1cIjEgMSBhdXRvXCI+XG4gICAgICAgIDxtYW50bGUtY29udGVudC10aXRsZSAqbmdJZj1cImhlYWRlclwiIFt0aHVtYm5haWxdPVwiaGVhZGVyLnRodW1ibmFpbFwiIFt0aXRsZV09XCJoZWFkZXIudGl0bGVcIj48L21hbnRsZS1jb250ZW50LXRpdGxlPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgZnhGbGV4PVwiMCAwIGF1dG9cIiAqbmdJZj1cImRldGFpbFBhZ2VTZXJ2aWNlLnNob3dFZGl0QnV0dG9uICYmIGRldGFpbFBhZ2VTZXJ2aWNlLmNhbldyaXRlKClcIj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtbWluaS1mYWJcbiAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZWRpdC1idXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uRWRpdENsaWNrZWQoKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGV0YWlsUGFnZVNlcnZpY2UuaXNDb21taXRJblByb2dyZXNzXCI+XG4gICAgICAgICAgPG1hdC1pY29uPmVkaXQ8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGZ4RmxleD1cIjEgMCBhdXRvXCIgY2xhc3M9XCJtYWluLWNvbnRlbnRcIj5cbiAgICA8bWFudGxlLWR5bmFtaWMtZGV0YWlscyBbY29udGVudF09XCJjb250ZW50JCB8IGFzeW5jXCIgW2RldGFpbFBhZ2VTZXJ2aWNlXT1cImRldGFpbFBhZ2VTZXJ2aWNlXCI+PC9tYW50bGUtZHluYW1pYy1kZXRhaWxzPlxuICA8L2Rpdj5cblxuICA8ZGl2IGZ4RmxleD1cIjAgMCBhdXRvXCIgY2xhc3M9XCJwYWdlLWZvb3RlclwiPlxuICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiIGZ4TGF5b3V0R2FwPVwiMTZweFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGJvdHRvbUxlZnRCdXR0b25zXCI+XG4gICAgICAgIDxkaXYgZnhGbGV4PVwiMCAwIGF1dG9cIiAqbmdJZj1cImJ1dHRvbi5zaG93XCI+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj1cInt7IGJ1dHRvbi5jb2xvciB9fVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImFkZGl0aW9uYWwtYnV0dG9uXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaW4tcHJvZ3Jlc3MtYnV0dG9uJzogYnV0dG9uLmlzSW5Qcm9ncmVzcygpIH1cIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGV0YWlsUGFnZVNlcnZpY2UuaXNDb21taXRJblByb2dyZXNzIHx8IGJ1dHRvbi5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJidXR0b24ub25DbGljayhpZClcIj5cbiAgICAgICAgICAgIHt7IGJ1dHRvbi5sYWJlbCB9fVxuICAgICAgICAgICAgPG1hdC1zcGlubmVyICpuZ0lmPVwiYnV0dG9uLmlzSW5Qcm9ncmVzcygpXCIgbWF0U3VmZml4IFtkaWFtZXRlcl09XCIxNlwiPjwvbWF0LXNwaW5uZXI+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250ZW50JCB8IGFzeW5jIGFzIGNvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBmeEZsZXg9XCIwIDAgYXV0b1wiICpuZ0Zvcj1cImxldCBleHBvcnRPcHRpb24gb2YgZXhwb3J0T3B0aW9uc1wiPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCIoZXhwb3J0T3B0aW9uLnNob3cgPT0gbnVsbCkgfHwgKGV4cG9ydE9wdGlvbi5zaG93KVwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImV4cG9ydC1idXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiZXhwb3J0T3B0aW9uLmV4cG9ydChjb250ZW50LmRhdGEpLnN1YnNjcmliZSgpXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRldGFpbFBhZ2VTZXJ2aWNlLmlzQ29tbWl0SW5Qcm9ncmVzc1wiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImV4cG9ydC1idXR0b24tbGFiZWxcIj57eyBleHBvcnRPcHRpb24ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5kb3dubG9hZDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPGRpdiBmeEZsZXg9XCIxIDEgYXV0b1wiPjwvZGl2PlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBidXR0b24gb2YgYm90dG9tUmlnaHRCdXR0b25zXCI+XG4gICAgICAgIDxkaXYgZnhGbGV4PVwiMCAwIGF1dG9cIiAqbmdJZj1cImJ1dHRvbi5zaG93XCI+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj1cInt7IGJ1dHRvbi5jb2xvciB9fVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImFkZGl0aW9uYWwtYnV0dG9uXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaW4tcHJvZ3Jlc3MtYnV0dG9uJzogYnV0dG9uLmlzSW5Qcm9ncmVzcygpIH1cIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGV0YWlsUGFnZVNlcnZpY2UuaXNDb21taXRJblByb2dyZXNzIHx8IGJ1dHRvbi5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJidXR0b24ub25DbGljayhpZClcIj5cbiAgICAgICAgICAgIHt7IGJ1dHRvbi5sYWJlbCB9fVxuICAgICAgICAgICAgPG1hdC1zcGlubmVyICpuZ0lmPVwiYnV0dG9uLmlzSW5Qcm9ncmVzcygpXCIgbWF0U3VmZml4IFtkaWFtZXRlcl09XCIxNlwiPjwvbWF0LXNwaW5uZXI+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxkaXYgZnhGbGV4PVwiMCAwIGF1dG9cIiAqbmdJZj1cImRldGFpbFBhZ2VTZXJ2aWNlLnNob3dEZWxldGVCdXR0b24gJiYgZGV0YWlsUGFnZVNlcnZpY2UuY2FuV3JpdGUoKVwiPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPVwid2FyblwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZGVsZXRlLWJ1dHRvblwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpbi1wcm9ncmVzcy1idXR0b24nOiBpc0RlbGV0ZUluUHJvZ3Jlc3MgfVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGV0YWlsUGFnZVNlcnZpY2UuaXNDb21taXRJblByb2dyZXNzXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkRlbGV0ZUNsaWNrZWQoKVwiPlxuICAgICAgICAgIERlbGV0ZSB7eyBkZXRhaWxQYWdlU2VydmljZS5ub3VuKCkgfX1cbiAgICAgICAgICA8bWF0LXNwaW5uZXIgKm5nSWY9XCJpc0RlbGV0ZUluUHJvZ3Jlc3NcIiBtYXRTdWZmaXggW2RpYW1ldGVyXT1cIjE2XCI+PC9tYXQtc3Bpbm5lcj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,109 @@
1
+ import { Component, ViewChild, Injector } from '@angular/core';
2
+ import { ActivatedRoute } from '@angular/router';
3
+ import { MatPaginator } from '@angular/material/paginator';
4
+ import { MatSort } from '@angular/material/sort';
5
+ import { MatTable } from '@angular/material/table';
6
+ import { SearchPanelComponent } from '../../../components/widgets/search-panel/search-panel.component';
7
+ import { ListPageDataSource } from '../../../components/pages/list-page/list-page-datasource';
8
+ import { AnnouncementService } from '../../../services/announcement.service';
9
+ import { WebApiService } from '../../../services/web-api.service';
10
+ import { ScreenSizeService } from '../../../services/screen-size.service';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "@angular/router";
13
+ import * as i2 from "../../../services/announcement.service";
14
+ import * as i3 from "../../../services/web-api.service";
15
+ import * as i4 from "../../../services/screen-size.service";
16
+ import * as i5 from "../../titles/page-title/page-title.component";
17
+ import * as i6 from "@angular/material/sidenav";
18
+ import * as i7 from "@angular/material/button";
19
+ import * as i8 from "../../widgets/search-panel/search-panel.component";
20
+ import * as i9 from "@angular/material/icon";
21
+ import * as i10 from "../../widgets/loader/loader.component";
22
+ import * as i11 from "@angular/material/table";
23
+ import * as i12 from "@angular/material/sort";
24
+ import * as i13 from "../../details/fields/dynamic-attribute-display/dynamic-attribute-display.component";
25
+ import * as i14 from "@angular/material/paginator";
26
+ import * as i15 from "@angular/flex-layout/flex";
27
+ import * as i16 from "@angular/common";
28
+ import * as i17 from "@angular/flex-layout/extended";
29
+ import * as i18 from "../../../directives/file-dropzone.directive";
30
+ export class DocumentsPageComponent {
31
+ constructor(route, injector, announcementService, webApiService, screenSizeService) {
32
+ this.route = route;
33
+ this.injector = injector;
34
+ this.announcementService = announcementService;
35
+ this.webApiService = webApiService;
36
+ this.screenSizeService = screenSizeService;
37
+ this.isTabbedContent = false;
38
+ this.uploadInProgress = false;
39
+ this.isActionPanelOpen = false;
40
+ this.isSmallScreen = false;
41
+ const listPageServiceInjectionToken = this.route.snapshot.data['listPageService'];
42
+ this.listPageService = this.injector.get(listPageServiceInjectionToken);
43
+ this.listPageService.prepare(this.route);
44
+ this.dataSource = new ListPageDataSource(this.listPageService);
45
+ this.displayedColumns = this.listPageService.listColumns();
46
+ this.displayedColumnAttrs = this.displayedColumns.map(a => a.attr);
47
+ this.exportOptions = this.listPageService.listPageExportOptions();
48
+ this.withClickableRows = this.listPageService.withClickableRows;
49
+ this.isTabbedContent = this.route.snapshot.data['isTabbedContent'];
50
+ this.pageTitle = this.route.snapshot.data['pageTitle'];
51
+ this.screenSizeService.screenSize.subscribe((screenSize) => {
52
+ this.isSmallScreen = screenSize == 'xs' || screenSize == 'sm';
53
+ this.isActionPanelOpen = !this.isSmallScreen;
54
+ });
55
+ }
56
+ ngAfterViewInit() {
57
+ this.dataSource.sort = this.sort;
58
+ this.dataSource.paginator = this.paginator;
59
+ this.dataSource.searchPanel = this.searchPanel;
60
+ this.table.dataSource = this.dataSource;
61
+ }
62
+ onRecordClicked(record) {
63
+ if (!this.withClickableRows)
64
+ return;
65
+ this.listPageService.openRecord(record);
66
+ }
67
+ onAddClicked() {
68
+ this.listPageService.openForm();
69
+ }
70
+ onFileDropped(file) {
71
+ this.uploadInProgress = true;
72
+ this.webApiService.upload(file, (response) => {
73
+ let document = {
74
+ filename: file.name,
75
+ source_url: '',
76
+ preview_url: '',
77
+ signed_id: response.signed_id
78
+ };
79
+ this.listPageService.openForm({}, { document: document });
80
+ this.uploadInProgress = false;
81
+ }, (response) => {
82
+ this.announcementService.error('Unable to upload file');
83
+ this.uploadInProgress = false;
84
+ });
85
+ }
86
+ }
87
+ DocumentsPageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DocumentsPageComponent, deps: [{ token: i1.ActivatedRoute }, { token: i0.Injector }, { token: i2.AnnouncementService }, { token: i3.WebApiService }, { token: i4.ScreenSizeService }], target: i0.ɵɵFactoryTarget.Component });
88
+ DocumentsPageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: DocumentsPageComponent, selector: "mantle-documents-page", viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }, { propertyName: "table", first: true, predicate: MatTable, descendants: true }, { propertyName: "searchPanel", first: true, predicate: SearchPanelComponent, descendants: true }], ngImport: i0, template: "<div fxLayout=\"column\" fxLayoutAlign=\"stretch\" fxLayoutGap=\"16px\" class=\"list-page full-height-only\" [ngClass]=\"{'page': !isTabbedContent}\">\n\n <div fxFlex=\"0 0 auto\" *ngIf=\"!isTabbedContent\">\n <mantle-page-title>{{ pageTitle }}</mantle-page-title>\n </div>\n\n <div fxFlex=\"1 0 1px\">\n <mat-drawer-container class=\"full-height-only\" [hasBackdrop]=\"isSmallScreen\">\n <mat-drawer #drawer\n [mode]=\"isSmallScreen ? 'over' : 'side'\"\n [position]=\"isSmallScreen ? 'end' : 'start'\"\n [opened]=\"isActionPanelOpen\"\n [disableClose]=\"!isSmallScreen\"\n (closedStart)=\"isActionPanelOpen = false\"\n (openedStart)=\"isActionPanelOpen = true\">\n\n <button *ngIf=\"listPageService.showAddButton && listPageService.canWrite()\"\n mat-raised-button\n color=\"accent\"\n type=\"button\"\n class=\"add-button\"\n (click)=\"onAddClicked()\">\n + New {{ listPageService?.noun() }}\n </button>\n\n <div class=\"search-section\">\n <mantle-search-panel #searchPanel\n [searchFields]=\"listPageService.searchFields()\">\n </mantle-search-panel>\n </div>\n\n <ng-container *ngFor=\"let exportOption of exportOptions\">\n <button mat-button type=\"button\" class=\"export-button\" (click)=\"exportOption.export(searchPanel.searchParams).subscribe()\">\n <span class=\"export-button-label\">{{ exportOption.label }}</span>\n <mat-icon>download</mat-icon>\n </button>\n </ng-container>\n\n </mat-drawer>\n\n <div fxLayout=\"column\" fxLayoutAlign=\"stretch\" class=\"main-content full-height-only\"\n file-dropzone (fileDropped)=\"onFileDropped($event[0])\" [class.uploading]=\"uploadInProgress\">\n\n <div *ngIf=\"uploadInProgress\" class=\"uploading-indicator-overlay\">\n <div class=\"uploading-indicator\">Uploading...</div>\n <mantle-loader></mantle-loader>\n </div>\n\n <div fxFlex=\"1 0 1px\" class=\"vertically-scrollable\">\n <table mat-table class=\"full-width horizontal-scroll-table\" matSort>\n\n <ng-container *ngFor=\"let column of displayedColumns\">\n <ng-container matColumnDef=\"{{ column.attr }}\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>{{ column.header }}</th>\n <td mat-cell *matCellDef=\"let row\">\n <mantle-dynamic-attribute-display\n [fieldType]=\"column.type\"\n [value]=\"row[column.attr]\">\n </mantle-dynamic-attribute-display>\n </td>\n </ng-container>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumnAttrs\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumnAttrs;\"\n (click)=\"onRecordClicked(row)\"\n [class.clickable-row]=\"withClickableRows\">\n </tr>\n </table>\n </div>\n\n <mat-paginator #paginator\n fxFlex=\"0 0 auto\"\n [length]=\"0\"\n [pageIndex]=\"0\"\n [pageSize]=\"10\"\n [pageSizeOptions]=\"[10, 20, 50]\">\n </mat-paginator>\n\n </div>\n\n </mat-drawer-container>\n </div>\n\n <div fxFlex=\"0 0 auto\" *ngIf=\"isSmallScreen\">\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\" fxLayoutGap=\"16px\">\n\n <button *ngIf=\"isActionPanelOpen\" type=\"button\" mat-button (click)=\"drawer.toggle()\">\n <ng-container *ngIf=\"isActionPanelOpen\">\n Close Actions<mat-icon>chevron_right</mat-icon>\n </ng-container>\n </button>\n\n <div fxFlex=\"1 1 auto\"></div>\n\n <button *ngIf=\"!isActionPanelOpen\" type=\"button\" mat-button (click)=\"drawer.toggle()\">\n <ng-container>\n <mat-icon>chevron_left</mat-icon> Open Actions\n </ng-container>\n </button>\n\n </div>\n </div>\n</div>\n", styles: [".main-content{padding-top:0;padding-bottom:0}.mat-drawer{padding:0 16px 0 0}.mat-drawer .add-button{display:block;width:100%;text-transform:uppercase;border-radius:0;margin:16px 0 0}.mat-drawer-end{padding:0 16px}.search-section{margin:16px 0 0}.export-button{display:block;width:144px;background-color:transparent;white-space:nowrap;padding:0;margin:16px 0 16px auto}.export-button .export-button-label{display:inline-block;width:100px;white-space:normal;text-align:right;text-transform:uppercase;font-weight:normal;line-height:1.25rem;margin-right:.25rem}.export-button .mat-icon{height:auto;width:auto;font-size:2.5rem}.toggle-collapsible-columns-button{width:200px;text-transform:uppercase}.toggle-collapsible-columns-button .mat-icon{font-size:1.2rem}.collapsible-column-left{border-left:1px solid lightgray}.collapsible-column-right{border-right:1px solid lightgray}th.collapsible-column{border-top:1px solid lightgray}th.collapsible-column-left{border-radius:2px 0 0}th.collapsible-column-right{border-radius:0 2px 0 0}\n"], components: [{ type: i5.PageTitleComponent, selector: "mantle-page-title" }, { type: i6.MatDrawerContainer, selector: "mat-drawer-container", inputs: ["autosize", "hasBackdrop"], outputs: ["backdropClick"], exportAs: ["matDrawerContainer"] }, { type: i6.MatDrawer, selector: "mat-drawer", inputs: ["position", "mode", "disableClose", "autoFocus", "opened"], outputs: ["openedChange", "opened", "openedStart", "closed", "closedStart", "positionChanged"], exportAs: ["matDrawer"] }, { type: i7.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i8.SearchPanelComponent, selector: "mantle-search-panel", inputs: ["searchFields"], outputs: ["search"] }, { type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i10.LoaderComponent, selector: "mantle-loader", inputs: ["delay"] }, { type: i11.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: i12.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "arrowPosition", "sortActionDescription", "disableClear", "mat-sort-header", "start"], exportAs: ["matSortHeader"] }, { type: i13.DynamicAttributeDisplayComponent, selector: "mantle-dynamic-attribute-display", inputs: ["value", "field", "fieldType", "options"] }, { type: i11.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i11.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { type: i14.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }], directives: [{ type: i15.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i15.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i15.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { type: i16.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i17.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { type: i16.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i15.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i16.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i18.FileDropzoneDirective, selector: "[file-dropzone]", outputs: ["fileDropped"] }, { type: i12.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortActive"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { type: i11.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i11.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i11.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i11.MatCellDef, selector: "[matCellDef]" }, { type: i11.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: i11.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i11.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }] });
89
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DocumentsPageComponent, decorators: [{
90
+ type: Component,
91
+ args: [{
92
+ selector: 'mantle-documents-page',
93
+ templateUrl: './documents-page.component.html',
94
+ styleUrls: ['../list-page/list-page.component.scss']
95
+ }]
96
+ }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i0.Injector }, { type: i2.AnnouncementService }, { type: i3.WebApiService }, { type: i4.ScreenSizeService }]; }, propDecorators: { paginator: [{
97
+ type: ViewChild,
98
+ args: [MatPaginator]
99
+ }], sort: [{
100
+ type: ViewChild,
101
+ args: [MatSort]
102
+ }], table: [{
103
+ type: ViewChild,
104
+ args: [MatTable]
105
+ }], searchPanel: [{
106
+ type: ViewChild,
107
+ args: [SearchPanelComponent]
108
+ }] } });
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnRzLXBhZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWFudGxlL3NyYy9saWIvY29tcG9uZW50cy9wYWdlcy9kb2N1bWVudHMtcGFnZS9kb2N1bWVudHMtcGFnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYW50bGUvc3JjL2xpYi9jb21wb25lbnRzL3BhZ2VzL2RvY3VtZW50cy1wYWdlL2RvY3VtZW50cy1wYWdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlFQUFpRSxDQUFDO0FBRXZHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPMUUsTUFBTSxPQUFPLHNCQUFzQjtJQW1CakMsWUFBb0IsS0FBcUIsRUFBVSxRQUFrQixFQUNqRCxtQkFBd0MsRUFBVSxhQUE0QixFQUM5RSxpQkFBb0M7UUFGcEMsVUFBSyxHQUFMLEtB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Q25CLFVBQVUsRUFBRSxFQUFFO2dCQUNkLFdBQVcsRUFBRSxFQUFFO2dCQUNmLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUzthQUM5QixDQUFBO1lBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDMUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUNoQyxDQUFDLEVBQ0QsQ0FBQyxRQUFhLEVBQUUsRUFBRTtZQUNoQixJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7WUFDeEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUNoQyxDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7O29IQTVFVSxzQkFBc0I7d0dBQXRCLHNCQUFzQix3R0FDdEIsWUFBWSx1RUFDWixPQUFPLHdFQUNQLFFBQVEsOEVBQ1Isb0JBQW9CLGdEQ3JCakMsd2hJQXdHQTs0RkR2RmEsc0JBQXNCO2tCQUxsQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx1QkFBdUI7b0JBQ2pDLFdBQVcsRUFBRSxpQ0FBaUM7b0JBQzlDLFNBQVMsRUFBRSxDQUFDLHVDQUF1QyxDQUFDO2lCQUNyRDswTkFFMEIsU0FBUztzQkFBakMsU0FBUzt1QkFBQyxZQUFZO2dCQUNILElBQUk7c0JBQXZCLFNBQVM7dUJBQUMsT0FBTztnQkFDRyxLQUFLO3NCQUF6QixTQUFTO3VCQUFDLFFBQVE7Z0JBQ2MsV0FBVztzQkFBM0MsU0FBUzt1QkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIFZpZXdDaGlsZCwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IE1hdFBhZ2luYXRvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XG5pbXBvcnQgeyBNYXRTb3J0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5pbXBvcnQgeyBNYXRUYWJsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IFNlYXJjaFBhbmVsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy93aWRnZXRzL3NlYXJjaC1wYW5lbC9zZWFyY2gtcGFuZWwuY29tcG9uZW50JztcbmltcG9ydCB7IExpc3RQYWdlU2VydmljZSwgTGlzdFBhZ2VDb2x1bW4sIExpc3RQYWdlRXhwb3J0T3B0aW9uIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaW50ZXJmYWNlcy9saXN0LXBhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBMaXN0UGFnZURhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL3BhZ2VzL2xpc3QtcGFnZS9saXN0LXBhZ2UtZGF0YXNvdXJjZSc7XG5pbXBvcnQgeyBBbm5vdW5jZW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYW5ub3VuY2VtZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgV2ViQXBpU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3dlYi1hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBTY3JlZW5TaXplU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3NjcmVlbi1zaXplLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtYW50bGUtZG9jdW1lbnRzLXBhZ2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vZG9jdW1lbnRzLXBhZ2UuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi4vbGlzdC1wYWdlL2xpc3QtcGFnZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIERvY3VtZW50c1BhZ2VDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IpIHBhZ2luYXRvciE6IE1hdFBhZ2luYXRvcjtcbiAgQFZpZXdDaGlsZChNYXRTb3J0KSBzb3J0ITogTWF0U29ydDtcbiAgQFZpZXdDaGlsZChNYXRUYWJsZSkgdGFibGUhOiBNYXRUYWJsZTxhbnk+O1xuICBAVmlld0NoaWxkKFNlYXJjaFBhbmVsQ29tcG9uZW50KSBzZWFyY2hQYW5lbCE6IFNlYXJjaFBhbmVsQ29tcG9uZW50O1xuXG4gIHB1YmxpYyBsaXN0UGFnZVNlcnZpY2U6IExpc3RQYWdlU2VydmljZTtcbiAgcHVibGljIGRhdGFTb3VyY2U6IExpc3RQYWdlRGF0YVNvdXJjZTtcbiAgcHVibGljIGRpc3BsYXllZENvbHVtbnMhOiBMaXN0UGFnZUNvbHVtbltdO1xuICBwdWJsaWMgZGlzcGxheWVkQ29sdW1uQXR0cnMhOiBzdHJpbmdbXTtcbiAgcHVibGljIGV4cG9ydE9wdGlvbnMhOiBMaXN0UGFnZUV4cG9ydE9wdGlvbltdO1xuICBwdWJsaWMgd2l0aENsaWNrYWJsZVJvd3MhOiBib29sZWFuO1xuICBwdWJsaWMgaXNUYWJiZWRDb250ZW50OiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBwYWdlVGl0bGU6IHN0cmluZztcbiAgcHVibGljIHVwbG9hZEluUHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwdWJsaWMgaXNBY3Rpb25QYW5lbE9wZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGlzU21hbGxTY3JlZW46IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSwgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgICAgICAgIHByaXZhdGUgYW5ub3VuY2VtZW50U2VydmljZTogQW5ub3VuY2VtZW50U2VydmljZSwgcHJpdmF0ZSB3ZWJBcGlTZXJ2aWNlOiBXZWJBcGlTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIHNjcmVlblNpemVTZXJ2aWNlOiBTY3JlZW5TaXplU2VydmljZSkge1xuICAgIGNvbnN0IGxpc3RQYWdlU2VydmljZUluamVjdGlvblRva2VuID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhWydsaXN0UGFnZVNlcnZpY2UnXTtcbiAgICB0aGlzLmxpc3RQYWdlU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0PExpc3RQYWdlU2VydmljZT4obGlzdFBhZ2VTZXJ2aWNlSW5qZWN0aW9uVG9rZW4pO1xuXG4gICAgdGhpcy5saXN0UGFnZVNlcnZpY2UucHJlcGFyZSh0aGlzLnJvdXRlKTtcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTGlzdFBhZ2VEYXRhU291cmNlKHRoaXMubGlzdFBhZ2VTZXJ2aWNlKTtcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSB0aGlzLmxpc3RQYWdlU2VydmljZS5saXN0Q29sdW1ucygpO1xuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1uQXR0cnMgPSB0aGlzLmRpc3BsYXllZENvbHVtbnMubWFwKGEgPT4gYS5hdHRyKTtcbiAgICB0aGlzLmV4cG9ydE9wdGlvbnMgPSB0aGlzLmxpc3RQYWdlU2VydmljZS5saXN0UGFnZUV4cG9ydE9wdGlvbnMoKTtcbiAgICB0aGlzLndpdGhDbGlja2FibGVSb3dzID0gdGhpcy5saXN0UGFnZVNlcnZpY2Uud2l0aENsaWNrYWJsZVJvd3M7XG4gICAgdGhpcy5pc1RhYmJlZENvbnRlbnQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGFbJ2lzVGFiYmVkQ29udGVudCddO1xuICAgIHRoaXMucGFnZVRpdGxlID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhWydwYWdlVGl0bGUnXTtcblxuICAgIHRoaXMuc2NyZWVuU2l6ZVNlcnZpY2Uuc2NyZWVuU2l6ZS5zdWJzY3JpYmUoKHNjcmVlblNpemU6IGFueSkgPT4ge1xuICAgICAgdGhpcy5pc1NtYWxsU2NyZWVuID0gc2NyZWVuU2l6ZSA9PSAneHMnIHx8IHNjcmVlblNpemUgPT0gJ3NtJztcbiAgICAgIHRoaXMuaXNBY3Rpb25QYW5lbE9wZW4gPSAhdGhpcy5pc1NtYWxsU2NyZWVuO1xuICAgIH0pO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0ID0gdGhpcy5zb3J0O1xuICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLnBhZ2luYXRvcjtcbiAgICB0aGlzLmRhdGFTb3VyY2Uuc2VhcmNoUGFuZWwgPSB0aGlzLnNlYXJjaFBhbmVsO1xuICAgIHRoaXMudGFibGUuZGF0YVNvdXJjZSA9IHRoaXMuZGF0YVNvdXJjZTtcbiAgfVxuXG4gIG9uUmVjb3JkQ2xpY2tlZChyZWNvcmQ6IGFueSkge1xuICAgIGlmICghdGhpcy53aXRoQ2xpY2thYmxlUm93cykgcmV0dXJuO1xuXG4gICAgdGhpcy5saXN0UGFnZVNlcnZpY2Uub3BlblJlY29yZChyZWNvcmQpO1xuICB9XG5cbiAgb25BZGRDbGlja2VkKCkge1xuICAgIHRoaXMubGlzdFBhZ2VTZXJ2aWNlLm9wZW5Gb3JtKCk7XG4gIH1cblxuICBvbkZpbGVEcm9wcGVkKGZpbGU6IEZpbGUpIHtcbiAgICB0aGlzLnVwbG9hZEluUHJvZ3Jlc3MgPSB0cnVlO1xuXG4gICAgdGhpcy53ZWJBcGlTZXJ2aWNlLnVwbG9hZChmaWxlLFxuICAgICAgKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgbGV0IGRvY3VtZW50ID0ge1xuICAgICAgICAgIGZpbGVuYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgICAgc291cmNlX3VybDogJycsXG4gICAgICAgICAgcHJldmlld191cmw6ICcnLFxuICAgICAgICAgIHNpZ25lZF9pZDogcmVzcG9uc2Uuc2lnbmVkX2lkXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5saXN0UGFnZVNlcnZpY2Uub3BlbkZvcm0oe30sIHsgZG9jdW1lbnQ6IGRvY3VtZW50IH0pO1xuICAgICAgICB0aGlzLnVwbG9hZEluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgICAocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmFubm91bmNlbWVudFNlcnZpY2UuZXJyb3IoJ1VuYWJsZSB0byB1cGxvYWQgZmlsZScpO1xuICAgICAgICB0aGlzLnVwbG9hZEluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgIH1cbiAgICApO1xuICB9XG59XG4iLCI8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhMYXlvdXRBbGlnbj1cInN0cmV0Y2hcIiBmeExheW91dEdhcD1cIjE2cHhcIiBjbGFzcz1cImxpc3QtcGFnZSBmdWxsLWhlaWdodC1vbmx5XCIgW25nQ2xhc3NdPVwieydwYWdlJzogIWlzVGFiYmVkQ29udGVudH1cIj5cblxuICA8ZGl2IGZ4RmxleD1cIjAgMCBhdXRvXCIgKm5nSWY9XCIhaXNUYWJiZWRDb250ZW50XCI+XG4gICAgPG1hbnRsZS1wYWdlLXRpdGxlPnt7IHBhZ2VUaXRsZSB9fTwvbWFudGxlLXBhZ2UtdGl0bGU+XG4gIDwvZGl2PlxuXG4gIDxkaXYgZnhGbGV4PVwiMSAwIDFweFwiPlxuICAgIDxtYXQtZHJhd2VyLWNvbnRhaW5lciBjbGFzcz1cImZ1bGwtaGVpZ2h0LW9ubHlcIiBbaGFzQmFja2Ryb3BdPVwiaXNTbWFsbFNjcmVlblwiPlxuICAgICAgPG1hdC1kcmF3ZXIgI2RyYXdlclxuICAgICAgICAgIFttb2RlXT1cImlzU21hbGxTY3JlZW4gPyAnb3ZlcicgOiAnc2lkZSdcIlxuICAgICAgICAgIFtwb3NpdGlvbl09XCJpc1NtYWxsU2NyZWVuID8gJ2VuZCcgOiAnc3RhcnQnXCJcbiAgICAgICAgICBbb3BlbmVkXT1cImlzQWN0aW9uUGFuZWxPcGVuXCJcbiAgICAgICAgICBbZGlzYWJsZUNsb3NlXT1cIiFpc1NtYWxsU2NyZWVuXCJcbiAgICAgICAgICAoY2xvc2VkU3RhcnQpPVwiaXNBY3Rpb25QYW5lbE9wZW4gPSBmYWxzZVwiXG4gICAgICAgICAgKG9wZW5lZFN0YXJ0KT1cImlzQWN0aW9uUGFuZWxPcGVuID0gdHJ1ZVwiPlxuXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJsaXN0UGFnZVNlcnZpY2Uuc2hvd0FkZEJ1dHRvbiAmJiBsaXN0UGFnZVNlcnZpY2UuY2FuV3JpdGUoKVwiXG4gICAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9XCJhY2NlbnRcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cImFkZC1idXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uQWRkQ2xpY2tlZCgpXCI+XG4gICAgICAgICAgKyBOZXcge3sgbGlzdFBhZ2VTZXJ2aWNlPy5ub3VuKCkgfX1cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1zZWN0aW9uXCI+XG4gICAgICAgICAgPG1hbnRsZS1zZWFyY2gtcGFuZWwgI3NlYXJjaFBhbmVsXG4gICAgICAgICAgICAgIFtzZWFyY2hGaWVsZHNdPVwibGlzdFBhZ2VTZXJ2aWNlLnNlYXJjaEZpZWxkcygpXCI+XG4gICAgICAgICAgPC9tYW50bGUtc2VhcmNoLXBhbmVsPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBleHBvcnRPcHRpb24gb2YgZXhwb3J0T3B0aW9uc1wiPlxuICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJleHBvcnQtYnV0dG9uXCIgKGNsaWNrKT1cImV4cG9ydE9wdGlvbi5leHBvcnQoc2VhcmNoUGFuZWwuc2VhcmNoUGFyYW1zKS5zdWJzY3JpYmUoKVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJleHBvcnQtYnV0dG9uLWxhYmVsXCI+e3sgZXhwb3J0T3B0aW9uLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgPG1hdC1pY29uPmRvd25sb2FkPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwvbWF0LWRyYXdlcj5cblxuICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiIGZ4TGF5b3V0QWxpZ249XCJzdHJldGNoXCIgY2xhc3M9XCJtYWluLWNvbnRlbnQgZnVsbC1oZWlnaHQtb25seVwiXG4gICAgICAgICAgZmlsZS1kcm9wem9uZSAoZmlsZURyb3BwZWQpPVwib25GaWxlRHJvcHBlZCgkZXZlbnRbMF0pXCIgW2NsYXNzLnVwbG9hZGluZ109XCJ1cGxvYWRJblByb2dyZXNzXCI+XG5cbiAgICAgICAgPGRpdiAqbmdJZj1cInVwbG9hZEluUHJvZ3Jlc3NcIiBjbGFzcz1cInVwbG9hZGluZy1pbmRpY2F0b3Itb3ZlcmxheVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWRpbmctaW5kaWNhdG9yXCI+VXBsb2FkaW5nLi4uPC9kaXY+XG4gICAgICAgICAgPG1hbnRsZS1sb2FkZXI+PC9tYW50bGUtbG9hZGVyPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGZ4RmxleD1cIjEgMCAxcHhcIiBjbGFzcz1cInZlcnRpY2FsbHktc2Nyb2xsYWJsZVwiPlxuICAgICAgICAgIDx0YWJsZSBtYXQtdGFibGUgY2xhc3M9XCJmdWxsLXdpZHRoIGhvcml6b250YWwtc2Nyb2xsLXRhYmxlXCIgbWF0U29ydD5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGRpc3BsYXllZENvbHVtbnNcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJ7eyBjb2x1bW4uYXR0ciB9fVwiPlxuICAgICAgICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPnt7IGNvbHVtbi5oZWFkZXIgfX08L3RoPlxuICAgICAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIj5cbiAgICAgICAgICAgICAgICAgIDxtYW50bGUtZHluYW1pYy1hdHRyaWJ1dGUtZGlzcGxheVxuICAgICAgICAgICAgICAgICAgICAgIFtmaWVsZFR5cGVdPVwiY29sdW1uLnR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJyb3dbY29sdW1uLmF0dHJdXCI+XG4gICAgICAgICAgICAgICAgICA8L21hbnRsZS1keW5hbWljLWF0dHJpYnV0ZS1kaXNwbGF5PlxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uQXR0cnNcIj48L3RyPlxuICAgICAgICAgICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbkF0dHJzO1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUmVjb3JkQ2xpY2tlZChyb3cpXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuY2xpY2thYmxlLXJvd109XCJ3aXRoQ2xpY2thYmxlUm93c1wiPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bWF0LXBhZ2luYXRvciAjcGFnaW5hdG9yXG4gICAgICAgICAgICBmeEZsZXg9XCIwIDAgYXV0b1wiXG4gICAgICAgICAgICBbbGVuZ3RoXT1cIjBcIlxuICAgICAgICAgICAgW3BhZ2VJbmRleF09XCIwXCJcbiAgICAgICAgICAgIFtwYWdlU2l6ZV09XCIxMFwiXG4gICAgICAgICAgICBbcGFnZVNpemVPcHRpb25zXT1cIlsxMCwgMjAsIDUwXVwiPlxuICAgICAgICA8L21hdC1wYWdpbmF0b3I+XG5cbiAgICAgIDwvZGl2PlxuXG4gICAgPC9tYXQtZHJhd2VyLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBmeEZsZXg9XCIwIDAgYXV0b1wiICpuZ0lmPVwiaXNTbWFsbFNjcmVlblwiPlxuICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiIGZ4TGF5b3V0R2FwPVwiMTZweFwiPlxuXG4gICAgICA8YnV0dG9uICpuZ0lmPVwiaXNBY3Rpb25QYW5lbE9wZW5cIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWJ1dHRvbiAoY2xpY2spPVwiZHJhd2VyLnRvZ2dsZSgpXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0FjdGlvblBhbmVsT3BlblwiPlxuICAgICAgICAgIENsb3NlIEFjdGlvbnM8bWF0LWljb24+Y2hldnJvbl9yaWdodDwvbWF0LWljb24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDxkaXYgZnhGbGV4PVwiMSAxIGF1dG9cIj48L2Rpdj5cblxuICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFpc0FjdGlvblBhbmVsT3BlblwiIHR5cGU9XCJidXR0b25cIiBtYXQtYnV0dG9uIChjbGljayk9XCJkcmF3ZXIudG9nZ2xlKClcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bWF0LWljb24+Y2hldnJvbl9sZWZ0PC9tYXQtaWNvbj4gT3BlbiBBY3Rpb25zXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9idXR0b24+XG5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,65 @@
1
+ import { ChangeDetectorRef, Component, Injector, ViewChild } from '@angular/core';
2
+ import { ActivatedRoute } from '@angular/router';
3
+ import { map } from 'rxjs/operators';
4
+ import { AnnouncementService } from '../../../services/announcement.service';
5
+ import { DynamicFormComponent } from '../../../components/form/dynamic-form/dynamic-form.component';
6
+ import { ObjectService } from '../../../services/object.service';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/router";
9
+ import * as i2 from "../../../services/announcement.service";
10
+ import * as i3 from "../../../services/object.service";
11
+ import * as i4 from "../../form/dynamic-form/dynamic-form.component";
12
+ import * as i5 from "@angular/material/button";
13
+ import * as i6 from "@angular/material/progress-spinner";
14
+ import * as i7 from "@angular/flex-layout/flex";
15
+ import * as i8 from "@angular/common";
16
+ import * as i9 from "@angular/flex-layout/extended";
17
+ import * as i10 from "@angular/material/form-field";
18
+ export class ExportPageComponent {
19
+ constructor(route, injector, changeDetectorRef, announcementService, objectService) {
20
+ this.route = route;
21
+ this.injector = injector;
22
+ this.changeDetectorRef = changeDetectorRef;
23
+ this.announcementService = announcementService;
24
+ this.objectService = objectService;
25
+ this.isTabbedContent = false;
26
+ const exportPageServiceInjectionToken = this.route.snapshot.data['exportPageService'];
27
+ this.exportPageService = this.injector.get(exportPageServiceInjectionToken);
28
+ this.isTabbedContent = this.route.snapshot.data['isTabbedContent'];
29
+ }
30
+ ngOnInit() {
31
+ this.content$ = this.exportPageService.getNew().pipe(map((res) => {
32
+ return res.content;
33
+ }));
34
+ }
35
+ ngAfterViewChecked() {
36
+ this.changeDetectorRef.detectChanges();
37
+ }
38
+ onExportClicked() {
39
+ this.isExportInProgress = true;
40
+ let params = this.dynamicForm.value;
41
+ this.objectService.removeEmptyAttributes(params);
42
+ this.exportPageService.export(params).subscribe(res => { this.onExportSuccess(res); }, res => { this.onExportFailure(res); });
43
+ }
44
+ onExportSuccess(res) {
45
+ this.isExportInProgress = false;
46
+ }
47
+ onExportFailure(res) {
48
+ this.announcementService.error('Export failed!');
49
+ this.isExportInProgress = false;
50
+ }
51
+ }
52
+ ExportPageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ExportPageComponent, deps: [{ token: i1.ActivatedRoute }, { token: i0.Injector }, { token: i0.ChangeDetectorRef }, { token: i2.AnnouncementService }, { token: i3.ObjectService }], target: i0.ɵɵFactoryTarget.Component });
53
+ ExportPageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ExportPageComponent, selector: "mantle-export-page", viewQueries: [{ propertyName: "dynamicForm", first: true, predicate: DynamicFormComponent, descendants: true }], ngImport: i0, template: "<div fxLayout=\"column\" fxLayoutAlign=\"stretch\" fxLayoutGap=\"16px\" class=\"full-height-min\" [ngClass]=\"{'page full-height-only vertically-scrollable': !isTabbedContent}\">\n <div fxFlex=\"1 0 auto\" class=\"main-content\">\n <mantle-dynamic-form #dynamicForm [content]=\"content$ | async\"></mantle-dynamic-form>\n </div>\n\n <div fxFlex=\"0 0 auto\">\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\" fxLayoutGap=\"16px\">\n <div fxFlex=\"1 1 auto\"></div>\n\n <div fxFlex=\"0 0 auto\">\n <button mat-raised-button\n *ngIf=\"!isExportInProgress\"\n color=\"primary\"\n type=\"button\"\n class=\"export-button\"\n [disabled]=\"!dynamicForm?.valid\"\n (click)=\"onExportClicked()\">\n Export\n </button>\n\n\n <button mat-raised-button\n *ngIf=\"isExportInProgress\"\n color=\"primary\"\n type=\"button\"\n class=\"exporting-button\"\n [disabled]=\"true\">\n Exporting\n <mat-spinner matSuffix [diameter]=\"16\"></mat-spinner>\n </button>\n </div>\n </div>\n </div>\n</div>\n", styles: [".export-button,.exporting-button{width:140px}.exporting-button .mat-spinner{position:absolute;top:10px;right:12px}\n"], components: [{ type: i4.DynamicFormComponent, selector: "mantle-dynamic-form", inputs: ["formPageService", "content"] }, { type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i6.MatSpinner, selector: "mat-spinner", inputs: ["color"] }], directives: [{ type: i7.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i7.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i7.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i9.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { type: i7.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.MatSuffix, selector: "[matSuffix]" }], pipes: { "async": i8.AsyncPipe } });
54
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ExportPageComponent, decorators: [{
55
+ type: Component,
56
+ args: [{
57
+ selector: 'mantle-export-page',
58
+ templateUrl: './export-page.component.html',
59
+ styleUrls: ['./export-page.component.scss']
60
+ }]
61
+ }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i0.Injector }, { type: i0.ChangeDetectorRef }, { type: i2.AnnouncementService }, { type: i3.ObjectService }]; }, propDecorators: { dynamicForm: [{
62
+ type: ViewChild,
63
+ args: [DynamicFormComponent]
64
+ }] } });
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LXBhZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWFudGxlL3NyYy9saWIvY29tcG9uZW50cy9wYWdlcy9leHBvcnQtcGFnZS9leHBvcnQtcGFnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYW50bGUvc3JjL2xpYi9jb21wb25lbnRzL3BhZ2VzL2V4cG9ydC1wYWdlL2V4cG9ydC1wYWdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0IsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM3RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUVwRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7Ozs7Ozs7Ozs7OztBQVFqRSxNQUFNLE9BQU8sbUJBQW1CO0lBVTlCLFlBQW9CLEtBQXFCLEVBQVUsUUFBa0IsRUFBVSxpQkFBb0MsRUFDL0YsbUJBQXdDLEVBQVUsYUFBNEI7UUFEOUUsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQVUsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUMvRix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQVUsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFKM0Ysb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFLdEMsTUFBTSwrQkFBK0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN0RixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQW9CLCtCQUErQixDQUFDLENBQUM7UUFDL0YsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FDbEQsR0FBRyxDQUFDLENBQUMsR0FBdUIsRUFBRSxFQUFFO1lBQzlCLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1FBRS9CLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFakQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQzdDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDckMsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUN0QyxDQUFDO0lBQ0osQ0FBQztJQUVELGVBQWUsQ0FBQyxHQUFRO1FBQ3RCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7SUFDbEMsQ0FBQztJQUVELGVBQWUsQ0FBQyxHQUFtQjtRQUNqQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztJQUNsQyxDQUFDOztpSEFoRFUsbUJBQW1CO3FHQUFuQixtQkFBbUIsdUdBRW5CLG9CQUFvQixnRENqQmpDLHlxQ0FrQ0E7NEZEbkJhLG1CQUFtQjtrQkFML0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixXQUFXLEVBQUUsOEJBQThCO29CQUMzQyxTQUFTLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQztpQkFDNUM7ME5BR2tDLFdBQVc7c0JBQTNDLFNBQVM7dUJBQUMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3Q2hlY2tlZCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5qZWN0b3IsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBbm5vdW5jZW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYW5ub3VuY2VtZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgRHluYW1pY0Zvcm1Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL2Zvcm0vZHluYW1pYy1mb3JtL2R5bmFtaWMtZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRXhwb3J0UGFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9pbnRlcmZhY2VzL2V4cG9ydC1wYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT2JqZWN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL29iamVjdC5zZXJ2aWNlJztcbmltcG9ydCB7IFdlYkFwaUZvcm1SZXNwb25zZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2FkYXB0ZXJzL3dlYi1hcGktY3J1ZC5hZGFwdGVyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWFudGxlLWV4cG9ydC1wYWdlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2V4cG9ydC1wYWdlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZXhwb3J0LXBhZ2UuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBFeHBvcnRQYWdlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdDaGVja2VkIHtcblxuICBAVmlld0NoaWxkKER5bmFtaWNGb3JtQ29tcG9uZW50KSBkeW5hbWljRm9ybSE6IER5bmFtaWNGb3JtQ29tcG9uZW50O1xuXG4gIHByaXZhdGUgZXhwb3J0UGFnZVNlcnZpY2U6IEV4cG9ydFBhZ2VTZXJ2aWNlO1xuXG4gIHB1YmxpYyBjb250ZW50JCE6IE9ic2VydmFibGU8YW55PjtcbiAgcHVibGljIGlzVGFiYmVkQ29udGVudDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgaXNFeHBvcnRJblByb2dyZXNzITogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSwgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICAgICAgICBwcml2YXRlIGFubm91bmNlbWVudFNlcnZpY2U6IEFubm91bmNlbWVudFNlcnZpY2UsIHByaXZhdGUgb2JqZWN0U2VydmljZTogT2JqZWN0U2VydmljZSkge1xuICAgIGNvbnN0IGV4cG9ydFBhZ2VTZXJ2aWNlSW5qZWN0aW9uVG9rZW4gPSB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGFbJ2V4cG9ydFBhZ2VTZXJ2aWNlJ107XG4gICAgdGhpcy5leHBvcnRQYWdlU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0PEV4cG9ydFBhZ2VTZXJ2aWNlPihleHBvcnRQYWdlU2VydmljZUluamVjdGlvblRva2VuKTtcbiAgICB0aGlzLmlzVGFiYmVkQ29udGVudCA9IHRoaXMucm91dGUuc25hcHNob3QuZGF0YVsnaXNUYWJiZWRDb250ZW50J107XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRlbnQkID0gdGhpcy5leHBvcnRQYWdlU2VydmljZS5nZXROZXcoKS5waXBlKFxuICAgICAgbWFwKChyZXM6IFdlYkFwaUZvcm1SZXNwb25zZSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzLmNvbnRlbnQ7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBvbkV4cG9ydENsaWNrZWQoKTogdm9pZCB7XG4gICAgdGhpcy5pc0V4cG9ydEluUHJvZ3Jlc3MgPSB0cnVlO1xuXG4gICAgbGV0IHBhcmFtcyA9IHRoaXMuZHluYW1pY0Zvcm0udmFsdWU7XG4gICAgdGhpcy5vYmplY3RTZXJ2aWNlLnJlbW92ZUVtcHR5QXR0cmlidXRlcyhwYXJhbXMpO1xuXG4gICAgdGhpcy5leHBvcnRQYWdlU2VydmljZS5leHBvcnQocGFyYW1zKS5zdWJzY3JpYmUoXG4gICAgICByZXMgPT4geyB0aGlzLm9uRXhwb3J0U3VjY2VzcyhyZXMpOyB9LFxuICAgICAgcmVzID0+IHsgdGhpcy5vbkV4cG9ydEZhaWx1cmUocmVzKTsgfVxuICAgICk7XG4gIH1cblxuICBvbkV4cG9ydFN1Y2Nlc3MocmVzOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmlzRXhwb3J0SW5Qcm9ncmVzcyA9IGZhbHNlO1xuICB9XG5cbiAgb25FeHBvcnRGYWlsdXJlKHJlczogeyBlcnJvcjogYW55IH0pOiB2b2lkIHtcbiAgICB0aGlzLmFubm91bmNlbWVudFNlcnZpY2UuZXJyb3IoJ0V4cG9ydCBmYWlsZWQhJyk7XG4gICAgdGhpcy5pc0V4cG9ydEluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgfVxuXG59XG4iLCI8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhMYXlvdXRBbGlnbj1cInN0cmV0Y2hcIiBmeExheW91dEdhcD1cIjE2cHhcIiBjbGFzcz1cImZ1bGwtaGVpZ2h0LW1pblwiIFtuZ0NsYXNzXT1cInsncGFnZSBmdWxsLWhlaWdodC1vbmx5IHZlcnRpY2FsbHktc2Nyb2xsYWJsZSc6ICFpc1RhYmJlZENvbnRlbnR9XCI+XG4gIDxkaXYgZnhGbGV4PVwiMSAwIGF1dG9cIiBjbGFzcz1cIm1haW4tY29udGVudFwiPlxuICAgIDxtYW50bGUtZHluYW1pYy1mb3JtICNkeW5hbWljRm9ybSBbY29udGVudF09XCJjb250ZW50JCB8IGFzeW5jXCI+PC9tYW50bGUtZHluYW1pYy1mb3JtPlxuICA8L2Rpdj5cblxuICA8ZGl2IGZ4RmxleD1cIjAgMCBhdXRvXCI+XG4gICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCIgZnhMYXlvdXRHYXA9XCIxNnB4XCI+XG4gICAgICA8ZGl2IGZ4RmxleD1cIjEgMSBhdXRvXCI+PC9kaXY+XG5cbiAgICAgIDxkaXYgZnhGbGV4PVwiMCAwIGF1dG9cIj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCIhaXNFeHBvcnRJblByb2dyZXNzXCJcbiAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZXhwb3J0LWJ1dHRvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWR5bmFtaWNGb3JtPy52YWxpZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25FeHBvcnRDbGlja2VkKClcIj5cbiAgICAgICAgICBFeHBvcnRcbiAgICAgICAgPC9idXR0b24+XG5cblxuICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImlzRXhwb3J0SW5Qcm9ncmVzc1wiXG4gICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cImV4cG9ydGluZy1idXR0b25cIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInRydWVcIj5cbiAgICAgICAgICBFeHBvcnRpbmdcbiAgICAgICAgICA8bWF0LXNwaW5uZXIgbWF0U3VmZml4IFtkaWFtZXRlcl09XCIxNlwiPjwvbWF0LXNwaW5uZXI+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,133 @@
1
+ import { ChangeDetectorRef, Component, Injector, ViewChild } from '@angular/core';
2
+ import { ActivatedRoute } from '@angular/router';
3
+ import { of as observableOf } from 'rxjs';
4
+ import { map } from 'rxjs/operators';
5
+ import { AnnouncementService } from '../../../services/announcement.service';
6
+ import { ConfirmationService } from '../../../services/confirmation.service';
7
+ import { DynamicFormComponent } from '../../../components/form/dynamic-form/dynamic-form.component';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/router";
10
+ import * as i2 from "../../../services/announcement.service";
11
+ import * as i3 from "../../../services/confirmation.service";
12
+ import * as i4 from "../../titles/content-title/content-title.component";
13
+ import * as i5 from "@angular/material/button";
14
+ import * as i6 from "@angular/material/icon";
15
+ import * as i7 from "../../form/dynamic-form/dynamic-form.component";
16
+ import * as i8 from "@angular/material/progress-spinner";
17
+ import * as i9 from "@angular/flex-layout/flex";
18
+ import * as i10 from "@angular/common";
19
+ import * as i11 from "@angular/flex-layout/extended";
20
+ import * as i12 from "@angular/material/form-field";
21
+ export class FormPageComponent {
22
+ constructor(route, injector, changeDetectorRef, announcementService, confirmationService) {
23
+ this.route = route;
24
+ this.injector = injector;
25
+ this.changeDetectorRef = changeDetectorRef;
26
+ this.announcementService = announcementService;
27
+ this.confirmationService = confirmationService;
28
+ this.bottomLeftButtons = [];
29
+ this.bottomRightButtons = [];
30
+ this.isTabbedContent = false;
31
+ const formPageServiceInjectionToken = this.route.snapshot.data['formPageService'];
32
+ this.formPageService = this.injector.get(formPageServiceInjectionToken);
33
+ this.isTabbedContent = this.route.snapshot.data['isTabbedContent'];
34
+ }
35
+ ngOnInit() {
36
+ this.route.params.subscribe(params => {
37
+ this.id = this.route.snapshot.params['id'];
38
+ this.cloneId = this.route.snapshot.params['cloneId'];
39
+ let responseObservable = null;
40
+ if (this.cloneId) {
41
+ responseObservable = this.formPageService.getNew({ clone_id: this.cloneId });
42
+ }
43
+ else {
44
+ responseObservable = this.id ? this.formPageService.getEdit(this.id) :
45
+ this.formPageService.getNew();
46
+ }
47
+ this.content$ = responseObservable.pipe(map((res) => {
48
+ this.header = res.header;
49
+ this.formPageService.onFormContentLoaded(res.content);
50
+ this.loadAdditionalButtons(res.content.data);
51
+ return res.content;
52
+ }));
53
+ });
54
+ }
55
+ ngAfterViewChecked() {
56
+ this.changeDetectorRef.detectChanges();
57
+ }
58
+ loadAdditionalButtons(record) {
59
+ let additionalFormPageButtons = this.formPageService.additionalFormPageButtons(record);
60
+ this.bottomLeftButtons = additionalFormPageButtons.filter(button => {
61
+ return button.position == 'left';
62
+ });
63
+ this.bottomRightButtons = additionalFormPageButtons.filter(button => {
64
+ return button.position == 'right';
65
+ });
66
+ }
67
+ onCancelClicked() {
68
+ this.back();
69
+ }
70
+ onSaveClicked() {
71
+ this.isSaveInProgress = true;
72
+ let value = this.dynamicForm.value;
73
+ this.formPageService.save(this.id, value, (res) => { this.onSaveSuccess(res); }, (res) => { this.onSaveFailure(res); });
74
+ }
75
+ onSaveSuccess(res) {
76
+ this.id = res.id;
77
+ this.formPageService.onFormContentLoaded(res.content);
78
+ this.loadAdditionalButtons(res.content.data);
79
+ this.content$ = observableOf(res.content);
80
+ this.announcementService.success('Save successful!');
81
+ this.back();
82
+ this.isSaveInProgress = false;
83
+ }
84
+ onSaveFailure(res) {
85
+ var _a;
86
+ if (res.content) {
87
+ this.formPageService.onFormContentLoaded(res.content);
88
+ this.content$ = observableOf(res.content);
89
+ }
90
+ else {
91
+ this.back();
92
+ }
93
+ if (res.confirmationRequest) {
94
+ this.confirmationService.confirmSave((confirmed) => {
95
+ var _a;
96
+ (_a = res.confirmationRequest) === null || _a === void 0 ? void 0 : _a.onConfirmationGiven(confirmed);
97
+ if (confirmed)
98
+ this.onSaveClicked();
99
+ else
100
+ this.announcementService.error('Save failed!');
101
+ }, { noun: this.formPageService.noun(), message: res.confirmationRequest.message });
102
+ }
103
+ else {
104
+ this.announcementService.error('Save failed!');
105
+ }
106
+ if (!!((_a = res.alert) === null || _a === void 0 ? void 0 : _a.message)) {
107
+ this.announcementService.error(res.alert.message);
108
+ }
109
+ this.isSaveInProgress = false;
110
+ }
111
+ back() {
112
+ if (this.id)
113
+ this.formPageService.openRecord({ id: this.id });
114
+ else if (this.cloneId)
115
+ this.formPageService.openRecord({ id: this.cloneId });
116
+ else
117
+ this.formPageService.openList();
118
+ }
119
+ }
120
+ FormPageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FormPageComponent, deps: [{ token: i1.ActivatedRoute }, { token: i0.Injector }, { token: i0.ChangeDetectorRef }, { token: i2.AnnouncementService }, { token: i3.ConfirmationService }], target: i0.ɵɵFactoryTarget.Component });
121
+ FormPageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: FormPageComponent, selector: "mantle-form-page", viewQueries: [{ propertyName: "dynamicForm", first: true, predicate: DynamicFormComponent, descendants: true }], ngImport: i0, template: "<div fxLayout=\"column\" fxLayoutAlign=\"stretch\" class=\"full-height-min\" [ngClass]=\"{'page full-height-only vertically-scrollable': !isTabbedContent}\">\n <div fxFlex=\"0 0 auto\" class=\"page-header\">\n <div fxLayout=\"row\" fxLayoutAlign=\"stretch\" fxLayoutGap=\"16px\">\n <mantle-content-title *ngIf=\"header\" fxFlex=\"0 0 auto\" [thumbnail]=\"header.thumbnail\" [title]=\"header.title\"></mantle-content-title>\n\n <div fxFlex=\"1 1 auto\"></div>\n\n <div fxFlex=\"0 0 auto\">\n <button mat-icon-button\n type=\"button\"\n (click)=\"onCancelClicked()\"\n [disabled]=\"formPageService.isCommitInProgress\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </div>\n </div>\n\n <div fxFlex=\"1 0 auto\" class=\"main-content\">\n <mantle-dynamic-form #dynamicForm [content]=\"content$ | async\" [formPageService]=\"formPageService\"></mantle-dynamic-form>\n </div>\n\n <div fxFlex=\"0 0 auto\" class=\"page-footer\">\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\" fxLayoutGap=\"16px\">\n <ng-container *ngFor=\"let button of bottomLeftButtons\">\n <div fxFlex=\"0 0 auto\" *ngIf=\"button.show\">\n <button mat-raised-button\n color=\"{{ button.color }}\"\n type=\"button\"\n class=\"additional-button\"\n [ngClass]=\"{ 'in-progress-button': button.isInProgress() }\"\n [disabled]=\"formPageService.isCommitInProgress || button.disabled\"\n (click)=\"button.onClick(dynamicForm?.value)\">\n {{ button.label }}\n <mat-spinner *ngIf=\"button.isInProgress()\" matSuffix [diameter]=\"16\"></mat-spinner>\n </button>\n </div>\n </ng-container>\n\n <div fxFlex=\"1 1 auto\"></div>\n\n <ng-container *ngFor=\"let button of bottomRightButtons\">\n <div fxFlex=\"0 0 auto\" *ngIf=\"button.show\">\n <button mat-raised-button\n color=\"{{ button.color }}\"\n type=\"button\"\n class=\"additional-button\"\n [ngClass]=\"{ 'in-progress-button': button.isInProgress() }\"\n [disabled]=\"formPageService.isCommitInProgress || button.disabled\"\n (click)=\"button.onClick(dynamicForm?.value)\">\n {{ button.label }}\n <mat-spinner *ngIf=\"button.isInProgress()\" matSuffix [diameter]=\"16\"></mat-spinner>\n </button>\n </div>\n </ng-container>\n\n <div fxFlex=\"0 0 auto\" *ngIf=\"formPageService.showSaveButton\">\n <button mat-raised-button\n color=\"primary\"\n type=\"button\"\n class=\"save-button\"\n [ngClass]=\"{ 'in-progress-button': isSaveInProgress }\"\n [disabled]=\"formPageService.isCommitInProgress || !dynamicForm?.valid\"\n (click)=\"onSaveClicked()\">\n Save\n <mat-spinner *ngIf=\"isSaveInProgress\" matSuffix [diameter]=\"16\"></mat-spinner>\n </button>\n </div>\n </div>\n </div>\n</div>\n", styles: [".save-button,.additional-button{width:140px}.in-progress-button .mat-spinner{position:absolute;top:10px;right:12px}\n"], components: [{ type: i4.ContentTitleComponent, selector: "mantle-content-title", inputs: ["thumbnail", "title"] }, { type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i7.DynamicFormComponent, selector: "mantle-dynamic-form", inputs: ["formPageService", "content"] }, { type: i8.MatSpinner, selector: "mat-spinner", inputs: ["color"] }], directives: [{ type: i9.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i9.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i11.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { type: i9.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i9.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i12.MatSuffix, selector: "[matSuffix]" }], pipes: { "async": i10.AsyncPipe } });
122
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FormPageComponent, decorators: [{
123
+ type: Component,
124
+ args: [{
125
+ selector: 'mantle-form-page',
126
+ templateUrl: './form-page.component.html',
127
+ styleUrls: ['./form-page.component.scss']
128
+ }]
129
+ }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i0.Injector }, { type: i0.ChangeDetectorRef }, { type: i2.AnnouncementService }, { type: i3.ConfirmationService }]; }, propDecorators: { dynamicForm: [{
130
+ type: ViewChild,
131
+ args: [DynamicFormComponent]
132
+ }] } });
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1wYWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21hbnRsZS9zcmMvbGliL2NvbXBvbmVudHMvcGFnZXMvZm9ybS1wYWdlL2Zvcm0tcGFnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYW50bGUvc3JjL2xpYi9jb21wb25lbnRzL3BhZ2VzL2Zvcm0tcGFnZS9mb3JtLXBhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQixpQkFBaUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFjLEVBQUUsSUFBSSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhEQUE4RCxDQUFDOzs7Ozs7Ozs7Ozs7OztBQVNwRyxNQUFNLE9BQU8saUJBQWlCO0lBZTVCLFlBQW9CLEtBQXFCLEVBQVUsUUFBa0IsRUFBVSxpQkFBb0MsRUFDL0YsbUJBQXdDLEVBQVUsbUJBQXdDO1FBRDFGLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUFVLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDL0Ysd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUFVLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFOdkcsc0JBQWlCLEdB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dUVBOzRGRHhEYSxpQkFBaUI7a0JBTDdCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsV0FBVyxFQUFFLDRCQUE0QjtvQkFDekMsU0FBUyxFQUFFLENBQUMsNEJBQTRCLENBQUM7aUJBQzFDO2dPQUdrQyxXQUFXO3NCQUEzQyxTQUFTO3VCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0NoZWNrZWQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEluamVjdG9yLCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgYXMgb2JzZXJ2YWJsZU9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBbm5vdW5jZW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYW5ub3VuY2VtZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2NvbmZpcm1hdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IER5bmFtaWNGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy9mb3JtL2R5bmFtaWMtZm9ybS9keW5hbWljLWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IEZvcm1QYWdlQnV0dG9uLCBGb3JtUGFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9pbnRlcmZhY2VzL2Zvcm0tcGFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IFdlYkFwaUZvcm1SZXNwb25zZSwgV2ViQXBpU2F2ZVJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYWRhcHRlcnMvd2ViLWFwaS1jcnVkLmFkYXB0ZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtYW50bGUtZm9ybS1wYWdlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0tcGFnZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Zvcm0tcGFnZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1QYWdlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdDaGVja2VkIHtcblxuICBAVmlld0NoaWxkKER5bmFtaWNGb3JtQ29tcG9uZW50KSBkeW5hbWljRm9ybSE6IER5bmFtaWNGb3JtQ29tcG9uZW50O1xuXG4gIHB1YmxpYyBmb3JtUGFnZVNlcnZpY2U6IEZvcm1QYWdlU2VydmljZTtcblxuICBwcml2YXRlIGlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgY2xvbmVJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwdWJsaWMgaGVhZGVyOiBhbnk7XG4gIHB1YmxpYyBjb250ZW50JCE6IE9ic2VydmFibGU8YW55PjtcbiAgcHVibGljIGJvdHRvbUxlZnRCdXR0b25zOiBGb3JtUGFnZUJ1dHRvbltdID0gW107XG4gIHB1YmxpYyBib3R0b21SaWdodEJ1dHRvbnM6IEZvcm1QYWdlQnV0dG9uW10gPSBbXTtcbiAgcHVibGljIGlzVGFiYmVkQ29udGVudDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgaXNTYXZlSW5Qcm9ncmVzcyE6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLCBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBhbm5vdW5jZW1lbnRTZXJ2aWNlOiBBbm5vdW5jZW1lbnRTZXJ2aWNlLCBwcml2YXRlIGNvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UpIHtcbiAgICBjb25zdCBmb3JtUGFnZVNlcnZpY2VJbmplY3Rpb25Ub2tlbiA9IHRoaXMucm91dGUuc25hcHNob3QuZGF0YVsnZm9ybVBhZ2VTZXJ2aWNlJ107XG4gICAgdGhpcy5mb3JtUGFnZVNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldDxGb3JtUGFnZVNlcnZpY2U+KGZvcm1QYWdlU2VydmljZUluamVjdGlvblRva2VuKTtcbiAgICB0aGlzLmlzVGFiYmVkQ29udGVudCA9IHRoaXMucm91dGUuc25hcHNob3QuZGF0YVsnaXNUYWJiZWRDb250ZW50J107XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUocGFyYW1zID0+IHtcbiAgICAgIHRoaXMuaWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtc1snaWQnXTtcbiAgICAgIHRoaXMuY2xvbmVJZCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zWydjbG9uZUlkJ107XG5cbiAgICAgIGxldCByZXNwb25zZU9ic2VydmFibGUgPSBudWxsO1xuICAgICAgaWYgKHRoaXMuY2xvbmVJZCkge1xuICAgICAgICByZXNwb25zZU9ic2VydmFibGUgPSB0aGlzLmZvcm1QYWdlU2VydmljZS5nZXROZXcoeyBjbG9uZV9pZDogdGhpcy5jbG9uZUlkIH0pO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHJlc3BvbnNlT2JzZXJ2YWJsZSA9IHRoaXMuaWQgPyB0aGlzLmZvcm1QYWdlU2VydmljZS5nZXRFZGl0KHRoaXMuaWQpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybVBhZ2VTZXJ2aWNlLmdldE5ldygpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNvbnRlbnQkID0gcmVzcG9uc2VPYnNlcnZhYmxlLnBpcGUoXG4gICAgICAgIG1hcCgocmVzOiBXZWJBcGlGb3JtUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICB0aGlzLmhlYWRlciA9IHJlcy5oZWFkZXI7XG4gICAgICAgICAgdGhpcy5mb3JtUGFnZVNlcnZpY2Uub25Gb3JtQ29udGVudExvYWRlZChyZXMuY29udGVudCk7XG4gICAgICAgICAgdGhpcy5sb2FkQWRkaXRpb25hbEJ1dHRvbnMocmVzLmNvbnRlbnQuZGF0YSk7XG4gICAgICAgICAgcmV0dXJuIHJlcy5jb250ZW50O1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGxvYWRBZGRpdGlvbmFsQnV0dG9ucyhyZWNvcmQ6IGFueSkge1xuICAgIGxldCBhZGRpdGlvbmFsRm9ybVBhZ2VCdXR0b25zID0gdGhpcy5mb3JtUGFnZVNlcnZpY2UuYWRkaXRpb25hbEZvcm1QYWdlQnV0dG9ucyhyZWNvcmQpO1xuICAgIHRoaXMuYm90dG9tTGVmdEJ1dHRvbnMgPSBhZGRpdGlvbmFsRm9ybVBhZ2VCdXR0b25zLmZpbHRlcihidXR0b24gPT4ge1xuICAgICAgcmV0dXJuIGJ1dHRvbi5wb3NpdGlvbiA9PSAnbGVmdCc7XG4gICAgfSk7XG4gICAgdGhpcy5ib3R0b21SaWdodEJ1dHRvbnMgPSBhZGRpdGlvbmFsRm9ybVBhZ2VCdXR0b25zLmZpbHRlcihidXR0b24gPT4ge1xuICAgICAgcmV0dXJuIGJ1dHRvbi5wb3NpdGlvbiA9PSAncmlnaHQnO1xuICAgIH0pO1xuICB9XG5cbiAgb25DYW5jZWxDbGlja2VkKCk6IHZvaWQge1xuICAgIHRoaXMuYmFjaygpO1xuICB9XG5cbiAgb25TYXZlQ2xpY2tlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzU2F2ZUluUHJvZ3Jlc3MgPSB0cnVlO1xuXG4gICAgbGV0IHZhbHVlID0gdGhpcy5keW5hbWljRm9ybS52YWx1ZTtcbiAgICB0aGlzLmZvcm1QYWdlU2VydmljZS5zYXZlKFxuICAgICAgdGhpcy5pZCwgdmFsdWUsXG4gICAgICAocmVzOiBXZWJBcGlTYXZlUmVzcG9uc2UpID0+IHsgdGhpcy5vblNhdmVTdWNjZXNzKHJlcyk7IH0sXG4gICAgICAocmVzOiBXZWJBcGlTYXZlUmVzcG9uc2UpID0+IHsgdGhpcy5vblNhdmVGYWlsdXJlKHJlcyk7IH1cbiAgICApO1xuICB9XG5cbiAgb25TYXZlU3VjY2VzcyhyZXM6IFdlYkFwaVNhdmVSZXNwb25zZSk6IHZvaWQge1xuICAgIHRoaXMuaWQgPSByZXMuaWQ7XG4gICAgdGhpcy5mb3JtUGFnZVNlcnZpY2Uub25Gb3JtQ29udGVudExvYWRlZChyZXMuY29udGVudCk7XG4gICAgdGhpcy5sb2FkQWRkaXRpb25hbEJ1dHRvbnMocmVzLmNvbnRlbnQuZGF0YSk7XG4gICAgdGhpcy5jb250ZW50JCA9IG9ic2VydmFibGVPZihyZXMuY29udGVudCk7XG4gICAgdGhpcy5hbm5vdW5jZW1lbnRTZXJ2aWNlLnN1Y2Nlc3MoJ1NhdmUgc3VjY2Vzc2Z1bCEnKTtcbiAgICB0aGlzLmJhY2soKTtcblxuICAgIHRoaXMuaXNTYXZlSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICB9XG5cbiAgb25TYXZlRmFpbHVyZShyZXM6IFdlYkFwaVNhdmVSZXNwb25zZSk6IHZvaWQge1xuICAgIGlmIChyZXMuY29udGVudCkge1xuICAgICAgdGhpcy5mb3JtUGFnZVNlcnZpY2Uub25Gb3JtQ29udGVudExvYWRlZChyZXMuY29udGVudCk7XG4gICAgICB0aGlzLmNvbnRlbnQkID0gb2JzZXJ2YWJsZU9mKHJlcy5jb250ZW50KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmJhY2soKTtcbiAgICB9XG5cbiAgICBpZiAocmVzLmNvbmZpcm1hdGlvblJlcXVlc3QpIHtcbiAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtU2F2ZShcbiAgICAgICAgKGNvbmZpcm1lZDogYm9vbGVhbikgPT4ge1xuICAgICAgICAgIHJlcy5jb25maXJtYXRpb25SZXF1ZXN0Py5vbkNvbmZpcm1hdGlvbkdpdmVuKGNvbmZpcm1lZCk7XG4gICAgICAgICAgaWYgKGNvbmZpcm1lZCkgdGhpcy5vblNhdmVDbGlja2VkKCk7XG4gICAgICAgICAgZWxzZSB0aGlzLmFubm91bmNlbWVudFNlcnZpY2UuZXJyb3IoJ1NhdmUgZmFpbGVkIScpO1xuICAgICAgICB9LFxuICAgICAgICB7IG5vdW46IHRoaXMuZm9ybVBhZ2VTZXJ2aWNlLm5vdW4oKSwgbWVzc2FnZTogcmVzLmNvbmZpcm1hdGlvblJlcXVlc3QubWVzc2FnZSB9XG4gICAgICApO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuYW5ub3VuY2VtZW50U2VydmljZS5lcnJvcignU2F2ZSBmYWlsZWQhJyk7XG4gICAgfVxuXG4gICAgaWYgKCEhcmVzLmFsZXJ0Py5tZXNzYWdlKSB7XG4gICAgICB0aGlzLmFubm91bmNlbWVudFNlcnZpY2UuZXJyb3IocmVzLmFsZXJ0Lm1lc3NhZ2UpO1xuICAgIH1cblxuICAgIHRoaXMuaXNTYXZlSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICB9XG5cbiAgYmFjaygpIHtcbiAgICBpZiAodGhpcy5pZCkgdGhpcy5mb3JtUGFnZVNlcnZpY2Uub3BlblJlY29yZCh7IGlkOiB0aGlzLmlkIH0pO1xuICAgIGVsc2UgaWYgKHRoaXMuY2xvbmVJZCkgdGhpcy5mb3JtUGFnZVNlcnZpY2Uub3BlblJlY29yZCh7IGlkOiB0aGlzLmNsb25lSWQgfSk7XG4gICAgZWxzZSB0aGlzLmZvcm1QYWdlU2VydmljZS5vcGVuTGlzdCgpO1xuICB9XG5cbn1cbiIsIjxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeExheW91dEFsaWduPVwic3RyZXRjaFwiIGNsYXNzPVwiZnVsbC1oZWlnaHQtbWluXCIgW25nQ2xhc3NdPVwieydwYWdlIGZ1bGwtaGVpZ2h0LW9ubHkgdmVydGljYWxseS1zY3JvbGxhYmxlJzogIWlzVGFiYmVkQ29udGVudH1cIj5cbiAgPGRpdiBmeEZsZXg9XCIwIDAgYXV0b1wiIGNsYXNzPVwicGFnZS1oZWFkZXJcIj5cbiAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInN0cmV0Y2hcIiBmeExheW91dEdhcD1cIjE2cHhcIj5cbiAgICAgIDxtYW50bGUtY29udGVudC10aXRsZSAqbmdJZj1cImhlYWRlclwiIGZ4RmxleD1cIjAgMCBhdXRvXCIgW3RodW1ibmFpbF09XCJoZWFkZXIudGh1bWJuYWlsXCIgW3RpdGxlXT1cImhlYWRlci50aXRsZVwiPjwvbWFudGxlLWNvbnRlbnQtdGl0bGU+XG5cbiAgICAgIDxkaXYgZnhGbGV4PVwiMSAxIGF1dG9cIj48L2Rpdj5cblxuICAgICAgPGRpdiBmeEZsZXg9XCIwIDAgYXV0b1wiPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25DYW5jZWxDbGlja2VkKClcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1QYWdlU2VydmljZS5pc0NvbW1pdEluUHJvZ3Jlc3NcIj5cbiAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGZ4RmxleD1cIjEgMCBhdXRvXCIgY2xhc3M9XCJtYWluLWNvbnRlbnRcIj5cbiAgICA8bWFudGxlLWR5bmFtaWMtZm9ybSAjZHluYW1pY0Zvcm0gW2NvbnRlbnRdPVwiY29udGVudCQgfCBhc3luY1wiIFtmb3JtUGFnZVNlcnZpY2VdPVwiZm9ybVBhZ2VTZXJ2aWNlXCI+PC9tYW50bGUtZHluYW1pYy1mb3JtPlxuICA8L2Rpdj5cblxuICA8ZGl2IGZ4RmxleD1cIjAgMCBhdXRvXCIgY2xhc3M9XCJwYWdlLWZvb3RlclwiPlxuICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiIGZ4TGF5b3V0R2FwPVwiMTZweFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGJvdHRvbUxlZnRCdXR0b25zXCI+XG4gICAgICAgIDxkaXYgZnhGbGV4PVwiMCAwIGF1dG9cIiAqbmdJZj1cImJ1dHRvbi5zaG93XCI+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj1cInt7IGJ1dHRvbi5jb2xvciB9fVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImFkZGl0aW9uYWwtYnV0dG9uXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaW4tcHJvZ3Jlc3MtYnV0dG9uJzogYnV0dG9uLmlzSW5Qcm9ncmVzcygpIH1cIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybVBhZ2VTZXJ2aWNlLmlzQ29tbWl0SW5Qcm9ncmVzcyB8fCBidXR0b24uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYnV0dG9uLm9uQ2xpY2soZHluYW1pY0Zvcm0/LnZhbHVlKVwiPlxuICAgICAgICAgICAge3sgYnV0dG9uLmxhYmVsIH19XG4gICAgICAgICAgICA8bWF0LXNwaW5uZXIgKm5nSWY9XCJidXR0b24uaXNJblByb2dyZXNzKClcIiBtYXRTdWZmaXggW2RpYW1ldGVyXT1cIjE2XCI+PC9tYXQtc3Bpbm5lcj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPGRpdiBmeEZsZXg9XCIxIDEgYXV0b1wiPjwvZGl2PlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBidXR0b24gb2YgYm90dG9tUmlnaHRCdXR0b25zXCI+XG4gICAgICAgIDxkaXYgZnhGbGV4PVwiMCAwIGF1dG9cIiAqbmdJZj1cImJ1dHRvbi5zaG93XCI+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj1cInt7IGJ1dHRvbi5jb2xvciB9fVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImFkZGl0aW9uYWwtYnV0dG9uXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaW4tcHJvZ3Jlc3MtYnV0dG9uJzogYnV0dG9uLmlzSW5Qcm9ncmVzcygpIH1cIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybVBhZ2VTZXJ2aWNlLmlzQ29tbWl0SW5Qcm9ncmVzcyB8fCBidXR0b24uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYnV0dG9uLm9uQ2xpY2soZHluYW1pY0Zvcm0/LnZhbHVlKVwiPlxuICAgICAgICAgICAge3sgYnV0dG9uLmxhYmVsIH19XG4gICAgICAgICAgICA8bWF0LXNwaW5uZXIgKm5nSWY9XCJidXR0b24uaXNJblByb2dyZXNzKClcIiBtYXRTdWZmaXggW2RpYW1ldGVyXT1cIjE2XCI+PC9tYXQtc3Bpbm5lcj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPGRpdiBmeEZsZXg9XCIwIDAgYXV0b1wiICpuZ0lmPVwiZm9ybVBhZ2VTZXJ2aWNlLnNob3dTYXZlQnV0dG9uXCI+XG4gICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwic2F2ZS1idXR0b25cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaW4tcHJvZ3Jlc3MtYnV0dG9uJzogaXNTYXZlSW5Qcm9ncmVzcyB9XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtUGFnZVNlcnZpY2UuaXNDb21taXRJblByb2dyZXNzIHx8ICFkeW5hbWljRm9ybT8udmFsaWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uU2F2ZUNsaWNrZWQoKVwiPlxuICAgICAgICAgIFNhdmVcbiAgICAgICAgICA8bWF0LXNwaW5uZXIgKm5nSWY9XCJpc1NhdmVJblByb2dyZXNzXCIgbWF0U3VmZml4IFtkaWFtZXRlcl09XCIxNlwiPjwvbWF0LXNwaW5uZXI+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=