@arthakosh/chat-widget 0.3.34 → 0.3.36
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/esm2022/lib/chat-widget-notification/chat-widget-notification.component.mjs +6 -3
- package/esm2022/lib/core/models/notification.model.mjs +1 -1
- package/esm2022/lib/core/services/chat.service.mjs +3 -3
- package/esm2022/lib/core/services/socket.service.mjs +16 -2
- package/fesm2022/arthakosh-chat-widget.mjs +21 -5
- package/fesm2022/arthakosh-chat-widget.mjs.map +1 -1
- package/lib/chat-widget-notification/chat-widget-notification.component.d.ts +2 -0
- package/lib/core/models/notification.model.d.ts +0 -1
- package/lib/core/services/chat.service.d.ts +1 -1
- package/lib/core/services/socket.service.d.ts +2 -0
- package/package.json +1 -1
|
@@ -3,6 +3,7 @@ import { ChatService } from "../core/services/chat.service";
|
|
|
3
3
|
import { CommonModule } from "@angular/common";
|
|
4
4
|
import { FormsModule } from "@angular/forms";
|
|
5
5
|
import { SocketService } from "../core/services/socket.service";
|
|
6
|
+
import { ChatLauncherComponent } from "../chat-launcher/chat-launcher.component";
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
7
8
|
export class ChatWidgetNotificationComponent {
|
|
8
9
|
constructor() {
|
|
@@ -10,6 +11,7 @@ export class ChatWidgetNotificationComponent {
|
|
|
10
11
|
this.chatService = inject(ChatService);
|
|
11
12
|
this.socketService = inject(SocketService);
|
|
12
13
|
this.userId = input(null);
|
|
14
|
+
this.chatLauncher = inject(ChatLauncherComponent);
|
|
13
15
|
this.totalCount = computed(() => this.socketService.notifications().reduce((a, b) => a + b.unreadCount, 0));
|
|
14
16
|
}
|
|
15
17
|
ngOnInit() {
|
|
@@ -17,10 +19,10 @@ export class ChatWidgetNotificationComponent {
|
|
|
17
19
|
this.chatService.getAllUserNotifications(this.userId()).subscribe(notifications => {
|
|
18
20
|
const data = notifications.map(n => {
|
|
19
21
|
return {
|
|
20
|
-
actorUserId: n.added_by,
|
|
21
22
|
entityId: n.room_id,
|
|
22
23
|
eventType: n.type,
|
|
23
24
|
payload: { chatRoomId: n.room_id, chatRoomName: n.chat_room_name },
|
|
25
|
+
unreadCount: 0,
|
|
24
26
|
title: n.description
|
|
25
27
|
};
|
|
26
28
|
});
|
|
@@ -32,8 +34,9 @@ export class ChatWidgetNotificationComponent {
|
|
|
32
34
|
}
|
|
33
35
|
openRoom(n) {
|
|
34
36
|
this.socketService.clearRoom(n);
|
|
35
|
-
this.chatService.markAsRead(n.
|
|
37
|
+
this.chatService.markAsRead(n.entityId, n.eventType, this.userId()).subscribe(notification => {
|
|
36
38
|
console.log('markAsRead', notification);
|
|
39
|
+
this.chatLauncher.openNewRoom(n.payload.chatRoomId, n.payload.chatRoomName, '', this.chatService?.currentUser().userId, this.chatService?.currentUser().name, []);
|
|
37
40
|
});
|
|
38
41
|
this.open = false;
|
|
39
42
|
}
|
|
@@ -47,4 +50,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
47
50
|
FormsModule
|
|
48
51
|
], template: "<div (click)=\"toggle()\" class=\"notif-icon\">\r\n <i class=\"pi pi-bell\" [class.pulse]=\"socketService.hasNewNotification()\"></i>\r\n\r\n @if (totalCount() > 0) {\r\n <span class=\"dot\"></span>\r\n <span class=\"badge\">{{ totalCount() }}</span>\r\n }\r\n</div>\r\n\r\n@if (open) {\r\n <div class=\"notif-panel\">\r\n <div class=\"notif-list\">\r\n @for (n of socketService.notifications(); track n.entityId + '_' + n.eventType) {\r\n <div class=\"notif-item\" (click)=\"openRoom(n)\">\r\n <div class=\"notif-left\">\r\n <i class=\"pi pi-comments\"></i>\r\n </div>\r\n\r\n <div class=\"notif-body\">\r\n <div class=\"notif-title\">{{ n?.payload?.chatRoomName }}</div>\r\n <div class=\"notif-text\">\r\n @if (n.eventType === 'NEW_MESSAGE') {\r\n New Message Received\r\n }\r\n\r\n @if (n.eventType === 'USER_ADDED') {\r\n You have been added to the chat\r\n }\r\n </div>\r\n </div>\r\n\r\n<!-- <span class=\"count\">{{ n.count }}</span>-->\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n}\r\n", styles: [".notif-icon{position:relative;cursor:pointer;display:flex;align-items:center;justify-content:center}.notif-icon i{font-size:1.4rem;color:#444}.pulse{animation:pulse 1.2s ease-out}@keyframes pulse{0%{transform:scale(1)}40%{transform:scale(1.2)}to{transform:scale(1)}}.dot{position:absolute;top:2px;right:4px;width:8px;height:8px;background:#e53935;border-radius:50%}.badge{position:absolute;top:-6px;right:-10px;background:#e53935;color:#fff;font-size:.65rem;min-width:18px;height:18px;padding:0 5px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-weight:600}.notif-panel{position:absolute;top:42px;right:0;width:320px;background:#fff;border-radius:8px;box-shadow:0 12px 28px #00000026;z-index:9999;overflow:hidden;animation:fadeIn .15s ease-out}@keyframes fadeIn{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.notif-header{padding:12px 16px;font-weight:600;font-size:.9rem;border-bottom:1px solid #eee}.notif-list{max-height:360px;overflow-y:auto}.notif-item{display:flex;align-items:center;padding:12px 14px;cursor:pointer;transition:background .15s ease}.notif-item:hover{background:#f5f7fa}.notif-left{width:36px;height:36px;border-radius:50%;background:#e3f2fd;color:#1976d2;display:flex;align-items:center;justify-content:center;margin-right:12px}.notif-body{flex:1;min-width:0;display:flex;gap:5px;flex-direction:column}.notif-title{font-size:.85rem;font-weight:600;color:#222;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.notif-text{font-size:.75rem;color:#666;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.count{background:#1976d2;color:#fff;font-size:.65rem;min-width:20px;height:20px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-weight:600}.notif-item{background:#f0f6ff}\n"] }]
|
|
49
52
|
}], ctorParameters: () => [] });
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC13aWRnZXQtbm90aWZpY2F0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYXQtd2lkZ2V0L3NyYy9saWIvY2hhdC13aWRnZXQtbm90aWZpY2F0aW9uL2NoYXQtd2lkZ2V0LW5vdGlmaWNhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXdpZGdldC9zcmMvbGliL2NoYXQtd2lkZ2V0LW5vdGlmaWNhdGlvbi9jaGF0LXdpZGdldC1ub3RpZmljYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDMUQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDOUQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sMENBQTBDLENBQUM7O0FBWS9FLE1BQU0sT0FBTywrQkFBK0I7SUFZeEM7UUFYQSxTQUFJLEdBQUcsS0FBSyxDQUFDO1FBRWIsZ0JBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbEMsa0JBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdEMsV0FBTSxHQUFHLEtBQUssQ0FBTSxJQUFJLENBQUMsQ0FBQztRQUMxQixpQkFBWSxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBRTdDLGVBQVUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQ3ZCLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBTSxFQUFFLENBQXdCLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUN4RyxDQUFDO0lBRWEsQ0FBQztJQUVoQixRQUFRO1FBQ0osSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDOUUsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDL0IsT0FBTztvQkFDSCxRQUFRLEVBQUUsQ0FBQyxDQUFDLE9BQU87b0JBQ25CLFNBQVMsRUFBRSxDQUFDLENBQUMsSUFBSTtvQkFDakIsT0FBTyxFQUFFLEVBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxjQUFjLEVBQUM7b0JBQ2hFLFdBQVcsRUFBRSxDQUFDO29CQUNkLEtBQUssRUFBRSxDQUFDLENBQUMsV0FBVztpQkFDdkIsQ0FBQTtZQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9DLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELE1BQU07UUFDRixJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztJQUMzQixDQUFDO0lBRUQsUUFBUSxDQUFDLENBQW1CO1FBQ3hCLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDekYsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3RLLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7SUFDdEIsQ0FBQzsrR0F6Q1EsK0JBQStCO21HQUEvQiwrQkFBK0IsMk5DbEI1QyxxNkNBcUNBLHUwRER6QlEsWUFBWSw4QkFDWixXQUFXOzs0RkFLTiwrQkFBK0I7a0JBVjNDLFNBQVM7K0JBQ0ksMEJBQTBCLGNBQ3hCLElBQUksV0FDUDt3QkFDTCxZQUFZO3dCQUNaLFdBQVc7cUJBQ2QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgY29tcHV0ZWQsIGluamVjdCwgaW5wdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0NoYXRTZXJ2aWNlfSBmcm9tIFwiLi4vY29yZS9zZXJ2aWNlcy9jaGF0LnNlcnZpY2VcIjtcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7Q2hhdE5vdGlmaWNhdGlvbn0gZnJvbSBcIi4uL2NvcmUvbW9kZWxzL25vdGlmaWNhdGlvbi5tb2RlbFwiO1xyXG5pbXBvcnQge1NvY2tldFNlcnZpY2V9IGZyb20gXCIuLi9jb3JlL3NlcnZpY2VzL3NvY2tldC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7Q2hhdExhdW5jaGVyQ29tcG9uZW50fSBmcm9tIFwiLi4vY2hhdC1sYXVuY2hlci9jaGF0LWxhdW5jaGVyLmNvbXBvbmVudFwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2NoYXQtd2lkZ2V0LW5vdGlmaWNhdGlvbicsXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICAgIENvbW1vbk1vZHVsZSxcclxuICAgICAgICBGb3Jtc01vZHVsZVxyXG4gICAgXSxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jaGF0LXdpZGdldC1ub3RpZmljYXRpb24uY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmw6ICcuL2NoYXQtd2lkZ2V0LW5vdGlmaWNhdGlvbi5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2hhdFdpZGdldE5vdGlmaWNhdGlvbkNvbXBvbmVudCB7XHJcbiAgICBvcGVuID0gZmFsc2U7XHJcblxyXG4gICAgY2hhdFNlcnZpY2UgPSBpbmplY3QoQ2hhdFNlcnZpY2UpO1xyXG4gICAgc29ja2V0U2VydmljZSA9IGluamVjdChTb2NrZXRTZXJ2aWNlKTtcclxuICAgIHVzZXJJZCA9IGlucHV0PGFueT4obnVsbCk7XHJcbiAgICBjaGF0TGF1bmNoZXIgPSBpbmplY3QoQ2hhdExhdW5jaGVyQ29tcG9uZW50KTtcclxuXHJcbiAgICB0b3RhbENvdW50ID0gY29tcHV0ZWQoKCkgPT5cclxuICAgICAgICB0aGlzLnNvY2tldFNlcnZpY2Uubm90aWZpY2F0aW9ucygpLnJlZHVjZSgoYTogYW55LCBiOiB7IHVucmVhZENvdW50OiBhbnk7IH0pID0+IGEgKyBiLnVucmVhZENvdW50LCAwKVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHt9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5zb2NrZXRTZXJ2aWNlLmNvbm5lY3QodGhpcy51c2VySWQoKSk7XHJcbiAgICAgICAgdGhpcy5jaGF0U2VydmljZS5nZXRBbGxVc2VyTm90aWZpY2F0aW9ucyh0aGlzLnVzZXJJZCgpKS5zdWJzY3JpYmUobm90aWZpY2F0aW9ucyA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBub3RpZmljYXRpb25zLm1hcChuID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5SWQ6IG4ucm9vbV9pZCxcclxuICAgICAgICAgICAgICAgICAgICBldmVudFR5cGU6IG4udHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiB7Y2hhdFJvb21JZDogbi5yb29tX2lkLCBjaGF0Um9vbU5hbWU6IG4uY2hhdF9yb29tX25hbWV9LFxyXG4gICAgICAgICAgICAgICAgICAgIHVucmVhZENvdW50OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBuLmRlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnNvY2tldFNlcnZpY2Uubm90aWZpY2F0aW9ucy5zZXQoZGF0YSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdG9nZ2xlKCkge1xyXG4gICAgICAgIHRoaXMub3BlbiA9ICF0aGlzLm9wZW47XHJcbiAgICB9XHJcblxyXG4gICAgb3BlblJvb20objogQ2hhdE5vdGlmaWNhdGlvbikge1xyXG4gICAgICAgIHRoaXMuc29ja2V0U2VydmljZS5jbGVhclJvb20obik7XHJcbiAgICAgICAgdGhpcy5jaGF0U2VydmljZS5tYXJrQXNSZWFkKG4uZW50aXR5SWQsIG4uZXZlbnRUeXBlLCB0aGlzLnVzZXJJZCgpKS5zdWJzY3JpYmUobm90aWZpY2F0aW9uID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ21hcmtBc1JlYWQnLCBub3RpZmljYXRpb24pO1xyXG4gICAgICAgICAgICB0aGlzLmNoYXRMYXVuY2hlci5vcGVuTmV3Um9vbShuLnBheWxvYWQuY2hhdFJvb21JZCwgbi5wYXlsb2FkLmNoYXRSb29tTmFtZSwgJycsIHRoaXMuY2hhdFNlcnZpY2U/LmN1cnJlbnRVc2VyKCkudXNlcklkLCB0aGlzLmNoYXRTZXJ2aWNlPy5jdXJyZW50VXNlcigpLm5hbWUsIFtdKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLm9wZW4gPSBmYWxzZTtcclxuICAgIH1cclxufVxyXG4iLCI8ZGl2IChjbGljayk9XCJ0b2dnbGUoKVwiIGNsYXNzPVwibm90aWYtaWNvblwiPlxyXG4gICAgPGkgY2xhc3M9XCJwaSBwaS1iZWxsXCIgW2NsYXNzLnB1bHNlXT1cInNvY2tldFNlcnZpY2UuaGFzTmV3Tm90aWZpY2F0aW9uKClcIj48L2k+XHJcblxyXG4gICAgQGlmICh0b3RhbENvdW50KCkgPiAwKSB7XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJkb3RcIj48L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZVwiPnt7IHRvdGFsQ291bnQoKSB9fTwvc3Bhbj5cclxuICAgIH1cclxuPC9kaXY+XHJcblxyXG5AaWYgKG9wZW4pIHtcclxuICAgIDxkaXYgY2xhc3M9XCJub3RpZi1wYW5lbFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJub3RpZi1saXN0XCI+XHJcbiAgICAgICAgICAgIEBmb3IgKG4gb2Ygc29ja2V0U2VydmljZS5ub3RpZmljYXRpb25zKCk7IHRyYWNrIG4uZW50aXR5SWQgKyAnXycgKyBuLmV2ZW50VHlwZSkge1xyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vdGlmLWl0ZW1cIiAoY2xpY2spPVwib3BlblJvb20obilcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm90aWYtbGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWNvbW1lbnRzXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm90aWYtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm90aWYtdGl0bGVcIj57eyBuPy5wYXlsb2FkPy5jaGF0Um9vbU5hbWUgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vdGlmLXRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAobi5ldmVudFR5cGUgPT09ICdORVdfTUVTU0FHRScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXcgTWVzc2FnZSBSZWNlaXZlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAobi5ldmVudFR5cGUgPT09ICdVU0VSX0FEREVEJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIGNoYXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG48IS0tICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvdW50XCI+e3sgbi5jb3VudCB9fTwvc3Bhbj4tLT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxufVxyXG4iXX0=
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hhdC13aWRnZXQvc3JjL2xpYi9jb3JlL21vZGVscy9ub3RpZmljYXRpb24ubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgQ2hhdE5vdGlmaWNhdGlvbiB7XHJcbiAgICBlbnRpdHlJZDogc3RyaW5nO1xyXG4gICAgZXZlbnRUeXBlOiAnTkVXX01FU1NBR0UnIHwgJ1VTRVJfQURERUQnO1xyXG4gICAgcGF5bG9hZDogYW55O1xyXG4gICAgdW5yZWFkQ291bnQ6IG51bWJlcjtcclxufSJdfQ==
|
|
@@ -93,8 +93,8 @@ export class ChatService {
|
|
|
93
93
|
return;
|
|
94
94
|
});
|
|
95
95
|
}
|
|
96
|
-
markAsRead(
|
|
97
|
-
return this.http.post(`${this.baseUrl}/api/chat/notifications/mark_read/${
|
|
96
|
+
markAsRead(entityId, eventType, user_id) {
|
|
97
|
+
return this.http.post(`${this.baseUrl}/api/chat/notifications/mark_read/${entityId}/${eventType}/`, {
|
|
98
98
|
user_id
|
|
99
99
|
});
|
|
100
100
|
}
|
|
@@ -111,4 +111,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
111
111
|
type: Inject,
|
|
112
112
|
args: [CHAT_CONFIG]
|
|
113
113
|
}] }, { type: i2.SocketService }] });
|
|
114
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hhdC13aWRnZXQvc3JjL2xpYi9jb3JlL3NlcnZpY2VzL2NoYXQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekQsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBR25DLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQzs7OztBQUtsRCxNQUFNLE9BQU8sV0FBVztJQU1wQixZQUFvQixJQUFnQixFQUNILE1BQWtCLEVBQ3ZDLE1BQXFCO1FBRmIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNILFdBQU0sR0FBTixNQUFNLENBQVk7UUFDdkMsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQVBqQywwREFBMEQ7UUFFMUQsZ0JBQVcsR0FBRyxNQUFNLENBQWEsSUFBSSxDQUFDLENBQUM7UUFDdkMsYUFBUSxHQUFHLE1BQU0sQ0FBUSxFQUFFLENBQUMsQ0FBQztRQUt6QixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsa0RBQWtEO0lBQ2xELFVBQVUsQ0FBQyxNQUFjLEVBQUUsSUFBWSxFQUFFLFFBQWdCLEVBQUUsU0FBaUIsRUFBRSxRQUFnQixFQUFFLFNBQWM7UUFDMUcsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLDhCQUE4QixNQUFNLEdBQUcsRUFBRTtZQUMxRSxJQUFJO1lBQ0osUUFBUTtZQUNSLFNBQVM7WUFDVCxRQUFRO1lBQ1IsU0FBUztTQUNaLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxZQUFZLENBQUMsTUFBYztRQUN2QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sZ0NBQWdDLE1BQU0sU0FBUyxDQUFDLENBQUMsSUFBSSxDQUM1RixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDUCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNYLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTTtZQUNaLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUTtTQUN2QixDQUFDLENBQUMsQ0FDTixDQUNKLENBQUM7SUFDTixDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQWMsRUFBRSxNQUFjLEVBQUUsUUFBZ0IsRUFBRSxTQUFpQjtRQUM3RSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sZ0NBQWdDLE1BQU0sYUFBYSxFQUFFO1lBQ3RGLE1BQU07WUFDTixRQUFRO1lBQ1IsU0FBUztTQUNaLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxnREFBZ0Q7SUFDaEQsV0FBVyxDQUFDLE1BQWMsRUFBRSxLQUFjO1FBQ3RDLE1BQU0sTUFBTSxHQUFRLEVBQUUsQ0FBQztRQUN2QixJQUFJLEtBQUs7WUFBRSxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUVoQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8seUNBQXlDLE1BQU0sR0FBRyxFQUFFLEVBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQ3pHLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUNQLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ1gsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFO1lBQ1IsVUFBVSxFQUFFLENBQUMsQ0FBQyxVQUFVO1lBQ3hCLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUTtZQUNwQixVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVU7WUFDeEIsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPO1lBQ2xCLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxnQkFBZ0I7WUFDcEMsU0FBUyxFQUFFLENBQUMsQ0FBQyxTQUFTO1lBQ3RCLGFBQWEsRUFBRSxDQUFDLENBQUMsYUFBYSxJQUFJLEtBQUs7U0FDMUMsQ0FBQyxDQUFDLENBQ04sQ0FDSixDQUFDO0lBQ04sQ0FBQztJQUVELFdBQVcsQ0FDUCxNQUFjLEVBQ2QsT0FNQztRQUVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxpQ0FBaUMsTUFBTSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUMvRixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ04sRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFO1lBQ1IsVUFBVSxFQUFFLENBQUMsQ0FBQyxVQUFVO1lBQ3hCLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUTtZQUNwQixVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVU7WUFDeEIsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPO1lBQ2xCLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxnQkFBZ0I7WUFDcEMsU0FBUyxFQUFFLENBQUMsQ0FBQyxTQUFTO1lBQ3RCLGFBQWEsRUFBRSxDQUFDLENBQUMsYUFBYSxJQUFJLEtBQUs7U0FDMUMsQ0FBQyxDQUFDLENBQ04sQ0FBQztJQUNOLENBQUM7SUFFRCxRQUFRLENBQUMsY0FBc0IsRUFBRSxVQUFtQjtRQUNoRCxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLHVCQUF1QixjQUFjLEVBQUUsQ0FBQztRQUNqRSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2IsR0FBRyxJQUFJLElBQUksVUFBVSxFQUFFLENBQUM7UUFDNUIsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVEsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFHRCxXQUFXLENBQUMsTUFBYztRQUN0QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sK0JBQStCLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDNUYsQ0FBQztJQUVPLHNCQUFzQjtRQUMxQixPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3pCLHFDQUFxQztRQUNyQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNqRCxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNoQyxJQUFJLEdBQUcsQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLE1BQU07Z0JBQUUsT0FBTztRQUM5RCxDQUFDLENBQUMsQ0FBQztRQUVILDBDQUEwQztRQUMxQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNoRCxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQztZQUMvQixJQUFJLEdBQUcsQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLE1BQU07Z0JBQUUsT0FBTztRQUMzRCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxVQUFVLENBQUMsY0FBc0IsRUFBRSxPQUFlO1FBQzlDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxxQ0FBcUMsY0FBYyxHQUFHLEVBQUU7WUFDekYsT0FBTztTQUNWLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxNQUFjO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxtQ0FBbUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUM3RixDQUFDOytHQS9IUSxXQUFXLDRDQU9SLFdBQVc7bUhBUGQsV0FBVyxjQURDLE1BQU07OzRGQUNsQixXQUFXO2tCQUR2QixVQUFVO21CQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQzs7MEJBUXZCLE1BQU07MkJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBzaWduYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHttYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtDaGF0TWVzc2FnZX0gZnJvbSAnLi4vbW9kZWxzL2NoYXQubW9kZWxzJztcclxuaW1wb3J0IHtDSEFUX0NPTkZJR30gZnJvbSBcIi4uL2NvbmZpZy9jaGF0LnRva2Vuc1wiO1xyXG5pbXBvcnQge0NoYXRDb25maWd9IGZyb20gXCIuLi9jb25maWcvY2hhdC1jb25maWdcIjtcclxuaW1wb3J0IHtTb2NrZXRTZXJ2aWNlfSBmcm9tIFwiLi9zb2NrZXQuc2VydmljZVwiO1xyXG5cclxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXHJcbmV4cG9ydCBjbGFzcyBDaGF0U2VydmljZSB7XHJcbiAgICAvLyBwcml2YXRlIGJhc2VVcmwgPSBgaHR0cHM6Ly9jb3JldWF0YXJ0aGtvc2guc2FyamFrLmNvbWA7XHJcblxyXG4gICAgY3VycmVudFVzZXIgPSBzaWduYWw8YW55IHwgbnVsbD4obnVsbCk7XHJcbiAgICB1c2VyTGlzdCA9IHNpZ25hbDxhbnlbXT4oW10pO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgICAgICBASW5qZWN0KENIQVRfQ09ORklHKSBwcml2YXRlIGNvbmZpZzogQ2hhdENvbmZpZyxcclxuICAgICAgICBwcml2YXRlIHNvY2tldDogU29ja2V0U2VydmljZSkge1xyXG4gICAgICAgIHRoaXMubGlzdGVuRm9yTm90aWZpY2F0aW9ucygpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBiYXNlVXJsKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5hcGlCYXNlVXJsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0gQ0hBVCBST09NUyAtLS0tLS0tLS0tLS0tLS0tICovXHJcbiAgICBjcmVhdGVSb29tKHJvb21JZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIG1ldGFkYXRhOiBzdHJpbmcsIGNyZWF0ZWRCeTogc3RyaW5nLCB1c2VybmFtZTogc3RyaW5nLCBjaGF0VXNlcnM6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuYmFzZVVybH0vYXBpL2NoYXQvY2hhdHJvb21zL2NyZWF0ZS8ke3Jvb21JZH0vYCwge1xyXG4gICAgICAgICAgICBuYW1lLFxyXG4gICAgICAgICAgICBtZXRhZGF0YSxcclxuICAgICAgICAgICAgY3JlYXRlZEJ5LFxyXG4gICAgICAgICAgICB1c2VybmFtZSxcclxuICAgICAgICAgICAgY2hhdFVzZXJzXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Um9vbVVzZXJzKHJvb21JZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueVtdPihgJHt0aGlzLmJhc2VVcmx9L2FwaS9jaGF0L2NoYXRyb29tcy9nZXRfdXNlci8ke3Jvb21JZH0vdXNlcnMvYCkucGlwZShcclxuICAgICAgICAgICAgbWFwKGxpc3QgPT5cclxuICAgICAgICAgICAgICAgIGxpc3QubWFwKHUgPT4gKHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogdS5Vc2VySWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlcm5hbWU6IHUuVXNlck5hbWVcclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRVc2VyVG9Sb29tKHJvb21JZDogc3RyaW5nLCB1c2VySWQ6IHN0cmluZywgdXNlck5hbWU6IHN0cmluZywgY3JlYXRlZEJ5OiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5iYXNlVXJsfS9hcGkvY2hhdC9jaGF0cm9vbXMvYWRkX3VzZXIvJHtyb29tSWR9L3VzZXJzL2FkZC9gLCB7XHJcbiAgICAgICAgICAgIHVzZXJJZCxcclxuICAgICAgICAgICAgdXNlck5hbWUsXHJcbiAgICAgICAgICAgIGNyZWF0ZWRCeVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0gTUVTU0FHRVMgLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG4gICAgZ2V0TWVzc2FnZXMocm9vbUlkOiBzdHJpbmcsIHNpbmNlPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxDaGF0TWVzc2FnZVtdPiB7XHJcbiAgICAgICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7fTtcclxuICAgICAgICBpZiAoc2luY2UpIHBhcmFtcy5zaW5jZSA9IHNpbmNlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnlbXT4oYCR7dGhpcy5iYXNlVXJsfS9hcGkvY2hhdC9tZXNzYWdlcy9yb29tcy9hbGxfbWVzc2FnZXMvJHtyb29tSWR9L2AsIHtwYXJhbXN9KS5waXBlKFxyXG4gICAgICAgICAgICBtYXAobGlzdCA9PlxyXG4gICAgICAgICAgICAgICAgbGlzdC5tYXAobSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOiBtLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIGNoYXRSb29tSWQ6IG0uY2hhdFJvb21JZCxcclxuICAgICAgICAgICAgICAgICAgICBzZW5kZXJJZDogbS5zZW5kZXJJZCxcclxuICAgICAgICAgICAgICAgICAgICBzZW5kZXJOYW1lOiBtLnNlbmRlck5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogbS5jb250ZW50LFxyXG4gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlSWQ6IG0ucmVwbHlUb01lc3NhZ2VJZCxcclxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkQXQ6IG0uY3JlYXRlZEF0LFxyXG4gICAgICAgICAgICAgICAgICAgIGhhc0F0dGFjaG1lbnQ6IG0uaGFzQXR0YWNobWVudCA/PyBmYWxzZSxcclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBzZW5kTWVzc2FnZShcclxuICAgICAgICByb29tSWQ6IHN0cmluZyxcclxuICAgICAgICBwYXlsb2FkOiB7XHJcbiAgICAgICAgICAgIHNlbmRlcklkOiBzdHJpbmc7XHJcbiAgICAgICAgICAgIHNlbmRlck5hbWU6IHN0cmluZyxcclxuICAgICAgICAgICAgY29udGVudDogc3RyaW5nO1xyXG4gICAgICAgICAgICByZXBseVRvTWVzc2FnZUlkPzogc3RyaW5nIHwgbnVsbCxcclxuICAgICAgICAgICAgY3JlYXRlZEJ5OiBzdHJpbmdcclxuICAgICAgICB9XHJcbiAgICApOiBPYnNlcnZhYmxlPENoYXRNZXNzYWdlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfS9hcGkvY2hhdC9tZXNzYWdlcy9yb29tcy9zZW5kLyR7cm9vbUlkfS9gLCBwYXlsb2FkKS5waXBlKFxyXG4gICAgICAgICAgICBtYXAobSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgaWQ6IG0uaWQsXHJcbiAgICAgICAgICAgICAgICBjaGF0Um9vbUlkOiBtLmNoYXRSb29tSWQsXHJcbiAgICAgICAgICAgICAgICBzZW5kZXJJZDogbS5zZW5kZXJJZCxcclxuICAgICAgICAgICAgICAgIHNlbmRlck5hbWU6IG0uc2VuZGVyTmFtZSxcclxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IG0uY29udGVudCxcclxuICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlSWQ6IG0ucmVwbHlUb01lc3NhZ2VJZCxcclxuICAgICAgICAgICAgICAgIGNyZWF0ZWRBdDogbS5jcmVhdGVkQXQsXHJcbiAgICAgICAgICAgICAgICBoYXNBdHRhY2htZW50OiBtLmhhc0F0dGFjaG1lbnQgPz8gZmFsc2UsXHJcbiAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Um9vbXMobG9nZ2VkSW5Vc2VySWQ6IHN0cmluZywgY2hhdFJvb21JZD86IHN0cmluZykge1xyXG4gICAgICAgIGxldCB1cmwgPSBgJHt0aGlzLmJhc2VVcmx9L2FwaS9jaGF0L2NoYXRyb29tcy8ke2xvZ2dlZEluVXNlcklkfWA7XHJcbiAgICAgICAgaWYgKGNoYXRSb29tSWQpIHtcclxuICAgICAgICAgICAgdXJsICs9IGAvJHtjaGF0Um9vbUlkfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueVtdPihgJHt1cmx9L2ApO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBhcmNoaXZlUm9vbShyb29tSWQ6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPGFueVtdPihgJHt0aGlzLmJhc2VVcmx9L2FwaS9jaGF0L2NoYXRyb29tcy9hcmNoaXZlLyR7cm9vbUlkfS9gKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxpc3RlbkZvck5vdGlmaWNhdGlvbnMoKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0xpc3RlbmluZycpO1xyXG4gICAgICAgIC8vIPCflJQgQURERUQgVE8gUk9PTSDigJQgb25seSBhZGRlZCB1c2VyXHJcbiAgICAgICAgdGhpcy5zb2NrZXQub24oJ2FkZGVkVG9Sb29tJykuc3Vic2NyaWJlKChtc2c6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnYWRkZWRUb1Jvb20nLCBtc2cpO1xyXG4gICAgICAgICAgICBpZiAobXNnLmFkZGVkVXNlcklkICE9PSB0aGlzLmN1cnJlbnRVc2VyKCkudXNlcklkKSByZXR1cm47XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIPCflJQgTkVXIE1FU1NBR0Ug4oCUIGV2ZXJ5b25lIEVYQ0VQVCBzZW5kZXJcclxuICAgICAgICB0aGlzLnNvY2tldC5vbignbmV3TWVzc2FnZScpLnN1YnNjcmliZSgobXNnOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ25ld01lc3NhZ2UnLCBtc2cpO1xyXG4gICAgICAgICAgICBpZiAobXNnLnNlbmRlcklkID09PSB0aGlzLmN1cnJlbnRVc2VyKCkudXNlcklkKSByZXR1cm47XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbWFya0FzUmVhZChub3RpZmljYXRpb25JZDogc3RyaW5nLCB1c2VyX2lkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmJhc2VVcmx9L2FwaS9jaGF0L25vdGlmaWNhdGlvbnMvbWFya19yZWFkLyR7bm90aWZpY2F0aW9uSWR9L2AsIHtcclxuICAgICAgICAgICAgdXNlcl9pZFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFsbFVzZXJOb3RpZmljYXRpb25zKHVzZXJJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueVtdPihgJHt0aGlzLmJhc2VVcmx9L2FwaS9jaGF0L25vdGlmaWNhdGlvbnMvZ2V0X2FsbC8ke3VzZXJJZH0vYCk7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
114
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hhdC13aWRnZXQvc3JjL2xpYi9jb3JlL3NlcnZpY2VzL2NoYXQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekQsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBR25DLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQzs7OztBQUtsRCxNQUFNLE9BQU8sV0FBVztJQU1wQixZQUFvQixJQUFnQixFQUNILE1BQWtCLEVBQ3ZDLE1BQXFCO1FBRmIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNILFdBQU0sR0FBTixNQUFNLENBQVk7UUFDdkMsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQVBqQywwREFBMEQ7UUFFMUQsZ0JBQVcsR0FBRyxNQUFNLENBQWEsSUFBSSxDQUFDLENBQUM7UUFDdkMsYUFBUSxHQUFHLE1BQU0sQ0FBUSxFQUFFLENBQUMsQ0FBQztRQUt6QixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsa0RBQWtEO0lBQ2xELFVBQVUsQ0FBQyxNQUFjLEVBQUUsSUFBWSxFQUFFLFFBQWdCLEVBQUUsU0FBaUIsRUFBRSxRQUFnQixFQUFFLFNBQWM7UUFDMUcsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLDhCQUE4QixNQUFNLEdBQUcsRUFBRTtZQUMxRSxJQUFJO1lBQ0osUUFBUTtZQUNSLFNBQVM7WUFDVCxRQUFRO1lBQ1IsU0FBUztTQUNaLENBQUMsQ0FBQztJQUNQ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Q0FBQyxHQUFHLENBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxtQ0FBbUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUM3RixDQUFDOytHQS9IUSxXQUFXLDRDQU9SLFdBQVc7bUhBUGQsV0FBVyxjQURDLE1BQU07OzRGQUNsQixXQUFXO2tCQUR2QixVQUFVO21CQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQzs7MEJBUXZCLE1BQU07MkJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBzaWduYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHttYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtDaGF0TWVzc2FnZX0gZnJvbSAnLi4vbW9kZWxzL2NoYXQubW9kZWxzJztcclxuaW1wb3J0IHtDSEFUX0NPTkZJR30gZnJvbSBcIi4uL2NvbmZpZy9jaGF0LnRva2Vuc1wiO1xyXG5pbXBvcnQge0NoYXRDb25maWd9IGZyb20gXCIuLi9jb25maWcvY2hhdC1jb25maWdcIjtcclxuaW1wb3J0IHtTb2NrZXRTZXJ2aWNlfSBmcm9tIFwiLi9zb2NrZXQuc2VydmljZVwiO1xyXG5cclxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXHJcbmV4cG9ydCBjbGFzcyBDaGF0U2VydmljZSB7XHJcbiAgICAvLyBwcml2YXRlIGJhc2VVcmwgPSBgaHR0cHM6Ly9jb3JldWF0YXJ0aGtvc2guc2FyamFrLmNvbWA7XHJcblxyXG4gICAgY3VycmVudFVzZXIgPSBzaWduYWw8YW55IHwgbnVsbD4obnVsbCk7XHJcbiAgICB1c2VyTGlzdCA9IHNpZ25hbDxhbnlbXT4oW10pO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgICAgICBASW5qZWN0KENIQVRfQ09ORklHKSBwcml2YXRlIGNvbmZpZzogQ2hhdENvbmZpZyxcclxuICAgICAgICBwcml2YXRlIHNvY2tldDogU29ja2V0U2VydmljZSkge1xyXG4gICAgICAgIHRoaXMubGlzdGVuRm9yTm90aWZpY2F0aW9ucygpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBiYXNlVXJsKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5hcGlCYXNlVXJsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0gQ0hBVCBST09NUyAtLS0tLS0tLS0tLS0tLS0tICovXHJcbiAgICBjcmVhdGVSb29tKHJvb21JZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIG1ldGFkYXRhOiBzdHJpbmcsIGNyZWF0ZWRCeTogc3RyaW5nLCB1c2VybmFtZTogc3RyaW5nLCBjaGF0VXNlcnM6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuYmFzZVVybH0vYXBpL2NoYXQvY2hhdHJvb21zL2NyZWF0ZS8ke3Jvb21JZH0vYCwge1xyXG4gICAgICAgICAgICBuYW1lLFxyXG4gICAgICAgICAgICBtZXRhZGF0YSxcclxuICAgICAgICAgICAgY3JlYXRlZEJ5LFxyXG4gICAgICAgICAgICB1c2VybmFtZSxcclxuICAgICAgICAgICAgY2hhdFVzZXJzXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Um9vbVVzZXJzKHJvb21JZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueVtdPihgJHt0aGlzLmJhc2VVcmx9L2FwaS9jaGF0L2NoYXRyb29tcy9nZXRfdXNlci8ke3Jvb21JZH0vdXNlcnMvYCkucGlwZShcclxuICAgICAgICAgICAgbWFwKGxpc3QgPT5cclxuICAgICAgICAgICAgICAgIGxpc3QubWFwKHUgPT4gKHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogdS5Vc2VySWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlcm5hbWU6IHUuVXNlck5hbWVcclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRVc2VyVG9Sb29tKHJvb21JZDogc3RyaW5nLCB1c2VySWQ6IHN0cmluZywgdXNlck5hbWU6IHN0cmluZywgY3JlYXRlZEJ5OiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5iYXNlVXJsfS9hcGkvY2hhdC9jaGF0cm9vbXMvYWRkX3VzZXIvJHtyb29tSWR9L3VzZXJzL2FkZC9gLCB7XHJcbiAgICAgICAgICAgIHVzZXJJZCxcclxuICAgICAgICAgICAgdXNlck5hbWUsXHJcbiAgICAgICAgICAgIGNyZWF0ZWRCeVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0gTUVTU0FHRVMgLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG4gICAgZ2V0TWVzc2FnZXMocm9vbUlkOiBzdHJpbmcsIHNpbmNlPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxDaGF0TWVzc2FnZVtdPiB7XHJcbiAgICAgICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7fTtcclxuICAgICAgICBpZiAoc2luY2UpIHBhcmFtcy5zaW5jZSA9IHNpbmNlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnlbXT4oYCR7dGhpcy5iYXNlVXJsfS9hcGkvY2hhdC9tZXNzYWdlcy9yb29tcy9hbGxfbWVzc2FnZXMvJHtyb29tSWR9L2AsIHtwYXJhbXN9KS5waXBlKFxyXG4gICAgICAgICAgICBtYXAobGlzdCA9PlxyXG4gICAgICAgICAgICAgICAgbGlzdC5tYXAobSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOiBtLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIGNoYXRSb29tSWQ6IG0uY2hhdFJvb21JZCxcclxuICAgICAgICAgICAgICAgICAgICBzZW5kZXJJZDogbS5zZW5kZXJJZCxcclxuICAgICAgICAgICAgICAgICAgICBzZW5kZXJOYW1lOiBtLnNlbmRlck5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogbS5jb250ZW50LFxyXG4gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlSWQ6IG0ucmVwbHlUb01lc3NhZ2VJZCxcclxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkQXQ6IG0uY3JlYXRlZEF0LFxyXG4gICAgICAgICAgICAgICAgICAgIGhhc0F0dGFjaG1lbnQ6IG0uaGFzQXR0YWNobWVudCA/PyBmYWxzZSxcclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBzZW5kTWVzc2FnZShcclxuICAgICAgICByb29tSWQ6IHN0cmluZyxcclxuICAgICAgICBwYXlsb2FkOiB7XHJcbiAgICAgICAgICAgIHNlbmRlcklkOiBzdHJpbmc7XHJcbiAgICAgICAgICAgIHNlbmRlck5hbWU6IHN0cmluZyxcclxuICAgICAgICAgICAgY29udGVudDogc3RyaW5nO1xyXG4gICAgICAgICAgICByZXBseVRvTWVzc2FnZUlkPzogc3RyaW5nIHwgbnVsbCxcclxuICAgICAgICAgICAgY3JlYXRlZEJ5OiBzdHJpbmdcclxuICAgICAgICB9XHJcbiAgICApOiBPYnNlcnZhYmxlPENoYXRNZXNzYWdlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfS9hcGkvY2hhdC9tZXNzYWdlcy9yb29tcy9zZW5kLyR7cm9vbUlkfS9gLCBwYXlsb2FkKS5waXBlKFxyXG4gICAgICAgICAgICBtYXAobSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgaWQ6IG0uaWQsXHJcbiAgICAgICAgICAgICAgICBjaGF0Um9vbUlkOiBtLmNoYXRSb29tSWQsXHJcbiAgICAgICAgICAgICAgICBzZW5kZXJJZDogbS5zZW5kZXJJZCxcclxuICAgICAgICAgICAgICAgIHNlbmRlck5hbWU6IG0uc2VuZGVyTmFtZSxcclxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IG0uY29udGVudCxcclxuICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlSWQ6IG0ucmVwbHlUb01lc3NhZ2VJZCxcclxuICAgICAgICAgICAgICAgIGNyZWF0ZWRBdDogbS5jcmVhdGVkQXQsXHJcbiAgICAgICAgICAgICAgICBoYXNBdHRhY2htZW50OiBtLmhhc0F0dGFjaG1lbnQgPz8gZmFsc2UsXHJcbiAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Um9vbXMobG9nZ2VkSW5Vc2VySWQ6IHN0cmluZywgY2hhdFJvb21JZD86IHN0cmluZykge1xyXG4gICAgICAgIGxldCB1cmwgPSBgJHt0aGlzLmJhc2VVcmx9L2FwaS9jaGF0L2NoYXRyb29tcy8ke2xvZ2dlZEluVXNlcklkfWA7XHJcbiAgICAgICAgaWYgKGNoYXRSb29tSWQpIHtcclxuICAgICAgICAgICAgdXJsICs9IGAvJHtjaGF0Um9vbUlkfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueVtdPihgJHt1cmx9L2ApO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBhcmNoaXZlUm9vbShyb29tSWQ6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPGFueVtdPihgJHt0aGlzLmJhc2VVcmx9L2FwaS9jaGF0L2NoYXRyb29tcy9hcmNoaXZlLyR7cm9vbUlkfS9gKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxpc3RlbkZvck5vdGlmaWNhdGlvbnMoKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0xpc3RlbmluZycpO1xyXG4gICAgICAgIC8vIPCflJQgQURERUQgVE8gUk9PTSDigJQgb25seSBhZGRlZCB1c2VyXHJcbiAgICAgICAgdGhpcy5zb2NrZXQub24oJ2FkZGVkVG9Sb29tJykuc3Vic2NyaWJlKChtc2c6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnYWRkZWRUb1Jvb20nLCBtc2cpO1xyXG4gICAgICAgICAgICBpZiAobXNnLmFkZGVkVXNlcklkICE9PSB0aGlzLmN1cnJlbnRVc2VyKCkudXNlcklkKSByZXR1cm47XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIPCflJQgTkVXIE1FU1NBR0Ug4oCUIGV2ZXJ5b25lIEVYQ0VQVCBzZW5kZXJcclxuICAgICAgICB0aGlzLnNvY2tldC5vbignbmV3TWVzc2FnZScpLnN1YnNjcmliZSgobXNnOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ25ld01lc3NhZ2UnLCBtc2cpO1xyXG4gICAgICAgICAgICBpZiAobXNnLnNlbmRlcklkID09PSB0aGlzLmN1cnJlbnRVc2VyKCkudXNlcklkKSByZXR1cm47XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbWFya0FzUmVhZChlbnRpdHlJZDogc3RyaW5nLCBldmVudFR5cGU6IHN0cmluZywgdXNlcl9pZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5iYXNlVXJsfS9hcGkvY2hhdC9ub3RpZmljYXRpb25zL21hcmtfcmVhZC8ke2VudGl0eUlkfS8ke2V2ZW50VHlwZX0vYCwge1xyXG4gICAgICAgICAgICB1c2VyX2lkXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWxsVXNlck5vdGlmaWNhdGlvbnModXNlcklkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55W10+KGAke3RoaXMuYmFzZVVybH0vYXBpL2NoYXQvbm90aWZpY2F0aW9ucy9nZXRfYWxsLyR7dXNlcklkfS9gKTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -8,13 +8,20 @@ export class SocketService {
|
|
|
8
8
|
this.listeners = new Map();
|
|
9
9
|
this.notifications = signal([]);
|
|
10
10
|
this.hasNewNotification = signal(false);
|
|
11
|
+
this.reconnectAttempts = 0;
|
|
12
|
+
this.MAX_RECONNECT_ATTEMPTS = 5;
|
|
11
13
|
// this.connect();
|
|
12
14
|
}
|
|
13
15
|
connect(userId) {
|
|
14
16
|
// this.socket = new WebSocket('wss://coreuatarthkosh.sarjak.com/ws/');
|
|
17
|
+
if (this.reconnectAttempts >= this.MAX_RECONNECT_ATTEMPTS) {
|
|
18
|
+
console.error('[WS] Max reconnect attempts reached. Giving up.');
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
15
21
|
this.socket = new WebSocket(`${this.config.wsBaseUrl}/ws/`);
|
|
16
22
|
this.socket.onopen = () => {
|
|
17
23
|
console.log('[WS] Connected');
|
|
24
|
+
this.reconnectAttempts = 0;
|
|
18
25
|
this.joinUserChannel(userId);
|
|
19
26
|
this.on('notificationCreated').subscribe((notification) => {
|
|
20
27
|
console.log('Listening for notifications', notification);
|
|
@@ -46,10 +53,17 @@ export class SocketService {
|
|
|
46
53
|
};
|
|
47
54
|
this.socket.onerror = (err) => {
|
|
48
55
|
console.error('[WS] Error', err);
|
|
56
|
+
this.socket.close();
|
|
49
57
|
};
|
|
50
58
|
this.socket.onclose = () => {
|
|
59
|
+
this.reconnectAttempts++;
|
|
51
60
|
console.warn('[WS] Disconnected – reconnecting...');
|
|
52
|
-
|
|
61
|
+
if (this.reconnectAttempts < this.MAX_RECONNECT_ATTEMPTS) {
|
|
62
|
+
setTimeout(() => this.connect(userId), 2000);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
console.error('[WS] Stopped reconnecting.');
|
|
66
|
+
}
|
|
53
67
|
};
|
|
54
68
|
}
|
|
55
69
|
emit(event, data) {
|
|
@@ -131,4 +145,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
131
145
|
type: Inject,
|
|
132
146
|
args: [CHAT_CONFIG]
|
|
133
147
|
}] }] });
|
|
134
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ja2V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXdpZGdldC9zcmMvbGliL2NvcmUvc2VydmljZXMvc29ja2V0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHVCQUF1QixDQUFDOztBQUtsRCxNQUFNLE9BQU8sYUFBYTtJQU90QixZQUF5QyxNQUFrQjtRQUFsQixXQUFNLEdBQU4sTUFBTSxDQUFZO1FBSm5ELGNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBbUMsQ0FBQztRQUMvRCxrQkFBYSxHQUFHLE1BQU0sQ0FBUSxFQUFFLENBQUMsQ0FBQztRQUNsQyx1QkFBa0IsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFHL0Isa0JBQWtCO0lBQ3RCLENBQUM7SUFFRCxPQUFPLENBQUMsTUFBYztRQUNsQix1RUFBdUU7UUFFdkUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxNQUFNLENBQUMsQ0FBQztRQUU1RCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUU7WUFDdEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFlBQWlCLEVBQUUsRUFBRTtnQkFDM0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsRUFBRSxZQUFZLENBQUMsQ0FBQztnQkFDekQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQzdCLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUM7b0JBQ3JDLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUM7b0JBRXpDLGtDQUFrQztvQkFDbEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FDcEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLE1BQU0sSUFBSSxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FDMUQsQ0FBQztvQkFFRixnQ0FBZ0M7b0JBQ2hDLElBQUksTUFBTSxFQUFFLENBQUM7d0JBQ1QsT0FBTyxJQUFJLENBQUM7b0JBQ2hCLENBQUM7b0JBRUQsdUNBQXVDO29CQUN2QyxPQUFPO3dCQUNIOzRCQUNJLEdBQUcsWUFBWTs0QkFDZixXQUFXLEVBQUUsQ0FBQzt5QkFDakI7d0JBQ0QsR0FBRyxJQUFJO3FCQUNWLENBQUM7Z0JBQ04sQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUM5QixNQUFNLEdBQUcsR0FBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3JELFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUMxQixPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUU7WUFDdkIsT0FBTyxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1lBQ3BELFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2pELENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRCxJQUFJLENBQUMsS0FBYSxFQUFFLElBQVU7UUFDMUIsTUFBTSxPQUFPLEdBQVEsRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxRQUFRLENBQUMsTUFBYztRQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsZUFBZSxDQUFDLE1BQWM7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQVM7UUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUE0QztRQUNwRCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsRUFBRSxDQUFJLEtBQWE7UUFDZixPQUFPLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3hCLE1BQU0sT0FBTyxHQUFHLENBQUMsSUFBTyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRTVDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUM3QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbEMsQ0FBQztZQUNELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUV6QyxPQUFPLEdBQUcsRUFBRTtnQkFDUixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDOUQsQ0FBQyxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsWUFBWSxDQUFDLEVBQXNCO1FBQy9CLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxhQUFhLENBQUMsRUFBdUI7UUFDakMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELGFBQWEsQ0FBQyxFQUEwRDtRQUNwRSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsY0FBYyxDQUFDLEVBQXdCO1FBQ25DLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFTyxXQUFXLENBQUMsS0FBYSxFQUFFLEVBQXVCO1FBQ3RELElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFTyxjQUFjLENBQUMsS0FBYSxFQUFFLEVBQXdCO1FBQzFELElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdCLE9BQU87UUFDWCxDQUFDO1FBQ0QsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsYUFBYTtRQUNULElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELFNBQVMsQ0FBQyxJQUFzQjtRQUM1QixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUM3QixJQUFJLENBQUMsTUFBTSxDQUNQLENBQUMsQ0FBQyxFQUFFLENBQ0EsQ0FBQyxDQUNHLENBQUMsQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLFFBQVE7WUFDNUIsQ0FBQyxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUNqQyxDQUNSLENBQ0osQ0FBQztRQUNGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNqRSxDQUFDOytHQTNKUSxhQUFhLGtCQU9GLFdBQVc7bUhBUHRCLGFBQWEsY0FERCxNQUFNOzs0RkFDbEIsYUFBYTtrQkFEekIsVUFBVTttQkFBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUM7OzBCQVFmLE1BQU07MkJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBzaWduYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge0NIQVRfQ09ORklHfSBmcm9tIFwiLi4vY29uZmlnL2NoYXQudG9rZW5zXCI7XHJcbmltcG9ydCB7Q2hhdENvbmZpZ30gZnJvbSBcIi4uL2NvbmZpZy9jaGF0LWNvbmZpZ1wiO1xyXG5pbXBvcnQge0NoYXROb3RpZmljYXRpb259IGZyb20gXCIuLi9tb2RlbHMvbm90aWZpY2F0aW9uLm1vZGVsXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcclxuZXhwb3J0IGNsYXNzIFNvY2tldFNlcnZpY2Uge1xyXG5cclxuICAgIHByaXZhdGUgc29ja2V0ITogV2ViU29ja2V0O1xyXG4gICAgcHJpdmF0ZSBsaXN0ZW5lcnMgPSBuZXcgTWFwPHN0cmluZywgKChkYXRhOiBhbnkpID0+IHZvaWQpW10+KCk7XHJcbiAgICBub3RpZmljYXRpb25zID0gc2lnbmFsPGFueVtdPihbXSk7XHJcbiAgICBoYXNOZXdOb3RpZmljYXRpb24gPSBzaWduYWwoZmFsc2UpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoQ0hBVF9DT05GSUcpIHByaXZhdGUgY29uZmlnOiBDaGF0Q29uZmlnKSB7XHJcbiAgICAgICAgLy8gdGhpcy5jb25uZWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29ubmVjdCh1c2VySWQ6IHN0cmluZykge1xyXG4gICAgICAgIC8vIHRoaXMuc29ja2V0ID0gbmV3IFdlYlNvY2tldCgnd3NzOi8vY29yZXVhdGFydGhrb3NoLnNhcmphay5jb20vd3MvJyk7XHJcblxyXG4gICAgICAgIHRoaXMuc29ja2V0ID0gbmV3IFdlYlNvY2tldChgJHt0aGlzLmNvbmZpZy53c0Jhc2VVcmx9L3dzL2ApO1xyXG5cclxuICAgICAgICB0aGlzLnNvY2tldC5vbm9wZW4gPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbV1NdIENvbm5lY3RlZCcpO1xyXG4gICAgICAgICAgICB0aGlzLmpvaW5Vc2VyQ2hhbm5lbCh1c2VySWQpO1xyXG4gICAgICAgICAgICB0aGlzLm9uKCdub3RpZmljYXRpb25DcmVhdGVkJykuc3Vic2NyaWJlKChub3RpZmljYXRpb246IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0xpc3RlbmluZyBmb3Igbm90aWZpY2F0aW9ucycsIG5vdGlmaWNhdGlvbik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnMudXBkYXRlKGxpc3QgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvb21JZCA9IG5vdGlmaWNhdGlvbi5lbnRpdHlJZDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBldmVudFR5cGUgPSBub3RpZmljYXRpb24uZXZlbnRUeXBlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDwn5SRIERlZHVwIGtleSA9IHJvb20gKyBldmVudFR5cGVcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBleGlzdHMgPSBsaXN0LnNvbWUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG4gPT4gbi5lbnRpdHlJZCA9PT0gcm9vbUlkICYmIG4uZXZlbnRUeXBlID09PSBldmVudFR5cGVcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDinYwgQWxyZWFkeSBleGlzdHMg4oaSIGRvIG5vdGhpbmdcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXhpc3RzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsaXN0O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g4pyFIE5ldyAocm9vbSArIGV2ZW50VHlwZSkgY29tYmluYXRpb25cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5ub3RpZmljYXRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnJlYWRDb3VudDogMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5saXN0XHJcbiAgICAgICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlBcnJpdmFsKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuc29ja2V0Lm9ubWVzc2FnZSA9IChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtc2c6IGFueSA9IEpTT04ucGFyc2UoZXZlbnQuZGF0YSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXJzID0gdGhpcy5saXN0ZW5lcnMuZ2V0KG1zZy5ldmVudCkgfHwgW107XHJcbiAgICAgICAgICAgIGhhbmRsZXJzLmZvckVhY2goaCA9PiBoKG1zZy5kYXRhKSk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5zb2NrZXQub25lcnJvciA9IChlcnIpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignW1dTXSBFcnJvcicsIGVycik7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5zb2NrZXQub25jbG9zZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdbV1NdIERpc2Nvbm5lY3RlZCDigJMgcmVjb25uZWN0aW5nLi4uJyk7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jb25uZWN0KHVzZXJJZCksIDIwMDApO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZW1pdChldmVudDogc3RyaW5nLCBkYXRhPzogYW55KSB7XHJcbiAgICAgICAgY29uc3QgcGF5bG9hZDogYW55ID0ge2V2ZW50LCBkYXRhfTtcclxuICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHBheWxvYWQpKTtcclxuICAgIH1cclxuXHJcbiAgICBqb2luUm9vbShyb29tSWQ6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuZW1pdCgnam9pblJvb20nLCByb29tSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGpvaW5Vc2VyQ2hhbm5lbCh1c2VySWQ6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuZW1pdCgnam9pblVzZXJDaGFubmVsJywgdXNlcklkKTtcclxuICAgIH1cclxuXHJcbiAgICBzZW5kTWVzc2FnZShkYXRhOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmVtaXQoJ3NlbmRNZXNzYWdlJywgZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgbWVzc2FnZVNlZW4oZGF0YTogeyBjaGF0Um9vbUlkOiBzdHJpbmc7IHVzZXJJZDogc3RyaW5nIH0pIHtcclxuICAgICAgICB0aGlzLmVtaXQoJ21lc3NhZ2VTZWVuJywgZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgb248VD4oZXZlbnQ6IHN0cmluZyk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShzdWIgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVyID0gKGRhdGE6IFQpID0+IHN1Yi5uZXh0KGRhdGEpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLmxpc3RlbmVycy5oYXMoZXZlbnQpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVycy5zZXQoZXZlbnQsIFtdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmxpc3RlbmVycy5nZXQoZXZlbnQpIS5wdXNoKGhhbmRsZXIpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFyciA9IHRoaXMubGlzdGVuZXJzLmdldChldmVudCkgfHwgW107XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVycy5zZXQoZXZlbnQsIGFyci5maWx0ZXIoaCA9PiBoICE9PSBoYW5kbGVyKSk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25OZXdNZXNzYWdlKGNiOiAobXNnOiBhbnkpID0+IHZvaWQpIHtcclxuICAgICAgICB0aGlzLmFkZExpc3RlbmVyKCduZXdNZXNzYWdlJywgY2IpO1xyXG4gICAgfVxyXG5cclxuICAgIG9mZk5ld01lc3NhZ2UoY2I/OiAobXNnOiBhbnkpID0+IHZvaWQpIHtcclxuICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKCduZXdNZXNzYWdlJywgY2IpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uTWVzc2FnZVNlZW4oY2I6IChkYXRhOiB7IGNoYXRSb29tSWQ6IHN0cmluZzsgdXNlcklkOiBzdHJpbmcgfSkgPT4gdm9pZCkge1xyXG4gICAgICAgIHRoaXMuYWRkTGlzdGVuZXIoJ21lc3NhZ2VTZWVuJywgY2IpO1xyXG4gICAgfVxyXG5cclxuICAgIG9mZk1lc3NhZ2VTZWVuKGNiPzogKGRhdGE6IGFueSkgPT4gdm9pZCkge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIoJ21lc3NhZ2VTZWVuJywgY2IpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYWRkTGlzdGVuZXIoZXZlbnQ6IHN0cmluZywgY2I6IChkYXRhOiBhbnkpID0+IHZvaWQpIHtcclxuICAgICAgICBpZiAoIXRoaXMubGlzdGVuZXJzLmhhcyhldmVudCkpIHtcclxuICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnMuc2V0KGV2ZW50LCBbXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubGlzdGVuZXJzLmdldChldmVudCkhLnB1c2goY2IpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVtb3ZlTGlzdGVuZXIoZXZlbnQ6IHN0cmluZywgY2I/OiAoZGF0YTogYW55KSA9PiB2b2lkKSB7XHJcbiAgICAgICAgaWYgKCFjYikge1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RlbmVycy5kZWxldGUoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGFyciA9IHRoaXMubGlzdGVuZXJzLmdldChldmVudCkgfHwgW107XHJcbiAgICAgICAgdGhpcy5saXN0ZW5lcnMuc2V0KGV2ZW50LCBhcnIuZmlsdGVyKGggPT4gaCAhPT0gY2IpKTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhckFsbCgpIHtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnMuc2V0KFtdKTtcclxuICAgIH1cclxuXHJcbiAgICBub3RpZnlBcnJpdmFsKCkge1xyXG4gICAgICAgIHRoaXMuaGFzTmV3Tm90aWZpY2F0aW9uLnNldCh0cnVlKTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5oYXNOZXdOb3RpZmljYXRpb24uc2V0KGZhbHNlKTtcclxuICAgICAgICB9LCAyMDAwKTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhclJvb20oY2hhdDogQ2hhdE5vdGlmaWNhdGlvbikge1xyXG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9ucy51cGRhdGUobGlzdCA9PlxyXG4gICAgICAgICAgICBsaXN0LmZpbHRlcihcclxuICAgICAgICAgICAgICAgIG4gPT5cclxuICAgICAgICAgICAgICAgICAgICAhKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuLmVudGl0eUlkID09PSBjaGF0LmVudGl0eUlkICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG4uZXZlbnRUeXBlID09PSBjaGF0LmV2ZW50VHlwZVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5oYXNOZXdOb3RpZmljYXRpb24uc2V0KHRoaXMubm90aWZpY2F0aW9ucygpLmxlbmd0aCA+IDEpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
148
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ja2V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXdpZGdldC9zcmMvbGliL2NvcmUvc2VydmljZXMvc29ja2V0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHVCQUF1QixDQUFDOztBQUtsRCxNQUFNLE9BQU8sYUFBYTtJQVN0QixZQUF5QyxNQUFrQjtRQUFsQixXQUFNLEdBQU4sTUFBTSxDQUFZO1FBTm5ELGNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBbUMsQ0FBQztRQUMvRCxrQkFBYSxHQUFHLE1BQU0sQ0FBUSxFQUFFLENBQUMsQ0FBQztRQUNsQyx1QkFBa0IsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0Isc0JBQWlCLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsMkJBQXNCLEdBQUcsQ0FBQyxDQUFDO1FBR3hDLGtCQUFrQjtJQUN0QixDQUFDO0lBRUQsT0FBTyxDQUFDLE1BQWM7UUFDbEIsdUVBQXVFO1FBQ3ZFLElBQUksSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQ3hELE9BQU8sQ0FBQyxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQztZQUNqRSxPQUFPO1FBQ1gsQ0FBQztRQUVELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsTUFBTSxDQUFDLENBQUM7UUFFNUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO1lBQ3RCLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JB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QUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsYUFBYTtRQUNULElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELFNBQVMsQ0FBQyxJQUFzQjtRQUM1QixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUM3QixJQUFJLENBQUMsTUFBTSxDQUNQLENBQUMsQ0FBQyxFQUFFLENBQ0EsQ0FBQyxDQUNHLENBQUMsQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLFFBQVE7WUFDNUIsQ0FBQyxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUNqQyxDQUNSLENBQ0osQ0FBQztRQUNGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNqRSxDQUFDOytHQXhLUSxhQUFhLGtCQVNGLFdBQVc7bUhBVHRCLGFBQWEsY0FERCxNQUFNOzs0RkFDbEIsYUFBYTtrQkFEekIsVUFBVTttQkFBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUM7OzBCQVVmLE1BQU07MkJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBzaWduYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge0NIQVRfQ09ORklHfSBmcm9tIFwiLi4vY29uZmlnL2NoYXQudG9rZW5zXCI7XHJcbmltcG9ydCB7Q2hhdENvbmZpZ30gZnJvbSBcIi4uL2NvbmZpZy9jaGF0LWNvbmZpZ1wiO1xyXG5pbXBvcnQge0NoYXROb3RpZmljYXRpb259IGZyb20gXCIuLi9tb2RlbHMvbm90aWZpY2F0aW9uLm1vZGVsXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcclxuZXhwb3J0IGNsYXNzIFNvY2tldFNlcnZpY2Uge1xyXG5cclxuICAgIHByaXZhdGUgc29ja2V0ITogV2ViU29ja2V0O1xyXG4gICAgcHJpdmF0ZSBsaXN0ZW5lcnMgPSBuZXcgTWFwPHN0cmluZywgKChkYXRhOiBhbnkpID0+IHZvaWQpW10+KCk7XHJcbiAgICBub3RpZmljYXRpb25zID0gc2lnbmFsPGFueVtdPihbXSk7XHJcbiAgICBoYXNOZXdOb3RpZmljYXRpb24gPSBzaWduYWwoZmFsc2UpO1xyXG4gICAgcHJpdmF0ZSByZWNvbm5lY3RBdHRlbXB0cyA9IDA7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IE1BWF9SRUNPTk5FQ1RfQVRURU1QVFMgPSA1O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoQ0hBVF9DT05GSUcpIHByaXZhdGUgY29uZmlnOiBDaGF0Q29uZmlnKSB7XHJcbiAgICAgICAgLy8gdGhpcy5jb25uZWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29ubmVjdCh1c2VySWQ6IHN0cmluZykge1xyXG4gICAgICAgIC8vIHRoaXMuc29ja2V0ID0gbmV3IFdlYlNvY2tldCgnd3NzOi8vY29yZXVhdGFydGhrb3NoLnNhcmphay5jb20vd3MvJyk7XHJcbiAgICAgICAgaWYgKHRoaXMucmVjb25uZWN0QXR0ZW1wdHMgPj0gdGhpcy5NQVhfUkVDT05ORUNUX0FUVEVNUFRTKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tXU10gTWF4IHJlY29ubmVjdCBhdHRlbXB0cyByZWFjaGVkLiBHaXZpbmcgdXAuJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc29ja2V0ID0gbmV3IFdlYlNvY2tldChgJHt0aGlzLmNvbmZpZy53c0Jhc2VVcmx9L3dzL2ApO1xyXG5cclxuICAgICAgICB0aGlzLnNvY2tldC5vbm9wZW4gPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbV1NdIENvbm5lY3RlZCcpO1xyXG4gICAgICAgICAgICB0aGlzLnJlY29ubmVjdEF0dGVtcHRzID0gMDtcclxuICAgICAgICAgICAgdGhpcy5qb2luVXNlckNoYW5uZWwodXNlcklkKTtcclxuICAgICAgICAgICAgdGhpcy5vbignbm90aWZpY2F0aW9uQ3JlYXRlZCcpLnN1YnNjcmliZSgobm90aWZpY2F0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdMaXN0ZW5pbmcgZm9yIG5vdGlmaWNhdGlvbnMnLCBub3RpZmljYXRpb24pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zLnVwZGF0ZShsaXN0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByb29tSWQgPSBub3RpZmljYXRpb24uZW50aXR5SWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXZlbnRUeXBlID0gbm90aWZpY2F0aW9uLmV2ZW50VHlwZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g8J+UkSBEZWR1cCBrZXkgPSByb29tICsgZXZlbnRUeXBlXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhpc3RzID0gbGlzdC5zb21lKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuID0+IG4uZW50aXR5SWQgPT09IHJvb21JZCAmJiBuLmV2ZW50VHlwZSA9PT0gZXZlbnRUeXBlXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g4p2MIEFscmVhZHkgZXhpc3RzIOKGkiBkbyBub3RoaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4aXN0cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGlzdDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOKchSBOZXcgKHJvb20gKyBldmVudFR5cGUpIGNvbWJpbmF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ubm90aWZpY2F0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5yZWFkQ291bnQ6IDFcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLi4ubGlzdFxyXG4gICAgICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5QXJyaXZhbCgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnNvY2tldC5vbm1lc3NhZ2UgPSAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbXNnOiBhbnkgPSBKU09OLnBhcnNlKGV2ZW50LmRhdGEpO1xyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMubGlzdGVuZXJzLmdldChtc2cuZXZlbnQpIHx8IFtdO1xyXG4gICAgICAgICAgICBoYW5kbGVycy5mb3JFYWNoKGggPT4gaChtc2cuZGF0YSkpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuc29ja2V0Lm9uZXJyb3IgPSAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tXU10gRXJyb3InLCBlcnIpO1xyXG4gICAgICAgICAgICB0aGlzLnNvY2tldC5jbG9zZSgpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuc29ja2V0Lm9uY2xvc2UgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmVjb25uZWN0QXR0ZW1wdHMrKztcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdbV1NdIERpc2Nvbm5lY3RlZCDigJMgcmVjb25uZWN0aW5nLi4uJyk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlY29ubmVjdEF0dGVtcHRzIDwgdGhpcy5NQVhfUkVDT05ORUNUX0FUVEVNUFRTKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY29ubmVjdCh1c2VySWQpLCAyMDAwKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tXU10gU3RvcHBlZCByZWNvbm5lY3RpbmcuJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGVtaXQoZXZlbnQ6IHN0cmluZywgZGF0YT86IGFueSkge1xyXG4gICAgICAgIGNvbnN0IHBheWxvYWQ6IGFueSA9IHtldmVudCwgZGF0YX07XHJcbiAgICAgICAgdGhpcy5zb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeShwYXlsb2FkKSk7XHJcbiAgICB9XHJcblxyXG4gICAgam9pblJvb20ocm9vbUlkOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmVtaXQoJ2pvaW5Sb29tJywgcm9vbUlkKTtcclxuICAgIH1cclxuXHJcbiAgICBqb2luVXNlckNoYW5uZWwodXNlcklkOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmVtaXQoJ2pvaW5Vc2VyQ2hhbm5lbCcsIHVzZXJJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VuZE1lc3NhZ2UoZGF0YTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdzZW5kTWVzc2FnZScsIGRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIG1lc3NhZ2VTZWVuKGRhdGE6IHsgY2hhdFJvb21JZDogc3RyaW5nOyB1c2VySWQ6IHN0cmluZyB9KSB7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdtZXNzYWdlU2VlbicsIGRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uPFQ+KGV2ZW50OiBzdHJpbmcpOiBPYnNlcnZhYmxlPFQ+IHtcclxuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoc3ViID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IChkYXRhOiBUKSA9PiBzdWIubmV4dChkYXRhKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5saXN0ZW5lcnMuaGFzKGV2ZW50KSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnMuc2V0KGV2ZW50LCBbXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnMuZ2V0KGV2ZW50KSEucHVzaChoYW5kbGVyKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhcnIgPSB0aGlzLmxpc3RlbmVycy5nZXQoZXZlbnQpIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnMuc2V0KGV2ZW50LCBhcnIuZmlsdGVyKGggPT4gaCAhPT0gaGFuZGxlcikpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uTmV3TWVzc2FnZShjYjogKG1zZzogYW55KSA9PiB2b2lkKSB7XHJcbiAgICAgICAgdGhpcy5hZGRMaXN0ZW5lcignbmV3TWVzc2FnZScsIGNiKTtcclxuICAgIH1cclxuXHJcbiAgICBvZmZOZXdNZXNzYWdlKGNiPzogKG1zZzogYW55KSA9PiB2b2lkKSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcignbmV3TWVzc2FnZScsIGNiKTtcclxuICAgIH1cclxuXHJcbiAgICBvbk1lc3NhZ2VTZWVuKGNiOiAoZGF0YTogeyBjaGF0Um9vbUlkOiBzdHJpbmc7IHVzZXJJZDogc3RyaW5nIH0pID0+IHZvaWQpIHtcclxuICAgICAgICB0aGlzLmFkZExpc3RlbmVyKCdtZXNzYWdlU2VlbicsIGNiKTtcclxuICAgIH1cclxuXHJcbiAgICBvZmZNZXNzYWdlU2VlbihjYj86IChkYXRhOiBhbnkpID0+IHZvaWQpIHtcclxuICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKCdtZXNzYWdlU2VlbicsIGNiKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFkZExpc3RlbmVyKGV2ZW50OiBzdHJpbmcsIGNiOiAoZGF0YTogYW55KSA9PiB2b2lkKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmxpc3RlbmVycy5oYXMoZXZlbnQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzLnNldChldmVudCwgW10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxpc3RlbmVycy5nZXQoZXZlbnQpIS5wdXNoKGNiKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlbW92ZUxpc3RlbmVyKGV2ZW50OiBzdHJpbmcsIGNiPzogKGRhdGE6IGFueSkgPT4gdm9pZCkge1xyXG4gICAgICAgIGlmICghY2IpIHtcclxuICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnMuZGVsZXRlKGV2ZW50KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBhcnIgPSB0aGlzLmxpc3RlbmVycy5nZXQoZXZlbnQpIHx8IFtdO1xyXG4gICAgICAgIHRoaXMubGlzdGVuZXJzLnNldChldmVudCwgYXJyLmZpbHRlcihoID0+IGggIT09IGNiKSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJBbGwoKSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zLnNldChbXSk7XHJcbiAgICB9XHJcblxyXG4gICAgbm90aWZ5QXJyaXZhbCgpIHtcclxuICAgICAgICB0aGlzLmhhc05ld05vdGlmaWNhdGlvbi5zZXQodHJ1ZSk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFzTmV3Tm90aWZpY2F0aW9uLnNldChmYWxzZSk7XHJcbiAgICAgICAgfSwgMjAwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJSb29tKGNoYXQ6IENoYXROb3RpZmljYXRpb24pIHtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnMudXBkYXRlKGxpc3QgPT5cclxuICAgICAgICAgICAgbGlzdC5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICBuID0+XHJcbiAgICAgICAgICAgICAgICAgICAgIShcclxuICAgICAgICAgICAgICAgICAgICAgICAgbi5lbnRpdHlJZCA9PT0gY2hhdC5lbnRpdHlJZCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuLmV2ZW50VHlwZSA9PT0gY2hhdC5ldmVudFR5cGVcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuaGFzTmV3Tm90aWZpY2F0aW9uLnNldCh0aGlzLm5vdGlmaWNhdGlvbnMoKS5sZW5ndGggPiAxKTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -36,13 +36,20 @@ class SocketService {
|
|
|
36
36
|
this.listeners = new Map();
|
|
37
37
|
this.notifications = signal([]);
|
|
38
38
|
this.hasNewNotification = signal(false);
|
|
39
|
+
this.reconnectAttempts = 0;
|
|
40
|
+
this.MAX_RECONNECT_ATTEMPTS = 5;
|
|
39
41
|
// this.connect();
|
|
40
42
|
}
|
|
41
43
|
connect(userId) {
|
|
42
44
|
// this.socket = new WebSocket('wss://coreuatarthkosh.sarjak.com/ws/');
|
|
45
|
+
if (this.reconnectAttempts >= this.MAX_RECONNECT_ATTEMPTS) {
|
|
46
|
+
console.error('[WS] Max reconnect attempts reached. Giving up.');
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
43
49
|
this.socket = new WebSocket(`${this.config.wsBaseUrl}/ws/`);
|
|
44
50
|
this.socket.onopen = () => {
|
|
45
51
|
console.log('[WS] Connected');
|
|
52
|
+
this.reconnectAttempts = 0;
|
|
46
53
|
this.joinUserChannel(userId);
|
|
47
54
|
this.on('notificationCreated').subscribe((notification) => {
|
|
48
55
|
console.log('Listening for notifications', notification);
|
|
@@ -74,10 +81,17 @@ class SocketService {
|
|
|
74
81
|
};
|
|
75
82
|
this.socket.onerror = (err) => {
|
|
76
83
|
console.error('[WS] Error', err);
|
|
84
|
+
this.socket.close();
|
|
77
85
|
};
|
|
78
86
|
this.socket.onclose = () => {
|
|
87
|
+
this.reconnectAttempts++;
|
|
79
88
|
console.warn('[WS] Disconnected – reconnecting...');
|
|
80
|
-
|
|
89
|
+
if (this.reconnectAttempts < this.MAX_RECONNECT_ATTEMPTS) {
|
|
90
|
+
setTimeout(() => this.connect(userId), 2000);
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
console.error('[WS] Stopped reconnecting.');
|
|
94
|
+
}
|
|
81
95
|
};
|
|
82
96
|
}
|
|
83
97
|
emit(event, data) {
|
|
@@ -249,8 +263,8 @@ class ChatService {
|
|
|
249
263
|
return;
|
|
250
264
|
});
|
|
251
265
|
}
|
|
252
|
-
markAsRead(
|
|
253
|
-
return this.http.post(`${this.baseUrl}/api/chat/notifications/mark_read/${
|
|
266
|
+
markAsRead(entityId, eventType, user_id) {
|
|
267
|
+
return this.http.post(`${this.baseUrl}/api/chat/notifications/mark_read/${entityId}/${eventType}/`, {
|
|
254
268
|
user_id
|
|
255
269
|
});
|
|
256
270
|
}
|
|
@@ -645,6 +659,7 @@ class ChatWidgetNotificationComponent {
|
|
|
645
659
|
this.chatService = inject(ChatService);
|
|
646
660
|
this.socketService = inject(SocketService);
|
|
647
661
|
this.userId = input(null);
|
|
662
|
+
this.chatLauncher = inject(ChatLauncherComponent);
|
|
648
663
|
this.totalCount = computed(() => this.socketService.notifications().reduce((a, b) => a + b.unreadCount, 0));
|
|
649
664
|
}
|
|
650
665
|
ngOnInit() {
|
|
@@ -652,10 +667,10 @@ class ChatWidgetNotificationComponent {
|
|
|
652
667
|
this.chatService.getAllUserNotifications(this.userId()).subscribe(notifications => {
|
|
653
668
|
const data = notifications.map(n => {
|
|
654
669
|
return {
|
|
655
|
-
actorUserId: n.added_by,
|
|
656
670
|
entityId: n.room_id,
|
|
657
671
|
eventType: n.type,
|
|
658
672
|
payload: { chatRoomId: n.room_id, chatRoomName: n.chat_room_name },
|
|
673
|
+
unreadCount: 0,
|
|
659
674
|
title: n.description
|
|
660
675
|
};
|
|
661
676
|
});
|
|
@@ -667,8 +682,9 @@ class ChatWidgetNotificationComponent {
|
|
|
667
682
|
}
|
|
668
683
|
openRoom(n) {
|
|
669
684
|
this.socketService.clearRoom(n);
|
|
670
|
-
this.chatService.markAsRead(n.
|
|
685
|
+
this.chatService.markAsRead(n.entityId, n.eventType, this.userId()).subscribe(notification => {
|
|
671
686
|
console.log('markAsRead', notification);
|
|
687
|
+
this.chatLauncher.openNewRoom(n.payload.chatRoomId, n.payload.chatRoomName, '', this.chatService?.currentUser().userId, this.chatService?.currentUser().name, []);
|
|
672
688
|
});
|
|
673
689
|
this.open = false;
|
|
674
690
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arthakosh-chat-widget.mjs","sources":["../../../projects/chat-widget/src/lib/core/config/chat.tokens.ts","../../../projects/chat-widget/src/lib/core/services/socket.service.ts","../../../projects/chat-widget/src/lib/core/services/chat.service.ts","../../../projects/chat-widget/src/lib/chat-window/chat-window.component.ts","../../../projects/chat-widget/src/lib/chat-window/chat-window.component.html","../../../projects/chat-widget/src/lib/chat-launcher/chat-launcher.component.ts","../../../projects/chat-widget/src/lib/chat-launcher/chat-launcher.component.html","../../../projects/chat-widget/src/lib/all-chats/all-chats.component.ts","../../../projects/chat-widget/src/lib/all-chats/all-chats.component.html","../../../projects/chat-widget/src/lib/chat-widget-notification/chat-widget-notification.component.ts","../../../projects/chat-widget/src/lib/chat-widget-notification/chat-widget-notification.component.html","../../../projects/chat-widget/src/lib/chat-widget.module.ts","../../../projects/chat-widget/src/lib/chat-widget.service.ts","../../../projects/chat-widget/src/public-api.ts","../../../projects/chat-widget/src/arthakosh-chat-widget.ts"],"sourcesContent":["// chat.tokens.ts\r\nimport { InjectionToken } from '@angular/core';\r\nimport { ChatConfig } from './chat-config';\r\n\r\nexport const CHAT_CONFIG = new InjectionToken<ChatConfig>('CHAT_CONFIG');\r\n","import {Inject, Injectable, signal} from '@angular/core';\r\nimport {Observable} from 'rxjs';\r\nimport {CHAT_CONFIG} from \"../config/chat.tokens\";\r\nimport {ChatConfig} from \"../config/chat-config\";\r\nimport {ChatNotification} from \"../models/notification.model\";\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class SocketService {\r\n\r\n private socket!: WebSocket;\r\n private listeners = new Map<string, ((data: any) => void)[]>();\r\n notifications = signal<any[]>([]);\r\n hasNewNotification = signal(false);\r\n\r\n constructor(@Inject(CHAT_CONFIG) private config: ChatConfig) {\r\n // this.connect();\r\n }\r\n\r\n connect(userId: string) {\r\n // this.socket = new WebSocket('wss://coreuatarthkosh.sarjak.com/ws/');\r\n\r\n this.socket = new WebSocket(`${this.config.wsBaseUrl}/ws/`);\r\n\r\n this.socket.onopen = () => {\r\n console.log('[WS] Connected');\r\n this.joinUserChannel(userId);\r\n this.on('notificationCreated').subscribe((notification: any) => {\r\n console.log('Listening for notifications', notification);\r\n this.notifications.update(list => {\r\n const roomId = notification.entityId;\r\n const eventType = notification.eventType;\r\n\r\n // 🔑 Dedup key = room + eventType\r\n const exists = list.some(\r\n n => n.entityId === roomId && n.eventType === eventType\r\n );\r\n\r\n // ❌ Already exists → do nothing\r\n if (exists) {\r\n return list;\r\n }\r\n\r\n // ✅ New (room + eventType) combination\r\n return [\r\n {\r\n ...notification,\r\n unreadCount: 1\r\n },\r\n ...list\r\n ];\r\n });\r\n this.notifyArrival();\r\n });\r\n };\r\n\r\n this.socket.onmessage = (event) => {\r\n const msg: any = JSON.parse(event.data);\r\n const handlers = this.listeners.get(msg.event) || [];\r\n handlers.forEach(h => h(msg.data));\r\n };\r\n\r\n this.socket.onerror = (err) => {\r\n console.error('[WS] Error', err);\r\n };\r\n\r\n this.socket.onclose = () => {\r\n console.warn('[WS] Disconnected – reconnecting...');\r\n setTimeout(() => this.connect(userId), 2000);\r\n };\r\n }\r\n\r\n emit(event: string, data?: any) {\r\n const payload: any = {event, data};\r\n this.socket.send(JSON.stringify(payload));\r\n }\r\n\r\n joinRoom(roomId: string) {\r\n this.emit('joinRoom', roomId);\r\n }\r\n\r\n joinUserChannel(userId: string) {\r\n this.emit('joinUserChannel', userId);\r\n }\r\n\r\n sendMessage(data: any) {\r\n this.emit('sendMessage', data);\r\n }\r\n\r\n messageSeen(data: { chatRoomId: string; userId: string }) {\r\n this.emit('messageSeen', data);\r\n }\r\n\r\n on<T>(event: string): Observable<T> {\r\n return new Observable(sub => {\r\n const handler = (data: T) => sub.next(data);\r\n\r\n if (!this.listeners.has(event)) {\r\n this.listeners.set(event, []);\r\n }\r\n this.listeners.get(event)!.push(handler);\r\n\r\n return () => {\r\n const arr = this.listeners.get(event) || [];\r\n this.listeners.set(event, arr.filter(h => h !== handler));\r\n };\r\n });\r\n }\r\n\r\n onNewMessage(cb: (msg: any) => void) {\r\n this.addListener('newMessage', cb);\r\n }\r\n\r\n offNewMessage(cb?: (msg: any) => void) {\r\n this.removeListener('newMessage', cb);\r\n }\r\n\r\n onMessageSeen(cb: (data: { chatRoomId: string; userId: string }) => void) {\r\n this.addListener('messageSeen', cb);\r\n }\r\n\r\n offMessageSeen(cb?: (data: any) => void) {\r\n this.removeListener('messageSeen', cb);\r\n }\r\n\r\n private addListener(event: string, cb: (data: any) => void) {\r\n if (!this.listeners.has(event)) {\r\n this.listeners.set(event, []);\r\n }\r\n this.listeners.get(event)!.push(cb);\r\n }\r\n\r\n private removeListener(event: string, cb?: (data: any) => void) {\r\n if (!cb) {\r\n this.listeners.delete(event);\r\n return;\r\n }\r\n const arr = this.listeners.get(event) || [];\r\n this.listeners.set(event, arr.filter(h => h !== cb));\r\n }\r\n\r\n clearAll() {\r\n this.notifications.set([]);\r\n }\r\n\r\n notifyArrival() {\r\n this.hasNewNotification.set(true);\r\n setTimeout(() => {\r\n this.hasNewNotification.set(false);\r\n }, 2000);\r\n }\r\n\r\n clearRoom(chat: ChatNotification) {\r\n this.notifications.update(list =>\r\n list.filter(\r\n n =>\r\n !(\r\n n.entityId === chat.entityId &&\r\n n.eventType === chat.eventType\r\n )\r\n )\r\n );\r\n this.hasNewNotification.set(this.notifications().length > 1);\r\n }\r\n}\r\n","import {Inject, Injectable, signal} from '@angular/core';\r\nimport {HttpClient} from '@angular/common/http';\r\nimport {map} from 'rxjs/operators';\r\nimport {Observable} from 'rxjs';\r\nimport {ChatMessage} from '../models/chat.models';\r\nimport {CHAT_CONFIG} from \"../config/chat.tokens\";\r\nimport {ChatConfig} from \"../config/chat-config\";\r\nimport {SocketService} from \"./socket.service\";\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class ChatService {\r\n // private baseUrl = `https://coreuatarthkosh.sarjak.com`;\r\n\r\n currentUser = signal<any | null>(null);\r\n userList = signal<any[]>([]);\r\n\r\n constructor(private http: HttpClient,\r\n @Inject(CHAT_CONFIG) private config: ChatConfig,\r\n private socket: SocketService) {\r\n this.listenForNotifications();\r\n }\r\n\r\n get baseUrl() {\r\n return this.config.apiBaseUrl;\r\n }\r\n\r\n /* ---------------- CHAT ROOMS ---------------- */\r\n createRoom(roomId: string, name: string, metadata: string, createdBy: string, username: string, chatUsers: any): Observable<any> {\r\n return this.http.post(`${this.baseUrl}/api/chat/chatrooms/create/${roomId}/`, {\r\n name,\r\n metadata,\r\n createdBy,\r\n username,\r\n chatUsers\r\n });\r\n }\r\n\r\n getRoomUsers(roomId: string): Observable<any[]> {\r\n return this.http.get<any[]>(`${this.baseUrl}/api/chat/chatrooms/get_user/${roomId}/users/`).pipe(\r\n map(list =>\r\n list.map(u => ({\r\n id: u.UserId,\r\n username: u.UserName\r\n }))\r\n )\r\n );\r\n }\r\n\r\n addUserToRoom(roomId: string, userId: string, userName: string, createdBy: string) {\r\n return this.http.post(`${this.baseUrl}/api/chat/chatrooms/add_user/${roomId}/users/add/`, {\r\n userId,\r\n userName,\r\n createdBy\r\n });\r\n }\r\n\r\n /* ---------------- MESSAGES ---------------- */\r\n getMessages(roomId: string, since?: string): Observable<ChatMessage[]> {\r\n const params: any = {};\r\n if (since) params.since = since;\r\n\r\n return this.http.get<any[]>(`${this.baseUrl}/api/chat/messages/rooms/all_messages/${roomId}/`, {params}).pipe(\r\n map(list =>\r\n list.map(m => ({\r\n id: m.id,\r\n chatRoomId: m.chatRoomId,\r\n senderId: m.senderId,\r\n senderName: m.senderName,\r\n content: m.content,\r\n replyToMessageId: m.replyToMessageId,\r\n createdAt: m.createdAt,\r\n hasAttachment: m.hasAttachment ?? false,\r\n }))\r\n )\r\n );\r\n }\r\n\r\n sendMessage(\r\n roomId: string,\r\n payload: {\r\n senderId: string;\r\n senderName: string,\r\n content: string;\r\n replyToMessageId?: string | null,\r\n createdBy: string\r\n }\r\n ): Observable<ChatMessage> {\r\n return this.http.post<any>(`${this.baseUrl}/api/chat/messages/rooms/send/${roomId}/`, payload).pipe(\r\n map(m => ({\r\n id: m.id,\r\n chatRoomId: m.chatRoomId,\r\n senderId: m.senderId,\r\n senderName: m.senderName,\r\n content: m.content,\r\n replyToMessageId: m.replyToMessageId,\r\n createdAt: m.createdAt,\r\n hasAttachment: m.hasAttachment ?? false,\r\n }))\r\n );\r\n }\r\n\r\n getRooms(loggedInUserId: string, chatRoomId?: string) {\r\n let url = `${this.baseUrl}/api/chat/chatrooms/${loggedInUserId}`;\r\n if (chatRoomId) {\r\n url += `/${chatRoomId}`;\r\n }\r\n return this.http.get<any[]>(`${url}/`);\r\n }\r\n\r\n\r\n archiveRoom(roomId: string) {\r\n return this.http.delete<any[]>(`${this.baseUrl}/api/chat/chatrooms/archive/${roomId}/`);\r\n }\r\n\r\n private listenForNotifications() {\r\n console.log('Listening');\r\n // 🔔 ADDED TO ROOM — only added user\r\n this.socket.on('addedToRoom').subscribe((msg: any) => {\r\n console.log('addedToRoom', msg);\r\n if (msg.addedUserId !== this.currentUser().userId) return;\r\n });\r\n\r\n // 🔔 NEW MESSAGE — everyone EXCEPT sender\r\n this.socket.on('newMessage').subscribe((msg: any) => {\r\n console.log('newMessage', msg);\r\n if (msg.senderId === this.currentUser().userId) return;\r\n });\r\n }\r\n\r\n markAsRead(notificationId: string, user_id: string): Observable<any> {\r\n return this.http.post(`${this.baseUrl}/api/chat/notifications/mark_read/${notificationId}/`, {\r\n user_id\r\n });\r\n }\r\n\r\n getAllUserNotifications(userId: string): Observable<any[]> {\r\n return this.http.get<any[]>(`${this.baseUrl}/api/chat/notifications/get_all/${userId}/`);\r\n }\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n inject,\r\n Input,\r\n input,\r\n OnInit,\r\n Output,\r\n signal,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FormsModule} from '@angular/forms';\r\nimport {ChatService} from '../core/services/chat.service';\r\nimport {SocketService} from '../core/services/socket.service';\r\nimport {ToastModule} from 'primeng/toast';\r\nimport {MessageService} from 'primeng/api';\r\nimport {ButtonModule} from 'primeng/button';\r\nimport {AvatarModule} from 'primeng/avatar';\r\nimport {TooltipModule} from 'primeng/tooltip';\r\nimport {InputTextareaModule} from 'primeng/inputtextarea';\r\nimport {DropdownModule} from 'primeng/dropdown';\r\nimport {ChipModule} from 'primeng/chip';\r\nimport {ChatMessage} from '../core/models/chat.models';\r\nimport {OverlayPanel, OverlayPanelModule} from 'primeng/overlaypanel';\r\nimport {ChatNotification} from \"../core/models/notification.model\";\r\n\r\n@Component({\r\n selector: 'app-chat-window',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ToastModule,\r\n ButtonModule,\r\n AvatarModule,\r\n TooltipModule,\r\n InputTextareaModule,\r\n ChipModule,\r\n DropdownModule,\r\n OverlayPanelModule\r\n ],\r\n templateUrl: './chat-window.component.html',\r\n styleUrls: ['./chat-window.component.scss'],\r\n providers: [MessageService]\r\n})\r\nexport class ChatWindowComponent implements OnInit {\r\n @Input() chatRoomId!: string;\r\n @Input() header = 'Chat';\r\n @Input() metadata = '';\r\n @Input() chatUsers = [];\r\n @Input() showActions = true;\r\n @Input() mode: 'floating' | 'fullscreen' = 'floating';\r\n @Input() theme: 'light' | 'dark' = 'light';\r\n @Output() onArchive = new EventEmitter();\r\n\r\n refreshRoom = input<boolean>(false);\r\n // @Input() currentUser: any;\r\n\r\n chatService = inject(ChatService);\r\n socket = inject(SocketService);\r\n\r\n users = signal<any[]>([]);\r\n messages = signal<ChatMessage[]>([]);\r\n newMessage = '';\r\n minimized = false;\r\n loading = false;\r\n replyTo: ChatMessage | null = null;\r\n selectedUser: any;\r\n\r\n @ViewChild('messagesContainer') messagesContainer!: ElementRef<HTMLDivElement>;\r\n @ViewChild('reactionOverlay') reactionOverlay!: OverlayPanel;\r\n\r\n private observer!: MutationObserver;\r\n\r\n showUsers = false;\r\n suggestion = '';\r\n hoveredReactionUsers: string[] = [];\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnInit() {\r\n this.socket.joinRoom(this.chatRoomId);\r\n this.socket.joinUserChannel(this.chatService.currentUser().userId);\r\n this.loadUsers();\r\n this.loadMessages();\r\n this.listenSocket();\r\n }\r\n\r\n loadUsers() {\r\n this.chatService.getRoomUsers(this.chatRoomId).subscribe(users => {\r\n this.users.set(users);\r\n });\r\n }\r\n\r\n loadMessages() {\r\n this.loading = true;\r\n this.chatService.getMessages(this.chatRoomId).subscribe({\r\n next: msgs => {\r\n this.messages.set(msgs);\r\n this.loading = false;\r\n },\r\n error: () => (this.loading = false)\r\n });\r\n }\r\n\r\n listenSocket() {\r\n this.socket.on<ChatMessage>('newMessage').subscribe(msg => {\r\n if (msg.chatRoomId === this.chatRoomId) {\r\n this.messages.update(list => [...list, msg]);\r\n }\r\n\r\n // if (msg.senderId !== this.chatService.currentUser().userId) {\r\n // this.messageService.add({\r\n // severity: 'info',\r\n // summary: this.header,\r\n // detail: msg.content ?? 'New message',\r\n // life: 2500\r\n // });\r\n // }\r\n });\r\n\r\n this.socket.on('roomUserAdded').subscribe((msg: any) => {\r\n if (msg.chatRoomId === this.chatRoomId) {\r\n this.loadUsers();\r\n // this.messageService.add({\r\n // severity: 'info',\r\n // summary: 'User Added',\r\n // detail: msg.user?.userName,\r\n // life: 2500\r\n // });\r\n }\r\n });\r\n\r\n this.socket.on('addedToRoom').subscribe((msg: any) => {\r\n if (msg.chatRoomId === this.chatRoomId) {\r\n this.loadUsers();\r\n console.log('addedToRoom', msg);\r\n }\r\n });\r\n\r\n this.socket.on('userAlreadyInRoom').subscribe((msg: any) => {\r\n // if (msg.chatRoomId === this.chatRoomId) {\r\n // this.messageService.add({\r\n // severity: 'info',\r\n // summary: 'User Already Added',\r\n // detail: msg.user?.userName,\r\n // life: 2500\r\n // });\r\n // }\r\n });\r\n }\r\n\r\n send() {\r\n const content = this.newMessage.trim();\r\n if (!content) return;\r\n\r\n this.chatService.sendMessage(this.chatRoomId, {\r\n senderId: this.chatService.currentUser().userId,\r\n senderName: this.chatService.currentUser().name,\r\n content,\r\n replyToMessageId: this.replyTo?.replyToMessageId ?? null,\r\n createdBy: this.chatService.currentUser().userId\r\n }).subscribe(() => {\r\n this.newMessage = '';\r\n this.replyTo = null;\r\n });\r\n }\r\n\r\n addUserToRoom() {\r\n this.chatService.addUserToRoom(\r\n this.chatRoomId,\r\n this.selectedUser?.user_id,\r\n this.selectedUser?.full_name,\r\n this.chatService.currentUser().userId).subscribe((res) => {\r\n });\r\n }\r\n\r\n toggleMinimize() {\r\n this.minimized = !this.minimized;\r\n }\r\n\r\n archiveChat() {\r\n this.chatService.archiveRoom(this.chatRoomId).subscribe({\r\n next: () => {\r\n this.onArchive.emit(this.chatRoomId);\r\n },\r\n error: err => console.error(err)\r\n });\r\n }\r\n\r\n setReply(msg: ChatMessage) {\r\n this.replyTo = msg;\r\n }\r\n\r\n clearReply() {\r\n this.replyTo = null;\r\n }\r\n\r\n trackById(index: number, msg: ChatMessage) {\r\n return msg.id;\r\n }\r\n\r\n ngOnDestroy() {\r\n this.socket.offNewMessage();\r\n this.socket.offMessageSeen();\r\n this.observer?.disconnect();\r\n }\r\n\r\n ngAfterViewInit() {\r\n const el = this.messagesContainer.nativeElement;\r\n\r\n this.observer = new MutationObserver(() => {\r\n // 🔥 Scroll AFTER DOM actually changes\r\n el.scrollTop = el.scrollHeight;\r\n });\r\n\r\n this.observer.observe(el, {\r\n childList: true,\r\n subtree: true,\r\n characterData: true\r\n });\r\n }\r\n\r\n toggleUsers() {\r\n this.showUsers = !this.showUsers;\r\n }\r\n}\r\n","<p-toast></p-toast>\r\n\r\n<div [class.dark]=\"theme === 'dark'\" [class.floating]=\"mode === 'floating'\" [class.fullscreen]=\"mode === 'fullscreen'\"\r\n [class.minimized]=\"minimized\" class=\"chat-window\">\r\n <div class=\"chat-header\">\r\n <div style=\"display: flex; flex-direction: column;\">\r\n <div class=\"title\">\r\n <span>{{ header }}</span>\r\n <span *ngIf=\"users().length\">({{ users().length }} {{\r\n users().length == 1 ? 'participant' :\r\n 'participants'\r\n }})</span>\r\n </div>\r\n <div>\r\n <span>{{ metadata }}</span>\r\n </div>\r\n </div>\r\n <div class=\"header-actions\">\r\n <button (click)=\"toggleUsers()\" icon=\"pi pi-users\" pButton pTooltip=\"Toogle Users\"\r\n style=\"font-size: 0.5rem\"></button>\r\n @if (showActions) {\r\n <button (click)=\"toggleMinimize()\" [icon]=\"minimized ? 'pi pi-plus' : 'pi pi-minus'\" pButton\r\n pTooltip=\"Hide/Show\" style=\"font-size: 0.5rem\"></button>\r\n <button (click)=\"archiveChat()\" icon=\"pi pi-trash\" pButton pTooltip=\"Archive\"\r\n style=\"font-size: 0.5rem\"></button>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!minimized\" class=\"chat-body\">\r\n <div [class.users-hidden]=\"!showUsers\" class=\"chat-layout\">\r\n <div [class.floating]=\"mode === 'floating'\" [class.fullscreen]=\"mode === 'fullscreen'\" class=\"chat-main\">\r\n <div #messagesContainer [class.loading]=\"loading\" class=\"messages\">\r\n <div *ngFor=\"let msg of messages(); trackBy: trackById\" [ngClass]=\"{ outgoing: msg.senderId === chatService.currentUser().userId, incoming: msg.senderId !== chatService.currentUser().userId }\"\r\n class=\"message-row\">\r\n <div class=\"message-bubble\">\r\n <div class=\"message-meta\">\r\n <span class=\"sender\">\r\n <!-- *ngIf=\"msg.senderId !== chatService.currentUser().userId\" -->\r\n {{ msg.senderName }}\r\n </span>\r\n <!-- <span class=\"time\">\r\n {{ msg.createdAt | date: 'shortTime' }}\r\n </span> -->\r\n </div>\r\n\r\n <!-- MESSAGE TEXT -->\r\n <div class=\"message-content\">\r\n {{ msg.content }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"input-area\">\r\n <div *ngIf=\"replyTo\" class=\"reply-banner\">\r\n <span>Replying to: {{ replyTo.content | slice: 0:50 }}</span>\r\n <button (click)=\"clearReply()\" class=\"p-button-text p-button-sm\" icon=\"pi pi-times\"\r\n pButton></button>\r\n </div>\r\n\r\n <textarea (keyup.enter)=\"send()\" [(ngModel)]=\"newMessage\" autoResize=\"true\" pInputTextarea\r\n placeholder=\"Type a message\"\r\n rows=\"2\">\r\n </textarea>\r\n\r\n <div class=\"input-actions\">\r\n <button (click)=\"send()\" icon=\"pi pi-send\" label=\"Send\" pButton></button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"chat-sidebar\">\r\n <div class=\"section-title\">Users</div>\r\n <div class=\"user-list\">\r\n <div *ngFor=\"let u of users()\" class=\"user-row\">\r\n <p-avatar [label]=\"u.username[0]\"></p-avatar>\r\n <span>{{ u.username }}</span>\r\n </div>\r\n </div>\r\n @if (showActions) {\r\n <div class=\"user-list-add\">\r\n <p-dropdown [(ngModel)]=\"selectedUser\" [options]=\"chatService.userList()\"\r\n optionLabel=\"full_name\"\r\n placeholder=\"Select User\"/>\r\n <div style=\"margin-top: 2em;\">\r\n <button (click)=\"addUserToRoom()\" icon=\"pi pi-plus\" label=\"Add\" pButton></button>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import {Component, effect, inject, input, signal, ViewEncapsulation} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {ChatWindowComponent} from '../chat-window/chat-window.component';\r\nimport {ChatService} from '../core/services/chat.service';\r\nimport {DropdownModule} from 'primeng/dropdown';\r\nimport {ButtonModule} from 'primeng/button';\r\nimport {ToastModule} from 'primeng/toast';\r\nimport {MessageService} from 'primeng/api';\r\nimport {FormsModule} from '@angular/forms';\r\nimport {TabViewModule} from 'primeng/tabview';\r\nimport {SocketService} from '../core/services/socket.service';\r\nimport {TooltipModule} from \"primeng/tooltip\";\r\n\r\ninterface OpenChatWindow {\r\n roomId: string;\r\n header: string;\r\n metadata: string;\r\n}\r\n\r\n@Component({\r\n selector: 'app-chat-launcher',\r\n standalone: true,\r\n imports: [CommonModule, ChatWindowComponent, DropdownModule, ButtonModule, ToastModule, FormsModule, TabViewModule, TooltipModule],\r\n templateUrl: './chat-launcher.component.html',\r\n styleUrls: ['./chat-launcher.component.scss'],\r\n providers: [MessageService],\r\n encapsulation: ViewEncapsulation.Emulated,\r\n})\r\nexport class ChatLauncherComponent {\r\n\r\n roomId = input<string>('');\r\n roomHeader = input<string>('');\r\n metadata = input<string>('');\r\n user = input<any>(null);\r\n userList = input<any[]>([]);\r\n chatUsers = input<any[]>([]);\r\n\r\n chatService = inject(ChatService);\r\n socketService = inject(SocketService);\r\n messageService = inject(MessageService);\r\n openWindows = signal<OpenChatWindow[]>([]);\r\n lastOpenedRoom = signal<string | null>(null);\r\n activeIndex = signal(0);\r\n isVisible = signal(true);\r\n\r\n constructor() {\r\n effect(\r\n () => {\r\n const roomId = this.roomId();\r\n const header = this.roomHeader();\r\n const metadata = this.metadata();\r\n const user = this.user();\r\n\r\n this.chatService.currentUser.set({\r\n roomId: this.roomId(),\r\n userId: user?.userId,\r\n name: user?.name\r\n });\r\n\r\n this.chatService.userList.set(this.userList());\r\n\r\n if (!roomId || !user?.userId) return;\r\n if (this.lastOpenedRoom() === roomId) return;\r\n\r\n this.lastOpenedRoom.set(roomId);\r\n this.openNewRoom(roomId, header, metadata, user.userId, user.name, this.chatUsers());\r\n },\r\n {allowSignalWrites: true}\r\n );\r\n }\r\n\r\n ngOnInit() {\r\n console.log('ChatLauncher initialized');\r\n }\r\n\r\n openNewRoom(roomId: string, roomHeader: string, metadata: string, userId: string, username: string, chatUsers: any) {\r\n this.isVisible.set(true);\r\n this.chatService.createRoom(roomId, roomHeader, metadata, userId, username, chatUsers).subscribe(room => {\r\n this.addWindow(room.roomKey, room.name, room.metadata);\r\n });\r\n }\r\n\r\n addWindow(roomId: string, header: string, metadata: string) {\r\n const windows = this.openWindows();\r\n const existingIndex = windows.findIndex(w => w.roomId === roomId);\r\n\r\n // already open → focus\r\n if (existingIndex !== -1) {\r\n this.activeIndex.set(existingIndex);\r\n return;\r\n }\r\n\r\n const newIndex = windows.length;\r\n\r\n this.openWindows.update(ws => [...ws, {roomId, header, metadata}]);\r\n\r\n // ✅ force real change: -1 → 0\r\n setTimeout(() => {\r\n this.activeIndex.set(newIndex);\r\n }, 500);\r\n }\r\n\r\n\r\n closeWindow(roomId: any) {\r\n this.openWindows.update(ws => ws.filter(w => w.roomId !== roomId));\r\n }\r\n\r\n setActive(i: number) {\r\n this.activeIndex.set(i);\r\n }\r\n\r\n closeAll() {\r\n this.openWindows.set([]);\r\n // this.lastOpenedRoom.set(null);\r\n // this.activeIndex.set(0);\r\n this.isVisible.set(false);\r\n }\r\n\r\n}\r\n","@if (isVisible()) {\r\n <div class=\"chat-float-wrapper\">\r\n <button (click)=\"closeAll()\" icon=\"pi pi-times\" pButton pTooltip=\"Close\"\r\n style=\"font-size: 0.5rem\" class=\"closeButton\"></button>\r\n <p-tabView (activeIndexChange)=\"setActive($event)\" [activeIndex]=\"activeIndex()\" [scrollable]=\"true\"\r\n class=\"chat-tabview\">\r\n <p-tabPanel *ngFor=\"let w of openWindows(); let i = index\" [header]=\"w.header\">\r\n <ng-template pTemplate=\"content\">\r\n <app-chat-window (onArchive)=\"closeWindow($event)\"\r\n [chatRoomId]=\"w.roomId\" [header]=\"w.header\"\r\n [metadata]=\"w.metadata\" mode=\"floating\" theme=\"light\">\r\n </app-chat-window>\r\n </ng-template>\r\n </p-tabPanel>\r\n </p-tabView>\r\n </div>\r\n}\r\n","import { Component, effect, EventEmitter, inject, input, Input, Output, signal } from '@angular/core';\r\nimport { ChatService } from '../core/services/chat.service';\r\nimport { ChatWindowComponent } from \"../chat-window/chat-window.component\";\r\nimport { ChatLauncherComponent } from '../chat-launcher/chat-launcher.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { AvatarModule } from 'primeng/avatar';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { ChipModule } from 'primeng/chip';\r\nimport { DropdownModule } from 'primeng/dropdown';\r\nimport { InputTextareaModule } from 'primeng/inputtextarea';\r\nimport { OverlayPanelModule } from 'primeng/overlaypanel';\r\nimport { ToastModule } from 'primeng/toast';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\nimport { trigger, transition, style, animate } from '@angular/animations';\r\nimport { SocketService } from '../core/services/socket.service';\r\n\r\n@Component({\r\n selector: 'app-all-chats',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ToastModule,\r\n ButtonModule,\r\n AvatarModule,\r\n TooltipModule,\r\n InputTextareaModule,\r\n ChipModule,\r\n DropdownModule,\r\n OverlayPanelModule,\r\n ChatWindowComponent\r\n ],\r\n templateUrl: './all-chats.component.html',\r\n styleUrl: './all-chats.component.scss',\r\n animations: [\r\n trigger('roomSwitch', [\r\n transition(':enter', [\r\n style({ opacity: 0, transform: 'translateX(24px)' }),\r\n animate(\r\n '300ms cubic-bezier(.4,0,.2,1)',\r\n style({ opacity: 1, transform: 'translateX(0)' })\r\n )\r\n ]),\r\n transition(':leave', [\r\n animate(\r\n '200ms ease-in',\r\n style({ opacity: 0, transform: 'translateX(-24px)' })\r\n )\r\n ])\r\n ])\r\n ]\r\n})\r\nexport class AllChatsComponent {\r\n\r\n user = input<any>(null);\r\n roomId = input<any>(null);\r\n chatUsers = signal<any[]>([]);\r\n\r\n @Output() newRoomLoaded = new EventEmitter();\r\n\r\n rooms: any[] = [];\r\n activeRoomId = signal<string>('');\r\n activeRoomHeader = signal<string>('');\r\n activeRoomMetadata = signal<string>('');\r\n\r\n chatService = inject(ChatService);\r\n socketService = inject(SocketService);\r\n showMessages: boolean = false\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnInit() {\r\n if (!this.user) {\r\n console.error('user is required');\r\n return;\r\n }\r\n\r\n this.chatService.currentUser.set({\r\n roomId: this.activeRoomId,\r\n userId: this.user()?.id,\r\n name: this.user()?.name\r\n });\r\n\r\n this.chatService.getRooms(this.user()?.id, this.roomId())\r\n .subscribe(res => {\r\n this.rooms = res;\r\n if (this.rooms.length != 0) {\r\n this.selectRoom(this.rooms[0]);\r\n this.activeRoomId.set(this.rooms[0].ChatRoomId);\r\n this.activeRoomHeader.set(this.rooms[0].ChatRoomName);\r\n this.activeRoomMetadata.set(this.rooms[0].Metadata);\r\n } else {\r\n this.chatService\r\n .addUserToRoom(\r\n this.roomId(),\r\n this.user()?.id,\r\n this.user()?.name,\r\n this.chatService.currentUser().userId)\r\n .subscribe((res) => {\r\n this.rooms = [];\r\n this.getRooms();\r\n });\r\n }\r\n });\r\n }\r\n\r\n getRooms() {\r\n this.chatService.getRooms(this.user()?.id, this.roomId())\r\n .subscribe(res => {\r\n this.rooms = res;\r\n if (this.rooms.length != 0) {\r\n this.selectRoom(this.rooms[0]);\r\n this.activeRoomId.set(this.rooms[0].ChatRoomId);\r\n this.activeRoomHeader.set(this.rooms[0].ChatRoomName);\r\n this.activeRoomMetadata.set(this.rooms[0].Metadata);\r\n }\r\n });\r\n }\r\n\r\n selectRoom(room: any) {\r\n this.showMessages = false;\r\n this.activeRoomId.set(room.ChatRoomId);\r\n this.activeRoomHeader.set(room.ChatRoomName);\r\n this.activeRoomMetadata.set(room.Metadata);\r\n setTimeout(() => {\r\n this.showMessages = true;\r\n }, 800);\r\n }\r\n}\r\n","<div class=\"chat-page\">\r\n <!-- LEFT SIDEBAR : CHAT ROOMS -->\r\n <aside class=\"chat-sidebar glass\">\r\n <div class=\"sidebar-header\">\r\n <h3>Chat Rooms</h3>\r\n </div>\r\n <ul class=\"room-list\">\r\n <li (click)=\"selectRoom(room)\" *ngFor=\"let room of rooms;\" [class.active]=\"activeRoomId() === room.ChatRoomId\"\r\n class=\"room-item\">\r\n <div class=\"room-avatar\">\r\n <p-avatar [label]=\"room.ChatRoomName[0]\"></p-avatar>\r\n </div>\r\n <div class=\"room-info\">\r\n <span class=\"room-name\">{{ room.ChatRoomName }}</span>\r\n <span class=\"room-name\">{{ room.Metadata }}</span>\r\n </div>\r\n </li>\r\n </ul>\r\n </aside>\r\n <!-- RIGHT PANEL : CHAT WINDOW -->\r\n @if (showMessages) {\r\n <section *ngIf=\"showMessages\" @roomSwitch class=\"chat-main glass\">\r\n <app-chat-window [chatRoomId]=\"activeRoomId()\" [header]=\"activeRoomHeader()\" [metadata]=\"activeRoomMetadata()\" [showActions]=\"false\"\r\n mode=\"fullscreen\" theme=\"light\">\r\n </app-chat-window>\r\n </section>\r\n } @else {\r\n <section class=\"chat-main glass loading-container\">\r\n <div class=\"spinner\"></div>\r\n <p>Loading messages…</p>\r\n </section>\r\n }\r\n\r\n</div>","import {Component, computed, inject, input} from '@angular/core';\r\nimport {ChatService} from \"../core/services/chat.service\";\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {FormsModule} from \"@angular/forms\";\r\nimport {ChatNotification} from \"../core/models/notification.model\";\r\nimport {SocketService} from \"../core/services/socket.service\";\r\n\r\n@Component({\r\n selector: 'chat-widget-notification',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule\r\n ],\r\n templateUrl: './chat-widget-notification.component.html',\r\n styleUrl: './chat-widget-notification.component.css'\r\n})\r\nexport class ChatWidgetNotificationComponent {\r\n open = false;\r\n\r\n chatService = inject(ChatService);\r\n socketService = inject(SocketService);\r\n userId = input<any>(null);\r\n\r\n totalCount = computed(() =>\r\n this.socketService.notifications().reduce((a: any, b: { unreadCount: any; }) => a + b.unreadCount, 0)\r\n );\r\n\r\n constructor() {}\r\n\r\n ngOnInit() {\r\n this.socketService.connect(this.userId());\r\n this.chatService.getAllUserNotifications(this.userId()).subscribe(notifications => {\r\n const data = notifications.map(n => {\r\n return {\r\n actorUserId: n.added_by,\r\n entityId: n.room_id,\r\n eventType: n.type,\r\n payload: {chatRoomId: n.room_id, chatRoomName: n.chat_room_name},\r\n title: n.description\r\n }\r\n });\r\n this.socketService.notifications.set(data);\r\n });\r\n }\r\n\r\n toggle() {\r\n this.open = !this.open;\r\n }\r\n\r\n openRoom(n: ChatNotification) {\r\n this.socketService.clearRoom(n);\r\n this.chatService.markAsRead(n.id, this.userId()).subscribe(notification => {\r\n console.log('markAsRead', notification);\r\n });\r\n this.open = false;\r\n }\r\n}\r\n","<div (click)=\"toggle()\" class=\"notif-icon\">\r\n <i class=\"pi pi-bell\" [class.pulse]=\"socketService.hasNewNotification()\"></i>\r\n\r\n @if (totalCount() > 0) {\r\n <span class=\"dot\"></span>\r\n <span class=\"badge\">{{ totalCount() }}</span>\r\n }\r\n</div>\r\n\r\n@if (open) {\r\n <div class=\"notif-panel\">\r\n <div class=\"notif-list\">\r\n @for (n of socketService.notifications(); track n.entityId + '_' + n.eventType) {\r\n <div class=\"notif-item\" (click)=\"openRoom(n)\">\r\n <div class=\"notif-left\">\r\n <i class=\"pi pi-comments\"></i>\r\n </div>\r\n\r\n <div class=\"notif-body\">\r\n <div class=\"notif-title\">{{ n?.payload?.chatRoomName }}</div>\r\n <div class=\"notif-text\">\r\n @if (n.eventType === 'NEW_MESSAGE') {\r\n New Message Received\r\n }\r\n\r\n @if (n.eventType === 'USER_ADDED') {\r\n You have been added to the chat\r\n }\r\n </div>\r\n </div>\r\n\r\n<!-- <span class=\"count\">{{ n.count }}</span>-->\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n}\r\n","import {ModuleWithProviders, NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {ChatLauncherComponent} from './chat-launcher/chat-launcher.component';\r\nimport {ChatWindowComponent} from './chat-window/chat-window.component';\r\nimport {AllChatsComponent} from './all-chats/all-chats.component';\r\nimport {CHAT_CONFIG} from './core/config/chat.tokens';\r\nimport type {ChatConfig} from './core/config/chat-config';\r\nimport {ChatWidgetNotificationComponent} from \"./chat-widget-notification/chat-widget-notification.component\";\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [\r\n CommonModule,\r\n ChatLauncherComponent,\r\n ChatWindowComponent,\r\n AllChatsComponent,\r\n ChatWidgetNotificationComponent\r\n ],\r\n exports: [ChatLauncherComponent]\r\n})\r\nexport class ChatWidgetModule {\r\n static forRoot(config: ChatConfig): ModuleWithProviders<ChatWidgetModule> {\r\n return {\r\n ngModule: ChatWidgetModule,\r\n providers: [\r\n {\r\n provide: CHAT_CONFIG,\r\n useValue: config\r\n }\r\n ]\r\n };\r\n }\r\n}\r\n","import {inject, Injectable} from \"@angular/core\";\r\nimport {ChatService} from \"./core/services/chat.service\";\r\nimport {SocketService} from \"./core/services/socket.service\";\r\nimport {ChatMessage} from \"./core/models/chat.models\";\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ChatWidgetService {\r\n\r\n constructor() {}\r\n}\r\n","/*\r\n * Public API Surface of chat-widget\r\n */\r\n\r\nexport * from './lib/chat-widget.module';\r\nexport * from './lib/chat-launcher/chat-launcher.component';\r\nexport * from './lib/all-chats/all-chats.component';\r\nexport * from './lib/core/models/chat.models';\r\nexport * from './lib/chat-widget-notification/chat-widget-notification.component'\r\nexport * from './lib/chat-widget.service'\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.SocketService","i1","i2","i3","i4","i5"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"arthakosh-chat-widget.mjs","sources":["../../../projects/chat-widget/src/lib/core/config/chat.tokens.ts","../../../projects/chat-widget/src/lib/core/services/socket.service.ts","../../../projects/chat-widget/src/lib/core/services/chat.service.ts","../../../projects/chat-widget/src/lib/chat-window/chat-window.component.ts","../../../projects/chat-widget/src/lib/chat-window/chat-window.component.html","../../../projects/chat-widget/src/lib/chat-launcher/chat-launcher.component.ts","../../../projects/chat-widget/src/lib/chat-launcher/chat-launcher.component.html","../../../projects/chat-widget/src/lib/all-chats/all-chats.component.ts","../../../projects/chat-widget/src/lib/all-chats/all-chats.component.html","../../../projects/chat-widget/src/lib/chat-widget-notification/chat-widget-notification.component.ts","../../../projects/chat-widget/src/lib/chat-widget-notification/chat-widget-notification.component.html","../../../projects/chat-widget/src/lib/chat-widget.module.ts","../../../projects/chat-widget/src/lib/chat-widget.service.ts","../../../projects/chat-widget/src/public-api.ts","../../../projects/chat-widget/src/arthakosh-chat-widget.ts"],"sourcesContent":["// chat.tokens.ts\r\nimport { InjectionToken } from '@angular/core';\r\nimport { ChatConfig } from './chat-config';\r\n\r\nexport const CHAT_CONFIG = new InjectionToken<ChatConfig>('CHAT_CONFIG');\r\n","import {Inject, Injectable, signal} from '@angular/core';\r\nimport {Observable} from 'rxjs';\r\nimport {CHAT_CONFIG} from \"../config/chat.tokens\";\r\nimport {ChatConfig} from \"../config/chat-config\";\r\nimport {ChatNotification} from \"../models/notification.model\";\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class SocketService {\r\n\r\n private socket!: WebSocket;\r\n private listeners = new Map<string, ((data: any) => void)[]>();\r\n notifications = signal<any[]>([]);\r\n hasNewNotification = signal(false);\r\n private reconnectAttempts = 0;\r\n private readonly MAX_RECONNECT_ATTEMPTS = 5;\r\n\r\n constructor(@Inject(CHAT_CONFIG) private config: ChatConfig) {\r\n // this.connect();\r\n }\r\n\r\n connect(userId: string) {\r\n // this.socket = new WebSocket('wss://coreuatarthkosh.sarjak.com/ws/');\r\n if (this.reconnectAttempts >= this.MAX_RECONNECT_ATTEMPTS) {\r\n console.error('[WS] Max reconnect attempts reached. Giving up.');\r\n return;\r\n }\r\n\r\n this.socket = new WebSocket(`${this.config.wsBaseUrl}/ws/`);\r\n\r\n this.socket.onopen = () => {\r\n console.log('[WS] Connected');\r\n this.reconnectAttempts = 0;\r\n this.joinUserChannel(userId);\r\n this.on('notificationCreated').subscribe((notification: any) => {\r\n console.log('Listening for notifications', notification);\r\n this.notifications.update(list => {\r\n const roomId = notification.entityId;\r\n const eventType = notification.eventType;\r\n\r\n // 🔑 Dedup key = room + eventType\r\n const exists = list.some(\r\n n => n.entityId === roomId && n.eventType === eventType\r\n );\r\n\r\n // ❌ Already exists → do nothing\r\n if (exists) {\r\n return list;\r\n }\r\n\r\n // ✅ New (room + eventType) combination\r\n return [\r\n {\r\n ...notification,\r\n unreadCount: 1\r\n },\r\n ...list\r\n ];\r\n });\r\n this.notifyArrival();\r\n });\r\n };\r\n\r\n this.socket.onmessage = (event) => {\r\n const msg: any = JSON.parse(event.data);\r\n const handlers = this.listeners.get(msg.event) || [];\r\n handlers.forEach(h => h(msg.data));\r\n };\r\n\r\n this.socket.onerror = (err) => {\r\n console.error('[WS] Error', err);\r\n this.socket.close();\r\n };\r\n\r\n this.socket.onclose = () => {\r\n this.reconnectAttempts++;\r\n console.warn('[WS] Disconnected – reconnecting...');\r\n if (this.reconnectAttempts < this.MAX_RECONNECT_ATTEMPTS) {\r\n setTimeout(() => this.connect(userId), 2000);\r\n } else {\r\n console.error('[WS] Stopped reconnecting.');\r\n }\r\n };\r\n }\r\n\r\n emit(event: string, data?: any) {\r\n const payload: any = {event, data};\r\n this.socket.send(JSON.stringify(payload));\r\n }\r\n\r\n joinRoom(roomId: string) {\r\n this.emit('joinRoom', roomId);\r\n }\r\n\r\n joinUserChannel(userId: string) {\r\n this.emit('joinUserChannel', userId);\r\n }\r\n\r\n sendMessage(data: any) {\r\n this.emit('sendMessage', data);\r\n }\r\n\r\n messageSeen(data: { chatRoomId: string; userId: string }) {\r\n this.emit('messageSeen', data);\r\n }\r\n\r\n on<T>(event: string): Observable<T> {\r\n return new Observable(sub => {\r\n const handler = (data: T) => sub.next(data);\r\n\r\n if (!this.listeners.has(event)) {\r\n this.listeners.set(event, []);\r\n }\r\n this.listeners.get(event)!.push(handler);\r\n\r\n return () => {\r\n const arr = this.listeners.get(event) || [];\r\n this.listeners.set(event, arr.filter(h => h !== handler));\r\n };\r\n });\r\n }\r\n\r\n onNewMessage(cb: (msg: any) => void) {\r\n this.addListener('newMessage', cb);\r\n }\r\n\r\n offNewMessage(cb?: (msg: any) => void) {\r\n this.removeListener('newMessage', cb);\r\n }\r\n\r\n onMessageSeen(cb: (data: { chatRoomId: string; userId: string }) => void) {\r\n this.addListener('messageSeen', cb);\r\n }\r\n\r\n offMessageSeen(cb?: (data: any) => void) {\r\n this.removeListener('messageSeen', cb);\r\n }\r\n\r\n private addListener(event: string, cb: (data: any) => void) {\r\n if (!this.listeners.has(event)) {\r\n this.listeners.set(event, []);\r\n }\r\n this.listeners.get(event)!.push(cb);\r\n }\r\n\r\n private removeListener(event: string, cb?: (data: any) => void) {\r\n if (!cb) {\r\n this.listeners.delete(event);\r\n return;\r\n }\r\n const arr = this.listeners.get(event) || [];\r\n this.listeners.set(event, arr.filter(h => h !== cb));\r\n }\r\n\r\n clearAll() {\r\n this.notifications.set([]);\r\n }\r\n\r\n notifyArrival() {\r\n this.hasNewNotification.set(true);\r\n setTimeout(() => {\r\n this.hasNewNotification.set(false);\r\n }, 2000);\r\n }\r\n\r\n clearRoom(chat: ChatNotification) {\r\n this.notifications.update(list =>\r\n list.filter(\r\n n =>\r\n !(\r\n n.entityId === chat.entityId &&\r\n n.eventType === chat.eventType\r\n )\r\n )\r\n );\r\n this.hasNewNotification.set(this.notifications().length > 1);\r\n }\r\n}\r\n","import {Inject, Injectable, signal} from '@angular/core';\r\nimport {HttpClient} from '@angular/common/http';\r\nimport {map} from 'rxjs/operators';\r\nimport {Observable} from 'rxjs';\r\nimport {ChatMessage} from '../models/chat.models';\r\nimport {CHAT_CONFIG} from \"../config/chat.tokens\";\r\nimport {ChatConfig} from \"../config/chat-config\";\r\nimport {SocketService} from \"./socket.service\";\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class ChatService {\r\n // private baseUrl = `https://coreuatarthkosh.sarjak.com`;\r\n\r\n currentUser = signal<any | null>(null);\r\n userList = signal<any[]>([]);\r\n\r\n constructor(private http: HttpClient,\r\n @Inject(CHAT_CONFIG) private config: ChatConfig,\r\n private socket: SocketService) {\r\n this.listenForNotifications();\r\n }\r\n\r\n get baseUrl() {\r\n return this.config.apiBaseUrl;\r\n }\r\n\r\n /* ---------------- CHAT ROOMS ---------------- */\r\n createRoom(roomId: string, name: string, metadata: string, createdBy: string, username: string, chatUsers: any): Observable<any> {\r\n return this.http.post(`${this.baseUrl}/api/chat/chatrooms/create/${roomId}/`, {\r\n name,\r\n metadata,\r\n createdBy,\r\n username,\r\n chatUsers\r\n });\r\n }\r\n\r\n getRoomUsers(roomId: string): Observable<any[]> {\r\n return this.http.get<any[]>(`${this.baseUrl}/api/chat/chatrooms/get_user/${roomId}/users/`).pipe(\r\n map(list =>\r\n list.map(u => ({\r\n id: u.UserId,\r\n username: u.UserName\r\n }))\r\n )\r\n );\r\n }\r\n\r\n addUserToRoom(roomId: string, userId: string, userName: string, createdBy: string) {\r\n return this.http.post(`${this.baseUrl}/api/chat/chatrooms/add_user/${roomId}/users/add/`, {\r\n userId,\r\n userName,\r\n createdBy\r\n });\r\n }\r\n\r\n /* ---------------- MESSAGES ---------------- */\r\n getMessages(roomId: string, since?: string): Observable<ChatMessage[]> {\r\n const params: any = {};\r\n if (since) params.since = since;\r\n\r\n return this.http.get<any[]>(`${this.baseUrl}/api/chat/messages/rooms/all_messages/${roomId}/`, {params}).pipe(\r\n map(list =>\r\n list.map(m => ({\r\n id: m.id,\r\n chatRoomId: m.chatRoomId,\r\n senderId: m.senderId,\r\n senderName: m.senderName,\r\n content: m.content,\r\n replyToMessageId: m.replyToMessageId,\r\n createdAt: m.createdAt,\r\n hasAttachment: m.hasAttachment ?? false,\r\n }))\r\n )\r\n );\r\n }\r\n\r\n sendMessage(\r\n roomId: string,\r\n payload: {\r\n senderId: string;\r\n senderName: string,\r\n content: string;\r\n replyToMessageId?: string | null,\r\n createdBy: string\r\n }\r\n ): Observable<ChatMessage> {\r\n return this.http.post<any>(`${this.baseUrl}/api/chat/messages/rooms/send/${roomId}/`, payload).pipe(\r\n map(m => ({\r\n id: m.id,\r\n chatRoomId: m.chatRoomId,\r\n senderId: m.senderId,\r\n senderName: m.senderName,\r\n content: m.content,\r\n replyToMessageId: m.replyToMessageId,\r\n createdAt: m.createdAt,\r\n hasAttachment: m.hasAttachment ?? false,\r\n }))\r\n );\r\n }\r\n\r\n getRooms(loggedInUserId: string, chatRoomId?: string) {\r\n let url = `${this.baseUrl}/api/chat/chatrooms/${loggedInUserId}`;\r\n if (chatRoomId) {\r\n url += `/${chatRoomId}`;\r\n }\r\n return this.http.get<any[]>(`${url}/`);\r\n }\r\n\r\n\r\n archiveRoom(roomId: string) {\r\n return this.http.delete<any[]>(`${this.baseUrl}/api/chat/chatrooms/archive/${roomId}/`);\r\n }\r\n\r\n private listenForNotifications() {\r\n console.log('Listening');\r\n // 🔔 ADDED TO ROOM — only added user\r\n this.socket.on('addedToRoom').subscribe((msg: any) => {\r\n console.log('addedToRoom', msg);\r\n if (msg.addedUserId !== this.currentUser().userId) return;\r\n });\r\n\r\n // 🔔 NEW MESSAGE — everyone EXCEPT sender\r\n this.socket.on('newMessage').subscribe((msg: any) => {\r\n console.log('newMessage', msg);\r\n if (msg.senderId === this.currentUser().userId) return;\r\n });\r\n }\r\n\r\n markAsRead(entityId: string, eventType: string, user_id: string): Observable<any> {\r\n return this.http.post(`${this.baseUrl}/api/chat/notifications/mark_read/${entityId}/${eventType}/`, {\r\n user_id\r\n });\r\n }\r\n\r\n getAllUserNotifications(userId: string): Observable<any[]> {\r\n return this.http.get<any[]>(`${this.baseUrl}/api/chat/notifications/get_all/${userId}/`);\r\n }\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n inject,\r\n Input,\r\n input,\r\n OnInit,\r\n Output,\r\n signal,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FormsModule} from '@angular/forms';\r\nimport {ChatService} from '../core/services/chat.service';\r\nimport {SocketService} from '../core/services/socket.service';\r\nimport {ToastModule} from 'primeng/toast';\r\nimport {MessageService} from 'primeng/api';\r\nimport {ButtonModule} from 'primeng/button';\r\nimport {AvatarModule} from 'primeng/avatar';\r\nimport {TooltipModule} from 'primeng/tooltip';\r\nimport {InputTextareaModule} from 'primeng/inputtextarea';\r\nimport {DropdownModule} from 'primeng/dropdown';\r\nimport {ChipModule} from 'primeng/chip';\r\nimport {ChatMessage} from '../core/models/chat.models';\r\nimport {OverlayPanel, OverlayPanelModule} from 'primeng/overlaypanel';\r\nimport {ChatNotification} from \"../core/models/notification.model\";\r\n\r\n@Component({\r\n selector: 'app-chat-window',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ToastModule,\r\n ButtonModule,\r\n AvatarModule,\r\n TooltipModule,\r\n InputTextareaModule,\r\n ChipModule,\r\n DropdownModule,\r\n OverlayPanelModule\r\n ],\r\n templateUrl: './chat-window.component.html',\r\n styleUrls: ['./chat-window.component.scss'],\r\n providers: [MessageService]\r\n})\r\nexport class ChatWindowComponent implements OnInit {\r\n @Input() chatRoomId!: string;\r\n @Input() header = 'Chat';\r\n @Input() metadata = '';\r\n @Input() chatUsers = [];\r\n @Input() showActions = true;\r\n @Input() mode: 'floating' | 'fullscreen' = 'floating';\r\n @Input() theme: 'light' | 'dark' = 'light';\r\n @Output() onArchive = new EventEmitter();\r\n\r\n refreshRoom = input<boolean>(false);\r\n // @Input() currentUser: any;\r\n\r\n chatService = inject(ChatService);\r\n socket = inject(SocketService);\r\n\r\n users = signal<any[]>([]);\r\n messages = signal<ChatMessage[]>([]);\r\n newMessage = '';\r\n minimized = false;\r\n loading = false;\r\n replyTo: ChatMessage | null = null;\r\n selectedUser: any;\r\n\r\n @ViewChild('messagesContainer') messagesContainer!: ElementRef<HTMLDivElement>;\r\n @ViewChild('reactionOverlay') reactionOverlay!: OverlayPanel;\r\n\r\n private observer!: MutationObserver;\r\n\r\n showUsers = false;\r\n suggestion = '';\r\n hoveredReactionUsers: string[] = [];\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnInit() {\r\n this.socket.joinRoom(this.chatRoomId);\r\n this.socket.joinUserChannel(this.chatService.currentUser().userId);\r\n this.loadUsers();\r\n this.loadMessages();\r\n this.listenSocket();\r\n }\r\n\r\n loadUsers() {\r\n this.chatService.getRoomUsers(this.chatRoomId).subscribe(users => {\r\n this.users.set(users);\r\n });\r\n }\r\n\r\n loadMessages() {\r\n this.loading = true;\r\n this.chatService.getMessages(this.chatRoomId).subscribe({\r\n next: msgs => {\r\n this.messages.set(msgs);\r\n this.loading = false;\r\n },\r\n error: () => (this.loading = false)\r\n });\r\n }\r\n\r\n listenSocket() {\r\n this.socket.on<ChatMessage>('newMessage').subscribe(msg => {\r\n if (msg.chatRoomId === this.chatRoomId) {\r\n this.messages.update(list => [...list, msg]);\r\n }\r\n\r\n // if (msg.senderId !== this.chatService.currentUser().userId) {\r\n // this.messageService.add({\r\n // severity: 'info',\r\n // summary: this.header,\r\n // detail: msg.content ?? 'New message',\r\n // life: 2500\r\n // });\r\n // }\r\n });\r\n\r\n this.socket.on('roomUserAdded').subscribe((msg: any) => {\r\n if (msg.chatRoomId === this.chatRoomId) {\r\n this.loadUsers();\r\n // this.messageService.add({\r\n // severity: 'info',\r\n // summary: 'User Added',\r\n // detail: msg.user?.userName,\r\n // life: 2500\r\n // });\r\n }\r\n });\r\n\r\n this.socket.on('addedToRoom').subscribe((msg: any) => {\r\n if (msg.chatRoomId === this.chatRoomId) {\r\n this.loadUsers();\r\n console.log('addedToRoom', msg);\r\n }\r\n });\r\n\r\n this.socket.on('userAlreadyInRoom').subscribe((msg: any) => {\r\n // if (msg.chatRoomId === this.chatRoomId) {\r\n // this.messageService.add({\r\n // severity: 'info',\r\n // summary: 'User Already Added',\r\n // detail: msg.user?.userName,\r\n // life: 2500\r\n // });\r\n // }\r\n });\r\n }\r\n\r\n send() {\r\n const content = this.newMessage.trim();\r\n if (!content) return;\r\n\r\n this.chatService.sendMessage(this.chatRoomId, {\r\n senderId: this.chatService.currentUser().userId,\r\n senderName: this.chatService.currentUser().name,\r\n content,\r\n replyToMessageId: this.replyTo?.replyToMessageId ?? null,\r\n createdBy: this.chatService.currentUser().userId\r\n }).subscribe(() => {\r\n this.newMessage = '';\r\n this.replyTo = null;\r\n });\r\n }\r\n\r\n addUserToRoom() {\r\n this.chatService.addUserToRoom(\r\n this.chatRoomId,\r\n this.selectedUser?.user_id,\r\n this.selectedUser?.full_name,\r\n this.chatService.currentUser().userId).subscribe((res) => {\r\n });\r\n }\r\n\r\n toggleMinimize() {\r\n this.minimized = !this.minimized;\r\n }\r\n\r\n archiveChat() {\r\n this.chatService.archiveRoom(this.chatRoomId).subscribe({\r\n next: () => {\r\n this.onArchive.emit(this.chatRoomId);\r\n },\r\n error: err => console.error(err)\r\n });\r\n }\r\n\r\n setReply(msg: ChatMessage) {\r\n this.replyTo = msg;\r\n }\r\n\r\n clearReply() {\r\n this.replyTo = null;\r\n }\r\n\r\n trackById(index: number, msg: ChatMessage) {\r\n return msg.id;\r\n }\r\n\r\n ngOnDestroy() {\r\n this.socket.offNewMessage();\r\n this.socket.offMessageSeen();\r\n this.observer?.disconnect();\r\n }\r\n\r\n ngAfterViewInit() {\r\n const el = this.messagesContainer.nativeElement;\r\n\r\n this.observer = new MutationObserver(() => {\r\n // 🔥 Scroll AFTER DOM actually changes\r\n el.scrollTop = el.scrollHeight;\r\n });\r\n\r\n this.observer.observe(el, {\r\n childList: true,\r\n subtree: true,\r\n characterData: true\r\n });\r\n }\r\n\r\n toggleUsers() {\r\n this.showUsers = !this.showUsers;\r\n }\r\n}\r\n","<p-toast></p-toast>\r\n\r\n<div [class.dark]=\"theme === 'dark'\" [class.floating]=\"mode === 'floating'\" [class.fullscreen]=\"mode === 'fullscreen'\"\r\n [class.minimized]=\"minimized\" class=\"chat-window\">\r\n <div class=\"chat-header\">\r\n <div style=\"display: flex; flex-direction: column;\">\r\n <div class=\"title\">\r\n <span>{{ header }}</span>\r\n <span *ngIf=\"users().length\">({{ users().length }} {{\r\n users().length == 1 ? 'participant' :\r\n 'participants'\r\n }})</span>\r\n </div>\r\n <div>\r\n <span>{{ metadata }}</span>\r\n </div>\r\n </div>\r\n <div class=\"header-actions\">\r\n <button (click)=\"toggleUsers()\" icon=\"pi pi-users\" pButton pTooltip=\"Toogle Users\"\r\n style=\"font-size: 0.5rem\"></button>\r\n @if (showActions) {\r\n <button (click)=\"toggleMinimize()\" [icon]=\"minimized ? 'pi pi-plus' : 'pi pi-minus'\" pButton\r\n pTooltip=\"Hide/Show\" style=\"font-size: 0.5rem\"></button>\r\n <button (click)=\"archiveChat()\" icon=\"pi pi-trash\" pButton pTooltip=\"Archive\"\r\n style=\"font-size: 0.5rem\"></button>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!minimized\" class=\"chat-body\">\r\n <div [class.users-hidden]=\"!showUsers\" class=\"chat-layout\">\r\n <div [class.floating]=\"mode === 'floating'\" [class.fullscreen]=\"mode === 'fullscreen'\" class=\"chat-main\">\r\n <div #messagesContainer [class.loading]=\"loading\" class=\"messages\">\r\n <div *ngFor=\"let msg of messages(); trackBy: trackById\" [ngClass]=\"{ outgoing: msg.senderId === chatService.currentUser().userId, incoming: msg.senderId !== chatService.currentUser().userId }\"\r\n class=\"message-row\">\r\n <div class=\"message-bubble\">\r\n <div class=\"message-meta\">\r\n <span class=\"sender\">\r\n <!-- *ngIf=\"msg.senderId !== chatService.currentUser().userId\" -->\r\n {{ msg.senderName }}\r\n </span>\r\n <!-- <span class=\"time\">\r\n {{ msg.createdAt | date: 'shortTime' }}\r\n </span> -->\r\n </div>\r\n\r\n <!-- MESSAGE TEXT -->\r\n <div class=\"message-content\">\r\n {{ msg.content }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"input-area\">\r\n <div *ngIf=\"replyTo\" class=\"reply-banner\">\r\n <span>Replying to: {{ replyTo.content | slice: 0:50 }}</span>\r\n <button (click)=\"clearReply()\" class=\"p-button-text p-button-sm\" icon=\"pi pi-times\"\r\n pButton></button>\r\n </div>\r\n\r\n <textarea (keyup.enter)=\"send()\" [(ngModel)]=\"newMessage\" autoResize=\"true\" pInputTextarea\r\n placeholder=\"Type a message\"\r\n rows=\"2\">\r\n </textarea>\r\n\r\n <div class=\"input-actions\">\r\n <button (click)=\"send()\" icon=\"pi pi-send\" label=\"Send\" pButton></button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"chat-sidebar\">\r\n <div class=\"section-title\">Users</div>\r\n <div class=\"user-list\">\r\n <div *ngFor=\"let u of users()\" class=\"user-row\">\r\n <p-avatar [label]=\"u.username[0]\"></p-avatar>\r\n <span>{{ u.username }}</span>\r\n </div>\r\n </div>\r\n @if (showActions) {\r\n <div class=\"user-list-add\">\r\n <p-dropdown [(ngModel)]=\"selectedUser\" [options]=\"chatService.userList()\"\r\n optionLabel=\"full_name\"\r\n placeholder=\"Select User\"/>\r\n <div style=\"margin-top: 2em;\">\r\n <button (click)=\"addUserToRoom()\" icon=\"pi pi-plus\" label=\"Add\" pButton></button>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import {Component, effect, inject, input, signal, ViewEncapsulation} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {ChatWindowComponent} from '../chat-window/chat-window.component';\r\nimport {ChatService} from '../core/services/chat.service';\r\nimport {DropdownModule} from 'primeng/dropdown';\r\nimport {ButtonModule} from 'primeng/button';\r\nimport {ToastModule} from 'primeng/toast';\r\nimport {MessageService} from 'primeng/api';\r\nimport {FormsModule} from '@angular/forms';\r\nimport {TabViewModule} from 'primeng/tabview';\r\nimport {SocketService} from '../core/services/socket.service';\r\nimport {TooltipModule} from \"primeng/tooltip\";\r\n\r\ninterface OpenChatWindow {\r\n roomId: string;\r\n header: string;\r\n metadata: string;\r\n}\r\n\r\n@Component({\r\n selector: 'app-chat-launcher',\r\n standalone: true,\r\n imports: [CommonModule, ChatWindowComponent, DropdownModule, ButtonModule, ToastModule, FormsModule, TabViewModule, TooltipModule],\r\n templateUrl: './chat-launcher.component.html',\r\n styleUrls: ['./chat-launcher.component.scss'],\r\n providers: [MessageService],\r\n encapsulation: ViewEncapsulation.Emulated,\r\n})\r\nexport class ChatLauncherComponent {\r\n\r\n roomId = input<string>('');\r\n roomHeader = input<string>('');\r\n metadata = input<string>('');\r\n user = input<any>(null);\r\n userList = input<any[]>([]);\r\n chatUsers = input<any[]>([]);\r\n\r\n chatService = inject(ChatService);\r\n socketService = inject(SocketService);\r\n messageService = inject(MessageService);\r\n openWindows = signal<OpenChatWindow[]>([]);\r\n lastOpenedRoom = signal<string | null>(null);\r\n activeIndex = signal(0);\r\n isVisible = signal(true);\r\n\r\n constructor() {\r\n effect(\r\n () => {\r\n const roomId = this.roomId();\r\n const header = this.roomHeader();\r\n const metadata = this.metadata();\r\n const user = this.user();\r\n\r\n this.chatService.currentUser.set({\r\n roomId: this.roomId(),\r\n userId: user?.userId,\r\n name: user?.name\r\n });\r\n\r\n this.chatService.userList.set(this.userList());\r\n\r\n if (!roomId || !user?.userId) return;\r\n if (this.lastOpenedRoom() === roomId) return;\r\n\r\n this.lastOpenedRoom.set(roomId);\r\n this.openNewRoom(roomId, header, metadata, user.userId, user.name, this.chatUsers());\r\n },\r\n {allowSignalWrites: true}\r\n );\r\n }\r\n\r\n ngOnInit() {\r\n console.log('ChatLauncher initialized');\r\n }\r\n\r\n openNewRoom(roomId: string, roomHeader: string, metadata: string, userId: string, username: string, chatUsers: any) {\r\n this.isVisible.set(true);\r\n this.chatService.createRoom(roomId, roomHeader, metadata, userId, username, chatUsers).subscribe(room => {\r\n this.addWindow(room.roomKey, room.name, room.metadata);\r\n });\r\n }\r\n\r\n addWindow(roomId: string, header: string, metadata: string) {\r\n const windows = this.openWindows();\r\n const existingIndex = windows.findIndex(w => w.roomId === roomId);\r\n\r\n // already open → focus\r\n if (existingIndex !== -1) {\r\n this.activeIndex.set(existingIndex);\r\n return;\r\n }\r\n\r\n const newIndex = windows.length;\r\n\r\n this.openWindows.update(ws => [...ws, {roomId, header, metadata}]);\r\n\r\n // ✅ force real change: -1 → 0\r\n setTimeout(() => {\r\n this.activeIndex.set(newIndex);\r\n }, 500);\r\n }\r\n\r\n\r\n closeWindow(roomId: any) {\r\n this.openWindows.update(ws => ws.filter(w => w.roomId !== roomId));\r\n }\r\n\r\n setActive(i: number) {\r\n this.activeIndex.set(i);\r\n }\r\n\r\n closeAll() {\r\n this.openWindows.set([]);\r\n // this.lastOpenedRoom.set(null);\r\n // this.activeIndex.set(0);\r\n this.isVisible.set(false);\r\n }\r\n\r\n}\r\n","@if (isVisible()) {\r\n <div class=\"chat-float-wrapper\">\r\n <button (click)=\"closeAll()\" icon=\"pi pi-times\" pButton pTooltip=\"Close\"\r\n style=\"font-size: 0.5rem\" class=\"closeButton\"></button>\r\n <p-tabView (activeIndexChange)=\"setActive($event)\" [activeIndex]=\"activeIndex()\" [scrollable]=\"true\"\r\n class=\"chat-tabview\">\r\n <p-tabPanel *ngFor=\"let w of openWindows(); let i = index\" [header]=\"w.header\">\r\n <ng-template pTemplate=\"content\">\r\n <app-chat-window (onArchive)=\"closeWindow($event)\"\r\n [chatRoomId]=\"w.roomId\" [header]=\"w.header\"\r\n [metadata]=\"w.metadata\" mode=\"floating\" theme=\"light\">\r\n </app-chat-window>\r\n </ng-template>\r\n </p-tabPanel>\r\n </p-tabView>\r\n </div>\r\n}\r\n","import { Component, effect, EventEmitter, inject, input, Input, Output, signal } from '@angular/core';\r\nimport { ChatService } from '../core/services/chat.service';\r\nimport { ChatWindowComponent } from \"../chat-window/chat-window.component\";\r\nimport { ChatLauncherComponent } from '../chat-launcher/chat-launcher.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { AvatarModule } from 'primeng/avatar';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { ChipModule } from 'primeng/chip';\r\nimport { DropdownModule } from 'primeng/dropdown';\r\nimport { InputTextareaModule } from 'primeng/inputtextarea';\r\nimport { OverlayPanelModule } from 'primeng/overlaypanel';\r\nimport { ToastModule } from 'primeng/toast';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\nimport { trigger, transition, style, animate } from '@angular/animations';\r\nimport { SocketService } from '../core/services/socket.service';\r\n\r\n@Component({\r\n selector: 'app-all-chats',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ToastModule,\r\n ButtonModule,\r\n AvatarModule,\r\n TooltipModule,\r\n InputTextareaModule,\r\n ChipModule,\r\n DropdownModule,\r\n OverlayPanelModule,\r\n ChatWindowComponent\r\n ],\r\n templateUrl: './all-chats.component.html',\r\n styleUrl: './all-chats.component.scss',\r\n animations: [\r\n trigger('roomSwitch', [\r\n transition(':enter', [\r\n style({ opacity: 0, transform: 'translateX(24px)' }),\r\n animate(\r\n '300ms cubic-bezier(.4,0,.2,1)',\r\n style({ opacity: 1, transform: 'translateX(0)' })\r\n )\r\n ]),\r\n transition(':leave', [\r\n animate(\r\n '200ms ease-in',\r\n style({ opacity: 0, transform: 'translateX(-24px)' })\r\n )\r\n ])\r\n ])\r\n ]\r\n})\r\nexport class AllChatsComponent {\r\n\r\n user = input<any>(null);\r\n roomId = input<any>(null);\r\n chatUsers = signal<any[]>([]);\r\n\r\n @Output() newRoomLoaded = new EventEmitter();\r\n\r\n rooms: any[] = [];\r\n activeRoomId = signal<string>('');\r\n activeRoomHeader = signal<string>('');\r\n activeRoomMetadata = signal<string>('');\r\n\r\n chatService = inject(ChatService);\r\n socketService = inject(SocketService);\r\n showMessages: boolean = false\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnInit() {\r\n if (!this.user) {\r\n console.error('user is required');\r\n return;\r\n }\r\n\r\n this.chatService.currentUser.set({\r\n roomId: this.activeRoomId,\r\n userId: this.user()?.id,\r\n name: this.user()?.name\r\n });\r\n\r\n this.chatService.getRooms(this.user()?.id, this.roomId())\r\n .subscribe(res => {\r\n this.rooms = res;\r\n if (this.rooms.length != 0) {\r\n this.selectRoom(this.rooms[0]);\r\n this.activeRoomId.set(this.rooms[0].ChatRoomId);\r\n this.activeRoomHeader.set(this.rooms[0].ChatRoomName);\r\n this.activeRoomMetadata.set(this.rooms[0].Metadata);\r\n } else {\r\n this.chatService\r\n .addUserToRoom(\r\n this.roomId(),\r\n this.user()?.id,\r\n this.user()?.name,\r\n this.chatService.currentUser().userId)\r\n .subscribe((res) => {\r\n this.rooms = [];\r\n this.getRooms();\r\n });\r\n }\r\n });\r\n }\r\n\r\n getRooms() {\r\n this.chatService.getRooms(this.user()?.id, this.roomId())\r\n .subscribe(res => {\r\n this.rooms = res;\r\n if (this.rooms.length != 0) {\r\n this.selectRoom(this.rooms[0]);\r\n this.activeRoomId.set(this.rooms[0].ChatRoomId);\r\n this.activeRoomHeader.set(this.rooms[0].ChatRoomName);\r\n this.activeRoomMetadata.set(this.rooms[0].Metadata);\r\n }\r\n });\r\n }\r\n\r\n selectRoom(room: any) {\r\n this.showMessages = false;\r\n this.activeRoomId.set(room.ChatRoomId);\r\n this.activeRoomHeader.set(room.ChatRoomName);\r\n this.activeRoomMetadata.set(room.Metadata);\r\n setTimeout(() => {\r\n this.showMessages = true;\r\n }, 800);\r\n }\r\n}\r\n","<div class=\"chat-page\">\r\n <!-- LEFT SIDEBAR : CHAT ROOMS -->\r\n <aside class=\"chat-sidebar glass\">\r\n <div class=\"sidebar-header\">\r\n <h3>Chat Rooms</h3>\r\n </div>\r\n <ul class=\"room-list\">\r\n <li (click)=\"selectRoom(room)\" *ngFor=\"let room of rooms;\" [class.active]=\"activeRoomId() === room.ChatRoomId\"\r\n class=\"room-item\">\r\n <div class=\"room-avatar\">\r\n <p-avatar [label]=\"room.ChatRoomName[0]\"></p-avatar>\r\n </div>\r\n <div class=\"room-info\">\r\n <span class=\"room-name\">{{ room.ChatRoomName }}</span>\r\n <span class=\"room-name\">{{ room.Metadata }}</span>\r\n </div>\r\n </li>\r\n </ul>\r\n </aside>\r\n <!-- RIGHT PANEL : CHAT WINDOW -->\r\n @if (showMessages) {\r\n <section *ngIf=\"showMessages\" @roomSwitch class=\"chat-main glass\">\r\n <app-chat-window [chatRoomId]=\"activeRoomId()\" [header]=\"activeRoomHeader()\" [metadata]=\"activeRoomMetadata()\" [showActions]=\"false\"\r\n mode=\"fullscreen\" theme=\"light\">\r\n </app-chat-window>\r\n </section>\r\n } @else {\r\n <section class=\"chat-main glass loading-container\">\r\n <div class=\"spinner\"></div>\r\n <p>Loading messages…</p>\r\n </section>\r\n }\r\n\r\n</div>","import {Component, computed, inject, input} from '@angular/core';\r\nimport {ChatService} from \"../core/services/chat.service\";\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {FormsModule} from \"@angular/forms\";\r\nimport {ChatNotification} from \"../core/models/notification.model\";\r\nimport {SocketService} from \"../core/services/socket.service\";\r\nimport {ChatLauncherComponent} from \"../chat-launcher/chat-launcher.component\";\r\n\r\n@Component({\r\n selector: 'chat-widget-notification',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule\r\n ],\r\n templateUrl: './chat-widget-notification.component.html',\r\n styleUrl: './chat-widget-notification.component.css'\r\n})\r\nexport class ChatWidgetNotificationComponent {\r\n open = false;\r\n\r\n chatService = inject(ChatService);\r\n socketService = inject(SocketService);\r\n userId = input<any>(null);\r\n chatLauncher = inject(ChatLauncherComponent);\r\n\r\n totalCount = computed(() =>\r\n this.socketService.notifications().reduce((a: any, b: { unreadCount: any; }) => a + b.unreadCount, 0)\r\n );\r\n\r\n constructor() {}\r\n\r\n ngOnInit() {\r\n this.socketService.connect(this.userId());\r\n this.chatService.getAllUserNotifications(this.userId()).subscribe(notifications => {\r\n const data = notifications.map(n => {\r\n return {\r\n entityId: n.room_id,\r\n eventType: n.type,\r\n payload: {chatRoomId: n.room_id, chatRoomName: n.chat_room_name},\r\n unreadCount: 0,\r\n title: n.description\r\n }\r\n });\r\n this.socketService.notifications.set(data);\r\n });\r\n }\r\n\r\n toggle() {\r\n this.open = !this.open;\r\n }\r\n\r\n openRoom(n: ChatNotification) {\r\n this.socketService.clearRoom(n);\r\n this.chatService.markAsRead(n.entityId, n.eventType, this.userId()).subscribe(notification => {\r\n console.log('markAsRead', notification);\r\n this.chatLauncher.openNewRoom(n.payload.chatRoomId, n.payload.chatRoomName, '', this.chatService?.currentUser().userId, this.chatService?.currentUser().name, []);\r\n });\r\n this.open = false;\r\n }\r\n}\r\n","<div (click)=\"toggle()\" class=\"notif-icon\">\r\n <i class=\"pi pi-bell\" [class.pulse]=\"socketService.hasNewNotification()\"></i>\r\n\r\n @if (totalCount() > 0) {\r\n <span class=\"dot\"></span>\r\n <span class=\"badge\">{{ totalCount() }}</span>\r\n }\r\n</div>\r\n\r\n@if (open) {\r\n <div class=\"notif-panel\">\r\n <div class=\"notif-list\">\r\n @for (n of socketService.notifications(); track n.entityId + '_' + n.eventType) {\r\n <div class=\"notif-item\" (click)=\"openRoom(n)\">\r\n <div class=\"notif-left\">\r\n <i class=\"pi pi-comments\"></i>\r\n </div>\r\n\r\n <div class=\"notif-body\">\r\n <div class=\"notif-title\">{{ n?.payload?.chatRoomName }}</div>\r\n <div class=\"notif-text\">\r\n @if (n.eventType === 'NEW_MESSAGE') {\r\n New Message Received\r\n }\r\n\r\n @if (n.eventType === 'USER_ADDED') {\r\n You have been added to the chat\r\n }\r\n </div>\r\n </div>\r\n\r\n<!-- <span class=\"count\">{{ n.count }}</span>-->\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n}\r\n","import {ModuleWithProviders, NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {ChatLauncherComponent} from './chat-launcher/chat-launcher.component';\r\nimport {ChatWindowComponent} from './chat-window/chat-window.component';\r\nimport {AllChatsComponent} from './all-chats/all-chats.component';\r\nimport {CHAT_CONFIG} from './core/config/chat.tokens';\r\nimport type {ChatConfig} from './core/config/chat-config';\r\nimport {ChatWidgetNotificationComponent} from \"./chat-widget-notification/chat-widget-notification.component\";\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [\r\n CommonModule,\r\n ChatLauncherComponent,\r\n ChatWindowComponent,\r\n AllChatsComponent,\r\n ChatWidgetNotificationComponent\r\n ],\r\n exports: [ChatLauncherComponent]\r\n})\r\nexport class ChatWidgetModule {\r\n static forRoot(config: ChatConfig): ModuleWithProviders<ChatWidgetModule> {\r\n return {\r\n ngModule: ChatWidgetModule,\r\n providers: [\r\n {\r\n provide: CHAT_CONFIG,\r\n useValue: config\r\n }\r\n ]\r\n };\r\n }\r\n}\r\n","import {inject, Injectable} from \"@angular/core\";\r\nimport {ChatService} from \"./core/services/chat.service\";\r\nimport {SocketService} from \"./core/services/socket.service\";\r\nimport {ChatMessage} from \"./core/models/chat.models\";\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ChatWidgetService {\r\n\r\n constructor() {}\r\n}\r\n","/*\r\n * Public API Surface of chat-widget\r\n */\r\n\r\nexport * from './lib/chat-widget.module';\r\nexport * from './lib/chat-launcher/chat-launcher.component';\r\nexport * from './lib/all-chats/all-chats.component';\r\nexport * from './lib/core/models/chat.models';\r\nexport * from './lib/chat-widget-notification/chat-widget-notification.component'\r\nexport * from './lib/chat-widget.service'\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.SocketService","i1","i2","i3","i4","i5"],"mappings":"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"}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { ChatService } from "../core/services/chat.service";
|
|
2
2
|
import { ChatNotification } from "../core/models/notification.model";
|
|
3
3
|
import { SocketService } from "../core/services/socket.service";
|
|
4
|
+
import { ChatLauncherComponent } from "../chat-launcher/chat-launcher.component";
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
export declare class ChatWidgetNotificationComponent {
|
|
6
7
|
open: boolean;
|
|
7
8
|
chatService: ChatService;
|
|
8
9
|
socketService: SocketService;
|
|
9
10
|
userId: import("@angular/core").InputSignal<any>;
|
|
11
|
+
chatLauncher: ChatLauncherComponent;
|
|
10
12
|
totalCount: import("@angular/core").Signal<any>;
|
|
11
13
|
constructor();
|
|
12
14
|
ngOnInit(): void;
|
|
@@ -26,7 +26,7 @@ export declare class ChatService {
|
|
|
26
26
|
getRooms(loggedInUserId: string, chatRoomId?: string): Observable<any[]>;
|
|
27
27
|
archiveRoom(roomId: string): Observable<any[]>;
|
|
28
28
|
private listenForNotifications;
|
|
29
|
-
markAsRead(
|
|
29
|
+
markAsRead(entityId: string, eventType: string, user_id: string): Observable<any>;
|
|
30
30
|
getAllUserNotifications(userId: string): Observable<any[]>;
|
|
31
31
|
static ɵfac: i0.ɵɵFactoryDeclaration<ChatService, never>;
|
|
32
32
|
static ɵprov: i0.ɵɵInjectableDeclaration<ChatService>;
|
|
@@ -8,6 +8,8 @@ export declare class SocketService {
|
|
|
8
8
|
private listeners;
|
|
9
9
|
notifications: import("@angular/core").WritableSignal<any[]>;
|
|
10
10
|
hasNewNotification: import("@angular/core").WritableSignal<boolean>;
|
|
11
|
+
private reconnectAttempts;
|
|
12
|
+
private readonly MAX_RECONNECT_ATTEMPTS;
|
|
11
13
|
constructor(config: ChatConfig);
|
|
12
14
|
connect(userId: string): void;
|
|
13
15
|
emit(event: string, data?: any): void;
|