http-request-manager 18.7.19 → 18.7.21

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/ARCHITECTURE.md +483 -0
  2. package/DATABASE_README.md +1176 -0
  3. package/HTTP_MANAGER_README.md +579 -0
  4. package/HTTP_SINGNALS_MANAGER_README.md +654 -0
  5. package/HTTP_STATE_MANAGER_README.md +948 -0
  6. package/INTERCEPTOR_README.md +549 -0
  7. package/LOCAL_STORAGE_README.md +1056 -0
  8. package/STORE_STATE_MANAGER_README.md +1322 -0
  9. package/UTILS_README.md +1186 -0
  10. package/WS_MANAGER_README.md +613 -0
  11. package/ng-package.json +8 -0
  12. package/package.json +1 -12
  13. package/src/lib/http-request-manager.module.ts +132 -0
  14. package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.html +65 -0
  15. package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.scss +0 -0
  16. package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.ts +224 -0
  17. package/src/lib/http-request-services-demo/http-request-services-demo.component.html +114 -0
  18. package/src/lib/http-request-services-demo/http-request-services-demo.component.scss +6 -0
  19. package/src/lib/http-request-services-demo/http-request-services-demo.component.ts +52 -0
  20. package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.html +195 -0
  21. package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.scss +17 -0
  22. package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.ts +206 -0
  23. package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.html +200 -0
  24. package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.scss +17 -0
  25. package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.ts +212 -0
  26. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.html +53 -0
  27. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.scss +60 -0
  28. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.ts +72 -0
  29. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-download.module.ts +28 -0
  30. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.html +10 -0
  31. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.scss +29 -0
  32. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.ts +100 -0
  33. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/models/download-labels-model.ts +22 -0
  34. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.html +8 -0
  35. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.scss +19 -0
  36. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.ts +26 -0
  37. package/src/lib/http-request-services-demo/request-manager-demo/models/app-session.model.ts +30 -0
  38. package/src/lib/http-request-services-demo/request-manager-demo/models/app.model.ts +19 -0
  39. package/src/lib/http-request-services-demo/request-manager-demo/models/get-sample.model.ts +25 -0
  40. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-ai-prompt.ts +19 -0
  41. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client-details.ts +24 -0
  42. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client-info.ts +30 -0
  43. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client.model.ts +49 -0
  44. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-mapper-client-info.ts +33 -0
  45. package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.html +392 -0
  46. package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.scss +24 -0
  47. package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.ts +461 -0
  48. package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.html +393 -0
  49. package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.scss +24 -0
  50. package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.ts +421 -0
  51. package/src/lib/http-request-services-demo/request-manager-state-demo/services/state-manager-demo.service.ts +87 -0
  52. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/services/state-data-request.service.ts +120 -0
  53. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.css +0 -0
  54. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.html +3 -0
  55. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.ts +16 -0
  56. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.css +0 -0
  57. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.html +3 -0
  58. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.ts +16 -0
  59. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.css +31 -0
  60. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.html +72 -0
  61. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.scss +41 -0
  62. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.spec.ts +205 -0
  63. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.ts +77 -0
  64. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.css +11 -0
  65. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.html +96 -0
  66. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.spec.ts +31 -0
  67. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.ts +229 -0
  68. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.css +30 -0
  69. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.html +172 -0
  70. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.spec.ts +31 -0
  71. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.ts +239 -0
  72. package/src/lib/http-request-services-demo/request-manager-ws-demo/models/oidc-client.model.ts +31 -0
  73. package/src/lib/http-request-services-demo/request-manager-ws-demo/models/user-data.model.ts +32 -0
  74. package/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.css +0 -0
  75. package/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.html +84 -0
  76. package/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.ts +41 -0
  77. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/index.ts +3 -0
  78. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/message-service-demo.service.ts +83 -0
  79. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/notification-service-demo.service.ts +147 -0
  80. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/state-service-demo.service.ts +158 -0
  81. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.html +53 -0
  82. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.scss +60 -0
  83. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.ts +72 -0
  84. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-download.module.ts +28 -0
  85. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.html +10 -0
  86. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.scss +29 -0
  87. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.ts +100 -0
  88. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/models/download-labels-model.ts +22 -0
  89. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.html +8 -0
  90. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.scss +19 -0
  91. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.ts +26 -0
  92. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/app-session.model.ts +30 -0
  93. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/app.model.ts +19 -0
  94. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/get-sample.model.ts +25 -0
  95. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-ai-prompt.ts +19 -0
  96. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client-details.ts +24 -0
  97. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client-info.ts +30 -0
  98. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client.model.ts +49 -0
  99. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-mapper-client-info.ts +33 -0
  100. package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.html +380 -0
  101. package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.scss +24 -0
  102. package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.ts +410 -0
  103. package/src/lib/http-request-services-demo/store-state-manager-demo/models/settings.model.ts +28 -0
  104. package/src/lib/http-request-services-demo/store-state-manager-demo/services/settings-state.service.ts +48 -0
  105. package/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.css +0 -0
  106. package/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.html +23 -0
  107. package/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.ts +36 -0
  108. package/src/lib/index.ts +3 -0
  109. package/src/lib/interceptors/credentials.interceptor.ts +16 -0
  110. package/src/lib/interceptors/index.ts +6 -0
  111. package/src/lib/interceptors/models/error-settings.model.ts +22 -0
  112. package/src/lib/interceptors/models/index.ts +2 -0
  113. package/src/lib/interceptors/proxy-debugger.interceptor.ts +46 -0
  114. package/src/lib/interceptors/request-error.interceptor.ts +65 -0
  115. package/src/lib/interceptors/request-header.interceptor.ts +53 -0
  116. package/src/lib/models/config-http-options.model.ts +42 -0
  117. package/src/lib/models/config-local-storage-options.model.ts +27 -0
  118. package/src/lib/models/config-options.model.ts +27 -0
  119. package/src/lib/models/config-token.model.ts +9 -0
  120. package/src/lib/models/data-type.enum.ts +5 -0
  121. package/src/lib/models/database-storage.model.ts +24 -0
  122. package/src/lib/models/index.ts +12 -0
  123. package/src/lib/models/retry-options.model.ts +22 -0
  124. package/src/lib/services/database-manager-service/database.manager.service.ts +262 -0
  125. package/src/lib/services/database-manager-service/db.storage.service.ts +207 -0
  126. package/src/lib/services/database-manager-service/index.ts +4 -0
  127. package/src/lib/services/database-manager-service/models/index.ts +2 -0
  128. package/src/lib/services/database-manager-service/models/table-schema.ts +33 -0
  129. package/src/lib/services/index.ts +12 -0
  130. package/src/lib/services/local-storage-manager-service/index.ts +4 -0
  131. package/src/lib/services/local-storage-manager-service/local-storage-manager.service.spec.ts +71 -0
  132. package/src/lib/services/local-storage-manager-service/local-storage-manager.service.ts +426 -0
  133. package/src/lib/services/local-storage-manager-service/local-storage-signals-manager.service.spec.ts +67 -0
  134. package/src/lib/services/local-storage-manager-service/local-storage-signals-manager.service.ts +345 -0
  135. package/src/lib/services/local-storage-manager-service/models/global-store-options.model.ts +30 -0
  136. package/src/lib/services/local-storage-manager-service/models/index.ts +6 -0
  137. package/src/lib/services/local-storage-manager-service/models/setting-options.model.ts +35 -0
  138. package/src/lib/services/local-storage-manager-service/models/storage-data.model.ts +24 -0
  139. package/src/lib/services/local-storage-manager-service/models/storage-option.model.ts +32 -0
  140. package/src/lib/services/local-storage-manager-service/models/storage-type.enum.ts +5 -0
  141. package/src/lib/services/request-manager-services/README.md +268 -0
  142. package/src/lib/services/request-manager-services/http-manager-signals.service.ts +246 -0
  143. package/src/lib/services/request-manager-services/http-manager.service.spec.ts +232 -0
  144. package/src/lib/services/request-manager-services/http-manager.service.ts +274 -0
  145. package/src/lib/services/request-manager-services/index.ts +8 -0
  146. package/src/lib/services/request-manager-services/request-signals.service.ts +214 -0
  147. package/src/lib/services/request-manager-services/request.service.ts +309 -0
  148. package/src/lib/services/request-manager-services/rxjs-operators/countdown.ts +17 -0
  149. package/src/lib/services/request-manager-services/rxjs-operators/delay-retry.ts +16 -0
  150. package/src/lib/services/request-manager-services/rxjs-operators/index.ts +4 -0
  151. package/src/lib/services/request-manager-services/rxjs-operators/request-polling.ts +35 -0
  152. package/src/lib/services/request-manager-services/rxjs-operators/request-streaming.ts +436 -0
  153. package/src/lib/services/request-manager-state-service/http-manager-state.store.ts +1321 -0
  154. package/src/lib/services/request-manager-state-service/index.ts +3 -0
  155. package/src/lib/services/request-manager-state-service/models/api-request.model.ts +61 -0
  156. package/src/lib/services/request-manager-state-service/models/index.ts +6 -0
  157. package/src/lib/services/request-manager-state-service/models/request-options.model.ts +22 -0
  158. package/src/lib/services/request-manager-state-service/models/stream-type.enum.ts +13 -0
  159. package/src/lib/services/request-manager-state-service/models/ws-options.model.ts +39 -0
  160. package/src/lib/services/store-state-manager-service/index.ts +3 -0
  161. package/src/lib/services/store-state-manager-service/models/index.ts +2 -0
  162. package/src/lib/services/store-state-manager-service/models/state-storage-options.model.ts +24 -0
  163. package/src/lib/services/store-state-manager-service/store-state-manager.service.ts +88 -0
  164. package/src/lib/services/utils/app.service.spec.ts +25 -0
  165. package/src/lib/services/utils/app.service.ts +21 -0
  166. package/src/lib/services/utils/encryption/README.md +79 -0
  167. package/src/lib/services/utils/encryption/asymmetrical-encryption.service.ts +282 -0
  168. package/src/lib/services/utils/encryption/encryption-test.service.ts +39 -0
  169. package/src/lib/services/utils/encryption/index.ts +5 -0
  170. package/src/lib/services/utils/encryption/random.ts +81 -0
  171. package/src/lib/services/utils/encryption/symmetrical-encryption.service.ts +93 -0
  172. package/src/lib/services/utils/headers.service.spec.ts +80 -0
  173. package/src/lib/services/utils/headers.service.ts +18 -0
  174. package/src/lib/services/utils/index.ts +7 -0
  175. package/src/lib/services/utils/object-merger.service.spec.ts +18 -0
  176. package/src/lib/services/utils/object-merger.service.ts +78 -0
  177. package/src/lib/services/utils/path-query.service.spec.ts +117 -0
  178. package/src/lib/services/utils/path-query.service.ts +69 -0
  179. package/src/lib/services/utils/random-color.utils.ts +83 -0
  180. package/src/lib/services/utils/utils.service.spec.ts +165 -0
  181. package/src/lib/services/utils/utils.service.ts +192 -0
  182. package/src/lib/services/ws-manager-service/index.ts +4 -0
  183. package/src/lib/services/ws-manager-service/models/channel-info.model.ts +24 -0
  184. package/src/lib/services/ws-manager-service/models/channel-message-data.model.ts +24 -0
  185. package/src/lib/services/ws-manager-service/models/channel-message.model.ts +24 -0
  186. package/src/lib/services/ws-manager-service/models/communication-type.enum.ts +5 -0
  187. package/src/lib/services/ws-manager-service/models/index.ts +5 -0
  188. package/src/lib/services/ws-manager-service/models/ws-user.model.ts +38 -0
  189. package/src/lib/services/ws-manager-service/services/index.ts +3 -0
  190. package/src/lib/services/ws-manager-service/services/websocket.service.ts +392 -0
  191. package/src/public-api.ts +14 -0
  192. package/tsconfig.lib.json +32 -0
  193. package/tsconfig.lib.prod.json +10 -0
  194. package/tsconfig.spec.json +14 -0
  195. package/fesm2022/http-request-manager.mjs +0 -7634
  196. package/fesm2022/http-request-manager.mjs.map +0 -1
  197. package/http-request-manager-18.7.19.tgz +0 -0
  198. package/types/http-request-manager.d.ts +0 -2278
@@ -0,0 +1,393 @@
1
+ <div style="margin: 2rem;">
2
+
3
+ <h2>
4
+ HTTP Request State Manager
5
+ </h2>
6
+
7
+ <div [formGroup]="requestForm" style="margin-top: 2rem;">
8
+ <div style="display: flex; gap: .5rem">
9
+ <mat-form-field appearance="outline">
10
+ <mat-label>State Data Type</mat-label>
11
+ <mat-select formControlName="datatype">
12
+ <mat-option value="ARRAY">Array</mat-option>
13
+ <mat-option value="OBJECT">Object</mat-option>
14
+ </mat-select>
15
+ </mat-form-field>
16
+ </div>
17
+ <div style="display: flex; gap: .5rem">
18
+ <mat-form-field appearance="outline">
19
+ <mat-label>Adapter (Model)</mat-label>
20
+ <mat-select formControlName="adapter" #adapterSelect>
21
+ <mat-option>None</mat-option>
22
+ @for (adapter of sampleAdaptors; track adapter) {
23
+ <mat-option [value]="adapter.value">
24
+ {{adapter.label}}
25
+ </mat-option>
26
+ }
27
+ </mat-select>
28
+ </mat-form-field>
29
+ <mat-form-field appearance="outline">
30
+ <mat-label>Mapper (Model)</mat-label>
31
+ <mat-select formControlName="mapper" #mapperSelect>
32
+ <mat-option>None</mat-option>
33
+ @for (mapper of sampleMappers; track mapper) {
34
+ <mat-option [value]="mapper.value">
35
+ {{mapper.label}}
36
+ </mat-option>
37
+ }
38
+ </mat-select>
39
+ </mat-form-field>
40
+ </div>
41
+
42
+ @if (adapterSelect.value || mapperSelect.value) {
43
+ <div style="display: flex; margin-bottom: 2rem;">
44
+ <div style="flex:1" class="box">
45
+ <h3>Adapter (Incoming)</h3>
46
+ @if (adapterSelect.value) {
47
+ <div>
48
+ {{ props(adapterSelect.value) | json }}
49
+ </div>
50
+ } @else {
51
+ No Transformation
52
+ }
53
+ </div>
54
+ <div style="flex:1" class="box">
55
+ <h3>Mapper (Outgoing)</h3>
56
+ @if (mapperSelect.value) {
57
+ <div>
58
+ {{ props(mapperSelect.value) | json }}
59
+ </div>
60
+ } @else {
61
+ No Transformation
62
+ }
63
+ </div>
64
+ </div>
65
+ }
66
+
67
+ <div>
68
+ <mat-form-field appearance="outline">
69
+ <mat-label>RestPath (/ delimited)</mat-label>
70
+ <input matInput placeholder="clients/list" formControlName="path">
71
+ </mat-form-field>
72
+ </div>
73
+ <div>
74
+ <div formArrayName="headers">
75
+ @for (task of headers.controls; track task; let i = $index) {
76
+ <div [formGroupName]="i">
77
+ <div style="display: flex; gap: .5rem">
78
+ <mat-form-field appearance="outline">
79
+ <mat-label>Key</mat-label>
80
+ <input matInput placeholder="authentication" formControlName="key">
81
+ </mat-form-field>
82
+ <mat-form-field appearance="outline" style="flex:1">
83
+ <mat-label>Value</mat-label>
84
+ <input matInput placeholder="sample" formControlName="value">
85
+ </mat-form-field>
86
+ <div style="margin-top: .5rem;">
87
+ <button mat-icon-button (click)="removeHeader(i)">
88
+ <mat-icon>close</mat-icon>
89
+ </button>
90
+ </div>
91
+ </div>
92
+ </div>
93
+ }
94
+ </div>
95
+ <button mat-stroked-button (click)="addHeader()">Add Header</button>
96
+ </div>
97
+ <div style="margin-top: 2rem; display: flex; flex-direction:column; gap: 1rem;">
98
+ <div>
99
+ <mat-slide-toggle #failedState>Retry on Failed</mat-slide-toggle>
100
+ @if (failedState.checked) {
101
+ <div style="display: flex; gap: .5rem; margin-top: 1rem;" formGroupName="retry">
102
+ <mat-form-field appearance="outline">
103
+ <mat-label>#of Times</mat-label>
104
+ <input matInput placeholder="3" formControlName="times" value="3">
105
+ </mat-form-field>
106
+ <mat-form-field appearance="outline">
107
+ <mat-label>Delay Until Next</mat-label>
108
+ <input matInput placeholder="3" formControlName="delay" value="3">
109
+ </mat-form-field>
110
+ </div>
111
+ }
112
+ </div>
113
+ <div>
114
+ <mat-slide-toggle #pollingState>Polling</mat-slide-toggle>
115
+ @if (pollingState.checked) {
116
+ <div>
117
+ <mat-form-field appearance="outline" style="margin-top: 1rem">
118
+ <mat-label>#of Seconds</mat-label>
119
+ <input matInput placeholder="3" formControlName="polling" value="3">
120
+ </mat-form-field>
121
+ </div>
122
+ }
123
+ </div>
124
+ <div>
125
+ <mat-slide-toggle #DBState>Database Storage</mat-slide-toggle>
126
+ @if (DBState.checked) {
127
+ <div style="display: flex; gap: .5rem; margin-top: 1rem" formGroupName="database">
128
+ <mat-form-field appearance="outline">
129
+ <mat-label>Table Name</mat-label>
130
+ <input matInput placeholder="table" formControlName="table" value="">
131
+ </mat-form-field>
132
+ <div>
133
+ <mat-form-field appearance="outline">
134
+ <mat-label>Expires In</mat-label>
135
+ <mat-select formControlName="expiresIn">
136
+ <mat-option value="1m">One Minute</mat-option>
137
+ <mat-option value="1h">One Hour</mat-option>
138
+ <mat-option value="1d">One Day</mat-option>
139
+ </mat-select>
140
+ </mat-form-field>
141
+ </div>
142
+ </div>
143
+ }
144
+ </div>
145
+ <div style="margin-top: 1rem; display: flex;">
146
+ <span style="flex:1"></span>
147
+ <button mat-stroked-button (click)="onSetStateOptions()" [disabled]="!hasChanged">
148
+ Set API Request Options
149
+ </button>
150
+ </div>
151
+ <div>
152
+ @if ((error$ | async); as error) {
153
+ <mat-error>
154
+ {{ error }}
155
+ </mat-error>
156
+ }
157
+ </div>
158
+ </div>
159
+ </div>
160
+
161
+ <div style="margin-bottom: 1rem; margin-top: 2rem;">
162
+ @if ((isPending$ | async)) {
163
+ <mat-progress-bar mode="indeterminate"
164
+ ></mat-progress-bar>
165
+ }
166
+ @if (pollingState.checked) {
167
+ <div>
168
+ @if (!(isPending$ | async) && (this.countdown$ | async) || -1 > 0) {
169
+ <mat-progress-bar mode="determinate"
170
+ [value]="(this.countdown$ | async)"
171
+ ></mat-progress-bar>
172
+ }
173
+ </div>
174
+ }
175
+
176
+ </div>
177
+
178
+ @if ((GET$ | async); as data) {
179
+ <div style="margin-top: 2rem">
180
+ <div style="display: flex;">
181
+ <h2 style="flex:1;">CURRENT STATE ({{ dataType }})</h2>
182
+ </div>
183
+ @if (data.length > 1) {
184
+ <div>
185
+ <mat-form-field appearance="outline">
186
+ <mat-label>Records</mat-label>
187
+ <mat-select [formControl]="selectedRecord" [disabled]="data === null && data?.length === 0">
188
+ <mat-option [value]="">None</mat-option>
189
+ @for (item of data; track item) {
190
+ <mat-option [value]="item">
191
+ {{item.name || (item.first_name) | titlecase}}
192
+ </mat-option>
193
+ }
194
+ </mat-select>
195
+ </mat-form-field>
196
+ </div>
197
+ }
198
+ @if ((dataObservable$ | async); as dataRecord) {
199
+ <div>
200
+ @if ((selectedRecord$ | async); as record) {
201
+ <div>
202
+ {{ record | json }}
203
+ </div>
204
+ } @else {
205
+ No Record Selected from State
206
+ }
207
+ </div>
208
+ }
209
+ <div style="margin-top: 1rem;">
210
+ @if (data !== null && data?.length > 0) {
211
+ <span>
212
+ State contains a Total of {{ data.length }} Records
213
+ </span>
214
+ } @else {
215
+ No Records
216
+ }
217
+ <div style="display: flex; gap: .5rem; text-align: end; justify-content: flex-end;">
218
+ <button class="btn" mat-stroked-button (click)="onClearRecords()">Clear</button>
219
+ </div>
220
+ </div>
221
+ </div>
222
+ }
223
+
224
+
225
+
226
+
227
+ <div style="margin-top: 1rem">
228
+ <mat-divider></mat-divider>
229
+ </div>
230
+
231
+ <div style="margin-top: 2rem">
232
+ <div style="display: flex;">
233
+ <h2 style="flex:1">GET Request ({{ dataType }})</h2>
234
+ <div>
235
+ <button mat-raised-button (click)="onGetRequest()" [disabled]="hasChanged" class="btn">Request</button>
236
+ </div>
237
+ </div>
238
+
239
+ @if ((GET_error$ | async); as get_error) {
240
+ <div style="margin-top: .5rem;">
241
+ <mat-error>{{ get_error }}</mat-error>
242
+ </div>
243
+ }
244
+
245
+ <div style="margin-top: 1rem;">
246
+ <!-- <div [innerHTML]="(GET$ | async) | jsonv"></div> -->
247
+ @if ((GET$ | async); as getData) {
248
+ <div>{{ getData | json }}</div>
249
+ }
250
+ </div>
251
+
252
+ </div>
253
+
254
+ <div style="margin-top: 2rem">
255
+ <mat-divider></mat-divider>
256
+ </div>
257
+
258
+ <div style="margin-top: 2rem">
259
+ <div style="display: flex;">
260
+ <h2 style="flex:1">POST Request</h2>
261
+ <div>
262
+ <button mat-raised-button (click)="onCreateRequest()" [disabled]="hasChanged" class="btn">Request</button>
263
+ </div>
264
+ </div>
265
+
266
+ @if ((POST_error$ | async); as post_error) {
267
+ <div style="margin-top: .5rem;">
268
+ <mat-error>{{ post_error }}</mat-error>
269
+ </div>
270
+ }
271
+
272
+ <div style="margin-top: 1rem;">
273
+ <!-- <div [innerHTML]="(POST$ | async) | jsonv"></div> -->
274
+ @if ((POST$ | async); as postData) {
275
+ <div>{{ postData | json }}</div>
276
+ }
277
+ </div>
278
+
279
+ </div>
280
+
281
+ <div style="margin-top: 2rem">
282
+ <mat-divider></mat-divider>
283
+ </div>
284
+
285
+ <div style="margin-top: 2rem">
286
+ <div style="display: flex;">
287
+ <h2 style="flex:1">PUT Request</h2>
288
+ <div>
289
+ <button mat-raised-button (click)="onUpdateRequest()" [disabled]="hasChanged" class="btn">Request</button>
290
+ </div>
291
+ </div>
292
+
293
+ @if ((PUT_error$ | async); as put_error) {
294
+ <div style="margin-top: .5rem;">
295
+ <mat-error>{{ put_error }}</mat-error>
296
+ </div>
297
+ }
298
+
299
+ <div style="margin-top: 1rem;">
300
+ <!-- <div [innerHTML]="(PUT$ | async) | jsonv"></div> -->
301
+ @if ((PUT$ | async); as putData) {
302
+ <div>{{ putData | json }}</div>
303
+ }
304
+ </div>
305
+
306
+ </div>
307
+
308
+ <div style="margin-top: 2rem">
309
+ <mat-divider></mat-divider>
310
+ </div>
311
+
312
+ <div style="margin-top: 2rem">
313
+ <div style="display: flex;">
314
+ <h2 style="flex:1">DELETE Request</h2>
315
+ <div>
316
+ <button mat-raised-button (click)="onDeleteRequest()" [disabled]="hasChanged" class="btn">Request</button>
317
+ </div>
318
+ </div>
319
+
320
+ @if ((DELETE_error$ | async); as delete_error) {
321
+ <div style="margin-top: .5rem;">
322
+ <mat-error>{{ delete_error }}</mat-error>
323
+ </div>
324
+ }
325
+
326
+ <div style="margin-top: 1rem;">
327
+ <!-- <div [innerHTML]="(DELETE$ | async) | jsonv"></div> -->
328
+ @if ((DELETE$ | async); as deleteData) {
329
+ <div>{{ deleteData | json }}</div>
330
+ }
331
+ </div>
332
+
333
+ </div>
334
+
335
+ <div style="margin-top: 2rem">
336
+ <mat-divider></mat-divider>
337
+ </div>
338
+
339
+ <div style="margin-top: 2rem">
340
+ <div style="display: flex;">
341
+ <h2 style="flex:1">Streaming GET Request</h2>
342
+ <div style="display: flex; gap: 1rem; align-items: center;">
343
+ <div style="display: flex; gap: 1rem; align-items: center;">
344
+ {{ streamType }}
345
+ <button mat-icon-button [matMenuTriggerFor]="menu">
346
+ <mat-icon>data_usage</mat-icon>
347
+ </button>
348
+ </div>
349
+ <mat-menu #menu="matMenu">
350
+ <button mat-menu-item *ngFor="let item of streamTypes" (click)="onStreamType(item.id)">{{ item.value }}</button>
351
+ </mat-menu>
352
+ <button mat-raised-button (click)="onStreamRequest()" class="btn" [disabled]="hasChanged">Request</button>
353
+ </div>
354
+ </div>
355
+
356
+ @if ((STREAM_error$ | async); as stream_error) {
357
+ <div style="margin-top: .5rem;">
358
+ <mat-error>{{ stream_error }}</mat-error>
359
+ </div>
360
+ }
361
+
362
+ <div style="margin-top: 1rem;">
363
+ @if ((STREAM$ | async); as data) {
364
+ <div class="container">
365
+ <table mat-table [dataSource]="data" class="mat-elevation-z8">
366
+
367
+ <!-- Dynamic columns -->
368
+ <ng-container *ngFor="let column of displayedColumns" [matColumnDef]="column">
369
+ <th mat-header-cell *matHeaderCellDef> {{ column | titlecase }} </th>
370
+ <td mat-cell *matCellDef="let element">
371
+ @if (isObject(element[column]); as objValue) {
372
+ <pre style="margin: 0; font-size: 0.8em; white-space: pre-wrap;">{{ objValue | json }}</pre>
373
+ } @else {
374
+ {{ element[column] }}
375
+ }
376
+ </td>
377
+ </ng-container>
378
+
379
+ <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
380
+ <tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
381
+ </table>
382
+
383
+ <!-- Debug info -->
384
+ <div style="margin-top: 1rem; font-size: 0.8em; color: #666;">
385
+ Columns: {{ displayedColumns.join(', ') }} | Data received
386
+ </div>
387
+ </div>
388
+ }
389
+ </div>
390
+
391
+ </div>
392
+
393
+ </div>
@@ -0,0 +1,24 @@
1
+ .btn {
2
+ min-width: 120px;
3
+ }
4
+
5
+ .mat-mdc-row .mat-mdc-cell {
6
+ border-bottom: 1px solid transparent;
7
+ border-top: 1px solid transparent;
8
+ cursor: pointer;
9
+ }
10
+
11
+ .mat-mdc-row:hover .mat-mdc-cell {
12
+ border-color: currentColor;
13
+ background-color: whitesmoke;
14
+ }
15
+
16
+ .container {
17
+ height: 400px;
18
+ overflow: auto;
19
+ }
20
+
21
+ .box {
22
+ padding: 10px;
23
+ border: 1px solid #ccc;
24
+ }