UNPKG

ngx-mat-cdk

Version:

Extra Components for Angular Material including Filters,Drag Drop File, MatSelect Mobile Version

159 lines 21.7 kB
import { Directive, ElementRef, EventEmitter, HostListener, Injector, Input, Output } from '@angular/core'; import { v4 as uuidv4 } from 'uuid'; import { NgxMatDragDropFileService } from "../../ngx-mat-drag-drop-file/ngx-mat-drag-drop-file.service"; export class NgxCdkAvatarPickerDirective { constructor(injector, el, ngxMatDragDropFileService) { this.injector = injector; this.el = el; this.ngxMatDragDropFileService = ngxMatDragDropFileService; this.additionalData = {}; this.valueChange = new EventEmitter(); this.maxSizeMegabyte = 1; this.hasRemove = true; this.defaultImage = '../../../../assets/no-image.png'; this.loading = true; this.error = new EventEmitter(); this.chooseLabel = 'Choose Image'; // public message: string; this.avatarId = `avatar_${uuidv4()}`; // super(injector); } ngOnInit() { this.el.nativeElement.type = 'file'; this.el.nativeElement.style.display = 'none'; this.el.nativeElement.accept = "image/*"; this.el.nativeElement.name = "name"; const container = ` <div class="ngx-cdk-avatar-picker" id="${this.avatarId}"> <div class="ngx-cdk-avatar-picker-image"> <div class="ngx-cdk-avatar-picker-loading"></div> </div> <div class="ngx-cdk-avatar-picker-buttons"> </div> </div> `; const containerEl = document.createElement('div'); containerEl.innerHTML = container; this.el.nativeElement.after(containerEl); const loadingEl = containerEl.querySelector('.ngx-cdk-avatar-picker-loading'); const imgEl = document.createElement('img'); imgEl.style.display = 'none'; imgEl.classList.add('ngx-cdk-img-thumbnail'); imgEl.onload = () => { loadingEl.style.display = 'none'; imgEl.style.display = 'block'; }; imgEl.onerror = () => { imgEl.setAttribute('src', this.defaultImage); loadingEl.style.display = 'none'; imgEl.style.display = 'block'; }; loadingEl.after(imgEl); const buttonEl = document.createElement('button'); buttonEl.classList.add('mat-focus-indicator'); buttonEl.classList.add('mat-raised-button'); buttonEl.classList.add('mat-button-base'); buttonEl.setAttribute('type', 'button'); const buttonElInnerHtml = `<span class="mat-button-wrapper">${this.chooseLabel}</span>`; buttonEl.innerHTML = buttonElInnerHtml; buttonEl.addEventListener('click', (ev) => { this.openFileDirectory(); }); setTimeout(() => { const btnContainer = containerEl.querySelector('.ngx-cdk-avatar-picker-buttons'); if (btnContainer) { btnContainer.appendChild(buttonEl); } }, 0); } openFileDirectory() { this.el.nativeElement.click(); } removeFile() { this.el.nativeElement.value = null; this.value = null; this.valueChange.emit(this.value); } onChangeFile(ev) { const file = ev.target.files[0]; if (!file.type.toString().includes("image")) { this.error.emit("فقط فایل تصویر قابل دریافت است"); return; } if (file.size / 1024 / 1024 > this.maxSizeMegabyte) { this.error.emit(`حجم تصویر بیشتر از ${this.maxSizeMegabyte} مگابایت است`); return; } const formData = new FormData(); const tempId = `${uuidv4()}`; const blob = file.slice(0, file.size, file.type); const newFile = new File([blob], `temp_${tempId}`, { type: file.type }); formData.append("file", newFile); this.ngxMatDragDropFileService.uploader(formData, tempId, this.uploadUrl).subscribe((z) => { if (z && z.message) { this.progress = z.message; this.status = z.status; } }, (err) => { this.error.emit(err.message); }, () => { this.status = "complete"; // this.addFile(file, tempName, key); }); this.readFile(file, tempId); } readFile(file, tempId) { // ----------- :::: const reader = new FileReader(); reader.readAsDataURL(file); reader.onload = () => { const r = reader.result.toString(); const value = Object.assign({ tempId, fileName: file.name, fileSize: file.size, fileContentType: file.type, id: 0 }, this.additionalData); this.value = value; this.valueChange.emit(this.value); this.setSource(r); }; } setSource(source) { const imgContainer = document.getElementById(this.avatarId); if (imgContainer) { const imgEl = imgContainer.querySelector('img'); if (imgEl) { imgEl.setAttribute('src', source); } } } ngOnChanges(changes) { if (changes.loading && changes.loading.currentValue === false) { setTimeout(() => { this.setSource(this.imageSrc); }, 100); } } } NgxCdkAvatarPickerDirective.decorators = [ { type: Directive, args: [{ selector: 'input[ngxCdkAvatarPicker]' },] } ]; NgxCdkAvatarPickerDirective.ctorParameters = () => [ { type: Injector }, { type: ElementRef }, { type: NgxMatDragDropFileService } ]; NgxCdkAvatarPickerDirective.propDecorators = { uploadUrl: [{ type: Input }], additionalData: [{ type: Input }], value: [{ type: Input }], valueChange: [{ type: Output }], maxSizeMegabyte: [{ type: Input }], size: [{ type: Input }], hasRemove: [{ type: Input }], defaultImage: [{ type: Input }], loading: [{ type: Input }], error: [{ type: Output }], chooseLabel: [{ type: Input }], imageSrc: [{ type: Input }], onChangeFile: [{ type: HostListener, args: ['change', ['$event'],] }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWNkay1hdmF0YXItcGlja2VyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJDOi9Vc2Vycy9BbGlyZXphIE1vaGFtbWFkaS9zb3VyY2UvcmVwb3MvTXlMaWJyYXJ5L0FuZ3VsYXIuTGlicmFyeS9saWJzL3Byb2plY3RzL25neC1tYXQtY2RrL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9zaGFyZWQvZGlyZWN0aXZlcy9uZ3gtY2RrLWF2YXRhci1waWNrZXIuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBRVosUUFBUSxFQUNSLEtBQUssRUFHTCxNQUFNLEVBR1AsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFDLEVBQUUsSUFBSSxNQUFNLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFbEMsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sNkRBQTZELENBQUM7QUFLdEcsTUFBTSxPQUFPLDJCQUEyQjtJQUV0QyxZQUFvQixRQUFrQixFQUFVLEVBQWdDLEVBQzVELHlCQUFvRDtRQURwRCxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQVUsT0FBRSxHQUFGLEVBQUUsQ0FBOEI7UUFDNUQsOEJBQXlCLEdBQXpCLHlCQUF5QixDQUEyQjtRQU0vRCxtQkFBYyxHQUFHLEVBQUUsQ0FBQztRQUVuQixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUF5QixDQUFDO1FBQ3pELG9CQUFlLEdBQUcsQ0FBQyxDQUFDO1FBRXBCLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFDakIsaUJBQVksR0FBRyxpQ0FBaUMsQ0FBQztRQUNqRCxZQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2QsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDcEMsZ0JBQVcsR0FBRyxjQUFjLENBQUM7UUFJdEMsMEJBQTBCO1FBRWxCLGFBQVEsR0FBRyxVQUFVLE1BQU0sRUFBRSxFQUFFLENBQUM7UUFu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QUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBEaXJlY3RpdmUsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIEluamVjdCxcclxuICBJbmplY3RvcixcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFRlbXBsYXRlUmVmXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7TmdNb2RlbH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuaW1wb3J0IHt2NCBhcyB1dWlkdjR9IGZyb20gJ3V1aWQnO1xyXG5pbXBvcnQge05neE1hdERyYWdEcm9wRmlsZUR0b30gZnJvbSBcIi4uLy4uL25neC1tYXQtZHJhZy1kcm9wLWZpbGUvbmd4LW1hdC1kcmFnLWRyb3AtZmlsZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHtOZ3hNYXREcmFnRHJvcEZpbGVTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vbmd4LW1hdC1kcmFnLWRyb3AtZmlsZS9uZ3gtbWF0LWRyYWctZHJvcC1maWxlLnNlcnZpY2VcIjtcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnaW5wdXRbbmd4Q2RrQXZhdGFyUGlja2VyXSdcclxufSlcclxuZXhwb3J0IGNsYXNzIE5neENka0F2YXRhclBpY2tlckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsIHByaXZhdGUgZWw6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4sXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBuZ3hNYXREcmFnRHJvcEZpbGVTZXJ2aWNlOiBOZ3hNYXREcmFnRHJvcEZpbGVTZXJ2aWNlLFxyXG4gICkge1xyXG4gICAgLy8gc3VwZXIoaW5qZWN0b3IpO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgdXBsb2FkVXJsOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgYWRkaXRpb25hbERhdGEgPSB7fTtcclxuICBASW5wdXQoKSB2YWx1ZTogTmd4TWF0RHJhZ0Ryb3BGaWxlRHRvO1xyXG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Tmd4TWF0RHJhZ0Ryb3BGaWxlRHRvPigpO1xyXG4gIEBJbnB1dCgpIG1heFNpemVNZWdhYnl0ZSA9IDE7XHJcbiAgQElucHV0KCkgc2l6ZTogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGhhc1JlbW92ZSA9IHRydWU7XHJcbiAgQElucHV0KCkgZGVmYXVsdEltYWdlID0gJy4uLy4uLy4uLy4uL2Fzc2V0cy9uby1pbWFnZS5wbmcnO1xyXG4gIEBJbnB1dCgpIGxvYWRpbmcgPSB0cnVlO1xyXG4gIEBPdXRwdXQoKSBlcnJvciA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBJbnB1dCgpIGNob29zZUxhYmVsID0gJ0Nob29zZSBJbWFnZSc7XHJcbiAgQElucHV0KCkgaW1hZ2VTcmM6IHN0cmluZztcclxuICBzdGF0dXM6IGFueTtcclxuICBwdWJsaWMgcHJvZ3Jlc3M6IG51bWJlcjtcclxuICAvLyBwdWJsaWMgbWVzc2FnZTogc3RyaW5nO1xyXG5cclxuICBwcml2YXRlIGF2YXRhcklkID0gYGF2YXRhcl8ke3V1aWR2NCgpfWA7XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnR5cGUgPSAnZmlsZSc7XHJcbiAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5hY2NlcHQgPSBcImltYWdlLypcIjtcclxuICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5uYW1lID0gXCJuYW1lXCI7XHJcblxyXG4gICAgY29uc3QgY29udGFpbmVyID0gYFxyXG4gICAgPGRpdiBjbGFzcz1cIm5neC1jZGstYXZhdGFyLXBpY2tlclwiIGlkPVwiJHt0aGlzLmF2YXRhcklkfVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibmd4LWNkay1hdmF0YXItcGlja2VyLWltYWdlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZ3gtY2RrLWF2YXRhci1waWNrZXItbG9hZGluZ1wiPjwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm5neC1jZGstYXZhdGFyLXBpY2tlci1idXR0b25zXCI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICBgO1xyXG4gICAgY29uc3QgY29udGFpbmVyRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgIGNvbnRhaW5lckVsLmlubmVySFRNTCA9IGNvbnRhaW5lcjtcclxuICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5hZnRlcihjb250YWluZXJFbCk7XHJcbiAgICBjb25zdCBsb2FkaW5nRWw6IEhUTUxFbGVtZW50ID0gY29udGFpbmVyRWwucXVlcnlTZWxlY3RvcignLm5neC1jZGstYXZhdGFyLXBpY2tlci1sb2FkaW5nJyk7XHJcbiAgICBjb25zdCBpbWdFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgaW1nRWwuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgIGltZ0VsLmNsYXNzTGlzdC5hZGQoJ25neC1jZGstaW1nLXRodW1ibmFpbCcpO1xyXG4gICAgaW1nRWwub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICBsb2FkaW5nRWwuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgaW1nRWwuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICB9XHJcbiAgICBpbWdFbC5vbmVycm9yID0gKCkgPT4ge1xyXG4gICAgICBpbWdFbC5zZXRBdHRyaWJ1dGUoJ3NyYycsIHRoaXMuZGVmYXVsdEltYWdlKTtcclxuICAgICAgbG9hZGluZ0VsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgIGltZ0VsLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgfVxyXG4gICAgbG9hZGluZ0VsLmFmdGVyKGltZ0VsKTtcclxuXHJcblxyXG4gICAgY29uc3QgYnV0dG9uRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcclxuICAgIGJ1dHRvbkVsLmNsYXNzTGlzdC5hZGQoJ21hdC1mb2N1cy1pbmRpY2F0b3InKTtcclxuICAgIGJ1dHRvbkVsLmNsYXNzTGlzdC5hZGQoJ21hdC1yYWlzZWQtYnV0dG9uJyk7XHJcbiAgICBidXR0b25FbC5jbGFzc0xpc3QuYWRkKCdtYXQtYnV0dG9uLWJhc2UnKTtcclxuICAgIGJ1dHRvbkVsLnNldEF0dHJpYnV0ZSgndHlwZScsICdidXR0b24nKTtcclxuICAgIGNvbnN0IGJ1dHRvbkVsSW5uZXJIdG1sID0gYDxzcGFuIGNsYXNzPVwibWF0LWJ1dHRvbi13cmFwcGVyXCI+JHt0aGlzLmNob29zZUxhYmVsfTwvc3Bhbj5gO1xyXG4gICAgYnV0dG9uRWwuaW5uZXJIVE1MID0gYnV0dG9uRWxJbm5lckh0bWw7XHJcbiAgICBidXR0b25FbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldjogTW91c2VFdmVudCkgPT4ge1xyXG4gICAgICB0aGlzLm9wZW5GaWxlRGlyZWN0b3J5KCk7XHJcbiAgICB9KTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBjb25zdCBidG5Db250YWluZXIgPSBjb250YWluZXJFbC5xdWVyeVNlbGVjdG9yKCcubmd4LWNkay1hdmF0YXItcGlja2VyLWJ1dHRvbnMnKTtcclxuICAgICAgaWYgKGJ0bkNvbnRhaW5lcikge1xyXG4gICAgICAgIGJ0bkNvbnRhaW5lci5hcHBlbmRDaGlsZChidXR0b25FbCk7XHJcbiAgICAgIH1cclxuICAgIH0sIDApO1xyXG4gIH1cclxuXHJcbiAgb3BlbkZpbGVEaXJlY3RvcnkoKTogdm9pZCB7XHJcbiAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZUZpbGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBudWxsO1xyXG4gICAgdGhpcy52YWx1ZSA9IG51bGw7XHJcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdjaGFuZ2UnLCBbJyRldmVudCddKVxyXG4gIG9uQ2hhbmdlRmlsZShldjogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBmaWxlID0gZXYudGFyZ2V0LmZpbGVzWzBdO1xyXG4gICAgaWYgKCFmaWxlLnR5cGUudG9TdHJpbmcoKS5pbmNsdWRlcyhcImltYWdlXCIpKSB7XHJcbiAgICAgIHRoaXMuZXJyb3IuZW1pdChcItmB2YLYtyDZgdin24zZhCDYqti12YjbjNixINmC2KfYqNmEINiv2LHbjNin2YHYqiDYp9iz2KpcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChmaWxlLnNpemUgLyAxMDI0IC8gMTAyNCA+IHRoaXMubWF4U2l6ZU1lZ2FieXRlKSB7XHJcbiAgICAgIHRoaXMuZXJyb3IuZW1pdChg2K3YrNmFINiq2LXZiNuM2LEg2KjbjNi02KrYsSDYp9iyICR7dGhpcy5tYXhTaXplTWVnYWJ5dGV9INmF2q/Yp9io2KfbjNiqINin2LPYqmApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgY29uc3QgdGVtcElkID0gYCR7dXVpZHY0KCl9YDtcclxuICAgIGNvbnN0IGJsb2IgPSBmaWxlLnNsaWNlKDAsIGZpbGUuc2l6ZSwgZmlsZS50eXBlKTtcclxuICAgIGNvbnN0IG5ld0ZpbGUgPSBuZXcgRmlsZShbYmxvYl0sIGB0ZW1wXyR7dGVtcElkfWAsIHt0eXBlOiBmaWxlLnR5cGV9KTtcclxuICAgIGZvcm1EYXRhLmFwcGVuZChcImZpbGVcIiwgbmV3RmlsZSk7XHJcbiAgICB0aGlzLm5neE1hdERyYWdEcm9wRmlsZVNlcnZpY2UudXBsb2FkZXIoZm9ybURhdGEsIHRlbXBJZCwgdGhpcy51cGxvYWRVcmwpLnN1YnNjcmliZShcclxuICAgICAgKHo6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICh6ICYmIHoubWVzc2FnZSkge1xyXG4gICAgICAgICAgdGhpcy5wcm9ncmVzcyA9IHoubWVzc2FnZTtcclxuICAgICAgICAgIHRoaXMuc3RhdHVzID0gei5zdGF0dXM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5lcnJvci5lbWl0KGVyci5tZXNzYWdlKTtcclxuICAgICAgfSxcclxuICAgICAgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3RhdHVzID0gXCJjb21wbGV0ZVwiO1xyXG4gICAgICAgIC8vIHRoaXMuYWRkRmlsZShmaWxlLCB0ZW1wTmFtZSwga2V5KTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIHRoaXMucmVhZEZpbGUoZmlsZSwgdGVtcElkKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVhZEZpbGUoZmlsZTogYW55LCB0ZW1wSWQpOiB2b2lkIHtcclxuICAgIC8vIC0tLS0tLS0tLS0tICA6Ojo6XHJcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICBjb25zdCByID0gcmVhZGVyLnJlc3VsdC50b1N0cmluZygpO1xyXG4gICAgICBjb25zdCB2YWx1ZTogTmd4TWF0RHJhZ0Ryb3BGaWxlRHRvID0ge1xyXG4gICAgICAgIHRlbXBJZCxcclxuICAgICAgICBmaWxlTmFtZTogZmlsZS5uYW1lLFxyXG4gICAgICAgIGZpbGVTaXplOiBmaWxlLnNpemUsXHJcbiAgICAgICAgZmlsZUNvbnRlbnRUeXBlOiBmaWxlLnR5cGUsXHJcbiAgICAgICAgaWQ6IDAsXHJcbiAgICAgICAgLi4udGhpcy5hZGRpdGlvbmFsRGF0YVxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcclxuICAgICAgdGhpcy5zZXRTb3VyY2Uocik7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRTb3VyY2Uoc291cmNlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGltZ0NvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuYXZhdGFySWQpO1xyXG4gICAgaWYgKGltZ0NvbnRhaW5lcikge1xyXG4gICAgICBjb25zdCBpbWdFbCA9IGltZ0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdpbWcnKTtcclxuICAgICAgaWYgKGltZ0VsKSB7XHJcbiAgICAgICAgaW1nRWwuc2V0QXR0cmlidXRlKCdzcmMnLCBzb3VyY2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlcy5sb2FkaW5nICYmIGNoYW5nZXMubG9hZGluZy5jdXJyZW50VmFsdWUgPT09IGZhbHNlKSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0U291cmNlKHRoaXMuaW1hZ2VTcmMpO1xyXG4gICAgICB9LCAxMDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuIl19