/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, ViewChild, Input, Output, EventEmitter } from '@angular/core'; import { AppConfigService } from '../app-config/app-config.service'; import { DxDataGridComponent } from 'devextreme-angular'; import { Request } from '../_services/request.service'; import { Common } from '../_services/common.service'; import { ModalAttachmentComponent } from '../modal-attachment/modal-attachment.component'; import * as _ from 'lodash'; import { CreateAlertComponent } from '../alert/alert.component'; import { B2bService } from '../_services/b2b.service'; import { ModalAttachmentViewComponent } from '../modal-attachment-view/modal-attachment-view.component'; export class AttachmentListComponent { /** * @param {?} appConfigService * @param {?} request * @param {?} common * @param {?} b2b */ constructor(appConfigService, request, common, b2b) { this.appConfigService = appConfigService; this.request = request; this.common = common; this.b2b = b2b; this.mode = 'CREATE'; this.type = 2; this.showImage = false; this.onLoaded = new EventEmitter(); this.onClickScan = new EventEmitter(); this.onClickDelete = new EventEmitter(); this.columns = ['ลำดับที่', 'ผู้แก้ไข', 'วันที่', 'สถานะการติดตาม', 'หมายเหตุ']; this.attachmentList = []; this.dxgridPageSize = 10; this.allowedPageSizes1 = 10; this.allowedPageSizes2 = 25; this.allowedPageSizes3 = 50; this.allowedPageSizes4 = 100; this.customers = []; this.lastStep = ''; this.deleteIdList = []; this.dsAttachment = []; this.selectedAttachment = []; this.tmpId = -1; this.classifieds = 0; this.username_caption = 'ผู้บันทึก/ผู้นำเข้า'; this.config = appConfigService.getConfig(); } /** * @return {?} */ ngOnInit() { return tslib_1.__awaiter(this, void 0, void 0, function* () { setTimeout(() => tslib_1.__awaiter(this, void 0, void 0, function* () { this.downloadToken = yield this.b2b.getAttachmentToken(); }), 500); if (this.mode !== "CREATE") { this.getAttachmentList(); } }); } /** * @return {?} */ getAttachmentList() { return tslib_1.__awaiter(this, void 0, void 0, function* () { console.log('getAttachmentList', this.attachmentList, this.option.username_caption); /** @type {?} */ let filter = { filter: { ref_table: this.option.data.ref_table, ref_id: this.option.data.ref_id, system_id: this.option.data.system_id }, order_by: ["order_no"] }; if (this.option.data.result_table_id) filter.filter.result_table_id = this.option.data.result_table_id; /** @type {?} */ const data = yield this.request.post('/search/rc_attachment_prop', filter); this.attachmentList = data.resultData; this.classifieds = 0; for (let i of this.attachmentList) { if (i.is_classifieds) { this.classifieds++; } } console.log('getAttachmentList', this.attachmentList); this.onLoaded.emit(); }); } /** * @param {?} data * @return {?} */ addAttachmentList(data) { data.id = this.tmpId; this.tmpId--; if (this.b2b.getVerifyToken().phoneBookData && this.b2b.getVerifyToken().phoneBookData.length > 0) { data.username = this.b2b.getVerifyToken().username; data.recorder_name = this.b2b.getVerifyToken().phoneBookData[0].name; } data.action = "add"; if (data.is_classifieds) { this.classifieds++; } this.attachmentList.push(data); console.log('getAttachmentList', this.attachmentList); } /** * @param {?} data * @return {?} */ editAttachmentList(data) { for (let i = 0; i < this.attachmentList.length; i++) { if (this.attachmentList[i].id === data.id) { if (data.is_classifieds && !this.attachmentList[i].is_classifieds) { this.classifieds++; } else if (!data.is_classifieds && this.attachmentList[i].is_classifieds) { this.classifieds--; } this.attachmentList[i] = data; } } console.log('getAttachmentList', this.attachmentList); } /** * @param {?} data * @return {?} */ getRowIndex(data) { if (!data.data) { return ''; } data.data.order_no = data.component.pageIndex() * data.component.pageSize() + data.rowIndex + 1; return data.data.order_no; } /** * @return {?} */ clickAdd() { this.option.mode = 'CREATE'; if (this.attachmentModal) { this.attachmentModal.open(this.option); } else { this.modalAttachment.open(this.option); } } /** * @param {?} data * @return {?} */ clickEdit(data) { console.log('clickEdit', data); /** @type {?} */ let fileName = data.filename; /** @type {?} */ let fileType = fileName.substring(fileName.length - 3, fileName.length); console.log('fileType', fileType); if (this.type == 1 && (fileType == 'pdf' || fileType == 'PDF')) { /** @type {?} */ const editData = _.cloneDeep(this.option); editData.data = data; editData.mode = 'EDIT'; editData.downloadToken = this.downloadToken; this.onClickScan.emit(editData); } else { /** @type {?} */ const editData = _.cloneDeep(this.option); editData.data = data; editData.mode = 'EDIT'; editData.downloadToken = this.downloadToken; if (this.attachmentModal) { this.attachmentModal.open(editData); } else { this.modalAttachment.open(editData); } } } /** * @param {?} data * @return {?} */ clickView(data) { /** @type {?} */ let fileName = data.filename; /** @type {?} */ let fileType = fileName.substring(fileName.length - 3, fileName.length); console.log('fileType', fileType); if (this.type == 1 && (fileType == 'pdf' || fileType == 'PDF')) { /** @type {?} */ const viewData = _.cloneDeep(this.option); viewData.data = data; viewData.mode = 'VIEW'; this.onClickScan.emit(viewData); } else { /** @type {?} */ const viewData = _.cloneDeep(this.option); viewData.data = data; viewData.mode = 'VIEW'; viewData.downloadToken = this.downloadToken; if (this.attachmentViewModal) { this.attachmentViewModal.open(viewData); } else { this.modalAttachmentView.open(viewData); } } } /** * @param {?} data * @return {?} */ clickMoveUp(data) { /** @type {?} */ let tmp = this.attachmentList[data.rowIndex]; this.attachmentList[data.rowIndex] = this.attachmentList[data.rowIndex - 1]; this.attachmentList[data.rowIndex - 1] = tmp; } /** * @param {?} data * @return {?} */ clickMoveDown(data) { /** @type {?} */ let tmp = this.attachmentList[data.rowIndex]; this.attachmentList[data.rowIndex] = this.attachmentList[data.rowIndex + 1]; this.attachmentList[data.rowIndex + 1] = tmp; } /** * @param {?} data * @return {?} */ clickDownload(data) { return tslib_1.__awaiter(this, void 0, void 0, function* () { window.open(data.url + "?downloadToken=" + this.downloadToken); }); } /** * @return {?} */ getLastStep() { return this.lastStep; } /** * START DELETE * @param {?} idList * @return {?} */ fnClickDelete(idList) { this.onClickDelete.emit(); this.deleteIdList = idList; if (this.deleteIdList.length > 0) { this.confirmDelete(); } } /** * @return {?} */ confirmDelete() { this.goAlert('', '', 'myModalDeleteAttachment'); } /** * @param {?} userTitle * @param {?} userMessage * @param {?} modalId * @return {?} */ goAlert(userTitle, userMessage, modalId) { /** @type {?} */ const dataAlert = { 'modalId': modalId, 'userTitle': userTitle, 'userMessage': userMessage }; if (this.alertModal) { this.alertModal.openModal(dataAlert); } else { this.myModal.openModal(dataAlert); } } /** * @param {?} e * @return {?} */ onCellPrepared(e) { if (e.rowType === 'data') { e.cellElement.accessKey = e.column.caption; } } /** * @return {?} */ fnDeleteMultiple() { return tslib_1.__awaiter(this, void 0, void 0, function* () { console.log("this.deleteIdList", this.deleteIdList); console.log("this.attachmentList before", this.attachmentList); for (let id of this.deleteIdList) { for (let i = this.attachmentList.length - 1; i >= 0; i--) { if (this.attachmentList[i].id === id) { if (this.attachmentList[i].is_classifieds) { this.classifieds--; } this.attachmentList.splice(i, 1); } } } console.log("this.attachmentList after", this.attachmentList); }); } /** * @return {?} */ onClickBack() { console.log("clickback"); } /** * @param {?} data * @return {?} */ getImageLink(data) { return data.url + "?downloadToken=" + this.downloadToken; } /** * @return {?} */ scan() { this.option.mode = 'CREATE'; this.onClickScan.emit(this.option); } } AttachmentListComponent.decorators = [ { type: Component, args: [{ selector: 'soc-attachment-list', template: "
\n
\n
\n \n \n \n \n \n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n
\n {{getRowIndex(data)}}\n
\n
\n \n \n \n \n \n
\n
\n
\n
\n
\n\n\n\n\n\n" }] } ]; /** @nocollapse */ AttachmentListComponent.ctorParameters = () => [ { type: AppConfigService }, { type: Request }, { type: Common }, { type: B2bService } ]; AttachmentListComponent.propDecorators = { mode: [{ type: Input }], type: [{ type: Input }], option: [{ type: Input }], showImage: [{ type: Input }], alertModal: [{ type: Input }], attachmentModal: [{ type: Input }], attachmentViewModal: [{ type: Input }], onLoaded: [{ type: Output }], onClickScan: [{ type: Output }], onClickDelete: [{ type: Output }], dxDataGridAttachmentList: [{ type: ViewChild, args: ['dxDataGridAttachmentList',] }], modalAttachment: [{ type: ViewChild, args: ['modalAttachment',] }], modalAttachmentView: [{ type: ViewChild, args: ['modalAttachmentView',] }], myModal: [{ type: ViewChild, args: ['myModal',] }] }; if (false) { /** @type {?} */ AttachmentListComponent.prototype.mode; /** @type {?} */ AttachmentListComponent.prototype.type; /** @type {?} */ AttachmentListComponent.prototype.option; /** @type {?} */ AttachmentListComponent.prototype.showImage; /** @type {?} */ AttachmentListComponent.prototype.alertModal; /** @type {?} */ AttachmentListComponent.prototype.attachmentModal; /** @type {?} */ AttachmentListComponent.prototype.attachmentViewModal; /** @type {?} */ AttachmentListComponent.prototype.onLoaded; /** @type {?} */ AttachmentListComponent.prototype.onClickScan; /** @type {?} */ AttachmentListComponent.prototype.onClickDelete; /** @type {?} */ AttachmentListComponent.prototype.dxDataGridAttachmentList; /** @type {?} */ AttachmentListComponent.prototype.modalAttachment; /** @type {?} */ AttachmentListComponent.prototype.modalAttachmentView; /** @type {?} */ AttachmentListComponent.prototype.myModal; /** @type {?} */ AttachmentListComponent.prototype.columns; /** @type {?} */ AttachmentListComponent.prototype.attachmentList; /** @type {?} */ AttachmentListComponent.prototype.th; /** @type {?} */ AttachmentListComponent.prototype.dxgridPageSize; /** @type {?} */ AttachmentListComponent.prototype.allowedPageSizes1; /** @type {?} */ AttachmentListComponent.prototype.allowedPageSizes2; /** @type {?} */ AttachmentListComponent.prototype.allowedPageSizes3; /** @type {?} */ AttachmentListComponent.prototype.allowedPageSizes4; /** @type {?} */ AttachmentListComponent.prototype.customers; /** @type {?} */ AttachmentListComponent.prototype.url; /** @type {?} */ AttachmentListComponent.prototype.lastStep; /** @type {?} */ AttachmentListComponent.prototype.config; /** @type {?} */ AttachmentListComponent.prototype.deleteIdList; /** @type {?} */ AttachmentListComponent.prototype.dsAttachment; /** @type {?} */ AttachmentListComponent.prototype.selectedAttachment; /** @type {?} */ AttachmentListComponent.prototype.tmpId; /** @type {?} */ AttachmentListComponent.prototype.classifieds; /** @type {?} */ AttachmentListComponent.prototype.downloadToken; /** @type {?} */ AttachmentListComponent.prototype.username_caption; /** @type {?} */ AttachmentListComponent.prototype.appConfigService; /** @type {?} */ AttachmentListComponent.prototype.request; /** @type {?} */ AttachmentListComponent.prototype.common; /** @type {?} */ AttachmentListComponent.prototype.b2b; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNobWVudC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3NvYy1hcHAtbGlicmFyeS8iLCJzb3VyY2VzIjpbImxpYi9hdHRhY2htZW50LWxpc3QvYXR0YWNobWVudC1saXN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXlCLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6RyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRXJELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQzFGLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQU14RyxNQUFNOzs7Ozs7O0lBeUNGLFlBQ1ksa0JBQ0EsU0FDQSxRQUNBO1FBSEEscUJBQWdCLEdBQWhCLGdCQUFnQjtRQUNoQixZQUFPLEdBQVAsT0FBTztRQUNQLFdBQU0sR0FBTixNQUFNO1FBQ04sUUFBRyxHQUFILEdBQUc7b0JBM0M2QixRQUFRO29CQUM1QixDQUFDO3lCQUVLLEtBQUs7d0JBSWQsSUFBSSxZQUFZLEVBQUU7MkJBQ2YsSUFBSSxZQUFZLEVBQUU7NkJBQ2hCLElBQUksWUFBWSxFQUFFO3VCQVdsQyxDQUFDLFVBQVUsRUFB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RDs7OztZQWRRLGdCQUFnQjtZQUVoQixPQUFPO1lBQ1AsTUFBTTtZQUtOLFVBQVU7OzttQkFTZCxLQUFLO21CQUNMLEtBQUs7cUJBQ0wsS0FBSzt3QkFDTCxLQUFLO3lCQUNMLEtBQUs7OEJBQ0wsS0FBSztrQ0FDTCxLQUFLO3VCQUNMLE1BQU07MEJBQ04sTUFBTTs0QkFDTixNQUFNO3VDQUNOLFNBQVMsU0FBQywwQkFBMEI7OEJBSXBDLFNBQVMsU0FBQyxpQkFBaUI7a0NBRTNCLFNBQVMsU0FBQyxxQkFBcUI7c0JBRS9CLFNBQVMsU0FBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEFmdGVyVmlld0luaXQsIFZpZXdDaGlsZCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNb2RhbFN0ZXBDb21wb25lbnQgfSBmcm9tICcuLi9tb2RhbC1zdGVwL21vZGFsLXN0ZXAuY29tcG9uZW50JztcbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9hcHAtY29uZmlnL2FwcC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBEeERhdGFHcmlkQ29tcG9uZW50IH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyJztcbmltcG9ydCB7IFJlcXVlc3QgfSBmcm9tICcuLi9fc2VydmljZXMvcmVxdWVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1vbiB9IGZyb20gJy4uL19zZXJ2aWNlcy9jb21tb24uc2VydmljZSc7XG5pbXBvcnQgeyBNb2RhbFN0ZXBWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi4vbW9kYWwtc3RlcC12aWV3L21vZGFsLXN0ZXAtdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgTW9kYWxBdHRhY2htZW50Q29tcG9uZW50IH0gZnJvbSAnLi4vbW9kYWwtYXR0YWNobWVudC9tb2RhbC1hdHRhY2htZW50LmNvbXBvbmVudCc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBDcmVhdGVBbGVydENvbXBvbmVudCB9IGZyb20gJy4uL2FsZXJ0L2FsZXJ0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCMmJTZXJ2aWNlIH0gZnJvbSAnLi4vX3NlcnZpY2VzL2IyYi5zZXJ2aWNlJztcbmltcG9ydCB7IE1vZGFsQXR0YWNobWVudFZpZXdDb21wb25lbnQgfSBmcm9tICcuLi9tb2RhbC1hdHRhY2htZW50LXZpZXcvbW9kYWwtYXR0YWNobWVudC12aWV3LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc29jLWF0dGFjaG1lbnQtbGlzdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2F0dGFjaG1lbnQtbGlzdC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQXR0YWNobWVudExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgQElucHV0KCkgbW9kZTogJ0NSRUFURScgfCAnRURJVCcgfCAnVklFVycgPSAnQ1JFQVRFJztcbiAgICBASW5wdXQoKSB0eXBlOiBudW1iZXIgPSAyO1xuICAgIEBJbnB1dCgpIG9wdGlvbjogYW55O1xuICAgIEBJbnB1dCgpIHNob3dJbWFnZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGFsZXJ0TW9kYWw6IENyZWF0ZUFsZXJ0Q29tcG9uZW50O1xuICAgIEBJbnB1dCgpIGF0dGFjaG1lbnRNb2RhbDogTW9kYWxBdHRhY2htZW50Q29tcG9uZW50O1xuICAgIEBJbnB1dCgpIGF0dGFjaG1lbnRWaWV3TW9kYWw6IE1vZGFsQXR0YWNobWVudFZpZXdDb21wb25lbnQ7XG4gICAgQE91dHB1dCgpIG9uTG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBvbkNsaWNrU2NhbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgb25DbGlja0RlbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAVmlld0NoaWxkKCdkeERhdGFHcmlkQXR0YWNobWVudExpc3QnKVxuICAgIGR4RGF0YUdyaWRBdHRhY2htZW50TGlzdDogRHhEYXRhR3JpZENvbXBvbmVudDtcbiAgICAvLyBAVmlld0NoaWxkKCdtb2RhbFN0ZXAnKVxuICAgIC8vIG1vZGFsU3RlcDogTW9kYWxTdGVwQ29tcG9uZW50O1xuICAgIEBWaWV3Q2hpbGQoJ21vZGFsQXR0YWNobWVudCcpXG4gICAgbW9kYWxBdHRhY2htZW50OiBNb2RhbEF0dGFjaG1lbnRDb21wb25lbnQ7XG4gICAgQFZpZXdDaGlsZCgnbW9kYWxBdHRhY2htZW50VmlldycpXG4gICAgbW9kYWxBdHRhY2htZW50VmlldzogTW9kYWxBdHRhY2htZW50Vmlld0NvbXBvbmVudDtcbiAgICBAVmlld0NoaWxkKCdteU1vZGFsJykgbXlNb2RhbDtcblxuICAgIGNvbHVtbnMgPSBbJ+C4peC4s+C4lOC4seC4muC4l+C4teC5iCcsICfguJzguLnguYnguYHguIHguYnguYTguIInLCAn4Lin4Lix4LiZ4LiX4Li14LmIJywgJ+C4quC4luC4suC4meC4sOC4geC4suC4o+C4leC4tOC4lOC4leC4suC4oScsICfguKvguKHguLLguKLguYDguKvguJXguLgnXTtcbiAgICBhdHRhY2htZW50TGlzdDogYW55ID0gW107XG4gICAgdGg7XG4gICAgZHhncmlkUGFnZVNpemUgPSAxMDtcbiAgICBhbGxvd2VkUGFnZVNpemVzMSA9IDEwO1xuICAgIGFsbG93ZWRQYWdlU2l6ZXMyID0gMjU7XG4gICAgYWxsb3dlZFBhZ2VTaXplczMgPSA1MDtcbiAgICBhbGxvd2VkUGFnZVNpemVzNCA9IDEwMDtcbiAgICBjdXN0b21lcnMgPSBbXTtcbiAgICB1cmw7XG4gICAgbGFzdFN0ZXAgPSAnJztcbiAgICBjb25maWc6IGFueTtcbiAgICBkZWxldGVJZExpc3QgPSBbXTtcbiAgICBkc0F0dGFjaG1lbnQgPSBbXTtcbiAgICBzZWxlY3RlZEF0dGFjaG1lbnQgPSBbXTtcbiAgICB0bXBJZCA9IC0xO1xuICAgIGNsYXNzaWZpZWRzID0gMDtcbiAgICBkb3dubG9hZFRva2VuO1xuICAgIHVzZXJuYW1lX2NhcHRpb24gPSAn4Lic4Li54LmJ4Lia4Lix4LiZ4LiX4Li24LiBL+C4nOC4ueC5ieC4meC4s+C5gOC4guC5ieC4sidcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBhcHBDb25maWdTZXJ2aWNlOiBBcHBDb25maWdTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlcXVlc3Q6IFJlcXVlc3QsXG4gICAgICAgIHByaXZhdGUgY29tbW9uOiBDb21tb24sXG4gICAgICAgIHByaXZhdGUgYjJiOiBCMmJTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMuY29uZmlnID0gYXBwQ29uZmlnU2VydmljZS5nZXRDb25maWcoKTtcbiAgICB9XG5cbiAgICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRvd25sb2FkVG9rZW4gPSBhd2FpdCB0aGlzLmIyYi5nZXRBdHRhY2htZW50VG9rZW4oKTtcbiAgICAgICAgfSwgNTAwKVxuICAgICAgICBpZiAodGhpcy5tb2RlICE9PSBcIkNSRUFURVwiKSB7XG4gICAgICAgICAgICB0aGlzLmdldEF0dGFjaG1lbnRMaXN0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgZ2V0QXR0YWNobWVudExpc3QoKSB7XG5cbiAgICAgICAgY29uc29sZS5sb2coJ2dldEF0dGFjaG1lbnRMaXN0JywgdGhpcy5hdHRhY2htZW50TGlzdCwgdGhpcy5vcHRpb24udXNlcm5hbWVfY2FwdGlvbik7XG4gICAgICAgIGxldCBmaWx0ZXI6IGFueSA9IHtcbiAgICAgICAgICAgIGZpbHRlcjoge1xuICAgICAgICAgICAgICAgIHJlZl90YWJsZTogdGhpcy5vcHRpb24uZGF0YS5yZWZfdGFibGUsXG4gICAgICAgICAgICAgICAgcmVmX2lkOiB0aGlzLm9wdGlvbi5kYXRhLnJlZl9pZCxcbiAgICAgICAgICAgICAgICBzeXN0ZW1faWQ6IHRoaXMub3B0aW9uLmRhdGEuc3lzdGVtX2lkXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb3JkZXJfYnk6IFtcIm9yZGVyX25vXCJdXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9uLmRhdGEucmVzdWx0X3RhYmxlX2lkKSBmaWx0ZXIuZmlsdGVyLnJlc3VsdF90YWJsZV9pZCA9IHRoaXMub3B0aW9uLmRhdGEucmVzdWx0X3RhYmxlX2lkO1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5yZXF1ZXN0LnBvc3QoJy9zZWFyY2gvcmNfYXR0YWNobWVudF9wcm9wJywgZmlsdGVyKTtcbiAgICAgICAgdGhpcy5hdHRhY2htZW50TGlzdCA9IGRhdGEucmVzdWx0RGF0YTtcbiAgICAgICAgdGhpcy5jbGFzc2lmaWVkcyA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgb2YgdGhpcy5hdHRhY2htZW50TGlzdCkge1xuICAgICAgICAgICAgaWYgKGkuaXNfY2xhc3NpZmllZHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsYXNzaWZpZWRzKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coJ2dldEF0dGFjaG1lbnRMaXN0JywgdGhpcy5hdHRhY2htZW50TGlzdCk7XG4gICAgICAgIHRoaXMub25Mb2FkZWQuZW1pdCgpO1xuICAgIH1cblxuICAgIGFkZEF0dGFjaG1lbnRMaXN0KGRhdGEpIHtcbiAgICAgICAgZGF0YS5pZCA9IHRoaXMudG1wSWQ7XG4gICAgICAgIHRoaXMudG1wSWQtLTtcbiAgICAgICAgaWYgKHRoaXMuYjJiLmdldFZlcmlmeVRva2VuKCkucGhvbmVCb29rRGF0YSAmJiB0aGlzLmIyYi5nZXRWZXJpZnlUb2tlbigpLnBob25lQm9va0RhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZGF0YS51c2VybmFtZSA9IHRoaXMuYjJiLmdldFZlcmlmeVRva2VuKCkudXNlcm5hbWU7XG4gICAgICAgICAgICBkYXRhLnJlY29yZGVyX25hbWUgPSB0aGlzLmIyYi5nZXRWZXJpZnlUb2tlbigpLnBob25lQm9va0RhdGFbMF0ubmFtZTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhLmFjdGlvbiA9IFwiYWRkXCI7XG4gICAgICAgIGlmIChkYXRhLmlzX2NsYXNzaWZpZWRzKSB7XG4gICAgICAgICAgICB0aGlzLmNsYXNzaWZpZWRzKys7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hdHRhY2htZW50TGlzdC5wdXNoKGRhdGEpO1xuICAgICAgICBjb25zb2xlLmxvZygnZ2V0QXR0YWNobWVudExpc3QnLCB0aGlzLmF0dGFjaG1lbnRMaXN0KTtcbiAgICB9XG5cbiAgICBlZGl0QXR0YWNobWVudExpc3QoZGF0YSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYXR0YWNobWVudExpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmF0dGFjaG1lbnRMaXN0W2ldLmlkID09PSBkYXRhLmlkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaXNfY2xhc3NpZmllZHMgJiYgIXRoaXMuYXR0YWNobWVudExpc3RbaV0uaXNfY2xhc3NpZmllZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGFzc2lmaWVkcysrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWRhdGEuaXNfY2xhc3NpZmllZHMgJiYgdGhpcy5hdHRhY2htZW50TGlzdFtpXS5pc19jbGFzc2lmaWVkcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsYXNzaWZpZWRzLS07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuYXR0YWNobWVudExpc3RbaV0gPSBkYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKCdnZXRBdHRhY2htZW50TGlzdCcsIHRoaXMuYXR0YWNobWVudExpc3QpO1xuICAgIH1cblxuICAgIGdldFJvd0luZGV4KGRhdGEpIHtcbiAgICAgICAgaWYgKCFkYXRhLmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBkYXRhLmRhdGEub3JkZXJfbm8gPSBkYXRhLmNvbXBvbmVudC5wYWdlSW5kZXgoKSAqIGRhdGEuY29tcG9uZW50LnBhZ2VTaXplKCkgKyBkYXRhLnJvd0luZGV4ICsgMTtcbiAgICAgICAgcmV0dXJuIGRhdGEuZGF0YS5vcmRlcl9ubztcbiAgICB9XG4gICAgY2xpY2tBZGQoKSB7XG4gICAgICAgIHRoaXMub3B0aW9uLm1vZGUgPSAnQ1JFQVRFJztcbiAgICAgICAgaWYgKHRoaXMuYXR0YWNobWVudE1vZGFsKSB7XG4gICAgICAgICAgICB0aGlzLmF0dGFjaG1lbnRNb2RhbC5vcGVuKHRoaXMub3B0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubW9kYWxBdHRhY2htZW50Lm9wZW4odGhpcy5vcHRpb24pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNsaWNrRWRpdChkYXRhKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdjbGlja0VkaXQnLCBkYXRhKVxuICAgICAgICBsZXQgZmlsZU5hbWUgPSBkYXRhLmZpbGVuYW1lXG4gICAgICAgIGxldCBmaWxlVHlwZSA9IGZpbGVOYW1lLnN1YnN0cmluZyhmaWxlTmFtZS5sZW5ndGggLSAzLCBmaWxlTmFtZS5sZW5ndGgpXG4gICAgICAgIGNvbnNvbGUubG9nKCdmaWxlVHlwZScsIGZpbGVUeXBlKVxuICAgICAgICBpZiAodGhpcy50eXBlID09IDEgJiYgKGZpbGVUeXBlID09ICdwZGYnIHx8IGZpbGVUeXBlID09ICdQREYnKSkge1xuICAgICAgICAgICAgY29uc3QgZWRpdERhdGEgPSBfLmNsb25lRGVlcCh0aGlzLm9wdGlvbik7XG4gICAgICAgICAgICBlZGl0RGF0YS5kYXRhID0gZGF0YTtcbiAgICAgICAgICAgIGVkaXREYXRhLm1vZGUgPSAnRURJVCc7XG4gICAgICAgICAgICBlZGl0RGF0YS5kb3dubG9hZFRva2VuID0gdGhpcy5kb3dubG9hZFRva2VuO1xuICAgICAgICAgICAgdGhpcy5vbkNsaWNrU2Nhbi5lbWl0KGVkaXREYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgY29uc3QgZWRpdERhdGEgPSBfLmNsb25lRGVlcCh0aGlzLm9wdGlvbik7XG4gICAgICAgICAgICBlZGl0RGF0YS5kYXRhID0gZGF0YTtcbiAgICAgICAgICAgIGVkaXREYXRhLm1vZGUgPSAnRURJVCc7XG4gICAgICAgICAgICBlZGl0RGF0YS5kb3dubG9hZFRva2VuID0gdGhpcy5kb3dubG9hZFRva2VuO1xuICAgICAgICAgICAgaWYgKHRoaXMuYXR0YWNobWVudE1vZGFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdHRhY2htZW50TW9kYWwub3BlbihlZGl0RGF0YSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kYWxBdHRhY2htZW50Lm9wZW4oZWRpdERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9XG4gICAgY2xpY2tWaWV3KGRhdGEpIHtcbiAgICAgICAgbGV0IGZpbGVOYW1lID0gZGF0YS5maWxlbmFtZVxuICAgICAgICBsZXQgZmlsZVR5cGUgPSBmaWxlTmFtZS5zdWJzdHJpbmcoZmlsZU5hbWUubGVuZ3RoIC0gMywgZmlsZU5hbWUubGVuZ3RoKVxuICAgICAgICBjb25zb2xlLmxvZygnZmlsZVR5cGUnLCBmaWxlVHlwZSlcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PSAxICYmIChmaWxlVHlwZSA9PSAncGRmJyB8fCBmaWxlVHlwZSA9PSAnUERGJykpIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdEYXRhID0gXy5jbG9uZURlZXAodGhpcy5vcHRpb24pO1xuICAgICAgICAgICAgdmlld0RhdGEuZGF0YSA9IGRhdGE7XG4gICAgICAgICAgICB2aWV3RGF0YS5tb2RlID0gJ1ZJRVcnO1xuICAgICAgICAgICAgdGhpcy5vbkNsaWNrU2Nhbi5lbWl0KHZpZXdEYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdEYXRhID0gXy5jbG9uZURlZXAodGhpcy5vcHRpb24pO1xuICAgICAgICAgICAgdmlld0RhdGEuZGF0YSA9IGRhdGE7XG4gICAgICAgICAgICB2aWV3RGF0YS5tb2RlID0gJ1ZJRVcnO1xuICAgICAgICAgICAgdmlld0RhdGEuZG93bmxvYWRUb2tlbiA9IHRoaXMuZG93bmxvYWRUb2tlbjtcbiAgICAgICAgICAgIGlmICh0aGlzLmF0dGFjaG1lbnRWaWV3TW9kYWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmF0dGFjaG1lbnRWaWV3TW9kYWwub3Blbih2aWV3RGF0YSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kYWxBdHRhY2htZW50Vmlldy5vcGVuKHZpZXdEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjbGlja01vdmVVcChkYXRhKSB7XG4gICAgICAgIGxldCB0bXAgPSB0aGlzLmF0dGFjaG1lbnRMaXN0W2RhdGEucm93SW5kZXhdO1xuICAgICAgICB0aGlzLmF0dGFjaG1lbnRMaXN0W2RhdGEucm93SW5kZXhdID0gdGhpcy5hdHRhY2htZW50TGlzdFtkYXRhLnJvd0luZGV4IC0gMV07XG4gICAgICAgIHRoaXMuYXR0YWNobWVudExpc3RbZGF0YS5yb3dJbmRleCAtIDFdID0gdG1wO1xuICAgIH1cbiAgICBjbGlja01vdmVEb3duKGRhdGEpIHtcbiAgICAgICAgbGV0IHRtcCA9IHRoaXMuYXR0YWNobWVudExpc3RbZGF0YS5yb3dJbmRleF07XG4gICAgICAgIHRoaXMuYXR0YWNobWVudExpc3RbZGF0YS5yb3dJbmRleF0gPSB0aGlzLmF0dGFjaG1lbnRMaXN0W2RhdGEucm93SW5kZXggKyAxXTtcbiAgICAgICAgdGhpcy5hdHRhY2htZW50TGlzdFtkYXRhLnJvd0luZGV4ICsgMV0gPSB0bXA7XG4gICAgfVxuICAgIGFzeW5jIGNsaWNrRG93bmxvYWQoZGF0YSkge1xuICAgICAgICB3aW5kb3cub3BlbihkYXRhLnVybCArIFwiP2Rvd25sb2FkVG9rZW49XCIgKyB0aGlzLmRvd25sb2FkVG9rZW4pO1xuICAgIH1cbiAgICBnZXRMYXN0U3RlcCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGFzdFN0ZXA7XG4gICAgfVxuICAgIC8qKiBTVEFSVCBERUxFVEUgKi9cbiAgICBmbkNsaWNrRGVsZXRlKGlkTGlzdDogYW55W10pIHtcbiAgICAgICAgdGhpcy5vbkNsaWNrRGVsZXRlLmVtaXQoKTtcbiAgICAgICAgdGhpcy5kZWxldGVJZExpc3QgPSBpZExpc3Q7XG4gICAgICAgIGlmICh0aGlzLmRlbGV0ZUlkTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1EZWxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25maXJtRGVsZXRlKCkge1xuICAgICAgICB0aGlzLmdvQWxlcnQoJycsICcnLCAnbXlNb2RhbERlbGV0ZUF0dGFjaG1lbnQnKTtcbiAgICB9XG5cbiAgICBnb0FsZXJ0KHVzZXJUaXRsZSwgdXNlck1lc3NhZ2UsIG1vZGFsSWQpIHtcbiAgICAgICAgY29uc3QgZGF0YUFsZXJ0ID0ge1xuICAgICAgICAgICAgJ21vZGFsSWQnOiBtb2RhbElkLFxuICAgICAgICAgICAgJ3VzZXJUaXRsZSc6IHVzZXJUaXRsZSxcbiAgICAgICAgICAgICd1c2VyTWVzc2FnZSc6IHVzZXJNZXNzYWdlXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLmFsZXJ0TW9kYWwpIHtcbiAgICAgICAgICAgIHRoaXMuYWxlcnRNb2RhbC5vcGVuTW9kYWwoZGF0YUFsZXJ0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubXlNb2RhbC5vcGVuTW9kYWwoZGF0YUFsZXJ0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ2VsbFByZXBhcmVkKGUpIHtcbiAgICAgICAgaWYgKGUucm93VHlwZSA9PT0gJ2RhdGEnKSB7XG4gICAgICAgICAgICBlLmNlbGxFbGVtZW50LmFjY2Vzc0tleSA9IGUuY29sdW1uLmNhcHRpb247XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBmbkRlbGV0ZU11bHRpcGxlKCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcInRoaXMuZGVsZXRlSWRMaXN0XCIsIHRoaXMuZGVsZXRlSWRMaXN0KTtcbiAgICAgICAgY29uc29sZS5sb2coXCJ0aGlzLmF0dGFjaG1lbnRMaXN0IGJlZm9yZVwiLCB0aGlzLmF0dGFjaG1lbnRMaXN0KTtcbiAgICAgICAgZm9yIChsZXQgaWQgb2YgdGhpcy5kZWxldGVJZExpc3QpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSB0aGlzLmF0dGFjaG1lbnRMaXN0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYXR0YWNobWVudExpc3RbaV0uaWQgPT09IGlkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmF0dGFjaG1lbnRMaXN0W2ldLmlzX2NsYXNzaWZpZWRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsYXNzaWZpZWRzLS07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdHRhY2htZW50TGlzdC5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKFwidGhpcy5hdHRhY2htZW50TGlzdCBhZnRlclwiLCB0aGlzLmF0dGFjaG1lbnRMaXN0KTtcbiAgICB9XG4gICAgb25DbGlja0JhY2soKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiY2xpY2tiYWNrXCIpO1xuICAgIH1cblxuICAgIGdldEltYWdlTGluayhkYXRhKSB7XG4gICAgICAgIHJldHVybiBkYXRhLnVybCArIFwiP2Rvd25sb2FkVG9rZW49XCIgKyB0aGlzLmRvd25sb2FkVG9rZW47XG4gICAgfVxuXG4gICAgc2NhbigpIHtcbiAgICAgICAgdGhpcy5vcHRpb24ubW9kZSA9ICdDUkVBVEUnO1xuICAgICAgICB0aGlzLm9uQ2xpY2tTY2FuLmVtaXQodGhpcy5vcHRpb24pO1xuICAgIH1cblxufVxuIl19