sent-list.component.js
24.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
/**
* @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';
export class SentListComponent {
/**
* @param {?} appConfigService
* @param {?} request
* @param {?} common
* @param {?} formBuilder
* @param {?} b2b
*/
constructor(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 {?}
*/
ngOnInit() {
// 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 {?}
*/
fr() { return this.recieveForm.controls; }
/**
* @return {?}
*/
getSentList() {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
console.log('getSentList', this.sentList);
/** @type {?} */
let sentData = this.option.data;
/** @type {?} */
let filter = {
filter: {
ref_table: sentData.ref_table,
ref_id: sentData.ref_id
},
order_by: ["is_important", "send_book_no", "created_at"]
};
/** @type {?} */
const data = yield this.request.post('/search/v_ct_step_sent', filter);
this.sentList = data.resultData;
console.log('getSentList', this.sentList);
});
}
/**
* @param {?} data
* @return {?}
*/
getRowIndex(data) {
if (!data.data) {
return '';
}
/** @type {?} */
const page = this.dxDataGridSentList.instance.option('paging.pageIndex') || 0;
/** @type {?} */
const pageSize = this.dxDataGridSentList.instance.option('paging.pageSize');
/** @type {?} */
const no = data.row.dataIndex + 1;
return page * pageSize + no;
}
/**
* @param {?} data
* @return {?}
*/
editRecieve(data) {
console.log('data', data);
this.tmpData = data;
this.recieveModal.show();
}
/**
* @return {?}
*/
closeRecieveModal() {
this.submittedRecieve = false;
this.recieveData = {};
this.tmpData = {};
this.recieveModal.hide();
}
/**
* @return {?}
*/
onSubmitRecieve() {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
this.submittedRecieve = true;
// ถ้า form ไม่ครบหรือผิดตามเงื่อนไขที่ตั้งไว้จะจบที่ตรงนี้
if (this.recieveForm.invalid) {
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);
yield this.request.post("/db/ct_recieve", this.recieveData);
this.getSentList();
this.closeRecieveModal();
});
}
/**
* @param {?} data
* @return {?}
*/
isImportant(data) {
return data.is_important ? "สำคัญ" : "";
}
/**
* @param {?} e
* @return {?}
*/
onCellPrepared(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\">×</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 = () => [
{ 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',] }]
};
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VudC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3NvYy1hcHAtbGlicmFyeS8iLCJzb3VyY2VzIjpbImxpYi9zZW50LWxpc3Qvc2VudC1saXN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQXlCLFNBQVMsRUFBRSxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFakYsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDbEUsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDdkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSw4Q0FBOEMsQ0FBQztBQUNwRixPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBQyxXQUFXLEVBQUUsV0FBVyxFQUFhLFVBQVUsRUFBa0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFNcEQsTUFBTTs7Ozs7Ozs7SUEyQkYsWUFDWSxrQkFDQSxTQUNELFFBQ0MsYUFDQTtRQUpBLHFCQUFnQixHQUFoQixnQkFBZ0I7UUFDaEIsWUFBTyxHQUFQLE9BQU87UUFDUixXQUFNLEdBQU4sTUFBTTtRQUNMLGdCQUFXLEdBQVgsV0FBVztRQUNYLFFBQUcsR0FBSCxHQUFHO29CQTlCeUIsUUFBUTt3QkFTaEMsRUFBRTs4QkFFRCxFQUFFO2lDQUNDLEVBQUU7aUNBQ0YsRUFBRTtpQ0FDRixFQUFFO2lDQUNGLEdBQUc7eUJBQ1gsRUFBRTt3QkFFSCxFQUFFOzJCQUVLLEVBQUU7Z0NBRUQsS0FBSztRQVNwQixJQUFJLENBQUMsTUFBTSxHQUFHLGdC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YyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBPbkluaXQsIEFmdGVyVmlld0luaXQsIFZpZXdDaGlsZCwgSW5wdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtNb2RhbFN0ZXBDb21wb25lbnR9IGZyb20gJy4uL21vZGFsLXN0ZXAvbW9kYWwtc3RlcC5jb21wb25lbnQnO1xuaW1wb3J0IHtBcHBDb25maWdTZXJ2aWNlfSBmcm9tICcuLi9hcHAtY29uZmlnL2FwcC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQge0R4RGF0YUdyaWRDb21wb25lbnR9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhcic7XG5pbXBvcnQgeyBSZXF1ZXN0IH0gZnJvbSAnLi4vX3NlcnZpY2VzL3JlcXVlc3Quc2VydmljZSc7XG5pbXBvcnQge0NvbW1vbn0gZnJvbSAnLi4vX3NlcnZpY2VzL2NvbW1vbi5zZXJ2aWNlJztcbmltcG9ydCB7TW9kYWxTdGVwVmlld0NvbXBvbmVudH0gZnJvbSAnLi4vbW9kYWwtc3RlcC12aWV3L21vZGFsLXN0ZXAtdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHtNb2RhbERpcmVjdGl2ZX0gZnJvbSAnbmd4LWJvb3RzdHJhcCc7XG5pbXBvcnQge0Zvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzLCBBYnN0cmFjdENvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7Q3VzdG9tVmFsaWRhdG9yc30gZnJvbSAnbmcyLXZhbGlkYXRpb24nO1xuaW1wb3J0IHtCMmJTZXJ2aWNlfSBmcm9tICcuLi9fc2VydmljZXMvYjJiLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzb2Mtc2VudC1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlbnQtbGlzdC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgU2VudExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgQElucHV0KCkgbW9kZTogJ0NSRUFURSd8J0VESVQnfCdWSUVXJyA9ICdDUkVBVEUnO1xuICAgIEBJbnB1dCgpIG9wdGlvbjogYW55O1xuICAgIEBWaWV3Q2hpbGQoJ2R4RGF0YUdyaWRTZW50TGlzdCcpXG4gICAgZHhEYXRhR3JpZFNlbnRMaXN0OiBEeERhdGFHcmlkQ29tcG9uZW50O1xuICAgIC8vIEBWaWV3Q2hpbGQoJ21vZGFsU3RlcCcpXG4gICAgLy8gbW9kYWxTdGVwOiBNb2RhbFN0ZXBDb21wb25lbnQ7XG4gICAgQFZpZXdDaGlsZCgnbW9kYWxTdGVwVmlldycpXG4gICAgbW9kYWxTdGVwVmlldzogTW9kYWxTdGVwVmlld0NvbXBvbmVudDtcbiAgICBAVmlld0NoaWxkKCdyZWNpZXZlTW9kYWwnKSByZWNpZXZlTW9kYWw6IE1vZGFsRGlyZWN0aXZlO1xuICAgIHNlbnRMaXN0OiBhbnkgPSBbXTtcbiAgICB0aDtcbiAgICBkeGdyaWRQYWdlU2l6ZSA9IDEwO1xuICAgIGFsbG93ZWRQYWdlU2l6ZXMxID0gMTA7XG4gICAgYWxsb3dlZFBhZ2VTaXplczIgPSAyNTtcbiAgICBhbGxvd2VkUGFnZVNpemVzMyA9IDUwO1xuICAgIGFsbG93ZWRQYWdlU2l6ZXM0ID0gMTAwO1xuICAgIGN1c3RvbWVycyA9IFtdO1xuICAgIHVybDtcbiAgICBsYXN0U3RlcCA9ICcnO1xuICAgIGNvbmZpZzogYW55O1xuICAgIHJlY2lldmVEYXRhOmFueSA9IHt9O1xuICAgIHRtcERhdGE6YW55O1xuICAgIHN1Ym1pdHRlZFJlY2lldmUgPSBmYWxzZTtcbiAgICByZWNpZXZlRm9ybTogRm9ybUdyb3VwO1xuICAgIC8vIGRvd25sb2FkVG9rZW46YW55O1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGFwcENvbmZpZ1NlcnZpY2U6IEFwcENvbmZpZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVxdWVzdDogUmVxdWVzdCxcbiAgICAgICAgcHVibGljIGNvbW1vbjogQ29tbW9uLFxuICAgICAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICAgICAgcHJpdmF0ZSBiMmI6QjJiU2VydmljZSkge1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGFwcENvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIC8vIGlmKHRoaXMubW9kZSA9PT0gXCJFRElUXCIpe1xuICAgICAgICAvLyBzZXRUaW1lb3V0KGFzeW5jICgpPT57XG4gICAgICAgIC8vICAgICB0aGlzLmRvd25sb2FkVG9rZW4gPSBhd2FpdCB0aGlzLmIyYi5nZXRBdHRhY2htZW50VG9rZW4oKTtcbiAgICAgICAgLy8gfSw1MDApXG4gICAgICAgIHRoaXMuZ2V0U2VudExpc3QoKTtcbiAgICAgICAgdGhpcy5yZWNpZXZlRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgICAgICAgYm9va19ubzogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgICAgICAgcmVjdl9kYXRlOiAgbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIH1cbiAgICB9XG5cbiAgICBmcigpIHsgcmV0dXJuIHRoaXMucmVjaWV2ZUZvcm0uY29udHJvbHM7IH1cblxuICAgIGFzeW5jIGdldFNlbnRMaXN0KCkge1xuICAgICAgICBjb25zb2xlLmxvZygnZ2V0U2VudExpc3QnLHRoaXMuc2VudExpc3QpO1xuICAgICAgICBsZXQgc2VudERhdGEgPSB0aGlzLm9wdGlvbi5kYXRhO1xuICAgICAgICBsZXQgZmlsdGVyID0ge1xuICAgICAgICAgICAgZmlsdGVyIDoge1xuICAgICAgICAgICAgICAgIHJlZl90YWJsZSA6IHNlbnREYXRhLnJlZl90YWJsZSxcbiAgICAgICAgICAgICAgICByZWZfaWQgOiBzZW50RGF0YS5yZWZfaWRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvcmRlcl9ieTpbXCJpc19pbXBvcnRhbnRcIixcInNlbmRfYm9va19ub1wiLFwiY3JlYXRlZF9hdFwiXVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLnJlcXVlc3QucG9zdCgnL3NlYXJjaC92X2N0X3N0ZXBfc2VudCcsZmlsdGVyKTtcbiAgICAgICAgdGhpcy5zZW50TGlzdCA9IGRhdGEucmVzdWx0RGF0YTtcbiAgICAgICAgY29uc29sZS5sb2coJ2dldFNlbnRMaXN0Jyx0aGlzLnNlbnRMaXN0KTtcbiAgICB9XG5cbiAgICBnZXRSb3dJbmRleChkYXRhKSB7XG4gICAgICAgIGlmICghZGF0YS5kYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFnZSA9IHRoaXMuZHhEYXRhR3JpZFNlbnRMaXN0Lmluc3RhbmNlLm9wdGlvbigncGFnaW5nLnBhZ2VJbmRleCcpIHx8IDA7XG4gICAgICAgIGNvbnN0IHBhZ2VTaXplID0gdGhpcy5keERhdGFHcmlkU2VudExpc3QuaW5zdGFuY2Uub3B0aW9uKCdwYWdpbmcucGFnZVNpemUnKTtcbiAgICAgICAgY29uc3Qgbm8gPSBkYXRhLnJvdy5kYXRhSW5kZXggKyAxO1xuICAgICAgICByZXR1cm4gcGFnZSAqIHBhZ2VTaXplICsgbm87XG4gICAgfVxuXG4gICAgZWRpdFJlY2lldmUoZGF0YSkge1xuICAgICAgICBjb25zb2xlLmxvZygnZGF0YScsZGF0YSk7XG4gICAgICAgIHRoaXMudG1wRGF0YSA9IGRhdGE7XG4gICAgICAgIHRoaXMucmVjaWV2ZU1vZGFsLnNob3coKTtcbiAgICB9XG5cbiAgICBjbG9zZVJlY2lldmVNb2RhbCgpIHtcbiAgICAgICAgdGhpcy5zdWJtaXR0ZWRSZWNpZXZlID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVjaWV2ZURhdGEgPSB7fTtcbiAgICAgICAgdGhpcy50bXBEYXRhID0ge307XG4gICAgICAgIHRoaXMucmVjaWV2ZU1vZGFsLmhpZGUoKTtcbiAgICB9XG5cbiAgICBhc3luYyBvblN1Ym1pdFJlY2lldmUoKSB7XG4gICAgICAgIHRoaXMuc3VibWl0dGVkUmVjaWV2ZSA9IHRydWU7XG5cbiAgICAgICAgLy8g4LiW4LmJ4LiyIGZvcm0g4LmE4Lih4LmI4LiE4Lij4Lia4Lir4Lij4Li34Lit4Lic4Li04LiU4LiV4Liy4Lih4LmA4LiH4Li34LmI4Lit4LiZ4LmE4LiC4LiX4Li14LmI4LiV4Lix4LmJ4LiH4LmE4Lin4LmJ4LiI4Liw4LiI4Lia4LiX4Li14LmI4LiV4Lij4LiH4LiZ4Li14LmJXG4gICAgICAgIGlmICh0aGlzLnJlY2lldmVGb3JtLmludmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZygndG1wRGF0YScsdGhpcy50bXBEYXRhKTtcbiAgICAgICAgdGhpcy5yZWNpZXZlRGF0YS5uYW1lID0gdGhpcy50bXBEYXRhLm5hbWU7XG4gICAgICAgIGlmKHRoaXMudG1wRGF0YS5jdF9tYWluX2lkKSB0aGlzLnJlY2lldmVEYXRhLmN0X21haW5faWQgPSB0aGlzLnRtcERhdGEuY3RfbWFpbl9pZDtcbiAgICAgICAgaWYodGhpcy50bXBEYXRhLmN0X3NlbmRfaWQpIHRoaXMucmVjaWV2ZURhdGEuY3Rfc2VuZF9pZCA9IHRoaXMudG1wRGF0YS5jdF9zZW5kX2lkO1xuICAgICAgICBpZih0aGlzLnRtcERhdGEuY3Rfc3RlcF9kYXRhX2lkKSB0aGlzLnJlY2lldmVEYXRhLmN0X3N0ZXBfZGF0YV9pZCA9IHRoaXMudG1wRGF0YS5jdF9zdGVwX2RhdGFfaWQ7XG4gICAgICAgIGNvbnNvbGUubG9nKCdyZWNpZXZlRGF0YScsdGhpcy5yZWNpZXZlRGF0YSk7XG4gICAgICAgIGF3YWl0IHRoaXMucmVxdWVzdC5wb3N0KFwiL2RiL2N0X3JlY2lldmVcIix0aGlzLnJlY2lldmVEYXRhKTtcbiAgICAgICAgdGhpcy5nZXRTZW50TGlzdCgpO1xuICAgICAgICB0aGlzLmNsb3NlUmVjaWV2ZU1vZGFsKCk7XG4gICAgfVxuICAgIGlzSW1wb3J0YW50KGRhdGEpe1xuICAgICAgICByZXR1cm4gZGF0YS5pc19pbXBvcnRhbnQ/XCLguKrguLPguITguLHguI1cIjpcIlwiO1xuICAgIH1cblxuICAgIG9uQ2VsbFByZXBhcmVkKGUpIHtcbiAgICAgICAgaWYgKGUucm93VHlwZSA9PT0gJ2RhdGEnKSB7XG4gICAgICAgICAgICBlLmNlbGxFbGVtZW50LmFjY2Vzc0tleSA9IGUuY29sdW1uLmNhcHRpb247XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=