@hsaadawy/ngx-chat
Version:
45 lines • 6.34 kB
JavaScript
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==