@sumaris-net/ngx-components 2.6.4-alpha4 → 2.6.4-alpha5

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 (1179) hide show
  1. package/.editorconfig +24 -0
  2. package/.eslintrc.json +74 -0
  3. package/.gitattribute +1 -0
  4. package/.github/CONTRIBUTING.md +10 -0
  5. package/.github/ISSUE_TEMPLATE.md +6 -0
  6. package/.github/PULL_REQUEST_TEMPLATE.md +10 -0
  7. package/.github/github_disclaimer.md +14 -0
  8. package/.gitlab-ci.yml +46 -0
  9. package/.graphqlconfig +15 -0
  10. package/angular.json +230 -0
  11. package/capacitor.config.json +9 -0
  12. package/ionic.config.json +7 -0
  13. package/karma.conf.js +32 -0
  14. package/ng-package.json +19 -0
  15. package/ngcc.config.js +14 -0
  16. package/package.json +137 -23
  17. package/public_api.ts +343 -0
  18. package/resources/android/build/tools/android-accept-licenses.sh +14 -0
  19. package/resources/android/icon/drawable-hdpi-icon.png +0 -0
  20. package/resources/android/icon/drawable-ldpi-icon.png +0 -0
  21. package/resources/android/icon/drawable-mdpi-icon.png +0 -0
  22. package/resources/android/icon/drawable-xhdpi-icon.png +0 -0
  23. package/resources/android/icon/drawable-xxhdpi-icon.png +0 -0
  24. package/resources/android/icon/drawable-xxxhdpi-icon.png +0 -0
  25. package/resources/android/splash/drawable-land-hdpi-screen.png +0 -0
  26. package/resources/android/splash/drawable-land-ldpi-screen.png +0 -0
  27. package/resources/android/splash/drawable-land-mdpi-screen.png +0 -0
  28. package/resources/android/splash/drawable-land-xhdpi-screen.png +0 -0
  29. package/resources/android/splash/drawable-land-xxhdpi-screen.png +0 -0
  30. package/resources/android/splash/drawable-land-xxxhdpi-screen.png +0 -0
  31. package/resources/android/splash/drawable-port-hdpi-screen.png +0 -0
  32. package/resources/android/splash/drawable-port-ldpi-screen.png +0 -0
  33. package/resources/android/splash/drawable-port-mdpi-screen.png +0 -0
  34. package/resources/android/splash/drawable-port-xhdpi-screen.png +0 -0
  35. package/resources/android/splash/drawable-port-xxhdpi-screen.png +0 -0
  36. package/resources/android/splash/drawable-port-xxxhdpi-screen.png +0 -0
  37. package/resources/android/splash/drawable-xxxhdpi-screen.png +0 -0
  38. package/resources/icon/TODO.md +11 -0
  39. package/resources/icon.png +0 -0
  40. package/resources/icon.png.md5 +1 -0
  41. package/resources/icon.xcf +0 -0
  42. package/resources/ios/icon/icon-1024.png +0 -0
  43. package/resources/ios/icon/icon-108@2x.png +0 -0
  44. package/resources/ios/icon/icon-20.png +0 -0
  45. package/resources/ios/icon/icon-20@2x.png +0 -0
  46. package/resources/ios/icon/icon-20@3x.png +0 -0
  47. package/resources/ios/icon/icon-24@2x.png +0 -0
  48. package/resources/ios/icon/icon-27.5@2x.png +0 -0
  49. package/resources/ios/icon/icon-29.png +0 -0
  50. package/resources/ios/icon/icon-29@2x.png +0 -0
  51. package/resources/ios/icon/icon-29@3x.png +0 -0
  52. package/resources/ios/icon/icon-40.png +0 -0
  53. package/resources/ios/icon/icon-40@2x.png +0 -0
  54. package/resources/ios/icon/icon-40@3x.png +0 -0
  55. package/resources/ios/icon/icon-44@2x.png +0 -0
  56. package/resources/ios/icon/icon-50.png +0 -0
  57. package/resources/ios/icon/icon-50@2x.png +0 -0
  58. package/resources/ios/icon/icon-60.png +0 -0
  59. package/resources/ios/icon/icon-60@2x.png +0 -0
  60. package/resources/ios/icon/icon-60@3x.png +0 -0
  61. package/resources/ios/icon/icon-72.png +0 -0
  62. package/resources/ios/icon/icon-72@2x.png +0 -0
  63. package/resources/ios/icon/icon-76.png +0 -0
  64. package/resources/ios/icon/icon-76@2x.png +0 -0
  65. package/resources/ios/icon/icon-83.5@2x.png +0 -0
  66. package/resources/ios/icon/icon-86@2x.png +0 -0
  67. package/resources/ios/icon/icon-98@2x.png +0 -0
  68. package/resources/ios/icon/icon-small.png +0 -0
  69. package/resources/ios/icon/icon-small@2x.png +0 -0
  70. package/resources/ios/icon/icon-small@3x.png +0 -0
  71. package/resources/ios/icon/icon.png +0 -0
  72. package/resources/ios/icon/icon@2x.png +0 -0
  73. package/resources/ios/splash/Default-1792h~iphone.png +0 -0
  74. package/resources/ios/splash/Default-2436h.png +0 -0
  75. package/resources/ios/splash/Default-2688h~iphone.png +0 -0
  76. package/resources/ios/splash/Default-568h@2x~iphone.png +0 -0
  77. package/resources/ios/splash/Default-667h.png +0 -0
  78. package/resources/ios/splash/Default-736h.png +0 -0
  79. package/resources/ios/splash/Default-Landscape-1792h~iphone.png +0 -0
  80. package/resources/ios/splash/Default-Landscape-2436h.png +0 -0
  81. package/resources/ios/splash/Default-Landscape-2688h~iphone.png +0 -0
  82. package/resources/ios/splash/Default-Landscape-736h.png +0 -0
  83. package/resources/ios/splash/Default-Landscape@2x~ipad.png +0 -0
  84. package/resources/ios/splash/Default-Landscape@~ipadpro.png +0 -0
  85. package/resources/ios/splash/Default-Landscape~ipad.png +0 -0
  86. package/resources/ios/splash/Default-Portrait@2x~ipad.png +0 -0
  87. package/resources/ios/splash/Default-Portrait@~ipadpro.png +0 -0
  88. package/resources/ios/splash/Default-Portrait~ipad.png +0 -0
  89. package/resources/ios/splash/Default@2x~iphone.png +0 -0
  90. package/resources/ios/splash/Default@2x~universal~anyany.png +0 -0
  91. package/resources/ios/splash/Default~iphone.png +0 -0
  92. package/resources/splash.png +0 -0
  93. package/resources/splash.png.md5 +1 -0
  94. package/scripts/build-android.sh +18 -0
  95. package/scripts/build-i18n.js +24 -0
  96. package/scripts/docker-start.sh +6 -0
  97. package/scripts/emulate-android.sh +17 -0
  98. package/scripts/env-android.sh +83 -0
  99. package/scripts/env-clean.sh +23 -0
  100. package/scripts/env-global.sh +156 -0
  101. package/scripts/install-android-sdk-tools.sh +73 -0
  102. package/scripts/ionic-update.sh +24 -0
  103. package/scripts/node/playground.ts +9 -0
  104. package/scripts/node/resources.js +90 -0
  105. package/scripts/release.sh +149 -0
  106. package/scripts/run-android.sh +59 -0
  107. package/scripts/test.sh +19 -0
  108. package/src/app/admin/admin-routing.module.ts +30 -0
  109. package/src/app/admin/admin.module.ts +23 -0
  110. package/src/app/admin/services/filter/person.filter.ts +77 -0
  111. package/src/app/admin/services/person.service.ts +212 -0
  112. package/src/app/admin/services/validator/person.validator.ts +37 -0
  113. package/src/app/admin/users/users.html +427 -0
  114. package/src/app/admin/users/users.module.ts +34 -0
  115. package/src/app/admin/users/users.scss +59 -0
  116. package/src/app/admin/users/users.ts +257 -0
  117. package/src/app/app-routing.module.ts +126 -0
  118. package/src/app/app.component.html +12 -0
  119. package/src/app/app.component.scss +4 -0
  120. package/src/app/app.component.ts +205 -0
  121. package/src/app/app.module.ts +326 -0
  122. package/src/app/core/about/about.modal.html +140 -0
  123. package/src/app/core/about/about.modal.scss +23 -0
  124. package/src/app/core/about/about.modal.ts +71 -0
  125. package/src/app/core/about/about.module.ts +24 -0
  126. package/src/app/core/account/account.module.ts +38 -0
  127. package/src/app/core/account/account.page.html +241 -0
  128. package/src/app/core/account/account.page.scss +21 -0
  129. package/src/app/core/account/account.page.ts +366 -0
  130. package/src/app/core/account/new-token.modal.html +120 -0
  131. package/src/app/core/account/new-token.modal.ts +138 -0
  132. package/src/app/core/account/token.table.html +177 -0
  133. package/src/app/core/account/token.table.scss +7 -0
  134. package/src/app/core/account/token.table.ts +141 -0
  135. package/src/app/core/auth/auth.form.html +77 -0
  136. package/src/app/core/auth/auth.form.scss +1 -0
  137. package/src/app/core/auth/auth.form.ts +145 -0
  138. package/src/app/core/auth/auth.modal.html +57 -0
  139. package/src/app/core/auth/auth.modal.scss +1 -0
  140. package/src/app/core/auth/auth.modal.ts +80 -0
  141. package/src/app/core/auth/auth.module.ts +33 -0
  142. package/src/app/core/core.module.ts +100 -0
  143. package/src/app/core/core.testing.module.ts +64 -0
  144. package/src/app/core/form/buttons/form-buttons-bar.component.html +59 -0
  145. package/src/app/core/form/buttons/form-buttons-bar.component.scss +14 -0
  146. package/src/app/core/form/buttons/form-buttons-bar.component.ts +70 -0
  147. package/src/app/core/form/buttons/form-buttons-bar.module.ts +24 -0
  148. package/src/app/core/form/entity/editor.class.ts +803 -0
  149. package/src/app/core/form/entity/entity-editor-modal.class.ts +537 -0
  150. package/src/app/core/form/entity/entity-editor.class.ts +885 -0
  151. package/src/app/core/form/entity/entity-metadata.component.html +53 -0
  152. package/src/app/core/form/entity/entity-metadata.component.scss +28 -0
  153. package/src/app/core/form/entity/entity-metadata.component.ts +19 -0
  154. package/src/app/core/form/entity/entity.module.ts +25 -0
  155. package/src/app/core/form/form.class.ts +401 -0
  156. package/src/app/core/form/form.module.ts +37 -0
  157. package/src/app/core/form/form.utils.ts +639 -0
  158. package/src/app/core/form/list/list.form.html +67 -0
  159. package/src/app/core/form/list/list.form.scss +40 -0
  160. package/src/app/core/form/list/list.form.ts +278 -0
  161. package/src/app/core/form/list/list.module.ts +25 -0
  162. package/src/app/core/form/properties/properties.form.html +129 -0
  163. package/src/app/core/form/properties/properties.form.ts +147 -0
  164. package/src/app/core/form/properties/properties.module.ts +30 -0
  165. package/src/app/core/form/properties/properties.table.html +219 -0
  166. package/src/app/core/form/properties/properties.table.scss +0 -0
  167. package/src/app/core/form/properties/properties.table.ts +291 -0
  168. package/src/app/core/form/properties/property.validator.ts +22 -0
  169. package/src/app/core/form/properties/testing/properties-form.test.html +21 -0
  170. package/src/app/core/form/properties/testing/properties-form.test.ts +102 -0
  171. package/src/app/core/form/properties/testing/properties-form.testing.module.ts +25 -0
  172. package/src/app/core/form/text-popover/testing/text-popover.testing.html +45 -0
  173. package/src/app/core/form/text-popover/testing/text-popover.testing.module.ts +32 -0
  174. package/src/app/core/form/text-popover/testing/text-popover.testing.ts +77 -0
  175. package/src/app/core/form/text-popover/text-form.component.html +44 -0
  176. package/src/app/core/form/text-popover/text-form.component.scss +8 -0
  177. package/src/app/core/form/text-popover/text-form.component.ts +65 -0
  178. package/src/app/core/form/text-popover/text-popover.component.html +86 -0
  179. package/src/app/core/form/text-popover/text-popover.component.scss +7 -0
  180. package/src/app/core/form/text-popover/text-popover.component.ts +165 -0
  181. package/src/app/core/form/text-popover/text-popover.module.ts +27 -0
  182. package/src/app/core/graphql/graphql.module.ts +17 -0
  183. package/src/app/core/graphql/graphql.service.ts +969 -0
  184. package/src/app/core/graphql/graphql.utils.ts +167 -0
  185. package/src/app/core/home/home.html +211 -0
  186. package/src/app/core/home/home.module.ts +32 -0
  187. package/src/app/core/home/home.scss +242 -0
  188. package/src/app/core/home/home.ts +298 -0
  189. package/src/app/core/icon/icon.component.html +15 -0
  190. package/src/app/core/icon/icon.component.ts +23 -0
  191. package/src/app/core/icon/icon.module.ts +22 -0
  192. package/src/app/core/install/install-upgrade-card.component.html +144 -0
  193. package/src/app/core/install/install-upgrade-card.component.scss +4 -0
  194. package/src/app/core/install/install-upgrade-card.component.ts +412 -0
  195. package/src/app/core/install/install-upgrade-card.module.ts +23 -0
  196. package/src/app/core/menu/menu.component.html +135 -0
  197. package/src/app/core/menu/menu.component.scss +225 -0
  198. package/src/app/core/menu/menu.component.ts +352 -0
  199. package/src/app/core/menu/menu.model.ts +64 -0
  200. package/src/app/core/menu/menu.module.ts +27 -0
  201. package/src/app/core/menu/menu.service.ts +62 -0
  202. package/src/app/core/offline/update-offline-mode-card.component.html +45 -0
  203. package/src/app/core/offline/update-offline-mode-card.component.scss +4 -0
  204. package/src/app/core/offline/update-offline-mode-card.component.ts +28 -0
  205. package/src/app/core/offline/update-offline-mode-card.module.ts +24 -0
  206. package/src/app/core/peer/select-peer.modal.html +123 -0
  207. package/src/app/core/peer/select-peer.modal.scss +20 -0
  208. package/src/app/core/peer/select-peer.modal.ts +197 -0
  209. package/src/app/core/peer/select-peer.module.ts +28 -0
  210. package/src/app/core/register/register-confirm.page.html +55 -0
  211. package/src/app/core/register/register-confirm.page.scss +121 -0
  212. package/src/app/core/register/register-confirm.page.ts +94 -0
  213. package/src/app/core/register/register.form.html +125 -0
  214. package/src/app/core/register/register.form.scss +10 -0
  215. package/src/app/core/register/register.form.ts +213 -0
  216. package/src/app/core/register/register.modal.html +70 -0
  217. package/src/app/core/register/register.modal.ts +52 -0
  218. package/src/app/core/register/register.module.ts +31 -0
  219. package/src/app/core/services/account.service.ts +1431 -0
  220. package/src/app/core/services/auth-guard.service.ts +70 -0
  221. package/src/app/core/services/base-entity-service.class.ts +598 -0
  222. package/src/app/core/services/base-graphql-service.class.ts +298 -0
  223. package/src/app/core/services/base58.ts +83 -0
  224. package/src/app/core/services/config/account.config.ts +35 -0
  225. package/src/app/core/services/config/core.config.ts +180 -0
  226. package/src/app/core/services/config.service.ts +414 -0
  227. package/src/app/core/services/crypto.service.ts +126 -0
  228. package/src/app/core/services/errors.ts +67 -0
  229. package/src/app/core/services/local-settings.service.spec.ts +32 -0
  230. package/src/app/core/services/local-settings.service.ts +548 -0
  231. package/src/app/core/services/model/account.model.ts +141 -0
  232. package/src/app/core/services/model/config.model.ts +122 -0
  233. package/src/app/core/services/model/department.model.ts +34 -0
  234. package/src/app/core/services/model/entity.decorators.ts +112 -0
  235. package/src/app/core/services/model/entity.model.ts +326 -0
  236. package/src/app/core/services/model/filter.model.ts +139 -0
  237. package/src/app/core/services/model/history.model.ts +25 -0
  238. package/src/app/core/services/model/model.enum.ts +11 -0
  239. package/src/app/core/services/model/peer.model.ts +86 -0
  240. package/src/app/core/services/model/person.model.ts +112 -0
  241. package/src/app/core/services/model/referential.model.ts +244 -0
  242. package/src/app/core/services/model/settings.model.ts +32 -0
  243. package/src/app/core/services/model/token.model.ts +54 -0
  244. package/src/app/core/services/network.service.spec.ts +49 -0
  245. package/src/app/core/services/network.service.ts +729 -0
  246. package/src/app/core/services/network.types.ts +26 -0
  247. package/src/app/core/services/network.utils.ts +57 -0
  248. package/src/app/core/services/pipes/account.pipes.ts +25 -0
  249. package/src/app/core/services/pipes/department-to-string.pipe.ts +15 -0
  250. package/src/app/core/services/pipes/person-to-string.pipe.ts +15 -0
  251. package/src/app/core/services/pipes/usage-mode.pipes.ts +26 -0
  252. package/src/app/core/services/platform.service.spec.ts +56 -0
  253. package/src/app/core/services/platform.service.ts +605 -0
  254. package/src/app/core/services/storage/entities-storage.service.ts +542 -0
  255. package/src/app/core/services/storage/entity-store.class.ts +598 -0
  256. package/src/app/core/services/testing/referential-filter.model.ts +28 -0
  257. package/src/app/core/services/testing/referential.validator.ts +57 -0
  258. package/src/app/core/services/validator/account.validator.ts +58 -0
  259. package/src/app/core/services/validator/base.validator.class.ts +54 -0
  260. package/src/app/core/services/validator/local-settings.validator.ts +72 -0
  261. package/src/app/core/services/validator/user-settings.validator.ts +25 -0
  262. package/src/app/core/services/validator/user-token.validator.ts +55 -0
  263. package/src/app/core/settings/settings.module.ts +24 -0
  264. package/src/app/core/settings/settings.page.html +264 -0
  265. package/src/app/core/settings/settings.page.ts +365 -0
  266. package/src/app/core/table/actions-column.component.html +91 -0
  267. package/src/app/core/table/actions-column.component.ts +70 -0
  268. package/src/app/core/table/async-table.class.ts +1934 -0
  269. package/src/app/core/table/entities-async-table-datasource.class.ts +482 -0
  270. package/src/app/core/table/entities-table-datasource.class.ts +496 -0
  271. package/src/app/core/table/memory-table.class.ts +65 -0
  272. package/src/app/core/table/table-select-columns.component.html +58 -0
  273. package/src/app/core/table/table-select-columns.component.ts +50 -0
  274. package/src/app/core/table/table.class.ts +1973 -0
  275. package/src/app/core/table/table.model.ts +35 -0
  276. package/src/app/core/table/table.module.ts +26 -0
  277. package/src/app/core/table/table.utils.ts +38 -0
  278. package/src/app/core/table/testing/multi-table.testing.ts +261 -0
  279. package/src/app/core/table/testing/table-validator.service.ts +25 -0
  280. package/src/app/core/table/testing/table.testing.html +396 -0
  281. package/src/app/core/table/testing/table.testing.module.ts +25 -0
  282. package/src/app/core/table/testing/table.testing.scss +23 -0
  283. package/src/app/core/table/testing/table.testing.ts +292 -0
  284. package/src/app/shared/alerts.ts +292 -0
  285. package/src/app/shared/audio/audio.testing.html +33 -0
  286. package/src/app/shared/audio/audio.testing.module.ts +32 -0
  287. package/src/app/shared/audio/audio.testing.ts +31 -0
  288. package/src/app/shared/audio/audio.ts +278 -0
  289. package/src/app/shared/base64.utils.ts +66 -0
  290. package/src/app/shared/capacitor/keyboard.ts +40 -0
  291. package/src/app/shared/capacitor/plugins.ts +12 -0
  292. package/src/app/shared/constants.ts +12 -0
  293. package/src/app/shared/dates.ts +163 -0
  294. package/src/app/shared/debug/debug-service.class.ts +8 -0
  295. package/src/app/shared/debug/debug.component.html +13 -0
  296. package/src/app/shared/debug/debug.component.scss +24 -0
  297. package/src/app/shared/debug/debug.component.spec.ts +25 -0
  298. package/src/app/shared/debug/debug.component.ts +27 -0
  299. package/src/app/shared/debug/debug.module.ts +28 -0
  300. package/src/app/shared/directives/autofocus.directive.ts +109 -0
  301. package/src/app/shared/directives/autotitle.directive.ts +24 -0
  302. package/src/app/shared/directives/directives.module.ts +29 -0
  303. package/src/app/shared/directives/drag-and-drop.directive.ts +47 -0
  304. package/src/app/shared/directives/ng-var.directive.ts +32 -0
  305. package/src/app/shared/directives/resizable/resizable.component.ts +47 -0
  306. package/src/app/shared/directives/resizable/resizable.directive.ts +43 -0
  307. package/src/app/shared/directives/resizable/resizable.module.ts +9 -0
  308. package/src/app/shared/directives/resizable/resizable.style.scss +44 -0
  309. package/src/app/shared/directives/resizable/resizable.template.html +6 -0
  310. package/src/app/shared/events.ts +96 -0
  311. package/src/app/shared/file/csv.utils.ts +94 -0
  312. package/src/app/shared/file/file.service.ts +132 -0
  313. package/src/app/shared/file/file.utils.ts +138 -0
  314. package/src/app/shared/file/images.utils.ts +198 -0
  315. package/src/app/shared/file/json.utils.ts +73 -0
  316. package/src/app/shared/file/uri.utils.ts +25 -0
  317. package/src/app/shared/focusable.ts +10 -0
  318. package/src/app/shared/form/field.component.html +261 -0
  319. package/src/app/shared/form/field.component.scss +7 -0
  320. package/src/app/shared/form/field.component.ts +318 -0
  321. package/src/app/shared/form/field.model.ts +64 -0
  322. package/src/app/shared/form/loading-spinner.ts +16 -0
  323. package/src/app/shared/forms.ts +458 -0
  324. package/src/app/shared/functions.ts +492 -0
  325. package/src/app/shared/geolocation/geolocation.utils.ts +101 -0
  326. package/src/app/shared/gesture/gesture-config.ts +45 -0
  327. package/src/app/shared/gesture/hammer.utils.ts +14 -0
  328. package/src/app/shared/graph/colors.utils.ts +74 -0
  329. package/src/app/shared/graph/graph-colors.ts +295 -0
  330. package/src/app/shared/guard/component-dirty.guard.ts +70 -0
  331. package/src/app/shared/help/help.modal.html +42 -0
  332. package/src/app/shared/help/help.modal.ts +61 -0
  333. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.html +11 -0
  334. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.scss +39 -0
  335. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.ts +16 -0
  336. package/src/app/shared/hotkeys/hotkeys.service.ts +89 -0
  337. package/src/app/shared/hotkeys/shared-hotkeys.module.ts +27 -0
  338. package/src/app/shared/http/http.utils.ts +89 -0
  339. package/src/app/shared/image/gallery/image-gallery.component.html +231 -0
  340. package/src/app/shared/image/gallery/image-gallery.component.scss +196 -0
  341. package/src/app/shared/image/gallery/image-gallery.component.ts +389 -0
  342. package/src/app/shared/image/gallery/image-gallery.module.ts +34 -0
  343. package/src/app/shared/image/gallery/testing/gallegry.model.testing.ts +27 -0
  344. package/src/app/shared/image/gallery/testing/gallery.service.testing.ts +102 -0
  345. package/src/app/shared/image/gallery/testing/gallery.testing.html +15 -0
  346. package/src/app/shared/image/gallery/testing/gallery.testing.module.ts +39 -0
  347. package/src/app/shared/image/gallery/testing/gallery.testing.ts +38 -0
  348. package/src/app/shared/image/image.model.ts +6 -0
  349. package/src/app/shared/image/image.module.ts +16 -0
  350. package/src/app/shared/image/image.service.ts +94 -0
  351. package/src/app/shared/image/image.testing.module.ts +23 -0
  352. package/src/app/shared/inputs.ts +282 -0
  353. package/src/app/shared/interceptors/progess.interceptor.ts +25 -0
  354. package/src/app/shared/logging/log-level.model.ts +53 -0
  355. package/src/app/shared/logging/logger.model.ts +120 -0
  356. package/src/app/shared/logging/logging-service.class.ts +134 -0
  357. package/src/app/shared/logging/logging-service.config.ts +29 -0
  358. package/src/app/shared/logging/logging-service.module.ts +22 -0
  359. package/src/app/shared/material/autocomplete/material.autocomplete.config.ts +83 -0
  360. package/src/app/shared/material/autocomplete/material.autocomplete.html +262 -0
  361. package/src/app/shared/material/autocomplete/material.autocomplete.module.ts +45 -0
  362. package/src/app/shared/material/autocomplete/material.autocomplete.scss +21 -0
  363. package/src/app/shared/material/autocomplete/material.autocomplete.ts +1022 -0
  364. package/src/app/shared/material/autocomplete/material.autocomplete.utils.ts +20 -0
  365. package/src/app/shared/material/autocomplete/testing/autocomplete.test.html +876 -0
  366. package/src/app/shared/material/autocomplete/testing/autocomplete.test.spec.ts +38 -0
  367. package/src/app/shared/material/autocomplete/testing/autocomplete.test.ts +247 -0
  368. package/src/app/shared/material/badge/badge.directive.ts +164 -0
  369. package/src/app/shared/material/badge/badge.module.ts +22 -0
  370. package/src/app/shared/material/badge/badge.test.html +261 -0
  371. package/src/app/shared/material/badge/badge.test.ts +36 -0
  372. package/src/app/shared/material/boolean/boolean.module.ts +40 -0
  373. package/src/app/shared/material/boolean/material.boolean.html +155 -0
  374. package/src/app/shared/material/boolean/material.boolean.scss +34 -0
  375. package/src/app/shared/material/boolean/material.boolean.ts +239 -0
  376. package/src/app/shared/material/chips/chips.module.ts +44 -0
  377. package/src/app/shared/material/chips/material.chips.html +146 -0
  378. package/src/app/shared/material/chips/material.chips.scss +65 -0
  379. package/src/app/shared/material/chips/material.chips.ts +768 -0
  380. package/src/app/shared/material/chips/testing/chips.test.html +137 -0
  381. package/src/app/shared/material/chips/testing/chips.test.ts +175 -0
  382. package/src/app/shared/material/datetime/datetime.module.ts +52 -0
  383. package/src/app/shared/material/datetime/material.date.html +132 -0
  384. package/src/app/shared/material/datetime/material.date.scss +17 -0
  385. package/src/app/shared/material/datetime/material.date.ts +408 -0
  386. package/src/app/shared/material/datetime/material.dateshort.html +134 -0
  387. package/src/app/shared/material/datetime/material.dateshort.scss +23 -0
  388. package/src/app/shared/material/datetime/material.dateshort.ts +422 -0
  389. package/src/app/shared/material/datetime/material.datetime.html +224 -0
  390. package/src/app/shared/material/datetime/material.datetime.scss +90 -0
  391. package/src/app/shared/material/datetime/material.datetime.ts +575 -0
  392. package/src/app/shared/material/datetime/testing/mat-date-time.test.html +354 -0
  393. package/src/app/shared/material/datetime/testing/mat-date-time.test.ts +134 -0
  394. package/src/app/shared/material/datetime/testing/mat-date.test.html +418 -0
  395. package/src/app/shared/material/datetime/testing/mat-date.test.ts +135 -0
  396. package/src/app/shared/material/datetime/testing/mat-dateshort.test.html +370 -0
  397. package/src/app/shared/material/datetime/testing/mat-dateshort.test.ts +127 -0
  398. package/src/app/shared/material/duration/duration.module.ts +39 -0
  399. package/src/app/shared/material/duration/duration.utils.ts +41 -0
  400. package/src/app/shared/material/duration/material.duration.html +44 -0
  401. package/src/app/shared/material/duration/material.duration.scss +28 -0
  402. package/src/app/shared/material/duration/material.duration.ts +294 -0
  403. package/src/app/shared/material/latlong/latlong.utils.ts +300 -0
  404. package/src/app/shared/material/latlong/material.latlong.html +127 -0
  405. package/src/app/shared/material/latlong/material.latlong.module.ts +40 -0
  406. package/src/app/shared/material/latlong/material.latlong.scss +48 -0
  407. package/src/app/shared/material/latlong/material.latlong.ts +421 -0
  408. package/src/app/shared/material/latlong/testing/latlong.test.html +341 -0
  409. package/src/app/shared/material/latlong/testing/latlong.test.ts +121 -0
  410. package/src/app/shared/material/material.animations.ts +129 -0
  411. package/src/app/shared/material/material.module.ts +94 -0
  412. package/src/app/shared/material/material.testing.module.ts +135 -0
  413. package/src/app/shared/material/memory/memory.utils.ts +54 -0
  414. package/src/app/shared/material/numpad/numpad.animation.ts +1 -0
  415. package/src/app/shared/material/numpad/numpad.append-to-input.directive.ts +109 -0
  416. package/src/app/shared/material/numpad/numpad.component.ts +78 -0
  417. package/src/app/shared/material/numpad/numpad.container.html +32 -0
  418. package/src/app/shared/material/numpad/numpad.container.scss +50 -0
  419. package/src/app/shared/material/numpad/numpad.container.ts +176 -0
  420. package/src/app/shared/material/numpad/numpad.content.html +13 -0
  421. package/src/app/shared/material/numpad/numpad.content.ts +10 -0
  422. package/src/app/shared/material/numpad/numpad.directive.ts +173 -0
  423. package/src/app/shared/material/numpad/numpad.dom-service.ts +46 -0
  424. package/src/app/shared/material/numpad/numpad.model.ts +55 -0
  425. package/src/app/shared/material/numpad/numpad.module.ts +38 -0
  426. package/src/app/shared/material/numpad/testing/numpad.test.html +146 -0
  427. package/src/app/shared/material/numpad/testing/numpad.test.ts +55 -0
  428. package/src/app/shared/material/paginator/material.paginator-i18n.ts +49 -0
  429. package/src/app/shared/material/stepper/material.stepper-i18n.ts +18 -0
  430. package/src/app/shared/material/swipe/material.swipe.html +63 -0
  431. package/src/app/shared/material/swipe/material.swipe.scss +39 -0
  432. package/src/app/shared/material/swipe/material.swipe.ts +350 -0
  433. package/src/app/shared/material/swipe/swipe.module.ts +33 -0
  434. package/src/app/shared/material/swipe/testing/swipe.test.html +128 -0
  435. package/src/app/shared/material/swipe/testing/swipe.test.ts +81 -0
  436. package/src/app/shared/modules.ts +11 -0
  437. package/src/app/shared/observables.ts +132 -0
  438. package/src/app/shared/pipes/arrays.pipe.ts +111 -0
  439. package/src/app/shared/pipes/colors.pipe.ts +19 -0
  440. package/src/app/shared/pipes/date-diff-duration.pipe.ts +48 -0
  441. package/src/app/shared/pipes/date-format.pipe.ts +78 -0
  442. package/src/app/shared/pipes/date-from-now.pipe.ts +20 -0
  443. package/src/app/shared/pipes/duration.pipe.spec.ts +51 -0
  444. package/src/app/shared/pipes/duration.pipe.ts +34 -0
  445. package/src/app/shared/pipes/file-size.pipe.ts +58 -0
  446. package/src/app/shared/pipes/form.pipes.ts +204 -0
  447. package/src/app/shared/pipes/highlight.pipe.ts +37 -0
  448. package/src/app/shared/pipes/latlong-format.pipe.ts +30 -0
  449. package/src/app/shared/pipes/maps.pipe.ts +39 -0
  450. package/src/app/shared/pipes/math.pipes.ts +39 -0
  451. package/src/app/shared/pipes/ng-init.pipe.ts +14 -0
  452. package/src/app/shared/pipes/number-format.pipe.ts +21 -0
  453. package/src/app/shared/pipes/pipes.module.ts +134 -0
  454. package/src/app/shared/pipes/property.pipes.ts +87 -0
  455. package/src/app/shared/pipes/string.pipes.ts +85 -0
  456. package/src/app/shared/pipes/translate-context.pipe.ts +33 -0
  457. package/src/app/shared/pipes/types.pipes.ts +31 -0
  458. package/src/app/shared/platforms.ts +58 -0
  459. package/src/app/shared/services/entity-service.class.ts +127 -0
  460. package/src/app/shared/services/job.utils.ts +121 -0
  461. package/src/app/shared/services/memory-entity-service.class.ts +447 -0
  462. package/src/app/shared/services/progress-bar.service.ts +42 -0
  463. package/src/app/shared/services/startable-observable-service.class.ts +137 -0
  464. package/src/app/shared/services/startable-service.class.ts +131 -0
  465. package/src/app/shared/services/storage.utils.ts +47 -0
  466. package/src/app/shared/services/translate-context.service.ts +116 -0
  467. package/src/app/shared/services/validator-service.class.ts +14 -0
  468. package/src/app/shared/services.ts +91 -0
  469. package/src/app/shared/shared-routing.module.ts +66 -0
  470. package/src/app/shared/shared.module.spec.ts +13 -0
  471. package/src/app/shared/shared.module.ts +146 -0
  472. package/src/app/shared/shared.testing.module.ts +50 -0
  473. package/src/app/shared/storage/storage-explorer.component.html +175 -0
  474. package/src/app/shared/storage/storage-explorer.component.scss +39 -0
  475. package/src/app/shared/storage/storage-explorer.component.spec.ts +24 -0
  476. package/src/app/shared/storage/storage-explorer.component.ts +292 -0
  477. package/src/app/shared/storage/storage-explorer.module.ts +44 -0
  478. package/src/app/shared/storage/storage.service.ts +133 -0
  479. package/src/app/shared/storage/storage.utils.ts +25 -0
  480. package/src/app/shared/testing/observable.test.html +53 -0
  481. package/src/app/shared/testing/observable.test.scss +3 -0
  482. package/src/app/shared/testing/observable.test.ts +117 -0
  483. package/src/app/shared/testing/tests.page.html +30 -0
  484. package/src/app/shared/testing/tests.page.ts +34 -0
  485. package/src/app/shared/toast/toast.testing.html +42 -0
  486. package/src/app/shared/toast/toast.testing.module.ts +32 -0
  487. package/src/app/shared/toast/toast.testing.ts +58 -0
  488. package/src/app/shared/toast/toasts.ts +183 -0
  489. package/src/app/shared/toolbar/modal-toolbar.html +32 -0
  490. package/src/app/shared/toolbar/modal-toolbar.scss +0 -0
  491. package/src/app/shared/toolbar/modal-toolbar.ts +63 -0
  492. package/src/app/shared/toolbar/toolbar.html +71 -0
  493. package/src/app/shared/toolbar/toolbar.module.ts +35 -0
  494. package/src/app/shared/toolbar/toolbar.scss +0 -0
  495. package/src/app/shared/toolbar/toolbar.ts +254 -0
  496. package/src/app/shared/types.ts +31 -0
  497. package/src/app/shared/upload-file/testing/upload-file.testing.html +25 -0
  498. package/src/app/shared/upload-file/testing/upload-file.testing.module.ts +32 -0
  499. package/src/app/shared/upload-file/testing/upload-file.testing.ts +68 -0
  500. package/src/app/shared/upload-file/upload-file-popover.component.html +43 -0
  501. package/src/app/shared/upload-file/upload-file-popover.component.scss +6 -0
  502. package/src/app/shared/upload-file/upload-file-popover.component.ts +115 -0
  503. package/src/app/shared/upload-file/upload-file.component.html +46 -0
  504. package/src/app/shared/upload-file/upload-file.component.scss +130 -0
  505. package/src/app/shared/upload-file/upload-file.component.ts +218 -0
  506. package/src/app/shared/upload-file/upload-file.model.ts +41 -0
  507. package/src/app/shared/validator/form-error-adapter.class.ts +123 -0
  508. package/src/app/shared/validator/validators.ts +639 -0
  509. package/src/app/shared/version/versions.ts +91 -0
  510. package/src/app/social/job/job.module.ts +26 -0
  511. package/src/app/social/job/progression/job-progression.component.html +22 -0
  512. package/src/app/social/job/progression/job-progression.component.scss +15 -0
  513. package/src/app/social/job/progression/job-progression.component.ts +17 -0
  514. package/src/app/social/job/progression/job-progression.icon.html +28 -0
  515. package/src/app/social/job/progression/job-progression.icon.scss +5 -0
  516. package/src/app/social/job/progression/job-progression.icon.ts +238 -0
  517. package/src/app/social/job/progression/job-progression.list.html +21 -0
  518. package/src/app/social/job/progression/job-progression.list.scss +17 -0
  519. package/src/app/social/job/progression/job-progression.list.ts +49 -0
  520. package/src/app/social/job/progression/job-progression.model.ts +28 -0
  521. package/src/app/social/job/progression/job-progression.service.ts +86 -0
  522. package/src/app/social/job/testing/job-progression.testing.html +20 -0
  523. package/src/app/social/job/testing/job-progression.testing.service.ts +60 -0
  524. package/src/app/social/job/testing/job-progression.testing.ts +51 -0
  525. package/src/app/social/job/testing/job.testing.module.ts +22 -0
  526. package/src/app/social/message/message.form.html +60 -0
  527. package/src/app/social/message/message.form.scss +6 -0
  528. package/src/app/social/message/message.form.ts +79 -0
  529. package/src/app/social/message/message.modal.html +65 -0
  530. package/src/app/social/message/message.modal.ts +118 -0
  531. package/src/app/social/message/message.model.ts +81 -0
  532. package/src/app/social/message/message.module.ts +22 -0
  533. package/src/app/social/message/message.service.ts +88 -0
  534. package/src/app/social/social.errors.ts +11 -0
  535. package/src/app/social/social.module.ts +36 -0
  536. package/src/app/social/social.testing.module.ts +40 -0
  537. package/src/app/social/user-event/notification/user-event-notification.icon.html +16 -0
  538. package/src/app/social/user-event/notification/user-event-notification.icon.ts +108 -0
  539. package/src/app/social/user-event/notification/user-event-notification.list.html +135 -0
  540. package/src/app/social/user-event/notification/user-event-notification.list.scss +73 -0
  541. package/src/app/social/user-event/notification/user-event-notification.list.ts +287 -0
  542. package/src/app/social/user-event/testing/user-event.testing.html +27 -0
  543. package/src/app/social/user-event/testing/user-event.testing.model.ts +146 -0
  544. package/src/app/social/user-event/testing/user-event.testing.module.ts +22 -0
  545. package/src/app/social/user-event/testing/user-event.testing.service.ts +141 -0
  546. package/src/app/social/user-event/testing/user-event.testing.ts +253 -0
  547. package/src/app/social/user-event/user-event.model.ts +73 -0
  548. package/src/app/social/user-event/user-event.module.ts +25 -0
  549. package/src/app/social/user-event/user-event.service.ts +679 -0
  550. package/src/browserslist +9 -0
  551. package/src/environments/environment.class.ts +83 -0
  552. package/src/environments/environment.prod.ts +47 -0
  553. package/src/environments/environment.test.ts +90 -0
  554. package/src/environments/environment.ts +108 -0
  555. package/src/favicon.ico +0 -0
  556. package/src/global.scss +27 -0
  557. package/src/index.html +80 -0
  558. package/src/main.ts +17 -0
  559. package/src/polyfills.ts +68 -0
  560. package/src/schema.graphql +3112 -0
  561. package/src/service-worker.js +31 -0
  562. package/src/zone-flags.ts +31 -0
  563. package/tsconfig.app.json +15 -0
  564. package/tsconfig.json +47 -0
  565. package/tsconfig.spec.json +19 -0
  566. package/esm2020/public_api.mjs +0 -313
  567. package/esm2020/src/app/admin/admin-routing.module.mjs +0 -41
  568. package/esm2020/src/app/admin/admin.module.mjs +0 -34
  569. package/esm2020/src/app/admin/services/filter/person.filter.mjs +0 -59
  570. package/esm2020/src/app/admin/services/person.service.mjs +0 -161
  571. package/esm2020/src/app/admin/services/validator/person.validator.mjs +0 -34
  572. package/esm2020/src/app/admin/users/users.mjs +0 -234
  573. package/esm2020/src/app/admin/users/users.module.mjs +0 -54
  574. package/esm2020/src/app/core/about/about.modal.mjs +0 -71
  575. package/esm2020/src/app/core/about/about.module.mjs +0 -34
  576. package/esm2020/src/app/core/account/account.module.mjs +0 -61
  577. package/esm2020/src/app/core/account/account.page.mjs +0 -316
  578. package/esm2020/src/app/core/account/new-token.modal.mjs +0 -115
  579. package/esm2020/src/app/core/account/token.table.mjs +0 -137
  580. package/esm2020/src/app/core/auth/auth.form.mjs +0 -131
  581. package/esm2020/src/app/core/auth/auth.modal.mjs +0 -72
  582. package/esm2020/src/app/core/auth/auth.module.mjs +0 -47
  583. package/esm2020/src/app/core/core.module.mjs +0 -184
  584. package/esm2020/src/app/core/core.testing.module.mjs +0 -86
  585. package/esm2020/src/app/core/form/buttons/form-buttons-bar.component.mjs +0 -71
  586. package/esm2020/src/app/core/form/buttons/form-buttons-bar.module.mjs +0 -35
  587. package/esm2020/src/app/core/form/entity/editor.class.mjs +0 -679
  588. package/esm2020/src/app/core/form/entity/entity-editor-modal.class.mjs +0 -421
  589. package/esm2020/src/app/core/form/entity/entity-editor.class.mjs +0 -687
  590. package/esm2020/src/app/core/form/entity/entity-metadata.component.mjs +0 -25
  591. package/esm2020/src/app/core/form/entity/entity.module.mjs +0 -38
  592. package/esm2020/src/app/core/form/form.class.mjs +0 -340
  593. package/esm2020/src/app/core/form/form.module.mjs +0 -66
  594. package/esm2020/src/app/core/form/form.utils.mjs +0 -473
  595. package/esm2020/src/app/core/form/list/list.form.mjs +0 -222
  596. package/esm2020/src/app/core/form/list/list.module.mjs +0 -35
  597. package/esm2020/src/app/core/form/properties/properties.form.mjs +0 -132
  598. package/esm2020/src/app/core/form/properties/properties.module.mjs +0 -43
  599. package/esm2020/src/app/core/form/properties/properties.table.mjs +0 -264
  600. package/esm2020/src/app/core/form/properties/property.validator.mjs +0 -23
  601. package/esm2020/src/app/core/form/properties/testing/properties-form.test.mjs +0 -90
  602. package/esm2020/src/app/core/form/properties/testing/properties-form.testing.module.mjs +0 -39
  603. package/esm2020/src/app/core/form/text-popover/testing/text-popover.testing.mjs +0 -70
  604. package/esm2020/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +0 -45
  605. package/esm2020/src/app/core/form/text-popover/text-form.component.mjs +0 -89
  606. package/esm2020/src/app/core/form/text-popover/text-popover.component.mjs +0 -146
  607. package/esm2020/src/app/core/form/text-popover/text-popover.module.mjs +0 -40
  608. package/esm2020/src/app/core/graphql/graphql.module.mjs +0 -22
  609. package/esm2020/src/app/core/graphql/graphql.service.mjs +0 -762
  610. package/esm2020/src/app/core/graphql/graphql.utils.mjs +0 -117
  611. package/esm2020/src/app/core/home/home.mjs +0 -257
  612. package/esm2020/src/app/core/home/home.module.mjs +0 -48
  613. package/esm2020/src/app/core/icon/icon.component.mjs +0 -41
  614. package/esm2020/src/app/core/icon/icon.module.mjs +0 -29
  615. package/esm2020/src/app/core/install/install-upgrade-card.component.mjs +0 -343
  616. package/esm2020/src/app/core/install/install-upgrade-card.module.mjs +0 -35
  617. package/esm2020/src/app/core/menu/menu.component.mjs +0 -329
  618. package/esm2020/src/app/core/menu/menu.model.mjs +0 -35
  619. package/esm2020/src/app/core/menu/menu.module.mjs +0 -44
  620. package/esm2020/src/app/core/menu/menu.service.mjs +0 -55
  621. package/esm2020/src/app/core/offline/update-offline-mode-card.component.mjs +0 -27
  622. package/esm2020/src/app/core/offline/update-offline-mode-card.module.mjs +0 -35
  623. package/esm2020/src/app/core/peer/select-peer.modal.mjs +0 -182
  624. package/esm2020/src/app/core/peer/select-peer.module.mjs +0 -42
  625. package/esm2020/src/app/core/register/register-confirm.page.mjs +0 -81
  626. package/esm2020/src/app/core/register/register.form.mjs +0 -181
  627. package/esm2020/src/app/core/register/register.modal.mjs +0 -52
  628. package/esm2020/src/app/core/register/register.module.mjs +0 -44
  629. package/esm2020/src/app/core/services/account.service.mjs +0 -1212
  630. package/esm2020/src/app/core/services/auth-guard.service.mjs +0 -71
  631. package/esm2020/src/app/core/services/base-entity-service.class.mjs +0 -444
  632. package/esm2020/src/app/core/services/base-graphql-service.class.mjs +0 -219
  633. package/esm2020/src/app/core/services/base58.mjs +0 -78
  634. package/esm2020/src/app/core/services/config/core.config.mjs +0 -175
  635. package/esm2020/src/app/core/services/config.service.mjs +0 -354
  636. package/esm2020/src/app/core/services/crypto.service.mjs +0 -114
  637. package/esm2020/src/app/core/services/errors.mjs +0 -50
  638. package/esm2020/src/app/core/services/local-settings.service.mjs +0 -449
  639. package/esm2020/src/app/core/services/model/account.model.mjs +0 -122
  640. package/esm2020/src/app/core/services/model/config.model.mjs +0 -92
  641. package/esm2020/src/app/core/services/model/department.model.mjs +0 -30
  642. package/esm2020/src/app/core/services/model/entity.decorators.mjs +0 -97
  643. package/esm2020/src/app/core/services/model/entity.model.mjs +0 -240
  644. package/esm2020/src/app/core/services/model/filter.model.mjs +0 -94
  645. package/esm2020/src/app/core/services/model/history.model.mjs +0 -2
  646. package/esm2020/src/app/core/services/model/model.enum.mjs +0 -11
  647. package/esm2020/src/app/core/services/model/peer.model.mjs +0 -68
  648. package/esm2020/src/app/core/services/model/person.model.mjs +0 -83
  649. package/esm2020/src/app/core/services/model/referential.model.mjs +0 -164
  650. package/esm2020/src/app/core/services/model/settings.model.mjs +0 -3
  651. package/esm2020/src/app/core/services/model/token.model.mjs +0 -48
  652. package/esm2020/src/app/core/services/network.service.mjs +0 -589
  653. package/esm2020/src/app/core/services/network.types.mjs +0 -20
  654. package/esm2020/src/app/core/services/network.utils.mjs +0 -15
  655. package/esm2020/src/app/core/services/pipes/account.pipes.mjs +0 -38
  656. package/esm2020/src/app/core/services/pipes/department-to-string.pipe.mjs +0 -23
  657. package/esm2020/src/app/core/services/pipes/person-to-string.pipe.mjs +0 -23
  658. package/esm2020/src/app/core/services/pipes/usage-mode.pipes.mjs +0 -37
  659. package/esm2020/src/app/core/services/platform.service.mjs +0 -525
  660. package/esm2020/src/app/core/services/storage/entities-storage.service.mjs +0 -428
  661. package/esm2020/src/app/core/services/storage/entity-store.class.mjs +0 -449
  662. package/esm2020/src/app/core/services/testing/referential-filter.model.mjs +0 -23
  663. package/esm2020/src/app/core/services/testing/referential.validator.mjs +0 -45
  664. package/esm2020/src/app/core/services/validator/account.validator.mjs +0 -56
  665. package/esm2020/src/app/core/services/validator/base.validator.class.mjs +0 -47
  666. package/esm2020/src/app/core/services/validator/local-settings.validator.mjs +0 -66
  667. package/esm2020/src/app/core/services/validator/user-settings.validator.mjs +0 -27
  668. package/esm2020/src/app/core/services/validator/user-token.validator.mjs +0 -52
  669. package/esm2020/src/app/core/settings/settings.module.mjs +0 -34
  670. package/esm2020/src/app/core/settings/settings.page.mjs +0 -312
  671. package/esm2020/src/app/core/table/actions-column.component.mjs +0 -102
  672. package/esm2020/src/app/core/table/async-table.class.mjs +0 -1697
  673. package/esm2020/src/app/core/table/entities-async-table-datasource.class.mjs +0 -384
  674. package/esm2020/src/app/core/table/entities-table-datasource.class.mjs +0 -399
  675. package/esm2020/src/app/core/table/memory-table.class.mjs +0 -53
  676. package/esm2020/src/app/core/table/table-select-columns.component.mjs +0 -43
  677. package/esm2020/src/app/core/table/table.class.mjs +0 -1728
  678. package/esm2020/src/app/core/table/table.model.mjs +0 -12
  679. package/esm2020/src/app/core/table/table.module.mjs +0 -40
  680. package/esm2020/src/app/core/table/table.utils.mjs +0 -30
  681. package/esm2020/src/app/core/table/testing/table-validator.service.mjs +0 -27
  682. package/esm2020/src/app/core/table/testing/table.testing.mjs +0 -280
  683. package/esm2020/src/app/core/table/testing/table.testing.module.mjs +0 -38
  684. package/esm2020/src/app/shared/alerts.mjs +0 -239
  685. package/esm2020/src/app/shared/audio/audio.mjs +0 -248
  686. package/esm2020/src/app/shared/audio/audio.testing.mjs +0 -31
  687. package/esm2020/src/app/shared/audio/audio.testing.module.mjs +0 -45
  688. package/esm2020/src/app/shared/capacitor/keyboard.mjs +0 -40
  689. package/esm2020/src/app/shared/capacitor/plugins.mjs +0 -9
  690. package/esm2020/src/app/shared/constants.mjs +0 -10
  691. package/esm2020/src/app/shared/dates.mjs +0 -148
  692. package/esm2020/src/app/shared/debug/debug-service.class.mjs +0 -3
  693. package/esm2020/src/app/shared/debug/debug.component.mjs +0 -39
  694. package/esm2020/src/app/shared/debug/debug.module.mjs +0 -44
  695. package/esm2020/src/app/shared/directives/autofocus.directive.mjs +0 -92
  696. package/esm2020/src/app/shared/directives/autotitle.directive.mjs +0 -30
  697. package/esm2020/src/app/shared/directives/directives.module.mjs +0 -43
  698. package/esm2020/src/app/shared/directives/drag-and-drop.directive.mjs +0 -53
  699. package/esm2020/src/app/shared/directives/ng-var.directive.mjs +0 -31
  700. package/esm2020/src/app/shared/directives/resizable/resizable.component.mjs +0 -59
  701. package/esm2020/src/app/shared/directives/resizable/resizable.directive.mjs +0 -40
  702. package/esm2020/src/app/shared/directives/resizable/resizable.module.mjs +0 -17
  703. package/esm2020/src/app/shared/events.mjs +0 -64
  704. package/esm2020/src/app/shared/file/csv.utils.mjs +0 -74
  705. package/esm2020/src/app/shared/file/file.service.mjs +0 -117
  706. package/esm2020/src/app/shared/file/file.utils.mjs +0 -113
  707. package/esm2020/src/app/shared/file/images.utils.mjs +0 -161
  708. package/esm2020/src/app/shared/file/json.utils.mjs +0 -51
  709. package/esm2020/src/app/shared/file/uri.utils.mjs +0 -23
  710. package/esm2020/src/app/shared/focusable.mjs +0 -6
  711. package/esm2020/src/app/shared/form/field.component.mjs +0 -307
  712. package/esm2020/src/app/shared/form/field.model.mjs +0 -25
  713. package/esm2020/src/app/shared/form/loading-spinner.mjs +0 -36
  714. package/esm2020/src/app/shared/forms.mjs +0 -391
  715. package/esm2020/src/app/shared/functions.mjs +0 -477
  716. package/esm2020/src/app/shared/geolocation/geolocation.utils.mjs +0 -80
  717. package/esm2020/src/app/shared/gesture/gesture-config.mjs +0 -49
  718. package/esm2020/src/app/shared/gesture/hammer.utils.mjs +0 -2
  719. package/esm2020/src/app/shared/graph/colors.utils.mjs +0 -64
  720. package/esm2020/src/app/shared/graph/graph-colors.mjs +0 -212
  721. package/esm2020/src/app/shared/guard/component-dirty.guard.mjs +0 -57
  722. package/esm2020/src/app/shared/help/help.modal.mjs +0 -53
  723. package/esm2020/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +0 -23
  724. package/esm2020/src/app/shared/hotkeys/hotkeys.service.mjs +0 -84
  725. package/esm2020/src/app/shared/hotkeys/shared-hotkeys.module.mjs +0 -42
  726. package/esm2020/src/app/shared/http/http.utils.mjs +0 -52
  727. package/esm2020/src/app/shared/image/gallery/image-gallery.component.mjs +0 -365
  728. package/esm2020/src/app/shared/image/gallery/image-gallery.module.mjs +0 -59
  729. package/esm2020/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +0 -27
  730. package/esm2020/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +0 -90
  731. package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.mjs +0 -39
  732. package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +0 -56
  733. package/esm2020/src/app/shared/image/image.model.mjs +0 -2
  734. package/esm2020/src/app/shared/image/image.module.mjs +0 -29
  735. package/esm2020/src/app/shared/image/image.service.mjs +0 -98
  736. package/esm2020/src/app/shared/inputs.mjs +0 -231
  737. package/esm2020/src/app/shared/interceptors/progess.interceptor.mjs +0 -27
  738. package/esm2020/src/app/shared/logging/log-level.model.mjs +0 -48
  739. package/esm2020/src/app/shared/logging/logger.model.mjs +0 -47
  740. package/esm2020/src/app/shared/logging/logging-service.class.mjs +0 -121
  741. package/esm2020/src/app/shared/logging/logging-service.config.mjs +0 -2
  742. package/esm2020/src/app/shared/logging/logging-service.module.mjs +0 -30
  743. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +0 -47
  744. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.mjs +0 -916
  745. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +0 -78
  746. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +0 -19
  747. package/esm2020/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +0 -209
  748. package/esm2020/src/app/shared/material/badge/badge.directive.mjs +0 -194
  749. package/esm2020/src/app/shared/material/badge/badge.module.mjs +0 -32
  750. package/esm2020/src/app/shared/material/badge/badge.test.mjs +0 -41
  751. package/esm2020/src/app/shared/material/boolean/boolean.module.mjs +0 -68
  752. package/esm2020/src/app/shared/material/boolean/material.boolean.mjs +0 -253
  753. package/esm2020/src/app/shared/material/chips/chips.module.mjs +0 -76
  754. package/esm2020/src/app/shared/material/chips/material.chips.mjs +0 -697
  755. package/esm2020/src/app/shared/material/chips/testing/chips.test.mjs +0 -143
  756. package/esm2020/src/app/shared/material/datetime/datetime.module.mjs +0 -91
  757. package/esm2020/src/app/shared/material/datetime/material.date.mjs +0 -376
  758. package/esm2020/src/app/shared/material/datetime/material.dateshort.mjs +0 -385
  759. package/esm2020/src/app/shared/material/datetime/material.datetime.mjs +0 -499
  760. package/esm2020/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +0 -108
  761. package/esm2020/src/app/shared/material/datetime/testing/mat-date.test.mjs +0 -110
  762. package/esm2020/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +0 -103
  763. package/esm2020/src/app/shared/material/duration/duration.module.mjs +0 -67
  764. package/esm2020/src/app/shared/material/duration/duration.utils.mjs +0 -36
  765. package/esm2020/src/app/shared/material/duration/material.duration.mjs +0 -257
  766. package/esm2020/src/app/shared/material/latlong/latlong.utils.mjs +0 -266
  767. package/esm2020/src/app/shared/material/latlong/material.latlong.mjs +0 -381
  768. package/esm2020/src/app/shared/material/latlong/material.latlong.module.mjs +0 -67
  769. package/esm2020/src/app/shared/material/latlong/testing/latlong.test.mjs +0 -102
  770. package/esm2020/src/app/shared/material/material.animations.mjs +0 -104
  771. package/esm2020/src/app/shared/material/material.module.mjs +0 -224
  772. package/esm2020/src/app/shared/material/material.testing.module.mjs +0 -168
  773. package/esm2020/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +0 -98
  774. package/esm2020/src/app/shared/material/numpad/numpad.component.mjs +0 -80
  775. package/esm2020/src/app/shared/material/numpad/numpad.container.mjs +0 -190
  776. package/esm2020/src/app/shared/material/numpad/numpad.content.mjs +0 -17
  777. package/esm2020/src/app/shared/material/numpad/numpad.directive.mjs +0 -162
  778. package/esm2020/src/app/shared/material/numpad/numpad.dom-service.mjs +0 -37
  779. package/esm2020/src/app/shared/material/numpad/numpad.model.mjs +0 -15
  780. package/esm2020/src/app/shared/material/numpad/numpad.module.mjs +0 -60
  781. package/esm2020/src/app/shared/material/numpad/testing/numpad.test.mjs +0 -46
  782. package/esm2020/src/app/shared/material/paginator/material.paginator-i18n.mjs +0 -46
  783. package/esm2020/src/app/shared/material/stepper/material.stepper-i18n.mjs +0 -22
  784. package/esm2020/src/app/shared/material/swipe/material.swipe.mjs +0 -344
  785. package/esm2020/src/app/shared/material/swipe/swipe.module.mjs +0 -52
  786. package/esm2020/src/app/shared/material/swipe/testing/swipe.test.mjs +0 -64
  787. package/esm2020/src/app/shared/modules.mjs +0 -11
  788. package/esm2020/src/app/shared/observables.mjs +0 -103
  789. package/esm2020/src/app/shared/pipes/arrays.pipe.mjs +0 -141
  790. package/esm2020/src/app/shared/pipes/colors.pipe.mjs +0 -23
  791. package/esm2020/src/app/shared/pipes/date-diff-duration.pipe.mjs +0 -48
  792. package/esm2020/src/app/shared/pipes/date-format.pipe.mjs +0 -66
  793. package/esm2020/src/app/shared/pipes/date-from-now.pipe.mjs +0 -27
  794. package/esm2020/src/app/shared/pipes/duration.pipe.mjs +0 -34
  795. package/esm2020/src/app/shared/pipes/file-size.pipe.mjs +0 -62
  796. package/esm2020/src/app/shared/pipes/form.pipes.mjs +0 -187
  797. package/esm2020/src/app/shared/pipes/highlight.pipe.mjs +0 -48
  798. package/esm2020/src/app/shared/pipes/latlong-format.pipe.mjs +0 -46
  799. package/esm2020/src/app/shared/pipes/maps.pipe.mjs +0 -63
  800. package/esm2020/src/app/shared/pipes/math.pipes.mjs +0 -59
  801. package/esm2020/src/app/shared/pipes/ng-init.pipe.mjs +0 -21
  802. package/esm2020/src/app/shared/pipes/number-format.pipe.mjs +0 -30
  803. package/esm2020/src/app/shared/pipes/pipes.module.mjs +0 -239
  804. package/esm2020/src/app/shared/pipes/property.pipes.mjs +0 -93
  805. package/esm2020/src/app/shared/pipes/string.pipes.mjs +0 -121
  806. package/esm2020/src/app/shared/pipes/translate-context.pipe.mjs +0 -43
  807. package/esm2020/src/app/shared/pipes/types.pipes.mjs +0 -45
  808. package/esm2020/src/app/shared/platforms.mjs +0 -43
  809. package/esm2020/src/app/shared/services/entity-service.class.mjs +0 -7
  810. package/esm2020/src/app/shared/services/job.utils.mjs +0 -92
  811. package/esm2020/src/app/shared/services/memory-entity-service.class.mjs +0 -337
  812. package/esm2020/src/app/shared/services/progress-bar.service.mjs +0 -33
  813. package/esm2020/src/app/shared/services/startable-observable-service.class.mjs +0 -119
  814. package/esm2020/src/app/shared/services/startable-service.class.mjs +0 -110
  815. package/esm2020/src/app/shared/services/translate-context.service.mjs +0 -105
  816. package/esm2020/src/app/shared/services/validator-service.class.mjs +0 -2
  817. package/esm2020/src/app/shared/services.mjs +0 -62
  818. package/esm2020/src/app/shared/shared-routing.module.mjs +0 -70
  819. package/esm2020/src/app/shared/shared.module.mjs +0 -208
  820. package/esm2020/src/app/shared/shared.testing.module.mjs +0 -84
  821. package/esm2020/src/app/shared/storage/storage-explorer.component.mjs +0 -268
  822. package/esm2020/src/app/shared/storage/storage-explorer.module.mjs +0 -60
  823. package/esm2020/src/app/shared/storage/storage.service.mjs +0 -132
  824. package/esm2020/src/app/shared/storage/storage.utils.mjs +0 -13
  825. package/esm2020/src/app/shared/testing/observable.test.mjs +0 -95
  826. package/esm2020/src/app/shared/testing/tests.page.mjs +0 -33
  827. package/esm2020/src/app/shared/toast/toast.testing.mjs +0 -51
  828. package/esm2020/src/app/shared/toast/toast.testing.module.mjs +0 -45
  829. package/esm2020/src/app/shared/toast/toasts.mjs +0 -144
  830. package/esm2020/src/app/shared/toolbar/modal-toolbar.mjs +0 -58
  831. package/esm2020/src/app/shared/toolbar/toolbar.mjs +0 -251
  832. package/esm2020/src/app/shared/toolbar/toolbar.module.mjs +0 -53
  833. package/esm2020/src/app/shared/types.mjs +0 -2
  834. package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.mjs +0 -57
  835. package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +0 -45
  836. package/esm2020/src/app/shared/upload-file/upload-file-popover.component.mjs +0 -97
  837. package/esm2020/src/app/shared/upload-file/upload-file.component.mjs +0 -204
  838. package/esm2020/src/app/shared/upload-file/upload-file.model.mjs +0 -20
  839. package/esm2020/src/app/shared/validator/form-error-adapter.class.mjs +0 -104
  840. package/esm2020/src/app/shared/validator/validators.mjs +0 -573
  841. package/esm2020/src/app/shared/version/versions.mjs +0 -81
  842. package/esm2020/src/app/social/job/job.module.mjs +0 -42
  843. package/esm2020/src/app/social/job/progression/job-progression.component.mjs +0 -20
  844. package/esm2020/src/app/social/job/progression/job-progression.icon.mjs +0 -216
  845. package/esm2020/src/app/social/job/progression/job-progression.list.mjs +0 -43
  846. package/esm2020/src/app/social/job/progression/job-progression.model.mjs +0 -23
  847. package/esm2020/src/app/social/job/progression/job-progression.service.mjs +0 -71
  848. package/esm2020/src/app/social/job/testing/job-progression.testing.mjs +0 -52
  849. package/esm2020/src/app/social/job/testing/job-progression.testing.service.mjs +0 -55
  850. package/esm2020/src/app/social/job/testing/job.testing.module.mjs +0 -35
  851. package/esm2020/src/app/social/message/message.form.mjs +0 -81
  852. package/esm2020/src/app/social/message/message.modal.mjs +0 -93
  853. package/esm2020/src/app/social/message/message.model.mjs +0 -65
  854. package/esm2020/src/app/social/message/message.module.mjs +0 -35
  855. package/esm2020/src/app/social/message/message.service.mjs +0 -84
  856. package/esm2020/src/app/social/social.errors.mjs +0 -10
  857. package/esm2020/src/app/social/social.module.mjs +0 -47
  858. package/esm2020/src/app/social/social.testing.module.mjs +0 -51
  859. package/esm2020/src/app/social/user-event/notification/user-event-notification.icon.mjs +0 -114
  860. package/esm2020/src/app/social/user-event/notification/user-event-notification.list.mjs +0 -246
  861. package/esm2020/src/app/social/user-event/testing/user-event.testing.mjs +0 -227
  862. package/esm2020/src/app/social/user-event/testing/user-event.testing.model.mjs +0 -112
  863. package/esm2020/src/app/social/user-event/testing/user-event.testing.module.mjs +0 -35
  864. package/esm2020/src/app/social/user-event/testing/user-event.testing.service.mjs +0 -111
  865. package/esm2020/src/app/social/user-event/user-event.model.mjs +0 -2
  866. package/esm2020/src/app/social/user-event/user-event.module.mjs +0 -39
  867. package/esm2020/src/app/social/user-event/user-event.service.mjs +0 -487
  868. package/esm2020/src/environments/environment.class.mjs +0 -5
  869. package/esm2020/src/environments/environment.mjs +0 -94
  870. package/esm2020/sumaris-net.ngx-components.mjs +0 -5
  871. package/fesm2015/sumaris-net.ngx-components.mjs +0 -38843
  872. package/fesm2015/sumaris-net.ngx-components.mjs.map +0 -1
  873. package/fesm2020/sumaris-net.ngx-components.mjs +0 -37942
  874. package/fesm2020/sumaris-net.ngx-components.mjs.map +0 -1
  875. package/index.d.ts +0 -5
  876. package/public_api.d.ts +0 -286
  877. package/src/app/admin/admin-routing.module.d.ts +0 -9
  878. package/src/app/admin/admin.module.d.ts +0 -10
  879. package/src/app/admin/services/filter/person.filter.d.ts +0 -21
  880. package/src/app/admin/services/person.service.d.ts +0 -44
  881. package/src/app/admin/services/validator/person.validator.d.ts +0 -14
  882. package/src/app/admin/users/users.d.ts +0 -44
  883. package/src/app/admin/users/users.module.d.ts +0 -13
  884. package/src/app/core/about/about.modal.d.ts +0 -32
  885. package/src/app/core/about/about.module.d.ts +0 -10
  886. package/src/app/core/account/account.module.d.ts +0 -15
  887. package/src/app/core/account/account.page.d.ts +0 -68
  888. package/src/app/core/account/new-token.modal.d.ts +0 -41
  889. package/src/app/core/account/token.table.d.ts +0 -25
  890. package/src/app/core/auth/auth.form.d.ts +0 -36
  891. package/src/app/core/auth/auth.modal.d.ts +0 -24
  892. package/src/app/core/auth/auth.module.d.ts +0 -11
  893. package/src/app/core/core.module.d.ts +0 -31
  894. package/src/app/core/core.testing.module.d.ts +0 -14
  895. package/src/app/core/form/buttons/form-buttons-bar.component.d.ts +0 -26
  896. package/src/app/core/form/buttons/form-buttons-bar.module.d.ts +0 -9
  897. package/src/app/core/form/entity/editor.class.d.ts +0 -243
  898. package/src/app/core/form/entity/entity-editor-modal.class.d.ts +0 -128
  899. package/src/app/core/form/entity/entity-editor.class.d.ts +0 -205
  900. package/src/app/core/form/entity/entity-metadata.component.d.ts +0 -13
  901. package/src/app/core/form/entity/entity.module.d.ts +0 -10
  902. package/src/app/core/form/form.class.d.ts +0 -155
  903. package/src/app/core/form/form.module.d.ts +0 -13
  904. package/src/app/core/form/form.utils.d.ts +0 -336
  905. package/src/app/core/form/list/list.form.d.ts +0 -81
  906. package/src/app/core/form/list/list.module.d.ts +0 -9
  907. package/src/app/core/form/properties/properties.form.d.ts +0 -44
  908. package/src/app/core/form/properties/properties.module.d.ts +0 -11
  909. package/src/app/core/form/properties/properties.table.d.ts +0 -78
  910. package/src/app/core/form/properties/property.validator.d.ts +0 -13
  911. package/src/app/core/form/properties/testing/properties-form.test.d.ts +0 -19
  912. package/src/app/core/form/properties/testing/properties-form.testing.module.d.ts +0 -12
  913. package/src/app/core/form/text-popover/testing/text-popover.testing.d.ts +0 -14
  914. package/src/app/core/form/text-popover/testing/text-popover.testing.module.d.ts +0 -11
  915. package/src/app/core/form/text-popover/text-form.component.d.ts +0 -32
  916. package/src/app/core/form/text-popover/text-popover.component.d.ts +0 -70
  917. package/src/app/core/form/text-popover/text-popover.module.d.ts +0 -10
  918. package/src/app/core/graphql/graphql.module.d.ts +0 -8
  919. package/src/app/core/graphql/graphql.service.d.ts +0 -148
  920. package/src/app/core/graphql/graphql.utils.d.ts +0 -42
  921. package/src/app/core/home/home.d.ts +0 -74
  922. package/src/app/core/home/home.module.d.ts +0 -12
  923. package/src/app/core/icon/icon.component.d.ts +0 -13
  924. package/src/app/core/icon/icon.module.d.ts +0 -9
  925. package/src/app/core/install/install-upgrade-card.component.d.ts +0 -63
  926. package/src/app/core/install/install-upgrade-card.module.d.ts +0 -9
  927. package/src/app/core/menu/menu.component.d.ts +0 -62
  928. package/src/app/core/menu/menu.model.d.ts +0 -28
  929. package/src/app/core/menu/menu.module.d.ts +0 -10
  930. package/src/app/core/menu/menu.service.d.ts +0 -21
  931. package/src/app/core/offline/update-offline-mode-card.component.d.ts +0 -11
  932. package/src/app/core/offline/update-offline-mode-card.module.d.ts +0 -9
  933. package/src/app/core/peer/select-peer.modal.d.ts +0 -53
  934. package/src/app/core/peer/select-peer.module.d.ts +0 -11
  935. package/src/app/core/register/register-confirm.page.d.ts +0 -24
  936. package/src/app/core/register/register.form.d.ts +0 -48
  937. package/src/app/core/register/register.modal.d.ts +0 -14
  938. package/src/app/core/register/register.module.d.ts +0 -12
  939. package/src/app/core/services/account.service.d.ts +0 -191
  940. package/src/app/core/services/auth-guard.service.d.ts +0 -17
  941. package/src/app/core/services/base-entity-service.class.d.ts +0 -104
  942. package/src/app/core/services/base-graphql-service.class.d.ts +0 -77
  943. package/src/app/core/services/base58.d.ts +0 -7
  944. package/src/app/core/services/config/core.config.d.ts +0 -29
  945. package/src/app/core/services/config.service.d.ts +0 -60
  946. package/src/app/core/services/crypto.service.d.ts +0 -44
  947. package/src/app/core/services/errors.d.ts +0 -51
  948. package/src/app/core/services/local-settings.service.d.ts +0 -90
  949. package/src/app/core/services/model/account.model.d.ts +0 -35
  950. package/src/app/core/services/model/config.model.d.ts +0 -36
  951. package/src/app/core/services/model/department.model.d.ts +0 -11
  952. package/src/app/core/services/model/entity.decorators.d.ts +0 -17
  953. package/src/app/core/services/model/entity.model.d.ts +0 -89
  954. package/src/app/core/services/model/filter.model.d.ts +0 -45
  955. package/src/app/core/services/model/history.model.d.ts +0 -20
  956. package/src/app/core/services/model/model.enum.d.ts +0 -7
  957. package/src/app/core/services/model/peer.model.d.ts +0 -29
  958. package/src/app/core/services/model/person.model.d.ts +0 -31
  959. package/src/app/core/services/model/referential.model.d.ts +0 -77
  960. package/src/app/core/services/model/settings.model.d.ts +0 -26
  961. package/src/app/core/services/model/token.model.d.ts +0 -21
  962. package/src/app/core/services/network.service.d.ts +0 -149
  963. package/src/app/core/services/network.types.d.ts +0 -5
  964. package/src/app/core/services/network.utils.d.ts +0 -31
  965. package/src/app/core/services/pipes/account.pipes.d.ts +0 -15
  966. package/src/app/core/services/pipes/department-to-string.pipe.d.ts +0 -9
  967. package/src/app/core/services/pipes/person-to-string.pipe.d.ts +0 -9
  968. package/src/app/core/services/pipes/usage-mode.pipes.d.ts +0 -15
  969. package/src/app/core/services/platform.service.d.ts +0 -96
  970. package/src/app/core/services/storage/entities-storage.service.d.ts +0 -108
  971. package/src/app/core/services/storage/entity-store.class.d.ts +0 -113
  972. package/src/app/core/services/testing/referential-filter.model.d.ts +0 -9
  973. package/src/app/core/services/testing/referential.validator.d.ts +0 -22
  974. package/src/app/core/services/validator/account.validator.d.ts +0 -17
  975. package/src/app/core/services/validator/base.validator.class.d.ts +0 -21
  976. package/src/app/core/services/validator/local-settings.validator.d.ts +0 -18
  977. package/src/app/core/services/validator/user-settings.validator.d.ts +0 -10
  978. package/src/app/core/services/validator/user-token.validator.d.ts +0 -13
  979. package/src/app/core/settings/settings.module.d.ts +0 -10
  980. package/src/app/core/settings/settings.page.d.ts +0 -68
  981. package/src/app/core/table/actions-column.component.d.ts +0 -48
  982. package/src/app/core/table/async-table.class.d.ts +0 -383
  983. package/src/app/core/table/entities-async-table-datasource.class.d.ts +0 -80
  984. package/src/app/core/table/entities-table-datasource.class.d.ts +0 -94
  985. package/src/app/core/table/memory-table.class.d.ts +0 -25
  986. package/src/app/core/table/table-select-columns.component.d.ts +0 -22
  987. package/src/app/core/table/table.class.d.ts +0 -386
  988. package/src/app/core/table/table.model.d.ts +0 -26
  989. package/src/app/core/table/table.module.d.ts +0 -10
  990. package/src/app/core/table/table.utils.d.ts +0 -11
  991. package/src/app/core/table/testing/table-validator.service.d.ts +0 -17
  992. package/src/app/core/table/testing/table.testing.d.ts +0 -53
  993. package/src/app/core/table/testing/table.testing.module.d.ts +0 -11
  994. package/src/app/shared/alerts.d.ts +0 -53
  995. package/src/app/shared/audio/audio.d.ts +0 -44
  996. package/src/app/shared/audio/audio.testing.d.ts +0 -13
  997. package/src/app/shared/audio/audio.testing.module.d.ts +0 -11
  998. package/src/app/shared/capacitor/keyboard.d.ts +0 -16
  999. package/src/app/shared/capacitor/plugins.d.ts +0 -7
  1000. package/src/app/shared/constants.d.ts +0 -7
  1001. package/src/app/shared/dates.d.ts +0 -39
  1002. package/src/app/shared/debug/debug-service.class.d.ts +0 -5
  1003. package/src/app/shared/debug/debug.component.d.ts +0 -13
  1004. package/src/app/shared/debug/debug.module.d.ts +0 -12
  1005. package/src/app/shared/directives/autofocus.directive.d.ts +0 -19
  1006. package/src/app/shared/directives/autotitle.directive.d.ts +0 -10
  1007. package/src/app/shared/directives/directives.module.d.ts +0 -12
  1008. package/src/app/shared/directives/drag-and-drop.directive.d.ts +0 -17
  1009. package/src/app/shared/directives/ng-var.directive.d.ts +0 -12
  1010. package/src/app/shared/directives/resizable/resizable.component.d.ts +0 -21
  1011. package/src/app/shared/directives/resizable/resizable.directive.d.ts +0 -12
  1012. package/src/app/shared/directives/resizable/resizable.module.d.ts +0 -8
  1013. package/src/app/shared/events.d.ts +0 -27
  1014. package/src/app/shared/file/csv.utils.d.ts +0 -19
  1015. package/src/app/shared/file/file.service.d.ts +0 -23
  1016. package/src/app/shared/file/file.utils.d.ts +0 -20
  1017. package/src/app/shared/file/images.utils.d.ts +0 -19
  1018. package/src/app/shared/file/json.utils.d.ts +0 -16
  1019. package/src/app/shared/file/uri.utils.d.ts +0 -7
  1020. package/src/app/shared/focusable.d.ts +0 -4
  1021. package/src/app/shared/form/field.component.d.ts +0 -71
  1022. package/src/app/shared/form/field.model.d.ts +0 -37
  1023. package/src/app/shared/form/loading-spinner.d.ts +0 -8
  1024. package/src/app/shared/forms.d.ts +0 -89
  1025. package/src/app/shared/functions.d.ts +0 -132
  1026. package/src/app/shared/geolocation/geolocation.utils.d.ts +0 -19
  1027. package/src/app/shared/gesture/gesture-config.d.ts +0 -15
  1028. package/src/app/shared/gesture/hammer.utils.d.ts +0 -16
  1029. package/src/app/shared/graph/colors.utils.d.ts +0 -17
  1030. package/src/app/shared/graph/graph-colors.d.ts +0 -63
  1031. package/src/app/shared/guard/component-dirty.guard.d.ts +0 -19
  1032. package/src/app/shared/help/help.modal.d.ts +0 -33
  1033. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.d.ts +0 -10
  1034. package/src/app/shared/hotkeys/hotkeys.service.d.ts +0 -28
  1035. package/src/app/shared/hotkeys/shared-hotkeys.module.d.ts +0 -11
  1036. package/src/app/shared/http/http.utils.d.ts +0 -27
  1037. package/src/app/shared/image/gallery/image-gallery.component.d.ts +0 -98
  1038. package/src/app/shared/image/gallery/image-gallery.module.d.ts +0 -14
  1039. package/src/app/shared/image/gallery/testing/gallegry.model.testing.d.ts +0 -12
  1040. package/src/app/shared/image/gallery/testing/gallery.service.testing.d.ts +0 -33
  1041. package/src/app/shared/image/gallery/testing/gallery.testing.d.ts +0 -16
  1042. package/src/app/shared/image/gallery/testing/gallery.testing.module.d.ts +0 -12
  1043. package/src/app/shared/image/image.model.d.ts +0 -5
  1044. package/src/app/shared/image/image.module.d.ts +0 -8
  1045. package/src/app/shared/image/image.service.d.ts +0 -32
  1046. package/src/app/shared/inputs.d.ts +0 -32
  1047. package/src/app/shared/interceptors/progess.interceptor.d.ts +0 -8
  1048. package/src/app/shared/logging/log-level.model.d.ts +0 -38
  1049. package/src/app/shared/logging/logger.model.d.ts +0 -68
  1050. package/src/app/shared/logging/logging-service.class.d.ts +0 -39
  1051. package/src/app/shared/logging/logging-service.config.d.ts +0 -25
  1052. package/src/app/shared/logging/logging-service.module.d.ts +0 -9
  1053. package/src/app/shared/material/autocomplete/material.autocomplete.config.d.ts +0 -36
  1054. package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +0 -138
  1055. package/src/app/shared/material/autocomplete/material.autocomplete.module.d.ts +0 -21
  1056. package/src/app/shared/material/autocomplete/material.autocomplete.utils.d.ts +0 -4
  1057. package/src/app/shared/material/autocomplete/testing/autocomplete.test.d.ts +0 -45
  1058. package/src/app/shared/material/badge/badge.directive.d.ts +0 -37
  1059. package/src/app/shared/material/badge/badge.module.d.ts +0 -10
  1060. package/src/app/shared/material/badge/badge.test.d.ts +0 -21
  1061. package/src/app/shared/material/boolean/boolean.module.d.ts +0 -19
  1062. package/src/app/shared/material/boolean/material.boolean.d.ts +0 -66
  1063. package/src/app/shared/material/chips/chips.module.d.ts +0 -21
  1064. package/src/app/shared/material/chips/material.chips.d.ts +0 -126
  1065. package/src/app/shared/material/chips/testing/chips.test.d.ts +0 -31
  1066. package/src/app/shared/material/datetime/datetime.module.d.ts +0 -24
  1067. package/src/app/shared/material/datetime/material.date.d.ts +0 -74
  1068. package/src/app/shared/material/datetime/material.dateshort.d.ts +0 -75
  1069. package/src/app/shared/material/datetime/material.datetime.d.ts +0 -100
  1070. package/src/app/shared/material/datetime/testing/mat-date-time.test.d.ts +0 -31
  1071. package/src/app/shared/material/datetime/testing/mat-date.test.d.ts +0 -30
  1072. package/src/app/shared/material/datetime/testing/mat-dateshort.test.d.ts +0 -29
  1073. package/src/app/shared/material/duration/duration.module.d.ts +0 -18
  1074. package/src/app/shared/material/duration/duration.utils.d.ts +0 -3
  1075. package/src/app/shared/material/duration/material.duration.d.ts +0 -57
  1076. package/src/app/shared/material/latlong/latlong.utils.d.ts +0 -13
  1077. package/src/app/shared/material/latlong/material.latlong.d.ts +0 -65
  1078. package/src/app/shared/material/latlong/material.latlong.module.d.ts +0 -19
  1079. package/src/app/shared/material/latlong/testing/latlong.test.d.ts +0 -21
  1080. package/src/app/shared/material/material.animations.d.ts +0 -4
  1081. package/src/app/shared/material/material.module.d.ts +0 -45
  1082. package/src/app/shared/material/material.testing.module.d.ts +0 -25
  1083. package/src/app/shared/material/numpad/numpad.append-to-input.directive.d.ts +0 -22
  1084. package/src/app/shared/material/numpad/numpad.component.d.ts +0 -26
  1085. package/src/app/shared/material/numpad/numpad.container.d.ts +0 -40
  1086. package/src/app/shared/material/numpad/numpad.content.d.ts +0 -7
  1087. package/src/app/shared/material/numpad/numpad.directive.d.ts +0 -35
  1088. package/src/app/shared/material/numpad/numpad.dom-service.d.ts +0 -16
  1089. package/src/app/shared/material/numpad/numpad.model.d.ts +0 -30
  1090. package/src/app/shared/material/numpad/numpad.module.d.ts +0 -16
  1091. package/src/app/shared/material/numpad/testing/numpad.test.d.ts +0 -13
  1092. package/src/app/shared/material/paginator/material.paginator-i18n.d.ts +0 -15
  1093. package/src/app/shared/material/stepper/material.stepper-i18n.d.ts +0 -10
  1094. package/src/app/shared/material/swipe/material.swipe.d.ts +0 -89
  1095. package/src/app/shared/material/swipe/swipe.module.d.ts +0 -15
  1096. package/src/app/shared/material/swipe/testing/swipe.test.d.ts +0 -22
  1097. package/src/app/shared/modules.d.ts +0 -8
  1098. package/src/app/shared/observables.d.ts +0 -29
  1099. package/src/app/shared/pipes/arrays.pipe.d.ts +0 -54
  1100. package/src/app/shared/pipes/colors.pipe.d.ts +0 -9
  1101. package/src/app/shared/pipes/date-diff-duration.pipe.d.ts +0 -23
  1102. package/src/app/shared/pipes/date-format.pipe.d.ts +0 -34
  1103. package/src/app/shared/pipes/date-from-now.pipe.d.ts +0 -12
  1104. package/src/app/shared/pipes/duration.pipe.d.ts +0 -13
  1105. package/src/app/shared/pipes/file-size.pipe.d.ts +0 -30
  1106. package/src/app/shared/pipes/form.pipes.d.ts +0 -59
  1107. package/src/app/shared/pipes/highlight.pipe.d.ts +0 -11
  1108. package/src/app/shared/pipes/latlong-format.pipe.d.ts +0 -20
  1109. package/src/app/shared/pipes/maps.pipe.d.ts +0 -22
  1110. package/src/app/shared/pipes/math.pipes.d.ts +0 -20
  1111. package/src/app/shared/pipes/ng-init.pipe.d.ts +0 -8
  1112. package/src/app/shared/pipes/number-format.pipe.d.ts +0 -10
  1113. package/src/app/shared/pipes/pipes.module.d.ts +0 -27
  1114. package/src/app/shared/pipes/property.pipes.d.ts +0 -26
  1115. package/src/app/shared/pipes/string.pipes.d.ts +0 -47
  1116. package/src/app/shared/pipes/translate-context.pipe.d.ts +0 -17
  1117. package/src/app/shared/pipes/types.pipes.d.ts +0 -18
  1118. package/src/app/shared/platforms.d.ts +0 -8
  1119. package/src/app/shared/services/entity-service.class.d.ts +0 -73
  1120. package/src/app/shared/services/job.utils.d.ts +0 -20
  1121. package/src/app/shared/services/memory-entity-service.class.d.ts +0 -71
  1122. package/src/app/shared/services/progress-bar.service.d.ts +0 -20
  1123. package/src/app/shared/services/startable-observable-service.class.d.ts +0 -33
  1124. package/src/app/shared/services/startable-service.class.d.ts +0 -34
  1125. package/src/app/shared/services/translate-context.service.d.ts +0 -29
  1126. package/src/app/shared/services/validator-service.class.d.ts +0 -10
  1127. package/src/app/shared/services.d.ts +0 -9
  1128. package/src/app/shared/shared-routing.module.d.ts +0 -22
  1129. package/src/app/shared/shared.module.d.ts +0 -31
  1130. package/src/app/shared/shared.testing.module.d.ts +0 -17
  1131. package/src/app/shared/storage/storage-explorer.component.d.ts +0 -58
  1132. package/src/app/shared/storage/storage-explorer.module.d.ts +0 -16
  1133. package/src/app/shared/storage/storage.service.d.ts +0 -23
  1134. package/src/app/shared/storage/storage.utils.d.ts +0 -19
  1135. package/src/app/shared/testing/observable.test.d.ts +0 -25
  1136. package/src/app/shared/testing/tests.page.d.ts +0 -20
  1137. package/src/app/shared/toast/toast.testing.d.ts +0 -15
  1138. package/src/app/shared/toast/toast.testing.module.d.ts +0 -11
  1139. package/src/app/shared/toast/toasts.d.ts +0 -17
  1140. package/src/app/shared/toolbar/modal-toolbar.d.ts +0 -21
  1141. package/src/app/shared/toolbar/toolbar.d.ts +0 -63
  1142. package/src/app/shared/toolbar/toolbar.module.d.ts +0 -15
  1143. package/src/app/shared/types.d.ts +0 -26
  1144. package/src/app/shared/upload-file/testing/upload-file.testing.d.ts +0 -20
  1145. package/src/app/shared/upload-file/testing/upload-file.testing.module.d.ts +0 -11
  1146. package/src/app/shared/upload-file/upload-file-popover.component.d.ts +0 -39
  1147. package/src/app/shared/upload-file/upload-file.component.d.ts +0 -48
  1148. package/src/app/shared/upload-file/upload-file.model.d.ts +0 -30
  1149. package/src/app/shared/validator/form-error-adapter.class.d.ts +0 -27
  1150. package/src/app/shared/validator/validators.d.ts +0 -115
  1151. package/src/app/shared/version/versions.d.ts +0 -26
  1152. package/src/app/social/job/job.module.d.ts +0 -12
  1153. package/src/app/social/job/progression/job-progression.component.d.ts +0 -9
  1154. package/src/app/social/job/progression/job-progression.icon.d.ts +0 -49
  1155. package/src/app/social/job/progression/job-progression.list.d.ts +0 -21
  1156. package/src/app/social/job/progression/job-progression.model.d.ts +0 -11
  1157. package/src/app/social/job/progression/job-progression.service.d.ts +0 -34
  1158. package/src/app/social/job/testing/job-progression.testing.d.ts +0 -17
  1159. package/src/app/social/job/testing/job-progression.testing.service.d.ts +0 -17
  1160. package/src/app/social/job/testing/job.testing.module.d.ts +0 -11
  1161. package/src/app/social/message/message.form.d.ts +0 -30
  1162. package/src/app/social/message/message.modal.d.ts +0 -39
  1163. package/src/app/social/message/message.model.d.ts +0 -31
  1164. package/src/app/social/message/message.module.d.ts +0 -11
  1165. package/src/app/social/message/message.service.d.ts +0 -27
  1166. package/src/app/social/social.errors.d.ts +0 -9
  1167. package/src/app/social/social.module.d.ts +0 -20
  1168. package/src/app/social/social.testing.module.d.ts +0 -13
  1169. package/src/app/social/user-event/notification/user-event-notification.icon.d.ts +0 -31
  1170. package/src/app/social/user-event/notification/user-event-notification.list.d.ts +0 -71
  1171. package/src/app/social/user-event/testing/user-event.testing.d.ts +0 -34
  1172. package/src/app/social/user-event/testing/user-event.testing.model.d.ts +0 -44
  1173. package/src/app/social/user-event/testing/user-event.testing.module.d.ts +0 -11
  1174. package/src/app/social/user-event/testing/user-event.testing.service.d.ts +0 -41
  1175. package/src/app/social/user-event/user-event.model.d.ts +0 -45
  1176. package/src/app/social/user-event/user-event.module.d.ts +0 -12
  1177. package/src/app/social/user-event/user-event.service.d.ts +0 -124
  1178. package/src/environments/environment.class.d.ts +0 -57
  1179. package/src/environments/environment.d.ts +0 -3
@@ -1,449 +0,0 @@
1
- import { BehaviorSubject } from 'rxjs';
2
- import { map, mergeMap } from 'rxjs/operators';
3
- import { EntityUtils } from '../model/entity.model';
4
- import { isEmptyArray, isNil, isNotEmptyArray, isNotNil } from '../../../shared/functions';
5
- import { chainPromises } from '../../../shared/observables';
6
- import { ErrorCodes } from '../errors';
7
- export const ENTITIES_STORAGE_KEY_PREFIX = 'entities';
8
- export class EntityStore {
9
- constructor(name, storage, policy) {
10
- this.name = name;
11
- this.storage = storage;
12
- this._onChange = new BehaviorSubject(true);
13
- this._dirty = false;
14
- this.policy = policy || {};
15
- this.reset({ emitEvent: false });
16
- this._dirty = false;
17
- this._loaded = false;
18
- this._storageKey = ENTITIES_STORAGE_KEY_PREFIX + '#' + name;
19
- this._mapToLightEntity = this.createLightEntityMapFn(this.policy);
20
- }
21
- get length() {
22
- return this._cache?.length || 0;
23
- }
24
- get cache() {
25
- return this._cache;
26
- }
27
- get dirty() {
28
- return this._dirty;
29
- }
30
- get isByIdMode() {
31
- return this.policy.mode === 'by-id';
32
- }
33
- get storageKeyById() {
34
- return this._storageKey + '#ids';
35
- }
36
- nextValue() {
37
- this._sequence = this._sequence - 1;
38
- this._dirty = true;
39
- return this._sequence;
40
- }
41
- currentValue() {
42
- return this._sequence;
43
- }
44
- async load(id, opts) {
45
- if (this._mapToLightEntity && (!opts || opts.fullLoad !== false)) {
46
- return await this.loadFullEntity(id, opts);
47
- }
48
- return this.loadCachedEntity(id, opts);
49
- }
50
- /**
51
- * Watch a set of entities
52
- *
53
- * @param variables
54
- * @param opts
55
- */
56
- watchAll(variables, opts) {
57
- // If need full entities, but use light entities in the entities array
58
- if (this._mapToLightEntity && (opts && opts.fullLoad === true)) {
59
- console.warn('[entity-store] WARN: Watching full entities, splited by id in entity store. This can be long! Please make sure you need full entities here.');
60
- return this._onChange
61
- .pipe(
62
- // Apply filter on cache
63
- map((_) => this.reduceAndSort(this._cache, variables)),
64
- // Then convert into full entities (using parallel jobs - /!\ can use lot of memory)
65
- mergeMap((res) => Promise.all((res.data || [])
66
- .map(e => this.loadFullEntity(e.id, opts))).then(data => ({
67
- data,
68
- total: res.total
69
- }))));
70
- }
71
- // Load using entities array
72
- return this._onChange
73
- .pipe(map((_) => this.reduceAndSort(this._cache, variables)));
74
- }
75
- /**
76
- * WIll apply a filter, then a sort, then a page slice
77
- *
78
- * @param variables
79
- * @param opts
80
- */
81
- async loadAll(variables, opts) {
82
- const res = this.reduceAndSort(this._cache, variables);
83
- // If store by ID: make sure to full the full entities
84
- if (this._mapToLightEntity && isNotEmptyArray(res.data) && (opts && opts.fullLoad === true)) {
85
- // Load full entities, one by one
86
- res.data = await chainPromises((res.data || []).map(e => () => this.load(e.id)));
87
- }
88
- return res;
89
- }
90
- save(entity, opts) {
91
- const status = isNotNil(entity.id) && this._statusById.get(entity.id) || { index: undefined };
92
- const isNew = isNil(status.index);
93
- if (isNew) {
94
- if (isNil(entity.id)) {
95
- entity.id = this.nextValue();
96
- }
97
- else if (+entity.id < 0 && +entity.id > this._sequence) {
98
- console.warn('Trying to save a local entity with an id > sequence. Will replace id by sequence next value');
99
- entity.id = this.nextValue();
100
- }
101
- else {
102
- // OK: use a valid id :
103
- // - id >= 0 (should be a remote id)
104
- // - OR < sequence, and not exists in the index map
105
- }
106
- this._statusById.set(entity.id, status);
107
- status.index = this._cache.push(entity) - 1;
108
- }
109
- else {
110
- this._cache[status.index] = entity;
111
- }
112
- // Mark entity as dirty
113
- status.dirty = true;
114
- // Mark storage as dirty
115
- this._dirty = true;
116
- // Emit update event
117
- if (!opts || opts.emitEvent !== false) {
118
- this.emitEvent();
119
- }
120
- return entity;
121
- }
122
- saveAll(entities, opts) {
123
- if (isEmptyArray(entities) && (!opts || opts.reset !== true))
124
- return entities; // Skip (Nothing to save)
125
- let result;
126
- console.info(`[entity-storage] Saving ${entities.length} ${this.name}(s)`);
127
- // First save, or reset using given entities
128
- if (isEmptyArray(this._cache) || (opts && opts.reset)) {
129
- this.setEntities(entities, { emitEvent: false });
130
- }
131
- else {
132
- result = entities.map((entity) => this.save(entity, { emitEvent: false }));
133
- }
134
- // Mark as dirty
135
- this._dirty = true;
136
- // Emit update event
137
- if (!opts || opts.emitEvent !== false) {
138
- this.emitEvent();
139
- }
140
- return result || this._cache.slice();
141
- }
142
- delete(id, opts) {
143
- const status = isNotNil(id) ? this._statusById.get(id) : undefined;
144
- const index = status ? status.index : undefined;
145
- if (isNil(index))
146
- return undefined;
147
- const entity = this._cache[index];
148
- if (!entity)
149
- return undefined;
150
- // Remove from cache
151
- this._cache[index] = undefined;
152
- this._statusById.delete(entity.id);
153
- // Remove full entity, by id
154
- if (this.isByIdMode) {
155
- this.storage.remove(this._storageKey + '#' + id);
156
- }
157
- // Mark as dirty
158
- this._dirty = true;
159
- // Emit update event
160
- if (!opts || opts.emitEvent !== false) {
161
- this.emitEvent();
162
- }
163
- return entity;
164
- }
165
- deleteMany(ids, opts) {
166
- // Delete by id, but NOT emit event on each deletion
167
- const deletedEntities = (ids || [])
168
- .map(id => this.delete(id, { emitEvent: false }))
169
- .filter(isNotNil);
170
- // No changes: exit
171
- if (!deletedEntities.length)
172
- return [];
173
- // Emit update event
174
- if (!opts || opts.emitEvent !== false) {
175
- this.emitEvent();
176
- }
177
- return deletedEntities;
178
- }
179
- reset(opts) {
180
- this._cache = [];
181
- this._sequence = 0;
182
- this._statusById = new Map();
183
- this._dirty = true;
184
- this._loaded = true;
185
- // Emit update event
186
- if (!opts || opts.emitEvent !== false) {
187
- this.emitEvent();
188
- }
189
- }
190
- /**
191
- *
192
- * @param opts
193
- * opts.skipIfPristine = false persist all entities, even if not dirty
194
- */
195
- async persist(opts = { skipIfPristine: true }) {
196
- // Skip is not dirty
197
- if (opts.skipIfPristine && !this._dirty) {
198
- console.debug(`[entity-storage] Persisting ${this.name} not need. Skip`);
199
- return this._cache.length;
200
- }
201
- // Copy some data, BEFORE to call markAsPristine() to allow parallel changes
202
- const dirtyIndexes = this.isByIdMode && Array.from(this._statusById.values())
203
- .filter(s => !opts.skipIfPristine || (s && s.dirty))
204
- .map(s => s.index);
205
- const entities = this._cache.slice(); // Copy cached entities
206
- // Mark all (entities and status) as pristine
207
- this.markAsPristine({ emitEvent: false });
208
- // Convert dirty entities into light entities (/!\ AFTER the previous copy)
209
- // and update the cache (but NOT the 'entities' variable)
210
- if (dirtyIndexes && this._mapToLightEntity) {
211
- dirtyIndexes.forEach(index => this._cache[index] = this._mapToLightEntity(entities[index]));
212
- }
213
- // If no entity found
214
- if (isEmptyArray(entities)) {
215
- // Clean the local storage
216
- await this.storage.remove(this._storageKey);
217
- }
218
- else {
219
- // Save each entity into a unique key (advanced mode)
220
- if (this.isByIdMode) {
221
- // Save ids
222
- await this.storage.set(this.storageKeyById, entities.filter(isNotNil).map(e => e.id));
223
- // Saved dirty entities
224
- await Promise.all(dirtyIndexes
225
- .map(index => {
226
- const entity = entities[index];
227
- console.debug(`[entity-storage] Persisting ${this.name}#${entity.id}...`);
228
- return this.storage.set(this._storageKey + '#' + entity.id, entity);
229
- }));
230
- console.info(`[entity-storage] Persisting ${dirtyIndexes.length}/${entities.length} ${this.name}(s)...`);
231
- }
232
- // Save all entities in a single key (default)
233
- else {
234
- console.info(`[entity-storage] Persisting ${entities.length} ${this.name}(s)...`);
235
- await this.storage.set(this._storageKey, entities);
236
- }
237
- }
238
- return entities.length;
239
- }
240
- async restore(opts) {
241
- let entities;
242
- const res = await Promise.all([
243
- this.storage.get(this._storageKey),
244
- this.storage.get(this.storageKeyById)
245
- ]);
246
- const values = res[0] && Array.isArray(res[0]) ? res[0] : null;
247
- const ids = res[1] && Array.isArray(res[1]) ? res[1] : null;
248
- let migration = false;
249
- let oldKeysToClean;
250
- // "Split by id" mode
251
- if (this.isByIdMode) {
252
- if (isNotNil(ids)) {
253
- // Load entity by id (one by one)
254
- const storageKeys = ids.map(id => this._storageKey + '#' + id);
255
- entities = await chainPromises(storageKeys.map(key => () => this.storage.get(key)));
256
- }
257
- // Migrate from the standard mode
258
- else if (isNotNil(values)) {
259
- entities = values.filter(e => e && isNotNil(e.id));
260
- migration = true;
261
- oldKeysToClean = [this._storageKey];
262
- }
263
- }
264
- // Else (default mode)
265
- else {
266
- if (isNotNil(values)) {
267
- entities = values.filter(e => e && isNotNil(e.id));
268
- }
269
- else if (isNotNil(ids)) {
270
- const storageKeys = ids.map(id => this._storageKey + '#' + id);
271
- // Load entity by id (one by one)
272
- entities = await chainPromises(storageKeys.map(key => () => this.storage.get(key)));
273
- migration = true;
274
- oldKeysToClean = [...storageKeys, this.storageKeyById];
275
- }
276
- }
277
- // OK, there is something in storage...
278
- if (isNotEmptyArray(entities)) {
279
- if (entities.length >= 1000) {
280
- console.warn(`[entity-storage] - Restoring ${entities.length} ${this.name}. Check if not too many elements?!`);
281
- }
282
- // Map entities into light element (if if not need to persist, because of migration
283
- if (this._mapToLightEntity && !migration) {
284
- entities = entities.map(this._mapToLightEntity);
285
- }
286
- }
287
- this.setEntities(entities || [], { ...opts, emitEvent: false });
288
- this._dirty = false;
289
- // Finish the migration
290
- if (migration) {
291
- try {
292
- console.warn(`[entity-storage] - Migrate ${this.name} into {mode: '${this.policy.mode}'}...`);
293
- // Force to persist, using the new mode
294
- await this.persist({ skipIfPristine: false /* force persist using the new mode */ });
295
- // Clean old storage keys (one by one)
296
- if (isNotEmptyArray(oldKeysToClean))
297
- await chainPromises(oldKeysToClean.map(key => () => this.storage.remove(key)));
298
- }
299
- catch (err) {
300
- console.error(err);
301
- throw { code: ErrorCodes.ENTITY_STORAGE_MIGRATION_FAILED, message: 'ERROR.ENTITY_STORAGE_MIGRATION_FAILED', details: err };
302
- }
303
- }
304
- // Emit update event
305
- if (!opts || opts.emitEvent !== false) {
306
- this.emitEvent();
307
- }
308
- return this._cache.length;
309
- }
310
- markAsDirty(opts) {
311
- this._dirty = true;
312
- // Emit update event
313
- if (!opts || opts.emitEvent !== false) {
314
- this.emitEvent();
315
- }
316
- }
317
- markAsPristine(opts) {
318
- for (const s of this._statusById.values()) {
319
- if (isNotNil(s)) {
320
- s.dirty = false;
321
- }
322
- }
323
- this._dirty = false;
324
- // Emit update event
325
- if (!opts || opts.emitEvent !== false) {
326
- this.emitEvent();
327
- }
328
- }
329
- /* -- protected methods -- */
330
- loadCachedEntity(id, opts) {
331
- const status = this._statusById.get(id);
332
- const index = status && status.index;
333
- if (isNil(index))
334
- return undefined; // not exists
335
- return Object.freeze(this._cache[index]);
336
- }
337
- async loadFullEntity(id, opts) {
338
- const status = this._statusById.get(id);
339
- const index = status && status.index;
340
- if (isNil(index))
341
- return undefined; // not exists
342
- // Reload from storage, if need (e.g. some attributes has been excluded in light elements)
343
- if (status.dirty === false) {
344
- console.debug(`[entity-storage] Full reloading ${this.name}#${id}...`);
345
- const fullData = await this.storage.get(this._storageKey + '#' + id);
346
- if (fullData)
347
- return Object.freeze(fullData);
348
- // Not found by id, continue from cache (version prior to 1.5.3)
349
- }
350
- // Load from the cache, if dirty OR if storage is not splitted by id
351
- return Object.freeze(this._cache[index]);
352
- }
353
- setEntities(entities, opts) {
354
- // Filter non nil (and if need non local) entities
355
- entities = (entities || [])
356
- .filter(item => isNotNil(item)
357
- && (!this.policy.skipNonLocalEntities || +item.id < 0));
358
- this._cache = entities;
359
- // Update the sequence with min(id) of all temporary ids
360
- this._sequence = this._cache.reduce((res, item) => +item.id < 0 ? Math.min(res, +item.id) : res, 0);
361
- this._statusById.clear();
362
- this._cache.forEach((item, index) => {
363
- this._statusById.set(item.id, {
364
- index,
365
- dirty: false
366
- });
367
- });
368
- this._loaded = true;
369
- // Emit update event
370
- if (!opts || opts.emitEvent !== false) {
371
- this.emitEvent();
372
- }
373
- }
374
- /**
375
- * WIll apply a filter, then a sort, then a page slice
376
- *
377
- * @param data
378
- * @param variables
379
- */
380
- reduceAndSort(data, variables) {
381
- if (isEmptyArray(data)) {
382
- return { data: [], total: 0 };
383
- }
384
- // Remove nil values
385
- data = data.filter(isNotNil);
386
- if (!variables) {
387
- // Return all (but array has been filtered, and copied)
388
- return { data, total: data.length };
389
- }
390
- // Apply the filter, if any
391
- if (variables.filter) {
392
- data = data.filter(variables.filter);
393
- }
394
- // Compute the total length
395
- const total = data.length;
396
- // If page size=0 (e.g. only need total)
397
- if (variables.size === 0)
398
- return { data: [], total };
399
- // Sort by
400
- if (variables.sortBy) {
401
- EntityUtils.sort(data, variables.sortBy, variables.sortDirection);
402
- }
403
- // Slice in a page (using offset and size)
404
- if (variables.offset > 0) {
405
- // Offset after the end: no result
406
- if (variables.offset >= data.length || variables.size === 0) {
407
- data = [];
408
- }
409
- else {
410
- data = (variables.size > 0 && ((variables.offset + variables.size) < data.length)) ?
411
- // Slice using limit to size
412
- data.slice(variables.offset, variables.offset + variables.size) :
413
- // Slice without limit
414
- data.slice(variables.offset);
415
- }
416
- }
417
- // Apply a limit
418
- else if (variables.size > 0) {
419
- data = data.slice(0, variables.size);
420
- }
421
- // No limit:
422
- else if (variables.size === -1) {
423
- // Keep all data
424
- }
425
- return { data, total };
426
- }
427
- createLightEntityMapFn(policy) {
428
- if (policy.mode !== 'by-id')
429
- return undefined; // Only need for the 'by-id' mode
430
- if (isEmptyArray(policy.lightFieldsExcludes))
431
- return undefined; // skip
432
- // Create a immutable mask object, use to clean some properties
433
- const excludeAttributesMask = Object.freeze(this.policy.lightFieldsExcludes.reduce((res, attr) => {
434
- res[attr] = undefined;
435
- return res;
436
- }, {}));
437
- return (entity) => entity ? Object.assign({}, entity, excludeAttributesMask) : undefined;
438
- }
439
- /**
440
- * Update the entitiesSubject.
441
- *
442
- * Before wending items, a filter is apply, to remove null value.
443
- * This filter will create a array copy.
444
- */
445
- emitEvent() {
446
- this._onChange.next(true);
447
- }
448
- }
449
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXN0b3JlLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL3N0b3JhZ2UvZW50aXR5LXN0b3JlLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxlQUFlLEVBQWEsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFTLEdBQUcsRUFBRSxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQVMsV0FBVyxFQUFVLE1BQU0sdUJBQXVCLENBQUM7QUFDbkUsT0FBTyxFQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBRXpGLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBR3JDLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLFVBQVUsQ0FBQztBQW1CdEQsTUFBTSxPQUFPLFdBQVc7SUFvQ3RCLFlBQ3FCLElBQVksRUFDWixPQUFpQixFQUNwQyxNQUFpQztRQUZkLFNBQUksR0FBSixJQUFJLENBQVE7UUFDWixZQUFPLEdBQVAsT0FBTyxDQUFVO1FBaENyQixjQUFTLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFLL0MsV0FBTSxHQUFHLEtBQUssQ0FBQztRQTZCckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLDJC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T0FBTyxTQUFTLENBQUMsQ0FBQyxPQUFPO1FBRXZFLCtEQUErRDtRQUMvRCxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDL0YsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQztZQUN0QixPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRVgsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQzlGLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLFNBQVM7UUFDZixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2ZpbHRlciwgbWFwLCBtZXJnZU1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtFbnRpdHksIEVudGl0eVV0aWxzLCBJRW50aXR5fSBmcm9tICcuLi9tb2RlbC9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHtpc0VtcHR5QXJyYXksIGlzTmlsLCBpc05vdEVtcHR5QXJyYXksIGlzTm90TmlsfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7TG9hZFJlc3VsdH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2VudGl0eS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7Y2hhaW5Qcm9taXNlc30gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL29ic2VydmFibGVzJztcbmltcG9ydCB7RXJyb3JDb2Rlc30gZnJvbSAnLi4vZXJyb3JzJztcbmltcG9ydCB7SVN0b3JhZ2V9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9zdG9yYWdlL3N0b3JhZ2UudXRpbHMnO1xuXG5leHBvcnQgY29uc3QgRU5USVRJRVNfU1RPUkFHRV9LRVlfUFJFRklYID0gJ2VudGl0aWVzJztcblxuZXhwb3J0IHR5cGUgRW50aXR5U3RvcmVUeXBlUG9saWN5TW9kZSA9ICdkZWZhdWx0JyB8ICdieS1pZCc7XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBFbnRpdHlTdG9yZVR5cGVQb2xpY3k8VCBleHRlbmRzIEVudGl0eTxULCBhbnk+ID0gRW50aXR5PGFueSwgYW55PiwgSyA9IGtleW9mIFQ+ICB7XG4gIG1vZGU/OiBFbnRpdHlTdG9yZVR5cGVQb2xpY3lNb2RlOyAvLyAnZGVmYXVsdCcgYnkgZGVmYXVsdFxuICBza2lwTm9uTG9jYWxFbnRpdGllcz86IGJvb2xlYW47IC8vIEZhbHNlIGJ5IGRlZmF1bHRcbiAgbGlnaHRGaWVsZHNFeGNsdWRlcz86IEtbXTsgLy8gbm9uZSBieSBkZWZhdWx0XG59XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBFbnRpdHlTdG9yYWdlTG9hZE9wdGlvbnMge1xuICBmdWxsTG9hZD86IGJvb2xlYW47XG59XG5cbmRlY2xhcmUgaW50ZXJmYWNlIEVudGl0eVN0YXR1cyB7XG4gIGluZGV4OiBudW1iZXI7XG4gIGRpcnR5PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIEVudGl0eVN0b3JlPFxuICBUIGV4dGVuZHMgSUVudGl0eTxULCBJRD4sXG4gIElEID0gbnVtYmVyLFxuICBPIGV4dGVuZHMgRW50aXR5U3RvcmFnZUxvYWRPcHRpb25zID0gRW50aXR5U3RvcmFnZUxvYWRPcHRpb25zPiB7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc3RvcmFnZUtleTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vbkNoYW5nZSA9IG5ldyBCZWhhdmlvclN1YmplY3QodHJ1ZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21hcFRvTGlnaHRFbnRpdHk6IChUKSA9PiBUO1xuICBwcml2YXRlIF9jYWNoZTogVFtdO1xuICBwcml2YXRlIF9zdGF0dXNCeUlkOiBNYXA8SUQsIEVudGl0eVN0YXR1cz47XG4gIHByaXZhdGUgX3NlcXVlbmNlOiBudW1iZXI7XG4gIHByaXZhdGUgX2RpcnR5ID0gZmFsc2U7XG4gIHByaXZhdGUgX2xvYWRlZDogYm9vbGVhbjtcblxuICByZWFkb25seSBwb2xpY3k6IEVudGl0eVN0b3JlVHlwZVBvbGljeTxUPjtcblxuICBnZXQgbGVuZ3RoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlPy5sZW5ndGggfHwgMDtcbiAgfVxuXG4gIGdldCBjYWNoZSgpOiBUW10ge1xuICAgIHJldHVybiB0aGlzLl9jYWNoZTtcbiAgfVxuXG4gIGdldCBkaXJ0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlydHk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IGlzQnlJZE1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucG9saWN5Lm1vZGUgPT09ICdieS1pZCc7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHN0b3JhZ2VLZXlCeUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0b3JhZ2VLZXkgKyAnI2lkcyc7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbmFtZTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCByZWFkb25seSBzdG9yYWdlOiBJU3RvcmFnZSxcbiAgICBwb2xpY3k/OiBFbnRpdHlTdG9yZVR5cGVQb2xpY3k8VD4pIHtcbiAgICB0aGlzLnBvbGljeSA9IHBvbGljeSB8fCB7fTtcbiAgICB0aGlzLnJlc2V0KHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgdGhpcy5fZGlydHkgPSBmYWxzZTtcbiAgICB0aGlzLl9sb2FkZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9zdG9yYWdlS2V5ID0gRU5USVRJRVNfU1RPUkFHRV9LRVlfUFJFRklYICsgJyMnICsgbmFtZTtcbiAgICB0aGlzLl9tYXBUb0xpZ2h0RW50aXR5ID0gdGhpcy5jcmVhdGVMaWdodEVudGl0eU1hcEZuKHRoaXMucG9saWN5KTtcbiAgfVxuXG4gIG5leHRWYWx1ZSgpOiBJRCB7XG4gICAgdGhpcy5fc2VxdWVuY2UgPSB0aGlzLl9zZXF1ZW5jZSAtIDE7XG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzLl9zZXF1ZW5jZSBhcyB1bmtub3duIGFzIElEO1xuICB9XG5cbiAgY3VycmVudFZhbHVlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3NlcXVlbmNlO1xuICB9XG5cbiAgYXN5bmMgbG9hZChpZDogSUQsIG9wdHM/OiBFbnRpdHlTdG9yYWdlTG9hZE9wdGlvbnMpOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAodGhpcy5fbWFwVG9MaWdodEVudGl0eSAmJiAoIW9wdHMgfHwgb3B0cy5mdWxsTG9hZCAhPT0gZmFsc2UpKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5sb2FkRnVsbEVudGl0eShpZCwgb3B0cyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmxvYWRDYWNoZWRFbnRpdHkoaWQsIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdhdGNoIGEgc2V0IG9mIGVudGl0aWVzXG4gICAqXG4gICAqIEBwYXJhbSB2YXJpYWJsZXNcbiAgICogQHBhcmFtIG9wdHNcbiAgICovXG4gIHdhdGNoQWxsKHZhcmlhYmxlczoge1xuICAgICAgICAgICAgb2Zmc2V0PzogbnVtYmVyO1xuICAgICAgICAgICAgc2l6ZT86IG51bWJlcjtcbiAgICAgICAgICAgIHNvcnRCeT86IHN0cmluZztcbiAgICAgICAgICAgIHNvcnREaXJlY3Rpb24/OiBzdHJpbmc7XG4gICAgICAgICAgICBmaWx0ZXI/OiAoVCkgPT4gYm9vbGVhbjtcbiAgICAgICAgICB9LCBvcHRzPzogTyk6IE9ic2VydmFibGU8TG9hZFJlc3VsdDxUPj4ge1xuXG4gICAgLy8gSWYgbmVlZCBmdWxsIGVudGl0aWVzLCBidXQgdXNlIGxpZ2h0IGVudGl0aWVzIGluIHRoZSBlbnRpdGllcyBhcnJheVxuICAgIGlmICh0aGlzLl9tYXBUb0xpZ2h0RW50aXR5ICYmIChvcHRzICYmIG9wdHMuZnVsbExvYWQgPT09IHRydWUpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tlbnRpdHktc3RvcmVdIFdBUk46IFdhdGNoaW5nIGZ1bGwgZW50aXRpZXMsIHNwbGl0ZWQgYnkgaWQgaW4gZW50aXR5IHN0b3JlLiBUaGlzIGNhbiBiZSBsb25nISBQbGVhc2UgbWFrZSBzdXJlIHlvdSBuZWVkIGZ1bGwgZW50aXRpZXMgaGVyZS4nKTtcbiAgICAgIHJldHVybiB0aGlzLl9vbkNoYW5nZVxuICAgICAgICAucGlwZShcbiAgICAgICAgICAvLyBBcHBseSBmaWx0ZXIgb24gY2FjaGVcbiAgICAgICAgICBtYXAoKF8pID0+IHRoaXMucmVkdWNlQW5kU29ydCh0aGlzLl9jYWNoZSwgdmFyaWFibGVzKSksXG5cbiAgICAgICAgICAvLyBUaGVuIGNvbnZlcnQgaW50byBmdWxsIGVudGl0aWVzICh1c2luZyBwYXJhbGxlbCBqb2JzIC0gLyFcXCBjYW4gdXNlIGxvdCBvZiBtZW1vcnkpXG4gICAgICAgICAgbWVyZ2VNYXAoKHJlcykgPT4gUHJvbWlzZS5hbGwoKHJlcy5kYXRhIHx8IFtdKVxuICAgICAgICAgICAgLm1hcChlID0+IHRoaXMubG9hZEZ1bGxFbnRpdHkoZS5pZCwgb3B0cykpKS50aGVuKGRhdGEgPT4gKHtcbiAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgIHRvdGFsOiByZXMudG90YWxcbiAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIExvYWQgdXNpbmcgZW50aXRpZXMgYXJyYXlcbiAgICByZXR1cm4gdGhpcy5fb25DaGFuZ2VcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKF8pID0+IHRoaXMucmVkdWNlQW5kU29ydCh0aGlzLl9jYWNoZSwgdmFyaWFibGVzKSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogV0lsbCBhcHBseSBhIGZpbHRlciwgdGhlbiBhIHNvcnQsIHRoZW4gYSBwYWdlIHNsaWNlXG4gICAqXG4gICAqIEBwYXJhbSB2YXJpYWJsZXNcbiAgICogQHBhcmFtIG9wdHNcbiAgICovXG4gIGFzeW5jIGxvYWRBbGwodmFyaWFibGVzOiB7XG4gICAgb2Zmc2V0PzogbnVtYmVyO1xuICAgIHNpemU/OiBudW1iZXI7XG4gICAgc29ydEJ5Pzogc3RyaW5nO1xuICAgIHNvcnREaXJlY3Rpb24/OiBzdHJpbmc7XG4gICAgZmlsdGVyPzogKFQpID0+IGJvb2xlYW47XG4gIH0sIG9wdHM/OiBPKTogUHJvbWlzZTxMb2FkUmVzdWx0PFQ+PiB7XG5cbiAgICBjb25zdCByZXMgPSB0aGlzLnJlZHVjZUFuZFNvcnQodGhpcy5fY2FjaGUsIHZhcmlhYmxlcyk7XG5cbiAgICAvLyBJZiBzdG9yZSBieSBJRDogbWFrZSBzdXJlIHRvIGZ1bGwgdGhlIGZ1bGwgZW50aXRpZXNcbiAgICBpZiAodGhpcy5fbWFwVG9MaWdodEVudGl0eSAmJiBpc05vdEVtcHR5QXJyYXkocmVzLmRhdGEpICYmIChvcHRzICYmIG9wdHMuZnVsbExvYWQgPT09IHRydWUpKSB7XG4gICAgICAvLyBMb2FkIGZ1bGwgZW50aXRpZXMsIG9uZSBieSBvbmVcbiAgICAgIHJlcy5kYXRhID0gYXdhaXQgY2hhaW5Qcm9taXNlcygocmVzLmRhdGEgfHwgW10pLm1hcChlID0+ICgpID0+IHRoaXMubG9hZChlLmlkKSkpO1xuICAgIH1cblxuICAgIHJldHVybiByZXMgO1xuICB9XG5cbiAgc2F2ZShlbnRpdHk6IFQsIG9wdHM/OiB7ZW1pdEV2ZW50PzogYm9vbGVhbn0pOiBUIHtcbiAgICBjb25zdCBzdGF0dXMgPSBpc05vdE5pbChlbnRpdHkuaWQpICYmIHRoaXMuX3N0YXR1c0J5SWQuZ2V0KGVudGl0eS5pZCkgfHwge2luZGV4OiB1bmRlZmluZWR9O1xuICAgIGNvbnN0IGlzTmV3ID0gaXNOaWwoc3RhdHVzLmluZGV4KTtcbiAgICBpZiAoaXNOZXcpIHtcbiAgICAgIGlmIChpc05pbChlbnRpdHkuaWQpKSB7XG4gICAgICAgIGVudGl0eS5pZCA9IHRoaXMubmV4dFZhbHVlKCk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICgrZW50aXR5LmlkIDwgMCAmJiArZW50aXR5LmlkID4gdGhpcy5fc2VxdWVuY2UpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdUcnlpbmcgdG8gc2F2ZSBhIGxvY2FsIGVudGl0eSB3aXRoIGFuIGlkID4gc2VxdWVuY2UuIFdpbGwgcmVwbGFjZSBpZCBieSBzZXF1ZW5jZSBuZXh0IHZhbHVlJyk7XG4gICAgICAgIGVudGl0eS5pZCA9IHRoaXMubmV4dFZhbHVlKCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgLy8gT0s6IHVzZSBhIHZhbGlkIGlkIDpcbiAgICAgICAgLy8gLSBpZCA+PSAwIChzaG91bGQgYmUgYSByZW1vdGUgaWQpXG4gICAgICAgIC8vIC0gT1IgPCBzZXF1ZW5jZSwgYW5kIG5vdCBleGlzdHMgaW4gdGhlIGluZGV4IG1hcFxuICAgICAgfVxuXG4gICAgICB0aGlzLl9zdGF0dXNCeUlkLnNldChlbnRpdHkuaWQsIHN0YXR1cyk7XG4gICAgICBzdGF0dXMuaW5kZXggPSB0aGlzLl9jYWNoZS5wdXNoKGVudGl0eSkgLSAxO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuX2NhY2hlW3N0YXR1cy5pbmRleF0gPSBlbnRpdHk7XG4gICAgfVxuXG4gICAgLy8gTWFyayBlbnRpdHkgYXMgZGlydHlcbiAgICBzdGF0dXMuZGlydHkgPSB0cnVlO1xuXG4gICAgLy8gTWFyayBzdG9yYWdlIGFzIGRpcnR5XG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuXG4gICAgLy8gRW1pdCB1cGRhdGUgZXZlbnRcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgpO1xuICAgIH1cblxuICAgIHJldHVybiBlbnRpdHk7XG4gIH1cblxuICBzYXZlQWxsKGVudGl0aWVzOiBUW10sIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW47IHJlc2V0PzogYm9vbGVhbiB9KTogVFtdIHtcbiAgICBpZiAoaXNFbXB0eUFycmF5KGVudGl0aWVzKSAmJiAoIW9wdHMgfHwgb3B0cy5yZXNldCAhPT0gdHJ1ZSkpIHJldHVybiBlbnRpdGllczsgLy8gU2tpcCAoTm90aGluZyB0byBzYXZlKVxuXG4gICAgbGV0IHJlc3VsdDogVFtdO1xuXG4gICAgY29uc29sZS5pbmZvKGBbZW50aXR5LXN0b3JhZ2VdIFNhdmluZyAke2VudGl0aWVzLmxlbmd0aH0gJHt0aGlzLm5hbWV9KHMpYCk7XG5cbiAgICAvLyBGaXJzdCBzYXZlLCBvciByZXNldCB1c2luZyBnaXZlbiBlbnRpdGllc1xuICAgIGlmIChpc0VtcHR5QXJyYXkodGhpcy5fY2FjaGUpIHx8IChvcHRzICYmIG9wdHMucmVzZXQpKSB7XG4gICAgICB0aGlzLnNldEVudGl0aWVzKGVudGl0aWVzLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IGVudGl0aWVzLm1hcCgoZW50aXR5KSA9PiB0aGlzLnNhdmUoZW50aXR5LCB7ZW1pdEV2ZW50OiBmYWxzZX0pKTtcbiAgICB9XG5cbiAgICAvLyBNYXJrIGFzIGRpcnR5XG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuXG4gICAgLy8gRW1pdCB1cGRhdGUgZXZlbnRcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQgfHwgdGhpcy5fY2FjaGUuc2xpY2UoKTtcbiAgfVxuXG4gIGRlbGV0ZShpZDogSUQsIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSk6IFQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHN0YXR1cyA9IGlzTm90TmlsKGlkKSA/IHRoaXMuX3N0YXR1c0J5SWQuZ2V0KGlkKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBpbmRleCA9IHN0YXR1cyA/IHN0YXR1cy5pbmRleCA6IHVuZGVmaW5lZDtcbiAgICBpZiAoaXNOaWwoaW5kZXgpKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgZW50aXR5ID0gdGhpcy5fY2FjaGVbaW5kZXhdO1xuICAgIGlmICghZW50aXR5KSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgLy8gUmVtb3ZlIGZyb20gY2FjaGVcbiAgICB0aGlzLl9jYWNoZVtpbmRleF0gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fc3RhdHVzQnlJZC5kZWxldGUoZW50aXR5LmlkKTtcblxuICAgIC8vIFJlbW92ZSBmdWxsIGVudGl0eSwgYnkgaWRcbiAgICBpZiAodGhpcy5pc0J5SWRNb2RlKSB7XG4gICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlKHRoaXMuX3N0b3JhZ2VLZXkgKyAnIycgKyBpZCk7XG4gICAgfVxuXG4gICAgLy8gTWFyayBhcyBkaXJ0eVxuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcblxuICAgIC8vIEVtaXQgdXBkYXRlIGV2ZW50XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZW50aXR5IGFzIFQ7XG4gIH1cblxuICBkZWxldGVNYW55KGlkczogSURbXSwgb3B0cz86IHtlbWl0RXZlbnQ/OiBib29sZWFufSk6IFRbXSB7XG5cbiAgICAvLyBEZWxldGUgYnkgaWQsIGJ1dCBOT1QgZW1pdCBldmVudCBvbiBlYWNoIGRlbGV0aW9uXG4gICAgY29uc3QgZGVsZXRlZEVudGl0aWVzID0gKGlkcyB8fCBbXSlcbiAgICAgIC5tYXAoaWQgPT4gdGhpcy5kZWxldGUoaWQsIHtlbWl0RXZlbnQ6IGZhbHNlfSkpXG4gICAgICAuZmlsdGVyKGlzTm90TmlsKTtcblxuICAgIC8vIE5vIGNoYW5nZXM6IGV4aXRcbiAgICBpZiAoIWRlbGV0ZWRFbnRpdGllcy5sZW5ndGgpIHJldHVybiBbXTtcblxuICAgIC8vIEVtaXQgdXBkYXRlIGV2ZW50XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZEVudGl0aWVzO1xuICB9XG5cbiAgcmVzZXQob3B0cz86IHtlbWl0RXZlbnQ/OiBib29sZWFufSkge1xuICAgIHRoaXMuX2NhY2hlID0gW107XG4gICAgdGhpcy5fc2VxdWVuY2UgPSAwO1xuICAgIHRoaXMuX3N0YXR1c0J5SWQgPSBuZXcgTWFwPElELCBhbnk+KCk7XG5cbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5fbG9hZGVkID0gdHJ1ZTtcblxuICAgIC8vIEVtaXQgdXBkYXRlIGV2ZW50XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIG9wdHNcbiAgICogIG9wdHMuc2tpcElmUHJpc3RpbmUgPSBmYWxzZSBwZXJzaXN0IGFsbCBlbnRpdGllcywgZXZlbiBpZiBub3QgZGlydHlcbiAgICovXG4gIGFzeW5jIHBlcnNpc3Qob3B0cyA9IHsgc2tpcElmUHJpc3RpbmU6IHRydWUgfSk6IFByb21pc2U8bnVtYmVyPiB7XG5cbiAgICAvLyBTa2lwIGlzIG5vdCBkaXJ0eVxuICAgIGlmIChvcHRzLnNraXBJZlByaXN0aW5lICYmICF0aGlzLl9kaXJ0eSkge1xuICAgICAgY29uc29sZS5kZWJ1ZyhgW2VudGl0eS1zdG9yYWdlXSBQZXJzaXN0aW5nICR7dGhpcy5uYW1lfSBub3QgbmVlZC4gU2tpcGApO1xuICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvLyBDb3B5IHNvbWUgZGF0YSwgQkVGT1JFIHRvIGNhbGwgbWFya0FzUHJpc3RpbmUoKSB0byBhbGxvdyBwYXJhbGxlbCBjaGFuZ2VzXG4gICAgY29uc3QgZGlydHlJbmRleGVzID0gdGhpcy5pc0J5SWRNb2RlICYmIEFycmF5LmZyb20odGhpcy5fc3RhdHVzQnlJZC52YWx1ZXMoKSlcbiAgICAgIC5maWx0ZXIocyA9PiAhb3B0cy5za2lwSWZQcmlzdGluZSB8fCAocyAmJiBzLmRpcnR5KSlcbiAgICAgIC5tYXAocyA9PiBzLmluZGV4KTtcbiAgICBjb25zdCBlbnRpdGllcyA9IHRoaXMuX2NhY2hlLnNsaWNlKCk7IC8vIENvcHkgY2FjaGVkIGVudGl0aWVzXG5cbiAgICAvLyBNYXJrIGFsbCAoZW50aXRpZXMgYW5kIHN0YXR1cykgYXMgcHJpc3RpbmVcbiAgICB0aGlzLm1hcmtBc1ByaXN0aW5lKHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG5cbiAgICAvLyBDb252ZXJ0IGRpcnR5IGVudGl0aWVzIGludG8gbGlnaHQgZW50aXRpZXMgKC8hXFwgQUZURVIgdGhlIHByZXZpb3VzIGNvcHkpXG4gICAgLy8gYW5kIHVwZGF0ZSB0aGUgY2FjaGUgKGJ1dCBOT1QgdGhlICdlbnRpdGllcycgdmFyaWFibGUpXG4gICAgaWYgKGRpcnR5SW5kZXhlcyAmJiB0aGlzLl9tYXBUb0xpZ2h0RW50aXR5KSB7XG4gICAgICBkaXJ0eUluZGV4ZXMuZm9yRWFjaChpbmRleCA9PiB0aGlzLl9jYWNoZVtpbmRleF0gPSB0aGlzLl9tYXBUb0xpZ2h0RW50aXR5KGVudGl0aWVzW2luZGV4XSkpO1xuICAgIH1cblxuICAgIC8vIElmIG5vIGVudGl0eSBmb3VuZFxuICAgIGlmIChpc0VtcHR5QXJyYXkoZW50aXRpZXMpKSB7XG5cbiAgICAgIC8vIENsZWFuIHRoZSBsb2NhbCBzdG9yYWdlXG4gICAgICBhd2FpdCB0aGlzLnN0b3JhZ2UucmVtb3ZlKHRoaXMuX3N0b3JhZ2VLZXkpO1xuICAgIH1cbiAgICBlbHNlIHtcblxuICAgICAgLy8gU2F2ZSBlYWNoIGVudGl0eSBpbnRvIGEgdW5pcXVlIGtleSAoYWR2YW5jZWQgbW9kZSlcbiAgICAgIGlmICh0aGlzLmlzQnlJZE1vZGUpIHtcbiAgICAgICAgLy8gU2F2ZSBpZHNcbiAgICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnNldCh0aGlzLnN0b3JhZ2VLZXlCeUlkLCBlbnRpdGllcy5maWx0ZXIoaXNOb3ROaWwpLm1hcChlID0+IGUuaWQpKTtcblxuICAgICAgICAvLyBTYXZlZCBkaXJ0eSBlbnRpdGllc1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICBkaXJ0eUluZGV4ZXNcbiAgICAgICAgICAgIC5tYXAoaW5kZXggPT4ge1xuICAgICAgICAgICAgICBjb25zdCBlbnRpdHkgPSBlbnRpdGllc1tpbmRleF07XG4gICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoYFtlbnRpdHktc3RvcmFnZV0gUGVyc2lzdGluZyAke3RoaXMubmFtZX0jJHtlbnRpdHkuaWR9Li4uYCk7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0b3JhZ2Uuc2V0KHRoaXMuX3N0b3JhZ2VLZXkgKyAnIycgKyBlbnRpdHkuaWQsIGVudGl0eSk7XG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgY29uc29sZS5pbmZvKGBbZW50aXR5LXN0b3JhZ2VdIFBlcnNpc3RpbmcgJHtkaXJ0eUluZGV4ZXMubGVuZ3RofS8ke2VudGl0aWVzLmxlbmd0aH0gJHt0aGlzLm5hbWV9KHMpLi4uYCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNhdmUgYWxsIGVudGl0aWVzIGluIGEgc2luZ2xlIGtleSAoZGVmYXVsdClcbiAgICAgIGVsc2Uge1xuXG4gICAgICAgIGNvbnNvbGUuaW5mbyhgW2VudGl0eS1zdG9yYWdlXSBQZXJzaXN0aW5nICR7ZW50aXRpZXMubGVuZ3RofSAke3RoaXMubmFtZX0ocykuLi5gKTtcbiAgICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnNldCh0aGlzLl9zdG9yYWdlS2V5LCBlbnRpdGllcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVudGl0aWVzLmxlbmd0aDtcbiAgfVxuXG4gIGFzeW5jIHJlc3RvcmUob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBsZXQgZW50aXRpZXM6IFRbXTtcblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHRoaXMuc3RvcmFnZS5nZXQodGhpcy5fc3RvcmFnZUtleSksXG4gICAgICB0aGlzLnN0b3JhZ2UuZ2V0KHRoaXMuc3RvcmFnZUtleUJ5SWQpXG4gICAgXSk7XG4gICAgY29uc3QgdmFsdWVzID0gcmVzWzBdICYmIEFycmF5LmlzQXJyYXkocmVzWzBdKSA/IHJlc1swXSA6IG51bGw7XG4gICAgY29uc3QgaWRzID0gcmVzWzFdICYmIEFycmF5LmlzQXJyYXkocmVzWzFdKSA/IHJlc1sxXSA6IG51bGw7XG4gICAgbGV0IG1pZ3JhdGlvbiA9IGZhbHNlO1xuICAgIGxldCBvbGRLZXlzVG9DbGVhbjogc3RyaW5nW107XG5cbiAgICAvLyBcIlNwbGl0IGJ5IGlkXCIgbW9kZVxuICAgIGlmICh0aGlzLmlzQnlJZE1vZGUpIHtcbiAgICAgIGlmIChpc05vdE5pbChpZHMpKSB7XG4gICAgICAgIC8vIExvYWQgZW50aXR5IGJ5IGlkIChvbmUgYnkgb25lKVxuICAgICAgICBjb25zdCBzdG9yYWdlS2V5cyA9IGlkcy5tYXAoaWQgPT4gdGhpcy5fc3RvcmFnZUtleSArICcjJyArIGlkKTtcbiAgICAgICAgZW50aXRpZXMgPSBhd2FpdCBjaGFpblByb21pc2VzPFQ+KHN0b3JhZ2VLZXlzLm1hcChrZXkgPT4gKCkgPT4gdGhpcy5zdG9yYWdlLmdldChrZXkpKSk7XG4gICAgICB9XG4gICAgICAvLyBNaWdyYXRlIGZyb20gdGhlIHN0YW5kYXJkIG1vZGVcbiAgICAgIGVsc2UgaWYgKGlzTm90TmlsKHZhbHVlcykpIHtcbiAgICAgICAgZW50aXRpZXMgPSB2YWx1ZXMuZmlsdGVyKGUgPT4gZSAmJiBpc05vdE5pbChlLmlkKSk7XG4gICAgICAgIG1pZ3JhdGlvbiA9IHRydWU7XG4gICAgICAgIG9sZEtleXNUb0NsZWFuID0gW3RoaXMuX3N0b3JhZ2VLZXldO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEVsc2UgKGRlZmF1bHQgbW9kZSlcbiAgICBlbHNlIHtcbiAgICAgIGlmIChpc05vdE5pbCh2YWx1ZXMpKSB7XG4gICAgICAgIGVudGl0aWVzID0gdmFsdWVzLmZpbHRlcihlID0+IGUgJiYgaXNOb3ROaWwoZS5pZCkpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoaXNOb3ROaWwoaWRzKSkge1xuICAgICAgICBjb25zdCBzdG9yYWdlS2V5cyA9IGlkcy5tYXAoaWQgPT4gdGhpcy5fc3RvcmFnZUtleSArICcjJyArIGlkKTtcbiAgICAgICAgLy8gTG9hZCBlbnRpdHkgYnkgaWQgKG9uZSBieSBvbmUpXG4gICAgICAgIGVudGl0aWVzID0gYXdhaXQgY2hhaW5Qcm9taXNlczxUPihzdG9yYWdlS2V5cy5tYXAoa2V5ID0+ICgpID0+IHRoaXMuc3RvcmFnZS5nZXQoa2V5KSkpO1xuICAgICAgICBtaWdyYXRpb24gPSB0cnVlO1xuICAgICAgICBvbGRLZXlzVG9DbGVhbiA9IFsuLi5zdG9yYWdlS2V5cywgdGhpcy5zdG9yYWdlS2V5QnlJZF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gT0ssIHRoZXJlIGlzIHNvbWV0aGluZyBpbiBzdG9yYWdlLi4uXG4gICAgaWYgKGlzTm90RW1wdHlBcnJheShlbnRpdGllcykpIHtcbiAgICAgIGlmIChlbnRpdGllcy5sZW5ndGggPj0gMTAwMCkge1xuICAgICAgICBjb25zb2xlLndhcm4oYFtlbnRpdHktc3RvcmFnZV0gLSBSZXN0b3JpbmcgJHtlbnRpdGllcy5sZW5ndGh9ICR7dGhpcy5uYW1lfS4gQ2hlY2sgaWYgbm90IHRvbyBtYW55IGVsZW1lbnRzPyFgKTtcbiAgICAgIH1cblxuICAgICAgLy8gTWFwIGVudGl0aWVzIGludG8gbGlnaHQgZWxlbWVudCAoaWYgaWYgbm90IG5lZWQgdG8gcGVyc2lzdCwgYmVjYXVzZSBvZiBtaWdyYXRpb25cbiAgICAgIGlmICh0aGlzLl9tYXBUb0xpZ2h0RW50aXR5ICYmICFtaWdyYXRpb24pIHtcbiAgICAgICAgZW50aXRpZXMgPSBlbnRpdGllcy5tYXAodGhpcy5fbWFwVG9MaWdodEVudGl0eSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zZXRFbnRpdGllcyhlbnRpdGllcyB8fCBbXSwgey4uLm9wdHMsIGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgdGhpcy5fZGlydHkgPSBmYWxzZTtcblxuICAgIC8vIEZpbmlzaCB0aGUgbWlncmF0aW9uXG4gICAgaWYgKG1pZ3JhdGlvbikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc29sZS53YXJuKGBbZW50aXR5LXN0b3JhZ2VdIC0gTWlncmF0ZSAke3RoaXMubmFtZX0gaW50byB7bW9kZTogJyR7dGhpcy5wb2xpY3kubW9kZX0nfS4uLmApO1xuXG4gICAgICAgIC8vIEZvcmNlIHRvIHBlcnNpc3QsIHVzaW5nIHRoZSBuZXcgbW9kZVxuICAgICAgICBhd2FpdCB0aGlzLnBlcnNpc3Qoe3NraXBJZlByaXN0aW5lOiBmYWxzZSAvKiBmb3JjZSBwZXJzaXN0IHVzaW5nIHRoZSBuZXcgbW9kZSAqLyB9KTtcblxuICAgICAgICAvLyBDbGVhbiBvbGQgc3RvcmFnZSBrZXlzIChvbmUgYnkgb25lKVxuICAgICAgICBpZiAoaXNOb3RFbXB0eUFycmF5KG9sZEtleXNUb0NsZWFuKSkgYXdhaXQgY2hhaW5Qcm9taXNlcyhvbGRLZXlzVG9DbGVhbi5tYXAoa2V5ID0+ICgpID0+IHRoaXMuc3RvcmFnZS5yZW1vdmUoa2V5KSkpO1xuICAgICAgfVxuICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgIHRocm93IHtjb2RlOiBFcnJvckNvZGVzLkVOVElUWV9TVE9SQUdFX01JR1JBVElPTl9GQUlMRUQsIG1lc3NhZ2U6ICdFUlJPUi5FTlRJVFlfU1RPUkFHRV9NSUdSQVRJT05fRkFJTEVEJywgZGV0YWlsczogZXJyfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFbWl0IHVwZGF0ZSBldmVudFxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlLmxlbmd0aDtcbiAgfVxuXG4gIG1hcmtBc0RpcnR5KG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcblxuICAgIC8vIEVtaXQgdXBkYXRlIGV2ZW50XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoKTtcbiAgICB9XG4gIH1cblxuICBtYXJrQXNQcmlzdGluZShvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcblxuICAgIGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdGF0dXNCeUlkLnZhbHVlcygpKSB7XG4gICAgICBpZiAoaXNOb3ROaWwocykpIHtcbiAgICAgICAgcy5kaXJ0eSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9kaXJ0eSA9IGZhbHNlO1xuXG4gICAgLy8gRW1pdCB1cGRhdGUgZXZlbnRcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBtZXRob2RzIC0tICovXG5cbiAgcHJpdmF0ZSBsb2FkQ2FjaGVkRW50aXR5KGlkOiBJRCwgb3B0cz86IEVudGl0eVN0b3JhZ2VMb2FkT3B0aW9ucyk6IFQge1xuICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMuX3N0YXR1c0J5SWQuZ2V0KGlkKTtcbiAgICBjb25zdCBpbmRleCA9IHN0YXR1cyAmJiBzdGF0dXMuaW5kZXg7XG4gICAgaWYgKGlzTmlsKGluZGV4KSkgcmV0dXJuIHVuZGVmaW5lZDsgLy8gbm90IGV4aXN0c1xuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHRoaXMuX2NhY2hlW2luZGV4XSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRGdWxsRW50aXR5KGlkOiBJRCwgb3B0cz86IEVudGl0eVN0b3JhZ2VMb2FkT3B0aW9ucyk6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMuX3N0YXR1c0J5SWQuZ2V0KGlkKTtcbiAgICBjb25zdCBpbmRleCA9IHN0YXR1cyAmJiBzdGF0dXMuaW5kZXg7XG4gICAgaWYgKGlzTmlsKGluZGV4KSkgcmV0dXJuIHVuZGVmaW5lZDsgLy8gbm90IGV4aXN0c1xuXG4gICAgLy8gUmVsb2FkIGZyb20gc3RvcmFnZSwgaWYgbmVlZCAoZS5nLiBzb21lIGF0dHJpYnV0ZXMgaGFzIGJlZW4gZXhjbHVkZWQgaW4gbGlnaHQgZWxlbWVudHMpXG4gICAgaWYgKHN0YXR1cy5kaXJ0eSA9PT0gZmFsc2UpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoYFtlbnRpdHktc3RvcmFnZV0gRnVsbCByZWxvYWRpbmcgJHt0aGlzLm5hbWV9IyR7aWR9Li4uYCk7XG4gICAgICBjb25zdCBmdWxsRGF0YSA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXQodGhpcy5fc3RvcmFnZUtleSArICcjJyArIGlkKTtcbiAgICAgIGlmIChmdWxsRGF0YSkgcmV0dXJuIE9iamVjdC5mcmVlemUoZnVsbERhdGEpO1xuICAgICAgLy8gTm90IGZvdW5kIGJ5IGlkLCBjb250aW51ZSBmcm9tIGNhY2hlICh2ZXJzaW9uIHByaW9yIHRvIDEuNS4zKVxuICAgIH1cblxuICAgIC8vIExvYWQgZnJvbSB0aGUgY2FjaGUsIGlmIGRpcnR5IE9SIGlmIHN0b3JhZ2UgaXMgbm90IHNwbGl0dGVkIGJ5IGlkXG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUodGhpcy5fY2FjaGVbaW5kZXhdKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0RW50aXRpZXMoZW50aXRpZXM6IFRbXSwgb3B0cz86IHtlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICAvLyBGaWx0ZXIgbm9uIG5pbCAoYW5kIGlmIG5lZWQgbm9uIGxvY2FsKSBlbnRpdGllc1xuICAgIGVudGl0aWVzID0gKGVudGl0aWVzIHx8IFtdKVxuICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXNOb3ROaWwoaXRlbSlcbiAgICAgICAgICAmJiAoIXRoaXMucG9saWN5LnNraXBOb25Mb2NhbEVudGl0aWVzIHx8ICtpdGVtLmlkIDwgMClcbiAgICAgICAgKTtcblxuICAgIHRoaXMuX2NhY2hlID0gZW50aXRpZXM7XG5cbiAgICAvLyBVcGRhdGUgdGhlIHNlcXVlbmNlIHdpdGggbWluKGlkKSBvZiBhbGwgdGVtcG9yYXJ5IGlkc1xuICAgIHRoaXMuX3NlcXVlbmNlID0gdGhpcy5fY2FjaGUucmVkdWNlKChyZXMsIGl0ZW0pID0+ICtpdGVtLmlkIDwgMCA/IE1hdGgubWluKHJlcywgK2l0ZW0uaWQpIDogcmVzLCAwKTtcblxuICAgIHRoaXMuX3N0YXR1c0J5SWQuY2xlYXIoKTtcbiAgICB0aGlzLl9jYWNoZS5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgdGhpcy5fc3RhdHVzQnlJZC5zZXQoaXRlbS5pZCwgPEVudGl0eVN0YXR1cz57XG4gICAgICAgIGluZGV4LFxuICAgICAgICBkaXJ0eTogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9hZGVkID0gdHJ1ZTtcblxuICAgIC8vIEVtaXQgdXBkYXRlIGV2ZW50XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoKTtcbiAgICB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiBXSWxsIGFwcGx5IGEgZmlsdGVyLCB0aGVuIGEgc29ydCwgdGhlbiBhIHBhZ2Ugc2xpY2VcbiAgICpcbiAgICogQHBhcmFtIGRhdGFcbiAgICogQHBhcmFtIHZhcmlhYmxlc1xuICAgKi9cbiAgcHJpdmF0ZSByZWR1Y2VBbmRTb3J0KGRhdGE6IFRbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ/OiBudW1iZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU/OiBudW1iZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRCeT86IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydERpcmVjdGlvbj86IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyPzogKFQpID0+IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTogTG9hZFJlc3VsdDxUPiB7XG4gICAgaWYgKGlzRW1wdHlBcnJheShkYXRhKSkge1xuICAgICAgcmV0dXJuIHtkYXRhOiBbXSwgdG90YWw6IDB9O1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSBuaWwgdmFsdWVzXG4gICAgZGF0YSA9IGRhdGEuZmlsdGVyKGlzTm90TmlsKTtcblxuICAgIGlmICghdmFyaWFibGVzKSB7XG4gICAgICAvLyBSZXR1cm4gYWxsIChidXQgYXJyYXkgaGFzIGJlZW4gZmlsdGVyZWQsIGFuZCBjb3BpZWQpXG4gICAgICByZXR1cm4ge2RhdGEsIHRvdGFsOiBkYXRhLmxlbmd0aH07XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgdGhlIGZpbHRlciwgaWYgYW55XG4gICAgaWYgKHZhcmlhYmxlcy5maWx0ZXIpIHtcbiAgICAgIGRhdGEgPSBkYXRhLmZpbHRlcih2YXJpYWJsZXMuZmlsdGVyKTtcbiAgICB9XG5cbiAgICAvLyBDb21wdXRlIHRoZSB0b3RhbCBsZW5ndGhcbiAgICBjb25zdCB0b3RhbCA9IGRhdGEubGVuZ3RoO1xuXG4gICAgLy8gSWYgcGFnZSBzaXplPTAgKGUuZy4gb25seSBuZWVkIHRvdGFsKVxuICAgIGlmICh2YXJpYWJsZXMuc2l6ZSA9PT0gMCkgcmV0dXJuIHtkYXRhOiBbXSwgdG90YWx9O1xuXG4gICAgLy8gU29ydCBieVxuICAgIGlmICh2YXJpYWJsZXMuc29ydEJ5KSB7XG4gICAgICBFbnRpdHlVdGlscy5zb3J0KGRhdGEsIHZhcmlhYmxlcy5zb3J0QnksIHZhcmlhYmxlcy5zb3J0RGlyZWN0aW9uKTtcbiAgICB9XG5cbiAgICAvLyBTbGljZSBpbiBhIHBhZ2UgKHVzaW5nIG9mZnNldCBhbmQgc2l6ZSlcbiAgICBpZiAodmFyaWFibGVzLm9mZnNldCA+IDApIHtcblxuICAgICAgLy8gT2Zmc2V0IGFmdGVyIHRoZSBlbmQ6IG5vIHJlc3VsdFxuICAgICAgaWYgKHZhcmlhYmxlcy5vZmZzZXQgPj0gZGF0YS5sZW5ndGggfHwgdmFyaWFibGVzLnNpemUgPT09IDApIHtcbiAgICAgICAgZGF0YSA9IFtdO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGRhdGEgPSAodmFyaWFibGVzLnNpemUgPiAwICYmICgodmFyaWFibGVzLm9mZnNldCArIHZhcmlhYmxlcy5zaXplKSA8IGRhdGEubGVuZ3RoKSkgP1xuICAgICAgICAgIC8vIFNsaWNlIHVzaW5nIGxpbWl0IHRvIHNpemVcbiAgICAgICAgICBkYXRhLnNsaWNlKHZhcmlhYmxlcy5vZmZzZXQsIHZhcmlhYmxlcy5vZmZzZXQgKyB2YXJpYWJsZXMuc2l6ZSkgOlxuICAgICAgICAgIC8vIFNsaWNlIHdpdGhvdXQgbGltaXRcbiAgICAgICAgICBkYXRhLnNsaWNlKHZhcmlhYmxlcy5vZmZzZXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFwcGx5IGEgbGltaXRcbiAgICBlbHNlIGlmICh2YXJpYWJsZXMuc2l6ZSA+IDApe1xuICAgICAgZGF0YSA9IGRhdGEuc2xpY2UoMCwgdmFyaWFibGVzLnNpemUpO1xuICAgIH1cbiAgICAvLyBObyBsaW1pdDpcbiAgICBlbHNlIGlmICh2YXJpYWJsZXMuc2l6ZSA9PT0gLTEpe1xuICAgICAgLy8gS2VlcCBhbGwgZGF0YVxuICAgIH1cblxuICAgIHJldHVybiB7ZGF0YSwgdG90YWx9O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVMaWdodEVudGl0eU1hcEZuKHBvbGljeTogRW50aXR5U3RvcmVUeXBlUG9saWN5PFQ+KTogKFQpID0+IFQge1xuICAgIGlmIChwb2xpY3kubW9kZSAhPT0gJ2J5LWlkJykgcmV0dXJuIHVuZGVmaW5lZDsgLy8gT25seSBuZWVkIGZvciB0aGUgJ2J5LWlkJyBtb2RlXG4gICAgaWYgKGlzRW1wdHlBcnJheShwb2xpY3kubGlnaHRGaWVsZHNFeGNsdWRlcykpIHJldHVybiB1bmRlZmluZWQ7IC8vIHNraXBcblxuICAgIC8vIENyZWF0ZSBhIGltbXV0YWJsZSBtYXNrIG9iamVjdCwgdXNlIHRvIGNsZWFuIHNvbWUgcHJvcGVydGllc1xuICAgIGNvbnN0IGV4Y2x1ZGVBdHRyaWJ1dGVzTWFzayA9IE9iamVjdC5mcmVlemUodGhpcy5wb2xpY3kubGlnaHRGaWVsZHNFeGNsdWRlcy5yZWR1Y2UoKHJlcywgYXR0cikgPT4ge1xuICAgICAgcmVzW2F0dHJdID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9LCA8VD57fSkpO1xuXG4gICAgcmV0dXJuIChlbnRpdHkpID0+IGVudGl0eSA/IE9iamVjdC5hc3NpZ24oPFQ+e30sIGVudGl0eSwgZXhjbHVkZUF0dHJpYnV0ZXNNYXNrKSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIGVudGl0aWVzU3ViamVjdC5cbiAgICpcbiAgICogQmVmb3JlIHdlbmRpbmcgaXRlbXMsIGEgZmlsdGVyIGlzIGFwcGx5LCB0byByZW1vdmUgbnVsbCB2YWx1ZS5cbiAgICogVGhpcyBmaWx0ZXIgd2lsbCBjcmVhdGUgYSBhcnJheSBjb3B5LlxuICAgKi9cbiAgcHJpdmF0ZSBlbWl0RXZlbnQoKSB7XG4gICAgdGhpcy5fb25DaGFuZ2UubmV4dCh0cnVlKTtcbiAgfVxufVxuIl19
@@ -1,23 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { EntityClass } from '../model/entity.decorators';
3
- import { EntityFilter } from '../model/filter.model';
4
- import { EntityUtils } from '../model/entity.model';
5
- // @dynamic
6
- let ReferentialFilter = class ReferentialFilter extends EntityFilter {
7
- fromObject(source, opts) {
8
- super.fromObject(source, opts);
9
- this.searchText = source.searchText;
10
- }
11
- buildFilter() {
12
- const target = super.buildFilter();
13
- const searchTextFn = EntityUtils.searchTextFilter(['label', 'name'], this.searchText);
14
- if (searchTextFn)
15
- target.push(searchTextFn);
16
- return target;
17
- }
18
- };
19
- ReferentialFilter = __decorate([
20
- EntityClass({ typename: 'ReferentialFilterVO' })
21
- ], ReferentialFilter);
22
- export { ReferentialFilter };
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJlbnRpYWwtZmlsdGVyLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL3Rlc3RpbmcvcmVmZXJlbnRpYWwtZmlsdGVyLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDdkQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRW5ELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUdsRCxXQUFXO0FBRVgsSUFBYSxpQkFBaUIsR0FBOUIsTUFBYSxpQkFBa0IsU0FBUSxZQUE0QztJQU1qRixVQUFVLENBQUMsTUFBVyxFQUFFLElBQVU7UUFDaEMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO0lBQ3RDLENBQUM7SUFFUyxXQUFXO1FBQ25CLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVuQyxNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RGLElBQUksWUFBWTtZQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFNUMsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGLENBQUE7QUFuQlksaUJBQWlCO0lBRDdCLFdBQVcsQ0FBQyxFQUFDLFFBQVEsRUFBRSxxQkFBcUIsRUFBQyxDQUFDO0dBQ2xDLGlCQUFpQixDQW1CN0I7U0FuQlksaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtFbnRpdHlDbGFzc30gZnJvbSAnLi4vbW9kZWwvZW50aXR5LmRlY29yYXRvcnMnO1xuaW1wb3J0IHtFbnRpdHlGaWx0ZXJ9IGZyb20gJy4uL21vZGVsL2ZpbHRlci5tb2RlbCc7XG5pbXBvcnQge1JlZmVyZW50aWFsfSBmcm9tICcuLi9tb2RlbC9yZWZlcmVudGlhbC5tb2RlbCc7XG5pbXBvcnQge0VudGl0eVV0aWxzfSBmcm9tICcuLi9tb2RlbC9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHtGaWx0ZXJGbn0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2VudGl0eS1zZXJ2aWNlLmNsYXNzJztcblxuLy8gQGR5bmFtaWNcbkBFbnRpdHlDbGFzcyh7dHlwZW5hbWU6ICdSZWZlcmVudGlhbEZpbHRlclZPJ30pXG5leHBvcnQgY2xhc3MgUmVmZXJlbnRpYWxGaWx0ZXIgZXh0ZW5kcyBFbnRpdHlGaWx0ZXI8UmVmZXJlbnRpYWxGaWx0ZXIsIFJlZmVyZW50aWFsPiB7XG5cbiAgc3RhdGljIGZyb21PYmplY3Q6IChzb3VyY2U6IGFueSwgb3B0cz86IGFueSkgPT4gUmVmZXJlbnRpYWxGaWx0ZXI7XG5cbiAgc2VhcmNoVGV4dDogc3RyaW5nO1xuXG4gIGZyb21PYmplY3Qoc291cmNlOiBhbnksIG9wdHM/OiBhbnkpIHtcbiAgICBzdXBlci5mcm9tT2JqZWN0KHNvdXJjZSwgb3B0cyk7XG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gc291cmNlLnNlYXJjaFRleHQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgYnVpbGRGaWx0ZXIoKTogRmlsdGVyRm48UmVmZXJlbnRpYWw+W10ge1xuICAgIGNvbnN0IHRhcmdldCA9IHN1cGVyLmJ1aWxkRmlsdGVyKCk7XG5cbiAgICBjb25zdCBzZWFyY2hUZXh0Rm4gPSBFbnRpdHlVdGlscy5zZWFyY2hUZXh0RmlsdGVyKFsnbGFiZWwnLCAnbmFtZSddLCB0aGlzLnNlYXJjaFRleHQpO1xuICAgIGlmIChzZWFyY2hUZXh0Rm4pIHRhcmdldC5wdXNoKHNlYXJjaFRleHRGbik7XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG59XG4iXX0=
@@ -1,45 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { Validators } from '@angular/forms';
3
- import { AppValidatorService } from '../validator/base.validator.class';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/forms";
6
- export class ReferentialValidatorService extends AppValidatorService {
7
- constructor(formBuilder) {
8
- super(formBuilder);
9
- this.formBuilder = formBuilder;
10
- }
11
- getRowValidator() {
12
- return this.getFormGroup();
13
- }
14
- getFormGroup(data, opts) {
15
- return this.formBuilder.group(this.getFormGroupConfig(data, opts), this.getFormGroupOptions(data, opts));
16
- }
17
- getFormGroupConfig(data, opts) {
18
- const controlsConfig = {
19
- id: [data && data.id || null],
20
- updateDate: [data && data.updateDate || null],
21
- creationDate: [data && data.creationDate || null],
22
- statusId: [data && data.statusId || null, Validators.required],
23
- levelId: [data && data.levelId || null],
24
- label: [data && data.label || null, Validators.required],
25
- name: [data && data.name || null, Validators.required],
26
- entityName: [data && data.entityName || null, Validators.required]
27
- };
28
- if (!opts || opts.withDescription !== false) {
29
- controlsConfig.description = [data && data.description || null, Validators.maxLength(255)];
30
- }
31
- if (!opts || opts.withComments !== false) {
32
- controlsConfig.comments = [data && data.comments || null, Validators.maxLength(2000)];
33
- }
34
- return controlsConfig;
35
- }
36
- getFormGroupOptions(data, opts) {
37
- return null;
38
- }
39
- }
40
- ReferentialValidatorService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ReferentialValidatorService, deps: [{ token: i1.UntypedFormBuilder }], target: i0.ɵɵFactoryTarget.Injectable });
41
- ReferentialValidatorService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ReferentialValidatorService });
42
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ReferentialValidatorService, decorators: [{
43
- type: Injectable
44
- }], ctorParameters: function () { return [{ type: i1.UntypedFormBuilder }]; } });
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJlbnRpYWwudmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL3Rlc3RpbmcvcmVmZXJlbnRpYWwudmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUErRCxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4RyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQzs7O0FBSXRFLE1BQU0sT0FBTywyQkFDWCxTQUFRLG1CQUFzQjtJQUU5QixZQUFzQixXQUErQjtRQUNuRCxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFEQyxnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7SUFFckQsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsWUFBWSxDQUFDLElBQVEsRUFBRSxJQUd0QjtRQUNDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQzNCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQ25DLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQ3JDLENBQUM7SUFDSixDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBUSxFQUFFLElBRzVCO1FBQ0MsTUFBTSxjQUFjLEdBQXlCO1lBQzNDLEVBQUUsRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztZQUM3QixVQUFVLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUM7WUFDN0MsWUFBWSxFQUFFLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDO1lBQ2pELFFBQVEsRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQzlELE9BQU8sRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQztZQUN2QyxLQUFLLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUN4RCxJQUFJLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUN0RCxVQUFVLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztTQUNuRSxDQUFDO1FBRUYsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLEtBQUssRUFBRTtZQUMzQyxjQUFjLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUM1RjtRQUNELElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxLQUFLLEVBQUU7WUFDeEMsY0FBYyxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDdkY7UUFFRCxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0lBRUQsbUJBQW1CLENBQUMsSUFBUSxFQUFFLElBQVU7UUFDdEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOzt3SEFoRFUsMkJBQTJCOzRIQUEzQiwyQkFBMkI7MkZBQTNCLDJCQUEyQjtrQkFEdkMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Fic3RyYWN0Q29udHJvbE9wdGlvbnMsIFVudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Hcm91cCwgVmFsaWRhdG9yc30gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtSZWZlcmVudGlhbH0gZnJvbSAnLi4vbW9kZWwvcmVmZXJlbnRpYWwubW9kZWwnO1xuaW1wb3J0IHtBcHBWYWxpZGF0b3JTZXJ2aWNlfSBmcm9tICcuLi92YWxpZGF0b3IvYmFzZS52YWxpZGF0b3IuY2xhc3MnO1xuaW1wb3J0IHtTdGF0dXNJZHN9IGZyb20gJy4uL21vZGVsL21vZGVsLmVudW0nO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUmVmZXJlbnRpYWxWYWxpZGF0b3JTZXJ2aWNlPFQgZXh0ZW5kcyBSZWZlcmVudGlhbCA9IFJlZmVyZW50aWFsPlxuICBleHRlbmRzIEFwcFZhbGlkYXRvclNlcnZpY2U8VD4ge1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyKSB7XG4gICAgc3VwZXIoZm9ybUJ1aWxkZXIpO1xuICB9XG5cbiAgZ2V0Um93VmFsaWRhdG9yKCk6IFVudHlwZWRGb3JtR3JvdXAge1xuICAgIHJldHVybiB0aGlzLmdldEZvcm1Hcm91cCgpO1xuICB9XG5cbiAgZ2V0Rm9ybUdyb3VwKGRhdGE/OiBULCBvcHRzPzoge1xuICAgIHdpdGhEZXNjcmlwdGlvbj86IGJvb2xlYW47XG4gICAgd2l0aENvbW1lbnRzPzogYm9vbGVhbjtcbiAgfSk6IFVudHlwZWRGb3JtR3JvdXAge1xuICAgIHJldHVybiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKFxuICAgICAgdGhpcy5nZXRGb3JtR3JvdXBDb25maWcoZGF0YSwgb3B0cyksXG4gICAgICB0aGlzLmdldEZvcm1Hcm91cE9wdGlvbnMoZGF0YSwgb3B0cylcbiAgICApO1xuICB9XG5cbiAgZ2V0Rm9ybUdyb3VwQ29uZmlnKGRhdGE/OiBULCBvcHRzPzoge1xuICAgIHdpdGhEZXNjcmlwdGlvbj86IGJvb2xlYW47XG4gICAgd2l0aENvbW1lbnRzPzogYm9vbGVhbjtcbiAgfSk6IHtba2V5OiBzdHJpbmddOiBhbnl9IHtcbiAgICBjb25zdCBjb250cm9sc0NvbmZpZzoge1trZXk6IHN0cmluZ106IGFueX0gPSB7XG4gICAgICBpZDogW2RhdGEgJiYgZGF0YS5pZCB8fCBudWxsXSxcbiAgICAgIHVwZGF0ZURhdGU6IFtkYXRhICYmIGRhdGEudXBkYXRlRGF0ZSB8fCBudWxsXSxcbiAgICAgIGNyZWF0aW9uRGF0ZTogW2RhdGEgJiYgZGF0YS5jcmVhdGlvbkRhdGUgfHwgbnVsbF0sXG4gICAgICBzdGF0dXNJZDogW2RhdGEgJiYgZGF0YS5zdGF0dXNJZCB8fCBudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIGxldmVsSWQ6IFtkYXRhICYmIGRhdGEubGV2ZWxJZCB8fCBudWxsXSxcbiAgICAgIGxhYmVsOiBbZGF0YSAmJiBkYXRhLmxhYmVsIHx8IG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgbmFtZTogW2RhdGEgJiYgZGF0YS5uYW1lIHx8IG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgZW50aXR5TmFtZTogW2RhdGEgJiYgZGF0YS5lbnRpdHlOYW1lIHx8IG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdXG4gICAgfTtcblxuICAgIGlmICghb3B0cyB8fCBvcHRzLndpdGhEZXNjcmlwdGlvbiAhPT0gZmFsc2UpIHtcbiAgICAgIGNvbnRyb2xzQ29uZmlnLmRlc2NyaXB0aW9uID0gW2RhdGEgJiYgZGF0YS5kZXNjcmlwdGlvbiB8fCBudWxsLCBWYWxpZGF0b3JzLm1heExlbmd0aCgyNTUpXTtcbiAgICB9XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMud2l0aENvbW1lbnRzICE9PSBmYWxzZSkge1xuICAgICAgY29udHJvbHNDb25maWcuY29tbWVudHMgPSBbZGF0YSAmJiBkYXRhLmNvbW1lbnRzIHx8IG51bGwsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDIwMDApXTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udHJvbHNDb25maWc7XG4gIH1cblxuICBnZXRGb3JtR3JvdXBPcHRpb25zKGRhdGE/OiBULCBvcHRzPzogYW55KTogQWJzdHJhY3RDb250cm9sT3B0aW9ucyB8IG51bGwge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG4iXX0=