truly-ui
Version:
Web Components for Desktop Applications.
122 lines (120 loc) • 17.8 kB
JavaScript
/*
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==