@sumaris-net/ngx-components 1.23.8 → 2.0.0-rc1

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 (714) hide show
  1. package/doc/build.md +2 -2
  2. package/esm2020/public_api.mjs +274 -0
  3. package/esm2020/public_test_api.mjs +46 -0
  4. package/esm2020/src/app/admin/admin-routing.module.mjs +41 -0
  5. package/esm2020/src/app/admin/admin.module.mjs +49 -0
  6. package/esm2020/src/app/admin/services/filter/person.filter.mjs +59 -0
  7. package/esm2020/src/app/admin/services/person.service.mjs +161 -0
  8. package/esm2020/src/app/admin/services/validator/person.validator.mjs +34 -0
  9. package/esm2020/src/app/admin/users/list/users.mjs +227 -0
  10. package/esm2020/src/app/core/about/modal-about.mjs +71 -0
  11. package/esm2020/src/app/core/account/account.mjs +230 -0
  12. package/esm2020/src/app/core/auth/form/form-auth.mjs +131 -0
  13. package/esm2020/src/app/core/auth/modal/modal-auth.mjs +72 -0
  14. package/esm2020/src/app/core/core.module.mjs +223 -0
  15. package/esm2020/src/app/core/core.testing.module.mjs +72 -0
  16. package/esm2020/src/app/core/form/editor.class.mjs +608 -0
  17. package/esm2020/src/app/core/form/entity-editor-modal.class.mjs +406 -0
  18. package/esm2020/src/app/core/form/entity-editor.class.mjs +669 -0
  19. package/esm2020/src/app/core/form/entity-metadata.component.mjs +25 -0
  20. package/esm2020/src/app/core/form/form-buttons-bar.component.mjs +71 -0
  21. package/esm2020/src/app/core/form/form.class.mjs +334 -0
  22. package/esm2020/src/app/core/form/form.utils.mjs +264 -0
  23. package/esm2020/src/app/core/form/list.form.mjs +221 -0
  24. package/esm2020/src/app/core/form/properties.form.mjs +126 -0
  25. package/esm2020/src/app/core/graphql/graphql.module.mjs +22 -0
  26. package/esm2020/src/app/core/graphql/graphql.service.mjs +730 -0
  27. package/esm2020/src/app/core/graphql/graphql.utils.mjs +117 -0
  28. package/esm2020/src/app/core/home/home.mjs +257 -0
  29. package/esm2020/src/app/core/icon/icon.component.mjs +41 -0
  30. package/esm2020/src/app/core/icon/icon.module.mjs +29 -0
  31. package/esm2020/src/app/core/install/install-upgrade-card.component.mjs +337 -0
  32. package/esm2020/src/app/core/install/install-upgrade-card.module.mjs +33 -0
  33. package/esm2020/src/app/core/menu/menu.component.mjs +317 -0
  34. package/{esm2015/src/app/core/menu/menu.model.js → esm2020/src/app/core/menu/menu.model.mjs} +0 -0
  35. package/esm2020/src/app/core/menu/menu.module.mjs +45 -0
  36. package/{esm2015/src/app/core/menu/menu.service.js → esm2020/src/app/core/menu/menu.service.mjs} +9 -7
  37. package/esm2020/src/app/core/offline/update-offline-mode-card.component.mjs +27 -0
  38. package/esm2020/src/app/core/peer/select-peer.modal.mjs +130 -0
  39. package/esm2020/src/app/core/peer/select-peer.module.mjs +35 -0
  40. package/esm2020/src/app/core/register/confirm/confirm.mjs +81 -0
  41. package/esm2020/src/app/core/register/form/form-register.mjs +181 -0
  42. package/esm2020/src/app/core/register/modal/modal-register.mjs +52 -0
  43. package/esm2020/src/app/core/register/register.module.mjs +42 -0
  44. package/esm2020/src/app/core/services/account.service.mjs +1112 -0
  45. package/esm2020/src/app/core/services/auth-guard.service.mjs +71 -0
  46. package/esm2020/src/app/core/services/base-entity-service.class.mjs +433 -0
  47. package/esm2020/src/app/core/services/base-graphql-service.class.mjs +219 -0
  48. package/{esm2015/src/app/core/services/base58.js → esm2020/src/app/core/services/base58.mjs} +0 -0
  49. package/{esm2015/src/app/core/services/config/core.config.js → esm2020/src/app/core/services/config/core.config.mjs} +0 -0
  50. package/esm2020/src/app/core/services/config.service.mjs +354 -0
  51. package/{esm2015/src/app/core/services/crypto.service.js → esm2020/src/app/core/services/crypto.service.mjs} +7 -5
  52. package/{esm2015/src/app/core/services/errors.js → esm2020/src/app/core/services/errors.mjs} +0 -0
  53. package/esm2020/src/app/core/services/local-settings.service.mjs +442 -0
  54. package/esm2020/src/app/core/services/model/account.model.mjs +50 -0
  55. package/esm2020/src/app/core/services/model/config.model.mjs +89 -0
  56. package/esm2020/src/app/core/services/model/department.model.mjs +30 -0
  57. package/esm2020/src/app/core/services/model/entity.decorators.mjs +107 -0
  58. package/esm2020/src/app/core/services/model/entity.model.mjs +242 -0
  59. package/{esm2015/src/app/core/services/model/filter.model.js → esm2020/src/app/core/services/model/filter.model.mjs} +0 -0
  60. package/{esm2015/src/app/core/services/model/history.model.js → esm2020/src/app/core/services/model/history.model.mjs} +0 -0
  61. package/{esm2015/src/app/core/services/model/model.enum.js → esm2020/src/app/core/services/model/model.enum.mjs} +0 -0
  62. package/esm2020/src/app/core/services/model/peer.model.mjs +68 -0
  63. package/esm2020/src/app/core/services/model/person.model.mjs +83 -0
  64. package/esm2020/src/app/core/services/model/referential.model.mjs +145 -0
  65. package/esm2020/src/app/core/services/model/settings.model.mjs +75 -0
  66. package/esm2020/src/app/core/services/network.service.mjs +602 -0
  67. package/esm2020/src/app/core/services/network.utils.mjs +16 -0
  68. package/esm2020/src/app/core/services/pipes/account.pipes.mjs +38 -0
  69. package/esm2020/src/app/core/services/pipes/department-to-string.pipe.mjs +23 -0
  70. package/esm2020/src/app/core/services/pipes/person-to-string.pipe.mjs +23 -0
  71. package/esm2020/src/app/core/services/pipes/usage-mode.pipes.mjs +37 -0
  72. package/esm2020/src/app/core/services/platform.service.mjs +476 -0
  73. package/esm2020/src/app/core/services/storage/entities-storage.service.mjs +422 -0
  74. package/esm2020/src/app/core/services/storage/entity-store.class.mjs +449 -0
  75. package/esm2020/src/app/core/services/testing/referential-filter.model.mjs +23 -0
  76. package/esm2020/src/app/core/services/testing/referential.validator.mjs +45 -0
  77. package/esm2020/src/app/core/services/validator/account.validator.mjs +52 -0
  78. package/esm2020/src/app/core/services/validator/base.validator.class.mjs +47 -0
  79. package/esm2020/src/app/core/services/validator/local-settings.validator.mjs +66 -0
  80. package/esm2020/src/app/core/services/validator/user-settings.validator.mjs +29 -0
  81. package/esm2020/src/app/core/settings/settings.page.mjs +290 -0
  82. package/esm2020/src/app/core/table/actions-column.component.mjs +96 -0
  83. package/esm2020/src/app/core/table/entities-table-datasource.class.mjs +385 -0
  84. package/esm2020/src/app/core/table/memory-table.class.mjs +53 -0
  85. package/esm2020/src/app/core/table/table-select-columns.component.mjs +43 -0
  86. package/esm2020/src/app/core/table/table.class.mjs +1654 -0
  87. package/{esm2015/src/app/core/table/table.utils.js → esm2020/src/app/core/table/table.utils.mjs} +0 -0
  88. package/esm2020/src/app/core/table/testing/table.testing.mjs +264 -0
  89. package/esm2020/src/app/core/table/testing/table.testing.module.mjs +38 -0
  90. package/esm2020/src/app/core/text-popover/testing/text-popover.testing.mjs +37 -0
  91. package/esm2020/src/app/core/text-popover/testing/text-popover.testing.module.mjs +45 -0
  92. package/esm2020/src/app/core/text-popover/text-form.component.mjs +84 -0
  93. package/esm2020/src/app/core/text-popover/text-popover.component.mjs +92 -0
  94. package/esm2020/src/app/shared/alerts.mjs +238 -0
  95. package/esm2020/src/app/shared/audio/audio.mjs +201 -0
  96. package/esm2020/src/app/shared/audio/audio.testing.mjs +31 -0
  97. package/esm2020/src/app/shared/audio/audio.testing.module.mjs +45 -0
  98. package/esm2020/src/app/shared/capacitor/keyboard.mjs +40 -0
  99. package/esm2020/src/app/shared/capacitor/plugins.mjs +9 -0
  100. package/{esm2015/src/app/shared/constants.js → esm2020/src/app/shared/constants.mjs} +2 -1
  101. package/esm2020/src/app/shared/dates.mjs +134 -0
  102. package/esm2020/src/app/shared/directives/autofocus.directive.mjs +92 -0
  103. package/esm2020/src/app/shared/directives/autotitle.directive.mjs +30 -0
  104. package/esm2020/src/app/shared/directives/directives.module.mjs +43 -0
  105. package/esm2020/src/app/shared/directives/drag-and-drop.directive.mjs +53 -0
  106. package/esm2020/src/app/shared/directives/ng-var.directive.mjs +31 -0
  107. package/esm2020/src/app/shared/directives/resizable/resizable.component.mjs +59 -0
  108. package/esm2020/src/app/shared/directives/resizable/resizable.directive.mjs +40 -0
  109. package/esm2020/src/app/shared/directives/resizable/resizable.module.mjs +17 -0
  110. package/esm2020/src/app/shared/events.mjs +64 -0
  111. package/esm2020/src/app/shared/file/csv.utils.mjs +74 -0
  112. package/esm2020/src/app/shared/file/file.service.mjs +117 -0
  113. package/esm2020/src/app/shared/file/file.utils.mjs +113 -0
  114. package/esm2020/src/app/shared/file/images.utils.mjs +161 -0
  115. package/{esm2015/src/app/shared/file/uri.utils.js → esm2020/src/app/shared/file/uri.utils.mjs} +0 -0
  116. package/{esm2015/src/app/shared/focusable.js → esm2020/src/app/shared/focusable.mjs} +0 -0
  117. package/esm2020/src/app/shared/form/field.component.mjs +241 -0
  118. package/{esm2015/src/app/shared/form/field.model.js → esm2020/src/app/shared/form/field.model.mjs} +1 -1
  119. package/esm2020/src/app/shared/form/loading-spinner.mjs +36 -0
  120. package/esm2020/src/app/shared/forms.mjs +355 -0
  121. package/esm2020/src/app/shared/functions.mjs +417 -0
  122. package/{esm2015/src/app/shared/gesture/gesture-config.js → esm2020/src/app/shared/gesture/gesture-config.mjs} +7 -5
  123. package/esm2020/src/app/shared/gesture/hammer.utils.mjs +2 -0
  124. package/{esm2015/src/app/shared/graph/colors.utils.js → esm2020/src/app/shared/graph/colors.utils.mjs} +0 -0
  125. package/esm2020/src/app/shared/graph/graph-colors.mjs +254 -0
  126. package/esm2020/src/app/shared/guard/component-dirty.guard.mjs +57 -0
  127. package/esm2020/src/app/shared/help/help.modal.mjs +53 -0
  128. package/esm2020/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +23 -0
  129. package/esm2020/src/app/shared/hotkeys/hotkeys.service.mjs +84 -0
  130. package/esm2020/src/app/shared/hotkeys/shared-hotkeys.module.mjs +42 -0
  131. package/esm2020/src/app/shared/http/http.utils.mjs +52 -0
  132. package/esm2020/src/app/shared/image/gallery/image-gallery.component.mjs +279 -0
  133. package/esm2020/src/app/shared/image/gallery/image-gallery.module.mjs +46 -0
  134. package/esm2020/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +27 -0
  135. package/esm2020/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +89 -0
  136. package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.mjs +33 -0
  137. package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +56 -0
  138. package/esm2020/src/app/shared/image/image.model.mjs +2 -0
  139. package/esm2020/src/app/shared/image/image.module.mjs +29 -0
  140. package/esm2020/src/app/shared/image/image.service.mjs +99 -0
  141. package/{esm2015/src/app/shared/inputs.js → esm2020/src/app/shared/inputs.mjs} +4 -4
  142. package/{esm2015/src/app/shared/interceptors/progess.interceptor.js → esm2020/src/app/shared/interceptors/progess.interceptor.mjs} +0 -0
  143. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +47 -0
  144. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.mjs +836 -0
  145. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +78 -0
  146. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +19 -0
  147. package/esm2020/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +205 -0
  148. package/esm2020/src/app/shared/material/badge/badge-icon.directive.mjs +143 -0
  149. package/esm2020/src/app/shared/material/badge/badge-icon.module.mjs +32 -0
  150. package/esm2020/src/app/shared/material/badge/badge-icon.test.mjs +27 -0
  151. package/esm2020/src/app/shared/material/boolean/boolean.module.mjs +68 -0
  152. package/esm2020/src/app/shared/material/boolean/material.boolean.mjs +253 -0
  153. package/esm2020/src/app/shared/material/chips/chips.module.mjs +76 -0
  154. package/esm2020/src/app/shared/material/chips/material.chips.mjs +692 -0
  155. package/esm2020/src/app/shared/material/chips/testing/chips.test.mjs +136 -0
  156. package/esm2020/src/app/shared/material/datetime/datetime.module.mjs +91 -0
  157. package/esm2020/src/app/shared/material/datetime/material.date.mjs +392 -0
  158. package/esm2020/src/app/shared/material/datetime/material.dateshort.mjs +327 -0
  159. package/esm2020/src/app/shared/material/datetime/material.datetime.mjs +416 -0
  160. package/esm2020/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +110 -0
  161. package/esm2020/src/app/shared/material/datetime/testing/mat-date.test.mjs +111 -0
  162. package/esm2020/src/app/shared/material/duration/duration.module.mjs +67 -0
  163. package/{esm2015/src/app/shared/material/duration/duration.utils.js → esm2020/src/app/shared/material/duration/duration.utils.mjs} +0 -0
  164. package/esm2020/src/app/shared/material/duration/material.duration.mjs +257 -0
  165. package/esm2020/src/app/shared/material/latlong/latlong.utils.mjs +266 -0
  166. package/esm2020/src/app/shared/material/latlong/material.latlong.mjs +381 -0
  167. package/esm2020/src/app/shared/material/latlong/material.latlong.module.mjs +67 -0
  168. package/esm2020/src/app/shared/material/latlong/testing/latlong.test.mjs +74 -0
  169. package/{esm2015/src/app/shared/material/material.animations.js → esm2020/src/app/shared/material/material.animations.mjs} +0 -0
  170. package/esm2020/src/app/shared/material/material.module.mjs +224 -0
  171. package/{esm2015/src/app/shared/material/material.testing.module.js → esm2020/src/app/shared/material/material.testing.module.mjs} +68 -34
  172. package/esm2020/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +98 -0
  173. package/esm2020/src/app/shared/material/numpad/numpad.component.mjs +80 -0
  174. package/esm2020/src/app/shared/material/numpad/numpad.container.mjs +190 -0
  175. package/esm2020/src/app/shared/material/numpad/numpad.content.mjs +17 -0
  176. package/esm2020/src/app/shared/material/numpad/numpad.directive.mjs +162 -0
  177. package/esm2020/src/app/shared/material/numpad/numpad.dom-service.mjs +37 -0
  178. package/{esm2015/src/app/shared/material/numpad/numpad.model.js → esm2020/src/app/shared/material/numpad/numpad.model.mjs} +1 -1
  179. package/esm2020/src/app/shared/material/numpad/numpad.module.mjs +60 -0
  180. package/esm2020/src/app/shared/material/numpad/testing/numpad.test.mjs +46 -0
  181. package/esm2020/src/app/shared/material/paginator/material.paginator-i18n.mjs +42 -0
  182. package/esm2020/src/app/shared/material/stepper/material.stepper-i18n.mjs +22 -0
  183. package/esm2020/src/app/shared/material/swipe/material.swipe.mjs +334 -0
  184. package/esm2020/src/app/shared/material/swipe/swipe.module.mjs +51 -0
  185. package/esm2020/src/app/shared/material/swipe/testing/swipe.test.mjs +65 -0
  186. package/esm2020/src/app/shared/observables.mjs +96 -0
  187. package/esm2020/src/app/shared/pipes/arrays.pipe.mjs +114 -0
  188. package/esm2020/src/app/shared/pipes/colors.pipe.mjs +23 -0
  189. package/esm2020/src/app/shared/pipes/date-diff-duration.pipe.mjs +49 -0
  190. package/esm2020/src/app/shared/pipes/date-format.pipe.mjs +42 -0
  191. package/{esm2015/src/app/shared/pipes/date-from-now.pipe.js → esm2020/src/app/shared/pipes/date-from-now.pipe.mjs} +13 -12
  192. package/{esm2015/src/app/shared/pipes/duration.pipe.js → esm2020/src/app/shared/pipes/duration.pipe.mjs} +13 -12
  193. package/esm2020/src/app/shared/pipes/file-size.pipe.mjs +62 -0
  194. package/esm2020/src/app/shared/pipes/form.pipes.mjs +187 -0
  195. package/esm2020/src/app/shared/pipes/highlight.pipe.mjs +48 -0
  196. package/esm2020/src/app/shared/pipes/latlong-format.pipe.mjs +46 -0
  197. package/esm2020/src/app/shared/pipes/maps.pipe.mjs +63 -0
  198. package/esm2020/src/app/shared/pipes/math.pipes.mjs +59 -0
  199. package/esm2020/src/app/shared/pipes/ng-init.pipe.mjs +21 -0
  200. package/{esm2015/src/app/shared/pipes/number-format.pipe.js → esm2020/src/app/shared/pipes/number-format.pipe.mjs} +14 -9
  201. package/esm2020/src/app/shared/pipes/pipes.module.mjs +206 -0
  202. package/esm2020/src/app/shared/pipes/property.pipes.mjs +96 -0
  203. package/esm2020/src/app/shared/pipes/string.pipes.mjs +69 -0
  204. package/esm2020/src/app/shared/pipes/translate-context.pipe.mjs +43 -0
  205. package/esm2020/src/app/shared/platforms.mjs +49 -0
  206. package/esm2020/src/app/shared/services/entity-service.class.mjs +19 -0
  207. package/esm2020/src/app/shared/services/job.utils.mjs +92 -0
  208. package/esm2020/src/app/shared/services/memory-entity-service.class.mjs +253 -0
  209. package/esm2020/src/app/shared/services/progress-bar.service.mjs +32 -0
  210. package/esm2020/src/app/shared/services/startable-service.class.mjs +94 -0
  211. package/esm2020/src/app/shared/services/storage/storage.service.mjs +132 -0
  212. package/esm2020/src/app/shared/services/storage/storage.utils.mjs +13 -0
  213. package/esm2020/src/app/shared/services/translate-context.service.mjs +81 -0
  214. package/esm2020/src/app/shared/services/validator-service.class.mjs +2 -0
  215. package/esm2020/src/app/shared/services.mjs +62 -0
  216. package/esm2020/src/app/shared/shared-routing.module.mjs +63 -0
  217. package/esm2020/src/app/shared/shared.module.mjs +208 -0
  218. package/esm2020/src/app/shared/shared.testing.module.mjs +76 -0
  219. package/esm2020/src/app/shared/testing/tests.page.mjs +33 -0
  220. package/esm2020/src/app/shared/toast/toast.testing.mjs +52 -0
  221. package/esm2020/src/app/shared/toast/toast.testing.module.mjs +45 -0
  222. package/esm2020/src/app/shared/toast/toasts.mjs +121 -0
  223. package/esm2020/src/app/shared/toolbar/modal-toolbar.mjs +58 -0
  224. package/esm2020/src/app/shared/toolbar/toolbar.mjs +226 -0
  225. package/esm2020/src/app/shared/toolbar/toolbar.module.mjs +53 -0
  226. package/{esm2015/src/app/shared/types.js → esm2020/src/app/shared/types.mjs} +0 -0
  227. package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.mjs +57 -0
  228. package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +45 -0
  229. package/esm2020/src/app/shared/upload-file/upload-file-popover.component.mjs +97 -0
  230. package/esm2020/src/app/shared/upload-file/upload-file.component.mjs +204 -0
  231. package/esm2020/src/app/shared/upload-file/upload-file.model.mjs +20 -0
  232. package/esm2020/src/app/shared/validator/form-error-adapter.class.mjs +104 -0
  233. package/esm2020/src/app/shared/validator/validators.mjs +544 -0
  234. package/{esm2015/src/app/shared/version/versions.js → esm2020/src/app/shared/version/versions.mjs} +0 -0
  235. package/esm2020/src/app/social/job/job.model.mjs +26 -0
  236. package/esm2020/src/app/social/job/job.module.mjs +35 -0
  237. package/esm2020/src/app/social/job/job.service.mjs +59 -0
  238. package/esm2020/src/app/social/job/progression/job-progression.component.mjs +201 -0
  239. package/esm2020/src/app/social/job/progression/job-progression.list.mjs +22 -0
  240. package/esm2020/src/app/social/job/testing/job-progression.testing.mjs +51 -0
  241. package/esm2020/src/app/social/job/testing/job-progression.testing.service.mjs +33 -0
  242. package/esm2020/src/app/social/job/testing/job.testing.module.mjs +35 -0
  243. package/esm2020/src/app/social/message/message.form.mjs +81 -0
  244. package/esm2020/src/app/social/message/message.modal.mjs +93 -0
  245. package/esm2020/src/app/social/message/message.model.mjs +65 -0
  246. package/esm2020/src/app/social/message/message.module.mjs +35 -0
  247. package/esm2020/src/app/social/message/message.service.mjs +84 -0
  248. package/{esm2015/src/app/social/social.errors.js → esm2020/src/app/social/social.errors.mjs} +0 -0
  249. package/esm2020/src/app/social/social.module.mjs +47 -0
  250. package/esm2020/src/app/social/social.testing.module.mjs +51 -0
  251. package/esm2020/src/app/social/user-event/notification/user-event-notification.icon.mjs +97 -0
  252. package/esm2020/src/app/social/user-event/notification/user-event-notification.list.mjs +212 -0
  253. package/esm2020/src/app/social/user-event/testing/user-event.testing.mjs +228 -0
  254. package/esm2020/src/app/social/user-event/testing/user-event.testing.model.mjs +107 -0
  255. package/esm2020/src/app/social/user-event/testing/user-event.testing.module.mjs +35 -0
  256. package/esm2020/src/app/social/user-event/testing/user-event.testing.service.mjs +111 -0
  257. package/esm2020/src/app/social/user-event/user-event.model.mjs +2 -0
  258. package/esm2020/src/app/social/user-event/user-event.module.mjs +39 -0
  259. package/esm2020/src/app/social/user-event/user-event.service.mjs +486 -0
  260. package/{esm2015/src/app/vendor.js → esm2020/src/app/vendor.mjs} +1 -1
  261. package/esm2020/src/environments/environment.class.mjs +5 -0
  262. package/esm2020/src/environments/environment.mjs +86 -0
  263. package/esm2020/sumaris-net.ngx-components.mjs +5 -0
  264. package/fesm2015/sumaris-net.ngx-components.mjs +32493 -0
  265. package/fesm2015/sumaris-net.ngx-components.mjs.map +1 -0
  266. package/fesm2020/sumaris-net.ngx-components.mjs +31739 -0
  267. package/fesm2020/sumaris-net.ngx-components.mjs.map +1 -0
  268. package/index.d.ts +5 -0
  269. package/package.json +25 -34
  270. package/public_api.d.ts +23 -28
  271. package/public_test_api.d.ts +37 -0
  272. package/resources/README.md +8 -0
  273. package/src/app/admin/admin-routing.module.d.ts +7 -0
  274. package/src/app/admin/admin.module.d.ts +11 -0
  275. package/src/app/admin/services/person.service.d.ts +3 -0
  276. package/src/app/admin/services/validator/person.validator.d.ts +8 -5
  277. package/src/app/admin/users/list/users.d.ts +10 -7
  278. package/src/app/core/about/modal-about.d.ts +3 -0
  279. package/src/app/core/account/account.d.ts +11 -8
  280. package/src/app/core/auth/form/form-auth.d.ts +6 -3
  281. package/src/app/core/auth/modal/modal-auth.d.ts +3 -0
  282. package/src/app/core/core.module.d.ts +36 -0
  283. package/src/app/core/core.testing.module.d.ts +9 -0
  284. package/src/app/core/form/editor.class.d.ts +7 -2
  285. package/src/app/core/form/entity-editor-modal.class.d.ts +7 -4
  286. package/src/app/core/form/entity-editor.class.d.ts +4 -1
  287. package/src/app/core/form/entity-metadata.component.d.ts +3 -0
  288. package/src/app/core/form/form-buttons-bar.component.d.ts +3 -0
  289. package/src/app/core/form/form.class.d.ts +12 -9
  290. package/src/app/core/form/form.utils.d.ts +4 -4
  291. package/src/app/core/form/list.form.d.ts +10 -7
  292. package/src/app/core/form/properties.form.d.ts +10 -7
  293. package/src/app/core/graphql/graphql.module.d.ts +5 -0
  294. package/src/app/core/graphql/graphql.service.d.ts +9 -2
  295. package/src/app/core/graphql/graphql.utils.d.ts +8 -0
  296. package/src/app/core/home/home.d.ts +4 -1
  297. package/src/app/core/icon/icon.component.d.ts +5 -2
  298. package/src/app/core/icon/icon.module.d.ts +7 -0
  299. package/src/app/core/install/install-upgrade-card.component.d.ts +5 -2
  300. package/src/app/core/install/install-upgrade-card.module.d.ts +10 -0
  301. package/src/app/core/menu/menu.component.d.ts +7 -5
  302. package/src/app/core/menu/menu.module.d.ts +8 -0
  303. package/src/app/core/menu/menu.service.d.ts +3 -0
  304. package/src/app/core/offline/update-offline-mode-card.component.d.ts +3 -0
  305. package/src/app/core/peer/select-peer.modal.d.ts +7 -4
  306. package/src/app/core/peer/select-peer.module.d.ts +9 -0
  307. package/src/app/core/register/confirm/confirm.d.ts +3 -0
  308. package/src/app/core/register/form/form-register.d.ts +10 -7
  309. package/src/app/core/register/modal/modal-register.d.ts +3 -0
  310. package/src/app/core/register/register.module.d.ts +12 -0
  311. package/src/app/core/services/account.service.d.ts +5 -2
  312. package/src/app/core/services/auth-guard.service.d.ts +3 -0
  313. package/src/app/core/services/base-entity-service.class.d.ts +3 -0
  314. package/src/app/core/services/base-graphql-service.class.d.ts +3 -0
  315. package/src/app/core/services/config.service.d.ts +4 -1
  316. package/src/app/core/services/crypto.service.d.ts +3 -0
  317. package/src/app/core/services/local-settings.service.d.ts +5 -1
  318. package/src/app/core/services/model/referential.model.d.ts +1 -1
  319. package/src/app/core/services/network.service.d.ts +6 -5
  320. package/src/app/core/services/pipes/account.pipes.d.ts +7 -0
  321. package/src/app/core/services/pipes/department-to-string.pipe.d.ts +4 -0
  322. package/src/app/core/services/pipes/person-to-string.pipe.d.ts +4 -0
  323. package/src/app/core/services/pipes/usage-mode.pipes.d.ts +7 -0
  324. package/src/app/core/services/platform.service.d.ts +22 -21
  325. package/src/app/core/services/storage/entities-storage.service.d.ts +5 -2
  326. package/src/app/core/services/storage/entity-store.class.d.ts +3 -3
  327. package/src/app/core/services/testing/referential.validator.d.ts +8 -5
  328. package/src/app/core/services/validator/account.validator.d.ts +6 -3
  329. package/src/app/core/services/validator/base.validator.class.d.ts +8 -5
  330. package/src/app/core/services/validator/local-settings.validator.d.ts +8 -5
  331. package/src/app/core/services/validator/user-settings.validator.d.ts +6 -3
  332. package/src/app/core/settings/settings.page.d.ts +8 -5
  333. package/src/app/core/table/actions-column.component.d.ts +3 -0
  334. package/src/app/core/table/entities-table-datasource.class.d.ts +11 -9
  335. package/src/app/core/table/memory-table.class.d.ts +3 -0
  336. package/src/app/core/table/table-select-columns.component.d.ts +4 -5
  337. package/src/app/core/table/table.class.d.ts +53 -34
  338. package/src/app/core/table/testing/table.testing.d.ts +13 -15
  339. package/src/app/core/table/testing/table.testing.module.d.ts +9 -0
  340. package/src/app/core/text-popover/testing/text-popover.testing.d.ts +4 -1
  341. package/src/app/core/text-popover/testing/text-popover.testing.module.d.ts +9 -0
  342. package/src/app/core/text-popover/text-form.component.d.ts +7 -4
  343. package/src/app/core/text-popover/text-popover.component.d.ts +3 -0
  344. package/src/app/shared/alerts.d.ts +4 -4
  345. package/src/app/shared/audio/audio.d.ts +20 -11
  346. package/src/app/shared/audio/audio.testing.d.ts +13 -0
  347. package/src/app/shared/audio/audio.testing.module.d.ts +11 -0
  348. package/src/app/shared/capacitor/keyboard.d.ts +16 -0
  349. package/src/app/shared/capacitor/plugins.d.ts +7 -0
  350. package/src/app/shared/constants.d.ts +1 -0
  351. package/src/app/shared/directives/autofocus.directive.d.ts +9 -7
  352. package/src/app/shared/directives/autotitle.directive.d.ts +3 -0
  353. package/src/app/shared/directives/directives.module.d.ts +10 -0
  354. package/src/app/shared/directives/drag-and-drop.directive.d.ts +3 -0
  355. package/src/app/shared/directives/ng-var.directive.d.ts +3 -0
  356. package/src/app/shared/directives/resizable/resizable.component.d.ts +3 -0
  357. package/src/app/shared/directives/resizable/resizable.directive.d.ts +3 -0
  358. package/src/app/shared/directives/resizable/resizable.module.d.ts +6 -0
  359. package/src/app/shared/file/file.service.d.ts +3 -0
  360. package/src/app/shared/file/file.utils.d.ts +1 -1
  361. package/src/app/shared/form/field.component.d.ts +9 -3
  362. package/src/app/shared/form/field.model.d.ts +2 -2
  363. package/src/app/shared/form/loading-spinner.d.ts +3 -0
  364. package/src/app/shared/forms.d.ts +12 -12
  365. package/src/app/shared/gesture/gesture-config.d.ts +3 -0
  366. package/src/app/shared/gesture/hammer.utils.d.ts +11 -11
  367. package/src/app/shared/guard/component-dirty.guard.d.ts +3 -0
  368. package/src/app/shared/help/help.modal.d.ts +4 -1
  369. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.d.ts +3 -0
  370. package/src/app/shared/hotkeys/hotkeys.service.d.ts +4 -1
  371. package/src/app/shared/hotkeys/shared-hotkeys.module.d.ts +9 -0
  372. package/src/app/shared/image/gallery/image-gallery.component.d.ts +77 -0
  373. package/src/app/shared/image/gallery/image-gallery.module.d.ts +12 -0
  374. package/src/app/shared/image/gallery/testing/gallegry.model.testing.d.ts +12 -0
  375. package/src/app/shared/image/gallery/testing/gallery.service.testing.d.ts +33 -0
  376. package/src/app/shared/image/gallery/testing/gallery.testing.d.ts +15 -0
  377. package/src/app/shared/image/gallery/testing/gallery.testing.module.d.ts +12 -0
  378. package/src/app/shared/image/image.model.d.ts +5 -0
  379. package/src/app/shared/image/image.module.d.ts +8 -0
  380. package/src/app/shared/image/image.service.d.ts +32 -0
  381. package/src/app/shared/inputs.d.ts +3 -3
  382. package/src/app/shared/material/autocomplete/material.autocomplete.config.d.ts +36 -0
  383. package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +11 -40
  384. package/src/app/shared/material/autocomplete/material.autocomplete.module.d.ts +19 -0
  385. package/src/app/shared/material/autocomplete/material.autocomplete.utils.d.ts +4 -0
  386. package/src/app/shared/material/autocomplete/testing/autocomplete.test.d.ts +12 -9
  387. package/src/app/shared/material/badge/badge-icon.directive.d.ts +6 -4
  388. package/src/app/shared/material/badge/badge-icon.module.d.ts +8 -0
  389. package/src/app/shared/material/badge/badge-icon.test.d.ts +4 -1
  390. package/src/app/shared/material/boolean/boolean.module.d.ts +17 -0
  391. package/src/app/shared/material/boolean/material.boolean.d.ts +7 -4
  392. package/src/app/shared/material/chips/chips.module.d.ts +19 -0
  393. package/src/app/shared/material/chips/material.chips.d.ts +11 -8
  394. package/src/app/shared/material/chips/testing/chips.test.d.ts +8 -5
  395. package/src/app/shared/material/datetime/datetime.module.d.ts +22 -0
  396. package/src/app/shared/material/datetime/material.date.d.ts +11 -9
  397. package/src/app/shared/material/datetime/material.dateshort.d.ts +10 -9
  398. package/src/app/shared/material/datetime/material.datetime.d.ts +13 -12
  399. package/src/app/shared/material/datetime/testing/mat-date-time.test.d.ts +11 -9
  400. package/src/app/shared/material/datetime/testing/mat-date.test.d.ts +11 -9
  401. package/src/app/shared/material/duration/duration.module.d.ts +16 -0
  402. package/src/app/shared/material/duration/material.duration.d.ts +8 -5
  403. package/src/app/shared/material/latlong/material.latlong.d.ts +8 -5
  404. package/src/app/shared/material/latlong/material.latlong.module.d.ts +17 -0
  405. package/src/app/shared/material/latlong/testing/latlong.test.d.ts +10 -7
  406. package/src/app/shared/material/material.module.d.ts +43 -0
  407. package/src/app/shared/material/material.testing.module.d.ts +19 -0
  408. package/src/app/shared/material/numpad/numpad.append-to-input.directive.d.ts +3 -0
  409. package/src/app/shared/material/numpad/numpad.component.d.ts +4 -1
  410. package/src/app/shared/material/numpad/numpad.container.d.ts +5 -2
  411. package/src/app/shared/material/numpad/numpad.content.d.ts +3 -0
  412. package/src/app/shared/material/numpad/numpad.directive.d.ts +4 -1
  413. package/src/app/shared/material/numpad/numpad.dom-service.d.ts +3 -0
  414. package/src/app/shared/material/numpad/numpad.model.d.ts +1 -1
  415. package/src/app/shared/material/numpad/numpad.module.d.ts +14 -0
  416. package/src/app/shared/material/numpad/testing/numpad.test.d.ts +7 -4
  417. package/src/app/shared/material/paginator/material.paginator-i18n.d.ts +3 -0
  418. package/src/app/shared/material/stepper/material.stepper-i18n.d.ts +3 -0
  419. package/src/app/shared/material/swipe/material.swipe.d.ts +6 -3
  420. package/src/app/shared/material/swipe/swipe.module.d.ts +13 -0
  421. package/src/app/shared/material/swipe/testing/swipe.test.d.ts +7 -4
  422. package/src/app/shared/pipes/arrays.pipe.d.ts +15 -0
  423. package/src/app/shared/pipes/colors.pipe.d.ts +9 -0
  424. package/src/app/shared/pipes/date-diff-duration.pipe.d.ts +4 -0
  425. package/src/app/shared/pipes/date-format.pipe.d.ts +4 -0
  426. package/src/app/shared/pipes/date-from-now.pipe.d.ts +4 -0
  427. package/src/app/shared/pipes/duration.pipe.d.ts +4 -0
  428. package/src/app/shared/pipes/file-size.pipe.d.ts +3 -0
  429. package/src/app/shared/pipes/form.pipes.d.ts +18 -5
  430. package/src/app/shared/pipes/highlight.pipe.d.ts +4 -0
  431. package/src/app/shared/pipes/latlong-format.pipe.d.ts +7 -0
  432. package/src/app/shared/pipes/maps.pipe.d.ts +10 -0
  433. package/src/app/shared/pipes/math.pipes.d.ts +10 -0
  434. package/src/app/shared/pipes/ng-init.pipe.d.ts +3 -0
  435. package/src/app/shared/pipes/number-format.pipe.d.ts +4 -0
  436. package/src/app/shared/pipes/pipes.module.d.ts +24 -0
  437. package/src/app/shared/pipes/property.pipes.d.ts +6 -0
  438. package/src/app/shared/pipes/string.pipes.d.ts +11 -0
  439. package/src/app/shared/pipes/translate-context.pipe.d.ts +7 -0
  440. package/src/app/shared/platforms.d.ts +1 -0
  441. package/src/app/shared/services/entity-service.class.d.ts +3 -0
  442. package/src/app/shared/services/memory-entity-service.class.d.ts +3 -0
  443. package/src/app/shared/services/progress-bar.service.d.ts +4 -1
  444. package/src/app/shared/services/storage/storage.service.d.ts +23 -0
  445. package/src/app/shared/services/storage/storage.utils.d.ts +19 -0
  446. package/src/app/shared/services/translate-context.service.d.ts +3 -0
  447. package/src/app/shared/services/validator-service.class.d.ts +2 -2
  448. package/src/app/shared/shared-routing.module.d.ts +7 -0
  449. package/src/app/shared/shared.module.d.ts +23 -0
  450. package/src/app/shared/shared.testing.module.d.ts +12 -0
  451. package/src/app/shared/testing/tests.page.d.ts +3 -0
  452. package/src/app/shared/toast/toast.testing.d.ts +3 -0
  453. package/src/app/shared/toast/toast.testing.module.d.ts +9 -0
  454. package/src/app/shared/toolbar/modal-toolbar.d.ts +5 -2
  455. package/src/app/shared/toolbar/toolbar.d.ts +9 -5
  456. package/src/app/shared/toolbar/toolbar.module.d.ts +15 -0
  457. package/src/app/shared/upload-file/testing/upload-file.testing.d.ts +4 -1
  458. package/src/app/shared/upload-file/testing/upload-file.testing.module.d.ts +9 -0
  459. package/src/app/shared/upload-file/upload-file-popover.component.d.ts +3 -0
  460. package/src/app/shared/upload-file/upload-file.component.d.ts +3 -0
  461. package/src/app/shared/validator/form-error-adapter.class.d.ts +3 -0
  462. package/src/app/shared/validator/validators.d.ts +9 -9
  463. package/src/app/social/job/job.module.d.ts +9 -0
  464. package/src/app/social/job/job.service.d.ts +3 -0
  465. package/src/app/social/job/progression/job-progression.component.d.ts +4 -1
  466. package/src/app/social/job/progression/job-progression.list.d.ts +3 -0
  467. package/src/app/social/job/testing/job-progression.testing.d.ts +3 -0
  468. package/src/app/social/job/testing/job-progression.testing.service.d.ts +3 -0
  469. package/src/app/social/job/testing/job.testing.module.d.ts +9 -0
  470. package/src/app/social/message/message.form.d.ts +5 -2
  471. package/src/app/social/message/message.modal.d.ts +5 -2
  472. package/src/app/social/message/message.module.d.ts +9 -0
  473. package/src/app/social/message/message.service.d.ts +3 -0
  474. package/src/app/social/social.module.d.ts +10 -0
  475. package/src/app/social/social.testing.module.d.ts +9 -0
  476. package/src/app/social/user-event/notification/user-event-notification.icon.d.ts +4 -1
  477. package/src/app/social/user-event/notification/user-event-notification.list.d.ts +7 -4
  478. package/src/app/social/user-event/testing/user-event.testing.d.ts +3 -0
  479. package/src/app/social/user-event/testing/user-event.testing.model.d.ts +1 -0
  480. package/src/app/social/user-event/testing/user-event.testing.module.d.ts +9 -0
  481. package/src/app/social/user-event/testing/user-event.testing.service.d.ts +5 -1
  482. package/src/app/social/user-event/user-event.model.d.ts +3 -2
  483. package/src/app/social/user-event/user-event.module.d.ts +10 -0
  484. package/src/app/social/user-event/user-event.service.d.ts +16 -11
  485. package/src/assets/audio/beep-notification.mp3 +0 -0
  486. package/src/assets/i18n/fr.json +9 -2
  487. package/src/environments/environment.class.d.ts +2 -0
  488. package/src/environments/environment.d.ts +1 -1
  489. package/src/theme/_icons.scss +1 -1
  490. package/src/theme/_material.globals.scss +29 -31
  491. package/src/theme/_material.scss +3 -2
  492. package/src/theme/_mixins.scss +4 -4
  493. package/src/theme/_ngx-components.scss +6 -0
  494. package/src/theme/_print.scss +24 -0
  495. package/bundles/sumaris-net.ngx-components.umd.js +0 -35297
  496. package/bundles/sumaris-net.ngx-components.umd.js.map +0 -1
  497. package/bundles/sumaris-net.ngx-components.umd.min.js +0 -25
  498. package/bundles/sumaris-net.ngx-components.umd.min.js.map +0 -1
  499. package/esm2015/public_api.js +0 -244
  500. package/esm2015/src/app/admin/admin-routing.module.js +0 -34
  501. package/esm2015/src/app/admin/admin.module.js +0 -34
  502. package/esm2015/src/app/admin/services/filter/person.filter.js +0 -59
  503. package/esm2015/src/app/admin/services/person.service.js +0 -175
  504. package/esm2015/src/app/admin/services/validator/person.validator.js +0 -37
  505. package/esm2015/src/app/admin/users/list/users.js +0 -216
  506. package/esm2015/src/app/core/about/modal-about.js +0 -63
  507. package/esm2015/src/app/core/account/account.js +0 -240
  508. package/esm2015/src/app/core/auth/form/form-auth.js +0 -134
  509. package/esm2015/src/app/core/auth/modal/modal-auth.js +0 -78
  510. package/esm2015/src/app/core/core.module.js +0 -127
  511. package/esm2015/src/app/core/core.testing.module.js +0 -51
  512. package/esm2015/src/app/core/form/editor.class.js +0 -632
  513. package/esm2015/src/app/core/form/entity-editor-modal.class.js +0 -421
  514. package/esm2015/src/app/core/form/entity-editor.class.js +0 -696
  515. package/esm2015/src/app/core/form/entity-metadata.component.js +0 -22
  516. package/esm2015/src/app/core/form/form-buttons-bar.component.js +0 -63
  517. package/esm2015/src/app/core/form/form.class.js +0 -338
  518. package/esm2015/src/app/core/form/form.utils.js +0 -264
  519. package/esm2015/src/app/core/form/list.form.js +0 -219
  520. package/esm2015/src/app/core/form/properties.form.js +0 -119
  521. package/esm2015/src/app/core/graphql/graphql.module.js +0 -18
  522. package/esm2015/src/app/core/graphql/graphql.service.js +0 -734
  523. package/esm2015/src/app/core/graphql/graphql.utils.js +0 -107
  524. package/esm2015/src/app/core/home/home.js +0 -265
  525. package/esm2015/src/app/core/icon/icon.component.js +0 -32
  526. package/esm2015/src/app/core/icon/icon.module.js +0 -26
  527. package/esm2015/src/app/core/install/install-upgrade-card.component.js +0 -358
  528. package/esm2015/src/app/core/menu/menu.component.js +0 -329
  529. package/esm2015/src/app/core/menu/menu.module.js +0 -28
  530. package/esm2015/src/app/core/offline/update-offline-mode-card.component.js +0 -26
  531. package/esm2015/src/app/core/peer/select-peer.modal.js +0 -134
  532. package/esm2015/src/app/core/register/confirm/confirm.js +0 -86
  533. package/esm2015/src/app/core/register/form/form-register.js +0 -172
  534. package/esm2015/src/app/core/register/modal/modal-register.js +0 -55
  535. package/esm2015/src/app/core/services/account.service.js +0 -1165
  536. package/esm2015/src/app/core/services/auth-guard.service.js +0 -77
  537. package/esm2015/src/app/core/services/base-entity-service.class.js +0 -455
  538. package/esm2015/src/app/core/services/base-graphql-service.class.js +0 -221
  539. package/esm2015/src/app/core/services/config.service.js +0 -385
  540. package/esm2015/src/app/core/services/local-settings.service.js +0 -460
  541. package/esm2015/src/app/core/services/model/account.model.js +0 -50
  542. package/esm2015/src/app/core/services/model/config.model.js +0 -89
  543. package/esm2015/src/app/core/services/model/department.model.js +0 -30
  544. package/esm2015/src/app/core/services/model/entity.decorators.js +0 -104
  545. package/esm2015/src/app/core/services/model/entity.model.js +0 -245
  546. package/esm2015/src/app/core/services/model/peer.model.js +0 -68
  547. package/esm2015/src/app/core/services/model/person.model.js +0 -83
  548. package/esm2015/src/app/core/services/model/referential.model.js +0 -147
  549. package/esm2015/src/app/core/services/model/settings.model.js +0 -75
  550. package/esm2015/src/app/core/services/network.service.js +0 -639
  551. package/esm2015/src/app/core/services/network.utils.js +0 -19
  552. package/esm2015/src/app/core/services/pipes/account.pipes.js +0 -28
  553. package/esm2015/src/app/core/services/pipes/department-to-string.pipe.js +0 -18
  554. package/esm2015/src/app/core/services/pipes/person-to-string.pipe.js +0 -18
  555. package/esm2015/src/app/core/services/pipes/usage-mode.pipes.js +0 -27
  556. package/esm2015/src/app/core/services/platform.service.js +0 -549
  557. package/esm2015/src/app/core/services/storage/entities-storage.service.js +0 -452
  558. package/esm2015/src/app/core/services/storage/entity-store.class.js +0 -461
  559. package/esm2015/src/app/core/services/testing/referential-filter.model.js +0 -23
  560. package/esm2015/src/app/core/services/testing/referential.validator.js +0 -44
  561. package/esm2015/src/app/core/services/validator/account.validator.js +0 -55
  562. package/esm2015/src/app/core/services/validator/base.validator.class.js +0 -48
  563. package/esm2015/src/app/core/services/validator/local-settings.validator.js +0 -72
  564. package/esm2015/src/app/core/services/validator/user-settings.validator.js +0 -30
  565. package/esm2015/src/app/core/settings/settings.page.js +0 -305
  566. package/esm2015/src/app/core/table/actions-column.component.js +0 -74
  567. package/esm2015/src/app/core/table/entities-table-datasource.class.js +0 -389
  568. package/esm2015/src/app/core/table/memory-table.class.js +0 -59
  569. package/esm2015/src/app/core/table/table-select-columns.component.js +0 -44
  570. package/esm2015/src/app/core/table/table.class.js +0 -1651
  571. package/esm2015/src/app/core/table/testing/table.testing.js +0 -241
  572. package/esm2015/src/app/core/table/testing/table.testing.module.js +0 -26
  573. package/esm2015/src/app/core/text-popover/testing/text-popover.testing.js +0 -37
  574. package/esm2015/src/app/core/text-popover/testing/text-popover.testing.module.js +0 -33
  575. package/esm2015/src/app/core/text-popover/text-form.component.js +0 -72
  576. package/esm2015/src/app/core/text-popover/text-popover.component.js +0 -90
  577. package/esm2015/src/app/shared/alerts.js +0 -251
  578. package/esm2015/src/app/shared/audio/audio.js +0 -178
  579. package/esm2015/src/app/shared/dates.js +0 -134
  580. package/esm2015/src/app/shared/directives/autofocus.directive.js +0 -90
  581. package/esm2015/src/app/shared/directives/autotitle.directive.js +0 -27
  582. package/esm2015/src/app/shared/directives/directives.module.js +0 -30
  583. package/esm2015/src/app/shared/directives/drag-and-drop.directive.js +0 -43
  584. package/esm2015/src/app/shared/directives/ng-var.directive.js +0 -32
  585. package/esm2015/src/app/shared/directives/resizable/resizable.component.js +0 -54
  586. package/esm2015/src/app/shared/directives/resizable/resizable.directive.js +0 -34
  587. package/esm2015/src/app/shared/directives/resizable/resizable.module.js +0 -12
  588. package/esm2015/src/app/shared/events.js +0 -61
  589. package/esm2015/src/app/shared/file/csv.utils.js +0 -70
  590. package/esm2015/src/app/shared/file/file.service.js +0 -121
  591. package/esm2015/src/app/shared/file/file.utils.js +0 -116
  592. package/esm2015/src/app/shared/file/images.utils.js +0 -166
  593. package/esm2015/src/app/shared/form/field.component.js +0 -206
  594. package/esm2015/src/app/shared/form/loading-spinner.js +0 -24
  595. package/esm2015/src/app/shared/forms.js +0 -339
  596. package/esm2015/src/app/shared/functions.js +0 -418
  597. package/esm2015/src/app/shared/gesture/hammer.utils.js +0 -2
  598. package/esm2015/src/app/shared/graph/graph-colors.js +0 -256
  599. package/esm2015/src/app/shared/guard/component-dirty.guard.js +0 -61
  600. package/esm2015/src/app/shared/help/help.modal.js +0 -56
  601. package/esm2015/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.js +0 -20
  602. package/esm2015/src/app/shared/hotkeys/hotkeys.service.js +0 -91
  603. package/esm2015/src/app/shared/hotkeys/shared-hotkeys.module.js +0 -29
  604. package/esm2015/src/app/shared/http/http.utils.js +0 -57
  605. package/esm2015/src/app/shared/material/autocomplete/material.autocomplete.js +0 -825
  606. package/esm2015/src/app/shared/material/autocomplete/material.autocomplete.module.js +0 -46
  607. package/esm2015/src/app/shared/material/autocomplete/testing/autocomplete.test.js +0 -200
  608. package/esm2015/src/app/shared/material/badge/badge-icon.directive.js +0 -135
  609. package/esm2015/src/app/shared/material/badge/badge-icon.module.js +0 -23
  610. package/esm2015/src/app/shared/material/badge/badge-icon.test.js +0 -17
  611. package/esm2015/src/app/shared/material/boolean/boolean.module.js +0 -41
  612. package/esm2015/src/app/shared/material/boolean/material.boolean.js +0 -223
  613. package/esm2015/src/app/shared/material/chips/chips.module.js +0 -45
  614. package/esm2015/src/app/shared/material/chips/material.chips.js +0 -636
  615. package/esm2015/src/app/shared/material/chips/testing/chips.test.js +0 -138
  616. package/esm2015/src/app/shared/material/datetime/datetime.module.js +0 -54
  617. package/esm2015/src/app/shared/material/datetime/material.date.js +0 -375
  618. package/esm2015/src/app/shared/material/datetime/material.dateshort.js +0 -316
  619. package/esm2015/src/app/shared/material/datetime/material.datetime.js +0 -398
  620. package/esm2015/src/app/shared/material/datetime/testing/mat-date-time.test.js +0 -110
  621. package/esm2015/src/app/shared/material/datetime/testing/mat-date.test.js +0 -108
  622. package/esm2015/src/app/shared/material/duration/duration.module.js +0 -40
  623. package/esm2015/src/app/shared/material/duration/material.duration.js +0 -246
  624. package/esm2015/src/app/shared/material/latlong/latlong.utils.js +0 -249
  625. package/esm2015/src/app/shared/material/latlong/material.latlong.js +0 -350
  626. package/esm2015/src/app/shared/material/latlong/material.latlong.module.js +0 -41
  627. package/esm2015/src/app/shared/material/latlong/testing/latlong.test.js +0 -70
  628. package/esm2015/src/app/shared/material/material.module.js +0 -93
  629. package/esm2015/src/app/shared/material/numpad/numpad.append-to-input.directive.js +0 -96
  630. package/esm2015/src/app/shared/material/numpad/numpad.component.js +0 -73
  631. package/esm2015/src/app/shared/material/numpad/numpad.container.js +0 -149
  632. package/esm2015/src/app/shared/material/numpad/numpad.content.js +0 -14
  633. package/esm2015/src/app/shared/material/numpad/numpad.directive.js +0 -148
  634. package/esm2015/src/app/shared/material/numpad/numpad.dom-service.js +0 -37
  635. package/esm2015/src/app/shared/material/numpad/numpad.module.js +0 -39
  636. package/esm2015/src/app/shared/material/numpad/testing/numpad.test.js +0 -44
  637. package/esm2015/src/app/shared/material/paginator/material.paginator-i18n.js +0 -44
  638. package/esm2015/src/app/shared/material/stepper/material.stepper-i18n.js +0 -24
  639. package/esm2015/src/app/shared/material/swipe/material.swipe.js +0 -308
  640. package/esm2015/src/app/shared/material/swipe/swipe.module.js +0 -33
  641. package/esm2015/src/app/shared/material/swipe/testing/swipe.test.js +0 -68
  642. package/esm2015/src/app/shared/observables.js +0 -99
  643. package/esm2015/src/app/shared/pipes/arrays.pipe.js +0 -92
  644. package/esm2015/src/app/shared/pipes/date-diff-duration.pipe.js +0 -50
  645. package/esm2015/src/app/shared/pipes/date-format.pipe.js +0 -43
  646. package/esm2015/src/app/shared/pipes/file-size.pipe.js +0 -58
  647. package/esm2015/src/app/shared/pipes/form.pipes.js +0 -177
  648. package/esm2015/src/app/shared/pipes/highlight.pipe.js +0 -43
  649. package/esm2015/src/app/shared/pipes/latlong-format.pipe.js +0 -36
  650. package/esm2015/src/app/shared/pipes/maps.pipe.js +0 -48
  651. package/esm2015/src/app/shared/pipes/math.pipes.js +0 -44
  652. package/esm2015/src/app/shared/pipes/ng-init.pipe.js +0 -18
  653. package/esm2015/src/app/shared/pipes/pipes.module.js +0 -115
  654. package/esm2015/src/app/shared/pipes/property.pipes.js +0 -98
  655. package/esm2015/src/app/shared/pipes/string.pipes.js +0 -53
  656. package/esm2015/src/app/shared/pipes/translate-context.pipe.js +0 -36
  657. package/esm2015/src/app/shared/platforms.js +0 -45
  658. package/esm2015/src/app/shared/services/entity-service.class.js +0 -17
  659. package/esm2015/src/app/shared/services/job.utils.js +0 -96
  660. package/esm2015/src/app/shared/services/memory-entity-service.class.js +0 -260
  661. package/esm2015/src/app/shared/services/progress-bar.service.js +0 -30
  662. package/esm2015/src/app/shared/services/startable-service.class.js +0 -98
  663. package/esm2015/src/app/shared/services/storage.utils.js +0 -41
  664. package/esm2015/src/app/shared/services/translate-context.service.js +0 -83
  665. package/esm2015/src/app/shared/services/validator-service.class.js +0 -2
  666. package/esm2015/src/app/shared/services.js +0 -61
  667. package/esm2015/src/app/shared/shared-routing.module.js +0 -54
  668. package/esm2015/src/app/shared/shared.module.js +0 -135
  669. package/esm2015/src/app/shared/shared.testing.module.js +0 -33
  670. package/esm2015/src/app/shared/testing/tests.page.js +0 -34
  671. package/esm2015/src/app/shared/toast/toast.testing.js +0 -39
  672. package/esm2015/src/app/shared/toast/toast.testing.module.js +0 -33
  673. package/esm2015/src/app/shared/toast/toasts.js +0 -119
  674. package/esm2015/src/app/shared/toolbar/modal-toolbar.js +0 -53
  675. package/esm2015/src/app/shared/toolbar/toolbar.js +0 -213
  676. package/esm2015/src/app/shared/upload-file/testing/upload-file.testing.js +0 -59
  677. package/esm2015/src/app/shared/upload-file/testing/upload-file.testing.module.js +0 -33
  678. package/esm2015/src/app/shared/upload-file/upload-file-popover.component.js +0 -98
  679. package/esm2015/src/app/shared/upload-file/upload-file.component.js +0 -202
  680. package/esm2015/src/app/shared/upload-file/upload-file.model.js +0 -20
  681. package/esm2015/src/app/shared/validator/form-error-adapter.class.js +0 -99
  682. package/esm2015/src/app/shared/validator/validators.js +0 -537
  683. package/esm2015/src/app/social/job/job.model.js +0 -26
  684. package/esm2015/src/app/social/job/job.module.js +0 -25
  685. package/esm2015/src/app/social/job/job.service.js +0 -54
  686. package/esm2015/src/app/social/job/progression/job-progression.component.js +0 -200
  687. package/esm2015/src/app/social/job/progression/job-progression.list.js +0 -20
  688. package/esm2015/src/app/social/job/testing/job-progression.testing.js +0 -48
  689. package/esm2015/src/app/social/job/testing/job-progression.testing.service.js +0 -30
  690. package/esm2015/src/app/social/job/testing/job.testing.module.js +0 -25
  691. package/esm2015/src/app/social/message/message.form.js +0 -73
  692. package/esm2015/src/app/social/message/message.modal.js +0 -96
  693. package/esm2015/src/app/social/message/message.model.js +0 -65
  694. package/esm2015/src/app/social/message/message.module.js +0 -25
  695. package/esm2015/src/app/social/message/message.service.js +0 -87
  696. package/esm2015/src/app/social/social.module.js +0 -28
  697. package/esm2015/src/app/social/social.testing.module.js +0 -39
  698. package/esm2015/src/app/social/user-event/notification/user-event-notification.icon.js +0 -95
  699. package/esm2015/src/app/social/user-event/notification/user-event-notification.list.js +0 -203
  700. package/esm2015/src/app/social/user-event/testing/user-event.testing.js +0 -230
  701. package/esm2015/src/app/social/user-event/testing/user-event.testing.model.js +0 -103
  702. package/esm2015/src/app/social/user-event/testing/user-event.testing.module.js +0 -25
  703. package/esm2015/src/app/social/user-event/testing/user-event.testing.service.js +0 -117
  704. package/esm2015/src/app/social/user-event/user-event.model.js +0 -2
  705. package/esm2015/src/app/social/user-event/user-event.module.js +0 -27
  706. package/esm2015/src/app/social/user-event/user-event.service.js +0 -509
  707. package/esm2015/src/environments/environment.class.js +0 -5
  708. package/esm2015/src/environments/environment.js +0 -81
  709. package/esm2015/sumaris-net.ngx-components.js +0 -21
  710. package/fesm2015/sumaris-net.ngx-components.js +0 -29932
  711. package/fesm2015/sumaris-net.ngx-components.js.map +0 -1
  712. package/src/app/shared/services/storage.utils.d.ts +0 -13
  713. package/sumaris-net.ngx-components.d.ts +0 -20
  714. package/sumaris-net.ngx-components.metadata.json +0 -1
@@ -1,55 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { FormBuilder, Validators } from '@angular/forms';
3
- import { PersonUtils } from '../model/person.model';
4
- import { StatusIds } from '../model/model.enum';
5
- import { AccountService } from '../account.service';
6
- import { SharedValidators } from '../../../shared/validator/validators';
7
- import { AppValidatorService } from './base.validator.class';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "@angular/forms";
10
- import * as i2 from "../account.service";
11
- export class AccountValidatorService extends AppValidatorService {
12
- constructor(formBuilder, accountService) {
13
- super(formBuilder);
14
- this.formBuilder = formBuilder;
15
- this.accountService = accountService;
16
- }
17
- getFormGroupConfig(data) {
18
- const formDef = {
19
- id: [''],
20
- updateDate: [''],
21
- creationDate: [''],
22
- lastName: [data && data.lastName || null, Validators.compose([Validators.required, Validators.minLength(2)])],
23
- firstName: [data && data.firstName || null, Validators.compose([Validators.required, Validators.minLength(2)])],
24
- email: [data && data.email || null, Validators.compose([Validators.required, Validators.email])],
25
- mainProfile: [data && (data.mainProfile || PersonUtils.getMainProfile(data.profiles)) || 'GUEST', Validators.required],
26
- statusId: [data && data.statusId || StatusIds.TEMPORARY, Validators.required],
27
- pubkey: [data && data.pubkey || null, Validators.compose([Validators.required, SharedValidators.pubkey])]
28
- };
29
- // Add additional fields
30
- this.accountService.additionalFields.forEach(field => {
31
- //console.debug("[register-form] Add additional field {" + field.name + "} to form", field);
32
- formDef[field.key] = [data && data[field.key] || null, this.getValidators(field)];
33
- });
34
- return formDef;
35
- }
36
- getValidators(field) {
37
- const validatorFns = [];
38
- if (field.extra && field.extra.account && field.extra.account.required) {
39
- validatorFns.push(Validators.required);
40
- }
41
- if (field.type === 'entity') {
42
- validatorFns.push(SharedValidators.entity);
43
- }
44
- return validatorFns.length ? Validators.compose(validatorFns) : validatorFns.length === 1 ? validatorFns[0] : undefined;
45
- }
46
- }
47
- AccountValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function AccountValidatorService_Factory() { return new AccountValidatorService(i0.ɵɵinject(i1.FormBuilder), i0.ɵɵinject(i2.AccountService)); }, token: AccountValidatorService, providedIn: "root" });
48
- AccountValidatorService.decorators = [
49
- { type: Injectable, args: [{ providedIn: 'root' },] }
50
- ];
51
- AccountValidatorService.ctorParameters = () => [
52
- { type: FormBuilder },
53
- { type: AccountService }
54
- ];
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC52YWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvdmFsaWRhdG9yL2FjY291bnQudmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLFdBQVcsRUFBZSxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzlDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUV0RSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQzs7OztBQUczRCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsbUJBQTRCO0lBRXZFLFlBQ1ksV0FBd0IsRUFDeEIsY0FBOEI7UUFFeEMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBSFQsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO0lBRzFDLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxJQUFjO1FBQy9CLE1BQU0sT0FBTyxHQUFHO1lBQ2QsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ1IsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ2hCLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNsQixRQUFRLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0csU0FBUyxFQUFFLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9HLEtBQUssRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNoRyxXQUFXLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksT0FBTyxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDdEgsUUFBUSxFQUFFLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksU0FBUyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQzdFLE1BQU0sRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQzFHLENBQUM7UUFFRix3QkFBd0I7UUFDeEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbkQsNEZBQTRGO1lBQzVGLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3BGLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUEwQjtRQUN0QyxNQUFNLFlBQVksR0FBa0IsRUFBRSxDQUFDO1FBQ3ZDLElBQUksS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7WUFDdEUsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDeEM7UUFDRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQzNCLFlBQVksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDNUM7UUFFRCxPQUFPLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUMxSCxDQUFDOzs7O1lBMUNGLFVBQVUsU0FBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUM7OztZQVR4QixXQUFXO1lBSVgsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Zvcm1CdWlsZGVyLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9yc30gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtBY2NvdW50fSBmcm9tICcuLi9tb2RlbC9hY2NvdW50Lm1vZGVsJztcbmltcG9ydCB7UGVyc29uVXRpbHN9IGZyb20gJy4uL21vZGVsL3BlcnNvbi5tb2RlbCc7XG5pbXBvcnQge1N0YXR1c0lkc30gZnJvbSAnLi4vbW9kZWwvbW9kZWwuZW51bSc7XG5pbXBvcnQge0FjY291bnRTZXJ2aWNlfSBmcm9tICcuLi9hY2NvdW50LnNlcnZpY2UnO1xuaW1wb3J0IHtTaGFyZWRWYWxpZGF0b3JzfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvdmFsaWRhdG9yL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHtGb3JtRmllbGREZWZpbml0aW9ufSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZm9ybS9maWVsZC5tb2RlbCc7XG5pbXBvcnQge0FwcFZhbGlkYXRvclNlcnZpY2V9IGZyb20gJy4vYmFzZS52YWxpZGF0b3IuY2xhc3MnO1xuXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBBY2NvdW50VmFsaWRhdG9yU2VydmljZSBleHRlbmRzIEFwcFZhbGlkYXRvclNlcnZpY2U8QWNjb3VudD4ge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJvdGVjdGVkIGFjY291bnRTZXJ2aWNlOiBBY2NvdW50U2VydmljZVxuICApIHtcbiAgICBzdXBlcihmb3JtQnVpbGRlcik7XG4gIH1cblxuICBnZXRGb3JtR3JvdXBDb25maWcoZGF0YT86IEFjY291bnQpOiBhbnkge1xuICAgIGNvbnN0IGZvcm1EZWYgPSB7XG4gICAgICBpZDogWycnXSxcbiAgICAgIHVwZGF0ZURhdGU6IFsnJ10sXG4gICAgICBjcmVhdGlvbkRhdGU6IFsnJ10sXG4gICAgICBsYXN0TmFtZTogW2RhdGEgJiYgZGF0YS5sYXN0TmFtZSB8fCBudWxsLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDIpXSldLFxuICAgICAgZmlyc3ROYW1lOiBbZGF0YSAmJiBkYXRhLmZpcnN0TmFtZSB8fCBudWxsLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDIpXSldLFxuICAgICAgZW1haWw6IFtkYXRhICYmIGRhdGEuZW1haWwgfHwgbnVsbCwgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLmVtYWlsXSldLFxuICAgICAgbWFpblByb2ZpbGU6IFtkYXRhICYmIChkYXRhLm1haW5Qcm9maWxlIHx8IFBlcnNvblV0aWxzLmdldE1haW5Qcm9maWxlKGRhdGEucHJvZmlsZXMpKSB8fCAnR1VFU1QnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIHN0YXR1c0lkOiBbZGF0YSAmJiBkYXRhLnN0YXR1c0lkIHx8IFN0YXR1c0lkcy5URU1QT1JBUlksIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgcHVia2V5OiBbZGF0YSAmJiBkYXRhLnB1YmtleSB8fCBudWxsLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFNoYXJlZFZhbGlkYXRvcnMucHVia2V5XSldXG4gICAgfTtcblxuICAgIC8vIEFkZCBhZGRpdGlvbmFsIGZpZWxkc1xuICAgIHRoaXMuYWNjb3VudFNlcnZpY2UuYWRkaXRpb25hbEZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIltyZWdpc3Rlci1mb3JtXSBBZGQgYWRkaXRpb25hbCBmaWVsZCB7XCIgKyBmaWVsZC5uYW1lICsgXCJ9IHRvIGZvcm1cIiwgZmllbGQpO1xuICAgICAgZm9ybURlZltmaWVsZC5rZXldID0gW2RhdGEgJiYgZGF0YVtmaWVsZC5rZXldIHx8IG51bGwsIHRoaXMuZ2V0VmFsaWRhdG9ycyhmaWVsZCldO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZvcm1EZWY7XG4gIH1cblxuICBnZXRWYWxpZGF0b3JzKGZpZWxkOiBGb3JtRmllbGREZWZpbml0aW9uKTogVmFsaWRhdG9yRm4gfCBWYWxpZGF0b3JGbltdIHtcbiAgICBjb25zdCB2YWxpZGF0b3JGbnM6IFZhbGlkYXRvckZuW10gPSBbXTtcbiAgICBpZiAoZmllbGQuZXh0cmEgJiYgZmllbGQuZXh0cmEuYWNjb3VudCAmJiBmaWVsZC5leHRyYS5hY2NvdW50LnJlcXVpcmVkKSB7XG4gICAgICB2YWxpZGF0b3JGbnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICB9XG4gICAgaWYgKGZpZWxkLnR5cGUgPT09ICdlbnRpdHknKSB7XG4gICAgICB2YWxpZGF0b3JGbnMucHVzaChTaGFyZWRWYWxpZGF0b3JzLmVudGl0eSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRvckZucy5sZW5ndGggPyBWYWxpZGF0b3JzLmNvbXBvc2UodmFsaWRhdG9yRm5zKSA6IHZhbGlkYXRvckZucy5sZW5ndGggPT09IDEgPyB2YWxpZGF0b3JGbnNbMF0gOiB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==
@@ -1,48 +0,0 @@
1
- import { ValidatorService } from '@e-is/ngx-material-table';
2
- import { FormBuilder } from '@angular/forms';
3
- import { Directive } from '@angular/core';
4
- import { AppFormUtils } from '../../form/form.utils';
5
- import { changeCaseToUnderscore } from '../../../shared/functions';
6
- import { TranslateService } from '@ngx-translate/core';
7
- export class AppValidatorService extends ValidatorService {
8
- constructor(formBuilder, translate) {
9
- super();
10
- this.formBuilder = formBuilder;
11
- this.translate = translate;
12
- }
13
- getRowValidator() {
14
- return this.getFormGroup();
15
- }
16
- getFormGroup(data) {
17
- return this.formBuilder.group(this.getFormGroupConfig(data));
18
- }
19
- getFormGroupConfig(data) {
20
- return {};
21
- }
22
- getI18nFormErrors(control) {
23
- const errors = AppFormUtils.getFormErrors(control);
24
- return this.getI18nErrors(errors);
25
- }
26
- getI18nErrors(errors) {
27
- return Object.keys(errors || {}).map(errorKey => this.getI18nError(errorKey, errors[errorKey]));
28
- }
29
- getI18nError(errorKey, errorContent) {
30
- const i18nKey = 'ERROR.FIELD_' + changeCaseToUnderscore(errorKey).toUpperCase();
31
- const i18nMessage = this.translate.instant(i18nKey, errorContent);
32
- if (i18nKey !== i18nMessage)
33
- return i18nMessage;
34
- if (typeof errorContent === 'string')
35
- return errorContent;
36
- // Not translated: show error
37
- console.error(`[validator] Cannot translate error key '${errorKey}'. Please override translateError() in your validator`);
38
- return changeCaseToUnderscore(errorKey);
39
- }
40
- }
41
- AppValidatorService.decorators = [
42
- { type: Directive }
43
- ];
44
- AppValidatorService.ctorParameters = () => [
45
- { type: FormBuilder },
46
- { type: TranslateService }
47
- ];
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS52YWxpZGF0b3IuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvdmFsaWRhdG9yL2Jhc2UudmFsaWRhdG9yLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBa0IsV0FBVyxFQUFZLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxFQUFDLHNCQUFzQixFQUFlLE1BQU0sMkJBQTJCLENBQUM7QUFDL0UsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFJckQsTUFBTSxPQUFnQixtQkFDcEIsU0FBUSxnQkFBZ0I7SUFHeEIsWUFDWSxXQUF3QixFQUN4QixTQUE0QjtRQUV0QyxLQUFLLEVBQUUsQ0FBQztRQUhFLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGNBQVMsR0FBVCxTQUFTLENBQW1CO0lBR3hDLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFRO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELGtCQUFrQixDQUFDLElBQVE7UUFDekIsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsaUJBQWlCLENBQUMsT0FBd0I7UUFDeEMsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELGFBQWEsQ0FBQyxNQUFrQjtRQUM5QixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEcsQ0FBQztJQUVTLFlBQVksQ0FBQyxRQUFnQixFQUFFLFlBQWtCO1FBQ3pELE1BQU0sT0FBTyxHQUFHLGNBQWMsR0FBRyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNoRixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDbEUsSUFBSSxPQUFPLEtBQUssV0FBVztZQUFFLE9BQU8sV0FBVyxDQUFDO1FBQ2hELElBQUksT0FBTyxZQUFZLEtBQUssUUFBUTtZQUFFLE9BQU8sWUFBWSxDQUFDO1FBRTFELDZCQUE2QjtRQUM3QixPQUFPLENBQUMsS0FBSyxDQUFDLDJDQUEyQyxRQUFRLHVEQUF1RCxDQUFDLENBQUM7UUFFMUgsT0FBTyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMxQyxDQUFDOzs7WUEzQ0YsU0FBUzs7O1lBUmUsV0FBVztZQUs1QixnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1ZhbGlkYXRvclNlcnZpY2V9IGZyb20gJ0BlLWlzL25neC1tYXRlcmlhbC10YWJsZSc7XG5pbXBvcnQge0Fic3RyYWN0Q29udHJvbCwgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtJVmFsaWRhdG9yU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3ZhbGlkYXRvci1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7RGlyZWN0aXZlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QXBwRm9ybVV0aWxzfSBmcm9tICcuLi8uLi9mb3JtL2Zvcm0udXRpbHMnO1xuaW1wb3J0IHtjaGFuZ2VDYXNlVG9VbmRlcnNjb3JlLCBpc0VtcHR5QXJyYXl9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7Rm9ybUVycm9yc30gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2Zvcm1zJztcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXBwVmFsaWRhdG9yU2VydmljZTxUID0gYW55PlxuICBleHRlbmRzIFZhbGlkYXRvclNlcnZpY2VcbiAgaW1wbGVtZW50cyBJVmFsaWRhdG9yU2VydmljZTxUPiB7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJvdGVjdGVkIHRyYW5zbGF0ZT86IFRyYW5zbGF0ZVNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGdldFJvd1ZhbGlkYXRvcigpOiBGb3JtR3JvdXAge1xuICAgIHJldHVybiB0aGlzLmdldEZvcm1Hcm91cCgpO1xuICB9XG5cbiAgZ2V0Rm9ybUdyb3VwKGRhdGE/OiBUKTogRm9ybUdyb3VwIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh0aGlzLmdldEZvcm1Hcm91cENvbmZpZyhkYXRhKSk7XG4gIH1cblxuICBnZXRGb3JtR3JvdXBDb25maWcoZGF0YT86IFQpOiB7IFtrZXk6IHN0cmluZ106IGFueX0gIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBnZXRJMThuRm9ybUVycm9ycyhjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZXJyb3JzID0gQXBwRm9ybVV0aWxzLmdldEZvcm1FcnJvcnMoY29udHJvbCk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0STE4bkVycm9ycyhlcnJvcnMpO1xuICB9XG5cbiAgZ2V0STE4bkVycm9ycyhlcnJvcnM6IEZvcm1FcnJvcnMpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGVycm9ycyB8fCB7fSkubWFwKGVycm9yS2V5ID0+IHRoaXMuZ2V0STE4bkVycm9yKGVycm9yS2V5LCBlcnJvcnNbZXJyb3JLZXldKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0STE4bkVycm9yKGVycm9yS2V5OiBzdHJpbmcsIGVycm9yQ29udGVudD86IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgaTE4bktleSA9ICdFUlJPUi5GSUVMRF8nICsgY2hhbmdlQ2FzZVRvVW5kZXJzY29yZShlcnJvcktleSkudG9VcHBlckNhc2UoKTtcbiAgICBjb25zdCBpMThuTWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoaTE4bktleSwgZXJyb3JDb250ZW50KTtcbiAgICBpZiAoaTE4bktleSAhPT0gaTE4bk1lc3NhZ2UpIHJldHVybiBpMThuTWVzc2FnZTtcbiAgICBpZiAodHlwZW9mIGVycm9yQ29udGVudCA9PT0gJ3N0cmluZycpIHJldHVybiBlcnJvckNvbnRlbnQ7XG5cbiAgICAvLyBOb3QgdHJhbnNsYXRlZDogc2hvdyBlcnJvclxuICAgIGNvbnNvbGUuZXJyb3IoYFt2YWxpZGF0b3JdIENhbm5vdCB0cmFuc2xhdGUgZXJyb3Iga2V5ICcke2Vycm9yS2V5fScuIFBsZWFzZSBvdmVycmlkZSB0cmFuc2xhdGVFcnJvcigpIGluIHlvdXIgdmFsaWRhdG9yYCk7XG5cbiAgICByZXR1cm4gY2hhbmdlQ2FzZVRvVW5kZXJzY29yZShlcnJvcktleSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,72 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- import { Injectable } from '@angular/core';
3
- import { FormBuilder, Validators } from '@angular/forms';
4
- import { EntityUtils } from '../model/entity.model';
5
- import { SharedValidators } from '../../../shared/validator/validators';
6
- import { NetworkService } from '../network.service';
7
- import { AppValidatorService } from './base.validator.class';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "@angular/forms";
10
- import * as i2 from "../network.service";
11
- export class LocalSettingsValidatorService extends AppValidatorService {
12
- constructor(formBuilder, networkService) {
13
- super(formBuilder);
14
- this.networkService = networkService;
15
- }
16
- getFormGroup(data) {
17
- return this.formBuilder.group({
18
- accountInheritance: [data && data.accountInheritance || true, Validators.required],
19
- locale: [data && data.locale || null, Validators.required],
20
- latLongFormat: [data && data.latLongFormat || null, Validators.required],
21
- usageMode: [data && data.usageMode || 'DESK', Validators.required],
22
- peerUrl: [data && data.peerUrl, Validators.required],
23
- properties: this.getPropertiesArray(data && data.properties)
24
- }, {
25
- asyncValidators: (group) => this.peerAlive(group.get('peerUrl'))
26
- });
27
- }
28
- getPropertiesArray(array) {
29
- const properties = EntityUtils.getMapAsArray(array || {});
30
- return this.formBuilder.array(properties.map(item => this.getPropertyFormGroup(item)));
31
- }
32
- getPropertyFormGroup(data) {
33
- return this.formBuilder.group({
34
- key: [data && data.key || null, Validators.compose([Validators.required, Validators.max(50)])],
35
- value: [data && data.value || null, Validators.compose([Validators.required, Validators.max(100)])]
36
- });
37
- }
38
- /* -- protected methods -- */
39
- peerAlive(peerUrlControl) {
40
- return __awaiter(this, void 0, void 0, function* () {
41
- // Offline mode: no error
42
- if (this.networkService.offline) {
43
- SharedValidators.clearError(peerUrlControl, 'peerAlive');
44
- }
45
- else {
46
- const alive = yield this.networkService.checkPeerAlive(peerUrlControl.value);
47
- // KO: add a validation error
48
- if (!alive) {
49
- const errors = peerUrlControl.errors || {};
50
- errors['peerAlive'] = true;
51
- peerUrlControl.setErrors(errors);
52
- peerUrlControl.markAsTouched({ onlySelf: true });
53
- // Return the error (should be apply to the parent form)
54
- return { peerAlive: true };
55
- }
56
- // OK: remove the existing on control
57
- else {
58
- SharedValidators.clearError(peerUrlControl, 'peerAlive');
59
- }
60
- }
61
- });
62
- }
63
- }
64
- LocalSettingsValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function LocalSettingsValidatorService_Factory() { return new LocalSettingsValidatorService(i0.ɵɵinject(i1.FormBuilder), i0.ɵɵinject(i2.NetworkService)); }, token: LocalSettingsValidatorService, providedIn: "root" });
65
- LocalSettingsValidatorService.decorators = [
66
- { type: Injectable, args: [{ providedIn: 'root' },] }
67
- ];
68
- LocalSettingsValidatorService.ctorParameters = () => [
69
- { type: FormBuilder },
70
- { type: NetworkService }
71
- ];
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc2V0dGluZ3MudmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL3ZhbGlkYXRvci9sb2NhbC1zZXR0aW5ncy52YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFrQixXQUFXLEVBQStCLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3JHLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUVsRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUN0RSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7Ozs7QUFHM0QsTUFBTSxPQUFPLDZCQUE4QixTQUFRLG1CQUFrQztJQUVuRixZQUNFLFdBQXdCLEVBQ2hCLGNBQThCO1FBRXRDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUZYLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtJQUd4QyxDQUFDO0lBRUQsWUFBWSxDQUFDLElBQW9CO1FBQy9CLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDNUIsa0JBQWtCLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ2xGLE1BQU0sRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQzFELGFBQWEsRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ3hFLFNBQVMsRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLE1BQU0sRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ2xFLE9BQU8sRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDcEQsVUFBVSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUM3RCxFQUFFO1lBQ0QsZUFBZSxFQUFFLENBQUMsS0FBZ0IsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQzVFLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxLQUFXO1FBQzVCLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzFELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQzNCLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDeEQsQ0FBQztJQUNKLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxJQUFvQztRQUN2RCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQzVCLEdBQUcsRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5RixLQUFLLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDcEcsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDZCQUE2QjtJQUViLFNBQVMsQ0FBQyxjQUErQjs7WUFFdkQseUJBQXlCO1lBQ3pCLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUU7Z0JBQy9CLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDLENBQUM7YUFDMUQ7aUJBQ0k7Z0JBQ0gsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzdFLDZCQUE2QjtnQkFDN0IsSUFBSSxDQUFDLEtBQUssRUFBRTtvQkFDVixNQUFNLE1BQU0sR0FBcUIsY0FBYyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7b0JBQzdELE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUM7b0JBQzNCLGNBQWMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ2pDLGNBQWMsQ0FBQyxhQUFhLENBQUMsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztvQkFDL0Msd0RBQXdEO29CQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDO2lCQUMzQjtnQkFDRCxxQ0FBcUM7cUJBQ2hDO29CQUNILGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDLENBQUM7aUJBQzFEO2FBQ0Y7UUFDSCxDQUFDO0tBQUE7Ozs7WUE3REYsVUFBVSxTQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQzs7O1lBUFAsV0FBVztZQUk1QixjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JzfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0VudGl0eVV0aWxzfSBmcm9tICcuLi9tb2RlbC9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHtMb2NhbFNldHRpbmdzfSBmcm9tICcuLi9tb2RlbC9zZXR0aW5ncy5tb2RlbCc7XG5pbXBvcnQge1NoYXJlZFZhbGlkYXRvcnN9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC92YWxpZGF0b3IvdmFsaWRhdG9ycyc7XG5pbXBvcnQge05ldHdvcmtTZXJ2aWNlfSBmcm9tICcuLi9uZXR3b3JrLnNlcnZpY2UnO1xuaW1wb3J0IHtBcHBWYWxpZGF0b3JTZXJ2aWNlfSBmcm9tICcuL2Jhc2UudmFsaWRhdG9yLmNsYXNzJztcblxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgTG9jYWxTZXR0aW5nc1ZhbGlkYXRvclNlcnZpY2UgZXh0ZW5kcyBBcHBWYWxpZGF0b3JTZXJ2aWNlPExvY2FsU2V0dGluZ3M+IHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBuZXR3b3JrU2VydmljZTogTmV0d29ya1NlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoZm9ybUJ1aWxkZXIpO1xuICB9XG5cbiAgZ2V0Rm9ybUdyb3VwKGRhdGE/OiBMb2NhbFNldHRpbmdzKTogRm9ybUdyb3VwIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBhY2NvdW50SW5oZXJpdGFuY2U6IFtkYXRhICYmIGRhdGEuYWNjb3VudEluaGVyaXRhbmNlIHx8IHRydWUsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgbG9jYWxlOiBbZGF0YSAmJiBkYXRhLmxvY2FsZSB8fCBudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIGxhdExvbmdGb3JtYXQ6IFtkYXRhICYmIGRhdGEubGF0TG9uZ0Zvcm1hdCB8fCBudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIHVzYWdlTW9kZTogW2RhdGEgJiYgZGF0YS51c2FnZU1vZGUgfHwgJ0RFU0snLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIHBlZXJVcmw6IFtkYXRhICYmIGRhdGEucGVlclVybCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICBwcm9wZXJ0aWVzOiB0aGlzLmdldFByb3BlcnRpZXNBcnJheShkYXRhICYmIGRhdGEucHJvcGVydGllcylcbiAgICB9LCB7XG4gICAgICBhc3luY1ZhbGlkYXRvcnM6IChncm91cDogRm9ybUdyb3VwKSA9PiB0aGlzLnBlZXJBbGl2ZShncm91cC5nZXQoJ3BlZXJVcmwnKSlcbiAgICB9KTtcbiAgfVxuXG4gIGdldFByb3BlcnRpZXNBcnJheShhcnJheT86IGFueSkge1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSBFbnRpdHlVdGlscy5nZXRNYXBBc0FycmF5KGFycmF5IHx8IHt9KTtcbiAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5hcnJheShcbiAgICAgIHByb3BlcnRpZXMubWFwKGl0ZW0gPT4gdGhpcy5nZXRQcm9wZXJ0eUZvcm1Hcm91cChpdGVtKSlcbiAgICApO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlGb3JtR3JvdXAoZGF0YT86IHtrZXk6IHN0cmluZzsgdmFsdWU/OiBzdHJpbmd9KTogRm9ybUdyb3VwIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBrZXk6IFtkYXRhICYmIGRhdGEua2V5IHx8IG51bGwsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5tYXgoNTApXSldLFxuICAgICAgdmFsdWU6IFtkYXRhICYmIGRhdGEudmFsdWUgfHwgbnVsbCwgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1heCgxMDApXSldXG4gICAgfSk7XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgbWV0aG9kcyAtLSAqL1xuXG4gIHByb3RlY3RlZCBhc3luYyBwZWVyQWxpdmUocGVlclVybENvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFByb21pc2U8VmFsaWRhdGlvbkVycm9ycyB8IG51bGw+ICB7XG5cbiAgICAvLyBPZmZsaW5lIG1vZGU6IG5vIGVycm9yXG4gICAgaWYgKHRoaXMubmV0d29ya1NlcnZpY2Uub2ZmbGluZSkge1xuICAgICAgU2hhcmVkVmFsaWRhdG9ycy5jbGVhckVycm9yKHBlZXJVcmxDb250cm9sLCAncGVlckFsaXZlJyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29uc3QgYWxpdmUgPSBhd2FpdCB0aGlzLm5ldHdvcmtTZXJ2aWNlLmNoZWNrUGVlckFsaXZlKHBlZXJVcmxDb250cm9sLnZhbHVlKTtcbiAgICAgIC8vIEtPOiBhZGQgYSB2YWxpZGF0aW9uIGVycm9yXG4gICAgICBpZiAoIWFsaXZlKSB7XG4gICAgICAgIGNvbnN0IGVycm9yczogVmFsaWRhdGlvbkVycm9ycyA9IHBlZXJVcmxDb250cm9sLmVycm9ycyB8fCB7fTtcbiAgICAgICAgZXJyb3JzWydwZWVyQWxpdmUnXSA9IHRydWU7XG4gICAgICAgIHBlZXJVcmxDb250cm9sLnNldEVycm9ycyhlcnJvcnMpO1xuICAgICAgICBwZWVyVXJsQ29udHJvbC5tYXJrQXNUb3VjaGVkKHtvbmx5U2VsZjogdHJ1ZX0pO1xuICAgICAgICAvLyBSZXR1cm4gdGhlIGVycm9yIChzaG91bGQgYmUgYXBwbHkgdG8gdGhlIHBhcmVudCBmb3JtKVxuICAgICAgICByZXR1cm4geyBwZWVyQWxpdmU6IHRydWV9O1xuICAgICAgfVxuICAgICAgLy8gT0s6IHJlbW92ZSB0aGUgZXhpc3Rpbmcgb24gY29udHJvbFxuICAgICAgZWxzZSB7XG4gICAgICAgIFNoYXJlZFZhbGlkYXRvcnMuY2xlYXJFcnJvcihwZWVyVXJsQ29udHJvbCwgJ3BlZXJBbGl2ZScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG4iXX0=
@@ -1,30 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { FormBuilder, Validators } from '@angular/forms';
3
- import { AppValidatorService } from './base.validator.class';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/forms";
6
- export class UserSettingsValidatorService extends AppValidatorService {
7
- constructor(formBuilder) {
8
- super(formBuilder);
9
- }
10
- getFormGroup(data) {
11
- return this.formBuilder.group({
12
- id: [data && data.id || null],
13
- updateDate: [data && data.updateDate || null],
14
- locale: [data && data.locale || null, Validators.required],
15
- latLongFormat: [data && data.latLongFormat || null, Validators.required],
16
- content: this.formBuilder.group({
17
- //usageMode: [data && data.content && data.content.usageMode || 'DESK', Validators.required],
18
- }),
19
- nonce: [data && data.nonce || null]
20
- });
21
- }
22
- }
23
- UserSettingsValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function UserSettingsValidatorService_Factory() { return new UserSettingsValidatorService(i0.ɵɵinject(i1.FormBuilder)); }, token: UserSettingsValidatorService, providedIn: "root" });
24
- UserSettingsValidatorService.decorators = [
25
- { type: Injectable, args: [{ providedIn: 'root' },] }
26
- ];
27
- UserSettingsValidatorService.ctorParameters = () => [
28
- { type: FormBuilder }
29
- ];
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1zZXR0aW5ncy52YWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvdmFsaWRhdG9yL3VzZXItc2V0dGluZ3MudmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLFdBQVcsRUFBYSxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVsRSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQzs7O0FBRzNELE1BQU0sT0FBTyw0QkFBNkIsU0FBUSxtQkFBaUM7SUFFakYsWUFDRSxXQUF3QjtRQUV4QixLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFtQjtRQUM5QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQzVCLEVBQUUsRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztZQUM3QixVQUFVLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUM7WUFDN0MsTUFBTSxFQUFFLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDMUQsYUFBYSxFQUFFLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDeEUsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQ2hDLDZGQUE2RjthQUM1RixDQUFDO1lBQ0YsS0FBSyxFQUFFLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDO1NBQ3BDLENBQUMsQ0FBQztJQUNMLENBQUM7Ozs7WUFwQkYsVUFBVSxTQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQzs7O1lBSnhCLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1VzZXJTZXR0aW5nc30gZnJvbSAnLi4vbW9kZWwvc2V0dGluZ3MubW9kZWwnO1xuaW1wb3J0IHtBcHBWYWxpZGF0b3JTZXJ2aWNlfSBmcm9tICcuL2Jhc2UudmFsaWRhdG9yLmNsYXNzJztcblxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgVXNlclNldHRpbmdzVmFsaWRhdG9yU2VydmljZSBleHRlbmRzIEFwcFZhbGlkYXRvclNlcnZpY2U8VXNlclNldHRpbmdzPiB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyXG4gICkge1xuICAgIHN1cGVyKGZvcm1CdWlsZGVyKTtcbiAgfVxuXG4gIGdldEZvcm1Hcm91cChkYXRhPzogVXNlclNldHRpbmdzKTogRm9ybUdyb3VwIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBpZDogW2RhdGEgJiYgZGF0YS5pZCB8fCBudWxsXSxcbiAgICAgIHVwZGF0ZURhdGU6IFtkYXRhICYmIGRhdGEudXBkYXRlRGF0ZSB8fCBudWxsXSxcbiAgICAgIGxvY2FsZTogW2RhdGEgJiYgZGF0YS5sb2NhbGUgfHwgbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICBsYXRMb25nRm9ybWF0OiBbZGF0YSAmJiBkYXRhLmxhdExvbmdGb3JtYXQgfHwgbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICBjb250ZW50OiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIC8vdXNhZ2VNb2RlOiBbZGF0YSAmJiBkYXRhLmNvbnRlbnQgJiYgZGF0YS5jb250ZW50LnVzYWdlTW9kZSB8fCAnREVTSycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgfSksXG4gICAgICBub25jZTogW2RhdGEgJiYgZGF0YS5ub25jZSB8fCBudWxsXVxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -1,305 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, Injector } from '@angular/core';
3
- import { AccountService } from '../services/account.service';
4
- import { EntityUtils } from '../services/model/entity.model';
5
- import { APP_LOCALES } from '../services/model/settings.model';
6
- import { Peer } from '../services/model/peer.model';
7
- import { FormBuilder } from '@angular/forms';
8
- import { AppForm } from '../form/form.class';
9
- import { AppFormUtils, FormArrayHelper } from '../form/form.utils';
10
- import { TranslateService } from '@ngx-translate/core';
11
- import { ValidatorService } from '@e-is/ngx-material-table';
12
- import { LocalSettingsValidatorService } from '../services/validator/local-settings.validator';
13
- import { PlatformService } from '../services/platform.service';
14
- import { NetworkService } from '../services/network.service';
15
- import { isNil, isNilOrBlank, toBoolean } from '../../shared/functions';
16
- import { LocalSettingsService } from '../services/local-settings.service';
17
- import { merge } from 'rxjs';
18
- import { AlertController } from '@ionic/angular';
19
- import { Alerts } from '../../shared/alerts';
20
- import { Router } from '@angular/router';
21
- export class SettingsPage extends AppForm {
22
- constructor(injector, platform, router, validatorService, alertCtrl, translate, formBuilder, accountService, settings, cd, network, locales) {
23
- super(injector, validatorService.getFormGroup());
24
- this.platform = platform;
25
- this.router = router;
26
- this.validatorService = validatorService;
27
- this.alertCtrl = alertCtrl;
28
- this.translate = translate;
29
- this.formBuilder = formBuilder;
30
- this.accountService = accountService;
31
- this.settings = settings;
32
- this.cd = cd;
33
- this.network = network;
34
- this.locales = locales;
35
- this.saving = false;
36
- this.usageModes = ['FIELD', 'DESK'];
37
- this.propertyDefinitionsByKey = {};
38
- this.propertyDefinitionsByIndex = {};
39
- this.latLongFormats = ['DDMMSS', 'DDMM', 'DD'];
40
- this.propertiesFormHelper = new FormArrayHelper(this.form.get('properties'), (value) => this.validatorService.getPropertyFormGroup(value), (v1, v2) => (!v1 && !v2) || (v1.key === v2.key), (value) => isNil(value) || (isNil(value.key) && isNil(value.value)), {
41
- allowEmptyArray: true
42
- });
43
- this.mobile = this.platform.mobile;
44
- // By default, disable the form
45
- this._enable = false;
46
- }
47
- get accountInheritance() {
48
- return this.form.controls['accountInheritance'].value;
49
- }
50
- get isLogin() {
51
- return this.accountService.isLogin();
52
- }
53
- get propertiesForm() {
54
- return this.form.get('properties');
55
- }
56
- ngOnInit() {
57
- const _super = Object.create(null, {
58
- ngOnInit: { get: () => super.ngOnInit }
59
- });
60
- return __awaiter(this, void 0, void 0, function* () {
61
- _super.ngOnInit.call(this);
62
- // Make sure platform is ready
63
- yield this.platform.ready();
64
- this.propertyDefinitions = this.settings.optionDefs.slice(); // copy options
65
- this.propertyDefinitions.forEach(o => this.propertyDefinitionsByKey[o.key] = o); // fill map
66
- // Load settings
67
- yield this.load();
68
- this.registerSubscription(merge(this.accountService.onLogin, this.accountService.onLogout)
69
- .subscribe(() => this.setAccountInheritance(this.accountInheritance)));
70
- });
71
- }
72
- getPropertyDefinition(index) {
73
- let definition = this.propertyDefinitionsByIndex[index];
74
- if (!definition) {
75
- definition = this.updatePropertyDefinition(index);
76
- this.propertyDefinitionsByIndex[index] = definition;
77
- }
78
- return definition;
79
- }
80
- updatePropertyDefinition(index) {
81
- const key = this.propertiesForm.at(index).controls.key.value;
82
- const definition = key && this.propertyDefinitionsByKey[key] || null;
83
- this.propertyDefinitionsByIndex[index] = definition; // update map by index
84
- this.markForCheck();
85
- return definition;
86
- }
87
- removePropertyAt(index) {
88
- this.propertiesFormHelper.removeAt(index);
89
- this.propertyDefinitionsByIndex = {}; // clear cache by index
90
- this.markForCheck();
91
- }
92
- load() {
93
- return __awaiter(this, void 0, void 0, function* () {
94
- this.markAsLoading();
95
- console.debug('[settings] Loading settings...');
96
- const data = this.settings.settings;
97
- // Set defaults
98
- data.accountInheritance = toBoolean(data.accountInheritance, true);
99
- data.locale = data.locale || this.translate.currentLang || this.translate.defaultLang;
100
- data.latLongFormat = data.latLongFormat || 'DDMMSS';
101
- data.usageMode = data.usageMode || 'DESK';
102
- // Set peer
103
- if (isNilOrBlank(data.peerUrl)) {
104
- yield this.network.ready();
105
- const peer = this.network.peer;
106
- data.peerUrl = peer && peer.url;
107
- }
108
- // Remember data
109
- this.updateView(data);
110
- });
111
- }
112
- updateView(data) {
113
- if (!data)
114
- return; //skip
115
- this.data = data;
116
- const json = Object.assign({}, data);
117
- // Transform properties map into array
118
- json.properties = EntityUtils.getMapAsArray(data.properties || {});
119
- this.propertiesFormHelper.resize(json.properties.length);
120
- this.form.patchValue(json, { emitEvent: false });
121
- this.markAsPristine();
122
- this.enable({ emitEvent: false });
123
- // Apply inheritance
124
- this.setAccountInheritance(data.accountInheritance, { emitEvent: false });
125
- this.markAsLoaded();
126
- this.error = null;
127
- this.markForCheck();
128
- }
129
- save(event, options) {
130
- return __awaiter(this, void 0, void 0, function* () {
131
- if (this.saving)
132
- return; // Skip
133
- if (event)
134
- event.preventDefault();
135
- // Remove all empty controls
136
- this.propertiesFormHelper.removeAllEmpty();
137
- if (!this.form.valid) {
138
- yield AppFormUtils.waitWhilePending(this.form);
139
- if (this.form.invalid) {
140
- AppFormUtils.logFormErrors(this.form);
141
- this.form.markAllAsTouched();
142
- return;
143
- }
144
- }
145
- console.debug('[settings] Saving local settings...');
146
- this.saving = true;
147
- this.error = undefined;
148
- this.markForCheck();
149
- const data = yield this.getValue();
150
- // Check peer alive, before saving
151
- const peerChanged = this.form.get('peerUrl').dirty;
152
- // Clean page history, when peer changed
153
- if (peerChanged)
154
- data.pageHistory = [];
155
- try {
156
- this.disable();
157
- yield this.settings.apply(data);
158
- this.data = data;
159
- this.markAsPristine();
160
- // If peer changed
161
- if (peerChanged) {
162
- // Restart the network
163
- this.network.peer = Peer.parseUrl(data.peerUrl);
164
- }
165
- return true;
166
- }
167
- catch (err) {
168
- console.error(err);
169
- this.error = err && err.message || err;
170
- return false;
171
- }
172
- finally {
173
- this.enable({ emitEvent: false });
174
- // Apply inheritance
175
- this.setAccountInheritance(data.accountInheritance, { emitEvent: false });
176
- // Add a delay, because of option menu that is always opened after save!!
177
- setTimeout(() => {
178
- this.saving = false;
179
- this.markForCheck();
180
- }, 400);
181
- }
182
- });
183
- }
184
- setAccountInheritance(enable, opts) {
185
- // Make sure to update the value in control
186
- this.form.controls['accountInheritance'].setValue(enable, opts);
187
- if (this.data.accountInheritance !== enable) {
188
- this.form.controls['accountInheritance'].markAsDirty({ onlySelf: false });
189
- }
190
- if (enable) {
191
- if (this.isLogin) {
192
- // Force using account settings
193
- const account = this.accountService.account;
194
- // Copy values
195
- if (account.settings) {
196
- if (account.settings.locale)
197
- this.form.get('locale').setValue(account.settings.locale, opts);
198
- if (account.settings.latLongFormat)
199
- this.form.get('latLongFormat').setValue(account.settings.latLongFormat, opts);
200
- }
201
- // Disable fields
202
- this.form.get('locale').disable(opts);
203
- this.form.get('latLongFormat').disable(opts);
204
- }
205
- else {
206
- // Enable fields
207
- this.form.get('locale').enable(opts);
208
- this.form.get('latLongFormat').enable(opts);
209
- }
210
- }
211
- else {
212
- // Restore previous values
213
- this.form.get('locale').setValue(this.data.locale, opts);
214
- this.form.get('latLongFormat').setValue(this.data.latLongFormat, opts);
215
- // Enable fields
216
- this.form.get('locale').enable(opts);
217
- this.form.get('latLongFormat').enable(opts);
218
- }
219
- // Mark for check, if need
220
- if (!opts || opts.emitEvent) {
221
- this.markForCheck();
222
- }
223
- }
224
- showSelectPeerModal(opts) {
225
- return __awaiter(this, void 0, void 0, function* () {
226
- const peer = yield this.network.showSelectPeerModal(opts);
227
- if (peer && peer.url) {
228
- const control = this.form.get('peerUrl');
229
- control.setValue(peer.url, { emitEvent: true, onlySelf: false });
230
- control.markAsDirty({ onlySelf: false });
231
- this.markAsDirty();
232
- }
233
- });
234
- }
235
- cancel(event) {
236
- return __awaiter(this, void 0, void 0, function* () {
237
- yield this.load();
238
- });
239
- }
240
- close(event) {
241
- return __awaiter(this, void 0, void 0, function* () {
242
- if (this.saving)
243
- return;
244
- // Back to home
245
- return this.router.navigateByUrl('/', { replaceUrl: true }); // back to home
246
- });
247
- }
248
- clearCache(event) {
249
- return __awaiter(this, void 0, void 0, function* () {
250
- const confirm = yield Alerts.askActionConfirmation(this.alertCtrl, this.translate, true, event);
251
- if (confirm) {
252
- yield this.network.clearCache();
253
- this.settings.removeOfflineFeatures();
254
- }
255
- });
256
- }
257
- /* -- protected functions -- */
258
- getValue() {
259
- return __awaiter(this, void 0, void 0, function* () {
260
- const json = yield this.getJsonValueToSave();
261
- // Override properties from account
262
- if (json.accountInheritance && this.isLogin) {
263
- const account = this.accountService.account;
264
- const userSettings = account && account.settings;
265
- console.debug(`[settings] Applying account inheritance {locale: '${userSettings.locale}', latLongFormat: '${userSettings.latLongFormat}'}...`);
266
- json.locale = userSettings.locale || json.locale;
267
- json.latLongFormat = userSettings.latLongFormat || json.latLongFormat;
268
- }
269
- return json;
270
- });
271
- }
272
- getJsonValueToSave() {
273
- const json = this.form.value;
274
- json.properties = EntityUtils.getPropertyArrayAsObject(json.properties);
275
- return Promise.resolve(json);
276
- }
277
- markForCheck() {
278
- this.cd.markForCheck();
279
- }
280
- }
281
- SettingsPage.decorators = [
282
- { type: Component, args: [{
283
- selector: 'page-settings',
284
- template: "<app-toolbar [title]=\"'SETTINGS.TITLE'|translate\" color=\"primary\"\n [hasValidate]=\"dirty && !saving\"\n [hasClose]=\"!dirty && !saving\"\n (onValidate)=\"save($event)\"\n (onClose)=\"close($event)\">\n\n <ion-buttons slot=\"end\">\n <!-- options menu -->\n <ion-button [matMenuTriggerFor]=\"optionsMenu\"\n *ngIf=\"!saving\"\n [disabled]=\"saving\">\n <mat-icon slot=\"icon-only\">more_vert</mat-icon>\n </ion-button>\n </ion-buttons>\n</app-toolbar>\n\n<!-- Options menu -->\n<mat-menu #optionsMenu=\"matMenu\">\n <!-- Clear cache -->\n <button mat-menu-item (click)=\"clearCache($event)\">\n <ion-label translate>SETTINGS.BTN_CLEAR_CACHE</ion-label>\n </button>\n\n <!-- Reset -->\n <button mat-menu-item\n [disabled]=\"!dirty\"\n (click)=\"cancel($event)\">\n <ion-label>\n <mat-icon><ion-icon slot=\"start\" name=\"refresh\"></ion-icon></mat-icon>&nbsp;\n <span translate>COMMON.BTN_RESET</span>\n </ion-label>\n </button>\n</mat-menu>\n\n<ion-content>\n\n <form [formGroup]=\"form\" novalidate (ngSubmit)=\"save($event)\" class=\"form-container\">\n\n <ion-grid class=\"ion-no-padding\">\n <ion-row class=\"ion-no-padding\">\n\n <!-- left margin -->\n <ion-col size=\"0\" size-lg=\"2\">&nbsp;\n </ion-col>\n\n <ion-col class=\"ion-padding\">\n\n <!-- error -->\n <ion-item *ngIf=\"error\" lines=\"none\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error|translate\"></ion-label>\n </ion-item>\n\n <p [innerHTML]=\"'SETTINGS.DESCRIPTION'|translate\"></p>\n\n <!-- account inheritance (desktop) -->\n <mat-form-field [hidden]=\"!isLogin\" *ngIf=\"!mobile; else accountInheritanceMobile\">\n <input matInput hidden formControlName=\"accountInheritance\" type=\"text\">\n\n <!-- check box (if desktop) -->\n <mat-checkbox\n *ngIf=\"!mobile; else accountInheritanceMobile\"\n (change)=\"setAccountInheritance($event.checked)\"\n [checked]=\"accountInheritance\">\n <span translate>SETTINGS.INHERIT_FROM_ACCOUNT</span>\n </mat-checkbox>\n\n <mat-error *ngIf=\"form.controls.accountInheritance.hasError('required')\" translate>ERROR.FIELD_REQUIRED\n </mat-error>\n </mat-form-field>\n\n <!-- account inheritance (if mobile) -->\n <ng-template #accountInheritanceMobile>\n <mat-form-field [hidden]=\"!isLogin\">\n <input matInput hidden formControlName=\"accountInheritance\" type=\"text\">\n\n <!-- slide toggle -->\n <ion-text translate>SETTINGS.INHERIT_FROM_ACCOUNT</ion-text>\n <mat-slide-toggle matSuffix\n (change)=\"setAccountInheritance($event.checked)\"\n [checked]=\"accountInheritance\">\n\n </mat-slide-toggle>\n <mat-error *ngIf=\"form.controls.accountInheritance.hasError('required')\" translate>ERROR.FIELD_REQUIRED\n </mat-error>\n </mat-form-field>\n </ng-template>\n\n <!-- locale -->\n <mat-form-field>\n <mat-select [placeholder]=\"'SETTINGS.LOCALE'|translate\" formControlName=\"locale\" required>\n <mat-option *ngFor=\"let item of locales\" [value]=\"item.key\">\n {{item.value}}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"form.controls.locale.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n\n <!-- Network entry -->\n <h3>\n <ion-text translate>SETTINGS.NETWORK_DIVIDER</ion-text>\n </h3>\n\n <!-- Peer address -->\n <mat-form-field>\n <input matInput type=\"text\" [placeholder]=\"'SETTINGS.PEER_URL'|translate\" formControlName=\"peerUrl\"\n required>\n\n <button mat-icon-button type=\"button\" matSuffix (click)=\"showSelectPeerModal()\" tabindex=\"-1\"\n [title]=\"'SETTINGS.BTN_CHANGE_PEER'|translate\">\n <mat-icon>search</mat-icon>\n </button>\n\n <mat-error *ngIf=\"form.controls.peerUrl.hasError('required')\"\n translate>ERROR.FIELD_REQUIRED\n </mat-error>\n <mat-error *ngIf=\"form.controls.peerUrl.hasError('peerAlive')\"\n translate>SETTINGS.ERROR.PEER_NOT_REACHABLE\n </mat-error>\n <mat-error *ngIf=\"form.controls.peerUrl.hasError('peerNotCompatible')\"\n translate>SETTINGS.ERROR.PEER_NOT_COMPATIBLE\n </mat-error>\n </mat-form-field>\n\n <!-- Offline mode (if mobile) -->\n <mat-form-field *ngIf=\"mobile\">\n <input matInput hidden formControlName=\"accountInheritance\" type=\"text\">\n\n <!-- slide toggle -->\n <ion-text translate>SETTINGS.OFFLINE_MODE</ion-text>\n <mat-slide-toggle matSuffix\n (change)=\"network.setForceOffline($event.checked)\"\n [checked]=\"network.offline\">\n\n </mat-slide-toggle>\n </mat-form-field>\n\n <!-- Data entry -->\n <h3>\n <ion-text translate>SETTINGS.DATA_ENTRY_DIVIDER</ion-text>\n </h3>\n\n <!-- Usage mode -->\n <mat-form-field>\n <mat-select [placeholder]=\"'SETTINGS.USAGE_MODE'|translate\" formControlName=\"usageMode\"\n required>\n <mat-option *ngFor=\"let item of usageModes\" [value]=\"item\">\n {{'SETTINGS.USAGE_MODES.'+item|translate}}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"form.controls.usageMode.hasError('required')\"\n translate>ERROR.FIELD_REQUIRED\n </mat-error>\n </mat-form-field>\n\n <!-- lat/long format-->\n <mat-form-field>\n <mat-select [placeholder]=\"'SETTINGS.LAT_LONG_FORMAT'|translate\" formControlName=\"latLongFormat\"\n required>\n <mat-option *ngFor=\"let item of latLongFormats\" [value]=\"item\">\n {{'COMMON.LAT_LONG.'+item+'_PLACEHOLDER'|translate}}\n </mat-option>\n </mat-select>\n <mat-error\n *ngIf=\"form.controls.latLongFormat.hasError('required')\"\n translate>ERROR.FIELD_REQUIRED\n </mat-error>\n </mat-form-field>\n\n <!-- fields options -->\n <ion-grid formArrayName=\"properties\" class=\"ion-no-padding\">\n <ion-row class=\"ion-no-padding\">\n <ion-col class=\"ion-no-padding ion-align-self-end\" size=\"12\">\n <span class=\"toolbar-spacer\"></span>\n\n <!-- Show more options -->\n <ion-button color=\"light\" *ngIf=\"propertiesForm?.length === 0\"\n [title]=\"'SETTINGS.BTN_SHOW_MORE_HELP'|translate\"\n (click)=\"propertiesFormHelper.add()\">\n <ion-label translate>COMMON.BTN_SHOW_MORE</ion-label>\n <mat-icon slot=\"end\">arrow_drop_down</mat-icon>\n </ion-button>\n </ion-col>\n </ion-row>\n\n <!-- Fields options -->\n <ng-container *ngFor=\"let propertyForm of propertiesForm?.controls; let i=index\">\n <ion-row class=\"ion-no-padding\" [formGroupName]=\"i\">\n\n <!-- property key -->\n <ion-col class=\"ion-no-padding\">\n <mat-form-field>\n <mat-select formControlName=\"key\"\n [placeholder]=\" 'SETTINGS.PROPERTY_KEY'|translate\">\n <mat-option *ngFor=\"let item of propertyDefinitions\" [value]=\"item.key\">{{ item.label | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n\n <!-- property value -->\n <ion-col class=\"ion-no-padding\" padding-left>\n <app-form-field *ngIf=\"getPropertyDefinition(i); let definition\"\n floatLabel=\"never\"\n [definition]=\"definition\"\n [formControl]=\"propertyForm.controls.value\"\n [placeholder]=\"'SETTINGS.PROPERTY_VALUE' | translate\"\n [required]=\"true\">\n </app-form-field>\n </ion-col>\n <ion-col size=\"2\" class=\"ion-no-padding\">\n <button type=\"button\" mat-icon-button color=\"light\"\n [disabled]=\"loading\"\n [title]=\"'COMMON.BTN_DELETE'|translate\"\n (click)=\"removePropertyAt(i)\">\n <mat-icon>close</mat-icon>\n </button>\n <button *ngIf=\"propertiesFormHelper.isLast(i)\"\n type=\"button\"\n mat-icon-button\n color=\"light\"\n [disabled]=\"loading\"\n [title]=\"'SETTINGS.BTN_ADD_PROPERTY'|translate\"\n (click)=\"propertiesFormHelper.add()\">\n <mat-icon>add</mat-icon>\n </button>\n </ion-col>\n </ion-row>\n </ng-container>\n </ion-grid>\n </ion-col>\n\n <!-- right margin -->\n <ion-col size=\"0\" size-lg=\"2\">&nbsp;\n </ion-col>\n </ion-row>\n </ion-grid>\n\n\n </form>\n</ion-content>\n\n<ion-footer hidden-xs hidden-sm hidden-mobile>\n <app-form-buttons-bar (onCancel)=\"cancel()\" (onSave)=\"save($event)\" [disabled]=\"!form.dirty || saving\"></app-form-buttons-bar>\n</ion-footer>\n",
285
- providers: [
286
- { provide: ValidatorService, useExisting: LocalSettingsValidatorService },
287
- ],
288
- changeDetection: ChangeDetectionStrategy.OnPush
289
- },] }
290
- ];
291
- SettingsPage.ctorParameters = () => [
292
- { type: Injector },
293
- { type: PlatformService },
294
- { type: Router },
295
- { type: LocalSettingsValidatorService },
296
- { type: AlertController },
297
- { type: TranslateService },
298
- { type: FormBuilder },
299
- { type: AccountService },
300
- { type: LocalSettingsService },
301
- { type: ChangeDetectorRef },
302
- { type: NetworkService },
303
- { type: Array, decorators: [{ type: Inject, args: [APP_LOCALES,] }] }
304
- ];
305
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3MucGFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXR0aW5ncy9zZXR0aW5ncy5wYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQW9CLE1BQU0sZUFBZSxDQUFDO0FBQ3pILE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0QsT0FBTyxFQUFDLFdBQVcsRUFBeUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDbEQsT0FBTyxFQUFZLFdBQVcsRUFBeUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDM0MsT0FBTyxFQUFDLFlBQVksRUFBRSxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSxnREFBZ0QsQ0FBQztBQUM3RixPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDN0QsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3RFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBRXhFLE9BQU8sRUFBQyxLQUFLLEVB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QWEsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDO2FBQ3ZFO1lBRUQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0tBQUE7SUFFUyxrQkFBa0I7UUFDMUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXhFLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRVMsWUFBWTtRQUNwQixJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pCLENBQUM7OztZQWpVRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGVBQWU7Z0JBQ3pCLHVwVUFBaUM7Z0JBQ2pDLFNBQVMsRUFBRTtvQkFDVCxFQUFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsNkJBQTZCLEVBQUM7aUJBQ3hFO2dCQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2FBQ2hEOzs7WUE5QnNFLFFBQVE7WUFXdkUsZUFBZTtZQVNmLE1BQU07WUFWTiw2QkFBNkI7WUFPN0IsZUFBZTtZQVRmLGdCQUFnQjtZQUhMLFdBQVc7WUFKdEIsY0FBYztZQWFkLG9CQUFvQjtZQWRLLGlCQUFpQjtZQVkxQyxjQUFjO3dDQTBEakIsTUFBTSxTQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbmplY3QsIEluamVjdG9yLCBPbkRlc3Ryb3ksIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjY291bnRTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcy9hY2NvdW50LnNlcnZpY2UnO1xuaW1wb3J0IHtFbnRpdHlVdGlsc30gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvZW50aXR5Lm1vZGVsJztcbmltcG9ydCB7QVBQX0xPQ0FMRVMsIExvY2FsZUNvbmZpZywgTG9jYWxTZXR0aW5ncywgVXNhZ2VNb2RlfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9zZXR0aW5ncy5tb2RlbCc7XG5pbXBvcnQge1BlZXJ9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL3BlZXIubW9kZWwnO1xuaW1wb3J0IHtGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0FwcEZvcm19IGZyb20gJy4uL2Zvcm0vZm9ybS5jbGFzcyc7XG5pbXBvcnQge0FwcEZvcm1VdGlscywgRm9ybUFycmF5SGVscGVyfSBmcm9tICcuLi9mb3JtL2Zvcm0udXRpbHMnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7VmFsaWRhdG9yU2VydmljZX0gZnJvbSAnQGUtaXMvbmd4LW1hdGVyaWFsLXRhYmxlJztcbmltcG9ydCB7TG9jYWxTZXR0aW5nc1ZhbGlkYXRvclNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2VzL3ZhbGlkYXRvci9sb2NhbC1zZXR0aW5ncy52YWxpZGF0b3InO1xuaW1wb3J0IHtQbGF0Zm9ybVNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2VzL3BsYXRmb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHtOZXR3b3JrU2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMvbmV0d29yay5zZXJ2aWNlJztcbmltcG9ydCB7aXNOaWwsIGlzTmlsT3JCbGFuaywgdG9Cb29sZWFufSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7TG9jYWxTZXR0aW5nc1NlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2VzL2xvY2FsLXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHtGb3JtRmllbGREZWZpbml0aW9uLCBGb3JtRmllbGREZWZpbml0aW9uTWFwfSBmcm9tICcuLi8uLi9zaGFyZWQvZm9ybS9maWVsZC5tb2RlbCc7XG5pbXBvcnQge21lcmdlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7QWxlcnRDb250cm9sbGVyfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQge0FsZXJ0c30gZnJvbSAnLi4vLi4vc2hhcmVkL2FsZXJ0cyc7XG5pbXBvcnQge1Byb3BlcnR5fSBmcm9tICcuLi8uLi9zaGFyZWQvdHlwZXMnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge0NhbkxlYXZlfSBmcm9tICcuLi8uLi9zaGFyZWQvZ3VhcmQvY29tcG9uZW50LWRpcnR5Lmd1YXJkJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncGFnZS1zZXR0aW5ncycsXG4gIHRlbXBsYXRlVXJsOiAnc2V0dGluZ3MucGFnZS5odG1sJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge3Byb3ZpZGU6IFZhbGlkYXRvclNlcnZpY2UsIHVzZUV4aXN0aW5nOiBMb2NhbFNldHRpbmdzVmFsaWRhdG9yU2VydmljZX0sXG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFNldHRpbmdzUGFnZSBleHRlbmRzIEFwcEZvcm08TG9jYWxTZXR0aW5ncz4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQ2FuTGVhdmUge1xuXG4gIHByaXZhdGUgZGF0YTogTG9jYWxTZXR0aW5ncztcblxuICBtb2JpbGU6IGJvb2xlYW47XG4gIHNhdmluZyA9IGZhbHNlO1xuICB1c2FnZU1vZGVzOiBVc2FnZU1vZGVbXSA9IFsnRklFTEQnLCAnREVTSyddO1xuXG4gIHByb3BlcnR5RGVmaW5pdGlvbnM6IEZvcm1GaWVsZERlZmluaXRpb25bXTtcbiAgcHJvcGVydHlEZWZpbml0aW9uc0J5S2V5OiBGb3JtRmllbGREZWZpbml0aW9uTWFwID0ge307XG4gIHByb3BlcnR5RGVmaW5pdGlvbnNCeUluZGV4OiB7IFtpbmRleDogbnVtYmVyXTogRm9ybUZpZWxkRGVmaW5pdGlvbiB9ID0ge307XG4gIHByb3BlcnRpZXNGb3JtSGVscGVyOiBGb3JtQXJyYXlIZWxwZXI8UHJvcGVydHk+O1xuXG4gIGxhdExvbmdGb3JtYXRzID0gWydERE1NU1MnLCAnRERNTScsICdERCddO1xuXG4gIGdldCBhY2NvdW50SW5oZXJpdGFuY2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybS5jb250cm9sc1snYWNjb3VudEluaGVyaXRhbmNlJ10udmFsdWU7XG4gIH1cblxuICBnZXQgaXNMb2dpbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hY2NvdW50U2VydmljZS5pc0xvZ2luKCk7XG4gIH1cblxuICBnZXQgcHJvcGVydGllc0Zvcm0oKTogRm9ybUFycmF5IHtcbiAgICByZXR1cm4gdGhpcy5mb3JtLmdldCgncHJvcGVydGllcycpIGFzIEZvcm1BcnJheTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcm90ZWN0ZWQgcGxhdGZvcm06IFBsYXRmb3JtU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJvdGVjdGVkIHZhbGlkYXRvclNlcnZpY2U6IExvY2FsU2V0dGluZ3NWYWxpZGF0b3JTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBhbGVydEN0cmw6IEFsZXJ0Q29udHJvbGxlcixcbiAgICBwcm90ZWN0ZWQgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJvdGVjdGVkIGFjY291bnRTZXJ2aWNlOiBBY2NvdW50U2VydmljZSxcbiAgICBwcm90ZWN0ZWQgc2V0dGluZ3M6IExvY2FsU2V0dGluZ3NTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHVibGljIG5ldHdvcms6IE5ldHdvcmtTZXJ2aWNlLFxuICAgIEBJbmplY3QoQVBQX0xPQ0FMRVMpIHB1YmxpYyBsb2NhbGVzOiBMb2NhbGVDb25maWdbXVxuICApIHtcbiAgICBzdXBlcihpbmplY3RvciwgdmFsaWRhdG9yU2VydmljZS5nZXRGb3JtR3JvdXAoKSk7XG5cbiAgICB0aGlzLnByb3BlcnRpZXNGb3JtSGVscGVyID0gbmV3IEZvcm1BcnJheUhlbHBlcjxQcm9wZXJ0eT4oXG4gICAgICB0aGlzLmZvcm0uZ2V0KCdwcm9wZXJ0aWVzJykgYXMgRm9ybUFycmF5LFxuICAgICAgKHZhbHVlKSA9PiB0aGlzLnZhbGlkYXRvclNlcnZpY2UuZ2V0UHJvcGVydHlGb3JtR3JvdXAodmFsdWUpLFxuICAgICAgKHYxLCB2MikgPT4gKCF2MSAmJiAhdjIpIHx8ICh2MS5rZXkgPT09IHYyLmtleSksXG4gICAgICAodmFsdWUpID0+ICBpc05pbCh2YWx1ZSkgfHwgKGlzTmlsKHZhbHVlLmtleSkgJiYgaXNOaWwodmFsdWUudmFsdWUpKSxcbiAgICAgIHtcbiAgICAgICAgYWxsb3dFbXB0eUFycmF5OiB0cnVlXG4gICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMubW9iaWxlID0gdGhpcy5wbGF0Zm9ybS5tb2JpbGU7XG5cbiAgICAvLyBCeSBkZWZhdWx0LCBkaXNhYmxlIHRoZSBmb3JtXG4gICAgdGhpcy5fZW5hYmxlID0gZmFsc2U7XG4gIH1cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgLy8gTWFrZSBzdXJlIHBsYXRmb3JtIGlzIHJlYWR5XG4gICAgYXdhaXQgdGhpcy5wbGF0Zm9ybS5yZWFkeSgpO1xuXG4gICAgdGhpcy5wcm9wZXJ0eURlZmluaXRpb25zID0gdGhpcy5zZXR0aW5ncy5vcHRpb25EZWZzLnNsaWNlKCk7IC8vIGNvcHkgb3B0aW9uc1xuICAgIHRoaXMucHJvcGVydHlEZWZpbml0aW9ucy5mb3JFYWNoKG8gPT4gdGhpcy5wcm9wZXJ0eURlZmluaXRpb25zQnlLZXlbby5rZXldID0gbyk7IC8vIGZpbGwgbWFwXG5cbiAgICAvLyBMb2FkIHNldHRpbmdzXG4gICAgYXdhaXQgdGhpcy5sb2FkKCk7XG5cbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgbWVyZ2UoXG4gICAgICAgIHRoaXMuYWNjb3VudFNlcnZpY2Uub25Mb2dpbixcbiAgICAgICAgdGhpcy5hY2NvdW50U2VydmljZS5vbkxvZ291dFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnNldEFjY291bnRJbmhlcml0YW5jZSh0aGlzLmFjY291bnRJbmhlcml0YW5jZSkpKTtcbiAgfVxuXG4gIGdldFByb3BlcnR5RGVmaW5pdGlvbihpbmRleDogbnVtYmVyKTogRm9ybUZpZWxkRGVmaW5pdGlvbiB7XG4gICAgbGV0IGRlZmluaXRpb24gPSB0aGlzLnByb3BlcnR5RGVmaW5pdGlvbnNCeUluZGV4W2luZGV4XTtcbiAgICBpZiAoIWRlZmluaXRpb24pIHtcbiAgICAgIGRlZmluaXRpb24gPSB0aGlzLnVwZGF0ZVByb3BlcnR5RGVmaW5pdGlvbihpbmRleCk7XG4gICAgICB0aGlzLnByb3BlcnR5RGVmaW5pdGlvbnNCeUluZGV4W2luZGV4XSA9IGRlZmluaXRpb247XG4gICAgfVxuICAgIHJldHVybiBkZWZpbml0aW9uO1xuICB9XG5cbiAgdXBkYXRlUHJvcGVydHlEZWZpbml0aW9uKGluZGV4OiBudW1iZXIpOiBGb3JtRmllbGREZWZpbml0aW9uIHtcbiAgICBjb25zdCBrZXkgPSAodGhpcy5wcm9wZXJ0aWVzRm9ybS5hdChpbmRleCkgYXMgRm9ybUdyb3VwKS5jb250cm9scy5rZXkudmFsdWU7XG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IGtleSAmJiB0aGlzLnByb3BlcnR5RGVmaW5pdGlvbnNCeUtleVtrZXldIHx8IG51bGw7XG4gICAgdGhpcy5wcm9wZXJ0eURlZmluaXRpb25zQnlJbmRleFtpbmRleF0gPSBkZWZpbml0aW9uOyAvLyB1cGRhdGUgbWFwIGJ5IGluZGV4XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIHJlbW92ZVByb3BlcnR5QXQoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMucHJvcGVydGllc0Zvcm1IZWxwZXIucmVtb3ZlQXQoaW5kZXgpO1xuICAgIHRoaXMucHJvcGVydHlEZWZpbml0aW9uc0J5SW5kZXggPSB7fTsgLy8gY2xlYXIgY2FjaGUgYnkgaW5kZXhcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgYXN5bmMgbG9hZCgpIHtcblxuICAgIHRoaXMubWFya0FzTG9hZGluZygpO1xuICAgIGNvbnNvbGUuZGVidWcoJ1tzZXR0aW5nc10gTG9hZGluZyBzZXR0aW5ncy4uLicpO1xuXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuc2V0dGluZ3Muc2V0dGluZ3M7XG5cbiAgICAvLyBTZXQgZGVmYXVsdHNcbiAgICBkYXRhLmFjY291bnRJbmhlcml0YW5jZSA9IHRvQm9vbGVhbihkYXRhLmFjY291bnRJbmhlcml0YW5jZSwgdHJ1ZSk7XG4gICAgZGF0YS5sb2NhbGUgPSBkYXRhLmxvY2FsZSB8fCB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZyB8fCB0aGlzLnRyYW5zbGF0ZS5kZWZhdWx0TGFuZztcbiAgICBkYXRhLmxhdExvbmdGb3JtYXQgPSBkYXRhLmxhdExvbmdGb3JtYXQgfHwgJ0RETU1TUyc7XG4gICAgZGF0YS51c2FnZU1vZGUgPSBkYXRhLnVzYWdlTW9kZSB8fCAnREVTSyc7XG5cbiAgICAvLyBTZXQgcGVlclxuICAgIGlmIChpc05pbE9yQmxhbmsoZGF0YS5wZWVyVXJsKSkge1xuICAgICAgYXdhaXQgdGhpcy5uZXR3b3JrLnJlYWR5KCk7XG4gICAgICBjb25zdCBwZWVyID0gdGhpcy5uZXR3b3JrLnBlZXI7XG4gICAgICBkYXRhLnBlZXJVcmwgPSBwZWVyICYmIHBlZXIudXJsO1xuICAgIH1cblxuICAgIC8vIFJlbWVtYmVyIGRhdGFcbiAgICB0aGlzLnVwZGF0ZVZpZXcoZGF0YSk7XG4gIH1cblxuICB1cGRhdGVWaWV3KGRhdGE6IExvY2FsU2V0dGluZ3MpIHtcbiAgICBpZiAoIWRhdGEpIHJldHVybjsgLy9za2lwXG4gICAgdGhpcy5kYXRhID0gZGF0YTtcblxuICAgIGNvbnN0IGpzb246IGFueSA9IHsuLi5kYXRhfTtcblxuICAgIC8vIFRyYW5zZm9ybSBwcm9wZXJ0aWVzIG1hcCBpbnRvIGFycmF5XG4gICAganNvbi5wcm9wZXJ0aWVzID0gRW50aXR5VXRpbHMuZ2V0TWFwQXNBcnJheShkYXRhLnByb3BlcnRpZXMgfHwge30pO1xuICAgIHRoaXMucHJvcGVydGllc0Zvcm1IZWxwZXIucmVzaXplKGpzb24ucHJvcGVydGllcy5sZW5ndGgpO1xuXG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoanNvbiwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICB0aGlzLm1hcmtBc1ByaXN0aW5lKCk7XG5cbiAgICB0aGlzLmVuYWJsZSh7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuXG4gICAgLy8gQXBwbHkgaW5oZXJpdGFuY2VcbiAgICB0aGlzLnNldEFjY291bnRJbmhlcml0YW5jZShkYXRhLmFjY291bnRJbmhlcml0YW5jZSwge2VtaXRFdmVudDogZmFsc2V9KTtcblxuICAgIHRoaXMubWFya0FzTG9hZGVkKCk7XG4gICAgdGhpcy5lcnJvciA9IG51bGw7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGFzeW5jIHNhdmUoZXZlbnQ/OiBFdmVudCwgb3B0aW9ucz86IGFueSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLnNhdmluZykgcmV0dXJuOyAvLyBTa2lwXG5cbiAgICBpZiAoZXZlbnQpIGV2ZW50LnByZXZlbnREZWZhdWx0KClcblxuICAgIC8vIFJlbW92ZSBhbGwgZW1wdHkgY29udHJvbHNcbiAgICB0aGlzLnByb3BlcnRpZXNGb3JtSGVscGVyLnJlbW92ZUFsbEVtcHR5KCk7XG5cbiAgICBpZiAoIXRoaXMuZm9ybS52YWxpZCkge1xuICAgICAgYXdhaXQgQXBwRm9ybVV0aWxzLndhaXRXaGlsZVBlbmRpbmcodGhpcy5mb3JtKTtcblxuICAgICAgaWYgKHRoaXMuZm9ybS5pbnZhbGlkKSB7XG4gICAgICAgIEFwcEZvcm1VdGlscy5sb2dGb3JtRXJyb3JzKHRoaXMuZm9ybSk7XG4gICAgICAgIHRoaXMuZm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zb2xlLmRlYnVnKCdbc2V0dGluZ3NdIFNhdmluZyBsb2NhbCBzZXR0aW5ncy4uLicpO1xuXG4gICAgdGhpcy5zYXZpbmcgPSB0cnVlO1xuICAgIHRoaXMuZXJyb3IgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcblxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmdldFZhbHVlKCk7XG5cbiAgICAvLyBDaGVjayBwZWVyIGFsaXZlLCBiZWZvcmUgc2F2aW5nXG4gICAgY29uc3QgcGVlckNoYW5nZWQgPSB0aGlzLmZvcm0uZ2V0KCdwZWVyVXJsJykuZGlydHk7XG5cbiAgICAvLyBDbGVhbiBwYWdlIGhpc3RvcnksIHdoZW4gcGVlciBjaGFuZ2VkXG4gICAgaWYgKHBlZXJDaGFuZ2VkKSBkYXRhLnBhZ2VIaXN0b3J5ID0gW107XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5kaXNhYmxlKCk7XG5cbiAgICAgIGF3YWl0IHRoaXMuc2V0dGluZ3MuYXBwbHkoZGF0YSk7XG4gICAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgICAgdGhpcy5tYXJrQXNQcmlzdGluZSgpO1xuXG4gICAgICAvLyBJZiBwZWVyIGNoYW5nZWRcbiAgICAgIGlmIChwZWVyQ2hhbmdlZCkge1xuICAgICAgICAvLyBSZXN0YXJ0IHRoZSBuZXR3b3JrXG4gICAgICAgIHRoaXMubmV0d29yay5wZWVyID0gUGVlci5wYXJzZVVybChkYXRhLnBlZXJVcmwpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIHRoaXMuZXJyb3IgPSBlcnIgJiYgZXJyLm1lc3NhZ2UgfHwgZXJyO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmVuYWJsZSh7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuXG4gICAgICAvLyBBcHBseSBpbmhlcml0YW5jZVxuICAgICAgdGhpcy5zZXRBY2NvdW50SW5oZXJpdGFuY2UoZGF0YS5hY2NvdW50SW5oZXJpdGFuY2UsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG5cbiAgICAgIC8vIEFkZCBhIGRlbGF5LCBiZWNhdXNlIG9mIG9wdGlvbiBtZW51IHRoYXQgaXMgYWx3YXlzIG9wZW5lZCBhZnRlciBzYXZlISFcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSwgNDAwKTtcbiAgICB9XG4gIH1cblxuXG4gIHNldEFjY291bnRJbmhlcml0YW5jZShlbmFibGU6IGJvb2xlYW4sIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIC8vIE1ha2Ugc3VyZSB0byB1cGRhdGUgdGhlIHZhbHVlIGluIGNvbnRyb2xcbiAgICB0aGlzLmZvcm0uY29udHJvbHNbJ2FjY291bnRJbmhlcml0YW5jZSddLnNldFZhbHVlKGVuYWJsZSwgb3B0cyk7XG4gICAgaWYgKHRoaXMuZGF0YS5hY2NvdW50SW5oZXJpdGFuY2UgIT09IGVuYWJsZSkge1xuICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzWydhY2NvdW50SW5oZXJpdGFuY2UnXS5tYXJrQXNEaXJ0eSh7b25seVNlbGY6IGZhbHNlfSk7XG4gICAgfVxuXG4gICAgaWYgKGVuYWJsZSkge1xuICAgICAgaWYgKHRoaXMuaXNMb2dpbikge1xuICAgICAgICAvLyBGb3JjZSB1c2luZyBhY2NvdW50IHNldHRpbmdzXG4gICAgICAgIGNvbnN0IGFjY291bnQgPSB0aGlzLmFjY291bnRTZXJ2aWNlLmFjY291bnQ7XG5cbiAgICAgICAgLy8gQ29weSB2YWx1ZXNcbiAgICAgICAgaWYgKGFjY291bnQuc2V0dGluZ3MpIHtcbiAgICAgICAgICBpZiAoYWNjb3VudC5zZXR0aW5ncy5sb2NhbGUpIHRoaXMuZm9ybS5nZXQoJ2xvY2FsZScpLnNldFZhbHVlKGFjY291bnQuc2V0dGluZ3MubG9jYWxlLCBvcHRzKTtcbiAgICAgICAgICBpZiAoYWNjb3VudC5zZXR0aW5ncy5sYXRMb25nRm9ybWF0KSB0aGlzLmZvcm0uZ2V0KCdsYXRMb25nRm9ybWF0Jykuc2V0VmFsdWUoYWNjb3VudC5zZXR0aW5ncy5sYXRMb25nRm9ybWF0LCBvcHRzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBEaXNhYmxlIGZpZWxkc1xuICAgICAgICB0aGlzLmZvcm0uZ2V0KCdsb2NhbGUnKS5kaXNhYmxlKG9wdHMpO1xuICAgICAgICB0aGlzLmZvcm0uZ2V0KCdsYXRMb25nRm9ybWF0JykuZGlzYWJsZShvcHRzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEVuYWJsZSBmaWVsZHNcbiAgICAgICAgdGhpcy5mb3JtLmdldCgnbG9jYWxlJykuZW5hYmxlKG9wdHMpO1xuICAgICAgICB0aGlzLmZvcm0uZ2V0KCdsYXRMb25nRm9ybWF0JykuZW5hYmxlKG9wdHMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZXN0b3JlIHByZXZpb3VzIHZhbHVlc1xuICAgICAgdGhpcy5mb3JtLmdldCgnbG9jYWxlJykuc2V0VmFsdWUodGhpcy5kYXRhLmxvY2FsZSwgb3B0cyk7XG4gICAgICB0aGlzLmZvcm0uZ2V0KCdsYXRMb25nRm9ybWF0Jykuc2V0VmFsdWUodGhpcy5kYXRhLmxhdExvbmdGb3JtYXQsIG9wdHMpO1xuXG4gICAgICAvLyBFbmFibGUgZmllbGRzXG4gICAgICB0aGlzLmZvcm0uZ2V0KCdsb2NhbGUnKS5lbmFibGUob3B0cyk7XG4gICAgICB0aGlzLmZvcm0uZ2V0KCdsYXRMb25nRm9ybWF0JykuZW5hYmxlKG9wdHMpO1xuICAgIH1cblxuICAgIC8vIE1hcmsgZm9yIGNoZWNrLCBpZiBuZWVkXG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50KSB7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNob3dTZWxlY3RQZWVyTW9kYWwob3B0cz86IHtcbiAgICBhbGxvd1NlbGVjdERvd25QZWVyPzogYm9vbGVhbjtcbiAgICBjYW5DYW5jZWw/OiBib29sZWFuO1xuICB9KSB7XG4gICAgY29uc3QgcGVlciA9IGF3YWl0IHRoaXMubmV0d29yay5zaG93U2VsZWN0UGVlck1vZGFsKG9wdHMpO1xuICAgIGlmIChwZWVyICYmIHBlZXIudXJsKSB7XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldCgncGVlclVybCcpIGFzIEZvcm1Db250cm9sO1xuICAgICAgY29udHJvbC5zZXRWYWx1ZShwZWVyLnVybCwge2VtaXRFdmVudDogdHJ1ZSwgb25seVNlbGY6IGZhbHNlfSk7XG4gICAgICBjb250cm9sLm1hcmtBc0RpcnR5KHtvbmx5U2VsZjogZmFsc2V9KTtcbiAgICAgIHRoaXMubWFya0FzRGlydHkoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjYW5jZWwoZXZlbnQ/OiBFdmVudCkge1xuICAgIGF3YWl0IHRoaXMubG9hZCgpO1xuICB9XG5cbiAgYXN5bmMgY2xvc2UoZXZlbnQ/OiBFdmVudCkge1xuICAgIGlmICh0aGlzLnNhdmluZykgcmV0dXJuO1xuXG4gICAgLy8gQmFjayB0byBob21lXG4gICAgcmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy8nLCB7IHJlcGxhY2VVcmw6IHRydWUgfSk7IC8vIGJhY2sgdG8gaG9tZVxuICB9XG5cbiAgYXN5bmMgY2xlYXJDYWNoZShldmVudD86IFVJRXZlbnQpIHtcbiAgICBjb25zdCBjb25maXJtID0gYXdhaXQgQWxlcnRzLmFza0FjdGlvbkNvbmZpcm1hdGlvbih0aGlzLmFsZXJ0Q3RybCwgdGhpcy50cmFuc2xhdGUsIHRydWUsIGV2ZW50KTtcbiAgICBpZiAoY29uZmlybSkge1xuICAgICAgYXdhaXQgdGhpcy5uZXR3b3JrLmNsZWFyQ2FjaGUoKTtcbiAgICAgIHRoaXMuc2V0dGluZ3MucmVtb3ZlT2ZmbGluZUZlYXR1cmVzKCk7XG4gICAgfVxuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIGZ1bmN0aW9ucyAtLSAqL1xuXG4gIHByb3RlY3RlZCBhc3luYyBnZXRWYWx1ZSgpOiBQcm9taXNlPExvY2FsU2V0dGluZ3M+IHtcbiAgICBjb25zdCBqc29uID0gYXdhaXQgdGhpcy5nZXRKc29uVmFsdWVUb1NhdmUoKTtcblxuICAgIC8vIE92ZXJyaWRlIHByb3BlcnRpZXMgZnJvbSBhY2NvdW50XG4gICAgaWYgKGpzb24uYWNjb3VudEluaGVyaXRhbmNlICYmIHRoaXMuaXNMb2dpbikge1xuICAgICAgY29uc3QgYWNjb3VudCA9IHRoaXMuYWNjb3VudFNlcnZpY2UuYWNjb3VudDtcbiAgICAgIGNvbnN0IHVzZXJTZXR0aW5ncyA9IGFjY291bnQgJiYgYWNjb3VudC5zZXR0aW5ncztcbiAgICAgIGNvbnNvbGUuZGVidWcoYFtzZXR0aW5nc10gQXBwbHlpbmcgYWNjb3VudCBpbmhlcml0YW5jZSB7bG9jYWxlOiAnJHt1c2VyU2V0dGluZ3MubG9jYWxlfScsIGxhdExvbmdGb3JtYXQ6ICcke3VzZXJTZXR0aW5ncy5sYXRMb25nRm9ybWF0fSd9Li4uYCk7XG4gICAgICBqc29uLmxvY2FsZSA9IHVzZXJTZXR0aW5ncy5sb2NhbGUgfHwganNvbi5sb2NhbGU7XG4gICAgICBqc29uLmxhdExvbmdGb3JtYXQgPSB1c2VyU2V0dGluZ3MubGF0TG9uZ0Zvcm1hdCB8fCBqc29uLmxhdExvbmdGb3JtYXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0SnNvblZhbHVlVG9TYXZlKCk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QganNvbiA9IHRoaXMuZm9ybS52YWx1ZTtcbiAgICBqc29uLnByb3BlcnRpZXMgPSBFbnRpdHlVdGlscy5nZXRQcm9wZXJ0eUFycmF5QXNPYmplY3QoanNvbi5wcm9wZXJ0aWVzKTtcblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoanNvbik7XG4gIH1cblxuICBwcm90ZWN0ZWQgbWFya0ZvckNoZWNrKCkge1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuXG59XG4iXX0=