sent-list.component.js 26.6 KB
/**
 * @fileoverview added by tsickle
 * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
 */
import * as tslib_1 from "tslib";
import { Component, ViewChild, Input } 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 { ModalStepViewComponent } from '../modal-step-view/modal-step-view.component';
import { ModalDirective } from 'ngx-bootstrap';
import { FormBuilder, FormControl, Validators } from '@angular/forms';
import { B2bService } from '../_services/b2b.service';
var SentListComponent = /** @class */ (function () {
    // downloadToken:any;
    function SentListComponent(appConfigService, request, common, formBuilder, b2b) {
        this.appConfigService = appConfigService;
        this.request = request;
        this.common = common;
        this.formBuilder = formBuilder;
        this.b2b = b2b;
        this.mode = 'CREATE';
        this.sentList = [];
        this.dxgridPageSize = 10;
        this.allowedPageSizes1 = 10;
        this.allowedPageSizes2 = 25;
        this.allowedPageSizes3 = 50;
        this.allowedPageSizes4 = 100;
        this.customers = [];
        this.lastStep = '';
        this.recieveData = {};
        this.submittedRecieve = false;
        this.config = appConfigService.getConfig();
    }
    /**
     * @return {?}
     */
    SentListComponent.prototype.ngOnInit = /**
     * @return {?}
     */
    function () {
        // if(this.mode === "EDIT"){
        // setTimeout(async ()=>{
        //     this.downloadToken = await this.b2b.getAttachmentToken();
        // },500)
        this.getSentList();
        this.recieveForm = this.formBuilder.group({
            book_no: ['', [Validators.required]],
            recv_date: new FormControl(''),
        });
        // }
    };
    /**
     * @return {?}
     */
    SentListComponent.prototype.fr = /**
     * @return {?}
     */
    function () { return this.recieveForm.controls; };
    /**
     * @return {?}
     */
    SentListComponent.prototype.getSentList = /**
     * @return {?}
     */
    function () {
        return tslib_1.__awaiter(this, void 0, void 0, function () {
            var sentData, filter, data;
            return tslib_1.__generator(this, function (_a) {
                switch (_a.label) {
                    case 0:
                        console.log('getSentList', this.sentList);
                        sentData = this.option.data;
                        filter = {
                            filter: {
                                ref_table: sentData.ref_table,
                                ref_id: sentData.ref_id
                            },
                            order_by: ["is_important", "send_book_no", "created_at"]
                        };
                        return [4 /*yield*/, this.request.post('/search/v_ct_step_sent', filter)];
                    case 1:
                        data = _a.sent();
                        this.sentList = data.resultData;
                        console.log('getSentList', this.sentList);
                        return [2 /*return*/];
                }
            });
        });
    };
    /**
     * @param {?} data
     * @return {?}
     */
    SentListComponent.prototype.getRowIndex = /**
     * @param {?} data
     * @return {?}
     */
    function (data) {
        if (!data.data) {
            return '';
        }
        /** @type {?} */
        var page = this.dxDataGridSentList.instance.option('paging.pageIndex') || 0;
        /** @type {?} */
        var pageSize = this.dxDataGridSentList.instance.option('paging.pageSize');
        /** @type {?} */
        var no = data.row.dataIndex + 1;
        return page * pageSize + no;
    };
    /**
     * @param {?} data
     * @return {?}
     */
    SentListComponent.prototype.editRecieve = /**
     * @param {?} data
     * @return {?}
     */
    function (data) {
        console.log('data', data);
        this.tmpData = data;
        this.recieveModal.show();
    };
    /**
     * @return {?}
     */
    SentListComponent.prototype.closeRecieveModal = /**
     * @return {?}
     */
    function () {
        this.submittedRecieve = false;
        this.recieveData = {};
        this.tmpData = {};
        this.recieveModal.hide();
    };
    /**
     * @return {?}
     */
    SentListComponent.prototype.onSubmitRecieve = /**
     * @return {?}
     */
    function () {
        return tslib_1.__awaiter(this, void 0, void 0, function () {
            return tslib_1.__generator(this, function (_a) {
                switch (_a.label) {
                    case 0:
                        this.submittedRecieve = true;
                        // ถ้า form ไม่ครบหรือผิดตามเงื่อนไขที่ตั้งไว้จะจบที่ตรงนี้
                        if (this.recieveForm.invalid) {
                            return [2 /*return*/];
                        }
                        console.log('tmpData', this.tmpData);
                        this.recieveData.name = this.tmpData.name;
                        if (this.tmpData.ct_main_id)
                            this.recieveData.ct_main_id = this.tmpData.ct_main_id;
                        if (this.tmpData.ct_send_id)
                            this.recieveData.ct_send_id = this.tmpData.ct_send_id;
                        if (this.tmpData.ct_step_data_id)
                            this.recieveData.ct_step_data_id = this.tmpData.ct_step_data_id;
                        console.log('recieveData', this.recieveData);
                        return [4 /*yield*/, this.request.post("/db/ct_recieve", this.recieveData)];
                    case 1:
                        _a.sent();
                        this.getSentList();
                        this.closeRecieveModal();
                        return [2 /*return*/];
                }
            });
        });
    };
    /**
     * @param {?} data
     * @return {?}
     */
    SentListComponent.prototype.isImportant = /**
     * @param {?} data
     * @return {?}
     */
    function (data) {
        return data.is_important ? "สำคัญ" : "";
    };
    /**
     * @param {?} e
     * @return {?}
     */
    SentListComponent.prototype.onCellPrepared = /**
     * @param {?} e
     * @return {?}
     */
    function (e) {
        if (e.rowType === 'data') {
            e.cellElement.accessKey = e.column.caption;
        }
    };
    SentListComponent.decorators = [
        { type: Component, args: [{
                    selector: 'soc-sent-list',
                    template: "\n<div class=\"col-sm-12\">\n    <div class=\"table-responsive table-wrapper\">\n        <dx-data-grid #dxDataGridSentList\n                      id=\"gridContainer\" noDataText=\"\" showBorders=\"true\" class=\"card-list-table\"\n                      (onCellPrepared)=\"onCellPrepared($event)\" [dataSource]=\"sentList\"\n                      [hoverStateEnabled]=\"true\" [rowAlternationEnabled]=\"true\" [columnAutoWidth]=\"false\"\n                      [allowColumnResizing]=\"true\" [allowColumnReordering]=\"true\" [wordWrapEnabled]=\"false\"\n                      [showBorders]=\"true\">\n            <dxi-column caption=\"\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\u0E17\u0E35\u0E48\" [allowSorting]=\"false\" cellTemplate=\"cellTemplate\" alignment=\"center\" [width]=\"70\"></dxi-column>\n            <dxi-column *ngIf=\"mode === 'EDIT'\" caption=\"\u0E08\u0E31\u0E14\u0E01\u0E32\u0E23\" [allowSorting]=\"false\" cellTemplate=\"cellTemplateAction\" alignment=\"center\" [width]=\"70\"></dxi-column>\n            <dxi-column dataField=\"send_to\" caption=\"\u0E2B\u0E19\u0E48\u0E27\u0E22\u0E07\u0E32\u0E19\"></dxi-column>\n            <dxi-column dataField=\"send_book_no\" caption=\"\u0E40\u0E25\u0E02\u0E17\u0E35\u0E48\u0E2B\u0E19\u0E31\u0E07\u0E2A\u0E37\u0E2D\u0E2A\u0E48\u0E07\u0E2D\u0E2D\u0E01\"></dxi-column>\n            <dxi-column dataField=\"send_date\" caption=\"\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E2A\u0E48\u0E07\u0E2D\u0E2D\u0E01\" dataType=\"date\" alignment=\"center\" [width]=\"100\"></dxi-column>\n            <dxi-column [calculateCellValue]=\"isImportant\" caption=\"\u0E04\u0E27\u0E32\u0E21\u0E2A\u0E33\u0E04\u0E31\u0E0D\"></dxi-column>\n            <dxi-column dataField=\"book_no\" caption=\"\u0E40\u0E25\u0E02\u0E17\u0E35\u0E48\u0E23\u0E31\u0E1A\u0E2B\u0E19\u0E31\u0E07\u0E2A\u0E37\u0E2D\"></dxi-column>\n            <dxi-column dataField=\"recv_date\" caption=\"\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E23\u0E31\u0E1A\" dataType=\"date\" alignment=\"center\" [width]=\"100\"></dxi-column>\n            <dxo-paging [pageSize]=\"dxgridPageSize\"></dxo-paging>\n            <dxo-pager [showPageSizeSelector]=\"true\" [allowedPageSizes]=\"[allowedPageSizes1, allowedPageSizes2, allowedPageSizes3, allowedPageSizes4]\"\n                       [showInfo]=\"false\" [visible]=\"true\" [showNavigationButtons]=\"true\">\n            </dxo-pager>\n            <dxo-state-storing [enabled]=\"true\" type=\"localStorage\" storageKey=\"sentListDataGrid\"></dxo-state-storing>\n            <div *dxTemplate=\"let data of 'cellTemplate'\">\n                {{getRowIndex(data)}}\n            </div>\n            <div *dxTemplate=\"let data of 'cellTemplateAction'\">\n                <a *ngIf=\"mode === 'EDIT'\" id=\"btnEditRecieve\" (click)=\"editRecieve(data.data)\" class=\"btn btn-default btn-sm icon\" data-toggle=\"tooltip\" data-placement=\"top\" title=\"\u0E41\u0E01\u0E49\u0E44\u0E02\"><i class=\"fal fa-pencil-alt\"></i></a>\n            </div>\n        </dx-data-grid>\n    </div>\n</div><!--End col-sm-12-->\n<div class=\"modal fade\" bsModal #recieveModal=\"bs-modal\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"dialog-static-name2\" [config]=\"{backdrop: 'static'}\">\n    <div class=\"modal-dialog modal-md\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <h4 id=\"dialog-static-recieve\" class=\"modal-title pull-left\"><label>\u0E23\u0E31\u0E1A\u0E2B\u0E19\u0E31\u0E07\u0E2A\u0E37\u0E2D \u0E15\u0E2D\u0E1A\u0E04\u0E27\u0E32\u0E21\u0E40\u0E2B\u0E47\u0E19</label></h4>\n                <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"closeRecieveModal()\">\n                    <span aria-hidden=\"true\">&times;</span>\n                </button>\n            </div>\n            <div class=\"modal-body\">\n                <form class=\"m-form m-form--state m-form--fit m-form--label-align-right\" [formGroup]=\"recieveForm\" (ngSubmit)=\"onSubmitRecieve()\">\n                    <div class=\"ibox-body\">\n                        <div class=\"row\">\n                            <div class=\"form-group\">\n                                <label class=\"control-label\">\u0E40\u0E25\u0E02\u0E17\u0E35\u0E48\u0E23\u0E31\u0E1A\u0E2B\u0E19\u0E31\u0E07\u0E2A\u0E37\u0E2D</label>\n                                <div class=\"form-group m-form__group\" [ngClass]=\"{ 'has-error': submittedRecieve && fr().book_no.errors }\">\n                                    <input type=\"text\" class=\"form-control m-input\" id=\"txtRecieveBookNo\" formControlName=\"book_no\" [(ngModel)]=\"recieveData.book_no\">\n                                    <div *ngIf=\"submittedRecieve && fr().book_no.errors\" class=\"invalid-feedback\">\n                                        <div *ngIf=\"fr().book_no.errors.required\">First Name is required</div>\n                                    </div>\n                                </div>\n                            </div>\n                            <div class=\"form-group\">\n                                <label class=\"control-label\">\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E23\u0E31\u0E1A</label>\n                                <!--<div class=\"form-group m-form__group\" [ngClass]=\"{ 'has-error': submittedRecieve && fr().recv_date.errors }\">-->\n                                    <soc-date-box [id]=\"'txtRecieveDate'\" [(value)]=\"recieveData.recv_date\"></soc-date-box>\n                                    <!--<div *ngIf=\"submittedRecieve && fr().recv_date.errors\" >-->\n                                        <!--<div *ngIf=\"fr().recv_date.errors.required\" class=\"lable-error\">Date is required</div>-->\n                                        <!--<div *ngIf=\"fr().recv_date.errors.date\" class=\"lable-error\">Date is invalid</div>-->\n                                    <!--</div>-->\n                                <!--</div>-->\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"m-portlet__foot m-portlet__foot--fit text-right\">\n                        <div class=\"m-form__actions\">\n                            <button type=\"submit\" class=\"btn btn-success btn-md btn-md-save\">\n                                \u0E1A\u0E31\u0E19\u0E17\u0E36\u0E01\n                            </button>\n                            <button type=\"reset\" class=\"btn btn-default btn-md btn-md-search\" (click)=\"closeRecieveModal()\">\n                                \u0E22\u0E01\u0E40\u0E25\u0E34\u0E01\n                            </button>\n                        </div>\n                    </div>\n                </form>\n            </div>\n        </div>\n    </div>\n</div>\n"
                }] }
    ];
    /** @nocollapse */
    SentListComponent.ctorParameters = function () { return [
        { type: AppConfigService },
        { type: Request },
        { type: Common },
        { type: FormBuilder },
        { type: B2bService }
    ]; };
    SentListComponent.propDecorators = {
        mode: [{ type: Input }],
        option: [{ type: Input }],
        dxDataGridSentList: [{ type: ViewChild, args: ['dxDataGridSentList',] }],
        modalStepView: [{ type: ViewChild, args: ['modalStepView',] }],
        recieveModal: [{ type: ViewChild, args: ['recieveModal',] }]
    };
    return SentListComponent;
}());
export { SentListComponent };
if (false) {
    /** @type {?} */
    SentListComponent.prototype.mode;
    /** @type {?} */
    SentListComponent.prototype.option;
    /** @type {?} */
    SentListComponent.prototype.dxDataGridSentList;
    /** @type {?} */
    SentListComponent.prototype.modalStepView;
    /** @type {?} */
    SentListComponent.prototype.recieveModal;
    /** @type {?} */
    SentListComponent.prototype.sentList;
    /** @type {?} */
    SentListComponent.prototype.th;
    /** @type {?} */
    SentListComponent.prototype.dxgridPageSize;
    /** @type {?} */
    SentListComponent.prototype.allowedPageSizes1;
    /** @type {?} */
    SentListComponent.prototype.allowedPageSizes2;
    /** @type {?} */
    SentListComponent.prototype.allowedPageSizes3;
    /** @type {?} */
    SentListComponent.prototype.allowedPageSizes4;
    /** @type {?} */
    SentListComponent.prototype.customers;
    /** @type {?} */
    SentListComponent.prototype.url;
    /** @type {?} */
    SentListComponent.prototype.lastStep;
    /** @type {?} */
    SentListComponent.prototype.config;
    /** @type {?} */
    SentListComponent.prototype.recieveData;
    /** @type {?} */
    SentListComponent.prototype.tmpData;
    /** @type {?} */
    SentListComponent.prototype.submittedRecieve;
    /** @type {?} */
    SentListComponent.prototype.recieveForm;
    /** @type {?} */
    SentListComponent.prototype.appConfigService;
    /** @type {?} */
    SentListComponent.prototype.request;
    /** @type {?} */
    SentListComponent.prototype.common;
    /** @type {?} */
    SentListComponent.prototype.formBuilder;
    /** @type {?} */
    SentListComponent.prototype.b2b;
}

//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VudC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3NvYy1hcHAtbGlicmFyeS8iLCJzb3VyY2VzIjpbImxpYi9zZW50LWxpc3Qvc2VudC1saXN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQXlCLFNBQVMsRUFBRSxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFakYsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDbEUsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDdkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSw4Q0FBOEMsQ0FBQztBQUNwRixPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBQyxXQUFXLEVBQUUsV0FBVyxFQUFhLFVBQVUsRUFBa0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7O0lBZ0NoRCxxQkFBcUI7SUFDckIsMkJBQ1ksa0JBQ0EsU0FDRCxRQUNDLGFBQ0E7UUFKQSxxQkFBZ0IsR0FBaEIsZ0JBQWdCO1FBQ2hCLFlBQU8sR0FBUCxPQUFPO1FBQ1IsV0FBTSxHQUFOLE1BQU07UUFDTCxnQkFBVyxHQUFYLFdBQVc7UUFDWCxRQUFHLEdBQUgsR0FBRztvQkE5QnlCLFFBQVE7d0JBU2hDLEVBQUU7OEJBRUQsRUFBRTtpQ0FDQyxFQUFFO2lDQUNGLEVBQUU7aUNBQ0YsRUFBRTtpQ0FDRixHQUFHO3lCQUNYLEVBQUU7d0JBRUgsRUFBRTsyQkFFSyxFQUFFO2dDQUVELEtBQUs7UUFTcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxnQkFB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QUVmLE9BQU87Z0JBQ1IsTUFBTTtnQkFHTixXQUFXO2dCQUVYLFVBQVU7Ozt1QkFRYixLQUFLO3lCQUNMLEtBQUs7cUNBQ0wsU0FBUyxTQUFDLG9CQUFvQjtnQ0FJOUIsU0FBUyxTQUFDLGVBQWU7K0JBRXpCLFNBQVMsU0FBQyxjQUFjOzs0QkExQjdCOztTQWdCYSxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgT25Jbml0LCBBZnRlclZpZXdJbml0LCBWaWV3Q2hpbGQsIElucHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TW9kYWxTdGVwQ29tcG9uZW50fSBmcm9tICcuLi9tb2RhbC1zdGVwL21vZGFsLXN0ZXAuY29tcG9uZW50JztcbmltcG9ydCB7QXBwQ29uZmlnU2VydmljZX0gZnJvbSAnLi4vYXBwLWNvbmZpZy9hcHAtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHtEeERhdGFHcmlkQ29tcG9uZW50fSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXInO1xuaW1wb3J0IHsgUmVxdWVzdCB9IGZyb20gJy4uL19zZXJ2aWNlcy9yZXF1ZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHtDb21tb259IGZyb20gJy4uL19zZXJ2aWNlcy9jb21tb24uc2VydmljZSc7XG5pbXBvcnQge01vZGFsU3RlcFZpZXdDb21wb25lbnR9IGZyb20gJy4uL21vZGFsLXN0ZXAtdmlldy9tb2RhbC1zdGVwLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7TW9kYWxEaXJlY3RpdmV9IGZyb20gJ25neC1ib290c3RyYXAnO1xuaW1wb3J0IHtGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycywgQWJzdHJhY3RDb250cm9sfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0N1c3RvbVZhbGlkYXRvcnN9IGZyb20gJ25nMi12YWxpZGF0aW9uJztcbmltcG9ydCB7QjJiU2VydmljZX0gZnJvbSAnLi4vX3NlcnZpY2VzL2IyYi5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc29jLXNlbnQtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zZW50LWxpc3QuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFNlbnRMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICAgIEBJbnB1dCgpIG1vZGU6ICdDUkVBVEUnfCdFRElUJ3wnVklFVycgPSAnQ1JFQVRFJztcbiAgICBASW5wdXQoKSBvcHRpb246IGFueTtcbiAgICBAVmlld0NoaWxkKCdkeERhdGFHcmlkU2VudExpc3QnKVxuICAgIGR4RGF0YUdyaWRTZW50TGlzdDogRHhEYXRhR3JpZENvbXBvbmVudDtcbiAgICAvLyBAVmlld0NoaWxkKCdtb2RhbFN0ZXAnKVxuICAgIC8vIG1vZGFsU3RlcDogTW9kYWxTdGVwQ29tcG9uZW50O1xuICAgIEBWaWV3Q2hpbGQoJ21vZGFsU3RlcFZpZXcnKVxuICAgIG1vZGFsU3RlcFZpZXc6IE1vZGFsU3RlcFZpZXdDb21wb25lbnQ7XG4gICAgQFZpZXdDaGlsZCgncmVjaWV2ZU1vZGFsJykgcmVjaWV2ZU1vZGFsOiBNb2RhbERpcmVjdGl2ZTtcbiAgICBzZW50TGlzdDogYW55ID0gW107XG4gICAgdGg7XG4gICAgZHhncmlkUGFnZVNpemUgPSAxMDtcbiAgICBhbGxvd2VkUGFnZVNpemVzMSA9IDEwO1xuICAgIGFsbG93ZWRQYWdlU2l6ZXMyID0gMjU7XG4gICAgYWxsb3dlZFBhZ2VTaXplczMgPSA1MDtcbiAgICBhbGxvd2VkUGFnZVNpemVzNCA9IDEwMDtcbiAgICBjdXN0b21lcnMgPSBbXTtcbiAgICB1cmw7XG4gICAgbGFzdFN0ZXAgPSAnJztcbiAgICBjb25maWc6IGFueTtcbiAgICByZWNpZXZlRGF0YTphbnkgPSB7fTtcbiAgICB0bXBEYXRhOmFueTtcbiAgICBzdWJtaXR0ZWRSZWNpZXZlID0gZmFsc2U7XG4gICAgcmVjaWV2ZUZvcm06IEZvcm1Hcm91cDtcbiAgICAvLyBkb3dubG9hZFRva2VuOmFueTtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBhcHBDb25maWdTZXJ2aWNlOiBBcHBDb25maWdTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlcXVlc3Q6IFJlcXVlc3QsXG4gICAgICAgIHB1YmxpYyBjb21tb246IENvbW1vbixcbiAgICAgICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgICAgIHByaXZhdGUgYjJiOkIyYlNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5jb25maWcgPSBhcHBDb25maWdTZXJ2aWNlLmdldENvbmZpZygpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICAvLyBpZih0aGlzLm1vZGUgPT09IFwiRURJVFwiKXtcbiAgICAgICAgLy8gc2V0VGltZW91dChhc3luYyAoKT0+e1xuICAgICAgICAvLyAgICAgdGhpcy5kb3dubG9hZFRva2VuID0gYXdhaXQgdGhpcy5iMmIuZ2V0QXR0YWNobWVudFRva2VuKCk7XG4gICAgICAgIC8vIH0sNTAwKVxuICAgICAgICB0aGlzLmdldFNlbnRMaXN0KCk7XG4gICAgICAgIHRoaXMucmVjaWV2ZUZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgICAgIGJvb2tfbm86IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgICAgICAgIHJlY3ZfZGF0ZTogIG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgICAgIH0pO1xuICAgICAgICAvLyB9XG4gICAgfVxuXG4gICAgZnIoKSB7IHJldHVybiB0aGlzLnJlY2lldmVGb3JtLmNvbnRyb2xzOyB9XG5cbiAgICBhc3luYyBnZXRTZW50TGlzdCgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ2dldFNlbnRMaXN0Jyx0aGlzLnNlbnRMaXN0KTtcbiAgICAgICAgbGV0IHNlbnREYXRhID0gdGhpcy5vcHRpb24uZGF0YTtcbiAgICAgICAgbGV0IGZpbHRlciA9IHtcbiAgICAgICAgICAgIGZpbHRlciA6IHtcbiAgICAgICAgICAgICAgICByZWZfdGFibGUgOiBzZW50RGF0YS5yZWZfdGFibGUsXG4gICAgICAgICAgICAgICAgcmVmX2lkIDogc2VudERhdGEucmVmX2lkXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb3JkZXJfYnk6W1wiaXNfaW1wb3J0YW50XCIsXCJzZW5kX2Jvb2tfbm9cIixcImNyZWF0ZWRfYXRcIl1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5yZXF1ZXN0LnBvc3QoJy9zZWFyY2gvdl9jdF9zdGVwX3NlbnQnLGZpbHRlcik7XG4gICAgICAgIHRoaXMuc2VudExpc3QgPSBkYXRhLnJlc3VsdERhdGE7XG4gICAgICAgIGNvbnNvbGUubG9nKCdnZXRTZW50TGlzdCcsdGhpcy5zZW50TGlzdCk7XG4gICAgfVxuXG4gICAgZ2V0Um93SW5kZXgoZGF0YSkge1xuICAgICAgICBpZiAoIWRhdGEuZGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhZ2UgPSB0aGlzLmR4RGF0YUdyaWRTZW50TGlzdC5pbnN0YW5jZS5vcHRpb24oJ3BhZ2luZy5wYWdlSW5kZXgnKSB8fCAwO1xuICAgICAgICBjb25zdCBwYWdlU2l6ZSA9IHRoaXMuZHhEYXRhR3JpZFNlbnRMaXN0Lmluc3RhbmNlLm9wdGlvbigncGFnaW5nLnBhZ2VTaXplJyk7XG4gICAgICAgIGNvbnN0IG5vID0gZGF0YS5yb3cuZGF0YUluZGV4ICsgMTtcbiAgICAgICAgcmV0dXJuIHBhZ2UgKiBwYWdlU2l6ZSArIG5vO1xuICAgIH1cblxuICAgIGVkaXRSZWNpZXZlKGRhdGEpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ2RhdGEnLGRhdGEpO1xuICAgICAgICB0aGlzLnRtcERhdGEgPSBkYXRhO1xuICAgICAgICB0aGlzLnJlY2lldmVNb2RhbC5zaG93KCk7XG4gICAgfVxuXG4gICAgY2xvc2VSZWNpZXZlTW9kYWwoKSB7XG4gICAgICAgIHRoaXMuc3VibWl0dGVkUmVjaWV2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlY2lldmVEYXRhID0ge307XG4gICAgICAgIHRoaXMudG1wRGF0YSA9IHt9O1xuICAgICAgICB0aGlzLnJlY2lldmVNb2RhbC5oaWRlKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgb25TdWJtaXRSZWNpZXZlKCkge1xuICAgICAgICB0aGlzLnN1Ym1pdHRlZFJlY2lldmUgPSB0cnVlO1xuXG4gICAgICAgIC8vIOC4luC5ieC4siBmb3JtIOC5hOC4oeC5iOC4hOC4o+C4muC4q+C4o+C4t+C4reC4nOC4tOC4lOC4leC4suC4oeC5gOC4h+C4t+C5iOC4reC4meC5hOC4guC4l+C4teC5iOC4leC4seC5ieC4h+C5hOC4p+C5ieC4iOC4sOC4iOC4muC4l+C4teC5iOC4leC4o+C4h+C4meC4teC5iVxuICAgICAgICBpZiAodGhpcy5yZWNpZXZlRm9ybS5pbnZhbGlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coJ3RtcERhdGEnLHRoaXMudG1wRGF0YSk7XG4gICAgICAgIHRoaXMucmVjaWV2ZURhdGEubmFtZSA9IHRoaXMudG1wRGF0YS5uYW1lO1xuICAgICAgICBpZih0aGlzLnRtcERhdGEuY3RfbWFpbl9pZCkgdGhpcy5yZWNpZXZlRGF0YS5jdF9tYWluX2lkID0gdGhpcy50bXBEYXRhLmN0X21haW5faWQ7XG4gICAgICAgIGlmKHRoaXMudG1wRGF0YS5jdF9zZW5kX2lkKSB0aGlzLnJlY2lldmVEYXRhLmN0X3NlbmRfaWQgPSB0aGlzLnRtcERhdGEuY3Rfc2VuZF9pZDtcbiAgICAgICAgaWYodGhpcy50bXBEYXRhLmN0X3N0ZXBfZGF0YV9pZCkgdGhpcy5yZWNpZXZlRGF0YS5jdF9zdGVwX2RhdGFfaWQgPSB0aGlzLnRtcERhdGEuY3Rfc3RlcF9kYXRhX2lkO1xuICAgICAgICBjb25zb2xlLmxvZygncmVjaWV2ZURhdGEnLHRoaXMucmVjaWV2ZURhdGEpO1xuICAgICAgICBhd2FpdCB0aGlzLnJlcXVlc3QucG9zdChcIi9kYi9jdF9yZWNpZXZlXCIsdGhpcy5yZWNpZXZlRGF0YSk7XG4gICAgICAgIHRoaXMuZ2V0U2VudExpc3QoKTtcbiAgICAgICAgdGhpcy5jbG9zZVJlY2lldmVNb2RhbCgpO1xuICAgIH1cbiAgICBpc0ltcG9ydGFudChkYXRhKXtcbiAgICAgICAgcmV0dXJuIGRhdGEuaXNfaW1wb3J0YW50P1wi4Liq4Liz4LiE4Lix4LiNXCI6XCJcIjtcbiAgICB9XG5cbiAgICBvbkNlbGxQcmVwYXJlZChlKSB7XG4gICAgICAgIGlmIChlLnJvd1R5cGUgPT09ICdkYXRhJykge1xuICAgICAgICAgICAgZS5jZWxsRWxlbWVudC5hY2Nlc3NLZXkgPSBlLmNvbHVtbi5jYXB0aW9uO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19