http-request-manager 18.15.33 → 18.15.34

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 (300) hide show
  1. package/TEST_COVERAGE_SUMMARY.md +458 -0
  2. package/ng-package.json +8 -0
  3. package/package.json +4 -13
  4. package/src/docs/ADVANCED_WEBSOCKET.md +633 -0
  5. package/src/docs/ARCHITECTURE.md +633 -0
  6. package/src/docs/BATCH_REQUEST_README.md +467 -0
  7. package/src/docs/COMPLETE_API_REFERENCE.md +1037 -0
  8. package/src/docs/DATABASE_README.md +1195 -0
  9. package/src/docs/ENCRYPTION_README.md +403 -0
  10. package/src/docs/HTTP_MANAGER_README.md +628 -0
  11. package/src/docs/HTTP_SINGNALS_MANAGER_README.md +654 -0
  12. package/src/docs/HTTP_STATE_MANAGER_README.md +1391 -0
  13. package/src/docs/INTERCEPTOR_README.md +549 -0
  14. package/src/docs/LOCAL_STORAGE_README.md +1056 -0
  15. package/src/docs/LOCAL_STORAGE_SIGNALS_README.md +338 -0
  16. package/src/docs/LOGGER_README.md +310 -0
  17. package/src/docs/MESSAGE_TRACKER_README.md +518 -0
  18. package/src/docs/MESSAGE_TRACKER_SIGNALS_README.md +563 -0
  19. package/src/docs/MODELS_README.md +1264 -0
  20. package/src/docs/SIGNAL_SERVICES_README.md +238 -0
  21. package/src/docs/SQL_DIXIE_README.md +574 -0
  22. package/src/docs/STORE_STATE_MANAGER_README.md +556 -0
  23. package/src/docs/STORE_STATE_SIGNALS_README.md +600 -0
  24. package/src/docs/UPLOAD_REQUEST_README.md +324 -0
  25. package/src/docs/UTILS_README.md +1604 -0
  26. package/src/docs/WEBSOCKET_MESSAGE_SERVICE.md +799 -0
  27. package/src/docs/WEBSOCKET_SIGNALS_README.md +641 -0
  28. package/src/docs/WEBSOCKET_SINGLETON_REFACTORING.md +201 -0
  29. package/src/docs/WS_MANAGER_README.md +613 -0
  30. package/src/lib/http-request-manager.module.ts +147 -0
  31. package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.html +116 -0
  32. package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.scss +0 -0
  33. package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.ts +255 -0
  34. package/src/lib/http-request-services-demo/http-request-services-demo.component.html +123 -0
  35. package/src/lib/http-request-services-demo/http-request-services-demo.component.scss +6 -0
  36. package/src/lib/http-request-services-demo/http-request-services-demo.component.ts +53 -0
  37. package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.html +195 -0
  38. package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.scss +17 -0
  39. package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.ts +208 -0
  40. package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.html +200 -0
  41. package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.scss +17 -0
  42. package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.ts +214 -0
  43. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/download-file/download-file.component.html +53 -0
  44. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/download-file/download-file.component.scss +60 -0
  45. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/download-file/download-file.component.ts +72 -0
  46. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/file-download.module.ts +28 -0
  47. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/file-downloader.component.html +10 -0
  48. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/file-downloader.component.scss +29 -0
  49. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/file-downloader.component.ts +100 -0
  50. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/models/download-labels-model.ts +22 -0
  51. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/spinner/spinner.component.html +8 -0
  52. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/spinner/spinner.component.scss +19 -0
  53. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/spinner/spinner.component.ts +26 -0
  54. package/src/lib/http-request-services-demo/request-manager-basic-demo/models/app-session.model.ts +30 -0
  55. package/src/lib/http-request-services-demo/request-manager-basic-demo/models/app.model.ts +19 -0
  56. package/src/lib/http-request-services-demo/request-manager-basic-demo/models/get-sample.model.ts +25 -0
  57. package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-ai-prompt.ts +19 -0
  58. package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-client-details.ts +24 -0
  59. package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-client-info.ts +30 -0
  60. package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-client.model.ts +49 -0
  61. package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-mapper-client-info.ts +33 -0
  62. package/src/lib/http-request-services-demo/request-manager-basic-demo/request-manager-basic-demo.component.html +279 -0
  63. package/src/lib/http-request-services-demo/request-manager-basic-demo/request-manager-basic-demo.component.scss +24 -0
  64. package/src/lib/http-request-services-demo/request-manager-basic-demo/request-manager-basic-demo.component.ts +461 -0
  65. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.html +53 -0
  66. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.scss +60 -0
  67. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.ts +72 -0
  68. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-download.module.ts +28 -0
  69. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.html +10 -0
  70. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.scss +29 -0
  71. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.ts +100 -0
  72. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/models/download-labels-model.ts +22 -0
  73. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.html +8 -0
  74. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.scss +19 -0
  75. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.ts +26 -0
  76. package/src/lib/http-request-services-demo/request-manager-demo/models/app-session.model.ts +30 -0
  77. package/src/lib/http-request-services-demo/request-manager-demo/models/app.model.ts +19 -0
  78. package/src/lib/http-request-services-demo/request-manager-demo/models/get-sample.model.ts +25 -0
  79. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-ai-prompt.ts +19 -0
  80. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client-details.ts +24 -0
  81. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client-info.ts +30 -0
  82. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client.model.ts +49 -0
  83. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-mapper-client-info.ts +33 -0
  84. package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.html +622 -0
  85. package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.scss +106 -0
  86. package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.ts +687 -0
  87. package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.html +418 -0
  88. package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.scss +24 -0
  89. package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.ts +576 -0
  90. package/src/lib/http-request-services-demo/request-manager-state-demo/services/state-manager-demo.service.ts +89 -0
  91. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/services/state-data-request.service.ts +119 -0
  92. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.css +0 -0
  93. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.html +3 -0
  94. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.ts +16 -0
  95. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.css +0 -0
  96. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.html +3 -0
  97. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.ts +16 -0
  98. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.css +31 -0
  99. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.html +94 -0
  100. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.scss +41 -0
  101. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.spec.ts +203 -0
  102. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.ts +144 -0
  103. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.css +11 -0
  104. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.html +102 -0
  105. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.spec.ts +40 -0
  106. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.ts +230 -0
  107. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.css +30 -0
  108. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.html +172 -0
  109. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.spec.ts +31 -0
  110. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.ts +239 -0
  111. package/src/lib/http-request-services-demo/request-manager-ws-demo/models/oidc-client.model.ts +31 -0
  112. package/src/lib/http-request-services-demo/request-manager-ws-demo/models/user-data.model.ts +32 -0
  113. package/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.css +0 -0
  114. package/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.html +84 -0
  115. package/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.ts +40 -0
  116. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/index.ts +3 -0
  117. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/jwt-token.service.ts +62 -0
  118. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/message-service-demo.service.ts +83 -0
  119. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/notification-service-demo.service.ts +147 -0
  120. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/state-service-demo.service.ts +168 -0
  121. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.html +53 -0
  122. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.scss +60 -0
  123. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.ts +72 -0
  124. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-download.module.ts +28 -0
  125. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.html +10 -0
  126. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.scss +29 -0
  127. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.ts +100 -0
  128. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/models/download-labels-model.ts +22 -0
  129. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.html +8 -0
  130. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.scss +19 -0
  131. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.ts +26 -0
  132. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/app-session.model.ts +30 -0
  133. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/app.model.ts +19 -0
  134. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/get-sample.model.ts +25 -0
  135. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-ai-prompt.ts +19 -0
  136. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client-details.ts +24 -0
  137. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client-info.ts +30 -0
  138. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client.model.ts +49 -0
  139. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-mapper-client-info.ts +33 -0
  140. package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.html +380 -0
  141. package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.scss +24 -0
  142. package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.ts +410 -0
  143. package/src/lib/http-request-services-demo/store-state-manager-demo/models/settings.model.ts +28 -0
  144. package/src/lib/http-request-services-demo/store-state-manager-demo/services/settings-state.service.ts +49 -0
  145. package/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.css +0 -0
  146. package/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.html +23 -0
  147. package/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.ts +36 -0
  148. package/src/lib/http-request-services-demo/store-state-signals-demo/store-state-signals-demo.component.ts +161 -0
  149. package/src/lib/http-request-services-demo/upload-demo/models/index.ts +1 -0
  150. package/src/lib/http-request-services-demo/upload-demo/models/upload-state.model.ts +30 -0
  151. package/src/lib/http-request-services-demo/upload-demo/upload-demo.component.html +89 -0
  152. package/src/lib/http-request-services-demo/upload-demo/upload-demo.component.scss +160 -0
  153. package/src/lib/http-request-services-demo/upload-demo/upload-demo.component.spec.ts +101 -0
  154. package/src/lib/http-request-services-demo/upload-demo/upload-demo.component.ts +136 -0
  155. package/src/lib/index.ts +3 -0
  156. package/src/lib/interceptors/credentials.interceptor.ts +16 -0
  157. package/src/lib/interceptors/index.ts +6 -0
  158. package/src/lib/interceptors/models/error-settings.model.ts +22 -0
  159. package/src/lib/interceptors/models/index.ts +2 -0
  160. package/src/lib/interceptors/proxy-debugger.interceptor.ts +46 -0
  161. package/src/lib/interceptors/request-error.interceptor.ts +65 -0
  162. package/src/lib/interceptors/request-header.interceptor.ts +56 -0
  163. package/src/lib/message-display/README.md +509 -0
  164. package/src/lib/message-display/index.ts +4 -0
  165. package/src/lib/message-display/models/action.model.ts +27 -0
  166. package/src/lib/message-display/models/communication-message.model.ts +77 -0
  167. package/src/lib/message-display/models/display-config.model.ts +35 -0
  168. package/src/lib/message-display/models/display-rule.interface.ts +28 -0
  169. package/src/lib/message-display/models/display-strategy.interface.ts +8 -0
  170. package/src/lib/message-display/models/index.ts +6 -0
  171. package/src/lib/message-display/models/slide.model.ts +24 -0
  172. package/src/lib/message-display/rules/default-display-rules.ts +35 -0
  173. package/src/lib/message-display/services/message-display-router.service.ts +63 -0
  174. package/src/lib/message-display/strategies/snackbar.strategy.ts +46 -0
  175. package/src/lib/models/batch-options.model.ts +33 -0
  176. package/src/lib/models/batch-progress.model.ts +19 -0
  177. package/src/lib/models/batch-request-state.model.ts +40 -0
  178. package/src/lib/models/batch-result.model.ts +30 -0
  179. package/src/lib/models/config-http-options.model.ts +45 -0
  180. package/src/lib/models/config-local-storage-options.model.ts +27 -0
  181. package/src/lib/models/config-options.model.ts +27 -0
  182. package/src/lib/models/config-token.model.ts +9 -0
  183. package/src/lib/models/data-type.enum.ts +5 -0
  184. package/src/lib/models/database-storage.model.ts +24 -0
  185. package/src/lib/models/index.ts +16 -0
  186. package/src/lib/models/retry-options.model.ts +22 -0
  187. package/src/lib/models/upload-validation-error.model.ts +46 -0
  188. package/src/lib/services/SQL-DixieJS service/dexie-query-executor.ts +246 -0
  189. package/src/lib/services/SQL-DixieJS service/dexie-sql.service.ts +31 -0
  190. package/src/lib/services/SQL-DixieJS service/index.ts +4 -0
  191. package/src/lib/services/SQL-DixieJS service/models/execution-plan.model.ts +52 -0
  192. package/src/lib/services/SQL-DixieJS service/models/index.ts +3 -0
  193. package/src/lib/services/SQL-DixieJS service/models/sql-errors.model.ts +13 -0
  194. package/src/lib/services/SQL-DixieJS service/models/sql-options.model.ts +3 -0
  195. package/src/lib/services/SQL-DixieJS service/query-planner.ts +284 -0
  196. package/src/lib/services/SQL-DixieJS service/schema-validator.ts +217 -0
  197. package/src/lib/services/SQL-DixieJS service/sql-parser.ts +35 -0
  198. package/src/lib/services/database-manager-service/database.manager.service.ts +384 -0
  199. package/src/lib/services/database-manager-service/db.storage.service.ts +240 -0
  200. package/src/lib/services/database-manager-service/index.ts +4 -0
  201. package/src/lib/services/database-manager-service/models/index.ts +2 -0
  202. package/src/lib/services/database-manager-service/models/table-schema.ts +33 -0
  203. package/src/lib/services/index.ts +20 -0
  204. package/src/lib/services/local-storage-manager-service/index.ts +4 -0
  205. package/src/lib/services/local-storage-manager-service/local-storage-manager.service.spec.ts +71 -0
  206. package/src/lib/services/local-storage-manager-service/local-storage-manager.service.ts +567 -0
  207. package/src/lib/services/local-storage-manager-service/local-storage-signals-manager.service.spec.ts +67 -0
  208. package/src/lib/services/local-storage-manager-service/local-storage-signals-manager.service.ts +437 -0
  209. package/src/lib/services/local-storage-manager-service/models/global-store-options.model.ts +30 -0
  210. package/src/lib/services/local-storage-manager-service/models/index.ts +6 -0
  211. package/src/lib/services/local-storage-manager-service/models/setting-options.model.ts +35 -0
  212. package/src/lib/services/local-storage-manager-service/models/storage-data.model.ts +24 -0
  213. package/src/lib/services/local-storage-manager-service/models/storage-option.model.ts +32 -0
  214. package/src/lib/services/local-storage-manager-service/models/storage-type.enum.ts +5 -0
  215. package/src/lib/services/request-manager-services/README.md +282 -0
  216. package/src/lib/services/request-manager-services/http-manager-signals.service.ts +674 -0
  217. package/src/lib/services/request-manager-services/http-manager.service.spec.ts +353 -0
  218. package/src/lib/services/request-manager-services/http-manager.service.ts +727 -0
  219. package/src/lib/services/request-manager-services/index.ts +8 -0
  220. package/src/lib/services/request-manager-services/request-signals.service.ts +372 -0
  221. package/src/lib/services/request-manager-services/request.service.ts +435 -0
  222. package/src/lib/services/request-manager-services/rxjs-operators/countdown.ts +17 -0
  223. package/src/lib/services/request-manager-services/rxjs-operators/delay-retry.ts +16 -0
  224. package/src/lib/services/request-manager-services/rxjs-operators/index.ts +4 -0
  225. package/src/lib/services/request-manager-services/rxjs-operators/request-polling.ts +35 -0
  226. package/src/lib/services/request-manager-services/rxjs-operators/request-streaming.ts +468 -0
  227. package/src/lib/services/request-manager-state-service/http-manager-state.store.spec.ts +665 -0
  228. package/src/lib/services/request-manager-state-service/http-manager-state.store.ts +2395 -0
  229. package/src/lib/services/request-manager-state-service/index.ts +3 -0
  230. package/src/lib/services/request-manager-state-service/models/api-request.model.ts +86 -0
  231. package/src/lib/services/request-manager-state-service/models/index.ts +14 -0
  232. package/src/lib/services/request-manager-state-service/models/operation-result.model.ts +18 -0
  233. package/src/lib/services/request-manager-state-service/models/parsing-result.model.ts +21 -0
  234. package/src/lib/services/request-manager-state-service/models/request-options.model.ts +37 -0
  235. package/src/lib/services/request-manager-state-service/models/stream-config.model.ts +20 -0
  236. package/src/lib/services/request-manager-state-service/models/stream-event-metadata.model.ts +23 -0
  237. package/src/lib/services/request-manager-state-service/models/stream-event.model.ts +23 -0
  238. package/src/lib/services/request-manager-state-service/models/stream-output.model.ts +23 -0
  239. package/src/lib/services/request-manager-state-service/models/stream-progress.model.ts +24 -0
  240. package/src/lib/services/request-manager-state-service/models/stream-type.enum.ts +13 -0
  241. package/src/lib/services/request-manager-state-service/models/ws-options.model.ts +42 -0
  242. package/src/lib/services/store-state-manager-service/index.ts +4 -0
  243. package/src/lib/services/store-state-manager-service/models/index.ts +3 -0
  244. package/src/lib/services/store-state-manager-service/models/state-operation-result.model.ts +30 -0
  245. package/src/lib/services/store-state-manager-service/models/state-storage-options.model.ts +24 -0
  246. package/src/lib/services/store-state-manager-service/store-state-manager-signals.service.ts +169 -0
  247. package/src/lib/services/store-state-manager-service/store-state-manager.service.ts +153 -0
  248. package/src/lib/services/utils/app.service.spec.ts +25 -0
  249. package/src/lib/services/utils/app.service.ts +21 -0
  250. package/src/lib/services/utils/encryption/README.md +79 -0
  251. package/src/lib/services/utils/encryption/asymmetrical-encryption.service.ts +282 -0
  252. package/src/lib/services/utils/encryption/encryption-test.service.ts +39 -0
  253. package/src/lib/services/utils/encryption/index.ts +5 -0
  254. package/src/lib/services/utils/encryption/random.ts +81 -0
  255. package/src/lib/services/utils/encryption/symmetrical-encryption.service.ts +106 -0
  256. package/src/lib/services/utils/headers.service.spec.ts +80 -0
  257. package/src/lib/services/utils/headers.service.ts +18 -0
  258. package/src/lib/services/utils/index.ts +9 -0
  259. package/src/lib/services/utils/logger.service.ts +90 -0
  260. package/src/lib/services/utils/models/index.ts +4 -0
  261. package/src/lib/services/utils/models/normalized-request-options.model.ts +24 -0
  262. package/src/lib/services/utils/models/path-tracker-state.model.ts +20 -0
  263. package/src/lib/services/utils/models/query-params-tracker-options.model.ts +24 -0
  264. package/src/lib/services/utils/models/query-tracker-state.model.ts +23 -0
  265. package/src/lib/services/utils/object-merger.service.spec.ts +18 -0
  266. package/src/lib/services/utils/object-merger.service.ts +78 -0
  267. package/src/lib/services/utils/path-query.service.spec.ts +117 -0
  268. package/src/lib/services/utils/path-query.service.ts +69 -0
  269. package/src/lib/services/utils/query-params-tracker.service.ts +442 -0
  270. package/src/lib/services/utils/random-color.utils.ts +83 -0
  271. package/src/lib/services/utils/utils.service.spec.ts +165 -0
  272. package/src/lib/services/utils/utils.service.ts +192 -0
  273. package/src/lib/services/ws-manager-service/index.ts +13 -0
  274. package/src/lib/services/ws-manager-service/message-tracker-signals.service.ts +147 -0
  275. package/src/lib/services/ws-manager-service/message-tracker.service.ts +477 -0
  276. package/src/lib/services/ws-manager-service/models/channel-info.model.ts +29 -0
  277. package/src/lib/services/ws-manager-service/models/channel-message-data.model.ts +24 -0
  278. package/src/lib/services/ws-manager-service/models/channel-message.model.ts +36 -0
  279. package/src/lib/services/ws-manager-service/models/channel-type.enum.ts +6 -0
  280. package/src/lib/services/ws-manager-service/models/communication-type.enum.ts +5 -0
  281. package/src/lib/services/ws-manager-service/models/index.ts +10 -0
  282. package/src/lib/services/ws-manager-service/models/notification-message.model.ts +29 -0
  283. package/src/lib/services/ws-manager-service/models/public-message.model.ts +18 -0
  284. package/src/lib/services/ws-manager-service/models/state-message.model.ts +18 -0
  285. package/src/lib/services/ws-manager-service/models/ws-user.model.ts +38 -0
  286. package/src/lib/services/ws-manager-service/services/index.ts +4 -0
  287. package/src/lib/services/ws-manager-service/services/websocket-message.service.ts +129 -0
  288. package/src/lib/services/ws-manager-service/services/websocket.service.ts +434 -0
  289. package/src/lib/services/ws-manager-service/websocket-service/index.ts +1 -0
  290. package/src/lib/services/ws-manager-service/websocket-service/websocket-manager.service.ts +716 -0
  291. package/src/lib/services/ws-manager-service/websocket-services-complete.spec.ts +596 -0
  292. package/src/lib/services/ws-manager-service/websocket-signals-manager.service.ts +141 -0
  293. package/src/public-api.ts +19 -0
  294. package/tsconfig.lib.json +34 -0
  295. package/tsconfig.lib.prod.json +10 -0
  296. package/tsconfig.spec.json +14 -0
  297. package/fesm2022/http-request-manager.mjs +0 -13688
  298. package/fesm2022/http-request-manager.mjs.map +0 -1
  299. package/http-request-manager-18.15.33.tgz +0 -0
  300. package/types/http-request-manager.d.ts +0 -3968
@@ -0,0 +1,147 @@
1
+ import { Injectable, inject } from '@angular/core';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ import { StateServiceDemo } from './state-service-demo.service';
4
+
5
+ /**
6
+ * Notification message interface
7
+ */
8
+ export interface NotificationMessage {
9
+ id: number;
10
+ channel: string;
11
+ created: number; // epoch seconds
12
+ user_name: string;
13
+ sessionId: any;
14
+ content: any;
15
+ }
16
+
17
+ /**
18
+ * NotificationServiceDemo - Notification channel service (MES- prefix channels)
19
+ *
20
+ * Handles:
21
+ * - Creating notification channels
22
+ * - Subscribing to notifications with date filters
23
+ * - Sending notifications (persisted to database)
24
+ * - Receiving real-time and historical notifications
25
+ */
26
+ @Injectable({
27
+ providedIn: 'root'
28
+ })
29
+ export class NotificationServiceDemo {
30
+
31
+ private stateService = inject(StateServiceDemo);
32
+
33
+ // Notification channels from state service (in-memory - contains MES- channels from server)
34
+ notificationChannels$ = this.stateService.notificationChannels$;
35
+
36
+ // Today's notification channels from database (channels with data for today)
37
+ todaysNotificationChannels$ = this.stateService.todaysNotificationChannels$;
38
+
39
+ private subscribedNotificationChannelsSubject = new BehaviorSubject<Set<string>>(new Set());
40
+ subscribedNotificationChannels$ = this.subscribedNotificationChannelsSubject.asObservable();
41
+
42
+ // Notification messages from state service
43
+ notificationMessages$ = this.stateService.notificationMessages$;
44
+
45
+ // Latest notification from state service
46
+ latestNotification$ = this.stateService.latestNotification$;
47
+
48
+ // Expose connection status from state service
49
+ connectionStatus$ = this.stateService.connectionStatus$;
50
+
51
+ /**
52
+ * Create a notification channel
53
+ * NOTE: MES- prefix is added automatically by HTTPManagerStateService
54
+ */
55
+ createNotificationChannel(channel: string) {
56
+ console.log('📢 createNotificationChannel:', channel);
57
+ this.stateService.createNotificationChannel(channel);
58
+ }
59
+
60
+ /**
61
+ * Get all notification channels (in-memory)
62
+ */
63
+ getNotificationChannels() {
64
+ console.log('📢 getNotificationChannels');
65
+ this.stateService.getNotificationChannels();
66
+ }
67
+
68
+ /**
69
+ * Get today's notification channels from database
70
+ * Returns unique channels that have notifications posted today
71
+ */
72
+ getTodaysNotificationChannels() {
73
+ console.log('📢 getTodaysNotificationChannels (from DB)');
74
+ this.stateService.getTodaysNotificationChannels();
75
+ }
76
+
77
+ /**
78
+ * Define and load previous day's notification channels from database
79
+ * Creates channels in memory and broadcasts updated list
80
+ */
81
+ definePreviousNotificationChannels() {
82
+ console.log('📢 definePreviousNotificationChannels');
83
+ this.stateService.definePreviousNotificationChannels();
84
+ }
85
+
86
+ /**
87
+ * Subscribe to a notification channel with optional date filter
88
+ * NOTE: MES- prefix is added automatically by HTTPManagerStateService
89
+ * @param channel Base channel name (without MES- prefix)
90
+ * @param options { startEpoch?, endEpoch? }
91
+ * @param user User info for subscription
92
+ */
93
+ subscribeToNotificationChannel(channel: string, options?: { startEpoch?: number; endEpoch?: number }, user?: any) {
94
+ // Add MES- prefix for local tracking (to match what state service sends)
95
+ const prefixedChannel = channel.startsWith('MES-') ? channel : `MES-${channel}`;
96
+ console.log('📢 subscribeToNotificationChannel:', prefixedChannel, options);
97
+
98
+ // Add to local subscribed channels immediately for UI feedback
99
+ const currentSubs = this.subscribedNotificationChannelsSubject.value;
100
+ currentSubs.add(prefixedChannel);
101
+ this.subscribedNotificationChannelsSubject.next(new Set(currentSubs));
102
+
103
+ // Send subscription request to server (state service adds MES- prefix)
104
+ this.stateService.subscribeToNotificationChannel(channel, options, user);
105
+ }
106
+
107
+ /**
108
+ * Unsubscribe from a notification channel
109
+ * NOTE: MES- prefix is added automatically by HTTPManagerStateService
110
+ */
111
+ unsubscribeFromNotificationChannel(channel: string) {
112
+ // Add MES- prefix for local tracking (to match what state service sends)
113
+ const prefixedChannel = channel.startsWith('MES-') ? channel : `MES-${channel}`;
114
+ console.log('📢 unsubscribeFromNotificationChannel:', prefixedChannel);
115
+
116
+ // Remove from local subscribed channels immediately for UI feedback
117
+ const currentSubs = this.subscribedNotificationChannelsSubject.value;
118
+ currentSubs.delete(prefixedChannel);
119
+ this.subscribedNotificationChannelsSubject.next(new Set(currentSubs));
120
+
121
+ // Send unsubscription request to server (state service adds MES- prefix)
122
+ this.stateService.unsubscribeFromNotificationChannel(channel);
123
+ }
124
+
125
+ /**
126
+ * Send a notification to a channel
127
+ * NOTE: MES- prefix is added automatically by HTTPManagerStateService
128
+ */
129
+ sendNotification(channel: string, content: any, user?: any) {
130
+ const notificationContent = {
131
+ sessionId: {
132
+ id: user?.id,
133
+ ldap: user?.ldap,
134
+ name: user?.name,
135
+ email: user?.email,
136
+ color: user?.color,
137
+ },
138
+ ...content
139
+ };
140
+
141
+ console.log('📢 sendNotification:', channel, notificationContent);
142
+
143
+ // State service adds MES- prefix
144
+ this.stateService.sendNotification(channel, notificationContent);
145
+ }
146
+
147
+ }
@@ -0,0 +1,168 @@
1
+ import { Injectable } from '@angular/core';
2
+
3
+ import { DatabaseStorage, DataType, RetryOptions } from '../../../models';
4
+ import { HTTPManagerStateService } from '../../../services/request-manager-state-service/http-manager-state.store';
5
+ import { ApiRequest } from '../../../services/request-manager-state-service/models/api-request.model';
6
+ import { OIDCClient } from '../models/oidc-client.model';
7
+
8
+ /**
9
+ * StateServiceDemo - Core state management and WebSocket connection service
10
+ *
11
+ * Handles:
12
+ * - WebSocket connection setup
13
+ * - Base HTTP state management
14
+ * - Connection status and retry logic
15
+ */
16
+ @Injectable({
17
+ providedIn: 'root'
18
+ })
19
+ export class StateServiceDemo extends HTTPManagerStateService<any> {
20
+
21
+ attempts$ = this.wsRetryAttempts$;
22
+ nextRetry$ = this.wsNextRetry$;
23
+
24
+ constructor() {
25
+ super(
26
+ ApiRequest.adapt({
27
+ server: '',
28
+ retry: RetryOptions.adapt({
29
+ times: 3,
30
+ delay: 1,
31
+ }),
32
+ adapter: OIDCClient.adapt,
33
+ }),
34
+ DataType.ARRAY,
35
+ DatabaseStorage.adapt({
36
+ table: 'ws_demo_data',
37
+ expiresIn: '5mn',
38
+ })
39
+ );
40
+ }
41
+
42
+ /**
43
+ * Initialize WebSocket connection with server configuration
44
+ * @param server - Backend server URL
45
+ * @param wsServer - WebSocket server URL
46
+ * @param jwtToken - JWT authentication token
47
+ * @param user - User information
48
+ * @param path - Path for constructing channel name (e.g., ['ai','tests'])
49
+ */
50
+ updateConnection(server: string, wsServer: string, jwtToken: string, user: any, path: (string|number)[] = ['ai','tests']) {
51
+ // Construct channel name from path: ['ai','tests'] → 'ai/tests'
52
+ const channelId = path.join('/');
53
+
54
+ this.setApiRequestOptions({
55
+ server,
56
+ path, // Set the path for HTTP requests
57
+ retry: RetryOptions.adapt({
58
+ times: 3,
59
+ delay: 1,
60
+ }),
61
+ adapter: OIDCClient.adapt,
62
+ ws: {
63
+ id: channelId, // Use path-based channel ID instead of hardcoded 'USERS123'
64
+ wsServer,
65
+ jwtToken,
66
+ user,
67
+ retry: RetryOptions.adapt({
68
+ times: 10,
69
+ delay: 5,
70
+ }),
71
+ }
72
+ });
73
+
74
+ this.userAction$.subscribe(user => {
75
+ console.log('User Action:', user);
76
+ });
77
+ }
78
+
79
+ /**
80
+ * Get all available channels
81
+ */
82
+ override getAllChannels() {
83
+ this.httpManagerService.getAllChannels();
84
+ }
85
+
86
+ /**
87
+ * Subscribe to a channel
88
+ */
89
+ override subscribeToChannel(channel: string) {
90
+ super.subscribeToChannel(channel);
91
+ }
92
+
93
+ /**
94
+ * Unsubscribe from a channel
95
+ */
96
+ override unsubscribeFromChannel(channel: string) {
97
+ super.unsubscribeFromChannel(channel);
98
+ }
99
+
100
+ // =====================
101
+ // Notification Channel Methods (MES- prefix)
102
+ // These override methods from HTTPManagerStateService
103
+ // =====================
104
+
105
+ /**
106
+ * Create a notification channel (MES- prefix)
107
+ */
108
+ override createNotificationChannel(channel: string) {
109
+ super.createNotificationChannel(channel);
110
+ }
111
+
112
+ /**
113
+ * Get all notification channels list (in-memory)
114
+ */
115
+ override getNotificationChannels() {
116
+ super.getNotificationChannels();
117
+ }
118
+
119
+ /**
120
+ * Get today's notification channels from database
121
+ * Returns unique channels that have notifications posted today
122
+ */
123
+ override getTodaysNotificationChannels() {
124
+ super.getTodaysNotificationChannels();
125
+ }
126
+
127
+ /**
128
+ * Define and load previous day's notification channels from database
129
+ * Creates channels in memory and broadcasts updated list
130
+ */
131
+ definePreviousNotificationChannels() {
132
+ const options = ApiRequest.adapt({
133
+ path: ['notifications', 'channels', 'define-previous']
134
+ });
135
+
136
+ this.httpManagerService.postRequest({}, options).subscribe({
137
+ next: (response: any) => {
138
+ console.log('📋 Previous day channels loaded:', response);
139
+ // The server will broadcast updated channel list to all WebSocket clients
140
+ },
141
+ error: (error) => {
142
+ console.error('❌ Failed to load previous day channels:', error);
143
+ }
144
+ });
145
+ }
146
+
147
+ /**
148
+ * Subscribe to notification channel with optional date filters
149
+ */
150
+ override subscribeToNotificationChannel(channel: string, options?: { startEpoch?: number; endEpoch?: number }, user?: any) {
151
+ super.subscribeToNotificationChannel(channel, options, user);
152
+ }
153
+
154
+ /**
155
+ * Unsubscribe from notification channel
156
+ */
157
+ override unsubscribeFromNotificationChannel(channel: string) {
158
+ super.unsubscribeFromNotificationChannel(channel);
159
+ }
160
+
161
+ /**
162
+ * Send a notification to a channel
163
+ */
164
+ override sendNotification(channel: string, content: any) {
165
+ super.sendNotification(channel, content);
166
+ }
167
+
168
+ }
@@ -0,0 +1,53 @@
1
+ @if (!isPending) {
2
+ @if (hasError) {
3
+ <div class="width center-txt" style="margin-bottom: 4px;">
4
+ <mat-icon color="warn" class="warn-icon">warning</mat-icon>
5
+ </div>
6
+ } @else {
7
+ @if (active) {
8
+ <div class="container-obj">
9
+ <div class="centered-obj-div">
10
+ <mat-progress-spinner
11
+ color="primary"
12
+ mode="indeterminate"
13
+ [diameter]="44"
14
+ ></mat-progress-spinner>
15
+ </div>
16
+ </div>
17
+ } @else {
18
+ <button data-tracking="export-btn" mat-icon-button (click)="onAction()" class="icon-button" [disabled]="disabled">
19
+ <mat-icon class="custom-icon">file_download</mat-icon>
20
+ </button>
21
+ }
22
+ }
23
+ } @else {
24
+ @if ((progress > 0 && progress < 100)) {
25
+ <div
26
+ class="spinner-container"
27
+ >
28
+ <div class="spinner-background">
29
+ {{progress}}%
30
+ </div>
31
+ <mat-progress-spinner
32
+ color="primary"
33
+ [mode]="mode"
34
+ [value]="progress"
35
+ [diameter]="44"
36
+ ></mat-progress-spinner>
37
+ </div>
38
+ } @else {
39
+ <div class="container-obj">
40
+ <div class="centered-obj-div">
41
+ <mat-progress-spinner
42
+ color="primary"
43
+ mode="indeterminate"
44
+ [diameter]="44"
45
+ ></mat-progress-spinner>
46
+ </div>
47
+ </div>
48
+ }
49
+ }
50
+
51
+
52
+
53
+
@@ -0,0 +1,60 @@
1
+ :not(spinner-container).spinner-container {
2
+ position: relative;
3
+
4
+ .spinner-background {
5
+ position: absolute;
6
+ width: 44px;
7
+ height: 44px;
8
+ font-size: 12px;
9
+ line-height: 32px;
10
+ text-align: center;
11
+ overflow: hidden;
12
+ border-radius: 50%;
13
+ border: solid 5px whitesmoke;
14
+ }
15
+
16
+ }
17
+
18
+ .center-txt {
19
+ align-content: center;
20
+ text-align: -webkit-center;
21
+ }
22
+
23
+ .width {
24
+ width: 48px;
25
+ height: 48px;
26
+ }
27
+
28
+ .icon-button {
29
+ display: flex;
30
+ align-items: center;
31
+ justify-content: center;
32
+ width: 48px;
33
+ height: 48px;
34
+ padding: 0;
35
+ }
36
+
37
+ // .custom-icon {
38
+ // font-size: 32px;
39
+ // line-height: 1;
40
+ // position: relative;
41
+ // left: -4px;
42
+ // }
43
+
44
+ .container-obj {
45
+ display: flex;
46
+ justify-content: center;
47
+ align-items: center;
48
+ width: 48px;
49
+ height: 48px;
50
+ }
51
+
52
+ .centered-obj-div {
53
+ text-align: center
54
+ }
55
+
56
+ // .warn-icon {
57
+ // position: relative;
58
+ // top: 6px;
59
+ // width: 48px;
60
+ // }
@@ -0,0 +1,72 @@
1
+ import { Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation } from '@angular/core';
2
+ import { ProgressSpinnerMode } from '@angular/material/progress-spinner';
3
+ import { Subscription, timer } from 'rxjs';
4
+
5
+ @Component({
6
+ selector: 'app-download-file',
7
+ templateUrl: './download-file.component.html',
8
+ styleUrls: ['./download-file.component.scss'],
9
+ encapsulation: ViewEncapsulation.None,
10
+ standalone: false
11
+ })
12
+ export class DownloadFileComponent implements OnInit {
13
+
14
+ private subscriptions = new Subscription();
15
+
16
+ @Input() event?: Function;
17
+ @Input() displayError = 3; // seconds
18
+ @Input() diameter = 32;
19
+ @Input() mode: ProgressSpinnerMode = 'determinate';
20
+ @Input() isPending = false;
21
+
22
+ @Input() active = false;
23
+ @Input() disabled = false;
24
+
25
+ @Output() error = new EventEmitter<void>();
26
+
27
+ private _progress = 0;
28
+ @Input() set progress(value: any) {
29
+ this._progress = value ?? 0;
30
+ }
31
+
32
+ get progress() {
33
+ return this._progress;
34
+ }
35
+
36
+ private _hasError = false;
37
+ private errorTimerActive = false;
38
+
39
+ @Input() set hasError(value: boolean | any) {
40
+
41
+ this._hasError = !!value;
42
+
43
+ if (this._hasError && !this.errorTimerActive) {
44
+ this.errorTimerActive = true;
45
+ this.active = false;
46
+ this.error.emit()
47
+ this.subscriptions.add(
48
+ timer(this.displayError * 1000)
49
+ .subscribe((err) => {
50
+ this._hasError = false;
51
+ this.errorTimerActive = false;
52
+ })
53
+ );
54
+ }
55
+
56
+ }
57
+
58
+ get hasError() {
59
+ return this._hasError;
60
+ }
61
+
62
+ ngOnInit() {}
63
+
64
+ onAction() {
65
+ this.isPending = false
66
+ if (this.event) this.event()
67
+ }
68
+
69
+ ngOnDestroy() {
70
+ this.subscriptions.unsubscribe()
71
+ }
72
+ }
@@ -0,0 +1,28 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+
4
+ import { DownloadFileComponent } from './download-file/download-file.component';
5
+ import { FileDownloaderComponent } from './file-downloader.component';
6
+
7
+ import { SpinnerComponent } from './spinner/spinner.component';
8
+ import { MatIconModule } from '@angular/material/icon';
9
+ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
10
+ import { MatButtonModule } from '@angular/material/button';
11
+
12
+ @NgModule({
13
+ imports: [
14
+ CommonModule,
15
+ MatIconModule,
16
+ MatProgressSpinnerModule,
17
+ MatButtonModule,
18
+ ],
19
+ declarations: [
20
+ SpinnerComponent,
21
+ DownloadFileComponent,
22
+ FileDownloaderComponent,
23
+ ],
24
+ exports: [
25
+ FileDownloaderComponent
26
+ ]
27
+ })
28
+ export class FileDownloaderModule { }
@@ -0,0 +1,10 @@
1
+ <app-download-file
2
+ [disabled]="disabled"
3
+ [displayError]="3"
4
+ [event]="onDownloadStreaming.bind(this)"
5
+ [isPending]="(isPending$ | async) || false"
6
+ [progress]="(progress$ | async)"
7
+ [hasError]="(error$ | async)"
8
+ (error)="onError(labels.error)"
9
+ [active]="active"
10
+ ></app-download-file>
@@ -0,0 +1,29 @@
1
+
2
+ $snackBarTextColor: white;
3
+ $snackBarBackgroundNormal: #F44336;
4
+ $snackBarActionColor: white;
5
+
6
+ .snackBarInfo {
7
+ background-color: $snackBarBackgroundNormal;
8
+ color: $snackBarTextColor;
9
+ }
10
+ .mat-simple-snackbar > span {
11
+ font-weight: bold;
12
+ }
13
+ .mat-simple-snackbar-action {
14
+ .mat-button {
15
+ .mat-button-wrapper {
16
+ color: $snackBarActionColor;
17
+ }
18
+ }
19
+ }
20
+
21
+ .cdk-overlay-pane > .mat-snack-bar-container {
22
+ width: 100%;
23
+ }
24
+
25
+
26
+ .mat-snack-bar-container {
27
+ max-width: 100% !important;
28
+ width: 100%;
29
+ }
@@ -0,0 +1,100 @@
1
+ import { Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation } from '@angular/core';
2
+ import { catchError, distinctUntilChanged, finalize } from 'rxjs/operators';
3
+
4
+ import { ToastColors, ToastDisplay } from 'toast-message-display';
5
+
6
+ import { DownloadLabels } from './models/download-labels-model';
7
+ import { HTTPManagerService } from '../../../services/request-manager-services/http-manager.service';
8
+ import { ApiRequest } from '../../../services/request-manager-state-service/models/api-request.model';
9
+ import { Subscription, throwError } from 'rxjs';
10
+
11
+ @Component({
12
+ selector: 'app-file-downloader',
13
+ templateUrl: './file-downloader.component.html',
14
+ styleUrls: ['./file-downloader.component.scss'],
15
+ encapsulation: ViewEncapsulation.None,
16
+ standalone: false
17
+ })
18
+ export class FileDownloaderComponent extends HTTPManagerService<any> implements OnInit {
19
+
20
+ @Input() delayError = 3
21
+ @Input() apiRequest: ApiRequest = ApiRequest.adapt()
22
+ @Input() displayErrorMessage = false
23
+
24
+ @Input() saveFileAs?: string
25
+
26
+ _labels = DownloadLabels.adapt()
27
+ @Input() set labels(value: DownloadLabels) {
28
+ this._labels = (value) ? DownloadLabels.adapt(value) : DownloadLabels.adapt()
29
+ }
30
+
31
+ active = false
32
+
33
+ subscription = new Subscription()
34
+
35
+ get labels() {
36
+ return this._labels
37
+ }
38
+
39
+ @Output() completed = new EventEmitter<void>()
40
+ @Output() failed = new EventEmitter<string>()
41
+
42
+ @Input() disabled = false
43
+
44
+ constructor() {
45
+ super()
46
+ }
47
+
48
+ ngOnInit() {
49
+
50
+ }
51
+
52
+ onDownloadStreaming() {
53
+
54
+ if (this.active) return;
55
+ this.active = true;
56
+
57
+ return this.downloadRequest(this.apiRequest, [])
58
+ .pipe(
59
+ distinctUntilChanged(),
60
+ catchError((err) => {
61
+
62
+ this.onError(err.message)
63
+ this.active = false
64
+ this.failed.emit(err)
65
+
66
+ return throwError(() => err)
67
+
68
+ }),
69
+ finalize(() => {
70
+ if (!this.active) return
71
+ this.active = false
72
+ this.completed.emit()
73
+ })
74
+ )
75
+ .subscribe()
76
+ }
77
+
78
+
79
+ onError(message: string) {
80
+
81
+ if(!message || !this.displayErrorMessage) return
82
+
83
+ const display = ToastDisplay.adapt({
84
+ message,
85
+ action: 'Ok',
86
+ color: ToastColors.ERROR,
87
+ icon: 'error',
88
+ });
89
+
90
+ this.active = false
91
+
92
+ this.toastMessage.toastMessage(display);
93
+
94
+ }
95
+
96
+ OnDestroy() {
97
+ this.subscription.unsubscribe()
98
+ }
99
+
100
+ }
@@ -0,0 +1,22 @@
1
+ export interface DownloadLabelsInterface {
2
+ error: string;
3
+ action: string;
4
+ icon: string;
5
+ }
6
+
7
+ export class DownloadLabels implements DownloadLabelsInterface {
8
+ constructor(
9
+ public error = '',
10
+ public action = '',
11
+ public icon = 'error',
12
+ ) {}
13
+
14
+ static adapt(item?: any): DownloadLabelsInterface {
15
+ return new DownloadLabels(
16
+ item?.error,
17
+ item?.action,
18
+ item?.icon,
19
+ )
20
+
21
+ }
22
+ }
@@ -0,0 +1,8 @@
1
+ <div class="spinner-background">{{display}}</div>
2
+ <mat-progress-spinner
3
+ [color]="color"
4
+ [diameter]="diameter"
5
+ [mode]="mode || 'indeterminate'"
6
+ [strokeWidth]="strokeWidth"
7
+ [value]="value">
8
+ </mat-progress-spinner>