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