UNPKG

@hsaadawy/ngx-chat

Version:
45 lines 6.34 kB
import { Injectable } from '@angular/core'; import { BehaviorSubject, Subject } from 'rxjs'; /** * Used to determine if a message component for a given recipient is open. */ export class ChatMessageListRegistryService { constructor() { this.openChats$ = new BehaviorSubject(new Set()); this.chatOpened$ = new Subject(); this.recipientToOpenMessageListCount = new Map(); } isChatOpen(recipient) { return this.getOrDefault(recipient, 0) > 0; } incrementOpenWindowCount(recipient) { const wasWindowOpen = this.isChatOpen(recipient); this.recipientToOpenMessageListCount.set(recipient, this.getOrDefault(recipient, 0) + 1); const openWindowSet = this.openChats$.getValue(); openWindowSet.add(recipient); this.openChats$.next(openWindowSet); if (!wasWindowOpen) { this.chatOpened$.next(recipient); } } decrementOpenWindowCount(recipient) { const newValue = this.getOrDefault(recipient, 0) - 1; if (newValue <= 0) { this.recipientToOpenMessageListCount.set(recipient, 0); const openWindowSet = this.openChats$.getValue(); openWindowSet.delete(recipient); this.openChats$.next(openWindowSet); } else { this.recipientToOpenMessageListCount.set(recipient, newValue); } } getOrDefault(recipient, defaultValue) { return this.recipientToOpenMessageListCount.get(recipient) || defaultValue; } } ChatMessageListRegistryService.decorators = [ { type: Injectable } ]; ChatMessageListRegistryService.ctorParameters = () => []; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1tZXNzYWdlLWxpc3QtcmVnaXN0cnkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BhenpuZXR3b3JrL25neC1jaGF0L3NyYy9saWIvc2VydmljZXMvY2hhdC1tZXNzYWdlLWxpc3QtcmVnaXN0cnkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR2hEOztHQUVHO0FBRUgsTUFBTSxPQUFPLDhCQUE4QjtJQU12QztRQUpPLGVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBaUIsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzVELGdCQUFXLEdBQUcsSUFBSSxPQUFPLEVBQWEsQ0FBQztRQUN0QyxvQ0FBK0IsR0FBRyxJQUFJLEdBQUcsRUFBcUIsQ0FBQztJQUd2RSxDQUFDO0lBRUQsVUFBVSxDQUFDLFNBQW9CO1FBQzNCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxTQUFvQjtRQUN6QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQywrQkFBK0IsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3pGLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakQsYUFBYSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3BDO0lBQ0wsQ0FBQztJQUVELHdCQUF3QixDQUFDLFNBQW9CO1FBQ3pDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyRCxJQUFJLFFBQVEsSUFBSSxDQUFDLEVBQUU7WUFDZixJQUFJLENBQUMsK0JBQStCLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN2RCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2pELGFBQWEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDdkM7YUFBTTtZQUNILElBQUksQ0FBQywrQkFBK0IsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ2pFO0lBQ0wsQ0FBQztJQUVPLFlBQVksQ0FBQyxTQUFvQixFQUFFLFlBQW9CO1FBQzNELE9BQU8sSUFBSSxDQUFDLCtCQUErQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxZQUFZLENBQUM7SUFDL0UsQ0FBQzs7O1lBdkNKLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBSZWNpcGllbnQgfSBmcm9tICcuLi9jb3JlL3JlY2lwaWVudCc7XHJcblxyXG4vKipcclxuICogVXNlZCB0byBkZXRlcm1pbmUgaWYgYSBtZXNzYWdlIGNvbXBvbmVudCBmb3IgYSBnaXZlbiByZWNpcGllbnQgaXMgb3Blbi5cclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIENoYXRNZXNzYWdlTGlzdFJlZ2lzdHJ5U2VydmljZSB7XHJcblxyXG4gICAgcHVibGljIG9wZW5DaGF0cyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNldDxSZWNpcGllbnQ+PihuZXcgU2V0KCkpO1xyXG4gICAgcHVibGljIGNoYXRPcGVuZWQkID0gbmV3IFN1YmplY3Q8UmVjaXBpZW50PigpO1xyXG4gICAgcHJpdmF0ZSByZWNpcGllbnRUb09wZW5NZXNzYWdlTGlzdENvdW50ID0gbmV3IE1hcDxSZWNpcGllbnQsIG51bWJlcj4oKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIH1cclxuXHJcbiAgICBpc0NoYXRPcGVuKHJlY2lwaWVudDogUmVjaXBpZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3JEZWZhdWx0KHJlY2lwaWVudCwgMCkgPiAwO1xyXG4gICAgfVxyXG5cclxuICAgIGluY3JlbWVudE9wZW5XaW5kb3dDb3VudChyZWNpcGllbnQ6IFJlY2lwaWVudCkge1xyXG4gICAgICAgIGNvbnN0IHdhc1dpbmRvd09wZW4gPSB0aGlzLmlzQ2hhdE9wZW4ocmVjaXBpZW50KTtcclxuICAgICAgICB0aGlzLnJlY2lwaWVudFRvT3Blbk1lc3NhZ2VMaXN0Q291bnQuc2V0KHJlY2lwaWVudCwgdGhpcy5nZXRPckRlZmF1bHQocmVjaXBpZW50LCAwKSArIDEpO1xyXG4gICAgICAgIGNvbnN0IG9wZW5XaW5kb3dTZXQgPSB0aGlzLm9wZW5DaGF0cyQuZ2V0VmFsdWUoKTtcclxuICAgICAgICBvcGVuV2luZG93U2V0LmFkZChyZWNpcGllbnQpO1xyXG4gICAgICAgIHRoaXMub3BlbkNoYXRzJC5uZXh0KG9wZW5XaW5kb3dTZXQpO1xyXG4gICAgICAgIGlmICghd2FzV2luZG93T3Blbikge1xyXG4gICAgICAgICAgICB0aGlzLmNoYXRPcGVuZWQkLm5leHQocmVjaXBpZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZGVjcmVtZW50T3BlbldpbmRvd0NvdW50KHJlY2lwaWVudDogUmVjaXBpZW50KSB7XHJcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLmdldE9yRGVmYXVsdChyZWNpcGllbnQsIDApIC0gMTtcclxuICAgICAgICBpZiAobmV3VmFsdWUgPD0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlY2lwaWVudFRvT3Blbk1lc3NhZ2VMaXN0Q291bnQuc2V0KHJlY2lwaWVudCwgMCk7XHJcbiAgICAgICAgICAgIGNvbnN0IG9wZW5XaW5kb3dTZXQgPSB0aGlzLm9wZW5DaGF0cyQuZ2V0VmFsdWUoKTtcclxuICAgICAgICAgICAgb3BlbldpbmRvd1NldC5kZWxldGUocmVjaXBpZW50KTtcclxuICAgICAgICAgICAgdGhpcy5vcGVuQ2hhdHMkLm5leHQob3BlbldpbmRvd1NldCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yZWNpcGllbnRUb09wZW5NZXNzYWdlTGlzdENvdW50LnNldChyZWNpcGllbnQsIG5ld1ZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRPckRlZmF1bHQocmVjaXBpZW50OiBSZWNpcGllbnQsIGRlZmF1bHRWYWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVjaXBpZW50VG9PcGVuTWVzc2FnZUxpc3RDb3VudC5nZXQocmVjaXBpZW50KSB8fCBkZWZhdWx0VmFsdWU7XHJcbiAgICB9XHJcblxyXG59XHJcbiJdfQ==