@arthakosh/chat-widget 0.2.60 → 0.3.2

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.
@@ -1,12 +1,14 @@
1
- import { Inject, Injectable } from '@angular/core';
1
+ import { inject, Inject, Injectable } from '@angular/core';
2
2
  import { Observable } from 'rxjs';
3
3
  import { CHAT_CONFIG } from "../config/chat.tokens";
4
+ import { ChatService } from "./chat.service";
4
5
  import * as i0 from "@angular/core";
5
6
  export class SocketService {
6
7
  constructor(config) {
7
8
  this.config = config;
8
9
  this.listeners = new Map();
9
10
  this.isConnected = false;
11
+ this.chatService = inject(ChatService);
10
12
  this.connect();
11
13
  }
12
14
  connect() {
@@ -16,6 +18,7 @@ export class SocketService {
16
18
  this.socket.onopen = () => {
17
19
  this.isConnected = true;
18
20
  console.log('[WS] Connected');
21
+ this.joinUserChannel(this.chatService.currentUser().userId);
19
22
  };
20
23
  this.socket.onmessage = (event) => {
21
24
  const message = JSON.parse(event.data);
@@ -77,4 +80,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
77
80
  type: Inject,
78
81
  args: [CHAT_CONFIG]
79
82
  }] }] });
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ja2V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXdpZGdldC9zcmMvbGliL2NvcmUvc2VydmljZXMvc29ja2V0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7O0FBSWxELE1BQU0sT0FBTyxhQUFhO0lBTXRCLFlBQXlDLE1BQWtCO1FBQWxCLFdBQU0sR0FBTixNQUFNLENBQVk7UUFIbkQsY0FBUyxHQUFHLElBQUksR0FBRyxFQUFtQyxDQUFDO1FBQ3ZELGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBR3hCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRU8sT0FBTztRQUNYLElBQUksSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPO1FBQzdCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsTUFBTSxDQUFDLENBQUM7UUFFNUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQzlCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRXZDLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FB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QyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQzlELENBQUMsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzsrR0FwRlEsYUFBYSxrQkFNRixXQUFXO21IQU50QixhQUFhLGNBREQsTUFBTTs7NEZBQ2xCLGFBQWE7a0JBRHpCLFVBQVU7bUJBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOzswQkFPZixNQUFNOzJCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7Q0hBVF9DT05GSUd9IGZyb20gXCIuLi9jb25maWcvY2hhdC50b2tlbnNcIjtcclxuaW1wb3J0IHtDaGF0Q29uZmlnfSBmcm9tIFwiLi4vY29uZmlnL2NoYXQtY29uZmlnXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcclxuZXhwb3J0IGNsYXNzIFNvY2tldFNlcnZpY2Uge1xyXG5cclxuICAgIHByaXZhdGUgc29ja2V0ITogV2ViU29ja2V0O1xyXG4gICAgcHJpdmF0ZSBsaXN0ZW5lcnMgPSBuZXcgTWFwPHN0cmluZywgKChkYXRhOiBhbnkpID0+IHZvaWQpW10+KCk7XHJcbiAgICBwcml2YXRlIGlzQ29ubmVjdGVkID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IoQEluamVjdChDSEFUX0NPTkZJRykgcHJpdmF0ZSBjb25maWc6IENoYXRDb25maWcpIHtcclxuICAgICAgICB0aGlzLmNvbm5lY3QoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNvbm5lY3QoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDb25uZWN0ZWQpIHJldHVybjtcclxuICAgICAgICB0aGlzLnNvY2tldCA9IG5ldyBXZWJTb2NrZXQoYCR7dGhpcy5jb25maWcud3NCYXNlVXJsfS93cy9gKTtcclxuXHJcbiAgICAgICAgdGhpcy5zb2NrZXQub25vcGVuID0gKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmlzQ29ubmVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1tXU10gQ29ubmVjdGVkJyk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5zb2NrZXQub25tZXNzYWdlID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBKU09OLnBhcnNlKGV2ZW50LmRhdGEpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZXZlbnRUeXBlID0gbWVzc2FnZS50eXBlIHx8IG1lc3NhZ2UuZXZlbnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgICA9IG1lc3NhZ2UucGF5bG9hZCA/PyBtZXNzYWdlLmRhdGE7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMubGlzdGVuZXJzLmdldChldmVudFR5cGUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGhhbmRsZXJzICYmIGhhbmRsZXJzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgaGFuZGxlcnMuZm9yRWFjaChoID0+IGgocGF5bG9hZCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcblxyXG4gICAgICAgIHRoaXMuc29ja2V0Lm9uZXJyb3IgPSAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tXU10gRXJyb3InLCBlcnIpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuc29ja2V0Lm9uY2xvc2UgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNDb25uZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdbV1NdIERpc2Nvbm5lY3RlZCDigJMgcmVjb25uZWN0aW5nLi4uJyk7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jb25uZWN0KCksIDIwMDApO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZW1pdChldmVudDogc3RyaW5nLCBkYXRhPzogYW55KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzQ29ubmVjdGVkIHx8IHRoaXMuc29ja2V0LnJlYWR5U3RhdGUgIT09IFdlYlNvY2tldC5PUEVOKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignW1dTXSBOb3QgY29ubmVjdGVkLiBEcm9wcGluZyBldmVudDonLCBldmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkoeyBldmVudCwgZGF0YSB9KSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGpvaW5Sb29tKHJvb21JZDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdqb2luUm9vbScsIHJvb21JZCk7XHJcbiAgICB9XHJcblxyXG4gICAgam9pblVzZXJDaGFubmVsKHVzZXJJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdqb2luVXNlckNoYW5uZWwnLCB1c2VySWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbmRNZXNzYWdlKGRhdGE6IGFueSkge1xyXG4gICAgICAgIHRoaXMuZW1pdCgnc2VuZE1lc3NhZ2UnLCBkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBtZXNzYWdlU2VlbihkYXRhOiB7IGNoYXRSb29tSWQ6IHN0cmluZzsgdXNlcklkOiBzdHJpbmcgfSkge1xyXG4gICAgICAgIHRoaXMuZW1pdCgnbWVzc2FnZVNlZW4nLCBkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBvbjxUPihldmVudDogc3RyaW5nKTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YiA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSAoZGF0YTogVCkgPT4gc3ViLm5leHQoZGF0YSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRoaXMubGlzdGVuZXJzLmhhcyhldmVudCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzLnNldChldmVudCwgW10pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzLmdldChldmVudCkhLnB1c2goaGFuZGxlcik7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYXJyID0gdGhpcy5saXN0ZW5lcnMuZ2V0KGV2ZW50KSB8fCBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzLnNldChldmVudCwgYXJyLmZpbHRlcihoID0+IGggIT09IGhhbmRsZXIpKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBvbk5ld01lc3NhZ2UoY2I6IChtc2c6IGFueSkgPT4gdm9pZCkge1xyXG4gICAgLy8gICAgIHRoaXMuYWRkTGlzdGVuZXIoJ25ld01lc3NhZ2UnLCBjYik7XHJcbiAgICAvLyB9XHJcbiAgICAvL1xyXG4gICAgLy8gb2ZmTmV3TWVzc2FnZShjYj86IChtc2c6IGFueSkgPT4gdm9pZCkge1xyXG4gICAgLy8gICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIoJ25ld01lc3NhZ2UnLCBjYik7XHJcbiAgICAvLyB9XHJcbiAgICAvL1xyXG4gICAgLy8gb25NZXNzYWdlU2VlbihjYjogKGRhdGE6IHsgY2hhdFJvb21JZDogc3RyaW5nOyB1c2VySWQ6IHN0cmluZyB9KSA9PiB2b2lkKSB7XHJcbiAgICAvLyAgICAgdGhpcy5hZGRMaXN0ZW5lcignbWVzc2FnZVNlZW4nLCBjYik7XHJcbiAgICAvLyB9XHJcbiAgICAvL1xyXG4gICAgLy8gb2ZmTWVzc2FnZVNlZW4oY2I/OiAoZGF0YTogYW55KSA9PiB2b2lkKSB7XHJcbiAgICAvLyAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcignbWVzc2FnZVNlZW4nLCBjYik7XHJcbiAgICAvLyB9XHJcbiAgICAvL1xyXG4gICAgLy8gcHJpdmF0ZSBhZGRMaXN0ZW5lcihldmVudDogc3RyaW5nLCBjYjogKGRhdGE6IGFueSkgPT4gdm9pZCkge1xyXG4gICAgLy8gICAgIGlmICghdGhpcy5saXN0ZW5lcnMuaGFzKGV2ZW50KSkge1xyXG4gICAgLy8gICAgICAgICB0aGlzLmxpc3RlbmVycy5zZXQoZXZlbnQsIFtdKTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgdGhpcy5saXN0ZW5lcnMuZ2V0KGV2ZW50KSEucHVzaChjYik7XHJcbiAgICAvLyB9XHJcbiAgICAvL1xyXG4gICAgLy8gcHJpdmF0ZSByZW1vdmVMaXN0ZW5lcihldmVudDogc3RyaW5nLCBjYj86IChkYXRhOiBhbnkpID0+IHZvaWQpIHtcclxuICAgIC8vICAgICBpZiAoIWNiKSB7XHJcbiAgICAvLyAgICAgICAgIHRoaXMubGlzdGVuZXJzLmRlbGV0ZShldmVudCk7XHJcbiAgICAvLyAgICAgICAgIHJldHVybjtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgY29uc3QgYXJyID0gdGhpcy5saXN0ZW5lcnMuZ2V0KGV2ZW50KSB8fCBbXTtcclxuICAgIC8vICAgICB0aGlzLmxpc3RlbmVycy5zZXQoZXZlbnQsIGFyci5maWx0ZXIoaCA9PiBoICE9PSBjYikpO1xyXG4gICAgLy8gfVxyXG59XHJcbiJdfQ==
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ja2V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXdpZGdldC9zcmMvbGliL2NvcmUvc2VydmljZXMvc29ja2V0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRWxELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFHM0MsTUFBTSxPQUFPLGFBQWE7SUFPdEIsWUFBeUMsTUFBa0I7UUFBbEIsV0FBTSxHQUFOLE1BQU0sQ0FBWTtRQUpuRCxjQUFTLEdBQUcsSUFBSSxHQUFHLEVBQW1DLENBQUM7UUFDdkQsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDNUIsZ0JBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFHOUIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFTyxPQUFPO1FBQ1gsSUFBSSxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU87UUFDN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxNQUFNLENBQUMsQ0FBQztRQUU1RCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUU7WUFDdEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDeEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMs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QUFDLENBQUM7WUFFekMsT0FBTyxHQUFHLEVBQUU7Z0JBQ1IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUM1QyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQzlELENBQUMsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzsrR0F0RlEsYUFBYSxrQkFPRixXQUFXO21IQVB0QixhQUFhLGNBREQsTUFBTTs7NEZBQ2xCLGFBQWE7a0JBRHpCLFVBQVU7bUJBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOzswQkFRZixNQUFNOzJCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2luamVjdCwgSW5qZWN0LCBJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtDSEFUX0NPTkZJR30gZnJvbSBcIi4uL2NvbmZpZy9jaGF0LnRva2Vuc1wiO1xyXG5pbXBvcnQge0NoYXRDb25maWd9IGZyb20gXCIuLi9jb25maWcvY2hhdC1jb25maWdcIjtcclxuaW1wb3J0IHtDaGF0U2VydmljZX0gZnJvbSBcIi4vY2hhdC5zZXJ2aWNlXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcclxuZXhwb3J0IGNsYXNzIFNvY2tldFNlcnZpY2Uge1xyXG5cclxuICAgIHByaXZhdGUgc29ja2V0ITogV2ViU29ja2V0O1xyXG4gICAgcHJpdmF0ZSBsaXN0ZW5lcnMgPSBuZXcgTWFwPHN0cmluZywgKChkYXRhOiBhbnkpID0+IHZvaWQpW10+KCk7XHJcbiAgICBwcml2YXRlIGlzQ29ubmVjdGVkID0gZmFsc2U7XHJcbiAgICBjaGF0U2VydmljZSA9IGluamVjdChDaGF0U2VydmljZSk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoQEluamVjdChDSEFUX0NPTkZJRykgcHJpdmF0ZSBjb25maWc6IENoYXRDb25maWcpIHtcclxuICAgICAgICB0aGlzLmNvbm5lY3QoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNvbm5lY3QoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDb25uZWN0ZWQpIHJldHVybjtcclxuICAgICAgICB0aGlzLnNvY2tldCA9IG5ldyBXZWJTb2NrZXQoYCR7dGhpcy5jb25maWcud3NCYXNlVXJsfS93cy9gKTtcclxuXHJcbiAgICAgICAgdGhpcy5zb2NrZXQub25vcGVuID0gKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmlzQ29ubmVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1tXU10gQ29ubmVjdGVkJyk7XHJcbiAgICAgICAgICAgIHRoaXMuam9pblVzZXJDaGFubmVsKHRoaXMuY2hhdFNlcnZpY2UuY3VycmVudFVzZXIoKS51c2VySWQpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuc29ja2V0Lm9ubWVzc2FnZSA9IChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gSlNPTi5wYXJzZShldmVudC5kYXRhKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50VHlwZSA9IG1lc3NhZ2UudHlwZSB8fCBtZXNzYWdlLmV2ZW50O1xyXG4gICAgICAgICAgICBjb25zdCBwYXlsb2FkICAgPSBtZXNzYWdlLnBheWxvYWQgPz8gbWVzc2FnZS5kYXRhO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlcnMgPSB0aGlzLmxpc3RlbmVycy5nZXQoZXZlbnRUeXBlKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChoYW5kbGVycyAmJiBoYW5kbGVycy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGhhbmRsZXJzLmZvckVhY2goaCA9PiBoKHBheWxvYWQpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG5cclxuICAgICAgICB0aGlzLnNvY2tldC5vbmVycm9yID0gKGVycikgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbV1NdIEVycm9yJywgZXJyKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnNvY2tldC5vbmNsb3NlID0gKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmlzQ29ubmVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignW1dTXSBEaXNjb25uZWN0ZWQg4oCTIHJlY29ubmVjdGluZy4uLicpO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY29ubmVjdCgpLCAyMDAwKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGVtaXQoZXZlbnQ6IHN0cmluZywgZGF0YT86IGFueSkge1xyXG4gICAgICAgIGlmICghdGhpcy5pc0Nvbm5lY3RlZCB8fCB0aGlzLnNvY2tldC5yZWFkeVN0YXRlICE9PSBXZWJTb2NrZXQuT1BFTikge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1tXU10gTm90IGNvbm5lY3RlZC4gRHJvcHBpbmcgZXZlbnQ6JywgZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHsgZXZlbnQsIGRhdGEgfSkpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBqb2luUm9vbShyb29tSWQ6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuZW1pdCgnam9pblJvb20nLCByb29tSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGpvaW5Vc2VyQ2hhbm5lbCh1c2VySWQ6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuZW1pdCgnam9pblVzZXJDaGFubmVsJywgdXNlcklkKTtcclxuICAgIH1cclxuXHJcbiAgICBzZW5kTWVzc2FnZShkYXRhOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmVtaXQoJ3NlbmRNZXNzYWdlJywgZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgbWVzc2FnZVNlZW4oZGF0YTogeyBjaGF0Um9vbUlkOiBzdHJpbmc7IHVzZXJJZDogc3RyaW5nIH0pIHtcclxuICAgICAgICB0aGlzLmVtaXQoJ21lc3NhZ2VTZWVuJywgZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgb248VD4oZXZlbnQ6IHN0cmluZyk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShzdWIgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVyID0gKGRhdGE6IFQpID0+IHN1Yi5uZXh0KGRhdGEpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLmxpc3RlbmVycy5oYXMoZXZlbnQpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVycy5zZXQoZXZlbnQsIFtdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmxpc3RlbmVycy5nZXQoZXZlbnQpIS5wdXNoKGhhbmRsZXIpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFyciA9IHRoaXMubGlzdGVuZXJzLmdldChldmVudCkgfHwgW107XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVycy5zZXQoZXZlbnQsIGFyci5maWx0ZXIoaCA9PiBoICE9PSBoYW5kbGVyKSk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gb25OZXdNZXNzYWdlKGNiOiAobXNnOiBhbnkpID0+IHZvaWQpIHtcclxuICAgIC8vICAgICB0aGlzLmFkZExpc3RlbmVyKCduZXdNZXNzYWdlJywgY2IpO1xyXG4gICAgLy8gfVxyXG4gICAgLy9cclxuICAgIC8vIG9mZk5ld01lc3NhZ2UoY2I/OiAobXNnOiBhbnkpID0+IHZvaWQpIHtcclxuICAgIC8vICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKCduZXdNZXNzYWdlJywgY2IpO1xyXG4gICAgLy8gfVxyXG4gICAgLy9cclxuICAgIC8vIG9uTWVzc2FnZVNlZW4oY2I6IChkYXRhOiB7IGNoYXRSb29tSWQ6IHN0cmluZzsgdXNlcklkOiBzdHJpbmcgfSkgPT4gdm9pZCkge1xyXG4gICAgLy8gICAgIHRoaXMuYWRkTGlzdGVuZXIoJ21lc3NhZ2VTZWVuJywgY2IpO1xyXG4gICAgLy8gfVxyXG4gICAgLy9cclxuICAgIC8vIG9mZk1lc3NhZ2VTZWVuKGNiPzogKGRhdGE6IGFueSkgPT4gdm9pZCkge1xyXG4gICAgLy8gICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIoJ21lc3NhZ2VTZWVuJywgY2IpO1xyXG4gICAgLy8gfVxyXG4gICAgLy9cclxuICAgIC8vIHByaXZhdGUgYWRkTGlzdGVuZXIoZXZlbnQ6IHN0cmluZywgY2I6IChkYXRhOiBhbnkpID0+IHZvaWQpIHtcclxuICAgIC8vICAgICBpZiAoIXRoaXMubGlzdGVuZXJzLmhhcyhldmVudCkpIHtcclxuICAgIC8vICAgICAgICAgdGhpcy5saXN0ZW5lcnMuc2V0KGV2ZW50LCBbXSk7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICAgIHRoaXMubGlzdGVuZXJzLmdldChldmVudCkhLnB1c2goY2IpO1xyXG4gICAgLy8gfVxyXG4gICAgLy9cclxuICAgIC8vIHByaXZhdGUgcmVtb3ZlTGlzdGVuZXIoZXZlbnQ6IHN0cmluZywgY2I/OiAoZGF0YTogYW55KSA9PiB2b2lkKSB7XHJcbiAgICAvLyAgICAgaWYgKCFjYikge1xyXG4gICAgLy8gICAgICAgICB0aGlzLmxpc3RlbmVycy5kZWxldGUoZXZlbnQpO1xyXG4gICAgLy8gICAgICAgICByZXR1cm47XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICAgIGNvbnN0IGFyciA9IHRoaXMubGlzdGVuZXJzLmdldChldmVudCkgfHwgW107XHJcbiAgICAvLyAgICAgdGhpcy5saXN0ZW5lcnMuc2V0KGV2ZW50LCBhcnIuZmlsdGVyKGggPT4gaCAhPT0gY2IpKTtcclxuICAgIC8vIH1cclxufVxyXG4iXX0=
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, Inject, Injectable, signal, EventEmitter, input, inject, ViewChild, Output, Input, Component, effect, ViewEncapsulation, APP_INITIALIZER, NgModule } from '@angular/core';
2
+ import { InjectionToken, inject, Inject, Injectable, signal, EventEmitter, input, ViewChild, Output, Input, Component, effect, ViewEncapsulation, computed, NgModule } from '@angular/core';
3
3
  import * as i1$1 from '@angular/common';
4
4
  import { CommonModule } from '@angular/common';
5
5
  import * as i2 from '@angular/forms';
@@ -35,6 +35,7 @@ class SocketService {
35
35
  this.config = config;
36
36
  this.listeners = new Map();
37
37
  this.isConnected = false;
38
+ this.chatService = inject(ChatService);
38
39
  this.connect();
39
40
  }
40
41
  connect() {
@@ -44,6 +45,7 @@ class SocketService {
44
45
  this.socket.onopen = () => {
45
46
  this.isConnected = true;
46
47
  console.log('[WS] Connected');
48
+ this.joinUserChannel(this.chatService.currentUser().userId);
47
49
  };
48
50
  this.socket.onmessage = (event) => {
49
51
  const message = JSON.parse(event.data);
@@ -248,10 +250,6 @@ class ChatService {
248
250
  this.hasNewNotification.set(false);
249
251
  }, 1200);
250
252
  }
251
- handleIncomingMessage(msg) {
252
- this.notifications.update(n => [...n, msg]);
253
- this.hasNewNotification.set(true);
254
- }
255
253
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChatService, deps: [{ token: i1.HttpClient }, { token: CHAT_CONFIG }, { token: SocketService }], target: i0.ɵɵFactoryTarget.Injectable }); }
256
254
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChatService, providedIn: 'root' }); }
257
255
  }
@@ -288,9 +286,7 @@ class ChatWindowComponent {
288
286
  this.hoveredReactionUsers = [];
289
287
  }
290
288
  ngOnInit() {
291
- if (this.chatRoomId) {
292
- this.socket.joinRoom(this.chatRoomId);
293
- }
289
+ this.socket.joinRoom(this.chatRoomId);
294
290
  this.loadUsers();
295
291
  this.loadMessages();
296
292
  this.listenSocket();
@@ -315,10 +311,24 @@ class ChatWindowComponent {
315
311
  if (msg.chatRoomId === this.chatRoomId) {
316
312
  this.messages.update(list => [...list, msg]);
317
313
  }
314
+ // if (msg.senderId !== this.chatService.currentUser().userId) {
315
+ // this.messageService.add({
316
+ // severity: 'info',
317
+ // summary: this.header,
318
+ // detail: msg.content ?? 'New message',
319
+ // life: 2500
320
+ // });
321
+ // }
318
322
  });
319
323
  this.socket.on('roomUserAdded').subscribe((msg) => {
320
324
  if (msg.chatRoomId === this.chatRoomId) {
321
325
  this.loadUsers();
326
+ // this.messageService.add({
327
+ // severity: 'info',
328
+ // summary: 'User Added',
329
+ // detail: msg.user?.userName,
330
+ // life: 2500
331
+ // });
322
332
  }
323
333
  });
324
334
  this.socket.on('addedToRoom').subscribe((msg) => {
@@ -328,6 +338,14 @@ class ChatWindowComponent {
328
338
  }
329
339
  });
330
340
  this.socket.on('userAlreadyInRoom').subscribe((msg) => {
341
+ // if (msg.chatRoomId === this.chatRoomId) {
342
+ // this.messageService.add({
343
+ // severity: 'info',
344
+ // summary: 'User Already Added',
345
+ // detail: msg.user?.userName,
346
+ // life: 2500
347
+ // });
348
+ // }
331
349
  });
332
350
  }
333
351
  send() {
@@ -465,6 +483,7 @@ class ChatLauncherComponent {
465
483
  }, { allowSignalWrites: true });
466
484
  }
467
485
  ngOnInit() {
486
+ console.log('ChatLauncher initialized');
468
487
  }
469
488
  openNewRoom(roomId, roomHeader, metadata, userId, username, chatUsers) {
470
489
  this.isVisible.set(true);
@@ -482,21 +501,21 @@ class ChatLauncherComponent {
482
501
  }
483
502
  const newIndex = windows.length;
484
503
  this.openWindows.update(ws => [...ws, { roomId, header, metadata }]);
504
+ // ✅ force real change: -1 → 0
485
505
  setTimeout(() => {
486
506
  this.activeIndex.set(newIndex);
487
507
  }, 500);
488
508
  }
489
509
  closeWindow(roomId) {
490
510
  this.openWindows.update(ws => ws.filter(w => w.roomId !== roomId));
491
- const windows = this.openWindows();
492
- const newIndex = windows.length;
493
- this.activeIndex.set(newIndex);
494
511
  }
495
512
  setActive(i) {
496
513
  this.activeIndex.set(i);
497
514
  }
498
515
  closeAll() {
499
516
  this.openWindows.set([]);
517
+ // this.lastOpenedRoom.set(null);
518
+ // this.activeIndex.set(0);
500
519
  this.isVisible.set(false);
501
520
  }
502
521
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChatLauncherComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
@@ -613,103 +632,33 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
613
632
  type: Output
614
633
  }] } });
615
634
 
616
- class NotificationService {
617
- constructor(socketService) {
618
- this.socketService = socketService;
619
- }
620
- notifications$() {
621
- return this.socketService.on('notifications');
622
- }
623
- getTotalCount(notifications) {
624
- return notifications.reduce((sum, n) => sum + (n.count || 0), 0);
625
- }
626
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NotificationService, deps: [{ token: SocketService }], target: i0.ɵɵFactoryTarget.Injectable }); }
627
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NotificationService, providedIn: 'root' }); }
628
- }
629
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NotificationService, decorators: [{
630
- type: Injectable,
631
- args: [{ providedIn: 'root' }]
632
- }], ctorParameters: () => [{ type: SocketService }] });
633
-
634
635
  class ChatWidgetNotificationComponent {
635
636
  constructor() {
636
637
  this.open = false;
637
638
  this.chatService = inject(ChatService);
638
- this.socketService = inject(SocketService);
639
- this.notificationService = inject(NotificationService);
640
- this.notifications = [];
641
- this.totalCount = 0;
642
- this.user = input(null);
643
- }
644
- ngOnInit() {
645
- if (!this.user) {
646
- console.error('user is required');
647
- return;
648
- }
649
- this.notificationService.notifications$()
650
- .subscribe((notifications) => {
651
- this.notifications = notifications;
652
- this.totalCount =
653
- this.notificationService.getTotalCount(notifications);
654
- });
639
+ this.notifications = this.chatService.notifications;
640
+ this.hasNew = this.chatService.hasNewNotification;
641
+ this.totalCount = computed(() => this.notifications().reduce((a, b) => a + b.unreadCount, 0));
655
642
  }
656
643
  toggle() {
657
644
  this.open = !this.open;
658
645
  }
659
646
  openRoom(n) {
647
+ // this.chatLauncher.openRoom(n.roomId);
660
648
  this.chatService.clearRoom(n.roomId);
661
649
  this.open = false;
662
- // this.http.post(
663
- // `/api/chat/notifications/${notification.id}/read`,
664
- // { userId: this.currentUserId }
665
- // ).subscribe();
666
650
  }
667
651
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChatWidgetNotificationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
668
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ChatWidgetNotificationComponent, isStandalone: true, selector: "chat-widget-notification", inputs: { user: { classPropertyName: "user", publicName: "user", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div (click)=\"toggle()\" class=\"notif-icon\">\r\n <i class=\"pi pi-bell\" [class.pulse]=\"totalCount > 0\"></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 notifications; track n.id) {\r\n <div class=\"notif-item\" (click)=\"openRoom(n)\" [attr.data-type]=\"n.type\">\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\">\r\n Room {{ n.room_id }}\r\n </div>\r\n\r\n <div class=\"notif-text\">\r\n {{ n.description }}\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-list{max-height:360px;overflow-y:auto}.notif-item{display:flex;align-items:center;padding:12px 14px;cursor:pointer;transition:background .15s ease;border-bottom:1px solid #eee}.notif-item:last-child{border-bottom:none}.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;flex-shrink:0}.notif-body{flex:1;min-width:0}.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{margin-left:10px;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;flex-shrink:0}.notif-item[data-type=NEW_MESSAGE] .notif-left{background:#e3f2fd;color:#1976d2}.notif-item[data-type=USER_ADDED] .notif-left{background:#e8f5e9;color:#2e7d32}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }] }); }
652
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ChatWidgetNotificationComponent, isStandalone: true, selector: "chat-widget-notification", ngImport: i0, template: "<div (click)=\"toggle()\" class=\"notif-icon\">\r\n <i class=\"pi pi-bell\" [class.pulse]=\"hasNew()\"></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-header\">Notifications</div>-->\r\n\r\n <div class=\"notif-list\">\r\n @for (n of notifications(); track n.roomId) {\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.roomName }}</div>\r\n <div class=\"notif-text\">\r\n {{ n.lastMessage || 'You were added to this room' }}\r\n </div>\r\n </div>\r\n\r\n <span class=\"count\">{{ n.unreadCount }}</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}.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"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }] }); }
669
653
  }
670
654
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChatWidgetNotificationComponent, decorators: [{
671
655
  type: Component,
672
656
  args: [{ selector: 'chat-widget-notification', standalone: true, imports: [
673
657
  CommonModule,
674
658
  FormsModule
675
- ], template: "<div (click)=\"toggle()\" class=\"notif-icon\">\r\n <i class=\"pi pi-bell\" [class.pulse]=\"totalCount > 0\"></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 notifications; track n.id) {\r\n <div class=\"notif-item\" (click)=\"openRoom(n)\" [attr.data-type]=\"n.type\">\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\">\r\n Room {{ n.room_id }}\r\n </div>\r\n\r\n <div class=\"notif-text\">\r\n {{ n.description }}\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-list{max-height:360px;overflow-y:auto}.notif-item{display:flex;align-items:center;padding:12px 14px;cursor:pointer;transition:background .15s ease;border-bottom:1px solid #eee}.notif-item:last-child{border-bottom:none}.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;flex-shrink:0}.notif-body{flex:1;min-width:0}.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{margin-left:10px;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;flex-shrink:0}.notif-item[data-type=NEW_MESSAGE] .notif-left{background:#e3f2fd;color:#1976d2}.notif-item[data-type=USER_ADDED] .notif-left{background:#e8f5e9;color:#2e7d32}\n"] }]
659
+ ], template: "<div (click)=\"toggle()\" class=\"notif-icon\">\r\n <i class=\"pi pi-bell\" [class.pulse]=\"hasNew()\"></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-header\">Notifications</div>-->\r\n\r\n <div class=\"notif-list\">\r\n @for (n of notifications(); track n.roomId) {\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.roomName }}</div>\r\n <div class=\"notif-text\">\r\n {{ n.lastMessage || 'You were added to this room' }}\r\n </div>\r\n </div>\r\n\r\n <span class=\"count\">{{ n.unreadCount }}</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}.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"] }]
676
660
  }], ctorParameters: () => [] });
677
661
 
678
- class ChatWidgetBootstrapService {
679
- constructor(socketService, chatService, config) {
680
- this.socketService = socketService;
681
- this.chatService = chatService;
682
- this.config = config;
683
- this.initialized = false;
684
- effect(() => {
685
- const user = this.chatService.currentUser();
686
- if (!user?.userId || this.initialized)
687
- return;
688
- console.log('[ChatWidget] user available → join channel', user.userId);
689
- this.initialized = true;
690
- setTimeout(() => {
691
- this.socketService.joinUserChannel(user.userId);
692
- }, 800);
693
- this.socketService.on('notifications').subscribe(msg => {
694
- console.log('[ChatWidget] new notification', msg);
695
- this.chatService.handleIncomingMessage(msg);
696
- });
697
- });
698
- }
699
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChatWidgetBootstrapService, deps: [{ token: SocketService }, { token: ChatService }, { token: CHAT_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable }); }
700
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChatWidgetBootstrapService, providedIn: 'root' }); }
701
- }
702
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChatWidgetBootstrapService, decorators: [{
703
- type: Injectable,
704
- args: [{ providedIn: 'root' }]
705
- }], ctorParameters: () => [{ type: SocketService }, { type: ChatService }, { type: undefined, decorators: [{
706
- type: Inject,
707
- args: [CHAT_CONFIG]
708
- }] }] });
709
-
710
- function chatWidgetInitializer(bootstrap) {
711
- return () => { };
712
- }
713
662
  class ChatWidgetModule {
714
663
  static forRoot(config) {
715
664
  return {
@@ -728,14 +677,7 @@ class ChatWidgetModule {
728
677
  ChatWindowComponent,
729
678
  AllChatsComponent,
730
679
  ChatWidgetNotificationComponent], exports: [ChatLauncherComponent] }); }
731
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChatWidgetModule, providers: [
732
- {
733
- provide: APP_INITIALIZER,
734
- useFactory: chatWidgetInitializer,
735
- deps: [ChatWidgetBootstrapService],
736
- multi: true
737
- }
738
- ], imports: [CommonModule,
680
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChatWidgetModule, imports: [CommonModule,
739
681
  ChatLauncherComponent,
740
682
  ChatWindowComponent,
741
683
  AllChatsComponent,
@@ -752,21 +694,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
752
694
  AllChatsComponent,
753
695
  ChatWidgetNotificationComponent
754
696
  ],
755
- exports: [ChatLauncherComponent],
756
- providers: [
757
- {
758
- provide: APP_INITIALIZER,
759
- useFactory: chatWidgetInitializer,
760
- deps: [ChatWidgetBootstrapService],
761
- multi: true
762
- }
763
- ]
697
+ exports: [ChatLauncherComponent]
764
698
  }]
765
699
  }] });
766
700
 
767
701
  class ChatWidgetService {
768
- constructor(chatService) {
769
- this.chatService = chatService;
702
+ constructor() {
703
+ this.chatService = inject(ChatService);
704
+ this.socketService = inject(SocketService);
770
705
  }
771
706
  initUser(user) {
772
707
  this.chatService.currentUser.set({
@@ -775,13 +710,13 @@ class ChatWidgetService {
775
710
  name: user.name
776
711
  });
777
712
  }
778
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChatWidgetService, deps: [{ token: ChatService }], target: i0.ɵɵFactoryTarget.Injectable }); }
713
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChatWidgetService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
779
714
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChatWidgetService, providedIn: 'root' }); }
780
715
  }
781
716
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChatWidgetService, decorators: [{
782
717
  type: Injectable,
783
718
  args: [{ providedIn: 'root' }]
784
- }], ctorParameters: () => [{ type: ChatService }] });
719
+ }], ctorParameters: () => [] });
785
720
 
786
721
  /*
787
722
  * Public API Surface of chat-widget
@@ -791,5 +726,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
791
726
  * Generated bundle index. Do not edit.
792
727
  */
793
728
 
794
- export { AllChatsComponent, ChatLauncherComponent, ChatWidgetModule, ChatWidgetNotificationComponent, ChatWidgetService, chatWidgetInitializer };
729
+ export { AllChatsComponent, ChatLauncherComponent, ChatWidgetModule, ChatWidgetNotificationComponent, ChatWidgetService };
795
730
  //# sourceMappingURL=arthakosh-chat-widget.mjs.map