http-request-manager 18.7.21 → 18.7.27

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 (198) hide show
  1. package/fesm2022/http-request-manager.mjs +7633 -0
  2. package/fesm2022/http-request-manager.mjs.map +1 -0
  3. package/http-request-manager-18.7.27.tgz +0 -0
  4. package/package.json +16 -5
  5. package/types/http-request-manager.d.ts +2277 -0
  6. package/ARCHITECTURE.md +0 -483
  7. package/DATABASE_README.md +0 -1176
  8. package/HTTP_MANAGER_README.md +0 -579
  9. package/HTTP_SINGNALS_MANAGER_README.md +0 -654
  10. package/HTTP_STATE_MANAGER_README.md +0 -948
  11. package/INTERCEPTOR_README.md +0 -549
  12. package/LOCAL_STORAGE_README.md +0 -1056
  13. package/STORE_STATE_MANAGER_README.md +0 -1322
  14. package/UTILS_README.md +0 -1186
  15. package/WS_MANAGER_README.md +0 -613
  16. package/ng-package.json +0 -8
  17. package/src/lib/http-request-manager.module.ts +0 -132
  18. package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.html +0 -65
  19. package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.scss +0 -0
  20. package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.ts +0 -224
  21. package/src/lib/http-request-services-demo/http-request-services-demo.component.html +0 -114
  22. package/src/lib/http-request-services-demo/http-request-services-demo.component.scss +0 -6
  23. package/src/lib/http-request-services-demo/http-request-services-demo.component.ts +0 -52
  24. package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.html +0 -195
  25. package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.scss +0 -17
  26. package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.ts +0 -206
  27. package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.html +0 -200
  28. package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.scss +0 -17
  29. package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.ts +0 -212
  30. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.html +0 -53
  31. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.scss +0 -60
  32. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.ts +0 -72
  33. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-download.module.ts +0 -28
  34. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.html +0 -10
  35. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.scss +0 -29
  36. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.ts +0 -100
  37. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/models/download-labels-model.ts +0 -22
  38. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.html +0 -8
  39. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.scss +0 -19
  40. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.ts +0 -26
  41. package/src/lib/http-request-services-demo/request-manager-demo/models/app-session.model.ts +0 -30
  42. package/src/lib/http-request-services-demo/request-manager-demo/models/app.model.ts +0 -19
  43. package/src/lib/http-request-services-demo/request-manager-demo/models/get-sample.model.ts +0 -25
  44. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-ai-prompt.ts +0 -19
  45. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client-details.ts +0 -24
  46. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client-info.ts +0 -30
  47. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client.model.ts +0 -49
  48. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-mapper-client-info.ts +0 -33
  49. package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.html +0 -392
  50. package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.scss +0 -24
  51. package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.ts +0 -461
  52. package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.html +0 -393
  53. package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.scss +0 -24
  54. package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.ts +0 -421
  55. package/src/lib/http-request-services-demo/request-manager-state-demo/services/state-manager-demo.service.ts +0 -87
  56. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/services/state-data-request.service.ts +0 -120
  57. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.css +0 -0
  58. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.html +0 -3
  59. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.ts +0 -16
  60. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.css +0 -0
  61. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.html +0 -3
  62. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.ts +0 -16
  63. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.css +0 -31
  64. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.html +0 -72
  65. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.scss +0 -41
  66. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.spec.ts +0 -205
  67. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.ts +0 -77
  68. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.css +0 -11
  69. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.html +0 -96
  70. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.spec.ts +0 -31
  71. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.ts +0 -229
  72. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.css +0 -30
  73. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.html +0 -172
  74. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.spec.ts +0 -31
  75. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.ts +0 -239
  76. package/src/lib/http-request-services-demo/request-manager-ws-demo/models/oidc-client.model.ts +0 -31
  77. package/src/lib/http-request-services-demo/request-manager-ws-demo/models/user-data.model.ts +0 -32
  78. package/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.css +0 -0
  79. package/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.html +0 -84
  80. package/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.ts +0 -41
  81. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/index.ts +0 -3
  82. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/message-service-demo.service.ts +0 -83
  83. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/notification-service-demo.service.ts +0 -147
  84. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/state-service-demo.service.ts +0 -158
  85. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.html +0 -53
  86. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.scss +0 -60
  87. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.ts +0 -72
  88. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-download.module.ts +0 -28
  89. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.html +0 -10
  90. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.scss +0 -29
  91. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.ts +0 -100
  92. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/models/download-labels-model.ts +0 -22
  93. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.html +0 -8
  94. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.scss +0 -19
  95. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.ts +0 -26
  96. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/app-session.model.ts +0 -30
  97. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/app.model.ts +0 -19
  98. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/get-sample.model.ts +0 -25
  99. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-ai-prompt.ts +0 -19
  100. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client-details.ts +0 -24
  101. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client-info.ts +0 -30
  102. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client.model.ts +0 -49
  103. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-mapper-client-info.ts +0 -33
  104. package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.html +0 -380
  105. package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.scss +0 -24
  106. package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.ts +0 -410
  107. package/src/lib/http-request-services-demo/store-state-manager-demo/models/settings.model.ts +0 -28
  108. package/src/lib/http-request-services-demo/store-state-manager-demo/services/settings-state.service.ts +0 -48
  109. package/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.css +0 -0
  110. package/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.html +0 -23
  111. package/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.ts +0 -36
  112. package/src/lib/index.ts +0 -3
  113. package/src/lib/interceptors/credentials.interceptor.ts +0 -16
  114. package/src/lib/interceptors/index.ts +0 -6
  115. package/src/lib/interceptors/models/error-settings.model.ts +0 -22
  116. package/src/lib/interceptors/models/index.ts +0 -2
  117. package/src/lib/interceptors/proxy-debugger.interceptor.ts +0 -46
  118. package/src/lib/interceptors/request-error.interceptor.ts +0 -65
  119. package/src/lib/interceptors/request-header.interceptor.ts +0 -53
  120. package/src/lib/models/config-http-options.model.ts +0 -42
  121. package/src/lib/models/config-local-storage-options.model.ts +0 -27
  122. package/src/lib/models/config-options.model.ts +0 -27
  123. package/src/lib/models/config-token.model.ts +0 -9
  124. package/src/lib/models/data-type.enum.ts +0 -5
  125. package/src/lib/models/database-storage.model.ts +0 -24
  126. package/src/lib/models/index.ts +0 -12
  127. package/src/lib/models/retry-options.model.ts +0 -22
  128. package/src/lib/services/database-manager-service/database.manager.service.ts +0 -262
  129. package/src/lib/services/database-manager-service/db.storage.service.ts +0 -207
  130. package/src/lib/services/database-manager-service/index.ts +0 -4
  131. package/src/lib/services/database-manager-service/models/index.ts +0 -2
  132. package/src/lib/services/database-manager-service/models/table-schema.ts +0 -33
  133. package/src/lib/services/index.ts +0 -12
  134. package/src/lib/services/local-storage-manager-service/index.ts +0 -4
  135. package/src/lib/services/local-storage-manager-service/local-storage-manager.service.spec.ts +0 -71
  136. package/src/lib/services/local-storage-manager-service/local-storage-manager.service.ts +0 -426
  137. package/src/lib/services/local-storage-manager-service/local-storage-signals-manager.service.spec.ts +0 -67
  138. package/src/lib/services/local-storage-manager-service/local-storage-signals-manager.service.ts +0 -345
  139. package/src/lib/services/local-storage-manager-service/models/global-store-options.model.ts +0 -30
  140. package/src/lib/services/local-storage-manager-service/models/index.ts +0 -6
  141. package/src/lib/services/local-storage-manager-service/models/setting-options.model.ts +0 -35
  142. package/src/lib/services/local-storage-manager-service/models/storage-data.model.ts +0 -24
  143. package/src/lib/services/local-storage-manager-service/models/storage-option.model.ts +0 -32
  144. package/src/lib/services/local-storage-manager-service/models/storage-type.enum.ts +0 -5
  145. package/src/lib/services/request-manager-services/README.md +0 -268
  146. package/src/lib/services/request-manager-services/http-manager-signals.service.ts +0 -246
  147. package/src/lib/services/request-manager-services/http-manager.service.spec.ts +0 -232
  148. package/src/lib/services/request-manager-services/http-manager.service.ts +0 -274
  149. package/src/lib/services/request-manager-services/index.ts +0 -8
  150. package/src/lib/services/request-manager-services/request-signals.service.ts +0 -214
  151. package/src/lib/services/request-manager-services/request.service.ts +0 -309
  152. package/src/lib/services/request-manager-services/rxjs-operators/countdown.ts +0 -17
  153. package/src/lib/services/request-manager-services/rxjs-operators/delay-retry.ts +0 -16
  154. package/src/lib/services/request-manager-services/rxjs-operators/index.ts +0 -4
  155. package/src/lib/services/request-manager-services/rxjs-operators/request-polling.ts +0 -35
  156. package/src/lib/services/request-manager-services/rxjs-operators/request-streaming.ts +0 -436
  157. package/src/lib/services/request-manager-state-service/http-manager-state.store.ts +0 -1321
  158. package/src/lib/services/request-manager-state-service/index.ts +0 -3
  159. package/src/lib/services/request-manager-state-service/models/api-request.model.ts +0 -61
  160. package/src/lib/services/request-manager-state-service/models/index.ts +0 -6
  161. package/src/lib/services/request-manager-state-service/models/request-options.model.ts +0 -22
  162. package/src/lib/services/request-manager-state-service/models/stream-type.enum.ts +0 -13
  163. package/src/lib/services/request-manager-state-service/models/ws-options.model.ts +0 -39
  164. package/src/lib/services/store-state-manager-service/index.ts +0 -3
  165. package/src/lib/services/store-state-manager-service/models/index.ts +0 -2
  166. package/src/lib/services/store-state-manager-service/models/state-storage-options.model.ts +0 -24
  167. package/src/lib/services/store-state-manager-service/store-state-manager.service.ts +0 -88
  168. package/src/lib/services/utils/app.service.spec.ts +0 -25
  169. package/src/lib/services/utils/app.service.ts +0 -21
  170. package/src/lib/services/utils/encryption/README.md +0 -79
  171. package/src/lib/services/utils/encryption/asymmetrical-encryption.service.ts +0 -282
  172. package/src/lib/services/utils/encryption/encryption-test.service.ts +0 -39
  173. package/src/lib/services/utils/encryption/index.ts +0 -5
  174. package/src/lib/services/utils/encryption/random.ts +0 -81
  175. package/src/lib/services/utils/encryption/symmetrical-encryption.service.ts +0 -93
  176. package/src/lib/services/utils/headers.service.spec.ts +0 -80
  177. package/src/lib/services/utils/headers.service.ts +0 -18
  178. package/src/lib/services/utils/index.ts +0 -7
  179. package/src/lib/services/utils/object-merger.service.spec.ts +0 -18
  180. package/src/lib/services/utils/object-merger.service.ts +0 -78
  181. package/src/lib/services/utils/path-query.service.spec.ts +0 -117
  182. package/src/lib/services/utils/path-query.service.ts +0 -69
  183. package/src/lib/services/utils/random-color.utils.ts +0 -83
  184. package/src/lib/services/utils/utils.service.spec.ts +0 -165
  185. package/src/lib/services/utils/utils.service.ts +0 -192
  186. package/src/lib/services/ws-manager-service/index.ts +0 -4
  187. package/src/lib/services/ws-manager-service/models/channel-info.model.ts +0 -24
  188. package/src/lib/services/ws-manager-service/models/channel-message-data.model.ts +0 -24
  189. package/src/lib/services/ws-manager-service/models/channel-message.model.ts +0 -24
  190. package/src/lib/services/ws-manager-service/models/communication-type.enum.ts +0 -5
  191. package/src/lib/services/ws-manager-service/models/index.ts +0 -5
  192. package/src/lib/services/ws-manager-service/models/ws-user.model.ts +0 -38
  193. package/src/lib/services/ws-manager-service/services/index.ts +0 -3
  194. package/src/lib/services/ws-manager-service/services/websocket.service.ts +0 -392
  195. package/src/public-api.ts +0 -14
  196. package/tsconfig.lib.json +0 -32
  197. package/tsconfig.lib.prod.json +0 -10
  198. package/tsconfig.spec.json +0 -14
@@ -1,229 +0,0 @@
1
- import { Component, inject, Input, OnInit, OnDestroy } from '@angular/core';
2
- import { MessageServiceDemo } from '../../services/message-service-demo.service';
3
- import { StateServiceDemo } from '../../services/state-service-demo.service';
4
- import { FormBuilder, FormControl, Validators } from '@angular/forms';
5
- import { WSUser } from '../../../..';
6
- import { Observable, combineLatest, map, EMPTY, Subject, takeUntil, filter, take, startWith, distinctUntilChanged } from 'rxjs';
7
-
8
- import { ChannelMessage } from '../../../../services/ws-manager-service/models/channel-message.model';
9
- import { ToastMessageDisplayService, ToastDisplay, ToastColors } from 'toast-message-display';
10
-
11
- @Component({
12
- selector: 'app-ws-messaging',
13
- templateUrl: './ws-messaging.component.html',
14
- styleUrls: ['./ws-messaging.component.css'],
15
- standalone: false
16
- })
17
- export class WsMessagingComponent implements OnInit, OnDestroy {
18
-
19
- @Input() server!: string;
20
- @Input() wsServer!: string;
21
- @Input() jwtToken!: string;
22
- @Input() user!: any;
23
-
24
- private destroy$ = new Subject<void>();
25
-
26
- fb = inject(FormBuilder);
27
- messageService = inject(MessageServiceDemo);
28
- stateService = inject(StateServiceDemo);
29
- toastService = inject(ToastMessageDisplayService);
30
-
31
- // Only show public channels (starting with "PUB-"), strip prefix for display
32
- // SYS- channels are private/internal and hidden from users
33
- channels$ = this.messageService.channels$.pipe(
34
- map(channels => channels
35
- ?.filter(channel => channel.startsWith('PUB-'))
36
- .map(channel => channel.replace('PUB-', '')) || []
37
- ),
38
- startWith([] as string[]),
39
- distinctUntilChanged((prev, curr) => prev.length === curr.length && prev.every((v, i) => v === curr[i]))
40
- );
41
-
42
- // Track subscribed public channels only, strip prefix for display
43
- subscribedChannels$ = this.messageService.subscribedChannels$.pipe(
44
- map(set => Array.from(set)
45
- .filter(channel => channel.startsWith('PUB-'))
46
- .map(channel => channel.replace('PUB-', ''))
47
- ),
48
- startWith([] as string[]),
49
- distinctUntilChanged((prev, curr) => prev.length === curr.length && prev.every((v, i) => v === curr[i]))
50
- );
51
-
52
- user$ = this.stateService.user$;
53
-
54
- data$ = this.stateService.data$;
55
-
56
- connectionStatus$ = this.stateService.connectionStatus$;
57
-
58
- // Form for creating new channels
59
- newChannelName = this.fb.control<string>('', [Validators.required, Validators.minLength(2)])
60
-
61
- // Form for selecting channels to send to and message content
62
- messages = this.fb.group({
63
- selectedChannels: this.fb.control<string[]>([], Validators.required),
64
- content: this.fb.control<string|null>(null, Validators.required),
65
- })
66
-
67
- get selectedChannels() {
68
- return this.messages.get('selectedChannels') as FormControl
69
- }
70
-
71
- get content() {
72
- return this.messages.get('content') as FormControl
73
- }
74
-
75
- communicationMessages$ = this.messageService.communicationMessages$;
76
- latestCommunicationMessages$ = this.messageService.latestCommunicationMessages$;
77
-
78
- chat$: Observable<{ user: any, messages: any[]}|any> = combineLatest([this.user$, this.communicationMessages$])
79
- .pipe(
80
- map(([user, messages]: any) => ({ user, messages })),
81
- map(obj => {
82
-
83
- if(!obj.user) return EMPTY
84
-
85
- const mainUser = ''
86
-
87
- const messages = obj.messages.map((item: any) => {
88
- // Message transformation logic
89
- })
90
-
91
- return { user: mainUser, messages }
92
-
93
- })
94
- );
95
-
96
- ngOnInit() {
97
-
98
- this.stateService.updateConnection(this.server, this.wsServer, this.jwtToken, this.user);
99
-
100
- // Only trigger once when connection becomes true
101
- this.connectionStatus$.pipe(
102
- filter(status => status === true),
103
- take(1),
104
- takeUntil(this.destroy$)
105
- ).subscribe(() => {
106
- // Fetch existing channels when connected (user will create channels in demo)
107
- this.messageService.getAllChannels();
108
- });
109
-
110
- // Subscribe to latest messages and show toast notification
111
- this.latestCommunicationMessages$.pipe(
112
- filter(message => !!message),
113
- takeUntil(this.destroy$)
114
- ).subscribe((message: any) => {
115
- const messageContent = message.content?.message || '';
116
-
117
- this.toastService.toastMessage(
118
- ToastDisplay.adapt({
119
- message: messageContent,
120
- color: ToastColors.INFO,
121
- icon: 'chat',
122
- action: 'DONE'
123
- }),
124
- -1 // Stay until dismissed
125
- );
126
- });
127
-
128
- }
129
-
130
- ngOnDestroy() {
131
- this.destroy$.next();
132
- this.destroy$.complete();
133
- }
134
-
135
- /**
136
- * Create a new public channel without auto-subscribing
137
- * NOTE: PUB- prefix is added by messageService.createChannel
138
- */
139
- onCreateChannel() {
140
- if (this.newChannelName.invalid) return;
141
-
142
- const channelName = this.newChannelName.value?.trim();
143
- if (channelName) {
144
- // Pass base channel name - service adds PUB- prefix
145
- this.messageService.createChannel(channelName);
146
- this.newChannelName.reset();
147
- // Server will broadcast updated channel list to all clients automatically
148
- }
149
- }
150
-
151
- /**
152
- * Subscribe to a channel to receive messages
153
- * NOTE: PUB- prefix is added by messageService.subscribeToChannel
154
- */
155
- onSubscribeToChannel(channel: string) {
156
- // Pass base channel name - service adds PUB- prefix
157
- this.messageService.subscribeToChannel(channel);
158
- // Reset channel selection when subscriptions change
159
- this.selectedChannels.reset([]);
160
- }
161
-
162
- /**
163
- * Unsubscribe from a channel
164
- * NOTE: PUB- prefix is added by messageService.unsubscribeFromChannel
165
- */
166
- onUnsubscribeFromChannel(channel: string) {
167
- // Pass base channel name - service adds PUB- prefix
168
- this.messageService.unsubscribeFromChannel(channel);
169
- // Reset channel selection when subscriptions change
170
- this.selectedChannels.reset([]);
171
- }
172
-
173
- /**
174
- * Handle chip toggle for subscribe/unsubscribe
175
- */
176
- onChipToggle(channel: string, event: any) {
177
- if (event.selected) {
178
- this.onSubscribeToChannel(channel);
179
- } else {
180
- this.onUnsubscribeFromChannel(channel);
181
- }
182
- }
183
-
184
- /**
185
- * Check if currently subscribed to a channel
186
- * Compares display names (without PUB- prefix)
187
- */
188
- isSubscribed(channel: string, subscribedChannels: string[]): boolean {
189
- return subscribedChannels.includes(channel);
190
- }
191
-
192
- /**
193
- * Handle chip click - toggle subscription state
194
- */
195
- onChipClick(channel: string, subscribedChannels: string[]) {
196
- const isCurrentlySubscribed = this.isSubscribed(channel, subscribedChannels);
197
- if (isCurrentlySubscribed) {
198
- this.onUnsubscribeFromChannel(channel);
199
- } else {
200
- this.onSubscribeToChannel(channel);
201
- }
202
- }
203
-
204
- onSendMessage(user: WSUser) {
205
-
206
- this.messages.markAllAsTouched()
207
-
208
- if (this.messages.invalid) return
209
-
210
- const channelsToSend = this.selectedChannels.value as string[]
211
- if (channelsToSend.length === 0) return
212
-
213
- // Pass base channel names - service adds PUB- prefix
214
- const message = ChannelMessage.adapt({
215
- sessionId: { // user object with 'id' as the ID field
216
- id: user.id,
217
- ldap: user.ldap,
218
- name: user.name,
219
- email: user.email,
220
- },
221
- content: { message: this.messages.value.content },
222
- })
223
-
224
- this.messageService.sendMessage(message, channelsToSend);
225
- this.content.reset();
226
-
227
- }
228
-
229
- }
@@ -1,30 +0,0 @@
1
- /* Style for colored notification messages */
2
- .colored-message {
3
- font-weight: 500;
4
- padding: 4px 8px;
5
- border-radius: 4px;
6
- display: inline-block;
7
- max-width: 100%;
8
- word-wrap: break-word;
9
- }
10
-
11
- /* Ensure good contrast for colored text */
12
- .colored-message.black-text {
13
- color: #000000 !important;
14
- }
15
-
16
- .colored-message.white-text {
17
- color: #ffffff !important;
18
- text-shadow: 0 0 2px rgba(0, 0, 0, 0.5);
19
- }
20
-
21
- /* Table cell styling */
22
- td.mat-mdc-cell {
23
- padding: 8px 12px;
24
- }
25
-
26
- .pill {
27
- border-radius: 1rem;
28
- padding: .5rem 1rem;
29
- color: #ffffff;
30
- }
@@ -1,172 +0,0 @@
1
- <div style="display: flex; gap: 1rem; flex-direction: column; margin-top: 1rem;">
2
-
3
- <!-- Channel Creation Section -->
4
- <div style="padding: 1rem; background: #e8f5e9; border-radius: 4px;">
5
- <strong>Create Notification Channel</strong>
6
- <div style="display: flex; flex-direction: column; margin-top: 0.5rem;">
7
- <mat-form-field appearance="outline" style="width: 100%;">
8
- <mat-label>Channel Name</mat-label>
9
- <input
10
- matInput
11
- [formControl]="newChannelName"
12
- placeholder="Enter notification channel name"
13
- (keydown.enter)="onCreateChannel()"
14
- >
15
- </mat-form-field>
16
- <div style="display: flex; justify-content: flex-end; gap: 0.5rem;">
17
- <button mat-raised-button color="accent" (click)="onDefinePreviousChannels()">
18
- Define Previous Channels
19
- </button>
20
- <button mat-raised-button color="primary" (click)="onCreateChannel()"
21
- [disabled]="newChannelName.invalid">
22
- Create Channel
23
- </button>
24
- </div>
25
- </div>
26
- </div>
27
-
28
- <!-- Channel Connection Section - Only shown when NOT connected -->
29
- @if ((subscribedNotificationChannels$ | async); as subscribedChannels) {
30
- @if (!isChannelConnected(subscribedChannels)) {
31
- <div style="padding: 1rem; background: #e3f2fd; border-radius: 4px;">
32
- <strong>Connect to Channel</strong>
33
- <div style="display: flex; gap: 1rem; margin-top: 0.5rem; flex-wrap: wrap; align-items: flex-start;">
34
- <!-- Channel Selection (from today's DB data) -->
35
- <mat-form-field appearance="outline" style="flex: 1; min-width: 200px;">
36
- <mat-label>Select Channel</mat-label>
37
- <mat-select [formControl]="selectedConnectionChannel" placeholder="Select a notification channel">
38
- @for (channel of (todaysNotificationChannels$ | async) || []; track channel) {
39
- <mat-option [value]="channel">{{ channel }}</mat-option>
40
- }
41
- @empty {
42
- <mat-option disabled>No channels with data for today</mat-option>
43
- }
44
- </mat-select>
45
- </mat-form-field>
46
-
47
- <!-- Date Filter -->
48
- <mat-form-field appearance="outline" style="flex: 1; min-width: 200px;" [formGroup]="dateFilter">
49
- <mat-label>Start Date</mat-label>
50
- <input matInput [matDatepicker]="startPicker" formControlName="startDate">
51
- <mat-datepicker-toggle matIconSuffix [for]="startPicker"></mat-datepicker-toggle>
52
- <mat-datepicker #startPicker></mat-datepicker>
53
- </mat-form-field>
54
-
55
- <mat-form-field appearance="outline" style="flex: 1; min-width: 200px;" [formGroup]="dateFilter">
56
- <mat-label>End Date</mat-label>
57
- <input matInput [matDatepicker]="endPicker" formControlName="endDate">
58
- <mat-datepicker-toggle matIconSuffix [for]="endPicker"></mat-datepicker-toggle>
59
- <mat-datepicker #endPicker></mat-datepicker>
60
- </mat-form-field>
61
- </div>
62
-
63
- <div style="display: flex; gap: 0.5rem;">
64
- <span style="flex:1"></span>
65
- <button
66
- mat-raised-button color="primary"
67
- (click)="onConnectToChannel()"
68
- [disabled]="!selectedConnectionChannel.value"
69
- >
70
- Connect
71
- </button>
72
- </div>
73
- </div>
74
- }
75
- }
76
-
77
- <!-- Send Notification Section -->
78
- @if ((subscribedNotificationChannels$ | async); as subscribedChannels) {
79
- @if (subscribedChannels.length > 0) {
80
- <div
81
- style="padding: 1rem; background: #fff8e1; border-radius: 4px;"
82
- [formGroup]="notificationForm"
83
- >
84
- <strong>Send Notification</strong>
85
-
86
- <!-- Notification Content -->
87
- <div style="display: flex; flex-direction: column; margin-top: 0.5rem;">
88
- <mat-form-field style="width: 100%;" appearance="outline">
89
- <mat-label>Notification Message</mat-label>
90
- <textarea
91
- matInput placeholder="Type your notification..."
92
- formControlName="content"
93
- rows="2"
94
- (keydown.enter)="onSendNotification(); $event.preventDefault()"
95
- ></textarea>
96
- </mat-form-field>
97
- <div style="display: flex; justify-content: flex-end; margin-top: -0.5rem;">
98
- <button
99
- mat-raised-button color="accent"
100
- (click)="onSendNotification()"
101
- [disabled]="notificationForm.invalid"
102
- >
103
- Send Notification
104
- </button>
105
- </div>
106
- </div>
107
- </div>
108
- }
109
- }
110
-
111
- <!-- Notifications Table - Only shown when connected -->
112
- @if ((subscribedNotificationChannels$ | async); as subscribedChannels) {
113
- @if (isChannelConnected(subscribedChannels)) {
114
- @if ((notificationMessages$ | async); as notifications) {
115
- <div>
116
- <div style="display: flex; justify-content: space-between; align-items: center;">
117
- <strong>Notifications ({{ notifications.length }})</strong>
118
- </div>
119
-
120
- @if (notifications.length > 0) {
121
- <div style="margin-top: 0.5rem; height: 400px; overflow: auto; border: 1px solid #888; border-radius: 4px;">
122
- <table mat-table [dataSource]="notifications" style="width: 100%;">
123
-
124
- <!-- Date Column -->
125
- <ng-container matColumnDef="date">
126
- <th mat-header-cell *matHeaderCellDef style="width: 180px;">Date</th>
127
- <td mat-cell *matCellDef="let notification">
128
- {{ formatTimestamp(notification.created) | date }}
129
- </td>
130
- </ng-container>
131
-
132
- <!-- User Column -->
133
- <ng-container matColumnDef="user">
134
- <th mat-header-cell *matHeaderCellDef style="width: 150px;">User</th>
135
- <td mat-cell *matCellDef="let notification">
136
- <strong>{{ notification.user_name }}</strong>
137
- </td>
138
- </ng-container>
139
-
140
- <!-- Message Column -->
141
- <ng-container matColumnDef="message">
142
- <th mat-header-cell *matHeaderCellDef>Message</th>
143
- <td mat-cell *matCellDef="let notification">
144
- <div class="pill" [style.background-color]="notification.content.sessionId.color || '#000000'">
145
- {{ notification.content?.message || notification.content }}
146
- </div>
147
- </td>
148
- </ng-container>
149
-
150
- <tr mat-header-row *matHeaderRowDef="displayedColumns; sticky: true"></tr>
151
- <tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
152
- </table>
153
- </div>
154
- } @else {
155
- <div style="text-align: center; color: #666; padding: 2rem;">
156
- <mat-icon style="font-size: 48px; height: 48px; width: 48px; opacity: 0.5;">notifications_none</mat-icon>
157
- <p>No notifications yet. Waiting for notifications on this channel...</p>
158
- </div>
159
- }
160
- </div>
161
-
162
- <!-- Disconnect Button - Below the table -->
163
- <div style="display: flex; justify-content: right; padding: 1rem;">
164
- <button mat-raised-button color="warn" (click)="onDisconnectFromChannel()">
165
- Disconnect from Channel
166
- </button>
167
- </div>
168
- }
169
- }
170
- }
171
-
172
- </div>
@@ -1,31 +0,0 @@
1
- /* tslint:disable:no-unused-variable */
2
- import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
3
- import { HttpClientTestingModule } from '@angular/common/http/testing';
4
- import { By } from '@angular/platform-browser';
5
- import { DebugElement, NO_ERRORS_SCHEMA } from '@angular/core';
6
-
7
- import { WsNotificationsComponent } from './ws-notifications.component';
8
-
9
- describe('WsNotificationsComponent', () => {
10
- let component: WsNotificationsComponent;
11
- let fixture: ComponentFixture<WsNotificationsComponent>;
12
-
13
- beforeEach(waitForAsync(() => {
14
- TestBed.configureTestingModule({
15
- imports: [ HttpClientTestingModule ],
16
- declarations: [ WsNotificationsComponent ],
17
- schemas: [ NO_ERRORS_SCHEMA ]
18
- })
19
- .compileComponents();
20
- }));
21
-
22
- beforeEach(() => {
23
- fixture = TestBed.createComponent(WsNotificationsComponent);
24
- component = fixture.componentInstance;
25
- fixture.detectChanges();
26
- });
27
-
28
- it('should create', () => {
29
- expect(component).toBeTruthy();
30
- });
31
- });