UNPKG

@hsaadawy/ngx-chat

Version:
74 lines 10.7 kB
import { Inject, Injectable } from '@angular/core'; import { BehaviorSubject } from 'rxjs'; import { filter } from 'rxjs/operators'; import { CHAT_SERVICE_TOKEN } from './chat-service'; export class ChatWindowState { constructor(recipient, isCollapsed) { this.recipient = recipient; this.isCollapsed = isCollapsed; } } /** * Used to open chat windows programmatically. */ export class ChatListStateService { constructor(chatService) { this.chatService = chatService; this.openChats$ = new BehaviorSubject([]); this.openTracks$ = new BehaviorSubject([]); this.chatService.state$ .pipe(filter(newState => newState === 'disconnected')) .subscribe(() => { this.openChats$.next([]); }); this.chatService.contactRequestsReceived$.subscribe(contacts => { for (const contact of contacts) { this.openChat(contact); } }); } openChatCollapsed(recipient) { if (!this.isChatWithRecipientOpen(recipient)) { const openChats = this.openChats$.getValue(); const chatWindow = new ChatWindowState(recipient, true); const copyWithNewContact = [chatWindow].concat(openChats); this.openChats$.next(copyWithNewContact); } } openChat(recipient) { this.openChatCollapsed(recipient); this.findChatWindowStateByRecipient(recipient).isCollapsed = false; } closeChat(recipient) { const openChats = this.openChats$.getValue(); const index = this.findChatWindowStateIndexByRecipient(recipient); if (index >= 0) { const copyWithoutContact = openChats.slice(); copyWithoutContact.splice(index, 1); this.openChats$.next(copyWithoutContact); } } openTrack(track) { this.openTracks$.next(this.openTracks$.getValue().concat([track])); } closeTrack(track) { this.openTracks$.next(this.openTracks$.getValue().filter(s => s !== track)); } isChatWithRecipientOpen(recipient) { return this.findChatWindowStateByRecipient(recipient) !== undefined; } findChatWindowStateIndexByRecipient(recipient) { return this.openChats$.getValue() .findIndex((chatWindowState) => chatWindowState.recipient.equalsBareJid(recipient)); } findChatWindowStateByRecipient(recipient) { return this.openChats$.getValue().find(chat => chat.recipient.equalsBareJid(recipient)); } } ChatListStateService.decorators = [ { type: Injectable } ]; ChatListStateService.ctorParameters = () => [ { type: undefined, decorators: [{ type: Inject, args: [CHAT_SERVICE_TOKEN,] }] } ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1saXN0LXN0YXRlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYXp6bmV0d29yay9uZ3gtY2hhdC9zcmMvbGliL3NlcnZpY2VzL2NoYXQtbGlzdC1zdGF0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhDLE9BQU8sRUFBRSxrQkFBa0IsRUFBZSxNQUFNLGdCQUFnQixDQUFDO0FBRWpFLE1BQU0sT0FBTyxlQUFlO0lBQ3hCLFlBQXFCLFNBQW9CLEVBQ3RCLFdBQW9CO1FBRGxCLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDdEIsZ0JBQVcsR0FBWCxXQUFXLENBQVM7SUFDdkMsQ0FBQztDQUNKO0FBTUQ7O0dBRUc7QUFFSCxNQUFNLE9BQU8sb0JBQW9CO0lBSzdCLFlBQWdELFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBSGpFLGVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBb0IsRUFBRSxDQUFDLENBQUM7UUFDeEQsZ0JBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBb0IsRUFBRSxDQUFDLENBQUM7UUFHNUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNO2FBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEtBQUssY0FBYyxDQUFDLENBQUM7YUFDckQsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBRVAsSUFBSSxDQUFDLFdBQVcsQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDM0QsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDMUI7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxTQUFvQjtRQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQzFDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDN0MsTUFBTSxVQUFVLEdBQUcsSUFBSSxlQUFlLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3hELE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDMUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztTQUM1QztJQUNMLENBQUM7SUFFTSxRQUFRLENBQUMsU0FBb0I7UUFDaEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQ3ZFLENBQUM7SUFFTSxTQUFTLENBQUMsU0FBb0I7UUFDakMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM3QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsbUNBQW1DLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbEUsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO1lBQ1osTUFBTSxrQkFBa0IsR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDN0Msa0JBQWtCLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1NBQzVDO0lBQ0wsQ0FBQztJQUVNLFNBQVMsQ0FBQyxLQUFzQjtRQUNuQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRU0sVUFBVSxDQUFDLEtBQXNCO1FBQ3BDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUNqQixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FDdkQsQ0FBQztJQUNOLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxTQUFvQjtRQUN4QyxPQUFPLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxTQUFTLENBQUMsS0FBSyxTQUFTLENBQUM7SUFDeEUsQ0FBQztJQUVPLG1DQUFtQyxDQUFDLFNBQW9CO1FBQzVELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUU7YUFDNUIsU0FBUyxDQUFDLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQzVGLENBQUM7SUFFTyw4QkFBOEIsQ0FBQyxTQUFvQjtRQUN2RCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUM1RixDQUFDOzs7WUFqRUosVUFBVTs7OzRDQU1NLE1BQU0sU0FBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUmVjaXBpZW50IH0gZnJvbSAnLi4vY29yZS9yZWNpcGllbnQnO1xyXG5pbXBvcnQgeyBDSEFUX1NFUlZJQ0VfVE9LRU4sIENoYXRTZXJ2aWNlIH0gZnJvbSAnLi9jaGF0LXNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENoYXRXaW5kb3dTdGF0ZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSByZWNpcGllbnQ6IFJlY2lwaWVudCxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBpc0NvbGxhcHNlZDogYm9vbGVhbikge1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEF0dGFjaGFibGVUcmFjayB7XHJcbiAgICBhdHRhY2goZWxlbTogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBVc2VkIHRvIG9wZW4gY2hhdCB3aW5kb3dzIHByb2dyYW1tYXRpY2FsbHkuXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBDaGF0TGlzdFN0YXRlU2VydmljZSB7XHJcblxyXG4gICAgcHVibGljIG9wZW5DaGF0cyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENoYXRXaW5kb3dTdGF0ZVtdPihbXSk7XHJcbiAgICBwdWJsaWMgb3BlblRyYWNrcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEF0dGFjaGFibGVUcmFja1tdPihbXSk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoQEluamVjdChDSEFUX1NFUlZJQ0VfVE9LRU4pIHByaXZhdGUgY2hhdFNlcnZpY2U6IENoYXRTZXJ2aWNlKSB7XHJcbiAgICAgICAgdGhpcy5jaGF0U2VydmljZS5zdGF0ZSRcclxuICAgICAgICAgICAgLnBpcGUoZmlsdGVyKG5ld1N0YXRlID0+IG5ld1N0YXRlID09PSAnZGlzY29ubmVjdGVkJykpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuQ2hhdHMkLm5leHQoW10pO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5jaGF0U2VydmljZS5jb250YWN0UmVxdWVzdHNSZWNlaXZlZCQuc3Vic2NyaWJlKGNvbnRhY3RzID0+IHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBjb250YWN0IG9mIGNvbnRhY3RzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5DaGF0KGNvbnRhY3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvcGVuQ2hhdENvbGxhcHNlZChyZWNpcGllbnQ6IFJlY2lwaWVudCkge1xyXG4gICAgICAgIGlmICghdGhpcy5pc0NoYXRXaXRoUmVjaXBpZW50T3BlbihyZWNpcGllbnQpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9wZW5DaGF0cyA9IHRoaXMub3BlbkNoYXRzJC5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICBjb25zdCBjaGF0V2luZG93ID0gbmV3IENoYXRXaW5kb3dTdGF0ZShyZWNpcGllbnQsIHRydWUpO1xyXG4gICAgICAgICAgICBjb25zdCBjb3B5V2l0aE5ld0NvbnRhY3QgPSBbY2hhdFdpbmRvd10uY29uY2F0KG9wZW5DaGF0cyk7XHJcbiAgICAgICAgICAgIHRoaXMub3BlbkNoYXRzJC5uZXh0KGNvcHlXaXRoTmV3Q29udGFjdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvcGVuQ2hhdChyZWNpcGllbnQ6IFJlY2lwaWVudCkge1xyXG4gICAgICAgIHRoaXMub3BlbkNoYXRDb2xsYXBzZWQocmVjaXBpZW50KTtcclxuICAgICAgICB0aGlzLmZpbmRDaGF0V2luZG93U3RhdGVCeVJlY2lwaWVudChyZWNpcGllbnQpLmlzQ29sbGFwc2VkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsb3NlQ2hhdChyZWNpcGllbnQ6IFJlY2lwaWVudCkge1xyXG4gICAgICAgIGNvbnN0IG9wZW5DaGF0cyA9IHRoaXMub3BlbkNoYXRzJC5nZXRWYWx1ZSgpO1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5maW5kQ2hhdFdpbmRvd1N0YXRlSW5kZXhCeVJlY2lwaWVudChyZWNpcGllbnQpO1xyXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvcHlXaXRob3V0Q29udGFjdCA9IG9wZW5DaGF0cy5zbGljZSgpO1xyXG4gICAgICAgICAgICBjb3B5V2l0aG91dENvbnRhY3Quc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgdGhpcy5vcGVuQ2hhdHMkLm5leHQoY29weVdpdGhvdXRDb250YWN0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9wZW5UcmFjayh0cmFjazogQXR0YWNoYWJsZVRyYWNrKSB7XHJcbiAgICAgICAgdGhpcy5vcGVuVHJhY2tzJC5uZXh0KHRoaXMub3BlblRyYWNrcyQuZ2V0VmFsdWUoKS5jb25jYXQoW3RyYWNrXSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbG9zZVRyYWNrKHRyYWNrOiBBdHRhY2hhYmxlVHJhY2spIHtcclxuICAgICAgICB0aGlzLm9wZW5UcmFja3MkLm5leHQoXHJcbiAgICAgICAgICAgIHRoaXMub3BlblRyYWNrcyQuZ2V0VmFsdWUoKS5maWx0ZXIocyA9PiBzICE9PSB0cmFjaylcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlzQ2hhdFdpdGhSZWNpcGllbnRPcGVuKHJlY2lwaWVudDogUmVjaXBpZW50KTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZENoYXRXaW5kb3dTdGF0ZUJ5UmVjaXBpZW50KHJlY2lwaWVudCkgIT09IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZpbmRDaGF0V2luZG93U3RhdGVJbmRleEJ5UmVjaXBpZW50KHJlY2lwaWVudDogUmVjaXBpZW50KTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vcGVuQ2hhdHMkLmdldFZhbHVlKClcclxuICAgICAgICAgICAgLmZpbmRJbmRleCgoY2hhdFdpbmRvd1N0YXRlKSA9PiBjaGF0V2luZG93U3RhdGUucmVjaXBpZW50LmVxdWFsc0JhcmVKaWQocmVjaXBpZW50KSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBmaW5kQ2hhdFdpbmRvd1N0YXRlQnlSZWNpcGllbnQocmVjaXBpZW50OiBSZWNpcGllbnQpOiBDaGF0V2luZG93U3RhdGUgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9wZW5DaGF0cyQuZ2V0VmFsdWUoKS5maW5kKGNoYXQgPT4gY2hhdC5yZWNpcGllbnQuZXF1YWxzQmFyZUppZChyZWNpcGllbnQpKTtcclxuICAgIH1cclxufVxyXG4iXX0=