UNPKG

truly-ui

Version:

Web Components for Desktop Applications.

122 lines (120 loc) 17.8 kB
/* MIT License Copyright (c) 2017 Temainfo Sistemas Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ import { Injectable } from '@angular/core'; import { Subject } from 'rxjs'; import * as i0 from "@angular/core"; export class ChatService { constructor() { this.chatObject = {}; this.appendAndRead = new Subject(); this.changeStatus = new Subject(); this.allMessages = new Subject(); this.newMessages = new Subject(); this.unreadMessages = new Subject(); } loadMessages(messages, chatId, user) { if (!this.existChat(chatId)) { this.chatObject[chatId] = { messages: [] }; } if (messages.length > 0) { this.chatObject[chatId].messages = messages; this.allMessages.next(this.chatObject[chatId].messages); this.unreadMessages.next(this.getUnreadMessages(this.chatObject[chatId].messages, user)); } else { this.unreadMessages.next([]); } } appendMessage(message, user, chatId) { if (this.existChat(chatId)) { this.chatObject[chatId].messages = [...this.chatObject[chatId].messages, message]; this.allMessages.next(this.chatObject[chatId].messages); if (message.from.id !== user.id) { this.appendAndRead.next(message); this.newMessages.next(this.hasMessages(this.chatObject[chatId].messages, user)); this.unreadMessages.next(this.getUnreadMessages(this.chatObject[chatId].messages, user)); } } } readMessages(messages, user, chatId) { if (messages.length > 0 && this.isMessagesToUser(messages, user)) { messages.forEach((val) => { const index = this.chatObject[chatId || this.getFirstChat()].messages.findIndex((message) => message.id === val.id); if (index >= 0) { this.chatObject[chatId || this.getFirstChat()].messages[index].viewed = true; } }); setTimeout(() => { this.allMessages.next(this.chatObject[chatId].messages); this.newMessages.next(this.hasMessages(this.chatObject[chatId].messages, user)); this.unreadMessages.next(this.getUnreadMessages(this.chatObject[chatId].messages, user)); }, 500); } } readAll(chatId) { this.chatObject[chatId || this.getFirstChat()].messages.forEach((item) => item.viewed = true); this.allMessages.next(this.chatObject[chatId].messages); } setStatus(status, chatId) { this.changeStatus.next({ status, chatId }); } getAllMessages(chatId) { if (this.existChat(chatId)) { return this.chatObject[chatId].messages; } return []; } deleteChat(chatId) { delete this.chatObject[chatId]; } getUnreadMessages(messages, user) { if (messages.length > 0) { return messages.filter((message) => { if (message.from && message.to) { return (!message.viewed) && (message.to.id === user.id); } }); } return []; } isMessagesToUser(messages, user) { return messages.filter((message) => message.to.id === user.id).length > 0; } existChat(chatId) { return this.chatObject.hasOwnProperty(chatId); } hasMessages(messages, user) { return messages.filter((value) => { if (value.to && user) { return !value.viewed && (value.to.id === user.id); } }).length > 0; } getFirstChat() { const first = Object.keys(this.chatObject)[0]; return this.chatObject[first]; } } /** @nocollapse */ ChatService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ChatService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); /** @nocollapse */ ChatService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ChatService }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ChatService, decorators: [{ type: Injectable }], ctorParameters: function () { return []; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJ1bHktdWkvc3JjL2NvbXBvbmVudHMvY2hhdGxpc3Qvc2VydmljZXMvY2hhdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUNILE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFHekMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQzs7QUFJN0IsTUFBTSxPQUFPLFdBQVc7SUFjdEI7UUFaUSxlQUFVLEdBQUcsRUFBRSxDQUFDO1FBRWpCLGtCQUFhLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUU5QixpQkFBWSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFFN0IsZ0JBQVcsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRTVCLGdCQUFXLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUU1QixtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFHdEMsQ0FBQztJQUVELFlBQVksQ0FBQyxRQUF1QixFQUFFLE1BQWMsRUFBRSxJQUFpQjtRQUNyRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUMsUUFBUSxFQUFFLEVBQUUsRUFBQyxDQUFDO1NBQzFDO1FBQ0QsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7WUFDNUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN4RCxJQUFJ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QUFDLENBQUM7U0FDSjtRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVPLGdCQUFnQixDQUFDLFFBQXVCLEVBQUUsSUFBaUI7UUFDakUsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRU8sU0FBUyxDQUFDLE1BQWM7UUFDOUIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRU8sV0FBVyxDQUFDLFFBQVEsRUFBRSxJQUFpQjtRQUM3QyxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUMvQixJQUFJLEtBQUssQ0FBQyxFQUFFLElBQUksSUFBSSxFQUFFO2dCQUNwQixPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUNuRDtRQUNILENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUdPLFlBQVk7UUFDbEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7OzRIQTdHVSxXQUFXO2dJQUFYLFdBQVc7NEZBQVgsV0FBVztrQkFEdkIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gTUlUIExpY2Vuc2VcblxuIENvcHlyaWdodCAoYykgMjAxNyBUZW1haW5mbyBTaXN0ZW1hc1xuXG4gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q2hhdE1lc3NhZ2V9IGZyb20gJy4uL2ludGVyZmFjZXMvY2hhdC1tZXNzYWdlLmludGVyZmFjZSc7XG5pbXBvcnQge1N0YXR1c30gZnJvbSAnLi4vZW51bXMvc3RhdHVzLmVudW0nO1xuaW1wb3J0IHtTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7Q2hhdENvbnRhY3R9IGZyb20gJy4uL2ludGVyZmFjZXMvY2hhdC1jb250YWN0LmludGVyZmFjZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDaGF0U2VydmljZSB7XG5cbiAgcHJpdmF0ZSBjaGF0T2JqZWN0ID0ge307XG5cbiAgcHVibGljIGFwcGVuZEFuZFJlYWQgPSBuZXcgU3ViamVjdCgpO1xuXG4gIHB1YmxpYyBjaGFuZ2VTdGF0dXMgPSBuZXcgU3ViamVjdCgpO1xuXG4gIHB1YmxpYyBhbGxNZXNzYWdlcyA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgcHVibGljIG5ld01lc3NhZ2VzID0gbmV3IFN1YmplY3QoKTtcblxuICBwdWJsaWMgdW5yZWFkTWVzc2FnZXMgPSBuZXcgU3ViamVjdCgpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICB9XG5cbiAgbG9hZE1lc3NhZ2VzKG1lc3NhZ2VzOiBDaGF0TWVzc2FnZVtdLCBjaGF0SWQ6IHN0cmluZywgdXNlcjogQ2hhdENvbnRhY3QpIHtcbiAgICBpZiAoIXRoaXMuZXhpc3RDaGF0KGNoYXRJZCkpIHtcbiAgICAgIHRoaXMuY2hhdE9iamVjdFtjaGF0SWRdID0ge21lc3NhZ2VzOiBbXX07XG4gICAgfVxuICAgIGlmIChtZXNzYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmNoYXRPYmplY3RbY2hhdElkXS5tZXNzYWdlcyA9IG1lc3NhZ2VzO1xuICAgICAgdGhpcy5hbGxNZXNzYWdlcy5uZXh0KHRoaXMuY2hhdE9iamVjdFtjaGF0SWRdLm1lc3NhZ2VzKTtcbiAgICAgIHRoaXMudW5yZWFkTWVzc2FnZXMubmV4dCh0aGlzLmdldFVucmVhZE1lc3NhZ2VzKHRoaXMuY2hhdE9iamVjdFtjaGF0SWRdLm1lc3NhZ2VzLCB1c2VyKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudW5yZWFkTWVzc2FnZXMubmV4dChbXSk7XG4gICAgfVxuICB9XG5cbiAgYXBwZW5kTWVzc2FnZShtZXNzYWdlOiBDaGF0TWVzc2FnZSwgdXNlcjogQ2hhdENvbnRhY3QsIGNoYXRJZDogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuZXhpc3RDaGF0KGNoYXRJZCkpIHtcbiAgICAgIHRoaXMuY2hhdE9iamVjdFtjaGF0SWRdLm1lc3NhZ2VzID0gWy4uLnRoaXMuY2hhdE9iamVjdFtjaGF0SWRdLm1lc3NhZ2VzLCBtZXNzYWdlXTtcbiAgICAgIHRoaXMuYWxsTWVzc2FnZXMubmV4dCh0aGlzLmNoYXRPYmplY3RbY2hhdElkXS5tZXNzYWdlcyk7XG4gICAgICBpZiAobWVzc2FnZS5mcm9tLmlkICE9PSB1c2VyLmlkKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kQW5kUmVhZC5uZXh0KG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5ld01lc3NhZ2VzLm5leHQodGhpcy5oYXNNZXNzYWdlcyh0aGlzLmNoYXRPYmplY3RbY2hhdElkXS5tZXNzYWdlcywgdXNlcikpO1xuICAgICAgICB0aGlzLnVucmVhZE1lc3NhZ2VzLm5leHQodGhpcy5nZXRVbnJlYWRNZXNzYWdlcyh0aGlzLmNoYXRPYmplY3RbY2hhdElkXS5tZXNzYWdlcywgdXNlcikpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlYWRNZXNzYWdlcyhtZXNzYWdlczogQ2hhdE1lc3NhZ2VbXSwgdXNlcjogQ2hhdENvbnRhY3QsIGNoYXRJZDogc3RyaW5nKSB7XG4gICAgaWYgKCBtZXNzYWdlcy5sZW5ndGggPiAwICYmIHRoaXMuaXNNZXNzYWdlc1RvVXNlcihtZXNzYWdlcywgdXNlcikpIHtcbiAgICAgIG1lc3NhZ2VzLmZvckVhY2goKHZhbCkgPT4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuY2hhdE9iamVjdFtjaGF0SWQgfHwgdGhpcy5nZXRGaXJzdENoYXQoKV0ubWVzc2FnZXMuZmluZEluZGV4KChtZXNzYWdlKSA9PiBtZXNzYWdlLmlkID09PSB2YWwuaWQpO1xuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgIHRoaXMuY2hhdE9iamVjdFtjaGF0SWQgfHwgdGhpcy5nZXRGaXJzdENoYXQoKV0ubWVzc2FnZXNbaW5kZXhdLnZpZXdlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuYWxsTWVzc2FnZXMubmV4dCh0aGlzLmNoYXRPYmplY3RbY2hhdElkXS5tZXNzYWdlcyk7XG4gICAgICAgIHRoaXMubmV3TWVzc2FnZXMubmV4dCh0aGlzLmhhc01lc3NhZ2VzKHRoaXMuY2hhdE9iamVjdFtjaGF0SWRdLm1lc3NhZ2VzLCB1c2VyKSk7XG4gICAgICAgIHRoaXMudW5yZWFkTWVzc2FnZXMubmV4dCh0aGlzLmdldFVucmVhZE1lc3NhZ2VzKHRoaXMuY2hhdE9iamVjdFtjaGF0SWRdLm1lc3NhZ2VzLCB1c2VyKSk7XG4gICAgICB9LCA1MDApO1xuICAgIH1cbiAgfVxuXG4gIHJlYWRBbGwoY2hhdElkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmNoYXRPYmplY3RbY2hhdElkIHx8IHRoaXMuZ2V0Rmlyc3RDaGF0KCldLm1lc3NhZ2VzLmZvckVhY2goKGl0ZW06IENoYXRNZXNzYWdlKSA9PiBpdGVtLnZpZXdlZCA9IHRydWUpO1xuICAgIHRoaXMuYWxsTWVzc2FnZXMubmV4dCh0aGlzLmNoYXRPYmplY3RbY2hhdElkXS5tZXNzYWdlcyk7XG4gIH1cblxuICBzZXRTdGF0dXMoc3RhdHVzOiBTdGF0dXMsIGNoYXRJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5jaGFuZ2VTdGF0dXMubmV4dCh7c3RhdHVzLCBjaGF0SWR9KTtcbiAgfVxuXG4gIGdldEFsbE1lc3NhZ2VzKGNoYXRJZDogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuZXhpc3RDaGF0KGNoYXRJZCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmNoYXRPYmplY3RbY2hhdElkXS5tZXNzYWdlcztcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgZGVsZXRlQ2hhdChjaGF0SWQ6IHN0cmluZykge1xuICAgIGRlbGV0ZSB0aGlzLmNoYXRPYmplY3RbY2hhdElkXTtcbiAgfVxuXG4gIGdldFVucmVhZE1lc3NhZ2VzKG1lc3NhZ2VzLCB1c2VyOiBDaGF0Q29udGFjdCkge1xuICAgIGlmIChtZXNzYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gbWVzc2FnZXMuZmlsdGVyKChtZXNzYWdlOiBDaGF0TWVzc2FnZSkgPT4ge1xuICAgICAgICBpZiAobWVzc2FnZS5mcm9tICYmIG1lc3NhZ2UudG8pIHtcbiAgICAgICAgICByZXR1cm4gKCFtZXNzYWdlLnZpZXdlZCkgJiYgKG1lc3NhZ2UudG8uaWQgPT09IHVzZXIuaWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBpc01lc3NhZ2VzVG9Vc2VyKG1lc3NhZ2VzOiBDaGF0TWVzc2FnZVtdLCB1c2VyOiBDaGF0Q29udGFjdCkge1xuICAgIHJldHVybiBtZXNzYWdlcy5maWx0ZXIoKG1lc3NhZ2UpID0+IG1lc3NhZ2UudG8uaWQgPT09IHVzZXIuaWQpLmxlbmd0aCA+IDA7XG4gIH1cblxuICBwcml2YXRlIGV4aXN0Q2hhdChjaGF0SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmNoYXRPYmplY3QuaGFzT3duUHJvcGVydHkoY2hhdElkKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFzTWVzc2FnZXMobWVzc2FnZXMsIHVzZXI6IENoYXRDb250YWN0KSB7XG4gICAgcmV0dXJuIG1lc3NhZ2VzLmZpbHRlcigodmFsdWUpID0+IHtcbiAgICAgIGlmICh2YWx1ZS50byAmJiB1c2VyKSB7XG4gICAgICAgIHJldHVybiAhdmFsdWUudmlld2VkICYmICh2YWx1ZS50by5pZCA9PT0gdXNlci5pZCk7XG4gICAgICB9XG4gICAgfSkubGVuZ3RoID4gMDtcbiAgfVxuXG5cbiAgcHJpdmF0ZSBnZXRGaXJzdENoYXQoKSB7XG4gICAgY29uc3QgZmlyc3QgPSBPYmplY3Qua2V5cyh0aGlzLmNoYXRPYmplY3QpWzBdO1xuICAgIHJldHVybiB0aGlzLmNoYXRPYmplY3RbZmlyc3RdO1xuICB9XG5cbn1cbiJdfQ==