@sumaris-net/ngx-components 18.12.0 → 18.12.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1383) hide show
  1. package/doc/changelog.md +3 -0
  2. package/esm2022/public_api.mjs +380 -0
  3. package/esm2022/src/app/admin/admin-routing.module.mjs +34 -0
  4. package/esm2022/src/app/admin/admin.module.mjs +32 -0
  5. package/esm2022/src/app/admin/services/filter/person.filter.mjs +76 -0
  6. package/esm2022/src/app/admin/services/person.service.mjs +184 -0
  7. package/esm2022/src/app/admin/services/validator/person.validator.mjs +72 -0
  8. package/esm2022/src/app/admin/users/users.mjs +379 -0
  9. package/esm2022/src/app/admin/users/users.module.mjs +56 -0
  10. package/esm2022/src/app/core/about/about.modal.mjs +86 -0
  11. package/esm2022/src/app/core/about/about.module.mjs +22 -0
  12. package/esm2022/src/app/core/account/account.module.mjs +75 -0
  13. package/esm2022/src/app/core/account/account.page.mjs +364 -0
  14. package/esm2022/src/app/core/account/new-token.form.mjs +106 -0
  15. package/esm2022/src/app/core/account/new-token.modal.mjs +66 -0
  16. package/esm2022/src/app/core/account/password/change-password.form.mjs +63 -0
  17. package/esm2022/src/app/core/account/password/change-password.module.mjs +22 -0
  18. package/esm2022/src/app/core/account/password/change-password.page.mjs +150 -0
  19. package/esm2022/src/app/core/account/token.table.mjs +157 -0
  20. package/esm2022/src/app/core/auth/auth.form.mjs +159 -0
  21. package/esm2022/src/app/core/auth/auth.modal.mjs +76 -0
  22. package/esm2022/src/app/core/auth/auth.module.mjs +56 -0
  23. package/esm2022/src/app/core/auth/reset-password.modal.mjs +89 -0
  24. package/esm2022/src/app/core/core.module.mjs +151 -0
  25. package/esm2022/src/app/core/core.testing.module.mjs +107 -0
  26. package/esm2022/src/app/core/form/array/form-array.mjs +328 -0
  27. package/esm2022/src/app/core/form/array/testing/form-array-test.module.mjs +23 -0
  28. package/esm2022/src/app/core/form/array/testing/form-array.test.mjs +94 -0
  29. package/esm2022/src/app/core/form/buttons/form-buttons-bar.component.mjs +108 -0
  30. package/esm2022/src/app/core/form/buttons/form-buttons-bar.module.mjs +31 -0
  31. package/esm2022/src/app/core/form/entity/editor.class.mjs +268 -0
  32. package/esm2022/src/app/core/form/entity/entity-editor-modal.class.mjs +420 -0
  33. package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +741 -0
  34. package/esm2022/src/app/core/form/entity/entity-metadata.component.mjs +24 -0
  35. package/esm2022/src/app/core/form/entity/entity.module.mjs +32 -0
  36. package/esm2022/src/app/core/form/entity/tab-editor.class.mjs +190 -0
  37. package/esm2022/src/app/core/form/form-container.class.mjs +340 -0
  38. package/esm2022/src/app/core/form/form.class.mjs +337 -0
  39. package/esm2022/src/app/core/form/form.module.mjs +70 -0
  40. package/esm2022/src/app/core/form/form.utils.mjs +205 -0
  41. package/esm2022/src/app/core/form/list/list.form.mjs +235 -0
  42. package/esm2022/src/app/core/form/list/list.module.mjs +31 -0
  43. package/esm2022/src/app/core/form/properties/properties.form.mjs +317 -0
  44. package/esm2022/src/app/core/form/properties/properties.module.mjs +37 -0
  45. package/esm2022/src/app/core/form/properties/properties.table.mjs +264 -0
  46. package/esm2022/src/app/core/form/properties/properties.utils.mjs +304 -0
  47. package/esm2022/src/app/core/form/properties/property.validator.mjs +70 -0
  48. package/esm2022/src/app/core/form/properties/testing/properties-form.test.mjs +104 -0
  49. package/esm2022/src/app/core/form/properties/testing/properties-form.testing.module.mjs +23 -0
  50. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.mjs +73 -0
  51. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +30 -0
  52. package/esm2022/src/app/core/form/text-popover/text-popover.component.mjs +161 -0
  53. package/esm2022/src/app/core/form/text-popover/text-popover.module.mjs +31 -0
  54. package/esm2022/src/app/core/form/username/username.form.mjs +55 -0
  55. package/esm2022/src/app/core/form/username/username.module.mjs +20 -0
  56. package/esm2022/src/app/core/graphql/graphql.module.mjs +14 -0
  57. package/esm2022/src/app/core/graphql/graphql.service.mjs +781 -0
  58. package/esm2022/src/app/core/graphql/graphql.utils.mjs +119 -0
  59. package/esm2022/src/app/core/home/home.mjs +382 -0
  60. package/esm2022/src/app/core/home/home.module.mjs +46 -0
  61. package/esm2022/src/app/core/icon/icon.component.mjs +40 -0
  62. package/esm2022/src/app/core/icon/icon.module.mjs +20 -0
  63. package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +394 -0
  64. package/esm2022/src/app/core/install/install-upgrade-card.module.mjs +31 -0
  65. package/esm2022/src/app/core/menu/menu.component.mjs +258 -0
  66. package/esm2022/src/app/core/menu/menu.model.mjs +272 -0
  67. package/esm2022/src/app/core/menu/menu.module.mjs +47 -0
  68. package/esm2022/src/app/core/menu/menu.service.mjs +666 -0
  69. package/esm2022/src/app/core/menu/sub-menu-tab.directive.mjs +109 -0
  70. package/esm2022/src/app/core/menu/testing/menu-other.testing.mjs +50 -0
  71. package/esm2022/src/app/core/menu/testing/menu.testing.mjs +158 -0
  72. package/esm2022/src/app/core/menu/testing/menu.testing.module.mjs +60 -0
  73. package/esm2022/src/app/core/offline/update-offline-mode-card.component.mjs +28 -0
  74. package/esm2022/src/app/core/offline/update-offline-mode-card.module.mjs +31 -0
  75. package/esm2022/src/app/core/peer/select-peer.modal.mjs +344 -0
  76. package/esm2022/src/app/core/peer/select-peer.module.mjs +36 -0
  77. package/esm2022/src/app/core/register/register-confirm.page.mjs +90 -0
  78. package/esm2022/src/app/core/register/register.form.mjs +194 -0
  79. package/esm2022/src/app/core/register/register.modal.mjs +55 -0
  80. package/esm2022/src/app/core/register/register.module.mjs +23 -0
  81. package/esm2022/src/app/core/services/account.service.mjs +1358 -0
  82. package/esm2022/src/app/core/services/auth-guard.service.mjs +74 -0
  83. package/esm2022/src/app/core/services/base-entity-service.class.mjs +485 -0
  84. package/esm2022/src/app/core/services/base-graphql-service.class.mjs +230 -0
  85. package/esm2022/src/app/core/services/base58.mjs +83 -0
  86. package/esm2022/src/app/core/services/config/core.config.mjs +258 -0
  87. package/esm2022/src/app/core/services/config.service.mjs +384 -0
  88. package/esm2022/src/app/core/services/crypto.service.mjs +107 -0
  89. package/esm2022/src/app/core/services/errors.mjs +54 -0
  90. package/esm2022/src/app/core/services/local-settings.service.mjs +516 -0
  91. package/esm2022/src/app/core/services/model/account.model.mjs +178 -0
  92. package/esm2022/src/app/core/services/model/config.model.mjs +107 -0
  93. package/esm2022/src/app/core/services/model/department.model.mjs +35 -0
  94. package/esm2022/src/app/core/services/model/entity.decorators.mjs +97 -0
  95. package/esm2022/src/app/core/services/model/entity.model.mjs +338 -0
  96. package/esm2022/src/app/core/services/model/filter.model.mjs +93 -0
  97. package/esm2022/src/app/core/services/model/history.model.mjs +2 -0
  98. package/esm2022/src/app/core/services/model/model.enum.mjs +11 -0
  99. package/esm2022/src/app/core/services/model/node-feature.model.mjs +31 -0
  100. package/esm2022/src/app/core/services/model/peer.model.mjs +113 -0
  101. package/esm2022/src/app/core/services/model/person.model.mjs +114 -0
  102. package/esm2022/src/app/core/services/model/referential.model.mjs +205 -0
  103. package/esm2022/src/app/core/services/model/settings.model.mjs +6 -0
  104. package/esm2022/src/app/core/services/model/token.model.mjs +57 -0
  105. package/esm2022/src/app/core/services/model/tree-item-entity.model.mjs +195 -0
  106. package/esm2022/src/app/core/services/network.service.mjs +638 -0
  107. package/esm2022/src/app/core/services/network.types.mjs +2 -0
  108. package/esm2022/src/app/core/services/network.utils.mjs +35 -0
  109. package/esm2022/src/app/core/services/pipes/account.pipes.mjs +38 -0
  110. package/esm2022/src/app/core/services/pipes/department-to-string.pipe.mjs +23 -0
  111. package/esm2022/src/app/core/services/pipes/person-to-string.pipe.mjs +23 -0
  112. package/esm2022/src/app/core/services/pipes/pipes.module.mjs +54 -0
  113. package/esm2022/src/app/core/services/pipes/referential-to-string.pipe.mjs +21 -0
  114. package/esm2022/src/app/core/services/pipes/usage-mode.pipes.mjs +37 -0
  115. package/esm2022/src/app/core/services/platform.service.mjs +627 -0
  116. package/esm2022/src/app/core/services/storage/entities-storage.service.mjs +427 -0
  117. package/esm2022/src/app/core/services/storage/entity-store.class.mjs +450 -0
  118. package/esm2022/src/app/core/services/testing/referential-filter.model.mjs +25 -0
  119. package/esm2022/src/app/core/services/testing/referential.validator.mjs +46 -0
  120. package/esm2022/src/app/core/services/validator/account.validator.mjs +45 -0
  121. package/esm2022/src/app/core/services/validator/base.validator.class.mjs +49 -0
  122. package/esm2022/src/app/core/services/validator/local-settings.validator.mjs +57 -0
  123. package/esm2022/src/app/core/services/validator/user-settings.validator.mjs +27 -0
  124. package/esm2022/src/app/core/services/validator/user-token.validator.mjs +55 -0
  125. package/esm2022/src/app/core/settings/settings.module.mjs +23 -0
  126. package/esm2022/src/app/core/settings/settings.page.mjs +403 -0
  127. package/esm2022/src/app/core/table/async-table.class.mjs +1811 -0
  128. package/esm2022/src/app/core/table/column/actions-column.component.mjs +130 -0
  129. package/esm2022/src/app/core/table/column/nav-actions-column.component.mjs +117 -0
  130. package/esm2022/src/app/core/table/column/row-field.component.mjs +116 -0
  131. package/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +404 -0
  132. package/esm2022/src/app/core/table/entities-table-datasource.class.mjs +405 -0
  133. package/esm2022/src/app/core/table/memory-table.class.mjs +57 -0
  134. package/esm2022/src/app/core/table/table-select-columns.component.mjs +46 -0
  135. package/esm2022/src/app/core/table/table.class.mjs +1867 -0
  136. package/esm2022/src/app/core/table/table.model.mjs +21 -0
  137. package/esm2022/src/app/core/table/table.module.mjs +51 -0
  138. package/esm2022/src/app/core/table/table.pipes.mjs +77 -0
  139. package/esm2022/src/app/core/table/table.utils.mjs +34 -0
  140. package/esm2022/src/app/core/table/testing/table-validator.service.mjs +32 -0
  141. package/esm2022/src/app/core/table/testing/table.testing.mjs +329 -0
  142. package/esm2022/src/app/core/table/testing/table.testing.module.mjs +25 -0
  143. package/esm2022/src/app/core/table/testing/table2-validator.service.mjs +25 -0
  144. package/esm2022/src/app/core/table/testing/table2.testing.mjs +273 -0
  145. package/esm2022/src/app/shared/alerts.mjs +243 -0
  146. package/esm2022/src/app/shared/audio/audio.mjs +255 -0
  147. package/esm2022/src/app/shared/audio/audio.testing.mjs +32 -0
  148. package/esm2022/src/app/shared/audio/audio.testing.module.mjs +30 -0
  149. package/esm2022/src/app/shared/capacitor/keyboard.mjs +42 -0
  150. package/esm2022/src/app/shared/capacitor/plugins.mjs +9 -0
  151. package/esm2022/src/app/shared/constants.mjs +16 -0
  152. package/esm2022/src/app/shared/dates.mjs +180 -0
  153. package/esm2022/src/app/shared/debug/debug-service.class.mjs +3 -0
  154. package/esm2022/src/app/shared/debug/debug.component.mjs +44 -0
  155. package/esm2022/src/app/shared/debug/debug.module.mjs +23 -0
  156. package/esm2022/src/app/shared/directives/autofocus.directive.mjs +91 -0
  157. package/esm2022/src/app/shared/directives/autoresize.directive.mjs +75 -0
  158. package/esm2022/src/app/shared/directives/autotitle.directive.mjs +30 -0
  159. package/esm2022/src/app/shared/directives/directives.module.mjs +24 -0
  160. package/esm2022/src/app/shared/directives/drag-and-drop.directive.mjs +52 -0
  161. package/esm2022/src/app/shared/directives/ng-var.directive.mjs +33 -0
  162. package/esm2022/src/app/shared/directives/resizable/resizable.component.mjs +62 -0
  163. package/esm2022/src/app/shared/directives/resizable/resizable.directive.mjs +45 -0
  164. package/esm2022/src/app/shared/directives/resizable/resizable.module.mjs +17 -0
  165. package/esm2022/src/app/shared/directives/throttled-click.directive.mjs +43 -0
  166. package/esm2022/src/app/shared/events.mjs +64 -0
  167. package/esm2022/src/app/shared/file/csv.utils.mjs +97 -0
  168. package/esm2022/src/app/shared/file/file.service.mjs +118 -0
  169. package/esm2022/src/app/shared/file/file.utils.mjs +117 -0
  170. package/esm2022/src/app/shared/file/images.utils.mjs +186 -0
  171. package/esm2022/src/app/shared/file/json.utils.mjs +58 -0
  172. package/esm2022/src/app/shared/file/uri.utils.mjs +29 -0
  173. package/esm2022/src/app/shared/file/url.utils.mjs +164 -0
  174. package/esm2022/src/app/shared/focusable.mjs +6 -0
  175. package/esm2022/src/app/shared/form/field.component.mjs +393 -0
  176. package/esm2022/src/app/shared/form/field.model.mjs +82 -0
  177. package/esm2022/src/app/shared/form/loading-spinner.mjs +35 -0
  178. package/esm2022/src/app/shared/forms.mjs +510 -0
  179. package/esm2022/src/app/shared/functions.mjs +672 -0
  180. package/esm2022/src/app/shared/geolocation/geolocation.utils.mjs +86 -0
  181. package/esm2022/src/app/shared/gesture/gesture-config.mjs +46 -0
  182. package/esm2022/src/app/shared/gesture/hammer.utils.mjs +2 -0
  183. package/esm2022/src/app/shared/graph/colors.utils.mjs +60 -0
  184. package/esm2022/src/app/shared/graph/graph-colors.mjs +214 -0
  185. package/esm2022/src/app/shared/guard/component-dirty.guard.mjs +65 -0
  186. package/esm2022/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +23 -0
  187. package/esm2022/src/app/shared/hotkeys/hotkeys.service.mjs +147 -0
  188. package/esm2022/src/app/shared/hotkeys/shared-hotkeys.module.mjs +24 -0
  189. package/esm2022/src/app/shared/http/http.utils.mjs +56 -0
  190. package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +443 -0
  191. package/esm2022/src/app/shared/image/gallery/image-gallery.module.mjs +62 -0
  192. package/esm2022/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +26 -0
  193. package/esm2022/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +87 -0
  194. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.mjs +37 -0
  195. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +59 -0
  196. package/esm2022/src/app/shared/image/image.model.mjs +2 -0
  197. package/esm2022/src/app/shared/image/image.module.mjs +24 -0
  198. package/esm2022/src/app/shared/image/image.service.mjs +109 -0
  199. package/esm2022/src/app/shared/inputs.mjs +279 -0
  200. package/esm2022/src/app/shared/interceptors/progess.interceptor.mjs +27 -0
  201. package/esm2022/src/app/shared/logging/log-level.model.mjs +48 -0
  202. package/esm2022/src/app/shared/logging/logger.model.mjs +47 -0
  203. package/esm2022/src/app/shared/logging/logging-service.class.mjs +125 -0
  204. package/esm2022/src/app/shared/logging/logging-service.config.mjs +2 -0
  205. package/esm2022/src/app/shared/logging/logging-service.module.mjs +30 -0
  206. package/esm2022/src/app/shared/markdown/markdown.component.mjs +321 -0
  207. package/esm2022/src/app/shared/markdown/markdown.directive.mjs +34 -0
  208. package/esm2022/src/app/shared/markdown/markdown.modal.mjs +99 -0
  209. package/esm2022/src/app/shared/markdown/markdown.module.mjs +87 -0
  210. package/esm2022/src/app/shared/markdown/markdown.service.mjs +204 -0
  211. package/esm2022/src/app/shared/markdown/markdown.utils.mjs +87 -0
  212. package/esm2022/src/app/shared/markdown/testing/markdown.test.mjs +55 -0
  213. package/esm2022/src/app/shared/markdown/testing/markdown.testing.module.mjs +30 -0
  214. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +46 -0
  215. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +1313 -0
  216. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +79 -0
  217. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +18 -0
  218. package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +242 -0
  219. package/esm2022/src/app/shared/material/badge/badge.directive.mjs +251 -0
  220. package/esm2022/src/app/shared/material/badge/badge.module.mjs +20 -0
  221. package/esm2022/src/app/shared/material/badge/badge.test.mjs +42 -0
  222. package/esm2022/src/app/shared/material/boolean/boolean.module.mjs +67 -0
  223. package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +371 -0
  224. package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +72 -0
  225. package/esm2022/src/app/shared/material/chips/chips.module.mjs +71 -0
  226. package/esm2022/src/app/shared/material/chips/material.chips.mjs +836 -0
  227. package/esm2022/src/app/shared/material/chips/testing/chips.test.mjs +151 -0
  228. package/esm2022/src/app/shared/material/datetime/datetime.module.mjs +76 -0
  229. package/esm2022/src/app/shared/material/datetime/material.date.mjs +471 -0
  230. package/esm2022/src/app/shared/material/datetime/material.dateshort.mjs +457 -0
  231. package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +693 -0
  232. package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +136 -0
  233. package/esm2022/src/app/shared/material/datetime/testing/mat-date.test.mjs +127 -0
  234. package/esm2022/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +118 -0
  235. package/esm2022/src/app/shared/material/duration/duration.module.mjs +61 -0
  236. package/esm2022/src/app/shared/material/duration/duration.utils.mjs +16 -0
  237. package/esm2022/src/app/shared/material/duration/material.duration.mjs +283 -0
  238. package/esm2022/src/app/shared/material/duration/testing/mat-duration.test.mjs +85 -0
  239. package/esm2022/src/app/shared/material/latlong/latlong.utils.mjs +319 -0
  240. package/esm2022/src/app/shared/material/latlong/material.latlong-input.mjs +432 -0
  241. package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +231 -0
  242. package/esm2022/src/app/shared/material/latlong/material.latlong.module.mjs +68 -0
  243. package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +137 -0
  244. package/esm2022/src/app/shared/material/material.animations.mjs +200 -0
  245. package/esm2022/src/app/shared/material/material.config.mjs +3 -0
  246. package/esm2022/src/app/shared/material/material.module.mjs +229 -0
  247. package/esm2022/src/app/shared/material/material.testing.module.mjs +245 -0
  248. package/esm2022/src/app/shared/material/paginator/material.paginator-i18n.mjs +51 -0
  249. package/esm2022/src/app/shared/material/stepper/material.stepper-i18n.mjs +23 -0
  250. package/esm2022/src/app/shared/material/swipe/material.swipe.mjs +379 -0
  251. package/esm2022/src/app/shared/material/swipe/swipe.module.mjs +52 -0
  252. package/esm2022/src/app/shared/material/swipe/testing/swipe.test.mjs +67 -0
  253. package/esm2022/src/app/shared/material/test/test-component.mjs +264 -0
  254. package/esm2022/src/app/shared/material/testing/common.test.mjs +111 -0
  255. package/esm2022/src/app/shared/material/text/testing/text-form.testing.mjs +42 -0
  256. package/esm2022/src/app/shared/material/text/text-form.component.mjs +205 -0
  257. package/esm2022/src/app/shared/material/text/text-form.module.mjs +63 -0
  258. package/esm2022/src/app/shared/modules.mjs +12 -0
  259. package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +303 -0
  260. package/esm2022/src/app/shared/named-filter/named-filter.model.mjs +49 -0
  261. package/esm2022/src/app/shared/named-filter/named-filter.module.mjs +24 -0
  262. package/esm2022/src/app/shared/named-filter/named-filter.service.mjs +69 -0
  263. package/esm2022/src/app/shared/named-filter/testing/named-filter-selector.testing.mjs +74 -0
  264. package/esm2022/src/app/shared/named-filter/testing/named-filter.testing.module.mjs +28 -0
  265. package/esm2022/src/app/shared/observables.mjs +100 -0
  266. package/esm2022/src/app/shared/pipes/arrays.pipe.mjs +217 -0
  267. package/esm2022/src/app/shared/pipes/badge.pipes.mjs +24 -0
  268. package/esm2022/src/app/shared/pipes/colors.pipe.mjs +29 -0
  269. package/esm2022/src/app/shared/pipes/date-diff-duration.pipe.mjs +50 -0
  270. package/esm2022/src/app/shared/pipes/date-format.pipe.mjs +72 -0
  271. package/esm2022/src/app/shared/pipes/date-from-now.pipe.mjs +28 -0
  272. package/esm2022/src/app/shared/pipes/dates.pipe.mjs +18 -0
  273. package/esm2022/src/app/shared/pipes/display-with.pipe.mjs +23 -0
  274. package/esm2022/src/app/shared/pipes/duration.pipe.mjs +34 -0
  275. package/esm2022/src/app/shared/pipes/file-size.pipe.mjs +53 -0
  276. package/esm2022/src/app/shared/pipes/form.pipes.mjs +219 -0
  277. package/esm2022/src/app/shared/pipes/highlight.pipe.mjs +50 -0
  278. package/esm2022/src/app/shared/pipes/html.pipes.mjs +69 -0
  279. package/esm2022/src/app/shared/pipes/latlong-format.pipe.mjs +42 -0
  280. package/esm2022/src/app/shared/pipes/maps.pipe.mjs +65 -0
  281. package/esm2022/src/app/shared/pipes/maskito.pipe.mjs +67 -0
  282. package/esm2022/src/app/shared/pipes/math.pipes.mjs +77 -0
  283. package/esm2022/src/app/shared/pipes/ng-init.pipe.mjs +19 -0
  284. package/esm2022/src/app/shared/pipes/number-format.pipe.mjs +17 -0
  285. package/esm2022/src/app/shared/pipes/observable.pipes.mjs +63 -0
  286. package/esm2022/src/app/shared/pipes/pipes.module.mjs +285 -0
  287. package/esm2022/src/app/shared/pipes/property.pipes.mjs +135 -0
  288. package/esm2022/src/app/shared/pipes/selection.pipes.mjs +179 -0
  289. package/esm2022/src/app/shared/pipes/string.pipes.mjs +183 -0
  290. package/esm2022/src/app/shared/pipes/translate-context.pipe.mjs +44 -0
  291. package/esm2022/src/app/shared/pipes/types.pipes.mjs +74 -0
  292. package/esm2022/src/app/shared/pipes/url.pipes.mjs +43 -0
  293. package/esm2022/src/app/shared/platforms.mjs +81 -0
  294. package/esm2022/src/app/shared/print/print.service.mjs +305 -0
  295. package/esm2022/src/app/shared/regexps.mjs +96 -0
  296. package/esm2022/src/app/shared/rx-state/rx-state.decorators.mjs +217 -0
  297. package/esm2022/src/app/shared/rx-state/rx-state.module.mjs +19 -0
  298. package/esm2022/src/app/shared/rx-state/rx-state.types.mjs +2 -0
  299. package/esm2022/src/app/shared/services/entity-service.class.mjs +10 -0
  300. package/esm2022/src/app/shared/services/job.utils.mjs +92 -0
  301. package/esm2022/src/app/shared/services/memory-entity-service.class.mjs +353 -0
  302. package/esm2022/src/app/shared/services/progress-bar.service.mjs +31 -0
  303. package/esm2022/src/app/shared/services/startable-observable-service.class.mjs +118 -0
  304. package/esm2022/src/app/shared/services/startable-service.class.mjs +107 -0
  305. package/esm2022/src/app/shared/services/translate-context.service.mjs +107 -0
  306. package/esm2022/src/app/shared/services/validator-service.class.mjs +2 -0
  307. package/esm2022/src/app/shared/services.mjs +85 -0
  308. package/esm2022/src/app/shared/shared-routing.module.mjs +72 -0
  309. package/esm2022/src/app/shared/shared.module.mjs +229 -0
  310. package/esm2022/src/app/shared/shared.testing.module.mjs +108 -0
  311. package/esm2022/src/app/shared/storage/storage-explorer.component.mjs +279 -0
  312. package/esm2022/src/app/shared/storage/storage-explorer.module.mjs +42 -0
  313. package/esm2022/src/app/shared/storage/storage-explorer.testing-routing.module.mjs +27 -0
  314. package/esm2022/src/app/shared/storage/storage-explorer.testing.module.mjs +25 -0
  315. package/esm2022/src/app/shared/storage/storage.service.mjs +134 -0
  316. package/esm2022/src/app/shared/storage/storage.utils.mjs +13 -0
  317. package/esm2022/src/app/shared/testing/maskito.test.mjs +41 -0
  318. package/esm2022/src/app/shared/testing/observable.test.mjs +94 -0
  319. package/esm2022/src/app/shared/testing/tests.page.mjs +37 -0
  320. package/esm2022/src/app/shared/toast/toast.testing.mjs +54 -0
  321. package/esm2022/src/app/shared/toast/toast.testing.module.mjs +31 -0
  322. package/esm2022/src/app/shared/toast/toasts.mjs +134 -0
  323. package/esm2022/src/app/shared/toolbar/modal-toolbar.mjs +62 -0
  324. package/esm2022/src/app/shared/toolbar/toolbar.mjs +267 -0
  325. package/esm2022/src/app/shared/toolbar/toolbar.module.mjs +26 -0
  326. package/esm2022/src/app/shared/types.mjs +2 -0
  327. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.mjs +59 -0
  328. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +30 -0
  329. package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +109 -0
  330. package/esm2022/src/app/shared/upload-file/upload-file.component.mjs +216 -0
  331. package/esm2022/src/app/shared/upload-file/upload-file.model.mjs +26 -0
  332. package/esm2022/src/app/shared/validator/form-error-adapter.class.mjs +114 -0
  333. package/esm2022/src/app/shared/validator/validators.mjs +621 -0
  334. package/esm2022/src/app/shared/version/versions.mjs +81 -0
  335. package/esm2022/src/app/social/job/job.module.mjs +23 -0
  336. package/esm2022/src/app/social/job/progression/job-progression.component.mjs +35 -0
  337. package/esm2022/src/app/social/job/progression/job-progression.icon.mjs +235 -0
  338. package/esm2022/src/app/social/job/progression/job-progression.list.mjs +47 -0
  339. package/esm2022/src/app/social/job/progression/job-progression.model.mjs +29 -0
  340. package/esm2022/src/app/social/job/progression/job-progression.service.mjs +91 -0
  341. package/esm2022/src/app/social/job/testing/job-progression.testing.mjs +38 -0
  342. package/esm2022/src/app/social/job/testing/job-progression.testing.service.mjs +34 -0
  343. package/esm2022/src/app/social/job/testing/job.testing.module.mjs +22 -0
  344. package/esm2022/src/app/social/message/message.form.mjs +141 -0
  345. package/esm2022/src/app/social/message/message.modal.mjs +110 -0
  346. package/esm2022/src/app/social/message/message.model.mjs +75 -0
  347. package/esm2022/src/app/social/message/message.module.mjs +22 -0
  348. package/esm2022/src/app/social/message/message.service.mjs +110 -0
  349. package/esm2022/src/app/social/social.errors.mjs +10 -0
  350. package/esm2022/src/app/social/social.module.mjs +22 -0
  351. package/esm2022/src/app/social/social.testing.module.mjs +40 -0
  352. package/esm2022/src/app/social/user-event/notification/user-event-notification.icon.mjs +127 -0
  353. package/esm2022/src/app/social/user-event/notification/user-event-notification.list.mjs +260 -0
  354. package/esm2022/src/app/social/user-event/testing/user-event.testing.mjs +257 -0
  355. package/esm2022/src/app/social/user-event/testing/user-event.testing.model.mjs +129 -0
  356. package/esm2022/src/app/social/user-event/testing/user-event.testing.module.mjs +22 -0
  357. package/esm2022/src/app/social/user-event/testing/user-event.testing.service.mjs +128 -0
  358. package/esm2022/src/app/social/user-event/user-event.model.mjs +2 -0
  359. package/esm2022/src/app/social/user-event/user-event.module.mjs +23 -0
  360. package/esm2022/src/app/social/user-event/user-event.service.mjs +512 -0
  361. package/esm2022/src/environments/environment.class.mjs +65 -0
  362. package/esm2022/src/environments/environment.loader.mjs +77 -0
  363. package/esm2022/src/environments/environment.mjs +109 -0
  364. package/esm2022/sumaris-net.ngx-components.mjs +5 -0
  365. package/fesm2022/sumaris-net.ngx-components.mjs +48744 -0
  366. package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -0
  367. package/index.d.ts +5 -0
  368. package/package.json +19 -132
  369. package/public_api.d.ts +344 -0
  370. package/src/app/admin/admin-routing.module.d.ts +9 -0
  371. package/src/app/admin/admin.module.d.ts +10 -0
  372. package/src/app/admin/services/filter/person.filter.d.ts +22 -0
  373. package/src/app/admin/services/person.service.d.ts +37 -0
  374. package/src/app/admin/services/validator/person.validator.d.ts +23 -0
  375. package/src/app/admin/users/users.d.ts +61 -0
  376. package/src/app/admin/users/users.module.d.ts +14 -0
  377. package/src/app/core/about/about.modal.d.ts +32 -0
  378. package/src/app/core/about/about.module.d.ts +11 -0
  379. package/src/app/core/account/account.module.d.ts +18 -0
  380. package/src/app/core/account/account.page.d.ts +83 -0
  381. package/src/app/core/account/new-token.form.d.ts +29 -0
  382. package/src/app/core/account/new-token.modal.d.ts +29 -0
  383. package/src/app/core/account/password/change-password.form.d.ts +19 -0
  384. package/src/app/core/account/password/change-password.module.d.ts +11 -0
  385. package/src/app/core/account/password/change-password.page.d.ts +36 -0
  386. package/src/app/core/account/token.table.d.ts +27 -0
  387. package/src/app/core/auth/auth.form.d.ts +38 -0
  388. package/src/app/core/auth/auth.modal.d.ts +24 -0
  389. package/src/app/core/auth/auth.module.d.ts +13 -0
  390. package/src/app/core/auth/reset-password.modal.d.ts +29 -0
  391. package/src/app/core/core.module.d.ts +28 -0
  392. package/src/app/core/core.testing.module.d.ts +15 -0
  393. package/src/app/core/form/array/form-array.d.ts +137 -0
  394. package/src/app/core/form/array/testing/form-array-test.module.d.ts +12 -0
  395. package/src/app/core/form/array/testing/form-array.test.d.ts +26 -0
  396. package/src/app/core/form/buttons/form-buttons-bar.component.d.ts +37 -0
  397. package/src/app/core/form/buttons/form-buttons-bar.module.d.ts +9 -0
  398. package/src/app/core/form/entity/editor.class.d.ts +84 -0
  399. package/src/app/core/form/entity/entity-editor-modal.class.d.ts +126 -0
  400. package/src/app/core/form/entity/entity-editor.class.d.ts +204 -0
  401. package/src/app/core/form/entity/entity-metadata.component.d.ts +13 -0
  402. package/src/app/core/form/entity/entity.module.d.ts +10 -0
  403. package/src/app/core/form/entity/tab-editor.class.d.ts +66 -0
  404. package/src/app/core/form/form-container.class.d.ts +127 -0
  405. package/src/app/core/form/form.class.d.ts +144 -0
  406. package/src/app/core/form/form.module.d.ts +14 -0
  407. package/src/app/core/form/form.utils.d.ts +260 -0
  408. package/src/app/core/form/list/list.form.d.ts +81 -0
  409. package/src/app/core/form/list/list.module.d.ts +9 -0
  410. package/src/app/core/form/properties/properties.form.d.ts +92 -0
  411. package/src/app/core/form/properties/properties.module.d.ts +11 -0
  412. package/src/app/core/form/properties/properties.table.d.ts +72 -0
  413. package/src/app/core/form/properties/properties.utils.d.ts +59 -0
  414. package/src/app/core/form/properties/property.validator.d.ts +27 -0
  415. package/src/app/core/form/properties/testing/properties-form.test.d.ts +22 -0
  416. package/src/app/core/form/properties/testing/properties-form.testing.module.d.ts +12 -0
  417. package/src/app/core/form/text-popover/testing/text-popover.testing.d.ts +16 -0
  418. package/src/app/core/form/text-popover/testing/text-popover.testing.module.d.ts +11 -0
  419. package/src/app/core/form/text-popover/text-popover.component.d.ts +80 -0
  420. package/src/app/core/form/text-popover/text-popover.module.d.ts +9 -0
  421. package/src/app/core/form/username/username.form.d.ts +19 -0
  422. package/src/app/core/form/username/username.module.d.ts +9 -0
  423. package/src/app/core/graphql/graphql.module.d.ts +7 -0
  424. package/src/app/core/graphql/graphql.service.d.ts +142 -0
  425. package/src/app/core/graphql/graphql.utils.d.ts +47 -0
  426. package/src/app/core/home/home.d.ts +109 -0
  427. package/src/app/core/home/home.module.d.ts +14 -0
  428. package/src/app/core/icon/icon.component.d.ts +13 -0
  429. package/src/app/core/icon/icon.module.d.ts +9 -0
  430. package/src/app/core/install/install-upgrade-card.component.d.ts +63 -0
  431. package/src/app/core/install/install-upgrade-card.module.d.ts +9 -0
  432. package/src/app/core/menu/menu.component.d.ts +66 -0
  433. package/src/app/core/menu/menu.model.d.ts +144 -0
  434. package/src/app/core/menu/menu.module.d.ts +12 -0
  435. package/src/app/core/menu/menu.service.d.ts +93 -0
  436. package/src/app/core/menu/sub-menu-tab.directive.d.ts +29 -0
  437. package/src/app/core/menu/testing/menu-other.testing.d.ts +15 -0
  438. package/src/app/core/menu/testing/menu.testing.d.ts +51 -0
  439. package/src/app/core/menu/testing/menu.testing.module.d.ts +12 -0
  440. package/src/app/core/offline/update-offline-mode-card.component.d.ts +11 -0
  441. package/src/app/core/offline/update-offline-mode-card.module.d.ts +9 -0
  442. package/src/app/core/peer/select-peer.modal.d.ts +101 -0
  443. package/src/app/core/peer/select-peer.module.d.ts +12 -0
  444. package/src/app/core/register/register-confirm.page.d.ts +24 -0
  445. package/src/app/core/register/register.form.d.ts +49 -0
  446. package/src/app/core/register/register.modal.d.ts +14 -0
  447. package/src/app/core/register/register.module.d.ts +12 -0
  448. package/src/app/core/services/account.service.d.ts +207 -0
  449. package/src/app/core/services/auth-guard.service.d.ts +17 -0
  450. package/src/app/core/services/base-entity-service.class.d.ts +135 -0
  451. package/src/app/core/services/base-graphql-service.class.d.ts +77 -0
  452. package/src/app/core/services/base58.d.ts +7 -0
  453. package/src/app/core/services/config/core.config.d.ts +46 -0
  454. package/src/app/core/services/config.service.d.ts +63 -0
  455. package/src/app/core/services/crypto.service.d.ts +44 -0
  456. package/src/app/core/services/errors.d.ts +65 -0
  457. package/src/app/core/services/local-settings.service.d.ts +99 -0
  458. package/src/app/core/services/model/account.model.d.ts +56 -0
  459. package/src/app/core/services/model/config.model.d.ts +36 -0
  460. package/src/app/core/services/model/department.model.d.ts +11 -0
  461. package/src/app/core/services/model/entity.decorators.d.ts +17 -0
  462. package/src/app/core/services/model/entity.model.d.ts +133 -0
  463. package/src/app/core/services/model/filter.model.d.ts +37 -0
  464. package/src/app/core/services/model/history.model.d.ts +20 -0
  465. package/src/app/core/services/model/model.enum.d.ts +7 -0
  466. package/src/app/core/services/model/node-feature.model.d.ts +14 -0
  467. package/src/app/core/services/model/peer.model.d.ts +35 -0
  468. package/src/app/core/services/model/person.model.d.ts +37 -0
  469. package/src/app/core/services/model/referential.model.d.ts +84 -0
  470. package/src/app/core/services/model/settings.model.d.ts +29 -0
  471. package/src/app/core/services/model/token.model.d.ts +22 -0
  472. package/src/app/core/services/model/tree-item-entity.model.d.ts +53 -0
  473. package/src/app/core/services/network.service.d.ts +159 -0
  474. package/src/app/core/services/network.types.d.ts +4 -0
  475. package/src/app/core/services/network.utils.d.ts +38 -0
  476. package/src/app/core/services/pipes/account.pipes.d.ts +15 -0
  477. package/src/app/core/services/pipes/department-to-string.pipe.d.ts +9 -0
  478. package/src/app/core/services/pipes/person-to-string.pipe.d.ts +11 -0
  479. package/src/app/core/services/pipes/pipes.module.d.ts +11 -0
  480. package/src/app/core/services/pipes/referential-to-string.pipe.d.ts +13 -0
  481. package/src/app/core/services/pipes/usage-mode.pipes.d.ts +15 -0
  482. package/src/app/core/services/platform.service.d.ts +110 -0
  483. package/src/app/core/services/storage/entities-storage.service.d.ts +108 -0
  484. package/src/app/core/services/storage/entity-store.class.d.ts +113 -0
  485. package/src/app/core/services/testing/referential-filter.model.d.ts +9 -0
  486. package/src/app/core/services/testing/referential.validator.d.ts +22 -0
  487. package/src/app/core/services/validator/account.validator.d.ts +24 -0
  488. package/src/app/core/services/validator/base.validator.class.d.ts +21 -0
  489. package/src/app/core/services/validator/local-settings.validator.d.ts +18 -0
  490. package/src/app/core/services/validator/user-settings.validator.d.ts +10 -0
  491. package/src/app/core/services/validator/user-token.validator.d.ts +13 -0
  492. package/src/app/core/settings/settings.module.d.ts +12 -0
  493. package/src/app/core/settings/settings.page.d.ts +88 -0
  494. package/src/app/core/table/async-table.class.d.ts +395 -0
  495. package/src/app/core/table/column/actions-column.component.d.ts +62 -0
  496. package/src/app/core/table/column/nav-actions-column.component.d.ts +46 -0
  497. package/src/app/core/table/column/row-field.component.d.ts +40 -0
  498. package/src/app/core/table/entities-async-table-datasource.class.d.ts +100 -0
  499. package/src/app/core/table/entities-table-datasource.class.d.ts +103 -0
  500. package/src/app/core/table/memory-table.class.d.ts +25 -0
  501. package/src/app/core/table/table-select-columns.component.d.ts +22 -0
  502. package/src/app/core/table/table.class.d.ts +400 -0
  503. package/src/app/core/table/table.model.d.ts +31 -0
  504. package/src/app/core/table/table.module.d.ts +14 -0
  505. package/src/app/core/table/table.pipes.d.ts +29 -0
  506. package/src/app/core/table/table.utils.d.ts +13 -0
  507. package/src/app/core/table/testing/table-validator.service.d.ts +17 -0
  508. package/src/app/core/table/testing/table.testing.d.ts +54 -0
  509. package/src/app/core/table/testing/table.testing.module.d.ts +14 -0
  510. package/src/app/core/table/testing/table2-validator.service.d.ts +15 -0
  511. package/src/app/core/table/testing/table2.testing.d.ts +48 -0
  512. package/src/app/shared/alerts.d.ts +55 -0
  513. package/src/app/shared/audio/audio.d.ts +45 -0
  514. package/src/app/shared/audio/audio.testing.d.ts +13 -0
  515. package/src/app/shared/audio/audio.testing.module.d.ts +11 -0
  516. package/src/app/shared/capacitor/keyboard.d.ts +16 -0
  517. package/src/app/shared/capacitor/plugins.d.ts +7 -0
  518. package/src/app/shared/constants.d.ts +13 -0
  519. package/src/app/shared/dates.d.ts +61 -0
  520. package/src/app/shared/debug/debug-service.class.d.ts +5 -0
  521. package/src/app/shared/debug/debug.component.d.ts +14 -0
  522. package/src/app/shared/debug/debug.module.d.ts +12 -0
  523. package/src/app/shared/directives/autofocus.directive.d.ts +18 -0
  524. package/src/app/shared/directives/autoresize.directive.d.ts +20 -0
  525. package/src/app/shared/directives/autotitle.directive.d.ts +11 -0
  526. package/src/app/shared/directives/directives.module.d.ts +14 -0
  527. package/src/app/shared/directives/drag-and-drop.directive.d.ts +17 -0
  528. package/src/app/shared/directives/ng-var.directive.d.ts +12 -0
  529. package/src/app/shared/directives/resizable/resizable.component.d.ts +21 -0
  530. package/src/app/shared/directives/resizable/resizable.directive.d.ts +12 -0
  531. package/src/app/shared/directives/resizable/resizable.module.d.ts +8 -0
  532. package/src/app/shared/directives/throttled-click.directive.d.ts +16 -0
  533. package/src/app/shared/events.d.ts +29 -0
  534. package/src/app/shared/file/csv.utils.d.ts +30 -0
  535. package/src/app/shared/file/file.service.d.ts +23 -0
  536. package/src/app/shared/file/file.utils.d.ts +20 -0
  537. package/src/app/shared/file/images.utils.d.ts +36 -0
  538. package/src/app/shared/file/json.utils.d.ts +19 -0
  539. package/src/app/shared/file/uri.utils.d.ts +8 -0
  540. package/src/app/shared/file/url.utils.d.ts +77 -0
  541. package/src/app/shared/focusable.d.ts +4 -0
  542. package/src/app/shared/form/field.component.d.ts +85 -0
  543. package/src/app/shared/form/field.model.d.ts +82 -0
  544. package/src/app/shared/form/loading-spinner.d.ts +8 -0
  545. package/src/app/shared/forms.d.ts +135 -0
  546. package/src/app/shared/functions.d.ts +206 -0
  547. package/src/app/shared/geolocation/geolocation.utils.d.ts +19 -0
  548. package/src/app/shared/gesture/gesture-config.d.ts +15 -0
  549. package/src/app/shared/gesture/hammer.utils.d.ts +16 -0
  550. package/src/app/shared/graph/colors.utils.d.ts +17 -0
  551. package/src/app/shared/graph/graph-colors.d.ts +63 -0
  552. package/src/app/shared/guard/component-dirty.guard.d.ts +14 -0
  553. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.d.ts +8 -0
  554. package/src/app/shared/hotkeys/hotkeys.service.d.ts +48 -0
  555. package/src/app/shared/hotkeys/shared-hotkeys.module.d.ts +11 -0
  556. package/src/app/shared/http/http.utils.d.ts +28 -0
  557. package/src/app/shared/image/gallery/image-gallery.component.d.ts +137 -0
  558. package/src/app/shared/image/gallery/image-gallery.module.d.ts +15 -0
  559. package/src/app/shared/image/gallery/testing/gallegry.model.testing.d.ts +12 -0
  560. package/src/app/shared/image/gallery/testing/gallery.service.testing.d.ts +33 -0
  561. package/src/app/shared/image/gallery/testing/gallery.testing.d.ts +16 -0
  562. package/src/app/shared/image/gallery/testing/gallery.testing.module.d.ts +13 -0
  563. package/src/app/shared/image/image.model.d.ts +7 -0
  564. package/src/app/shared/image/image.module.d.ts +8 -0
  565. package/src/app/shared/image/image.service.d.ts +36 -0
  566. package/src/app/shared/inputs.d.ts +36 -0
  567. package/src/app/shared/interceptors/progess.interceptor.d.ts +8 -0
  568. package/src/app/shared/logging/log-level.model.d.ts +38 -0
  569. package/src/app/shared/logging/logger.model.d.ts +68 -0
  570. package/src/app/shared/logging/logging-service.class.d.ts +39 -0
  571. package/src/app/shared/logging/logging-service.config.d.ts +25 -0
  572. package/src/app/shared/logging/logging-service.module.d.ts +9 -0
  573. package/src/app/shared/markdown/markdown.component.d.ts +86 -0
  574. package/src/app/shared/markdown/markdown.directive.d.ts +13 -0
  575. package/src/app/shared/markdown/markdown.modal.d.ts +49 -0
  576. package/src/app/shared/markdown/markdown.module.d.ts +17 -0
  577. package/src/app/shared/markdown/markdown.service.d.ts +37 -0
  578. package/src/app/shared/markdown/markdown.utils.d.ts +26 -0
  579. package/src/app/shared/markdown/testing/markdown.test.d.ts +18 -0
  580. package/src/app/shared/markdown/testing/markdown.testing.module.d.ts +12 -0
  581. package/src/app/shared/material/autocomplete/material.autocomplete.config.d.ts +74 -0
  582. package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +211 -0
  583. package/src/app/shared/material/autocomplete/material.autocomplete.module.d.ts +22 -0
  584. package/src/app/shared/material/autocomplete/material.autocomplete.utils.d.ts +5 -0
  585. package/src/app/shared/material/autocomplete/testing/autocomplete.test.d.ts +48 -0
  586. package/src/app/shared/material/badge/badge.directive.d.ts +43 -0
  587. package/src/app/shared/material/badge/badge.module.d.ts +10 -0
  588. package/src/app/shared/material/badge/badge.test.d.ts +21 -0
  589. package/src/app/shared/material/boolean/boolean.module.d.ts +20 -0
  590. package/src/app/shared/material/boolean/material.boolean.d.ts +93 -0
  591. package/src/app/shared/material/boolean/testing/boolean.test.page.d.ts +26 -0
  592. package/src/app/shared/material/chips/chips.module.d.ts +21 -0
  593. package/src/app/shared/material/chips/material.chips.d.ts +164 -0
  594. package/src/app/shared/material/chips/testing/chips.test.d.ts +32 -0
  595. package/src/app/shared/material/datetime/datetime.module.d.ts +24 -0
  596. package/src/app/shared/material/datetime/material.date.d.ts +90 -0
  597. package/src/app/shared/material/datetime/material.dateshort.d.ts +89 -0
  598. package/src/app/shared/material/datetime/material.datetime.d.ts +116 -0
  599. package/src/app/shared/material/datetime/testing/mat-date-time.test.d.ts +37 -0
  600. package/src/app/shared/material/datetime/testing/mat-date.test.d.ts +32 -0
  601. package/src/app/shared/material/datetime/testing/mat-dateshort.test.d.ts +31 -0
  602. package/src/app/shared/material/duration/duration.module.d.ts +18 -0
  603. package/src/app/shared/material/duration/duration.utils.d.ts +2 -0
  604. package/src/app/shared/material/duration/material.duration.d.ts +64 -0
  605. package/src/app/shared/material/duration/testing/mat-duration.test.d.ts +23 -0
  606. package/src/app/shared/material/latlong/latlong.utils.d.ts +59 -0
  607. package/src/app/shared/material/latlong/material.latlong-input.d.ts +85 -0
  608. package/src/app/shared/material/latlong/material.latlong.d.ts +90 -0
  609. package/src/app/shared/material/latlong/material.latlong.module.d.ts +21 -0
  610. package/src/app/shared/material/latlong/testing/latlong.test.d.ts +28 -0
  611. package/src/app/shared/material/material.animations.d.ts +8 -0
  612. package/src/app/shared/material/material.config.d.ts +3 -0
  613. package/src/app/shared/material/material.module.d.ts +45 -0
  614. package/src/app/shared/material/material.testing.module.d.ts +32 -0
  615. package/src/app/shared/material/paginator/material.paginator-i18n.d.ts +12 -0
  616. package/src/app/shared/material/stepper/material.stepper-i18n.d.ts +10 -0
  617. package/src/app/shared/material/swipe/material.swipe.d.ts +89 -0
  618. package/src/app/shared/material/swipe/swipe.module.d.ts +16 -0
  619. package/src/app/shared/material/swipe/testing/swipe.test.d.ts +22 -0
  620. package/src/app/shared/material/test/test-component.d.ts +75 -0
  621. package/src/app/shared/material/testing/common.test.d.ts +25 -0
  622. package/src/app/shared/material/text/testing/text-form.testing.d.ts +19 -0
  623. package/src/app/shared/material/text/text-form.component.d.ts +66 -0
  624. package/src/app/shared/material/text/text-form.module.d.ts +16 -0
  625. package/src/app/shared/modules.d.ts +9 -0
  626. package/src/app/shared/named-filter/named-filter-selector.component.d.ts +62 -0
  627. package/src/app/shared/named-filter/named-filter.model.d.ts +32 -0
  628. package/src/app/shared/named-filter/named-filter.module.d.ts +13 -0
  629. package/src/app/shared/named-filter/named-filter.service.d.ts +32 -0
  630. package/src/app/shared/named-filter/testing/named-filter-selector.testing.d.ts +34 -0
  631. package/src/app/shared/named-filter/testing/named-filter.testing.module.d.ts +10 -0
  632. package/src/app/shared/observables.d.ts +30 -0
  633. package/src/app/shared/pipes/arrays.pipe.d.ts +82 -0
  634. package/src/app/shared/pipes/badge.pipes.d.ts +7 -0
  635. package/src/app/shared/pipes/colors.pipe.d.ts +9 -0
  636. package/src/app/shared/pipes/date-diff-duration.pipe.d.ts +25 -0
  637. package/src/app/shared/pipes/date-format.pipe.d.ts +35 -0
  638. package/src/app/shared/pipes/date-from-now.pipe.d.ts +12 -0
  639. package/src/app/shared/pipes/dates.pipe.d.ts +10 -0
  640. package/src/app/shared/pipes/display-with.pipe.d.ts +8 -0
  641. package/src/app/shared/pipes/duration.pipe.d.ts +23 -0
  642. package/src/app/shared/pipes/file-size.pipe.d.ts +30 -0
  643. package/src/app/shared/pipes/form.pipes.d.ts +69 -0
  644. package/src/app/shared/pipes/highlight.pipe.d.ts +11 -0
  645. package/src/app/shared/pipes/html.pipes.d.ts +22 -0
  646. package/src/app/shared/pipes/latlong-format.pipe.d.ts +20 -0
  647. package/src/app/shared/pipes/maps.pipe.d.ts +23 -0
  648. package/src/app/shared/pipes/maskito.pipe.d.ts +14 -0
  649. package/src/app/shared/pipes/math.pipes.d.ts +26 -0
  650. package/src/app/shared/pipes/ng-init.pipe.d.ts +8 -0
  651. package/src/app/shared/pipes/number-format.pipe.d.ts +9 -0
  652. package/src/app/shared/pipes/observable.pipes.d.ts +25 -0
  653. package/src/app/shared/pipes/pipes.module.d.ts +35 -0
  654. package/src/app/shared/pipes/property.pipes.d.ts +41 -0
  655. package/src/app/shared/pipes/selection.pipes.d.ts +62 -0
  656. package/src/app/shared/pipes/string.pipes.d.ts +68 -0
  657. package/src/app/shared/pipes/translate-context.pipe.d.ts +17 -0
  658. package/src/app/shared/pipes/types.pipes.d.ts +30 -0
  659. package/src/app/shared/pipes/url.pipes.d.ts +27 -0
  660. package/src/app/shared/platforms.d.ts +16 -0
  661. package/src/app/shared/print/print.service.d.ts +94 -0
  662. package/src/app/shared/regexps.d.ts +32 -0
  663. package/src/app/shared/rx-state/rx-state.decorators.d.ts +43 -0
  664. package/src/app/shared/rx-state/rx-state.module.d.ts +10 -0
  665. package/src/app/shared/rx-state/rx-state.types.d.ts +4 -0
  666. package/src/app/shared/services/entity-service.class.d.ts +75 -0
  667. package/src/app/shared/services/job.utils.d.ts +20 -0
  668. package/src/app/shared/services/memory-entity-service.class.d.ts +79 -0
  669. package/src/app/shared/services/progress-bar.service.d.ts +20 -0
  670. package/src/app/shared/services/startable-observable-service.class.d.ts +36 -0
  671. package/src/app/shared/services/startable-service.class.d.ts +37 -0
  672. package/src/app/shared/services/translate-context.service.d.ts +29 -0
  673. package/src/app/shared/services/validator-service.class.d.ts +11 -0
  674. package/src/app/shared/services.d.ts +17 -0
  675. package/src/app/shared/shared-routing.module.d.ts +23 -0
  676. package/src/app/shared/shared.module.d.ts +33 -0
  677. package/src/app/shared/shared.testing.module.d.ts +20 -0
  678. package/src/app/shared/storage/storage-explorer.component.d.ts +59 -0
  679. package/src/app/shared/storage/storage-explorer.module.d.ts +13 -0
  680. package/src/app/shared/storage/storage-explorer.testing-routing.module.d.ts +9 -0
  681. package/src/app/shared/storage/storage-explorer.testing.module.d.ts +10 -0
  682. package/src/app/shared/storage/storage.service.d.ts +22 -0
  683. package/src/app/shared/storage/storage.utils.d.ts +19 -0
  684. package/src/app/shared/testing/maskito.test.d.ts +10 -0
  685. package/src/app/shared/testing/observable.test.d.ts +25 -0
  686. package/src/app/shared/testing/tests.page.d.ts +20 -0
  687. package/src/app/shared/toast/toast.testing.d.ts +15 -0
  688. package/src/app/shared/toast/toast.testing.module.d.ts +12 -0
  689. package/src/app/shared/toast/toasts.d.ts +16 -0
  690. package/src/app/shared/toolbar/modal-toolbar.d.ts +21 -0
  691. package/src/app/shared/toolbar/toolbar.d.ts +70 -0
  692. package/src/app/shared/toolbar/toolbar.module.d.ts +16 -0
  693. package/src/app/shared/types.d.ts +36 -0
  694. package/src/app/shared/upload-file/testing/upload-file.testing.d.ts +21 -0
  695. package/src/app/shared/upload-file/testing/upload-file.testing.module.d.ts +11 -0
  696. package/src/app/shared/upload-file/upload-file-popover.component.d.ts +41 -0
  697. package/src/app/shared/upload-file/upload-file.component.d.ts +50 -0
  698. package/src/app/shared/upload-file/upload-file.model.d.ts +30 -0
  699. package/src/app/shared/validator/form-error-adapter.class.d.ts +33 -0
  700. package/src/app/shared/validator/validators.d.ts +139 -0
  701. package/src/app/shared/version/versions.d.ts +26 -0
  702. package/src/app/social/job/job.module.d.ts +12 -0
  703. package/src/app/social/job/progression/job-progression.component.d.ts +23 -0
  704. package/src/app/social/job/progression/job-progression.icon.d.ts +62 -0
  705. package/src/app/social/job/progression/job-progression.list.d.ts +19 -0
  706. package/src/app/social/job/progression/job-progression.model.d.ts +10 -0
  707. package/src/app/social/job/progression/job-progression.service.d.ts +33 -0
  708. package/src/app/social/job/testing/job-progression.testing.d.ts +13 -0
  709. package/src/app/social/job/testing/job-progression.testing.service.d.ts +9 -0
  710. package/src/app/social/job/testing/job.testing.module.d.ts +11 -0
  711. package/src/app/social/message/message.form.d.ts +36 -0
  712. package/src/app/social/message/message.modal.d.ts +43 -0
  713. package/src/app/social/message/message.model.d.ts +33 -0
  714. package/src/app/social/message/message.module.d.ts +12 -0
  715. package/src/app/social/message/message.service.d.ts +32 -0
  716. package/src/app/social/social.errors.d.ts +9 -0
  717. package/src/app/social/social.module.d.ts +20 -0
  718. package/src/app/social/social.testing.module.d.ts +13 -0
  719. package/src/app/social/user-event/notification/user-event-notification.icon.d.ts +32 -0
  720. package/src/app/social/user-event/notification/user-event-notification.list.d.ts +71 -0
  721. package/src/app/social/user-event/testing/user-event.testing.d.ts +35 -0
  722. package/src/app/social/user-event/testing/user-event.testing.model.d.ts +42 -0
  723. package/src/app/social/user-event/testing/user-event.testing.module.d.ts +11 -0
  724. package/src/app/social/user-event/testing/user-event.testing.service.d.ts +42 -0
  725. package/src/app/social/user-event/user-event.model.d.ts +44 -0
  726. package/src/app/social/user-event/user-event.module.d.ts +13 -0
  727. package/src/app/social/user-event/user-event.service.d.ts +124 -0
  728. package/src/assets/manifest.json +1 -1
  729. package/src/environments/environment.class.d.ts +75 -0
  730. package/src/environments/environment.d.ts +2 -0
  731. package/src/environments/environment.loader.d.ts +24 -0
  732. package/.editorconfig +0 -24
  733. package/.eslintrc.json +0 -95
  734. package/.gitattribute +0 -1
  735. package/.github/CONTRIBUTING.md +0 -10
  736. package/.github/ISSUE_TEMPLATE.md +0 -6
  737. package/.github/PULL_REQUEST_TEMPLATE.md +0 -10
  738. package/.github/github_disclaimer.md +0 -14
  739. package/.gitlab-ci.yml +0 -46
  740. package/.graphqlconfig +0 -15
  741. package/.prettierignore +0 -9
  742. package/.prettierrc.json +0 -17
  743. package/angular.json +0 -236
  744. package/capacitor.config.ts +0 -49
  745. package/graphql.config.yml +0 -13
  746. package/ionic.config.json +0 -7
  747. package/karma.conf.js +0 -38
  748. package/ng-package.json +0 -21
  749. package/ngcc.config.js +0 -9
  750. package/public_api.ts +0 -426
  751. package/resources/README.md +0 -7
  752. package/resources/icon/TODO.md +0 -11
  753. package/resources/icon.png +0 -0
  754. package/resources/icon.png.md5 +0 -1
  755. package/resources/icon.xcf +0 -0
  756. package/resources/ios/icon/icon-1024.png +0 -0
  757. package/resources/ios/icon/icon-108@2x.png +0 -0
  758. package/resources/ios/icon/icon-20.png +0 -0
  759. package/resources/ios/icon/icon-20@2x.png +0 -0
  760. package/resources/ios/icon/icon-20@3x.png +0 -0
  761. package/resources/ios/icon/icon-24@2x.png +0 -0
  762. package/resources/ios/icon/icon-27.5@2x.png +0 -0
  763. package/resources/ios/icon/icon-29.png +0 -0
  764. package/resources/ios/icon/icon-29@2x.png +0 -0
  765. package/resources/ios/icon/icon-29@3x.png +0 -0
  766. package/resources/ios/icon/icon-40.png +0 -0
  767. package/resources/ios/icon/icon-40@2x.png +0 -0
  768. package/resources/ios/icon/icon-40@3x.png +0 -0
  769. package/resources/ios/icon/icon-44@2x.png +0 -0
  770. package/resources/ios/icon/icon-50.png +0 -0
  771. package/resources/ios/icon/icon-50@2x.png +0 -0
  772. package/resources/ios/icon/icon-60.png +0 -0
  773. package/resources/ios/icon/icon-60@2x.png +0 -0
  774. package/resources/ios/icon/icon-60@3x.png +0 -0
  775. package/resources/ios/icon/icon-72.png +0 -0
  776. package/resources/ios/icon/icon-72@2x.png +0 -0
  777. package/resources/ios/icon/icon-76.png +0 -0
  778. package/resources/ios/icon/icon-76@2x.png +0 -0
  779. package/resources/ios/icon/icon-83.5@2x.png +0 -0
  780. package/resources/ios/icon/icon-86@2x.png +0 -0
  781. package/resources/ios/icon/icon-98@2x.png +0 -0
  782. package/resources/ios/icon/icon-small.png +0 -0
  783. package/resources/ios/icon/icon-small@2x.png +0 -0
  784. package/resources/ios/icon/icon-small@3x.png +0 -0
  785. package/resources/ios/icon/icon.png +0 -0
  786. package/resources/ios/icon/icon@2x.png +0 -0
  787. package/resources/ios/splash/Default-1792h~iphone.png +0 -0
  788. package/resources/ios/splash/Default-2436h.png +0 -0
  789. package/resources/ios/splash/Default-2688h~iphone.png +0 -0
  790. package/resources/ios/splash/Default-568h@2x~iphone.png +0 -0
  791. package/resources/ios/splash/Default-667h.png +0 -0
  792. package/resources/ios/splash/Default-736h.png +0 -0
  793. package/resources/ios/splash/Default-Landscape-1792h~iphone.png +0 -0
  794. package/resources/ios/splash/Default-Landscape-2436h.png +0 -0
  795. package/resources/ios/splash/Default-Landscape-2688h~iphone.png +0 -0
  796. package/resources/ios/splash/Default-Landscape-736h.png +0 -0
  797. package/resources/ios/splash/Default-Landscape@2x~ipad.png +0 -0
  798. package/resources/ios/splash/Default-Landscape@~ipadpro.png +0 -0
  799. package/resources/ios/splash/Default-Landscape~ipad.png +0 -0
  800. package/resources/ios/splash/Default-Portrait@2x~ipad.png +0 -0
  801. package/resources/ios/splash/Default-Portrait@~ipadpro.png +0 -0
  802. package/resources/ios/splash/Default-Portrait~ipad.png +0 -0
  803. package/resources/ios/splash/Default@2x~iphone.png +0 -0
  804. package/resources/ios/splash/Default@2x~universal~anyany.png +0 -0
  805. package/resources/ios/splash/Default~iphone.png +0 -0
  806. package/resources/splash.png +0 -0
  807. package/resources/splash.png.md5 +0 -1
  808. package/scripts/build-android.sh +0 -18
  809. package/scripts/docker-start.sh +0 -6
  810. package/scripts/emulate-android.sh +0 -17
  811. package/scripts/env-android.sh +0 -83
  812. package/scripts/env-clean.sh +0 -23
  813. package/scripts/env-global.sh +0 -154
  814. package/scripts/install-android-sdk-tools.sh +0 -73
  815. package/scripts/ionic-update.sh +0 -24
  816. package/scripts/node/build-i18n.js +0 -37
  817. package/scripts/node/playground.ts +0 -9
  818. package/scripts/node/resources.js +0 -108
  819. package/scripts/release.sh +0 -162
  820. package/scripts/run-android.sh +0 -59
  821. package/scripts/test.sh +0 -19
  822. package/src/app/admin/admin-routing.module.ts +0 -26
  823. package/src/app/admin/admin.module.ts +0 -20
  824. package/src/app/admin/services/filter/person.filter.ts +0 -86
  825. package/src/app/admin/services/person.service.ts +0 -244
  826. package/src/app/admin/services/validator/person.validator.ts +0 -86
  827. package/src/app/admin/users/users.html +0 -613
  828. package/src/app/admin/users/users.module.ts +0 -32
  829. package/src/app/admin/users/users.scss +0 -80
  830. package/src/app/admin/users/users.ts +0 -387
  831. package/src/app/app-routing.module.ts +0 -165
  832. package/src/app/app.component.html +0 -14
  833. package/src/app/app.component.scss +0 -4
  834. package/src/app/app.component.ts +0 -252
  835. package/src/app/app.module.ts +0 -355
  836. package/src/app/core/about/about.modal.html +0 -145
  837. package/src/app/core/about/about.modal.scss +0 -22
  838. package/src/app/core/about/about.modal.ts +0 -69
  839. package/src/app/core/about/about.module.ts +0 -14
  840. package/src/app/core/account/account.module.ts +0 -43
  841. package/src/app/core/account/account.page.html +0 -329
  842. package/src/app/core/account/account.page.scss +0 -20
  843. package/src/app/core/account/account.page.ts +0 -389
  844. package/src/app/core/account/new-token.form.html +0 -90
  845. package/src/app/core/account/new-token.form.ts +0 -99
  846. package/src/app/core/account/new-token.modal.html +0 -52
  847. package/src/app/core/account/new-token.modal.ts +0 -68
  848. package/src/app/core/account/password/change-password.form.html +0 -62
  849. package/src/app/core/account/password/change-password.form.scss +0 -0
  850. package/src/app/core/account/password/change-password.form.ts +0 -58
  851. package/src/app/core/account/password/change-password.module.ts +0 -14
  852. package/src/app/core/account/password/change-password.page.html +0 -41
  853. package/src/app/core/account/password/change-password.page.scss +0 -49
  854. package/src/app/core/account/password/change-password.page.ts +0 -158
  855. package/src/app/core/account/token.table.html +0 -160
  856. package/src/app/core/account/token.table.scss +0 -7
  857. package/src/app/core/account/token.table.ts +0 -160
  858. package/src/app/core/auth/auth.form.html +0 -108
  859. package/src/app/core/auth/auth.form.scss +0 -0
  860. package/src/app/core/auth/auth.form.ts +0 -165
  861. package/src/app/core/auth/auth.modal.html +0 -50
  862. package/src/app/core/auth/auth.modal.scss +0 -0
  863. package/src/app/core/auth/auth.modal.ts +0 -78
  864. package/src/app/core/auth/auth.module.ts +0 -35
  865. package/src/app/core/auth/reset-password.modal.html +0 -59
  866. package/src/app/core/auth/reset-password.modal.ts +0 -83
  867. package/src/app/core/core.module.ts +0 -72
  868. package/src/app/core/core.testing.module.ts +0 -80
  869. package/src/app/core/form/array/form-array.ts +0 -409
  870. package/src/app/core/form/array/testing/form-array-test.module.ts +0 -15
  871. package/src/app/core/form/array/testing/form-array.test.html +0 -196
  872. package/src/app/core/form/array/testing/form-array.test.ts +0 -119
  873. package/src/app/core/form/buttons/form-buttons-bar.component.html +0 -82
  874. package/src/app/core/form/buttons/form-buttons-bar.component.scss +0 -19
  875. package/src/app/core/form/buttons/form-buttons-bar.component.ts +0 -89
  876. package/src/app/core/form/buttons/form-buttons-bar.module.ts +0 -20
  877. package/src/app/core/form/entity/editor.class.ts +0 -295
  878. package/src/app/core/form/entity/entity-editor-modal.class.ts +0 -494
  879. package/src/app/core/form/entity/entity-editor.class.ts +0 -894
  880. package/src/app/core/form/entity/entity-metadata.component.html +0 -57
  881. package/src/app/core/form/entity/entity-metadata.component.scss +0 -40
  882. package/src/app/core/form/entity/entity-metadata.component.ts +0 -18
  883. package/src/app/core/form/entity/entity.module.ts +0 -20
  884. package/src/app/core/form/entity/tab-editor.class.ts +0 -224
  885. package/src/app/core/form/form-container.class.ts +0 -380
  886. package/src/app/core/form/form.class.ts +0 -377
  887. package/src/app/core/form/form.module.ts +0 -38
  888. package/src/app/core/form/form.utils.ts +0 -305
  889. package/src/app/core/form/list/list.form.html +0 -68
  890. package/src/app/core/form/list/list.form.scss +0 -40
  891. package/src/app/core/form/list/list.form.ts +0 -266
  892. package/src/app/core/form/list/list.module.ts +0 -20
  893. package/src/app/core/form/properties/properties.form.html +0 -160
  894. package/src/app/core/form/properties/properties.form.scss +0 -21
  895. package/src/app/core/form/properties/properties.form.ts +0 -331
  896. package/src/app/core/form/properties/properties.module.ts +0 -24
  897. package/src/app/core/form/properties/properties.table.html +0 -228
  898. package/src/app/core/form/properties/properties.table.scss +0 -0
  899. package/src/app/core/form/properties/properties.table.ts +0 -275
  900. package/src/app/core/form/properties/properties.utils.ts +0 -391
  901. package/src/app/core/form/properties/property.validator.ts +0 -82
  902. package/src/app/core/form/properties/testing/properties-form.test.html +0 -23
  903. package/src/app/core/form/properties/testing/properties-form.test.ts +0 -109
  904. package/src/app/core/form/properties/testing/properties-form.testing.module.ts +0 -14
  905. package/src/app/core/form/text-popover/testing/text-popover.testing.html +0 -50
  906. package/src/app/core/form/text-popover/testing/text-popover.testing.module.ts +0 -21
  907. package/src/app/core/form/text-popover/testing/text-popover.testing.ts +0 -76
  908. package/src/app/core/form/text-popover/text-popover.component.html +0 -89
  909. package/src/app/core/form/text-popover/text-popover.component.scss +0 -7
  910. package/src/app/core/form/text-popover/text-popover.component.ts +0 -176
  911. package/src/app/core/form/text-popover/text-popover.module.ts +0 -19
  912. package/src/app/core/form/username/username.form.html +0 -27
  913. package/src/app/core/form/username/username.form.ts +0 -44
  914. package/src/app/core/form/username/username.module.ts +0 -12
  915. package/src/app/core/graphql/graphql.module.ts +0 -7
  916. package/src/app/core/graphql/graphql.service.ts +0 -962
  917. package/src/app/core/graphql/graphql.utils.ts +0 -166
  918. package/src/app/core/home/home.html +0 -295
  919. package/src/app/core/home/home.module.ts +0 -27
  920. package/src/app/core/home/home.scss +0 -279
  921. package/src/app/core/home/home.ts +0 -422
  922. package/src/app/core/icon/icon.component.html +0 -19
  923. package/src/app/core/icon/icon.component.ts +0 -22
  924. package/src/app/core/icon/icon.module.ts +0 -13
  925. package/src/app/core/install/install-upgrade-card.component.html +0 -144
  926. package/src/app/core/install/install-upgrade-card.component.scss +0 -3
  927. package/src/app/core/install/install-upgrade-card.component.ts +0 -445
  928. package/src/app/core/install/install-upgrade-card.module.ts +0 -18
  929. package/src/app/core/menu/menu.component.html +0 -219
  930. package/src/app/core/menu/menu.component.scss +0 -304
  931. package/src/app/core/menu/menu.component.ts +0 -251
  932. package/src/app/core/menu/menu.filter.ts +0 -28
  933. package/src/app/core/menu/menu.model.ts +0 -356
  934. package/src/app/core/menu/menu.module.ts +0 -27
  935. package/src/app/core/menu/menu.service.ts +0 -727
  936. package/src/app/core/menu/sub-menu-tab.directive.ts +0 -99
  937. package/src/app/core/menu/testing/menu-other.testing.ts +0 -57
  938. package/src/app/core/menu/testing/menu.testing.html +0 -143
  939. package/src/app/core/menu/testing/menu.testing.module.ts +0 -52
  940. package/src/app/core/menu/testing/menu.testing.scss +0 -5
  941. package/src/app/core/menu/testing/menu.testing.ts +0 -175
  942. package/src/app/core/offline/update-offline-mode-card.component.html +0 -39
  943. package/src/app/core/offline/update-offline-mode-card.component.scss +0 -3
  944. package/src/app/core/offline/update-offline-mode-card.component.ts +0 -23
  945. package/src/app/core/offline/update-offline-mode-card.module.ts +0 -20
  946. package/src/app/core/peer/select-peer.modal.html +0 -317
  947. package/src/app/core/peer/select-peer.modal.scss +0 -41
  948. package/src/app/core/peer/select-peer.modal.ts +0 -366
  949. package/src/app/core/peer/select-peer.module.ts +0 -23
  950. package/src/app/core/register/register-confirm.page.html +0 -51
  951. package/src/app/core/register/register-confirm.page.scss +0 -56
  952. package/src/app/core/register/register-confirm.page.ts +0 -90
  953. package/src/app/core/register/register.form.html +0 -143
  954. package/src/app/core/register/register.form.scss +0 -10
  955. package/src/app/core/register/register.form.ts +0 -218
  956. package/src/app/core/register/register.modal.html +0 -66
  957. package/src/app/core/register/register.modal.ts +0 -50
  958. package/src/app/core/register/register.module.ts +0 -15
  959. package/src/app/core/services/account.service.ts +0 -1567
  960. package/src/app/core/services/auth-guard.service.ts +0 -70
  961. package/src/app/core/services/base-entity-service.class.ts +0 -659
  962. package/src/app/core/services/base-graphql-service.class.ts +0 -319
  963. package/src/app/core/services/base58.ts +0 -90
  964. package/src/app/core/services/config/core.config.ts +0 -263
  965. package/src/app/core/services/config.service.ts +0 -425
  966. package/src/app/core/services/crypto.service.ts +0 -126
  967. package/src/app/core/services/errors.ts +0 -80
  968. package/src/app/core/services/local-settings.service.spec.ts +0 -39
  969. package/src/app/core/services/local-settings.service.ts +0 -605
  970. package/src/app/core/services/model/account.model.ts +0 -188
  971. package/src/app/core/services/model/config.model.ts +0 -116
  972. package/src/app/core/services/model/department.model.ts +0 -34
  973. package/src/app/core/services/model/entity.decorators.ts +0 -110
  974. package/src/app/core/services/model/entity.model.ts +0 -409
  975. package/src/app/core/services/model/filter.model.ts +0 -127
  976. package/src/app/core/services/model/history.model.ts +0 -25
  977. package/src/app/core/services/model/model.enum.ts +0 -10
  978. package/src/app/core/services/model/node-feature.model.ts +0 -31
  979. package/src/app/core/services/model/peer.model.ts +0 -119
  980. package/src/app/core/services/model/person.model.ts +0 -122
  981. package/src/app/core/services/model/referential.model.ts +0 -253
  982. package/src/app/core/services/model/settings.model.ts +0 -37
  983. package/src/app/core/services/model/token.model.ts +0 -60
  984. package/src/app/core/services/model/tree-item-entity.model.ts +0 -230
  985. package/src/app/core/services/network.service.spec.ts +0 -47
  986. package/src/app/core/services/network.service.ts +0 -761
  987. package/src/app/core/services/network.types.ts +0 -7
  988. package/src/app/core/services/network.utils.ts +0 -83
  989. package/src/app/core/services/pipes/account.pipes.ts +0 -22
  990. package/src/app/core/services/pipes/department-to-string.pipe.ts +0 -13
  991. package/src/app/core/services/pipes/person-to-string.pipe.ts +0 -13
  992. package/src/app/core/services/pipes/pipes.module.ts +0 -30
  993. package/src/app/core/services/pipes/referential-to-string.pipe.ts +0 -18
  994. package/src/app/core/services/pipes/usage-mode.pipes.ts +0 -23
  995. package/src/app/core/services/platform.service.spec.ts +0 -50
  996. package/src/app/core/services/platform.service.ts +0 -694
  997. package/src/app/core/services/storage/entities-storage.service.ts +0 -557
  998. package/src/app/core/services/storage/entity-store.class.ts +0 -589
  999. package/src/app/core/services/testing/local-settings.config.ts +0 -35
  1000. package/src/app/core/services/testing/referential-filter.model.ts +0 -28
  1001. package/src/app/core/services/testing/referential.validator.ts +0 -58
  1002. package/src/app/core/services/testing/user-settings.config.ts +0 -77
  1003. package/src/app/core/services/validator/account.validator.ts +0 -50
  1004. package/src/app/core/services/validator/base.validator.class.ts +0 -51
  1005. package/src/app/core/services/validator/local-settings.validator.ts +0 -59
  1006. package/src/app/core/services/validator/user-settings.validator.ts +0 -22
  1007. package/src/app/core/services/validator/user-token.validator.ts +0 -54
  1008. package/src/app/core/settings/settings.module.ts +0 -15
  1009. package/src/app/core/settings/settings.page.html +0 -300
  1010. package/src/app/core/settings/settings.page.ts +0 -455
  1011. package/src/app/core/table/async-table.class.ts +0 -2019
  1012. package/src/app/core/table/column/actions-column.component.html +0 -219
  1013. package/src/app/core/table/column/actions-column.component.scss +0 -17
  1014. package/src/app/core/table/column/actions-column.component.ts +0 -83
  1015. package/src/app/core/table/column/nav-actions-column.component.html +0 -119
  1016. package/src/app/core/table/column/nav-actions-column.component.ts +0 -108
  1017. package/src/app/core/table/column/row-field.component.html +0 -43
  1018. package/src/app/core/table/column/row-field.component.scss +0 -0
  1019. package/src/app/core/table/column/row-field.component.ts +0 -63
  1020. package/src/app/core/table/entities-async-table-datasource.class.ts +0 -501
  1021. package/src/app/core/table/entities-table-datasource.class.ts +0 -499
  1022. package/src/app/core/table/memory-table.class.ts +0 -56
  1023. package/src/app/core/table/table-select-columns.component.html +0 -56
  1024. package/src/app/core/table/table-select-columns.component.ts +0 -49
  1025. package/src/app/core/table/table.class.ts +0 -2080
  1026. package/src/app/core/table/table.model.ts +0 -39
  1027. package/src/app/core/table/table.module.ts +0 -28
  1028. package/src/app/core/table/table.pipes.ts +0 -87
  1029. package/src/app/core/table/table.utils.ts +0 -42
  1030. package/src/app/core/table/testing/multi-table.testing.html +0 -456
  1031. package/src/app/core/table/testing/multi-table.testing.ts +0 -263
  1032. package/src/app/core/table/testing/table-validator.service.ts +0 -29
  1033. package/src/app/core/table/testing/table.testing.html +0 -556
  1034. package/src/app/core/table/testing/table.testing.module.ts +0 -16
  1035. package/src/app/core/table/testing/table.testing.scss +0 -32
  1036. package/src/app/core/table/testing/table.testing.ts +0 -329
  1037. package/src/app/core/table/testing/table2-validator.service.ts +0 -19
  1038. package/src/app/core/table/testing/table2.testing.html +0 -470
  1039. package/src/app/core/table/testing/table2.testing.scss +0 -25
  1040. package/src/app/core/table/testing/table2.testing.ts +0 -274
  1041. package/src/app/shared/alerts.ts +0 -296
  1042. package/src/app/shared/audio/audio.testing.html +0 -29
  1043. package/src/app/shared/audio/audio.testing.module.ts +0 -21
  1044. package/src/app/shared/audio/audio.testing.ts +0 -27
  1045. package/src/app/shared/audio/audio.ts +0 -273
  1046. package/src/app/shared/base64.utils.ts +0 -66
  1047. package/src/app/shared/capacitor/keyboard.ts +0 -38
  1048. package/src/app/shared/capacitor/plugins.ts +0 -12
  1049. package/src/app/shared/constants.ts +0 -19
  1050. package/src/app/shared/dates.ts +0 -206
  1051. package/src/app/shared/debug/debug-service.class.ts +0 -7
  1052. package/src/app/shared/debug/debug.component.html +0 -13
  1053. package/src/app/shared/debug/debug.component.scss +0 -21
  1054. package/src/app/shared/debug/debug.component.spec.ts +0 -24
  1055. package/src/app/shared/debug/debug.component.ts +0 -25
  1056. package/src/app/shared/debug/debug.module.ts +0 -14
  1057. package/src/app/shared/directives/autofocus.directive.ts +0 -93
  1058. package/src/app/shared/directives/autoresize.directive.ts +0 -67
  1059. package/src/app/shared/directives/autotitle.directive.ts +0 -17
  1060. package/src/app/shared/directives/directives.module.ts +0 -16
  1061. package/src/app/shared/directives/drag-and-drop.directive.ts +0 -46
  1062. package/src/app/shared/directives/ng-var.directive.ts +0 -31
  1063. package/src/app/shared/directives/resizable/resizable.component.ts +0 -48
  1064. package/src/app/shared/directives/resizable/resizable.directive.ts +0 -43
  1065. package/src/app/shared/directives/resizable/resizable.module.ts +0 -9
  1066. package/src/app/shared/directives/resizable/resizable.style.scss +0 -37
  1067. package/src/app/shared/directives/resizable/resizable.template.html +0 -6
  1068. package/src/app/shared/directives/throttled-click.directive.ts +0 -36
  1069. package/src/app/shared/events.ts +0 -93
  1070. package/src/app/shared/file/csv.utils.ts +0 -123
  1071. package/src/app/shared/file/file.service.ts +0 -129
  1072. package/src/app/shared/file/file.utils.ts +0 -142
  1073. package/src/app/shared/file/images.utils.ts +0 -214
  1074. package/src/app/shared/file/json.utils.ts +0 -82
  1075. package/src/app/shared/file/uri.utils.ts +0 -31
  1076. package/src/app/shared/file/url.utils.ts +0 -163
  1077. package/src/app/shared/focusable.ts +0 -8
  1078. package/src/app/shared/form/field.component.html +0 -380
  1079. package/src/app/shared/form/field.component.scss +0 -7
  1080. package/src/app/shared/form/field.component.ts +0 -344
  1081. package/src/app/shared/form/field.model.ts +0 -158
  1082. package/src/app/shared/form/loading-spinner.ts +0 -16
  1083. package/src/app/shared/forms.ts +0 -577
  1084. package/src/app/shared/functions.spec.ts +0 -197
  1085. package/src/app/shared/functions.ts +0 -694
  1086. package/src/app/shared/geolocation/geolocation.utils.ts +0 -105
  1087. package/src/app/shared/gesture/gesture-config.ts +0 -43
  1088. package/src/app/shared/gesture/hammer.utils.ts +0 -14
  1089. package/src/app/shared/graph/colors.utils.ts +0 -69
  1090. package/src/app/shared/graph/graph-colors.ts +0 -270
  1091. package/src/app/shared/guard/component-dirty.guard.ts +0 -67
  1092. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.html +0 -11
  1093. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.scss +0 -37
  1094. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.ts +0 -14
  1095. package/src/app/shared/hotkeys/hotkeys.service.ts +0 -165
  1096. package/src/app/shared/hotkeys/shared-hotkeys.module.ts +0 -15
  1097. package/src/app/shared/http/http.utils.ts +0 -95
  1098. package/src/app/shared/image/gallery/image-gallery.component.html +0 -282
  1099. package/src/app/shared/image/gallery/image-gallery.component.scss +0 -218
  1100. package/src/app/shared/image/gallery/image-gallery.component.ts +0 -434
  1101. package/src/app/shared/image/gallery/image-gallery.module.ts +0 -35
  1102. package/src/app/shared/image/gallery/testing/gallegry.model.testing.ts +0 -23
  1103. package/src/app/shared/image/gallery/testing/gallery.service.testing.ts +0 -99
  1104. package/src/app/shared/image/gallery/testing/gallery.testing.html +0 -27
  1105. package/src/app/shared/image/gallery/testing/gallery.testing.module.ts +0 -39
  1106. package/src/app/shared/image/gallery/testing/gallery.testing.ts +0 -34
  1107. package/src/app/shared/image/image.model.ts +0 -8
  1108. package/src/app/shared/image/image.module.ts +0 -12
  1109. package/src/app/shared/image/image.service.ts +0 -111
  1110. package/src/app/shared/image/image.testing.module.ts +0 -16
  1111. package/src/app/shared/inputs.ts +0 -330
  1112. package/src/app/shared/interceptors/progess.interceptor.ts +0 -24
  1113. package/src/app/shared/logging/log-level.model.ts +0 -53
  1114. package/src/app/shared/logging/logger.model.ts +0 -117
  1115. package/src/app/shared/logging/logging-service.class.ts +0 -131
  1116. package/src/app/shared/logging/logging-service.config.ts +0 -29
  1117. package/src/app/shared/logging/logging-service.module.ts +0 -19
  1118. package/src/app/shared/markdown/markdown.component.html +0 -55
  1119. package/src/app/shared/markdown/markdown.component.scss +0 -75
  1120. package/src/app/shared/markdown/markdown.component.ts +0 -350
  1121. package/src/app/shared/markdown/markdown.directive.ts +0 -28
  1122. package/src/app/shared/markdown/markdown.modal.html +0 -42
  1123. package/src/app/shared/markdown/markdown.modal.ts +0 -91
  1124. package/src/app/shared/markdown/markdown.module.ts +0 -65
  1125. package/src/app/shared/markdown/markdown.service.ts +0 -234
  1126. package/src/app/shared/markdown/markdown.utils.ts +0 -90
  1127. package/src/app/shared/markdown/testing/markdown.test.html +0 -50
  1128. package/src/app/shared/markdown/testing/markdown.test.ts +0 -49
  1129. package/src/app/shared/markdown/testing/markdown.testing.module.ts +0 -22
  1130. package/src/app/shared/material/autocomplete/material.autocomplete.config.ts +0 -127
  1131. package/src/app/shared/material/autocomplete/material.autocomplete.html +0 -400
  1132. package/src/app/shared/material/autocomplete/material.autocomplete.module.ts +0 -41
  1133. package/src/app/shared/material/autocomplete/material.autocomplete.scss +0 -54
  1134. package/src/app/shared/material/autocomplete/material.autocomplete.ts +0 -1375
  1135. package/src/app/shared/material/autocomplete/material.autocomplete.utils.ts +0 -21
  1136. package/src/app/shared/material/autocomplete/testing/autocomplete.test.html +0 -1164
  1137. package/src/app/shared/material/autocomplete/testing/autocomplete.test.spec.ts +0 -33
  1138. package/src/app/shared/material/autocomplete/testing/autocomplete.test.ts +0 -272
  1139. package/src/app/shared/material/badge/badge.directive.ts +0 -217
  1140. package/src/app/shared/material/badge/badge.module.ts +0 -12
  1141. package/src/app/shared/material/badge/badge.test.html +0 -275
  1142. package/src/app/shared/material/badge/badge.test.ts +0 -34
  1143. package/src/app/shared/material/boolean/boolean.module.ts +0 -36
  1144. package/src/app/shared/material/boolean/material.boolean.html +0 -271
  1145. package/src/app/shared/material/boolean/material.boolean.scss +0 -27
  1146. package/src/app/shared/material/boolean/material.boolean.ts +0 -343
  1147. package/src/app/shared/material/boolean/testing/boolean.test.page.html +0 -469
  1148. package/src/app/shared/material/boolean/testing/boolean.test.page.ts +0 -66
  1149. package/src/app/shared/material/chips/chips.module.ts +0 -38
  1150. package/src/app/shared/material/chips/material.chips.html +0 -233
  1151. package/src/app/shared/material/chips/material.chips.scss +0 -67
  1152. package/src/app/shared/material/chips/material.chips.ts +0 -834
  1153. package/src/app/shared/material/chips/testing/chips.test.html +0 -207
  1154. package/src/app/shared/material/chips/testing/chips.test.ts +0 -169
  1155. package/src/app/shared/material/datetime/datetime.module.ts +0 -42
  1156. package/src/app/shared/material/datetime/material.date.html +0 -186
  1157. package/src/app/shared/material/datetime/material.date.scss +0 -17
  1158. package/src/app/shared/material/datetime/material.date.ts +0 -512
  1159. package/src/app/shared/material/datetime/material.dateshort.html +0 -194
  1160. package/src/app/shared/material/datetime/material.dateshort.scss +0 -23
  1161. package/src/app/shared/material/datetime/material.dateshort.ts +0 -497
  1162. package/src/app/shared/material/datetime/material.datetime.html +0 -325
  1163. package/src/app/shared/material/datetime/material.datetime.scss +0 -87
  1164. package/src/app/shared/material/datetime/material.datetime.ts +0 -758
  1165. package/src/app/shared/material/datetime/testing/mat-date-time.test.html +0 -794
  1166. package/src/app/shared/material/datetime/testing/mat-date-time.test.ts +0 -155
  1167. package/src/app/shared/material/datetime/testing/mat-date.test.html +0 -564
  1168. package/src/app/shared/material/datetime/testing/mat-date.test.ts +0 -145
  1169. package/src/app/shared/material/datetime/testing/mat-dateshort.test.html +0 -530
  1170. package/src/app/shared/material/datetime/testing/mat-dateshort.test.ts +0 -133
  1171. package/src/app/shared/material/duration/duration.module.ts +0 -33
  1172. package/src/app/shared/material/duration/duration.utils.ts +0 -18
  1173. package/src/app/shared/material/duration/material.duration.html +0 -116
  1174. package/src/app/shared/material/duration/material.duration.scss +0 -28
  1175. package/src/app/shared/material/duration/material.duration.ts +0 -308
  1176. package/src/app/shared/material/duration/testing/mat-duration.test.html +0 -170
  1177. package/src/app/shared/material/duration/testing/mat-duration.test.ts +0 -88
  1178. package/src/app/shared/material/latlong/latlong.utils.ts +0 -376
  1179. package/src/app/shared/material/latlong/material.latlong-input.html +0 -95
  1180. package/src/app/shared/material/latlong/material.latlong-input.scss +0 -66
  1181. package/src/app/shared/material/latlong/material.latlong-input.ts +0 -445
  1182. package/src/app/shared/material/latlong/material.latlong.html +0 -90
  1183. package/src/app/shared/material/latlong/material.latlong.module.ts +0 -37
  1184. package/src/app/shared/material/latlong/material.latlong.scss +0 -0
  1185. package/src/app/shared/material/latlong/material.latlong.ts +0 -203
  1186. package/src/app/shared/material/latlong/testing/latlong.test.html +0 -1008
  1187. package/src/app/shared/material/latlong/testing/latlong.test.ts +0 -144
  1188. package/src/app/shared/material/material.animations.ts +0 -269
  1189. package/src/app/shared/material/material.config.ts +0 -5
  1190. package/src/app/shared/material/material.module.ts +0 -94
  1191. package/src/app/shared/material/material.testing.module.ts +0 -192
  1192. package/src/app/shared/material/memory/memory.utils.ts +0 -57
  1193. package/src/app/shared/material/numpad/numpad.animation.ts +0 -1
  1194. package/src/app/shared/material/numpad/numpad.append-to-input.directive.ts +0 -110
  1195. package/src/app/shared/material/numpad/numpad.component.ts +0 -73
  1196. package/src/app/shared/material/numpad/numpad.container.html +0 -37
  1197. package/src/app/shared/material/numpad/numpad.container.scss +0 -55
  1198. package/src/app/shared/material/numpad/numpad.container.ts +0 -152
  1199. package/src/app/shared/material/numpad/numpad.content.html +0 -13
  1200. package/src/app/shared/material/numpad/numpad.content.ts +0 -10
  1201. package/src/app/shared/material/numpad/numpad.directive.ts +0 -159
  1202. package/src/app/shared/material/numpad/numpad.dom-service.ts +0 -35
  1203. package/src/app/shared/material/numpad/numpad.model.ts +0 -53
  1204. package/src/app/shared/material/numpad/numpad.module.ts +0 -18
  1205. package/src/app/shared/material/numpad/testing/numpad.test.html +0 -146
  1206. package/src/app/shared/material/numpad/testing/numpad.test.ts +0 -44
  1207. package/src/app/shared/material/paginator/material.paginator-i18n.ts +0 -47
  1208. package/src/app/shared/material/stepper/material.stepper-i18n.ts +0 -17
  1209. package/src/app/shared/material/swipe/material.swipe.html +0 -85
  1210. package/src/app/shared/material/swipe/material.swipe.scss +0 -55
  1211. package/src/app/shared/material/swipe/material.swipe.ts +0 -366
  1212. package/src/app/shared/material/swipe/swipe.module.ts +0 -29
  1213. package/src/app/shared/material/swipe/testing/swipe.test.html +0 -112
  1214. package/src/app/shared/material/swipe/testing/swipe.test.ts +0 -74
  1215. package/src/app/shared/material/test/test-component.css +0 -22
  1216. package/src/app/shared/material/test/test-component.html +0 -40
  1217. package/src/app/shared/material/test/test-component.ts +0 -295
  1218. package/src/app/shared/material/testing/common.test.html +0 -227
  1219. package/src/app/shared/material/testing/common.test.ts +0 -126
  1220. package/src/app/shared/material/text/testing/text-form.testing.html +0 -213
  1221. package/src/app/shared/material/text/testing/text-form.testing.ts +0 -30
  1222. package/src/app/shared/material/text/text-form.component.html +0 -63
  1223. package/src/app/shared/material/text/text-form.component.scss +0 -8
  1224. package/src/app/shared/material/text/text-form.component.ts +0 -177
  1225. package/src/app/shared/material/text/text-form.module.ts +0 -36
  1226. package/src/app/shared/modules.ts +0 -12
  1227. package/src/app/shared/named-filter/named-filter-selector.component.html +0 -77
  1228. package/src/app/shared/named-filter/named-filter-selector.component.scss +0 -3
  1229. package/src/app/shared/named-filter/named-filter-selector.component.ts +0 -287
  1230. package/src/app/shared/named-filter/named-filter.model.ts +0 -64
  1231. package/src/app/shared/named-filter/named-filter.module.ts +0 -15
  1232. package/src/app/shared/named-filter/named-filter.service.ts +0 -100
  1233. package/src/app/shared/named-filter/testing/named-filter-selector.testing.html +0 -61
  1234. package/src/app/shared/named-filter/testing/named-filter-selector.testing.ts +0 -80
  1235. package/src/app/shared/named-filter/testing/named-filter.testing.module.ts +0 -20
  1236. package/src/app/shared/named-filter/testing/named-filter.testing.service.ts +0 -83
  1237. package/src/app/shared/observables.ts +0 -139
  1238. package/src/app/shared/pipes/arrays.pipe.ts +0 -153
  1239. package/src/app/shared/pipes/badge.pipes.ts +0 -17
  1240. package/src/app/shared/pipes/colors.pipe.ts +0 -24
  1241. package/src/app/shared/pipes/date-diff-duration.pipe.ts +0 -53
  1242. package/src/app/shared/pipes/date-format.pipe.ts +0 -73
  1243. package/src/app/shared/pipes/date-from-now.pipe.ts +0 -17
  1244. package/src/app/shared/pipes/dates.pipe.ts +0 -13
  1245. package/src/app/shared/pipes/display-with.pipe.ts +0 -13
  1246. package/src/app/shared/pipes/duration.pipe.spec.ts +0 -41
  1247. package/src/app/shared/pipes/duration.pipe.ts +0 -28
  1248. package/src/app/shared/pipes/file-size.pipe.ts +0 -50
  1249. package/src/app/shared/pipes/form.pipes.ts +0 -209
  1250. package/src/app/shared/pipes/highlight.pipe.ts +0 -41
  1251. package/src/app/shared/pipes/html.pipes.ts +0 -49
  1252. package/src/app/shared/pipes/latlong-format.pipe.ts +0 -28
  1253. package/src/app/shared/pipes/maps.pipe.ts +0 -41
  1254. package/src/app/shared/pipes/maskito.pipe.ts +0 -68
  1255. package/src/app/shared/pipes/math.pipes.ts +0 -46
  1256. package/src/app/shared/pipes/ng-init.pipe.ts +0 -13
  1257. package/src/app/shared/pipes/number-format.pipe.ts +0 -11
  1258. package/src/app/shared/pipes/observable.pipes.ts +0 -45
  1259. package/src/app/shared/pipes/pipes.module.ts +0 -162
  1260. package/src/app/shared/pipes/property.pipes.ts +0 -115
  1261. package/src/app/shared/pipes/selection.pipes.ts +0 -165
  1262. package/src/app/shared/pipes/string.pipes.ts +0 -128
  1263. package/src/app/shared/pipes/translate-context.pipe.ts +0 -27
  1264. package/src/app/shared/pipes/types.pipes.ts +0 -52
  1265. package/src/app/shared/pipes/url.pipes.ts +0 -36
  1266. package/src/app/shared/platforms.ts +0 -99
  1267. package/src/app/shared/print/print.service.ts +0 -337
  1268. package/src/app/shared/regexps.ts +0 -112
  1269. package/src/app/shared/rx-state/rx-state.decorators.ts +0 -281
  1270. package/src/app/shared/rx-state/rx-state.module.ts +0 -11
  1271. package/src/app/shared/rx-state/rx-state.types.ts +0 -5
  1272. package/src/app/shared/services/entity-service.class.ts +0 -120
  1273. package/src/app/shared/services/job.utils.ts +0 -124
  1274. package/src/app/shared/services/memory-entity-service.class.ts +0 -435
  1275. package/src/app/shared/services/progress-bar.service.ts +0 -40
  1276. package/src/app/shared/services/startable-observable-service.class.ts +0 -129
  1277. package/src/app/shared/services/startable-service.class.ts +0 -120
  1278. package/src/app/shared/services/storage.utils.ts +0 -53
  1279. package/src/app/shared/services/translate-context.service.ts +0 -112
  1280. package/src/app/shared/services/validator-service.class.ts +0 -13
  1281. package/src/app/shared/services.ts +0 -134
  1282. package/src/app/shared/shared-routing.module.ts +0 -69
  1283. package/src/app/shared/shared.module.spec.ts +0 -13
  1284. package/src/app/shared/shared.module.ts +0 -168
  1285. package/src/app/shared/shared.testing.module.ts +0 -61
  1286. package/src/app/shared/storage/storage-explorer.component.html +0 -160
  1287. package/src/app/shared/storage/storage-explorer.component.scss +0 -37
  1288. package/src/app/shared/storage/storage-explorer.component.spec.ts +0 -24
  1289. package/src/app/shared/storage/storage-explorer.component.ts +0 -268
  1290. package/src/app/shared/storage/storage-explorer.module.ts +0 -24
  1291. package/src/app/shared/storage/storage-explorer.testing-routing.module.ts +0 -19
  1292. package/src/app/shared/storage/storage-explorer.testing.module.ts +0 -19
  1293. package/src/app/shared/storage/storage.service.ts +0 -131
  1294. package/src/app/shared/storage/storage.utils.ts +0 -25
  1295. package/src/app/shared/testing/maskito.test.html +0 -40
  1296. package/src/app/shared/testing/maskito.test.ts +0 -33
  1297. package/src/app/shared/testing/observable.test.html +0 -53
  1298. package/src/app/shared/testing/observable.test.scss +0 -3
  1299. package/src/app/shared/testing/observable.test.ts +0 -101
  1300. package/src/app/shared/testing/tests.page.html +0 -22
  1301. package/src/app/shared/testing/tests.page.ts +0 -32
  1302. package/src/app/shared/toast/toast.testing.html +0 -50
  1303. package/src/app/shared/toast/toast.testing.module.ts +0 -22
  1304. package/src/app/shared/toast/toast.testing.ts +0 -52
  1305. package/src/app/shared/toast/toasts.ts +0 -161
  1306. package/src/app/shared/toolbar/modal-toolbar.html +0 -30
  1307. package/src/app/shared/toolbar/modal-toolbar.scss +0 -0
  1308. package/src/app/shared/toolbar/modal-toolbar.ts +0 -64
  1309. package/src/app/shared/toolbar/toolbar.html +0 -68
  1310. package/src/app/shared/toolbar/toolbar.module.ts +0 -18
  1311. package/src/app/shared/toolbar/toolbar.scss +0 -0
  1312. package/src/app/shared/toolbar/toolbar.ts +0 -262
  1313. package/src/app/shared/types.ts +0 -44
  1314. package/src/app/shared/upload-file/testing/upload-file.testing.html +0 -30
  1315. package/src/app/shared/upload-file/testing/upload-file.testing.module.ts +0 -21
  1316. package/src/app/shared/upload-file/testing/upload-file.testing.ts +0 -65
  1317. package/src/app/shared/upload-file/upload-file-popover.component.html +0 -46
  1318. package/src/app/shared/upload-file/upload-file-popover.component.scss +0 -6
  1319. package/src/app/shared/upload-file/upload-file-popover.component.ts +0 -115
  1320. package/src/app/shared/upload-file/upload-file.component.html +0 -57
  1321. package/src/app/shared/upload-file/upload-file.component.scss +0 -60
  1322. package/src/app/shared/upload-file/upload-file.component.ts +0 -222
  1323. package/src/app/shared/upload-file/upload-file.model.ts +0 -40
  1324. package/src/app/shared/validator/form-error-adapter.class.ts +0 -136
  1325. package/src/app/shared/validator/validators.ts +0 -725
  1326. package/src/app/shared/version/versions.ts +0 -89
  1327. package/src/app/social/job/job.module.ts +0 -14
  1328. package/src/app/social/job/progression/job-progression.component.html +0 -19
  1329. package/src/app/social/job/progression/job-progression.component.scss +0 -15
  1330. package/src/app/social/job/progression/job-progression.component.ts +0 -39
  1331. package/src/app/social/job/progression/job-progression.icon.html +0 -30
  1332. package/src/app/social/job/progression/job-progression.icon.scss +0 -7
  1333. package/src/app/social/job/progression/job-progression.icon.ts +0 -276
  1334. package/src/app/social/job/progression/job-progression.list.html +0 -25
  1335. package/src/app/social/job/progression/job-progression.list.scss +0 -17
  1336. package/src/app/social/job/progression/job-progression.list.ts +0 -40
  1337. package/src/app/social/job/progression/job-progression.model.ts +0 -26
  1338. package/src/app/social/job/progression/job-progression.service.ts +0 -97
  1339. package/src/app/social/job/testing/job-progression.testing.html +0 -11
  1340. package/src/app/social/job/testing/job-progression.testing.service.ts +0 -33
  1341. package/src/app/social/job/testing/job-progression.testing.ts +0 -28
  1342. package/src/app/social/job/testing/job.testing.module.ts +0 -13
  1343. package/src/app/social/message/message.form.html +0 -71
  1344. package/src/app/social/message/message.form.scss +0 -6
  1345. package/src/app/social/message/message.form.ts +0 -128
  1346. package/src/app/social/message/message.modal.html +0 -68
  1347. package/src/app/social/message/message.modal.ts +0 -117
  1348. package/src/app/social/message/message.model.ts +0 -78
  1349. package/src/app/social/message/message.module.ts +0 -14
  1350. package/src/app/social/message/message.service.ts +0 -104
  1351. package/src/app/social/social.errors.ts +0 -10
  1352. package/src/app/social/social.module.ts +0 -23
  1353. package/src/app/social/social.testing.module.ts +0 -33
  1354. package/src/app/social/user-event/notification/user-event-notification.icon.html +0 -17
  1355. package/src/app/social/user-event/notification/user-event-notification.icon.ts +0 -112
  1356. package/src/app/social/user-event/notification/user-event-notification.list.html +0 -142
  1357. package/src/app/social/user-event/notification/user-event-notification.list.scss +0 -73
  1358. package/src/app/social/user-event/notification/user-event-notification.list.ts +0 -270
  1359. package/src/app/social/user-event/testing/user-event.testing.html +0 -26
  1360. package/src/app/social/user-event/testing/user-event.testing.model.ts +0 -142
  1361. package/src/app/social/user-event/testing/user-event.testing.module.ts +0 -13
  1362. package/src/app/social/user-event/testing/user-event.testing.service.ts +0 -161
  1363. package/src/app/social/user-event/testing/user-event.testing.ts +0 -282
  1364. package/src/app/social/user-event/user-event.model.ts +0 -55
  1365. package/src/app/social/user-event/user-event.module.ts +0 -15
  1366. package/src/app/social/user-event/user-event.service.ts +0 -686
  1367. package/src/browserslist +0 -9
  1368. package/src/environments/environment.class.ts +0 -106
  1369. package/src/environments/environment.loader.ts +0 -90
  1370. package/src/environments/environment.prod.ts +0 -49
  1371. package/src/environments/environment.test.ts +0 -92
  1372. package/src/environments/environment.ts +0 -126
  1373. package/src/favicon.ico +0 -0
  1374. package/src/global.scss +0 -13
  1375. package/src/index.html +0 -76
  1376. package/src/main.ts +0 -18
  1377. package/src/polyfills.ts +0 -34
  1378. package/src/schema.graphql +0 -4381
  1379. package/src/service-worker.js +0 -31
  1380. package/src/test.ts +0 -30
  1381. package/tsconfig.app.json +0 -15
  1382. package/tsconfig.json +0 -47
  1383. package/tsconfig.spec.json +0 -18
@@ -1,2019 +0,0 @@
1
- import { AfterViewInit, ChangeDetectorRef, Directive, EventEmitter, Injector, Input, OnDestroy, OnInit, Output, ViewChild } from '@angular/core';
2
- import { MatPaginator } from '@angular/material/paginator';
3
- import { MatSort, MatSortable, SortDirection } from '@angular/material/sort';
4
- import { MatTable } from '@angular/material/table';
5
- import { BehaviorSubject, EMPTY, merge, Observable, of, Subject, Subscription } from 'rxjs';
6
- import { catchError, debounceTime, distinctUntilChanged, filter, first, mergeMap, startWith, switchMap, takeUntil, tap } from 'rxjs/operators';
7
- import { SelectionModel } from '@angular/cdk/collections';
8
- import { EntityUtils, IEntity } from '../services/model/entity.model';
9
- import { AlertController, ModalController, NavController, ToastController } from '@ionic/angular';
10
- import { ActivatedRoute, Router } from '@angular/router';
11
- import { ColumnItem, TableSelectColumnsComponent } from './table-select-columns.component';
12
- import { Location } from '@angular/common';
13
- import { ErrorCodes } from '../services/errors';
14
- import { AppFormUtils, CanSave, IAppForm, OnReady } from '../form/form.utils';
15
- import { LocalSettingsService } from '../services/local-settings.service';
16
- import { TranslateService } from '@ngx-translate/core';
17
- import {
18
- MatAutocompleteConfigHolder,
19
- MatAutocompleteFieldAddOptions,
20
- MatAutocompleteFieldConfig,
21
- } from '../../shared/material/autocomplete/material.autocomplete.config';
22
- import { CompletableEvent, createPromiseEventEmitter, emitPromiseEvent } from '../../shared/events';
23
- import {
24
- changeCaseToUnderscore,
25
- getPropertyByPath,
26
- isEmptyArray,
27
- isNil,
28
- isNotEmptyArray,
29
- isNotNil,
30
- setPropertyByPath,
31
- toBoolean,
32
- } from '../../shared/functions';
33
- import { waitFor, waitForFalse, WaitForOptions, waitForTrue } from '../../shared/observables';
34
- import { ShowToastOptions, Toasts } from '../../shared/toast/toasts';
35
- import { Alerts } from '../../shared/alerts';
36
- import { CdkColumnDef } from '@angular/cdk/table';
37
- import { LoadResult } from '../../shared/services/entity-service.class';
38
- import { FormErrorTranslateOptions, FormErrorTranslator, IFormPathTranslator } from '../../shared/validator/form-error-adapter.class';
39
- import {
40
- CellValueChangeListener,
41
- DEFAULT_PAGE_SIZE,
42
- DEFAULT_PAGE_SIZE_OPTIONS,
43
- DEFAULT_REQUIRED_COLUMNS,
44
- RESERVED_END_COLUMNS,
45
- RESERVED_START_COLUMNS,
46
- SaveActionType,
47
- SETTINGS_DISPLAY_COLUMNS,
48
- SETTINGS_PAGE_SIZE,
49
- SETTINGS_SORTED_COLUMN,
50
- } from './table.model';
51
- import { AsyncTableElement } from '@e-is/ngx-material-table';
52
- import { EntitiesAsyncTableDataSource } from './entities-async-table-datasource.class';
53
- import { AppTableUtils } from './table.utils';
54
-
55
- // @dynamic
56
- // noinspection DuplicatedCode
57
- @Directive()
58
- // eslint-disable-next-line @angular-eslint/directive-class-suffix
59
- export abstract class AppAsyncTable<T extends IEntity<T, ID>, F = any, ID = number>
60
- implements OnInit, OnDestroy, AfterViewInit, IAppForm, CanSave, IFormPathTranslator
61
- {
62
- private _initialized = false;
63
- private _openingRow = false;
64
- private _subscription = new Subscription();
65
- private _dataSourceLoadingSubscription: Subscription;
66
-
67
- private _cellValueChangesDefs: {
68
- [key: string]: CellValueChangeListener;
69
- } = {};
70
-
71
- protected _enabled = true;
72
- protected _autocompleteConfigHolder: MatAutocompleteConfigHolder;
73
- protected allowRowDetail = true;
74
- protected readonly cd: ChangeDetectorRef;
75
- protected route: ActivatedRoute;
76
- protected router: Router;
77
- protected navController: NavController;
78
- protected location: Location;
79
- protected settings: LocalSettingsService;
80
- protected translate: TranslateService;
81
- protected modalCtrl: ModalController;
82
- protected alertCtrl: AlertController;
83
- protected toastController: ToastController;
84
- protected previouslyEditedRowId: number;
85
- protected formErrorAdapter: FormErrorTranslator;
86
- protected readonly destroySubject = new Subject<void>();
87
-
88
- excludesColumns: string[] = [];
89
- displayedColumns: string[];
90
- totalRowCount: number | null = null;
91
- visibleRowCount: number;
92
- errorTranslateOptions: FormErrorTranslateOptions;
93
-
94
- readonly readySubject = new BehaviorSubject<boolean>(false);
95
- readonly loadingSubject = new BehaviorSubject<boolean>(true);
96
- readonly savingSubject = new BehaviorSubject<boolean>(false);
97
- readonly touchedSubject = new BehaviorSubject<boolean>(false);
98
- readonly dirtySubject = new BehaviorSubject<boolean>(false);
99
- readonly errorSubject = new BehaviorSubject<string>(undefined);
100
-
101
- get error(): string {
102
- return this.errorSubject.value;
103
- }
104
-
105
- set error(error: string) {
106
- this.setError(error);
107
- }
108
-
109
- selection = new SelectionModel<AsyncTableElement<T>>(true, []);
110
- permanentSelection: SelectionModel<T> = null;
111
- permanentSelectionChangedPrevented = false;
112
- autocompleteFields: { [key: string]: MatAutocompleteFieldConfig };
113
- readonly mobile: boolean;
114
-
115
- // Table options
116
- @Input() settingsId: string;
117
- @Input() debug: boolean;
118
- @Input() i18nColumnPrefix = 'COMMON.';
119
- @Input() i18nColumnSuffix: string;
120
- @Input() autoLoad = true;
121
- @Input() readOnly: boolean;
122
- @Input() inlineEdition: boolean;
123
- @Input() focusFirstColumn = false;
124
- @Input() confirmBeforeDelete = false;
125
- @Input() confirmBeforeCancel = false;
126
- @Input() undoableDeletion = false;
127
- @Input() saveBeforeDelete: boolean;
128
- @Input() keepEditedRowOnSave: boolean;
129
- @Input() saveBeforeSort: boolean;
130
- @Input() saveBeforeFilter: boolean;
131
- @Input() propagateRowError = false;
132
- @Input() permanentSelectionAllowed = false; // Allow keep selected rows over page change or sort change
133
- @Input() openRowThrottleTime = 800; // Prevent double click - see issue sumaris-app#864
134
-
135
- @Input() defaultSortBy: string;
136
- @Input() defaultSortDirection: SortDirection;
137
- @Input() defaultPageSize = DEFAULT_PAGE_SIZE;
138
- @Input() defaultPageSizeOptions = DEFAULT_PAGE_SIZE_OPTIONS;
139
-
140
- // Focus manager
141
- @Input() focusColumn: string;
142
-
143
- get firstUserColumn(): string {
144
- return this.displayedColumns[RESERVED_START_COLUMNS.length];
145
- }
146
-
147
- get lastUserColumn(): string {
148
- return this.displayedColumns[this.displayedColumns.length - RESERVED_END_COLUMNS.length - 1];
149
- }
150
-
151
- @Input() set dataSource(value: EntitiesAsyncTableDataSource<T, F, ID>) {
152
- this.setDatasource(value);
153
- }
154
-
155
- get dataSource(): EntitiesAsyncTableDataSource<T, F, ID> {
156
- return this._dataSource;
157
- }
158
-
159
- @Input() set filter(value: F) {
160
- this.setFilter(value);
161
- }
162
-
163
- get filter(): F {
164
- return this._filter;
165
- }
166
-
167
- get empty(): boolean {
168
- return this.loading || this.totalRowCount === 0;
169
- }
170
-
171
- get selectedEntities(): T[] {
172
- return this.permanentSelection?.selected || AppTableUtils.getEntities(this.selection.selected);
173
- }
174
-
175
- @Output() onRefresh = new EventEmitter<any>();
176
- @Output() onClickRow = new EventEmitter<AsyncTableElement<T>>();
177
- @Output() onOpenRow = new EventEmitter<AsyncTableElement<T>>();
178
- @Output() onNewRow = new EventEmitter<any>();
179
- @Output() onStartEditingRow = new EventEmitter<AsyncTableElement<T>>();
180
- @Output() onConfirmEditCreateRow = new EventEmitter<AsyncTableElement<T>>();
181
- @Output() onCancelOrDeleteRow = new EventEmitter<AsyncTableElement<T>>();
182
- @Output() onBeforeDeleteRows = createPromiseEventEmitter<boolean, { rows: AsyncTableElement<T>[] }>();
183
- @Output() onBeforeCancelRows = createPromiseEventEmitter<boolean, { rows: AsyncTableElement<T>[] }>();
184
- @Output() onBeforeSave = createPromiseEventEmitter<{ confirmed: boolean; save: boolean }, { action: SaveActionType; valid: boolean }>();
185
- @Output() onAfterDeletedRows = new EventEmitter<AsyncTableElement<T>[]>();
186
- @Output() onSort = new EventEmitter<any>();
187
- @Output() onDirty = new EventEmitter<boolean>();
188
- @Output() onError = new EventEmitter<string>();
189
-
190
- get dirty(): boolean {
191
- return this.dirtySubject.value;
192
- }
193
-
194
- get valid(): boolean {
195
- return this.dataSource.getEditingRows().every((row) => (row.editing ? row.valid : true));
196
- }
197
-
198
- get invalid(): boolean {
199
- return this.dataSource.getEditingRows().some((row) => (row.editing ? row.invalid : false));
200
- }
201
-
202
- get pending(): boolean {
203
- return this.dataSource.getEditingRows().some((row) => (row.editing ? row.pending : false));
204
- }
205
-
206
- get touched(): boolean {
207
- return this.touchedSubject.value;
208
- }
209
-
210
- get untouched(): boolean {
211
- return !this.touchedSubject.value;
212
- }
213
-
214
- disable(opts?: { onlySelf?: boolean; emitEvent?: boolean }) {
215
- if (this.sort) this.sort.disabled = true;
216
- this._enabled = false;
217
- if (!opts || opts.emitEvent !== false) this.markForCheck();
218
- }
219
-
220
- enable(opts?: { onlySelf?: boolean; emitEvent?: boolean }) {
221
- if (this.sort) this.sort.disabled = false;
222
- this._enabled = true;
223
- if (!opts || opts.emitEvent !== false) this.markForCheck();
224
- }
225
-
226
- get enabled(): boolean {
227
- return this._enabled;
228
- }
229
-
230
- // FIXME: need to hidden buttons (in HTML), etc. when disabled
231
- @Input() set disabled(value: boolean) {
232
- if (value !== !this._enabled) {
233
- if (value) this.disable({ emitEvent: false });
234
- else this.enable({ emitEvent: false });
235
- }
236
- }
237
-
238
- get disabled(): boolean {
239
- return !this._enabled;
240
- }
241
-
242
- markAsDirty(opts?: { onlySelf?: boolean; emitEvent?: boolean }) {
243
- if (!this.dirtySubject.closed && this.dirtySubject.value !== true) {
244
- this.dirtySubject.next(true);
245
- if (!opts || opts.emitEvent !== false) {
246
- this.markForCheck();
247
- }
248
- }
249
- }
250
-
251
- markAsPristine(opts?: { onlySelf?: boolean; emitEvent?: boolean }) {
252
- if (!this.dirtySubject.closed && this.dirtySubject.value !== false) {
253
- this.dirtySubject.next(false);
254
- if (!opts || opts.emitEvent !== false) {
255
- this.markForCheck();
256
- }
257
- }
258
- }
259
-
260
- async markAsUntouched(opts?: { onlySelf?: boolean; emitEvent?: boolean }) {
261
- let needEmitEvent = false;
262
- if (this.touchedSubject.value) {
263
- this.touchedSubject.next(false);
264
- needEmitEvent = true;
265
- }
266
- if (this.dirty) {
267
- for (const row of this.dataSource.getEditingRows()) {
268
- // Cancel the current editing row only if editing and if it was not previously saved
269
- if (row.id === -1) {
270
- await this.dataSource.delete(-1);
271
- } else if (row.editing) {
272
- await this.dataSource.cancel(row);
273
- }
274
-
275
- // Check if row as pristine
276
- await this.checkIfRowPristine(row, { onlySelf: true /* avoid propagation to table - done just after */ });
277
- }
278
-
279
- // Check if the table is pristine
280
- await this.checkIfPristine({ emitEvent: false /*will be done just after*/ });
281
-
282
- needEmitEvent = true;
283
- }
284
- this.previouslyEditedRowId = undefined;
285
- if (needEmitEvent && (!opts || opts.emitEvent !== false)) this.markForCheck();
286
- }
287
-
288
- /**
289
- * @deprecated prefer to use markAllAsTouched()
290
- * @param opts
291
- */
292
- markAsTouched(opts?: { onlySelf?: boolean; emitEvent?: boolean }) {
293
- console.warn('TODO: Replace this call by markAllAsTouched() - because of changes in ngx-components >= 0.16.0');
294
- if (this.dataSource.hasSomeEditingRow()) {
295
- this.dataSource.getEditingRows().forEach((row) => row.validator?.markAllAsTouched());
296
- if (!opts || opts.emitEvent !== false) {
297
- this.markForCheck();
298
- }
299
- }
300
- }
301
-
302
- markAllAsTouched(opts?: { emitEvent?: boolean }) {
303
- if (!this.touchedSubject.closed && this.touchedSubject.value !== true) {
304
- this.touchedSubject.next(true);
305
- if (!opts || opts.emitEvent !== false) this.markForCheck();
306
- }
307
- this.dataSource.getEditingRows().forEach((row) => row.validator?.markAllAsTouched());
308
- }
309
-
310
- markAsSaving(opts?: { emitEvent?: boolean }) {
311
- if (!this.savingSubject.closed && this.savingSubject.value !== true) {
312
- this.focusColumn = undefined; // unselect focus column
313
- this.savingSubject.next(true);
314
- if (!opts || opts.emitEvent !== false) this.markForCheck();
315
- }
316
- }
317
-
318
- markAsSaved(opts?: { emitEvent?: boolean }) {
319
- if (!this.savingSubject.closed && this.savingSubject.value !== false) {
320
- this.savingSubject.next(false);
321
- if (!opts || opts.emitEvent !== false) this.markForCheck();
322
- }
323
- }
324
-
325
- markAsLoading(opts?: { emitEvent?: boolean }) {
326
- this.setLoading(true, opts);
327
- }
328
-
329
- markAsLoaded(opts?: { emitEvent?: boolean }) {
330
- this.setLoading(false, opts);
331
- }
332
-
333
- markAsReady(opts?: { emitEvent?: boolean }) {
334
- if (!this.readySubject.closed && this.readySubject.value !== true) {
335
- this.readySubject.next(true);
336
-
337
- // If subclasses implements OnReady
338
- if (typeof this['ngOnReady'] === 'function') {
339
- (this as any as OnReady).ngOnReady();
340
- }
341
- }
342
- }
343
-
344
- get loading(): boolean {
345
- return this.loadingSubject.value;
346
- }
347
-
348
- get loaded(): boolean {
349
- return !this.loadingSubject.value;
350
- }
351
-
352
- enableSort() {
353
- if (this.sort) this.sort.disabled = false;
354
- }
355
-
356
- disableSort() {
357
- if (this.sort) this.sort.disabled = true;
358
- }
359
-
360
- set pageSize(value: number) {
361
- this.defaultPageSize = value;
362
- if (this.paginator) {
363
- this.paginator.pageSize = value;
364
- }
365
- }
366
-
367
- get pageSize(): number {
368
- return (this.paginator && this.paginator.pageSize) || this.defaultPageSize || DEFAULT_PAGE_SIZE;
369
- }
370
-
371
- get pageOffset(): number {
372
- return (this.paginator && this.paginator.pageIndex * this.paginator.pageSize) || 0;
373
- }
374
-
375
- get sortActive(): string {
376
- return this.sort && this.sort.active;
377
- }
378
-
379
- set sortActive(sortBy: string) {
380
- if (this.sort) {
381
- this.sort.active = sortBy;
382
- } else {
383
- this.defaultSortBy = sortBy;
384
- }
385
- }
386
-
387
- get sortDirection(): SortDirection {
388
- return (this.sort && this.sort.direction && (this.sort.direction === 'desc' ? 'desc' : 'asc')) || undefined;
389
- }
390
-
391
- set sortDirection(value: SortDirection) {
392
- if (this.sort) {
393
- this.sort.direction = value;
394
- } else {
395
- this.defaultSortDirection = value;
396
- }
397
- }
398
-
399
- private _paginator: MatPaginator | null = null;
400
-
401
- @Input() set paginator(value: MatPaginator) {
402
- this._paginator = value;
403
- }
404
-
405
- get paginator(): MatPaginator {
406
- return this._paginator || this.childPaginator;
407
- }
408
-
409
- get destroyed(): boolean {
410
- return this.destroySubject?.closed !== false;
411
- }
412
-
413
- @ViewChild(MatTable, { static: false }) table: MatTable<T>;
414
- @ViewChild(MatPaginator, { static: false }) childPaginator: MatPaginator;
415
- @ViewChild(MatSort, { static: false }) sort: MatSort;
416
-
417
- protected constructor(
418
- injector: Injector,
419
- protected columns: string[],
420
- protected _dataSource?: EntitiesAsyncTableDataSource<T, F, ID>,
421
- private _filter?: F
422
- ) {
423
- this.cd = injector.get(ChangeDetectorRef);
424
- this.route = injector.get(ActivatedRoute);
425
- this.router = injector.get(Router);
426
- this.navController = injector.get(NavController);
427
- this.location = injector.get(Location);
428
- this.settings = injector.get(LocalSettingsService);
429
- this.translate = injector.get(TranslateService);
430
- this.modalCtrl = injector.get(ModalController);
431
- this.alertCtrl = injector.get(AlertController);
432
- this.toastController = injector.get(ToastController);
433
- this.formErrorAdapter = injector.get(FormErrorTranslator);
434
- this.mobile = this.settings.mobile;
435
-
436
- // Autocomplete fields
437
- this._autocompleteConfigHolder = new MatAutocompleteConfigHolder({
438
- getUserAttributes: (a, b) => this.settings.getFieldDisplayAttributes(a, b),
439
- });
440
- this.autocompleteFields = this._autocompleteConfigHolder.fields;
441
- }
442
-
443
- ngOnInit() {
444
- if (this._initialized) return; // Init only once
445
- this._initialized = true;
446
-
447
- // Set defaults
448
- this.readOnly = toBoolean(this.readOnly, this.dataSource?.config.readOnly || false); // read/write by default
449
- this.inlineEdition = !this.readOnly && toBoolean(this.inlineEdition, false); // force to false when readonly
450
- this.saveBeforeDelete = toBoolean(this.saveBeforeDelete, !this.readOnly); // force to false when readonly
451
- this.saveBeforeSort = toBoolean(this.saveBeforeSort, !this.readOnly); // force to false when readonly
452
- this.saveBeforeFilter = toBoolean(this.saveBeforeFilter, !this.readOnly); // force to false when readonly
453
- this.keepEditedRowOnSave = toBoolean(this.keepEditedRowOnSave, this.inlineEdition);
454
- this.errorTranslateOptions = this.errorTranslateOptions || { separator: ', ', pathTranslator: this }; // Can be override in subclasses constructors
455
-
456
- // Check ask user confirmation is possible
457
- if (this.confirmBeforeDelete && !this.alertCtrl) throw Error("Missing 'alertCtrl' or 'injector' in component's constructor.");
458
-
459
- // Defined unique id for settings for the page
460
- this.settingsId = this.settingsId || this.generateTableId();
461
-
462
- this.displayedColumns = this.getDisplayColumns();
463
-
464
- // Load the sorted columns, from settings
465
- {
466
- const sortedColumn = this.getSortedColumn();
467
- this.defaultSortBy = sortedColumn.id;
468
- this.defaultSortDirection = sortedColumn.start;
469
- }
470
-
471
- this.defaultPageSize = this.getPageSize();
472
-
473
- // Propagate error to event emitter
474
- this.registerSubscription(this.errorSubject.subscribe((value) => this.onError.emit(value)));
475
-
476
- // Propagate dirty to event emitter
477
- this.registerSubscription(this.dirtySubject.subscribe((value) => this.onDirty.emit(value)));
478
-
479
- // Propagate row dirty state to table
480
- this.registerSubscription(
481
- this.onStartEditingRow
482
- .pipe(
483
- filter((row) => row?.validator && true),
484
- mergeMap((row) =>
485
- row.validator.valueChanges.pipe(
486
- filter(() => row.validator.dirty),
487
- first(),
488
- // DEBUG
489
- //tap(() => console.debug("Propagate row's dirty to table..."))
490
-
491
- // Stop if next another row, or destroying
492
- takeUntil(this.onStartEditingRow),
493
- takeUntil(this.destroySubject)
494
- )
495
- )
496
- )
497
- .subscribe(() => this.markAsDirty())
498
- );
499
-
500
- // Call datasource refresh, on each refresh events
501
- this.registerSubscription(
502
- this.onRefresh
503
- .pipe(
504
- startWith<any, any>((this.autoLoad ? {} : 'skip') as any),
505
- switchMap((event: any) => {
506
- this.dirtySubject.next(false);
507
- this.selection.clear();
508
- if (event === 'skip') {
509
- return of(undefined);
510
- }
511
- if (!this._dataSource) {
512
- if (this.debug) console.debug('[table] Skipping data load: no dataSource defined');
513
- return of(undefined);
514
- }
515
- if (this.debug) console.debug('[table] Calling dataSource.watchAll()...');
516
- return this._dataSource.watchAll(this.pageOffset, this.pageSize, this.sortActive, this.sortDirection, this._filter);
517
- }),
518
- catchError((err) => {
519
- if (this.debug) console.error(err);
520
- this.setError((err && err.message) || err);
521
- return of(undefined); // Continue
522
- })
523
- )
524
- .subscribe((res) => this.updateView(res as LoadResult<T> | undefined))
525
- );
526
-
527
- // Listen dataSource loading events
528
- if (this._dataSource) this.listenDatasourceLoading(this._dataSource);
529
-
530
- // Permanent selection behavior
531
- if (this.permanentSelectionAllowed) this.initPermanentSelection();
532
- }
533
-
534
- ngAfterViewInit() {
535
- // Detect when parent ngOnInit() not call
536
- if (this.debug && !this.displayedColumns)
537
- console.warn(`[table] Missing 'displayedColumns'. Did you call parent ngOnInit() in component ${this.constructor.name} ?`);
538
-
539
- // Start listening sort and paginator events
540
- // noinspection JSIgnoredPromiseFromCall
541
- this.listenSortAndPaginationEvents();
542
- }
543
-
544
- ngOnDestroy() {
545
- this._subscription.unsubscribe();
546
-
547
- // Unsubscribe column value changes
548
- Object.keys(this._cellValueChangesDefs).forEach((col) => this.stopCellValueChanges(col, true));
549
- this._cellValueChangesDefs = {};
550
-
551
- this.readySubject.unsubscribe();
552
- this.loadingSubject.unsubscribe();
553
- this.savingSubject.unsubscribe();
554
- this.errorSubject.unsubscribe();
555
- this.dirtySubject.unsubscribe();
556
-
557
- this.onRefresh.unsubscribe();
558
- this.onOpenRow.unsubscribe();
559
- this.onNewRow.unsubscribe();
560
- this.onStartEditingRow.unsubscribe();
561
- this.onConfirmEditCreateRow.unsubscribe();
562
- this.onCancelOrDeleteRow.unsubscribe();
563
- this.onBeforeDeleteRows.unsubscribe();
564
- this.onBeforeCancelRows.unsubscribe();
565
- this.onBeforeSave.unsubscribe();
566
- this.onAfterDeletedRows.unsubscribe();
567
- this.onSort.unsubscribe();
568
- this.onDirty.unsubscribe();
569
- this.onError.unsubscribe();
570
-
571
- this.destroySubject.next();
572
- this.destroySubject.unsubscribe();
573
- }
574
-
575
- async updateView(
576
- res: LoadResult<T> | undefined,
577
- opts?: {
578
- emitEvent?: boolean;
579
- }
580
- ): Promise<void> {
581
- if (!res) return; // Skip (e.g error)
582
- if (res && res.data) {
583
- this.visibleRowCount = res.data.length;
584
- this.totalRowCount = isNotNil(res.total)
585
- ? res.total
586
- : ((this.paginator && this.paginator.pageIndex * (this.paginator.pageSize || DEFAULT_PAGE_SIZE)) || 0) + this.visibleRowCount;
587
- if (this.debug) console.debug(`[table] ${res.data.length} rows loaded`);
588
- } else {
589
- //if (this.debug) console.debug('[table] NO rows loaded');
590
- this.totalRowCount = 0;
591
- this.visibleRowCount = 0;
592
- }
593
-
594
- if (!opts || opts.emitEvent !== false) {
595
- await this.markAsUntouched({ emitEvent: false });
596
- this.markAsPristine({ emitEvent: false });
597
- this.markAsLoaded({ emitEvent: false });
598
- }
599
-
600
- this.markForCheck();
601
- }
602
-
603
- setDatasource(datasource: EntitiesAsyncTableDataSource<T, F, ID>) {
604
- if (this._dataSource) throw new Error('[table] dataSource already set !');
605
- if (datasource && this._dataSource !== datasource) {
606
- this._dataSource = datasource;
607
- if (this._initialized) this.listenDatasourceLoading(datasource);
608
- }
609
- }
610
-
611
- resetDataSource() {
612
- if (this._dataSourceLoadingSubscription) {
613
- this._dataSourceLoadingSubscription.unsubscribe();
614
- this._subscription.remove(this._dataSourceLoadingSubscription);
615
- }
616
- this._dataSource = null;
617
- }
618
-
619
- addColumnDef(column: CdkColumnDef) {
620
- this.table.addColumnDef(column);
621
- }
622
-
623
- removeColumnDef(column: CdkColumnDef) {
624
- this.table.removeColumnDef(column);
625
- }
626
-
627
- async setFilter(filter: F, opts?: { emitEvent?: boolean; permanentSelectionChangedPrevented?: boolean }) {
628
- opts = opts || { emitEvent: true };
629
-
630
- // Prevent permanent selection change events
631
- this.permanentSelectionChangedPrevented = toBoolean(opts.permanentSelectionChangedPrevented, this.permanentSelectionChangedPrevented);
632
-
633
- if (this.saveBeforeFilter) {
634
- // if a dirty table is to be saved before filter
635
- if (this.dirty) {
636
- // Save
637
- if (await this.saveBeforeAction('filter')) {
638
- // Apply filter only if user didn't cancel the save or the save is ok
639
- this.applyFilter(filter, opts);
640
- }
641
- } else {
642
- // apply filter on non-dirty table
643
- this.applyFilter(filter, opts);
644
- }
645
- } else {
646
- // apply filter directly
647
- this.applyFilter(filter, opts);
648
- }
649
- }
650
-
651
- async confirmAndAdd(event?: Event, row?: AsyncTableElement<T>): Promise<boolean> {
652
- if (!(await this.confirmEditCreate(event, row))) {
653
- return false;
654
- }
655
- // Add row
656
- return this.addRow(event);
657
- }
658
-
659
- async confirmAndBackward(event?: Event, row?: AsyncTableElement<T>): Promise<boolean> {
660
- // Deleting edited row, if empty and not dirty
661
- if (this.dataSource.hasSomeEditingRow()) {
662
- for (const editingRow of this.dataSource.getEditingRows().filter((row) => row.id === -1 && row.invalid && !row.dirty)) {
663
- await this.deleteNewRow(event, editingRow);
664
- }
665
-
666
- // Wait deletion is done, then edit previous row (by id, because of reloading)
667
- await this.waitIdle();
668
- await this.editRowById(event, row.id, { focusColumn: this.lastUserColumn });
669
- return true;
670
- }
671
-
672
- // Edit row, focusing at the end
673
- await this.editRow(event, row, { focusColumn: this.lastUserColumn });
674
- return true;
675
- }
676
-
677
- async confirmAndForward(event?: Event, row?: AsyncTableElement<T>): Promise<boolean> {
678
- if (!this.inlineEdition) return false;
679
-
680
- const confirmed = await this.confirmEditCreate(event, row);
681
- if (!confirmed) return false; // Not confirmed
682
-
683
- // Edit next row
684
- await this.editRowById(event, row.id + 1, { focusColumn: this.firstUserColumn });
685
- return true;
686
- }
687
-
688
- /**
689
- * Confirm the creation of the given row, or if not specified the currently edited row
690
- *
691
- * @param event
692
- * @param row
693
- */
694
- async confirmEditCreate(event?: Event, row?: AsyncTableElement<T>): Promise<boolean> {
695
- row = row || this.dataSource.getSingleEditingRow();
696
- if (!row || !row.editing) return true; // no row to confirm
697
-
698
- // Stop event
699
- event?.stopPropagation();
700
-
701
- // Confirmation edition or creation
702
- const confirmed = await row.confirmEditCreate();
703
-
704
- if (confirmed) {
705
- // Mark table as dirty (if row is dirty)
706
- if (row.dirty) {
707
- this.markAsDirty({ emitEvent: false /* because of resetError() */ });
708
- }
709
-
710
- // Clear error
711
- this.resetError();
712
-
713
- // Emit the confirm event
714
- this.onConfirmEditCreateRow.next(row);
715
-
716
- return true; // Continue
717
- }
718
-
719
- if (row.validator) {
720
- // NOT confirmed = row has error
721
- if (this.debug) {
722
- console.warn('[table] Cannot confirm row, because invalid');
723
- AppFormUtils.logFormErrors(row.validator, '[table] ');
724
- }
725
-
726
- // fix: mark all controls as touched to show errors
727
- row.validator.markAllAsTouched();
728
-
729
- // Compute row error, and propagate to table's error
730
- if (this.propagateRowError) {
731
- const error = this.getRowError(row);
732
- this.setError(error);
733
- }
734
- }
735
-
736
- // Not confirmed
737
- return false;
738
- }
739
-
740
- async cancelOrDelete(event: Event, row: AsyncTableElement<T>, opts?: { interactive?: boolean; keepEditing?: boolean }) {
741
- // Delete new row
742
- if (row.id === -1) {
743
- await this.deleteNewRow(event, row);
744
- }
745
- // Delete existing (but not editing) row
746
- else if (!row.editing) {
747
- await this.deleteExistingRow(event, row, opts);
748
- }
749
- // Cancel existing (and editing) row
750
- else {
751
- await this.cancelExistingRow(event, row, opts);
752
- }
753
- }
754
-
755
- async addRow(event?: Event, insertAt?: number, opts?: { focusColumn?: string; editing?: boolean }): Promise<boolean> {
756
- if (this.debug) console.debug('[table] Asking for new row...');
757
- if (!this._enabled) return false;
758
-
759
- // Use modal if inline edition is disabled
760
- if (!this.inlineEdition) {
761
- await this.openNewRowDetail(event);
762
- return false;
763
- }
764
-
765
- // Try to finish edited row first
766
- if (!(await this.confirmEditCreate())) {
767
- return false;
768
- }
769
-
770
- // Add new row
771
- const row = await this.addRowToTable(insertAt, opts);
772
- return !!row;
773
- }
774
-
775
- async save(opts?: { keepEditing?: boolean }): Promise<boolean> {
776
- opts = {
777
- keepEditing: this.keepEditedRowOnSave,
778
- ...opts,
779
- };
780
- if (this.readOnly) {
781
- throw { code: ErrorCodes.TABLE_READ_ONLY, message: 'ERROR.TABLE_READ_ONLY' };
782
- }
783
-
784
- this.resetError();
785
-
786
- // Keep edited row id (should be done BEFORE confirmEditCreate() )
787
- const editedRow = this.dataSource.getSingleEditingRow();
788
- this.previouslyEditedRowId = opts.keepEditing ? (editedRow?.editing ? editedRow.id : undefined) || this.singleSelectedRow?.id : undefined;
789
- const previouslyEditedRowId = this.previouslyEditedRowId;
790
- const previouslyEditedData = opts.keepEditing
791
- ? (isNotNil(previouslyEditedRowId) && editedRow?.currentData) || this.singleSelectedRow?.currentData
792
- : undefined;
793
-
794
- if (!(await this.confirmEditCreate())) {
795
- throw { code: ErrorCodes.TABLE_INVALID_ROW_ERROR, message: 'ERROR.TABLE_INVALID_ROW_ERROR' };
796
- }
797
-
798
- // Mark as saving
799
- this.markAsSaving();
800
-
801
- try {
802
- // Calling service save()
803
- if (this.debug) console.debug('[table] Calling dataSource.save()...');
804
- const isOK = await this._dataSource.save();
805
-
806
- if (isOK) this.markAsPristine();
807
-
808
- return isOK;
809
- } catch (err) {
810
- this.setError((err && err.message) || err);
811
- throw err;
812
- } finally {
813
- this.markAsSaved();
814
-
815
- // Restore previous row
816
- if (isNotNil(previouslyEditedRowId)) {
817
- await this.selectRowByIdOrData(previouslyEditedRowId, previouslyEditedData);
818
- }
819
- }
820
- }
821
-
822
- async cancel(event?: Event, opts?: { interactive?: boolean }) {
823
- // Check confirmation
824
- if ((!opts || opts.interactive !== false) && this.dirty && (this.confirmBeforeCancel || this.onBeforeCancelRows.observed)) {
825
- event?.stopPropagation();
826
- if (!(await this.canCancelRows())) {
827
- return;
828
- }
829
- }
830
-
831
- this.emitRefresh();
832
- }
833
-
834
- async duplicateRow(
835
- event?: Event,
836
- row?: AsyncTableElement<T>,
837
- opts?: {
838
- includedProperties?: string[];
839
- excludedProperties?: string[];
840
- }
841
- ) {
842
- event?.stopPropagation();
843
-
844
- row = row || this.singleSelectedRow;
845
- if (!row || !(await this.confirmEditCreate(event, row))) {
846
- return false;
847
- }
848
-
849
- const newRow = await this.addRowToTable(row.id + 1);
850
- if (!newRow) throw new Error('Cannot add new row to table');
851
-
852
- const source = row.cloneData();
853
- let target: any;
854
-
855
- // Copy included properties only
856
- if (isNotEmptyArray(opts?.includedProperties)) {
857
- target = {};
858
- // Clone (deep copy)
859
- opts.includedProperties.forEach((path) => {
860
- setPropertyByPath(target, path, getPropertyByPath(source, path));
861
- });
862
- }
863
-
864
- // Copy all properties
865
- else {
866
- target = source;
867
-
868
- // Clean id and updateDate
869
- EntityUtils.cleanIdAndUpdateDate(target, undefined);
870
- }
871
-
872
- // Restore excluded properties (e.g. rankOrder, etc)
873
- if (isNotEmptyArray(opts?.excludedProperties)) {
874
- const newData = newRow.currentData;
875
- opts.excludedProperties.forEach((path) => {
876
- setPropertyByPath(target, path, getPropertyByPath(newData, path));
877
- });
878
- }
879
-
880
- if (newRow.validator) {
881
- newRow.validator.patchValue(target);
882
- newRow.validator.markAsDirty();
883
- } else {
884
- if (newRow.currentData?.fromObject) {
885
- newRow.currentData.fromObject(target);
886
- } else {
887
- newRow.currentData = target;
888
- }
889
- this.markAsDirty();
890
- }
891
-
892
- // select
893
- await this.clickRow(undefined, newRow);
894
- }
895
-
896
- /** Whether the number of selected elements matches the total number of rows. */
897
- isAllSelected() {
898
- // DEBUG
899
- //console.debug('isAllSelected. lengths', this.selection.selected.length, this.totalRowCount);
900
-
901
- return this.selection.selected.length === this.totalRowCount || this.selection.selected.length === this.visibleRowCount;
902
- }
903
-
904
- /** Selects all rows if they are not all selected; otherwise clear selection. */
905
- async masterToggle() {
906
- if (this.loading) return;
907
- if (this.isAllSelected()) {
908
- this.selection.clear();
909
- } else {
910
- const rows = this._dataSource.getRows();
911
- this.selection.setSelection(...rows);
912
- }
913
- }
914
-
915
- async deleteSelection(event: Event, opts?: { interactive?: boolean }): Promise<number> {
916
- const deleteCount = await this.deleteRows(event, this.selection.selected, opts);
917
- if (deleteCount > 0) this.selection.clear();
918
- return deleteCount;
919
- }
920
-
921
- /**
922
- *
923
- * @param event
924
- * @param row
925
- * @param opts Use interactive=false to avoid user interaction (e.g. user confirmation)
926
- * And to force deletion even if table is busy
927
- */
928
- async deleteRow(event: Event | null, row: AsyncTableElement<T>, opts?: { interactive?: boolean }): Promise<boolean> {
929
- const deleteCount = await this.deleteRows(event, [row], opts);
930
- return deleteCount === 1;
931
- }
932
-
933
- /**
934
- *
935
- * @param event
936
- * @param rows
937
- * @param opts Use interactive=false to avoid user interaction (e.g. user confirmation)
938
- * And to force deletion even if table is busy
939
- */
940
- async deleteRows(event: Event | null, rows: AsyncTableElement<T>[], opts?: { interactive?: boolean }): Promise<number> {
941
- if (this.readOnly) {
942
- throw { code: ErrorCodes.TABLE_READ_ONLY, message: 'ERROR.TABLE_READ_ONLY' };
943
- }
944
- if (event?.defaultPrevented) return 0; // SKip
945
- event?.preventDefault();
946
- this.resetError();
947
-
948
- if (!this._enabled || isEmptyArray(rows)) return 0; // Skip is disabled, or no rows to delete
949
-
950
- if (this.loading && (!opts || opts.interactive !== false)) {
951
- console.warn('[app-table] Skip deleteRows() because table is busy (loading). Use opts.interactive = false to force deletion');
952
- return 0; // Skip if loading
953
- }
954
-
955
- // Make sure to keep newly created row
956
- const editedRow = this.dataSource.getSingleEditingRow();
957
- if (editedRow?.id === -1 && editedRow.editing && !rows.includes(editedRow)) {
958
- const confirmed = await this.confirmEditCreate();
959
- if (!confirmed) return 0; // Cannot delete (e.g. edited row is invalid)
960
- }
961
-
962
- // Check if can delete
963
- const canDelete = await this.canDeleteRows(rows, opts);
964
- if (!canDelete) return 0; // Cannot delete
965
-
966
- // Reverse row order (on a copy)
967
- // This is a workaround, need because row.delete() has async execution
968
- // and index cache is updated with a delay
969
- let tempRows = rows.slice().sort((a, b) => (a.id > b.id ? -1 : 1));
970
-
971
- const deletedRows: AsyncTableElement<T>[] = [];
972
-
973
- // If data need to be saved first
974
- if (this.saveBeforeDelete) {
975
- // Exclude invalid rows (because of save() will fail, when exists some invalid rows)
976
- tempRows = tempRows.filter((row) => {
977
- // Delete the row :
978
- // - if newly created row (id = -1),
979
- // - or if invalid and not editing (= not cancellable)
980
- if (row.id === -1 || (!row.editing && row.invalid) /*do not use !valid because if row is disabled, it will be always !valid */) {
981
- if (this.debug) console.debug(`[table] Delete row #${row.id}`);
982
- this.selection.deselect(row);
983
- row.delete();
984
- this.visibleRowCount--;
985
- this.totalRowCount--;
986
- deletedRows.push(row);
987
- return false; // Exclude from the list to delete using the service
988
- }
989
- // Cancel the row (and mark as pristine), when not valid but in edition
990
- else if (row.editing && !row.valid) {
991
- this.selection.deselect(row);
992
- row.cancel();
993
- // Mark row as pristine (if possible)
994
- this.checkIfRowPristine(row, { emitEvent: false, onlySelf: true /*avoid propagation to table*/ });
995
- return true; // Keep the row. the row will be deleted after the save
996
- }
997
-
998
- return true;
999
- });
1000
-
1001
- // Apply save, only if there is still some rows to delete
1002
- // WARN: If no more rows (e.g. because all has been cancelled) then continue anyway to clear editedRow and selection (issue IMAGINE-669)
1003
- if (deletedRows.length || tempRows.length) {
1004
- // Save data (e.g. when using memory service)
1005
- const saved = await this.saveBeforeAction('delete');
1006
- if (!saved) {
1007
- // Stop if save cancelled or save failed
1008
- return;
1009
- }
1010
- }
1011
- }
1012
-
1013
- try {
1014
- // Apply deletion on datasource
1015
- // If no more rows to delete, continue anyway to clear editedRow and selection (issue IMAGINE-669)
1016
- if (tempRows.length) {
1017
- if (this.debug) console.debug(`[table] Delete ${tempRows.length} rows...`);
1018
- await this._dataSource.deleteAll(tempRows);
1019
- }
1020
-
1021
- // DO not update manually, because watchALl().subscribe() will update this count
1022
- //this.totalRowCount -= deleteCount;
1023
- //this.visibleRowCount -= deleteCount;
1024
-
1025
- // Deselect deleted rows
1026
- this.selection.deselect(...rows);
1027
-
1028
- this.markAsDirty({ emitEvent: false /*markForCheck() is called just after*/ });
1029
- this.markForCheck();
1030
-
1031
- this.onAfterDeletedRows.next(rows);
1032
-
1033
- return rows.length;
1034
- } catch (err) {
1035
- this.setError((err && err.message) || err);
1036
- throw err;
1037
- }
1038
- }
1039
-
1040
- async selectRowById(id: number): Promise<boolean> {
1041
- if (id === undefined) return false;
1042
- await this.waitIdle();
1043
- const row = this.dataSource.getRow(id);
1044
- if (!row) return false;
1045
- return this.clickRow(null, row);
1046
- }
1047
-
1048
- /**
1049
- * Try to select row by data. Will use equals() to find same row's data
1050
- *
1051
- * @param data
1052
- */
1053
- async selectRowByData(data: T): Promise<boolean> {
1054
- if (data === undefined) return Promise.resolve(false);
1055
- await this.waitIdle();
1056
- const row = this.dataSource.getRows().find((row) => this.equals(row.currentData, data));
1057
- if (!row) return false;
1058
- return this.clickRow(null, row);
1059
- }
1060
-
1061
- toggleSelectRow(event: Event | undefined, row: AsyncTableElement<T>) {
1062
- // /!\ DO NOT prevent default, otherwise the checkbox will not be updated
1063
- //event?.preventDefault();
1064
- event?.stopPropagation();
1065
- this.selection.toggle(row);
1066
- }
1067
-
1068
- async clickRow(event: Event | undefined, row: AsyncTableElement<T>): Promise<boolean> {
1069
- if (this.loading) {
1070
- // Wait while loading, and loop
1071
- if (this.debug) console.debug('[table] Waiting before apply clickRow() (datasource is busy)...');
1072
- await this.waitIdle({ timeout: 2000 });
1073
- }
1074
-
1075
- // DEBUG
1076
- //console.debug("[table] Detect click on row");
1077
-
1078
- // Cancelled by event
1079
- if (event?.defaultPrevented) {
1080
- if (this.debug) console.debug('[table] clickRow event is defaultPrevented');
1081
- return false;
1082
- }
1083
-
1084
- // Call onClickRow if observed
1085
- if (this.onClickRow.observed) {
1086
- this.onClickRow.next(row);
1087
- return true;
1088
- }
1089
-
1090
- // Open the detail page (if not inline editing)
1091
- if (!this.inlineEdition) {
1092
- if (this._openingRow) return; // Prevent double click
1093
-
1094
- if (event) {
1095
- event.stopPropagation();
1096
- event.preventDefault();
1097
- }
1098
-
1099
- this._openingRow = true; // Prevent double click
1100
- this.markAsLoading();
1101
-
1102
- this.openRow(row.currentData.id, row)
1103
- .catch((err) => console.error('Failed to open row', err)) // Continue
1104
- .then(() => {
1105
- this.markAsLoaded();
1106
-
1107
- // Prevent double click (use an open throttle time)
1108
- if (this.openRowThrottleTime > 0) {
1109
- setTimeout(() => {
1110
- this._openingRow = false;
1111
- }, this.openRowThrottleTime);
1112
- } else {
1113
- this._openingRow = false;
1114
- }
1115
- });
1116
-
1117
- return true;
1118
- }
1119
-
1120
- // Start editing row
1121
- return this.editRow(event, row, { focusColumn: undefined /*force to use the click target*/ });
1122
- }
1123
-
1124
- async moveRow(id: number, direction: number) {
1125
- await this.dataSource.move(id, direction);
1126
- }
1127
-
1128
- ready(opts?: WaitForOptions): Promise<void> {
1129
- return waitForTrue(this.readySubject, { stop: this.destroySubject, ...opts });
1130
- }
1131
-
1132
- waitIdle(opts?: WaitForOptions): Promise<void> {
1133
- if (!this.loadingSubject.value) return Promise.resolve();
1134
- return waitForFalse(this.loadingSubject, { stop: this.destroySubject, ...opts });
1135
- }
1136
-
1137
- async openSelectColumnsModal(event?: Event): Promise<any> {
1138
- event?.preventDefault();
1139
-
1140
- // Copy current columns (deep copy)
1141
- const columns = this.getCurrentColumns();
1142
-
1143
- const hasTopModal = !!(await this.modalCtrl.getTop());
1144
- const modal = await this.modalCtrl.create({
1145
- component: TableSelectColumnsComponent,
1146
- componentProps: { columns },
1147
- cssClass: hasTopModal && 'stack-modal',
1148
- });
1149
-
1150
- // Open the modal
1151
- await modal.present();
1152
-
1153
- // On dismiss
1154
- const { data } = await modal.onDidDismiss();
1155
- if (!data) return; // CANCELLED
1156
-
1157
- // Apply columns
1158
- const userColumns = (data || []).filter((c) => c.canHide === false || c.visible).map((c) => c.name) || [];
1159
- this.displayedColumns = RESERVED_START_COLUMNS.concat(userColumns).concat(RESERVED_END_COLUMNS);
1160
- this.markForCheck();
1161
-
1162
- // Update user settings
1163
- await this.savePageSettings(userColumns, SETTINGS_DISPLAY_COLUMNS);
1164
- }
1165
-
1166
- trackByFn(index: number, row: AsyncTableElement<T>) {
1167
- return row.id;
1168
- }
1169
-
1170
- doRefresh(event?: CompletableEvent) {
1171
- this.emitRefresh(event);
1172
-
1173
- // When target wait for a complete (e.g. IonRefresher)
1174
- if (event?.target && event.target.complete) {
1175
- setTimeout(async () => {
1176
- await this.waitIdle();
1177
- event.target.complete();
1178
- });
1179
- }
1180
- }
1181
-
1182
- getCurrentColumns(): ColumnItem[] {
1183
- const hiddenColumns = this.columns.slice(RESERVED_START_COLUMNS.length).filter((name) => this.displayedColumns.indexOf(name) === -1);
1184
- return this.displayedColumns
1185
- .concat(hiddenColumns)
1186
- .filter((name) => !RESERVED_START_COLUMNS.includes(name) && !RESERVED_END_COLUMNS.includes(name) && !this.excludesColumns.includes(name))
1187
- .map((name) => ({
1188
- name,
1189
- label: this.getI18nColumnName(name),
1190
- visible: this.displayedColumns.indexOf(name) !== -1,
1191
- canHide: this.getRequiredColumns().indexOf(name) === -1,
1192
- }));
1193
- }
1194
-
1195
- async escapeEditingRow(event?: Event, row?: AsyncTableElement<T>) {
1196
- row = row || this.dataSource.getSingleEditingRow();
1197
- if (!row || !row.editing) return;
1198
-
1199
- // DEBUG
1200
- //console.debug('[app-table] Cancel the row (keydown.escape)');
1201
-
1202
- if (event) {
1203
- // Avoid to cancel the editor
1204
- event.preventDefault();
1205
- event.stopPropagation();
1206
- }
1207
-
1208
- // If new row (no id)
1209
- if (row.id === -1) {
1210
- if (row.validator) {
1211
- // If pending: Wait end of validation, then loop
1212
- if (row.pending) {
1213
- await AppFormUtils.waitWhilePending(row.validator);
1214
- }
1215
-
1216
- // Row is invalid: delete the row
1217
- if (row.invalid) {
1218
- await this.deleteNewRow(event, row);
1219
- return;
1220
- }
1221
- }
1222
- }
1223
- // If the row exists (has an id)
1224
- else {
1225
- // need to call cancel function (if confirmation will be called before)
1226
- if (this.confirmBeforeCancel) {
1227
- await this.cancelExistingRow(event, row, { keepEditing: false });
1228
- return;
1229
- }
1230
- }
1231
-
1232
- // By default, try to confirm the row
1233
- await this.confirmEditCreate(event, row);
1234
- }
1235
-
1236
- translateFormPath(path: string): string {
1237
- // Can be overridden by subclasses, to resolve all field name
1238
-
1239
- // Use columns key, has default name
1240
- const i18nColumnKey = this.getI18nColumnName(path);
1241
- return this.translate?.instant(i18nColumnKey) || i18nColumnKey;
1242
- }
1243
-
1244
- /* -- protected method -- */
1245
-
1246
- protected async editRow(event: Event | undefined, row: AsyncTableElement<T>, opts?: { focusColumn?: string }): Promise<boolean> {
1247
- if (!this._enabled || !this.inlineEdition) return false;
1248
- if (this.dataSource.getEditingRows().includes(row)) return true; // Already the edited row
1249
- if (event?.defaultPrevented) return false;
1250
-
1251
- if (!(await this.confirmEditCreate())) {
1252
- return false;
1253
- }
1254
-
1255
- if (!row.editing && !this.loading) {
1256
- this.focusColumn = (opts && opts.focusColumn) || this.focusColumn;
1257
- await this._dataSource.startEdit(row);
1258
- }
1259
- this.onStartEditingRow.emit(row);
1260
- return true;
1261
- }
1262
-
1263
- /**
1264
- * Try to select row, by row.id, or by data. WIll use EntityUtils.equals()
1265
- *
1266
- * @param id
1267
- * @param data
1268
- * @protected
1269
- */
1270
- protected async selectRowByIdOrData(id: number, data?: T): Promise<boolean> {
1271
- let done = false;
1272
- try {
1273
- // Select by row id (if NOT a new row)
1274
- if (isNotNil(id) || id !== -1) {
1275
- done = await this.selectRowById(id);
1276
- if (done) return true;
1277
- console.warn('[app-table] Save: Cannot reselect row by row.id: ', id);
1278
- }
1279
-
1280
- // Try by data
1281
- if (data) {
1282
- done = await this.selectRowByData(data);
1283
- if (done) return true;
1284
- console.warn('[app-table] Save: Cannot reselect row by data: ', data);
1285
- }
1286
-
1287
- return false;
1288
- } catch (err) {
1289
- // Log, but continue
1290
- console.error((err && err.message) || err);
1291
- return false;
1292
- }
1293
- }
1294
-
1295
- /**
1296
- * return the selected row if unique in selection
1297
- */
1298
- protected get singleSelectedRow(): AsyncTableElement<T> {
1299
- return this.selection.selected?.length === 1 ? this.selection.selected[0] : undefined;
1300
- }
1301
-
1302
- protected async canDeleteRows(rows: AsyncTableElement<T>[], opts?: { interactive?: boolean }): Promise<boolean> {
1303
- // Check using emitter
1304
- if (this.onBeforeDeleteRows.observed) {
1305
- try {
1306
- const canDelete = await emitPromiseEvent(this.onBeforeDeleteRows, 'canDelete', {
1307
- detail: { rows },
1308
- });
1309
- if (!canDelete) return false;
1310
- } catch (err) {
1311
- if (err === 'CANCELLED') return false; // User cancel
1312
- console.error('Error while checking if can delete rows', err);
1313
- throw err;
1314
- }
1315
- }
1316
-
1317
- // Ask user confirmation
1318
- if (this.confirmBeforeDelete && (!opts || opts.interactive !== false)) {
1319
- return this.askDeleteConfirmation(null, rows);
1320
- }
1321
- return true;
1322
- }
1323
-
1324
- protected async canCancelRows(rows?: AsyncTableElement<T>[], opts?: { interactive?: boolean }): Promise<boolean> {
1325
- // Get dirty rows
1326
- rows = rows || this.dataSource.getRows().filter((row) => row.validator?.dirty);
1327
-
1328
- if (isEmptyArray(rows)) return true; // No dirty: OK
1329
-
1330
- // Check using emitter
1331
- if (this.onBeforeCancelRows.observed) {
1332
- try {
1333
- const isCancel = await emitPromiseEvent(this.onBeforeCancelRows, 'canCancel', {
1334
- detail: { rows },
1335
- });
1336
- if (!isCancel) return false;
1337
- } catch (err) {
1338
- if (err === 'CANCELLED') return false; // User cancel
1339
- console.error('Error while checking if can cancel rows', err);
1340
- throw err;
1341
- }
1342
- }
1343
-
1344
- // Ask user confirmation
1345
- if (this.confirmBeforeCancel && (!opts || opts.interactive !== false)) {
1346
- return this.askCancelConfirmation(null, rows);
1347
- }
1348
- return true;
1349
- }
1350
-
1351
- protected async saveBeforeAction(saveAction: SaveActionType): Promise<boolean> {
1352
- if (!this.dirty) {
1353
- // Continue without save
1354
- return true;
1355
- }
1356
-
1357
- let save: boolean;
1358
- switch (saveAction) {
1359
- case 'delete':
1360
- save = this.saveBeforeDelete;
1361
- break;
1362
- case 'filter':
1363
- save = this.saveBeforeFilter;
1364
- break;
1365
- case 'sort':
1366
- save = this.saveBeforeSort;
1367
- break;
1368
- default:
1369
- save = true;
1370
- }
1371
-
1372
- // Default behavior
1373
- let confirmed = true;
1374
-
1375
- if (save) {
1376
- if (this.onBeforeSave.observed) {
1377
- // Ask confirmation
1378
- try {
1379
- const res = await emitPromiseEvent(this.onBeforeSave, 'beforeSave', {
1380
- detail: { action: saveAction, valid: this.valid },
1381
- });
1382
- confirmed = res.confirmed;
1383
- save = res.save;
1384
- } catch (err) {
1385
- if (err === 'CANCELLED') return false; // User cancel
1386
- console.error('Error while checking if can delete rows', err);
1387
- throw err;
1388
- }
1389
- }
1390
- }
1391
-
1392
- if (confirmed) {
1393
- if (save) {
1394
- // User confirmed save
1395
- const saved = await this.save();
1396
- this.markAsDirty(); // Restore dirty flag
1397
- return saved;
1398
- }
1399
- return true; // No save but continue action
1400
- }
1401
-
1402
- return false; // User cancel the action
1403
- }
1404
-
1405
- /**
1406
- * Open a row detail view. By default, will to open row detail page.
1407
- * Can be overridden by subclasses, BUT prefer to subscribe on onOpenRow
1408
- *
1409
- * @param id
1410
- * @param row
1411
- * @protected
1412
- */
1413
- protected async openRow(id: ID, row: AsyncTableElement<T>): Promise<boolean> {
1414
- if (this.allowRowDetail) {
1415
- if (this.debug && this.dirty) {
1416
- console.warn('[table] Opening row details, but table has unsaved changes!');
1417
- }
1418
-
1419
- if (this.onOpenRow.observed) {
1420
- // Clear selection (because next route can change the current table content)
1421
- this.selection.clear();
1422
- this.onOpenRow.emit(row);
1423
- return true;
1424
- }
1425
-
1426
- // No ID defined: unable to open details
1427
- if (isNil(id)) {
1428
- console.warn('[table] Opening row details, but data has no id!');
1429
- return false;
1430
- }
1431
-
1432
- // Clear selection (because next route can change the current table content)
1433
- this.selection.clear();
1434
-
1435
- return this.navController.navigateForward(`${this.router.url}/${id}`, {
1436
- queryParams: {},
1437
- });
1438
- }
1439
- return false;
1440
- }
1441
-
1442
- protected async openNewRowDetail(event?: any): Promise<boolean> {
1443
- if (!this.allowRowDetail) return false;
1444
-
1445
- if (this.onNewRow.observed) {
1446
- this.onNewRow.emit(event);
1447
- return true;
1448
- }
1449
-
1450
- // Clear selection (because next route can change the current table content)
1451
- this.selection.clear();
1452
-
1453
- return this.navController.navigateForward(`${this.router.url}/new`);
1454
- }
1455
-
1456
- // can be overridden to add more required columns
1457
- protected getRequiredColumns() {
1458
- return DEFAULT_REQUIRED_COLUMNS;
1459
- }
1460
-
1461
- protected getUserColumns(): string[] {
1462
- return this.getPageSettings(SETTINGS_DISPLAY_COLUMNS);
1463
- }
1464
-
1465
- protected getSortedColumn(): MatSortable {
1466
- const data = this.getPageSettings(SETTINGS_SORTED_COLUMN);
1467
- const parts = data && data.split(':');
1468
- if (parts && parts.length === 2 && this.columns.includes(parts[0])) {
1469
- return { id: parts[0], start: parts[1] === 'desc' ? 'desc' : 'asc', disableClear: false };
1470
- }
1471
- if (this.defaultSortBy) {
1472
- return { id: this.defaultSortBy, start: this.defaultSortDirection || 'asc', disableClear: false };
1473
- }
1474
- return { id: 'id', start: 'asc', disableClear: false };
1475
- }
1476
-
1477
- protected getPageSize(): number {
1478
- const pageSize = this.getPageSettings<number>(SETTINGS_PAGE_SIZE);
1479
- return pageSize || this.defaultPageSize;
1480
- }
1481
-
1482
- protected getDisplayColumns(): string[] {
1483
- let userColumns = this.getUserColumns();
1484
-
1485
- // No user override
1486
- if (!userColumns) {
1487
- // Return default, without columns to hide
1488
- return this.columns.filter((column) => !this.excludesColumns.includes(column));
1489
- }
1490
-
1491
- // Get fixed start columns
1492
- const fixedStartColumns = this.columns.filter((c) => RESERVED_START_COLUMNS.includes(c));
1493
-
1494
- // Remove end columns
1495
- const fixedEndColumns = this.columns.filter((c) => RESERVED_END_COLUMNS.includes(c));
1496
-
1497
- // Remove fixed columns from user columns
1498
- userColumns = userColumns.filter((c) => !fixedStartColumns.includes(c) && !fixedEndColumns.includes(c) && this.columns.includes(c));
1499
-
1500
- // Add required columns if missing
1501
- userColumns.push(
1502
- ...this.getRequiredColumns().filter((c) => !fixedStartColumns.includes(c) && !fixedEndColumns.includes(c) && !userColumns.includes(c))
1503
- );
1504
-
1505
- return (
1506
- fixedStartColumns
1507
- .concat(userColumns)
1508
- .concat(fixedEndColumns)
1509
- // Remove columns to hide
1510
- .filter((column) => !this.excludesColumns.includes(column))
1511
- );
1512
- }
1513
-
1514
- /**
1515
- * Recompute display columns
1516
- *
1517
- * @protected
1518
- */
1519
- protected updateColumns() {
1520
- this.displayedColumns = this.getDisplayColumns();
1521
- if (!this.loading) this.markForCheck();
1522
- }
1523
-
1524
- protected registerSubscription(sub: Subscription) {
1525
- this._subscription.add(sub);
1526
- }
1527
-
1528
- protected unregisterSubscription(sub: Subscription) {
1529
- this._subscription.remove(sub);
1530
- }
1531
-
1532
- protected registerAutocompleteField<E = any, EF = any>(
1533
- fieldName: string,
1534
- options?: MatAutocompleteFieldAddOptions<E, EF>
1535
- ): MatAutocompleteFieldConfig<E, EF> {
1536
- return this._autocompleteConfigHolder.add(fieldName, options);
1537
- }
1538
-
1539
- protected getI18nColumnName(columnName: string) {
1540
- return (this.i18nColumnPrefix || '') + changeCaseToUnderscore(columnName).toUpperCase();
1541
- }
1542
-
1543
- protected generateTableId() {
1544
- // noinspection JSNonASCIINames
1545
- const meta = this.constructor['ɵcmp'];
1546
- // Get a component unique name - See https://stackoverflow.com/questions/60114682/how-to-access-components-unique-encapsulation-id-in-angular-9
1547
- const componentId = (meta && (meta.selectors?.[0] || meta.id)) || this.constructor.name;
1548
- const id =
1549
- this.location
1550
- .path(true)
1551
- .replace(/[?].*$/g, '')
1552
- .replace(/\/\d+/g, '_id') +
1553
- '_' +
1554
- componentId;
1555
- //if (this.debug) console.debug('[table] id = ' + id);
1556
- return id;
1557
- }
1558
-
1559
- protected async addRowToTable(
1560
- insertAt?: number,
1561
- opts?: { focusColumn?: string; editing?: boolean; emitEvent?: boolean }
1562
- ): Promise<AsyncTableElement<T> | undefined> {
1563
- // Try to finish edited row first
1564
- if (!(await this.confirmEditCreate())) {
1565
- console.warn('[table] Cannot add new row, because the previous edited row cannot be confirmed');
1566
- return undefined;
1567
- }
1568
-
1569
- const editing = this.inlineEdition && (!opts || opts.editing !== false); // true by default, if inlineEdition
1570
-
1571
- const row = await this._dataSource.createNew(insertAt, { editing });
1572
- if (!row) return undefined;
1573
-
1574
- if (row.editing) {
1575
- // Update focused column
1576
- this.focusFirstColumn = true;
1577
- this.focusColumn = opts?.focusColumn || this.firstUserColumn;
1578
-
1579
- // Emit start editing event
1580
- this.onStartEditingRow.emit(row);
1581
- }
1582
-
1583
- this.totalRowCount++;
1584
- this.visibleRowCount++;
1585
-
1586
- this.markAsDirty({ emitEvent: false /*markForCheck() is called just after*/ });
1587
-
1588
- // Emit event
1589
- if (!opts || opts.emitEvent !== false) this.markForCheck();
1590
-
1591
- return row;
1592
- }
1593
-
1594
- protected registerCellValueChanges(name: string, formPath?: string, emitInitialValue?: boolean): Observable<any> {
1595
- formPath = formPath || name;
1596
- emitInitialValue = emitInitialValue || false;
1597
- let def = this._cellValueChangesDefs[name];
1598
- if (def && (def.formPath !== formPath || def.emitInitialValue !== emitInitialValue)) {
1599
- throw Error("Already register a cell value change for this name, with different 'formPath' or 'emitInitialValue'. Please use same arguments.");
1600
- }
1601
-
1602
- // Not exists: register new definition
1603
- if (!def) {
1604
- if (this.debug) console.debug(`[table] New listener {${name}} for value changes on path ${formPath}`);
1605
- def = {
1606
- subject: new Subject<any>(),
1607
- subscription: null,
1608
- formPath,
1609
- emitInitialValue,
1610
- };
1611
- this._cellValueChangesDefs[name] = def;
1612
-
1613
- // Start the listener, when editing starts
1614
- this.registerSubscription(this.onStartEditingRow.subscribe((row) => this.startCellValueChanges(name, row)));
1615
- }
1616
-
1617
- return def.subject;
1618
- }
1619
-
1620
- protected setShowColumn(columnName: string, show: boolean, opts?: { emitEvent?: boolean }) {
1621
- if (!this.excludesColumns.includes(columnName) !== show) {
1622
- if (!show) {
1623
- this.excludesColumns.push(columnName);
1624
- } else {
1625
- const index = this.excludesColumns.findIndex((value) => value === columnName);
1626
- if (index >= 0) this.excludesColumns.splice(index, 1);
1627
- }
1628
-
1629
- // Recompute display columns
1630
- if (this.displayedColumns && (!opts || opts.emitEvent !== false)) {
1631
- this.updateColumns();
1632
- }
1633
- }
1634
- }
1635
-
1636
- protected getShowColumn(columnName: string): boolean {
1637
- return !this.excludesColumns.includes(columnName);
1638
- }
1639
-
1640
- protected startsWithUpperCase(input: string, search: string): boolean {
1641
- return input && input.toUpperCase().startsWith(search);
1642
- }
1643
-
1644
- protected markForCheck() {
1645
- this.cd.markForCheck();
1646
- }
1647
-
1648
- protected detectChanges() {
1649
- this.cd.detectChanges();
1650
- }
1651
-
1652
- protected async askDeleteConfirmation(event?: Event, rows?: AsyncTableElement<T>[]): Promise<boolean> {
1653
- if (this.undoableDeletion) {
1654
- // Special message, for undoable deletion
1655
- return Alerts.askConfirmation(rows?.length === 1 ? 'CONFIRM.DELETE_ROW' : 'CONFIRM.DELETE_ROWS', this.alertCtrl, this.translate, event);
1656
- }
1657
- // Immediate deletion action
1658
- return Alerts.askActionConfirmation(this.alertCtrl, this.translate, true, event);
1659
- }
1660
-
1661
- protected async askCancelConfirmation(event?: Event, rows?: AsyncTableElement<T>[]): Promise<boolean> {
1662
- return Alerts.askConfirmation(rows?.length === 1 ? 'CONFIRM.CANCEL_ROW' : 'CONFIRM.CANCEL_ROWS', this.alertCtrl, this.translate, event);
1663
- }
1664
-
1665
- protected async askRestoreConfirmation(event?: Event): Promise<boolean> {
1666
- return Alerts.askActionConfirmation(this.alertCtrl, this.translate, false, event);
1667
- }
1668
-
1669
- protected async showToast(opts: ShowToastOptions) {
1670
- if (!this.toastController) throw new Error("Missing toastController in component's constructor");
1671
- return Toasts.show(this.toastController, this.translate, opts);
1672
- }
1673
-
1674
- protected resetError(opts?: { emitEvent?: boolean }) {
1675
- this.setError(undefined, opts);
1676
- }
1677
-
1678
- protected getRowError(row?: AsyncTableElement<T>, opts?: FormErrorTranslateOptions): string {
1679
- row = row || this.dataSource.getSingleEditingRow();
1680
- if (!row || !this.formErrorAdapter) return undefined;
1681
-
1682
- return this.formErrorAdapter.translateFormErrors(row.validator, {
1683
- ...this.errorTranslateOptions,
1684
- ...opts,
1685
- });
1686
- }
1687
-
1688
- protected setError(value: string, opts?: { emitEvent?: boolean }) {
1689
- if (this.errorSubject.value !== value) {
1690
- this.errorSubject.next(value);
1691
- if (!opts || opts.emitEvent !== false) {
1692
- this.markForCheck();
1693
- }
1694
- }
1695
- }
1696
-
1697
- /**
1698
- * Compare data equality (default by id, using EntityUtils.equals())
1699
- * Can be overridden to add additional properties to compare
1700
- *
1701
- * @param d1
1702
- * @param d2
1703
- * @protected
1704
- */
1705
- protected equals(d1: T, d2: T): boolean {
1706
- return EntityUtils.equals(d1, d2, 'id');
1707
- }
1708
-
1709
- protected markRowAsDirty(row?: AsyncTableElement<T>, opts?: { onlySelf?: boolean; emitEVent?: boolean }) {
1710
- row = row || this.dataSource.getSingleEditingRow();
1711
- if (row) row.validator?.markAsDirty(opts);
1712
- this.markAsDirty(opts);
1713
- }
1714
-
1715
- protected getPageSettings<T = any>(propertyName?: string): T {
1716
- return this.settings.getPageSettings(this.settingsId, propertyName);
1717
- }
1718
-
1719
- protected async savePageSettings(value: any, propertyName?: string) {
1720
- await this.settings.savePageSetting(this.settingsId, value, propertyName);
1721
- }
1722
-
1723
- protected emitRefresh(value?: any) {
1724
- // Emit onRefresh if not closed (can happen if component is destroyed to early)
1725
- if (!!this.onRefresh && !this.onRefresh.closed) {
1726
- this.onRefresh.emit(value);
1727
- }
1728
- }
1729
-
1730
- /**
1731
- * Initialize the permanent selection model
1732
- *
1733
- * @protected
1734
- */
1735
- protected initPermanentSelection() {
1736
- if (this.permanentSelection) throw new Error('initPermanentSelection() already called!');
1737
-
1738
- this.permanentSelection = new SelectionModel<T>(true, []);
1739
-
1740
- // Listen sort change
1741
- this.registerSubscription(
1742
- this.onSort.subscribe(() => (this.permanentSelectionChangedPrevented = true)) // prevent selection change on sort
1743
- );
1744
-
1745
- // Listen datasource update
1746
- this.registerSubscription(
1747
- this.dataSource.rowsSubject
1748
- // restore the 'adding' selection (for example after a page or sort change)
1749
- .subscribe((rows) => {
1750
- this.permanentSelectionChangedPrevented = true;
1751
- try {
1752
- const permanentSelectionIds = (this.permanentSelection.selected || []).map(EntityUtils.getId);
1753
- this.selection.setSelection(...rows.filter((row) => permanentSelectionIds.includes(AppTableUtils.getEntityId(row))));
1754
- this.markForCheck();
1755
- } finally {
1756
- this.permanentSelectionChangedPrevented = false;
1757
- }
1758
- })
1759
- );
1760
-
1761
- // Listen selection change
1762
- this.registerSubscription(
1763
- this.selection.changed.pipe(filter(() => !this.permanentSelectionChangedPrevented)).subscribe((selectionChange) => {
1764
- // add to selection
1765
- if (selectionChange.added.length) {
1766
- this.permanentSelection.setSelection(
1767
- ...(this.permanentSelection.selected || [])
1768
- // Add new elements
1769
- .concat(...AppTableUtils.getEntities(selectionChange.added).filter(EntityUtils.hasId))
1770
- // Avoid duplicated entities (Mantis #55351)
1771
- .filter(EntityUtils.arrayDistinctFilterFn)
1772
- );
1773
- }
1774
- // remove from selection
1775
- if (selectionChange.removed.length) {
1776
- const removedIds = AppTableUtils.getEntityIds(selectionChange.removed);
1777
- this.permanentSelection.setSelection(
1778
- ...(this.permanentSelection.selected || []).filter((entity) => EntityUtils.hasId(entity) && !removedIds.includes(entity.id))
1779
- );
1780
- }
1781
- this.markForCheck();
1782
- })
1783
- );
1784
- }
1785
-
1786
- /* -- private method -- */
1787
-
1788
- private async listenSortAndPaginationEvents() {
1789
- if (!this.table) {
1790
- // DEBUG only -- alert user that table not found in template
1791
- if (this.debug) {
1792
- setTimeout(
1793
- () =>
1794
- !this.table &&
1795
- console.warn(`[table] Missing <mat-table> in the HTML template (after waiting 500ms)! Component: ${this.constructor.name}`),
1796
- 500
1797
- );
1798
- }
1799
-
1800
- // Make sure to wait the table
1801
- await waitFor(() => !!this.table, { stop: this.destroySubject, stopError: false /*avoid error when destorying the table*/ });
1802
- }
1803
-
1804
- this.registerSubscription(
1805
- merge(
1806
- // Listen sort events
1807
- (this.sort &&
1808
- this.sort.sortChange.pipe(
1809
- filter(() => !this.sort.disabled),
1810
- mergeMap(async () => this.saveBeforeAction('sort')),
1811
- filter((res) => res === true),
1812
- // Save sort in settings
1813
- tap(() => {
1814
- const value = [this.sort.active, this.sort.direction || 'asc'].join(':');
1815
- this.savePageSettings(value, SETTINGS_SORTED_COLUMN);
1816
- })
1817
- )) ||
1818
- EMPTY,
1819
-
1820
- // Listen paginator events
1821
- (this.paginator &&
1822
- this.paginator.page.pipe(
1823
- mergeMap((_) => this.saveBeforeAction('sort')),
1824
- filter((saved) => saved === true),
1825
- // Save page size in settings
1826
- tap(() => this.savePageSettings(this.paginator.pageSize, SETTINGS_PAGE_SIZE))
1827
- )) ||
1828
- EMPTY
1829
- )
1830
- // Refresh on any sort or paginator events
1831
- .subscribe((value) => {
1832
- this.onSort.emit(value);
1833
- this.emitRefresh(value);
1834
- })
1835
- );
1836
-
1837
- // If the user changes the sort order, reset back to the first page.
1838
- if (this.sort && this.paginator) {
1839
- this.registerSubscription(this.sort.sortChange.pipe(filter(() => !this.sort.disabled)).subscribe(() => (this.paginator.pageIndex = 0)));
1840
- }
1841
- }
1842
-
1843
- private async editRowById(event: Event | undefined, id: number, opts?: { focusColumn?: string }) {
1844
- if (id < 0) return;
1845
- if (id >= this.visibleRowCount) {
1846
- await this.addRow(event, undefined, { ...opts, editing: true });
1847
- } else {
1848
- const row = this.dataSource.getRow(id);
1849
- await this.editRow(event, row, opts);
1850
- }
1851
- }
1852
-
1853
- private setLoading(value: boolean, opts?: { emitEvent?: boolean }) {
1854
- if (!this.loadingSubject.closed && this.loadingSubject.value !== value) {
1855
- this.loadingSubject.next(value);
1856
-
1857
- if (!opts || opts.emitEvent !== false) {
1858
- this.markForCheck();
1859
- }
1860
- }
1861
- }
1862
-
1863
- private async deleteNewRow(event: Event | undefined, row: AsyncTableElement<T>) {
1864
- // Make sure row will be cancelled, and NOT deleted
1865
- if (row.id !== -1) throw new Error('Row must have id = -1');
1866
- event?.stopPropagation();
1867
-
1868
- this.selection.clear();
1869
- await this._dataSource.cancelOrDelete(row);
1870
- this.resetError();
1871
-
1872
- this.onCancelOrDeleteRow.next(row);
1873
- this.totalRowCount--;
1874
- this.visibleRowCount--;
1875
- }
1876
-
1877
- private async deleteExistingRow(event: Event | null, row: AsyncTableElement<T>, opts?: { interactive?: boolean }) {
1878
- // Make sure row will be cancelled, and NOT deleted
1879
- if (row.id === -1) throw new Error('Row must have an id');
1880
-
1881
- if (event?.defaultPrevented) return 0; // SKip
1882
- event?.preventDefault();
1883
-
1884
- await this.deleteRow(null, row, opts);
1885
- }
1886
-
1887
- private async cancelExistingRow(event: Event | undefined, row: AsyncTableElement<T>, opts?: { interactive?: boolean; keepEditing?: boolean }) {
1888
- // Make sure row will be cancelled, and NOT deleted
1889
- if (row.id === -1 || !row.editing) throw new Error('Row cannot be canceling, but only deleting');
1890
-
1891
- const confirmed = !opts || opts.interactive !== false;
1892
-
1893
- // Ask user confirmation, if cancel
1894
- if (!confirmed && row.dirty && (this.confirmBeforeCancel || this.onBeforeCancelRows.observed)) {
1895
- event?.stopPropagation();
1896
- if (!(await this.canCancelRows([row], opts))) {
1897
- return;
1898
- }
1899
- }
1900
-
1901
- const keepEditing = row.editing && (!opts || opts.keepEditing !== false);
1902
- await this._dataSource.cancelOrDelete(row);
1903
- this.onCancelOrDeleteRow.next(row);
1904
-
1905
- // Mark row as pristine
1906
- await this.checkIfRowPristine(row);
1907
-
1908
- // Restore editing state
1909
- if (keepEditing) {
1910
- await this.editRow(undefined, row);
1911
- }
1912
- }
1913
-
1914
- private async checkIfRowPristine(row: AsyncTableElement<T>, opts?: { emitEvent?: boolean; onlySelf?: boolean }) {
1915
- // Mark row as pristine
1916
- const markRowAsPristine = this.dataSource?.config.restoreOriginalDataOnCancel === true;
1917
- if (markRowAsPristine) {
1918
- row.validator?.markAsPristine();
1919
-
1920
- // Check if table is now pristine
1921
- if (!opts || opts.onlySelf !== true) {
1922
- await this.checkIfPristine(opts);
1923
- }
1924
- }
1925
- }
1926
-
1927
- private async checkIfPristine(opts?: { emitEvent?: boolean }) {
1928
- if (!this.dirty) return; // Already pristine
1929
-
1930
- const rows = this._dataSource.getRows();
1931
- const pristine = (rows || []).findIndex((row) => row.dirty) === -1;
1932
- if (pristine) this.markAsPristine(opts);
1933
- }
1934
-
1935
- private applyFilter(filter: F, opts: { emitEvent?: boolean }) {
1936
- if (this.debug) console.debug('[table] Applying filter', filter);
1937
- this._filter = filter;
1938
- if (opts && opts.emitEvent) {
1939
- if (this.paginator && this.paginator.pageIndex > 0) {
1940
- this.paginator.pageIndex = 0;
1941
- }
1942
- this.emitRefresh();
1943
- }
1944
- }
1945
-
1946
- private listenDatasourceLoading(dataSource: EntitiesAsyncTableDataSource<T, F, ID>) {
1947
- if (!dataSource) throw new Error('[table] dataSource not set !');
1948
-
1949
- // Cleaning previous subscription on datasource
1950
- if (isNotNil(this._dataSourceLoadingSubscription)) {
1951
- if (this.debug) console.debug('[table] Many call to listenDatasource(): Cleaning previous subscriptions...');
1952
- this._dataSourceLoadingSubscription.unsubscribe();
1953
- this.unregisterSubscription(this._dataSourceLoadingSubscription);
1954
- }
1955
-
1956
- // Propage loading to table
1957
- this._dataSourceLoadingSubscription = this._dataSource.loadingSubject
1958
- .pipe(
1959
- filter(isNotNil), // filter out 'undefined'
1960
- distinctUntilChanged(),
1961
-
1962
- // If changed to True: propagate as soon as possible
1963
- tap((loading) => loading && this.setLoading(true)),
1964
-
1965
- // If changed to False: wait 250ms before propagate (to make sure the spinner has been displayed)
1966
- debounceTime(250),
1967
- tap((loading) => !loading && this.setLoading(false))
1968
- )
1969
- .subscribe();
1970
- this.registerSubscription(this._dataSourceLoadingSubscription);
1971
- }
1972
-
1973
- private startCellValueChanges(name: string, row: AsyncTableElement<T>) {
1974
- const def = this._cellValueChangesDefs[name];
1975
- if (!def) {
1976
- console.warn('[table] Listener with name {' + name + '} not registered! Please call registerCellValueChanges() before;');
1977
- return;
1978
- }
1979
- // Stop previous subscription
1980
- if (def.subscription) {
1981
- def.subscription.unsubscribe();
1982
- def.subscription = null;
1983
- } else {
1984
- if (this.debug) console.debug(`[table] Start values changes on row path {${def.formPath}}`);
1985
- }
1986
-
1987
- // Listen value changes, and redirect to event emitter
1988
- const control = row.validator && AppFormUtils.getControlFromPath(row.validator, def.formPath);
1989
- if (!control) {
1990
- console.warn(`[table] Could not listen cell changes: no validator or invalid form path {${def.formPath}}`);
1991
- } else {
1992
- def.subscription = control.valueChanges
1993
- .pipe(
1994
- // don't emit if control is disabled
1995
- filter(() => control.enabled)
1996
- )
1997
- .subscribe((value) => def.subject.next(value));
1998
-
1999
- // Emit the actual value
2000
- if (def.emitInitialValue !== false) {
2001
- def.subject.next(control.value);
2002
- }
2003
- }
2004
- }
2005
-
2006
- private stopCellValueChanges(name: string, destroy?: boolean) {
2007
- const def = this._cellValueChangesDefs[name];
2008
- if (!def) return;
2009
- if (def.subscription) {
2010
- if (this.debug) console.debug('[table] Stop value changes on row path {' + def.formPath + '}');
2011
- def.subscription.unsubscribe();
2012
- def.subscription = null;
2013
- }
2014
- if (destroy && def.subject) {
2015
- def.subject.complete();
2016
- def.subject.unsubscribe();
2017
- }
2018
- }
2019
- }