http-request-manager 18.15.34 → 18.16.1
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.
- package/fesm2022/http-request-manager.mjs +13688 -0
- package/fesm2022/http-request-manager.mjs.map +1 -0
- package/http-request-manager-18.16.0.tgz +0 -0
- package/package.json +15 -6
- package/types/http-request-manager.d.ts +3968 -0
- package/TEST_COVERAGE_SUMMARY.md +0 -458
- package/ng-package.json +0 -8
- package/src/docs/ADVANCED_WEBSOCKET.md +0 -633
- package/src/docs/ARCHITECTURE.md +0 -633
- package/src/docs/BATCH_REQUEST_README.md +0 -467
- package/src/docs/COMPLETE_API_REFERENCE.md +0 -1037
- package/src/docs/DATABASE_README.md +0 -1195
- package/src/docs/ENCRYPTION_README.md +0 -403
- package/src/docs/HTTP_MANAGER_README.md +0 -628
- package/src/docs/HTTP_SINGNALS_MANAGER_README.md +0 -654
- package/src/docs/HTTP_STATE_MANAGER_README.md +0 -1391
- package/src/docs/INTERCEPTOR_README.md +0 -549
- package/src/docs/LOCAL_STORAGE_README.md +0 -1056
- package/src/docs/LOCAL_STORAGE_SIGNALS_README.md +0 -338
- package/src/docs/LOGGER_README.md +0 -310
- package/src/docs/MESSAGE_TRACKER_README.md +0 -518
- package/src/docs/MESSAGE_TRACKER_SIGNALS_README.md +0 -563
- package/src/docs/MODELS_README.md +0 -1264
- package/src/docs/SIGNAL_SERVICES_README.md +0 -238
- package/src/docs/SQL_DIXIE_README.md +0 -574
- package/src/docs/STORE_STATE_MANAGER_README.md +0 -556
- package/src/docs/STORE_STATE_SIGNALS_README.md +0 -600
- package/src/docs/UPLOAD_REQUEST_README.md +0 -324
- package/src/docs/UTILS_README.md +0 -1604
- package/src/docs/WEBSOCKET_MESSAGE_SERVICE.md +0 -799
- package/src/docs/WEBSOCKET_SIGNALS_README.md +0 -641
- package/src/docs/WEBSOCKET_SINGLETON_REFACTORING.md +0 -201
- package/src/docs/WS_MANAGER_README.md +0 -613
- package/src/lib/http-request-manager.module.ts +0 -147
- package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.html +0 -116
- package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.scss +0 -0
- package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.ts +0 -255
- package/src/lib/http-request-services-demo/http-request-services-demo.component.html +0 -123
- package/src/lib/http-request-services-demo/http-request-services-demo.component.scss +0 -6
- package/src/lib/http-request-services-demo/http-request-services-demo.component.ts +0 -53
- package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.html +0 -195
- package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.scss +0 -17
- package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.ts +0 -208
- package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.html +0 -200
- package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.scss +0 -17
- package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.ts +0 -214
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/download-file/download-file.component.html +0 -53
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/download-file/download-file.component.scss +0 -60
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/download-file/download-file.component.ts +0 -72
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/file-download.module.ts +0 -28
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/file-downloader.component.html +0 -10
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/file-downloader.component.scss +0 -29
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/file-downloader.component.ts +0 -100
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/models/download-labels-model.ts +0 -22
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/spinner/spinner.component.html +0 -8
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/spinner/spinner.component.scss +0 -19
- package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/spinner/spinner.component.ts +0 -26
- package/src/lib/http-request-services-demo/request-manager-basic-demo/models/app-session.model.ts +0 -30
- package/src/lib/http-request-services-demo/request-manager-basic-demo/models/app.model.ts +0 -19
- package/src/lib/http-request-services-demo/request-manager-basic-demo/models/get-sample.model.ts +0 -25
- package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-ai-prompt.ts +0 -19
- package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-client-details.ts +0 -24
- package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-client-info.ts +0 -30
- package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-client.model.ts +0 -49
- package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-mapper-client-info.ts +0 -33
- package/src/lib/http-request-services-demo/request-manager-basic-demo/request-manager-basic-demo.component.html +0 -279
- package/src/lib/http-request-services-demo/request-manager-basic-demo/request-manager-basic-demo.component.scss +0 -24
- package/src/lib/http-request-services-demo/request-manager-basic-demo/request-manager-basic-demo.component.ts +0 -461
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.html +0 -53
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.scss +0 -60
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.ts +0 -72
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-download.module.ts +0 -28
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.html +0 -10
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.scss +0 -29
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.ts +0 -100
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/models/download-labels-model.ts +0 -22
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.html +0 -8
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.scss +0 -19
- package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.ts +0 -26
- package/src/lib/http-request-services-demo/request-manager-demo/models/app-session.model.ts +0 -30
- package/src/lib/http-request-services-demo/request-manager-demo/models/app.model.ts +0 -19
- package/src/lib/http-request-services-demo/request-manager-demo/models/get-sample.model.ts +0 -25
- package/src/lib/http-request-services-demo/request-manager-demo/models/sample-ai-prompt.ts +0 -19
- package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client-details.ts +0 -24
- package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client-info.ts +0 -30
- package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client.model.ts +0 -49
- package/src/lib/http-request-services-demo/request-manager-demo/models/sample-mapper-client-info.ts +0 -33
- package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.html +0 -622
- package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.scss +0 -106
- package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.ts +0 -687
- package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.html +0 -418
- package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.scss +0 -24
- package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.ts +0 -576
- package/src/lib/http-request-services-demo/request-manager-state-demo/services/state-manager-demo.service.ts +0 -89
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/services/state-data-request.service.ts +0 -119
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.css +0 -0
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.html +0 -3
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.ts +0 -16
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.css +0 -0
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.html +0 -3
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.ts +0 -16
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.css +0 -31
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.html +0 -94
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.scss +0 -41
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.spec.ts +0 -203
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.ts +0 -144
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.css +0 -11
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.html +0 -102
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.spec.ts +0 -40
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.ts +0 -230
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.css +0 -30
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.html +0 -172
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.spec.ts +0 -31
- package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.ts +0 -239
- package/src/lib/http-request-services-demo/request-manager-ws-demo/models/oidc-client.model.ts +0 -31
- package/src/lib/http-request-services-demo/request-manager-ws-demo/models/user-data.model.ts +0 -32
- package/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.css +0 -0
- package/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.html +0 -84
- package/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.ts +0 -40
- package/src/lib/http-request-services-demo/request-manager-ws-demo/services/index.ts +0 -3
- package/src/lib/http-request-services-demo/request-manager-ws-demo/services/jwt-token.service.ts +0 -62
- package/src/lib/http-request-services-demo/request-manager-ws-demo/services/message-service-demo.service.ts +0 -83
- package/src/lib/http-request-services-demo/request-manager-ws-demo/services/notification-service-demo.service.ts +0 -147
- package/src/lib/http-request-services-demo/request-manager-ws-demo/services/state-service-demo.service.ts +0 -168
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.html +0 -53
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.scss +0 -60
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.ts +0 -72
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-download.module.ts +0 -28
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.html +0 -10
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.scss +0 -29
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.ts +0 -100
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/models/download-labels-model.ts +0 -22
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.html +0 -8
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.scss +0 -19
- package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.ts +0 -26
- package/src/lib/http-request-services-demo/request-signals-manager-demo/models/app-session.model.ts +0 -30
- package/src/lib/http-request-services-demo/request-signals-manager-demo/models/app.model.ts +0 -19
- package/src/lib/http-request-services-demo/request-signals-manager-demo/models/get-sample.model.ts +0 -25
- package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-ai-prompt.ts +0 -19
- package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client-details.ts +0 -24
- package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client-info.ts +0 -30
- package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client.model.ts +0 -49
- package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-mapper-client-info.ts +0 -33
- package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.html +0 -380
- package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.scss +0 -24
- package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.ts +0 -410
- package/src/lib/http-request-services-demo/store-state-manager-demo/models/settings.model.ts +0 -28
- package/src/lib/http-request-services-demo/store-state-manager-demo/services/settings-state.service.ts +0 -49
- package/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.css +0 -0
- package/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.html +0 -23
- package/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.ts +0 -36
- package/src/lib/http-request-services-demo/store-state-signals-demo/store-state-signals-demo.component.ts +0 -161
- package/src/lib/http-request-services-demo/upload-demo/models/index.ts +0 -1
- package/src/lib/http-request-services-demo/upload-demo/models/upload-state.model.ts +0 -30
- package/src/lib/http-request-services-demo/upload-demo/upload-demo.component.html +0 -89
- package/src/lib/http-request-services-demo/upload-demo/upload-demo.component.scss +0 -160
- package/src/lib/http-request-services-demo/upload-demo/upload-demo.component.spec.ts +0 -101
- package/src/lib/http-request-services-demo/upload-demo/upload-demo.component.ts +0 -136
- package/src/lib/index.ts +0 -3
- package/src/lib/interceptors/credentials.interceptor.ts +0 -16
- package/src/lib/interceptors/index.ts +0 -6
- package/src/lib/interceptors/models/error-settings.model.ts +0 -22
- package/src/lib/interceptors/models/index.ts +0 -2
- package/src/lib/interceptors/proxy-debugger.interceptor.ts +0 -46
- package/src/lib/interceptors/request-error.interceptor.ts +0 -65
- package/src/lib/interceptors/request-header.interceptor.ts +0 -56
- package/src/lib/message-display/README.md +0 -509
- package/src/lib/message-display/index.ts +0 -4
- package/src/lib/message-display/models/action.model.ts +0 -27
- package/src/lib/message-display/models/communication-message.model.ts +0 -77
- package/src/lib/message-display/models/display-config.model.ts +0 -35
- package/src/lib/message-display/models/display-rule.interface.ts +0 -28
- package/src/lib/message-display/models/display-strategy.interface.ts +0 -8
- package/src/lib/message-display/models/index.ts +0 -6
- package/src/lib/message-display/models/slide.model.ts +0 -24
- package/src/lib/message-display/rules/default-display-rules.ts +0 -35
- package/src/lib/message-display/services/message-display-router.service.ts +0 -63
- package/src/lib/message-display/strategies/snackbar.strategy.ts +0 -46
- package/src/lib/models/batch-options.model.ts +0 -33
- package/src/lib/models/batch-progress.model.ts +0 -19
- package/src/lib/models/batch-request-state.model.ts +0 -40
- package/src/lib/models/batch-result.model.ts +0 -30
- package/src/lib/models/config-http-options.model.ts +0 -45
- package/src/lib/models/config-local-storage-options.model.ts +0 -27
- package/src/lib/models/config-options.model.ts +0 -27
- package/src/lib/models/config-token.model.ts +0 -9
- package/src/lib/models/data-type.enum.ts +0 -5
- package/src/lib/models/database-storage.model.ts +0 -24
- package/src/lib/models/index.ts +0 -16
- package/src/lib/models/retry-options.model.ts +0 -22
- package/src/lib/models/upload-validation-error.model.ts +0 -46
- package/src/lib/services/SQL-DixieJS service/dexie-query-executor.ts +0 -246
- package/src/lib/services/SQL-DixieJS service/dexie-sql.service.ts +0 -31
- package/src/lib/services/SQL-DixieJS service/index.ts +0 -4
- package/src/lib/services/SQL-DixieJS service/models/execution-plan.model.ts +0 -52
- package/src/lib/services/SQL-DixieJS service/models/index.ts +0 -3
- package/src/lib/services/SQL-DixieJS service/models/sql-errors.model.ts +0 -13
- package/src/lib/services/SQL-DixieJS service/models/sql-options.model.ts +0 -3
- package/src/lib/services/SQL-DixieJS service/query-planner.ts +0 -284
- package/src/lib/services/SQL-DixieJS service/schema-validator.ts +0 -217
- package/src/lib/services/SQL-DixieJS service/sql-parser.ts +0 -35
- package/src/lib/services/database-manager-service/database.manager.service.ts +0 -384
- package/src/lib/services/database-manager-service/db.storage.service.ts +0 -240
- package/src/lib/services/database-manager-service/index.ts +0 -4
- package/src/lib/services/database-manager-service/models/index.ts +0 -2
- package/src/lib/services/database-manager-service/models/table-schema.ts +0 -33
- package/src/lib/services/index.ts +0 -20
- package/src/lib/services/local-storage-manager-service/index.ts +0 -4
- package/src/lib/services/local-storage-manager-service/local-storage-manager.service.spec.ts +0 -71
- package/src/lib/services/local-storage-manager-service/local-storage-manager.service.ts +0 -567
- package/src/lib/services/local-storage-manager-service/local-storage-signals-manager.service.spec.ts +0 -67
- package/src/lib/services/local-storage-manager-service/local-storage-signals-manager.service.ts +0 -437
- package/src/lib/services/local-storage-manager-service/models/global-store-options.model.ts +0 -30
- package/src/lib/services/local-storage-manager-service/models/index.ts +0 -6
- package/src/lib/services/local-storage-manager-service/models/setting-options.model.ts +0 -35
- package/src/lib/services/local-storage-manager-service/models/storage-data.model.ts +0 -24
- package/src/lib/services/local-storage-manager-service/models/storage-option.model.ts +0 -32
- package/src/lib/services/local-storage-manager-service/models/storage-type.enum.ts +0 -5
- package/src/lib/services/request-manager-services/README.md +0 -282
- package/src/lib/services/request-manager-services/http-manager-signals.service.ts +0 -674
- package/src/lib/services/request-manager-services/http-manager.service.spec.ts +0 -353
- package/src/lib/services/request-manager-services/http-manager.service.ts +0 -727
- package/src/lib/services/request-manager-services/index.ts +0 -8
- package/src/lib/services/request-manager-services/request-signals.service.ts +0 -372
- package/src/lib/services/request-manager-services/request.service.ts +0 -435
- package/src/lib/services/request-manager-services/rxjs-operators/countdown.ts +0 -17
- package/src/lib/services/request-manager-services/rxjs-operators/delay-retry.ts +0 -16
- package/src/lib/services/request-manager-services/rxjs-operators/index.ts +0 -4
- package/src/lib/services/request-manager-services/rxjs-operators/request-polling.ts +0 -35
- package/src/lib/services/request-manager-services/rxjs-operators/request-streaming.ts +0 -468
- package/src/lib/services/request-manager-state-service/http-manager-state.store.spec.ts +0 -665
- package/src/lib/services/request-manager-state-service/http-manager-state.store.ts +0 -2395
- package/src/lib/services/request-manager-state-service/index.ts +0 -3
- package/src/lib/services/request-manager-state-service/models/api-request.model.ts +0 -86
- package/src/lib/services/request-manager-state-service/models/index.ts +0 -14
- package/src/lib/services/request-manager-state-service/models/operation-result.model.ts +0 -18
- package/src/lib/services/request-manager-state-service/models/parsing-result.model.ts +0 -21
- package/src/lib/services/request-manager-state-service/models/request-options.model.ts +0 -37
- package/src/lib/services/request-manager-state-service/models/stream-config.model.ts +0 -20
- package/src/lib/services/request-manager-state-service/models/stream-event-metadata.model.ts +0 -23
- package/src/lib/services/request-manager-state-service/models/stream-event.model.ts +0 -23
- package/src/lib/services/request-manager-state-service/models/stream-output.model.ts +0 -23
- package/src/lib/services/request-manager-state-service/models/stream-progress.model.ts +0 -24
- package/src/lib/services/request-manager-state-service/models/stream-type.enum.ts +0 -13
- package/src/lib/services/request-manager-state-service/models/ws-options.model.ts +0 -42
- package/src/lib/services/store-state-manager-service/index.ts +0 -4
- package/src/lib/services/store-state-manager-service/models/index.ts +0 -3
- package/src/lib/services/store-state-manager-service/models/state-operation-result.model.ts +0 -30
- package/src/lib/services/store-state-manager-service/models/state-storage-options.model.ts +0 -24
- package/src/lib/services/store-state-manager-service/store-state-manager-signals.service.ts +0 -169
- package/src/lib/services/store-state-manager-service/store-state-manager.service.ts +0 -153
- package/src/lib/services/utils/app.service.spec.ts +0 -25
- package/src/lib/services/utils/app.service.ts +0 -21
- package/src/lib/services/utils/encryption/README.md +0 -79
- package/src/lib/services/utils/encryption/asymmetrical-encryption.service.ts +0 -282
- package/src/lib/services/utils/encryption/encryption-test.service.ts +0 -39
- package/src/lib/services/utils/encryption/index.ts +0 -5
- package/src/lib/services/utils/encryption/random.ts +0 -81
- package/src/lib/services/utils/encryption/symmetrical-encryption.service.ts +0 -106
- package/src/lib/services/utils/headers.service.spec.ts +0 -80
- package/src/lib/services/utils/headers.service.ts +0 -18
- package/src/lib/services/utils/index.ts +0 -9
- package/src/lib/services/utils/logger.service.ts +0 -90
- package/src/lib/services/utils/models/index.ts +0 -4
- package/src/lib/services/utils/models/normalized-request-options.model.ts +0 -24
- package/src/lib/services/utils/models/path-tracker-state.model.ts +0 -20
- package/src/lib/services/utils/models/query-params-tracker-options.model.ts +0 -24
- package/src/lib/services/utils/models/query-tracker-state.model.ts +0 -23
- package/src/lib/services/utils/object-merger.service.spec.ts +0 -18
- package/src/lib/services/utils/object-merger.service.ts +0 -78
- package/src/lib/services/utils/path-query.service.spec.ts +0 -117
- package/src/lib/services/utils/path-query.service.ts +0 -69
- package/src/lib/services/utils/query-params-tracker.service.ts +0 -442
- package/src/lib/services/utils/random-color.utils.ts +0 -83
- package/src/lib/services/utils/utils.service.spec.ts +0 -165
- package/src/lib/services/utils/utils.service.ts +0 -192
- package/src/lib/services/ws-manager-service/index.ts +0 -13
- package/src/lib/services/ws-manager-service/message-tracker-signals.service.ts +0 -147
- package/src/lib/services/ws-manager-service/message-tracker.service.ts +0 -477
- package/src/lib/services/ws-manager-service/models/channel-info.model.ts +0 -29
- package/src/lib/services/ws-manager-service/models/channel-message-data.model.ts +0 -24
- package/src/lib/services/ws-manager-service/models/channel-message.model.ts +0 -36
- package/src/lib/services/ws-manager-service/models/channel-type.enum.ts +0 -6
- package/src/lib/services/ws-manager-service/models/communication-type.enum.ts +0 -5
- package/src/lib/services/ws-manager-service/models/index.ts +0 -10
- package/src/lib/services/ws-manager-service/models/notification-message.model.ts +0 -29
- package/src/lib/services/ws-manager-service/models/public-message.model.ts +0 -18
- package/src/lib/services/ws-manager-service/models/state-message.model.ts +0 -18
- package/src/lib/services/ws-manager-service/models/ws-user.model.ts +0 -38
- package/src/lib/services/ws-manager-service/services/index.ts +0 -4
- package/src/lib/services/ws-manager-service/services/websocket-message.service.ts +0 -129
- package/src/lib/services/ws-manager-service/services/websocket.service.ts +0 -434
- package/src/lib/services/ws-manager-service/websocket-service/index.ts +0 -1
- package/src/lib/services/ws-manager-service/websocket-service/websocket-manager.service.ts +0 -716
- package/src/lib/services/ws-manager-service/websocket-services-complete.spec.ts +0 -596
- package/src/lib/services/ws-manager-service/websocket-signals-manager.service.ts +0 -141
- package/src/public-api.ts +0 -19
- package/tsconfig.lib.json +0 -34
- package/tsconfig.lib.prod.json +0 -10
- package/tsconfig.spec.json +0 -14
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor } from '@angular/common/http';
|
|
3
|
-
import { Observable, Subscription } from 'rxjs';
|
|
4
|
-
import { LangChangeEvent, TranslateService } from '@ngx-translate/core';
|
|
5
|
-
|
|
6
|
-
@Injectable()
|
|
7
|
-
export class RequestHeadersInterceptor implements HttpInterceptor {
|
|
8
|
-
|
|
9
|
-
subscriptions = new Subscription()
|
|
10
|
-
language = 'en-CA'
|
|
11
|
-
|
|
12
|
-
get currentDate() {
|
|
13
|
-
|
|
14
|
-
const date = new Date()
|
|
15
|
-
|
|
16
|
-
const year = date.getFullYear()
|
|
17
|
-
const month = String(date.getMonth() + 1).padStart(2, '0')
|
|
18
|
-
const day = String(date.getDate()).padStart(2, '0')
|
|
19
|
-
|
|
20
|
-
return `${year}-${month}-${day}`
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
constructor(
|
|
25
|
-
private translate: TranslateService
|
|
26
|
-
) {
|
|
27
|
-
this.subscriptions.add(
|
|
28
|
-
this.translate.onLangChange
|
|
29
|
-
.subscribe((params: LangChangeEvent) => {
|
|
30
|
-
this.language = `${params.lang}-CA`
|
|
31
|
-
})
|
|
32
|
-
)
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
|
|
36
|
-
|
|
37
|
-
// Don't override Content-Type for FormData (file uploads) — let browser set multipart/form-data
|
|
38
|
-
const skipContentType = request.body instanceof FormData;
|
|
39
|
-
|
|
40
|
-
request = request.clone({
|
|
41
|
-
setHeaders: {
|
|
42
|
-
...(skipContentType ? {} : { 'Content-Type': 'application/json' }),
|
|
43
|
-
'Accept-Language': this.language || 'en-CA',
|
|
44
|
-
'Current-Date': this.currentDate
|
|
45
|
-
}
|
|
46
|
-
})
|
|
47
|
-
|
|
48
|
-
return next.handle(request)
|
|
49
|
-
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
ngOnDestroy() {
|
|
53
|
-
this.subscriptions.unsubscribe()
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
|
|
@@ -1,509 +0,0 @@
|
|
|
1
|
-
# Message Display System
|
|
2
|
-
|
|
3
|
-
A flexible, client-side message display system for WebSocket messages that determines presentation based on message content using rule-based routing.
|
|
4
|
-
|
|
5
|
-
## Overview
|
|
6
|
-
|
|
7
|
-
The Message Display System provides a pluggable architecture for displaying WebSocket messages in different formats (snackbar, dialog, carousel, banner) based on configurable rules. The system is **fully client-side** - no server changes are required.
|
|
8
|
-
|
|
9
|
-
## Features
|
|
10
|
-
|
|
11
|
-
✅ **Rule-based routing** - First-match-wins rule evaluation
|
|
12
|
-
✅ **Multiple display types** - Snackbar, Dialog, Carousel, Banner (extensible)
|
|
13
|
-
✅ **Markdown support** - Optional markdown rendering for rich content
|
|
14
|
-
✅ **Backward compatible** - Existing messages work without changes
|
|
15
|
-
✅ **Zero server changes** - All logic is client-side
|
|
16
|
-
✅ **Configurable** - Customize rules and strategies
|
|
17
|
-
|
|
18
|
-
## Architecture
|
|
19
|
-
|
|
20
|
-
```
|
|
21
|
-
WebSocket Message
|
|
22
|
-
│
|
|
23
|
-
▼
|
|
24
|
-
MessageDisplayRouterService
|
|
25
|
-
│
|
|
26
|
-
├─→ Evaluates rules (first match wins)
|
|
27
|
-
├─→ Selects strategy
|
|
28
|
-
│
|
|
29
|
-
▼
|
|
30
|
-
Strategy (Snackbar / Dialog / Carousel / Banner)
|
|
31
|
-
│
|
|
32
|
-
▼
|
|
33
|
-
Display Component (MatSnackBar / MatDialog / Custom)
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
## Usage
|
|
37
|
-
|
|
38
|
-
### Basic Usage (Automatic)
|
|
39
|
-
|
|
40
|
-
Messages are automatically routed based on rules. No code changes needed in components:
|
|
41
|
-
|
|
42
|
-
```typescript
|
|
43
|
-
// In ws-messaging.component.ts (already configured)
|
|
44
|
-
this.latestCommunicationMessages$.subscribe((message) => {
|
|
45
|
-
this.messageDisplayService.display(message);
|
|
46
|
-
});
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
### Message Payload Structure
|
|
50
|
-
|
|
51
|
-
```typescript
|
|
52
|
-
{
|
|
53
|
-
type: "channelMessage",
|
|
54
|
-
content: {
|
|
55
|
-
// Optional: Explicit display configuration
|
|
56
|
-
displayConfig?: {
|
|
57
|
-
type: 'snackbar' | 'dialog' | 'carousel' | 'banner',
|
|
58
|
-
supportsMarkdown?: boolean,
|
|
59
|
-
stackable?: boolean,
|
|
60
|
-
autoDismiss?: number
|
|
61
|
-
},
|
|
62
|
-
|
|
63
|
-
// Content
|
|
64
|
-
title?: string,
|
|
65
|
-
message: string,
|
|
66
|
-
|
|
67
|
-
// Rich media
|
|
68
|
-
slides?: Slide[],
|
|
69
|
-
image?: string,
|
|
70
|
-
|
|
71
|
-
// Metadata for rule matching
|
|
72
|
-
severity?: 'low' | 'medium' | 'high' | 'critical',
|
|
73
|
-
category?: string,
|
|
74
|
-
messageType?: string,
|
|
75
|
-
|
|
76
|
-
// Actions
|
|
77
|
-
actions?: Action[]
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
### Examples
|
|
83
|
-
|
|
84
|
-
#### 1. Simple Message (Default - Snackbar)
|
|
85
|
-
|
|
86
|
-
```typescript
|
|
87
|
-
{
|
|
88
|
-
type: "channelMessage",
|
|
89
|
-
content: {
|
|
90
|
-
message: "Hello world"
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
// → Displays as snackbar (default rule)
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
#### 2. Dialog with Markdown
|
|
97
|
-
|
|
98
|
-
```typescript
|
|
99
|
-
{
|
|
100
|
-
type: "channelMessage",
|
|
101
|
-
content: {
|
|
102
|
-
displayConfig: {
|
|
103
|
-
type: 'dialog',
|
|
104
|
-
supportsMarkdown: true
|
|
105
|
-
},
|
|
106
|
-
title: 'Update',
|
|
107
|
-
message: '# Heading\n\n**Bold text** and *italics*'
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
// → Displays as dialog with rendered markdown
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
#### 3. Carousel
|
|
114
|
-
|
|
115
|
-
```typescript
|
|
116
|
-
{
|
|
117
|
-
type: "channelMessage",
|
|
118
|
-
content: {
|
|
119
|
-
displayConfig: {
|
|
120
|
-
type: 'carousel',
|
|
121
|
-
supportsMarkdown: true
|
|
122
|
-
},
|
|
123
|
-
slides: [
|
|
124
|
-
{ title: 'Slide 1', message: 'Content 1' },
|
|
125
|
-
{ title: 'Slide 2', message: 'Content 2' }
|
|
126
|
-
]
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
// → Displays as carousel with navigation
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
#### 4. Error Message (Semantic Rule)
|
|
133
|
-
|
|
134
|
-
```typescript
|
|
135
|
-
{
|
|
136
|
-
type: "channelMessage",
|
|
137
|
-
content: {
|
|
138
|
-
severity: 'error',
|
|
139
|
-
message: 'Something went wrong'
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
// → Displays as dialog (error severity rule)
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
## Default Rules
|
|
146
|
-
|
|
147
|
-
Rules are evaluated in order - first match wins:
|
|
148
|
-
|
|
149
|
-
1. **Explicit displayConfig.type** - `carousel`, `dialog`, `banner`
|
|
150
|
-
2. **Content-based** - Has slides → carousel, Has images → dialog
|
|
151
|
-
3. **Semantic** - Error severity → dialog, System category → banner, Chat → snackbar
|
|
152
|
-
4. **Default** - Fallback to snackbar
|
|
153
|
-
|
|
154
|
-
## Customizing Rules
|
|
155
|
-
|
|
156
|
-
You can override the default rules:
|
|
157
|
-
|
|
158
|
-
```typescript
|
|
159
|
-
// In your app module or component
|
|
160
|
-
const customRules: DisplayRule[] = [
|
|
161
|
-
{
|
|
162
|
-
id: 'urgent-messages',
|
|
163
|
-
match: (msg) => msg.content?.severity === 'critical',
|
|
164
|
-
display: { type: 'dialog', stackable: false }
|
|
165
|
-
},
|
|
166
|
-
// ... more custom rules
|
|
167
|
-
// Default MUST be last
|
|
168
|
-
{
|
|
169
|
-
id: 'default',
|
|
170
|
-
match: () => true,
|
|
171
|
-
display: { type: 'snackbar' }
|
|
172
|
-
}
|
|
173
|
-
];
|
|
174
|
-
|
|
175
|
-
// Inject and set rules
|
|
176
|
-
const routerService = inject(MessageDisplayRouterService);
|
|
177
|
-
routerService.setRules(customRules);
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
## Adding Custom Strategies
|
|
181
|
-
|
|
182
|
-
```typescript
|
|
183
|
-
@Injectable()
|
|
184
|
-
export class CustomStrategy implements IDisplayStrategy {
|
|
185
|
-
name = 'custom';
|
|
186
|
-
|
|
187
|
-
canHandle(message: CommunicationMessage): boolean {
|
|
188
|
-
return message.content?.messageType === 'special';
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
display(message: CommunicationMessage, config: DisplayConfig): void {
|
|
192
|
-
// Your custom display logic
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
// Register the strategy
|
|
197
|
-
const routerService = inject(MessageDisplayRouterService);
|
|
198
|
-
routerService.registerStrategies([inject(CustomStrategy)]);
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
---
|
|
202
|
-
|
|
203
|
-
## How to Add New Display Types (Step-by-Step Guide)
|
|
204
|
-
|
|
205
|
-
To add a new display type (e.g., Dialog, Carousel, Banner), follow these steps:
|
|
206
|
-
|
|
207
|
-
### Step 1: Add Display Type to the Type Union
|
|
208
|
-
|
|
209
|
-
**File:** `models/display-config.model.ts`
|
|
210
|
-
|
|
211
|
-
```typescript
|
|
212
|
-
export type DisplayType = 'snackbar' | 'dialog' | 'carousel' | 'banner' | 'inline' | 'YOUR_TYPE';
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
### Step 2: Create the Display Component (if needed)
|
|
216
|
-
|
|
217
|
-
For complex display types (like dialogs, carousels), create an Angular component:
|
|
218
|
-
|
|
219
|
-
**File:** `components/your-component/your-component.component.ts`
|
|
220
|
-
|
|
221
|
-
```typescript
|
|
222
|
-
import { Component, Inject, Input } from '@angular/core';
|
|
223
|
-
import { MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
224
|
-
import { CommunicationMessage } from '../models/communication-message.model';
|
|
225
|
-
|
|
226
|
-
@Component({
|
|
227
|
-
selector: 'app-your-component',
|
|
228
|
-
templateUrl: './your-component.component.html',
|
|
229
|
-
styleUrls: ['./your-component.component.scss'],
|
|
230
|
-
standalone: false
|
|
231
|
-
})
|
|
232
|
-
export class YourComponent {
|
|
233
|
-
@Input() message: CommunicationMessage;
|
|
234
|
-
|
|
235
|
-
constructor(@Inject(MAT_DIALOG_DATA) public data: any) {}
|
|
236
|
-
}
|
|
237
|
-
```
|
|
238
|
-
|
|
239
|
-
**File:** `components/your-component/your-component.component.html`
|
|
240
|
-
|
|
241
|
-
```html
|
|
242
|
-
<h2>{{ data.content?.title }}</h2>
|
|
243
|
-
<p>{{ data.content?.message }}</p>
|
|
244
|
-
```
|
|
245
|
-
|
|
246
|
-
### Step 3: Create the Strategy
|
|
247
|
-
|
|
248
|
-
**File:** `strategies/your.strategy.ts`
|
|
249
|
-
|
|
250
|
-
```typescript
|
|
251
|
-
import { Injectable, inject } from '@angular/core';
|
|
252
|
-
import { IDisplayStrategy } from '../models/display-strategy.interface';
|
|
253
|
-
import { CommunicationMessage } from '../models/communication-message.model';
|
|
254
|
-
import { DisplayConfig } from '../models/display-config.model';
|
|
255
|
-
import { YourComponent } from '../components/your-component/your-component.component';
|
|
256
|
-
import { MatDialog } from '@angular/material/dialog';
|
|
257
|
-
|
|
258
|
-
@Injectable()
|
|
259
|
-
export class YourStrategy implements IDisplayStrategy {
|
|
260
|
-
name = 'your_type';
|
|
261
|
-
|
|
262
|
-
private dialog = inject(MatDialog);
|
|
263
|
-
|
|
264
|
-
canHandle(message: CommunicationMessage): boolean {
|
|
265
|
-
return message.content?.displayConfig?.type === 'your_type';
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
display(message: CommunicationMessage, config: DisplayConfig): void {
|
|
269
|
-
this.dialog.open(YourComponent, {
|
|
270
|
-
data: message,
|
|
271
|
-
width: config.width || '600px',
|
|
272
|
-
disableClose: false,
|
|
273
|
-
panelClass: 'your-dialog-class'
|
|
274
|
-
});
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
```
|
|
278
|
-
|
|
279
|
-
### Step 4: Add Default Rules
|
|
280
|
-
|
|
281
|
-
**File:** `rules/default-display-rules.ts`
|
|
282
|
-
|
|
283
|
-
Add your rule in the appropriate position (order matters!):
|
|
284
|
-
|
|
285
|
-
```typescript
|
|
286
|
-
export const defaultDisplayRules: DisplayRule[] = [
|
|
287
|
-
// 1. Explicit display types (highest priority)
|
|
288
|
-
{
|
|
289
|
-
id: 'your-type',
|
|
290
|
-
name: 'Your Display Type',
|
|
291
|
-
match: (message) => message.content?.displayConfig?.type === 'your_type',
|
|
292
|
-
display: {
|
|
293
|
-
type: 'your_type',
|
|
294
|
-
supportsMarkdown: true,
|
|
295
|
-
stackable: false,
|
|
296
|
-
width: '600px'
|
|
297
|
-
}
|
|
298
|
-
},
|
|
299
|
-
|
|
300
|
-
// 2. Content-based rules
|
|
301
|
-
// ... existing rules ...
|
|
302
|
-
|
|
303
|
-
// 3. Default (must be last)
|
|
304
|
-
{
|
|
305
|
-
id: 'default',
|
|
306
|
-
name: 'Default (Snackbar)',
|
|
307
|
-
match: () => true,
|
|
308
|
-
display: {
|
|
309
|
-
type: 'snackbar',
|
|
310
|
-
supportsMarkdown: false,
|
|
311
|
-
stackable: true,
|
|
312
|
-
autoDismiss: 3000
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
];
|
|
316
|
-
```
|
|
317
|
-
|
|
318
|
-
### Step 5: Register the Strategy
|
|
319
|
-
|
|
320
|
-
**File:** `services/message-display-router.service.ts`
|
|
321
|
-
|
|
322
|
-
```typescript
|
|
323
|
-
import { Injectable, inject } from '@angular/core';
|
|
324
|
-
import { IDisplayStrategy } from '../models/display-strategy.interface';
|
|
325
|
-
import { DisplayRule } from '../models/display-rule.interface';
|
|
326
|
-
import { CommunicationMessage } from '../models/communication-message.model';
|
|
327
|
-
import { defaultDisplayRules } from '../rules/default-display-rules';
|
|
328
|
-
import { SnackbarStrategy } from '../strategies/snackbar.strategy';
|
|
329
|
-
import { YourStrategy } from '../strategies/your.strategy'; // NEW
|
|
330
|
-
|
|
331
|
-
@Injectable({ providedIn: 'root' })
|
|
332
|
-
export class MessageDisplayRouterService {
|
|
333
|
-
|
|
334
|
-
private snackbarStrategy = inject(SnackbarStrategy);
|
|
335
|
-
private yourStrategy = inject(YourStrategy); // NEW
|
|
336
|
-
|
|
337
|
-
// All available strategies
|
|
338
|
-
private strategies: IDisplayStrategy[] = [
|
|
339
|
-
this.snackbarStrategy,
|
|
340
|
-
this.yourStrategy // NEW - add your strategy here
|
|
341
|
-
];
|
|
342
|
-
|
|
343
|
-
// Rules are evaluated in order - first match wins
|
|
344
|
-
private rules: DisplayRule[] = defaultDisplayRules;
|
|
345
|
-
|
|
346
|
-
display(message: CommunicationMessage): void {
|
|
347
|
-
console.log('📨 MessageDisplayRouterService: Processing message:', message);
|
|
348
|
-
|
|
349
|
-
// Find FIRST matching rule (order matters!)
|
|
350
|
-
const matchingRule = this.rules.find(rule => rule.match(message));
|
|
351
|
-
|
|
352
|
-
// Get the rule (will be 'default' if nothing else matches)
|
|
353
|
-
const rule = matchingRule || this.rules[this.rules.length - 1];
|
|
354
|
-
|
|
355
|
-
console.log(`🎯 MessageDisplayRouterService: Matched rule '${rule.id}' (${rule.name})`);
|
|
356
|
-
console.log(` → Display type: ${rule.display.type}`);
|
|
357
|
-
|
|
358
|
-
// Get strategy for the display type
|
|
359
|
-
const strategy = this.strategies.find(s => s.name === rule.display.type);
|
|
360
|
-
|
|
361
|
-
if (!strategy) {
|
|
362
|
-
console.warn(`⚠️ MessageDisplayRouterService: No strategy found for type '${rule.display.type}', falling back to snackbar`);
|
|
363
|
-
this.snackbarStrategy.display(message, rule.display);
|
|
364
|
-
return;
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
// Execute display
|
|
368
|
-
console.log(`🚀 MessageDisplayRouterService: Executing ${strategy.name} strategy`);
|
|
369
|
-
strategy.display(message, rule.display);
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
registerStrategies(strategies: IDisplayStrategy[]): void {
|
|
373
|
-
this.strategies.push(...strategies);
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
setRules(rules: DisplayRule[]): void {
|
|
377
|
-
this.rules = rules;
|
|
378
|
-
}
|
|
379
|
-
}
|
|
380
|
-
```
|
|
381
|
-
|
|
382
|
-
### Step 6: Update Module Imports (if needed)
|
|
383
|
-
|
|
384
|
-
**File:** `http-request-manager.module.ts`
|
|
385
|
-
|
|
386
|
-
Add any required module imports:
|
|
387
|
-
|
|
388
|
-
```typescript
|
|
389
|
-
import { NgModule } from '@angular/core';
|
|
390
|
-
import { MatDialogModule } from '@angular/material/dialog';
|
|
391
|
-
import { MarkdownModule } from 'ngx-markdown';
|
|
392
|
-
// ... other imports
|
|
393
|
-
|
|
394
|
-
@NgModule({
|
|
395
|
-
imports: [
|
|
396
|
-
CommonModule,
|
|
397
|
-
MatDialogModule, // For dialogs
|
|
398
|
-
MarkdownModule.forChild(), // For markdown support
|
|
399
|
-
// ... other modules
|
|
400
|
-
]
|
|
401
|
-
})
|
|
402
|
-
export class HttpRequestManagerModule {}
|
|
403
|
-
```
|
|
404
|
-
|
|
405
|
-
### Step 7: Test Your Display Type
|
|
406
|
-
|
|
407
|
-
Create a test message:
|
|
408
|
-
|
|
409
|
-
```typescript
|
|
410
|
-
{
|
|
411
|
-
type: "channelMessage",
|
|
412
|
-
content: {
|
|
413
|
-
displayConfig: {
|
|
414
|
-
type: 'your_type',
|
|
415
|
-
supportsMarkdown: true
|
|
416
|
-
},
|
|
417
|
-
title: 'Test Title',
|
|
418
|
-
message: 'Test message content'
|
|
419
|
-
}
|
|
420
|
-
}
|
|
421
|
-
```
|
|
422
|
-
|
|
423
|
-
Send it via WebSocket and verify it displays correctly.
|
|
424
|
-
|
|
425
|
-
---
|
|
426
|
-
|
|
427
|
-
## Quick Reference: Strategy Implementation Checklist
|
|
428
|
-
|
|
429
|
-
- [ ] Add display type to `DisplayType` union
|
|
430
|
-
- [ ] Create component (if needed for complex UI)
|
|
431
|
-
- [ ] Create strategy class implementing `IDisplayStrategy`
|
|
432
|
-
- [ ] Add rule to `default-display-rules.ts`
|
|
433
|
-
- [ ] Register strategy in `MessageDisplayRouterService`
|
|
434
|
-
- [ ] Add required module imports
|
|
435
|
-
- [ ] Test with sample message
|
|
436
|
-
|
|
437
|
-
---
|
|
438
|
-
|
|
439
|
-
## Current Implementation Status
|
|
440
|
-
|
|
441
|
-
### ✅ Phase 1: Core Infrastructure (COMPLETE)
|
|
442
|
-
- [x] Models and interfaces
|
|
443
|
-
- [x] Default display rules
|
|
444
|
-
- [x] MessageDisplayRouterService
|
|
445
|
-
- [x] SnackbarStrategy
|
|
446
|
-
- [x] Integration with ws-messaging.component
|
|
447
|
-
|
|
448
|
-
### 🚧 Phase 2: Dialog Support (TODO)
|
|
449
|
-
- [ ] RichContentDialogComponent
|
|
450
|
-
- [ ] DialogStrategy
|
|
451
|
-
- [ ] MarkdownModule integration
|
|
452
|
-
|
|
453
|
-
### 🚧 Phase 3: Carousel & Banner (TODO)
|
|
454
|
-
- [ ] CarouselDialogComponent
|
|
455
|
-
- [ ] CarouselStrategy
|
|
456
|
-
- [ ] BannerComponent
|
|
457
|
-
- [ ] BannerStrategy
|
|
458
|
-
|
|
459
|
-
### 🚧 Phase 4: Configuration API (TODO)
|
|
460
|
-
- [ ] forRoot() configuration
|
|
461
|
-
- [ ] Injection tokens for customization
|
|
462
|
-
|
|
463
|
-
## Files
|
|
464
|
-
|
|
465
|
-
```
|
|
466
|
-
message-display/
|
|
467
|
-
├── models/
|
|
468
|
-
│ ├── display-config.model.ts
|
|
469
|
-
│ ├── display-rule.interface.ts
|
|
470
|
-
│ ├── display-strategy.interface.ts
|
|
471
|
-
│ ├── communication-message.model.ts
|
|
472
|
-
│ ├── slide.model.ts
|
|
473
|
-
│ ├── action.model.ts
|
|
474
|
-
│ └── index.ts
|
|
475
|
-
├── services/
|
|
476
|
-
│ └── message-display-router.service.ts
|
|
477
|
-
├── strategies/
|
|
478
|
-
│ └── snackbar.strategy.ts
|
|
479
|
-
├── rules/
|
|
480
|
-
│ └── default-display-rules.ts
|
|
481
|
-
└── index.ts
|
|
482
|
-
```
|
|
483
|
-
|
|
484
|
-
## Dependencies
|
|
485
|
-
|
|
486
|
-
- `toast-message-display` - For snackbar display
|
|
487
|
-
- `@angular/material` - For dialog components (future)
|
|
488
|
-
- `ngx-markdown` - For markdown rendering (future)
|
|
489
|
-
|
|
490
|
-
## Testing
|
|
491
|
-
|
|
492
|
-
```bash
|
|
493
|
-
# Run tests for http-request-manager
|
|
494
|
-
ng test http-request-manager
|
|
495
|
-
|
|
496
|
-
# Test specific component
|
|
497
|
-
ng test --include='**/message-display/**/*.spec.ts'
|
|
498
|
-
```
|
|
499
|
-
|
|
500
|
-
## Future Enhancements
|
|
501
|
-
|
|
502
|
-
- Dialog strategy with markdown support
|
|
503
|
-
- Carousel strategy with slide navigation
|
|
504
|
-
- Banner strategy for persistent notifications
|
|
505
|
-
- Custom component registration
|
|
506
|
-
- Action callback handling
|
|
507
|
-
- Link click handling in markdown
|
|
508
|
-
- Stacking behavior configuration
|
|
509
|
-
- Animation configuration
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
export interface ActionInterface {
|
|
2
|
-
label: string;
|
|
3
|
-
action: 'close' | 'navigate' | 'callback' | 'custom';
|
|
4
|
-
target?: string;
|
|
5
|
-
callback?: string;
|
|
6
|
-
primary?: boolean;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export class Action implements ActionInterface {
|
|
10
|
-
constructor(
|
|
11
|
-
public label: string = '',
|
|
12
|
-
public action: 'close' | 'navigate' | 'callback' | 'custom' = 'close',
|
|
13
|
-
public target?: string,
|
|
14
|
-
public callback?: string,
|
|
15
|
-
public primary?: boolean
|
|
16
|
-
) {}
|
|
17
|
-
|
|
18
|
-
static adapt(item?: any): Action {
|
|
19
|
-
return new Action(
|
|
20
|
-
item?.label,
|
|
21
|
-
item?.action,
|
|
22
|
-
item?.target,
|
|
23
|
-
item?.callback,
|
|
24
|
-
item?.primary
|
|
25
|
-
);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import { Slide } from './slide.model';
|
|
2
|
-
import { Action } from './action.model';
|
|
3
|
-
import { DisplayConfig } from './display-config.model';
|
|
4
|
-
|
|
5
|
-
export interface MessageContentInterface {
|
|
6
|
-
displayConfig?: DisplayConfig;
|
|
7
|
-
title?: string;
|
|
8
|
-
message: string;
|
|
9
|
-
slides?: Slide[];
|
|
10
|
-
image?: string;
|
|
11
|
-
images?: string[];
|
|
12
|
-
actions?: Action[];
|
|
13
|
-
messageType?: string;
|
|
14
|
-
icon?: string;
|
|
15
|
-
data?: any;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export class MessageContent implements MessageContentInterface {
|
|
19
|
-
constructor(
|
|
20
|
-
public displayConfig?: DisplayConfig,
|
|
21
|
-
public title?: string,
|
|
22
|
-
public message: string = '',
|
|
23
|
-
public slides?: Slide[],
|
|
24
|
-
public image?: string,
|
|
25
|
-
public images?: string[],
|
|
26
|
-
public actions?: Action[],
|
|
27
|
-
public messageType?: string,
|
|
28
|
-
public icon?: string,
|
|
29
|
-
public data?: any
|
|
30
|
-
) {}
|
|
31
|
-
|
|
32
|
-
static adapt(item?: any): MessageContent {
|
|
33
|
-
return new MessageContent(
|
|
34
|
-
item?.displayConfig ? DisplayConfig.adapt(item.displayConfig) : undefined,
|
|
35
|
-
item?.title,
|
|
36
|
-
item?.message,
|
|
37
|
-
item?.slides ? item.slides.map((slideItem: any) => Slide.adapt(slideItem)) : [],
|
|
38
|
-
item?.image,
|
|
39
|
-
item?.images,
|
|
40
|
-
item?.actions ? item.actions.map((actionItem: any) => Action.adapt(actionItem)) : [],
|
|
41
|
-
item?.messageType,
|
|
42
|
-
item?.icon,
|
|
43
|
-
item?.data
|
|
44
|
-
);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export interface CommunicationMessageInterface {
|
|
49
|
-
type: string;
|
|
50
|
-
messageId?: number;
|
|
51
|
-
channel?: string;
|
|
52
|
-
sessionId?: { id: string };
|
|
53
|
-
timestamp?: string;
|
|
54
|
-
content: MessageContent;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export class CommunicationMessage implements CommunicationMessageInterface {
|
|
58
|
-
constructor(
|
|
59
|
-
public type: string = '',
|
|
60
|
-
public messageId?: number,
|
|
61
|
-
public channel?: string,
|
|
62
|
-
public sessionId?: { id: string },
|
|
63
|
-
public timestamp?: string,
|
|
64
|
-
public content: MessageContent = MessageContent.adapt()
|
|
65
|
-
) {}
|
|
66
|
-
|
|
67
|
-
static adapt(item?: any): CommunicationMessage {
|
|
68
|
-
return new CommunicationMessage(
|
|
69
|
-
item?.type,
|
|
70
|
-
item?.messageId,
|
|
71
|
-
item?.channel,
|
|
72
|
-
item?.sessionId,
|
|
73
|
-
item?.timestamp,
|
|
74
|
-
item?.content ? MessageContent.adapt(item.content) : MessageContent.adapt()
|
|
75
|
-
);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
export type DisplayType = 'snackbar' | 'dialog' | 'carousel' | 'banner' | 'inline';
|
|
2
|
-
|
|
3
|
-
export interface DisplayConfigInterface {
|
|
4
|
-
type: DisplayType;
|
|
5
|
-
supportsMarkdown?: boolean;
|
|
6
|
-
stackable?: boolean;
|
|
7
|
-
queueBehavior?: 'replace' | 'queue' | 'ignore';
|
|
8
|
-
autoDismiss?: number;
|
|
9
|
-
width?: string;
|
|
10
|
-
height?: string;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export class DisplayConfig implements DisplayConfigInterface {
|
|
14
|
-
constructor(
|
|
15
|
-
public type: DisplayType = 'snackbar',
|
|
16
|
-
public supportsMarkdown?: boolean,
|
|
17
|
-
public stackable?: boolean,
|
|
18
|
-
public queueBehavior?: 'replace' | 'queue' | 'ignore',
|
|
19
|
-
public autoDismiss?: number,
|
|
20
|
-
public width?: string,
|
|
21
|
-
public height?: string
|
|
22
|
-
) {}
|
|
23
|
-
|
|
24
|
-
static adapt(item?: any): DisplayConfig {
|
|
25
|
-
return new DisplayConfig(
|
|
26
|
-
item?.type,
|
|
27
|
-
item?.supportsMarkdown,
|
|
28
|
-
item?.stackable,
|
|
29
|
-
item?.queueBehavior,
|
|
30
|
-
item?.autoDismiss,
|
|
31
|
-
item?.width,
|
|
32
|
-
item?.height
|
|
33
|
-
);
|
|
34
|
-
}
|
|
35
|
-
}
|