Blame view

esm5/lib/attachment-list/attachment-list.component.js 52.8 KB
75f29219   Anan Sangthongtum   first commit
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
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
/**
 * @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';
var AttachmentListComponent = /** @class */ (function () {
    function AttachmentListComponent(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 {?}
     */
    AttachmentListComponent.prototype.ngOnInit = /**
     * @return {?}
     */
    function () {
        return tslib_1.__awaiter(this, void 0, void 0, function () {
            var _this = this;
            return tslib_1.__generator(this, function (_a) {
                setTimeout(function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
                    var _a;
                    return tslib_1.__generator(this, function (_b) {
                        switch (_b.label) {
                            case 0:
                                _a = this;
                                return [4 /*yield*/, this.b2b.getAttachmentToken()];
                            case 1:
                                _a.downloadToken = _b.sent();
                                return [2 /*return*/];
                        }
                    });
                }); }, 500);
                if (this.mode !== "CREATE") {
                    this.getAttachmentList();
                }
                return [2 /*return*/];
            });
        });
    };
    /**
     * @return {?}
     */
    AttachmentListComponent.prototype.getAttachmentList = /**
     * @return {?}
     */
    function () {
        return tslib_1.__awaiter(this, void 0, void 0, function () {
            var e_1, _a, filter, data, _b, _c, i;
            return tslib_1.__generator(this, function (_d) {
                switch (_d.label) {
                    case 0:
                        console.log('getAttachmentList', this.attachmentList, this.option.username_caption);
                        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;
                        return [4 /*yield*/, this.request.post('/search/rc_attachment_prop', filter)];
                    case 1:
                        data = _d.sent();
                        this.attachmentList = data.resultData;
                        this.classifieds = 0;
                        try {
                            for (_b = tslib_1.__values(this.attachmentList), _c = _b.next(); !_c.done; _c = _b.next()) {
                                i = _c.value;
                                if (i.is_classifieds) {
                                    this.classifieds++;
                                }
                            }
                        }
                        catch (e_1_1) { e_1 = { error: e_1_1 }; }
                        finally {
                            try {
                                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
                            }
                            finally { if (e_1) throw e_1.error; }
                        }
                        console.log('getAttachmentList', this.attachmentList);
                        this.onLoaded.emit();
                        return [2 /*return*/];
                }
            });
        });
    };
    /**
     * @param {?} data
     * @return {?}
     */
    AttachmentListComponent.prototype.addAttachmentList = /**
     * @param {?} data
     * @return {?}
     */
    function (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 {?}
     */
    AttachmentListComponent.prototype.editAttachmentList = /**
     * @param {?} data
     * @return {?}
     */
    function (data) {
        for (var 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 {?}
     */
    AttachmentListComponent.prototype.getRowIndex = /**
     * @param {?} data
     * @return {?}
     */
    function (data) {
        if (!data.data) {
            return '';
        }
        data.data.order_no = data.component.pageIndex() * data.component.pageSize() + data.rowIndex + 1;
        return data.data.order_no;
    };
    /**
     * @return {?}
     */
    AttachmentListComponent.prototype.clickAdd = /**
     * @return {?}
     */
    function () {
        this.option.mode = 'CREATE';
        if (this.attachmentModal) {
            this.attachmentModal.open(this.option);
        }
        else {
            this.modalAttachment.open(this.option);
        }
    };
    /**
     * @param {?} data
     * @return {?}
     */
    AttachmentListComponent.prototype.clickEdit = /**
     * @param {?} data
     * @return {?}
     */
    function (data) {
        console.log('clickEdit', data);
        /** @type {?} */
        var fileName = data.filename;
        /** @type {?} */
        var fileType = fileName.substring(fileName.length - 3, fileName.length);
        console.log('fileType', fileType);
        if (this.type == 1 && (fileType == 'pdf' || fileType == 'PDF')) {
            /** @type {?} */
            var editData = _.cloneDeep(this.option);
            editData.data = data;
            editData.mode = 'EDIT';
            editData.downloadToken = this.downloadToken;
            this.onClickScan.emit(editData);
        }
        else {
            /** @type {?} */
            var 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 {?}
     */
    AttachmentListComponent.prototype.clickView = /**
     * @param {?} data
     * @return {?}
     */
    function (data) {
        /** @type {?} */
        var fileName = data.filename;
        /** @type {?} */
        var fileType = fileName.substring(fileName.length - 3, fileName.length);
        console.log('fileType', fileType);
        if (this.type == 1 && (fileType == 'pdf' || fileType == 'PDF')) {
            /** @type {?} */
            var viewData = _.cloneDeep(this.option);
            viewData.data = data;
            viewData.mode = 'VIEW';
            this.onClickScan.emit(viewData);
        }
        else {
            /** @type {?} */
            var 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 {?}
     */
    AttachmentListComponent.prototype.clickMoveUp = /**
     * @param {?} data
     * @return {?}
     */
    function (data) {
        /** @type {?} */
        var tmp = this.attachmentList[data.rowIndex];
        this.attachmentList[data.rowIndex] = this.attachmentList[data.rowIndex - 1];
        this.attachmentList[data.rowIndex - 1] = tmp;
    };
    /**
     * @param {?} data
     * @return {?}
     */
    AttachmentListComponent.prototype.clickMoveDown = /**
     * @param {?} data
     * @return {?}
     */
    function (data) {
        /** @type {?} */
        var tmp = this.attachmentList[data.rowIndex];
        this.attachmentList[data.rowIndex] = this.attachmentList[data.rowIndex + 1];
        this.attachmentList[data.rowIndex + 1] = tmp;
    };
    /**
     * @param {?} data
     * @return {?}
     */
    AttachmentListComponent.prototype.clickDownload = /**
     * @param {?} data
     * @return {?}
     */
    function (data) {
        return tslib_1.__awaiter(this, void 0, void 0, function () {
            return tslib_1.__generator(this, function (_a) {
                window.open(data.url + "?downloadToken=" + this.downloadToken);
                return [2 /*return*/];
            });
        });
    };
    /**
     * @return {?}
     */
    AttachmentListComponent.prototype.getLastStep = /**
     * @return {?}
     */
    function () {
        return this.lastStep;
    };
    /** START DELETE */
    /**
     * START DELETE
     * @param {?} idList
     * @return {?}
     */
    AttachmentListComponent.prototype.fnClickDelete = /**
     * START DELETE
     * @param {?} idList
     * @return {?}
     */
    function (idList) {
        this.onClickDelete.emit();
        this.deleteIdList = idList;
        if (this.deleteIdList.length > 0) {
            this.confirmDelete();
        }
    };
    /**
     * @return {?}
     */
    AttachmentListComponent.prototype.confirmDelete = /**
     * @return {?}
     */
    function () {
        this.goAlert('', '', 'myModalDeleteAttachment');
    };
    /**
     * @param {?} userTitle
     * @param {?} userMessage
     * @param {?} modalId
     * @return {?}
     */
    AttachmentListComponent.prototype.goAlert = /**
     * @param {?} userTitle
     * @param {?} userMessage
     * @param {?} modalId
     * @return {?}
     */
    function (userTitle, userMessage, modalId) {
        /** @type {?} */
        var dataAlert = {
            'modalId': modalId,
            'userTitle': userTitle,
            'userMessage': userMessage
        };
        if (this.alertModal) {
            this.alertModal.openModal(dataAlert);
        }
        else {
            this.myModal.openModal(dataAlert);
        }
    };
    /**
     * @param {?} e
     * @return {?}
     */
    AttachmentListComponent.prototype.onCellPrepared = /**
     * @param {?} e
     * @return {?}
     */
    function (e) {
        if (e.rowType === 'data') {
            e.cellElement.accessKey = e.column.caption;
        }
    };
    /**
     * @return {?}
     */
    AttachmentListComponent.prototype.fnDeleteMultiple = /**
     * @return {?}
     */
    function () {
        return tslib_1.__awaiter(this, void 0, void 0, function () {
            var e_2, _a, _b, _c, id, i;
            return tslib_1.__generator(this, function (_d) {
                console.log("this.deleteIdList", this.deleteIdList);
                console.log("this.attachmentList before", this.attachmentList);
                try {
                    for (_b = tslib_1.__values(this.deleteIdList), _c = _b.next(); !_c.done; _c = _b.next()) {
                        id = _c.value;
                        for (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);
                            }
                        }
                    }
                }
                catch (e_2_1) { e_2 = { error: e_2_1 }; }
                finally {
                    try {
                        if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
                    }
                    finally { if (e_2) throw e_2.error; }
                }
                console.log("this.attachmentList after", this.attachmentList);
                return [2 /*return*/];
            });
        });
    };
    /**
     * @return {?}
     */
    AttachmentListComponent.prototype.onClickBack = /**
     * @return {?}
     */
    function () {
        console.log("clickback");
    };
    /**
     * @param {?} data
     * @return {?}
     */
    AttachmentListComponent.prototype.getImageLink = /**
     * @param {?} data
     * @return {?}
     */
    function (data) {
        return data.url + "?downloadToken=" + this.downloadToken;
    };
    /**
     * @return {?}
     */
    AttachmentListComponent.prototype.scan = /**
     * @return {?}
     */
    function () {
        this.option.mode = 'CREATE';
        this.onClickScan.emit(this.option);
    };
    AttachmentListComponent.decorators = [
        { type: Component, args: [{
                    selector: 'soc-attachment-list',
                    template: "<div class=\"col-sm-12\">\n        <div class=\"ibox-heading-total\" style=\"padding: 0px 20px 0;\">\n                <h5 class=\"ibox-title-text\"></h5>\n                <!--<button id=\"btn\" name=\"btn\" type=\"button\" class=\"btn btn-success \" data-toggle=\"tooltip\"-->\n                <!--title=\"\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E23\u0E32\u0E22\u0E25\u0E30\u0E40\u0E2D\u0E35\u0E22\u0E14\u0E1B\u0E23\u0E30\u0E40\u0E14\u0E47\u0E19\" data-placement=\"top\" style=\"min-width: 80px;padding: 8px 10px;\">\u0E17\u0E33\u0E2A\u0E33\u0E40\u0E19\u0E32</button>-->\n                <button *ngIf=\"mode !== 'VIEW' &&  type === 1\" id=\"btnScan\" name=\"btnScan\" type=\"button\"\n                        class=\"btn btn-success\" data-toggle=\"tooltip\" data-placement=\"top\"\n                        style=\"min-width: 80px;padding: 8px 10px;\" (click)=\"scan()\">\u0E2A\u0E41\u0E01\u0E19</button>\n                <button *ngIf=\"mode !== 'VIEW'\" [disabled]=\"selectedAttachment.length === 0\" id=\"btnDelete\"\n                        name=\"btnDelete\" type=\"button\" class=\"btn btn-success\" data-toggle=\"tooltip\"\n                        data-placement=\"top\" style=\"min-width: 80px;padding: 8px 10px;\"\n                        (click)=\"fnClickDelete(selectedAttachment)\">\u0E25\u0E1A</button>\n                <button *ngIf=\"mode !== 'VIEW'\" id=\"btnAdd\" name=\"btnAdd\" type=\"button\" class=\"btn btn-success\"\n                        data-toggle=\"tooltip\" data-placement=\"top\" style=\"min-width: 80px;padding: 8px 10px;\"\n                        (click)=\"clickAdd()\">\u0E40\u0E1E\u0E34\u0E48\u0E21</button>\n        </div>\n        <div class=\"ibox-body\">\n                <div class=\"table-responsive table-wrapper\">\n                        <!--(onCellPrepared)=\"onCellPrepared1($event)\"-->\n                        <dx-data-grid #dxDataGridPrisoner id=\"dxDataGridPrisoner\" [dataSource]=\"attachmentList\"\n                                keyExpr=\"id\" [hoverStateEnabled]=\"true\" noDataText=\"\" showBorders=\"true\"\n                                [rowAlternationEnabled]=\"true\" [columnAutoWidth]=\"false\" class=\"card-list-table\"\n                                [allowColumnResizing]=\"true\" [allowColumnReordering]=\"true\"\n                                (onCellPrepared)=\"onCellPrepared($event)\" [wordWrapEnabled]=\"false\"\n                                [(selectedRowKeys)]=\"selectedAttachment\" class=\"card-list-table\">\n                                <dxo-paging [pageSize]=\"dxgridPageSize\"></dxo-paging>\n                                <dxo-pager [showPageSizeSelector]=\"true\"\n                                        [allowedPageSizes]=\"[allowedPageSizes1, allowedPageSizes2, allowedPageSizes3, allowedPageSizes4]\"\n                                        [showInfo]=\"false\" [visible]=\"true\" [showNavigationButtons]=\"true\"></dxo-pager>\n                                <dxo-scrolling showScrollbar=\"always\"></dxo-scrolling>\n                                <dxo-remote-operations [sorting]=\"true\" [paging]=\"true\"></dxo-remote-operations>\n                                <dxo-selection *ngIf=\"mode !== 'VIEW'\" selectAllMode=\"page\" showCheckBoxesMode=\"always\"\n                                        mode=\"multiple\" style=\"min-width: 50px !important;\"></dxo-selection>\n                                <dxo-state-storing [enabled]=\"true\" type=\"localStorage\"\n                                        storageKey=\"attachmentListDataGrid\"></dxo-state-storing>\n                                <dxi-column caption=\"\u0E25\u0E33\u0E14\u0E31\u0E1A\u0E17\u0E35\u0E48\" [allowSorting]=\"false\" cellTemplate=\"cellTemplateNo\"\n                                        alignment=\"center\" [width]=\"70\"></dxi-column>\n                                <dxi-column caption=\"\u0E08\u0E31\u0E14\u0E01\u0E32\u0E23\" [allowSorting]=\"false\" cellTemplate=\"cellTemplateAction\"\n                                        alignment=\"center\" [width]=\"mode !== 'VIEW' ? 255 : 105\"></dxi-column>\n                                <dxi-column dataField=\"recorder_name\" [caption]=\"option.username_caption ?option.username_caption :username_caption\"></dxi-column>\n                                <dxi-column *ngIf=\"type === 3\" dataField=\"book_no\" caption=\"\u0E40\u0E25\u0E02\u0E17\u0E35\u0E48\u0E40\u0E2D\u0E01\u0E2A\u0E32\u0E23\"></dxi-column>\n                                <dxi-column *ngIf=\"type === 2 || type === 1\" dataField=\"name\" caption=\"\u0E0A\u0E37\u0E48\u0E2D\u0E40\u0E2D\u0E01\u0E2A\u0E32\u0E23\">\n                                </dxi-column>\n                                <dxi-column dataField=\"doc_type\" caption=\"\u0E1B\u0E23\u0E30\u0E40\u0E20\u0E17\u0E40\u0E2D\u0E01\u0E2A\u0E32\u0E23\"></dxi-column>\n                                <dxi-column *ngIf=\"type === 1\" dataField=\"is_classifieds\" caption=\"\u0E08\u0E31\u0E14\u0E40\u0E02\u0E49\u0E32\u0E27\u0E32\u0E23\u0E30\">\n                                </dxi-column>\n                                <!--<dxi-column dataField=\"order\" caption=\"\u0E25\u0E33\u0E14\u0E31\u0E1A\"></dxi-column>-->\n                                <dxi-column dataField=\"created_at\" caption=\"\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E2A\u0E23\u0E49\u0E32\u0E07/\u0E19\u0E33\u0E40\u0E02\u0E49\u0E32\" dataType=\"date\"\n                                        alignment=\"center\" [width]=\"100\"></dxi-column>\n                                <dxi-column *ngIf=\"type === 3\" dataField=\"record_date\" dataType=\"date\"\n                                        caption=\"\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E08\u0E31\u0E14\u0E40\u0E01\u0E47\u0E1A\" alignment=\"center\" [width]=\"100\"></dxi-column>\n                                <dxi-column *ngIf=\"type === 2 || type === 1\" dataField=\"remark\" caption=\"\u0E2B\u0E21\u0E32\u0E22\u0E40\u0E2B\u0E15\u0E38\">\n                                </dxi-column>\n                                <!--<dxi-column *ngIf=\"type === 3\" dataField=\"amount\" caption=\"\u0E08\u0E33\u0E19\u0E27\u0E19\"></dxi-column>-->\n                                <!--<dxi-column *ngIf=\"type === 4\" dataField=\"version\" caption=\"\u0E40\u0E27\u0E2D\u0E23\u0E4C\u0E0A\u0E31\u0E48\u0E19\"></dxi-column>-->\n                                <dxi-column *ngIf=\"showImage\" caption=\"\u0E40\u0E04\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E2B\u0E21\u0E32\u0E22\" cellTemplate=\"cellTemplateImage\">\n                                </dxi-column>\n                                <div *dxTemplate=\"let data of 'cellTemplateImage'\" class=\" text-center\">\n                                        <img *ngIf=\"showImage\" [src]=\"getImageLink(data.data)\"\n                                                style=\"width: auto !important;\">\n                                </div>\n                                <div *dxTemplate=\"let data of 'cellTemplateNo'\" class=\" text-center\">\n                                        <span>{{getRowIndex(data)}}</span>\n                                </div>\n                                <div *dxTemplate=\"let data of 'cellTemplateAction'\">\n                                        <a *ngIf=\"mode !== 'VIEW'\" id=\"btnEdit\" (click)=\"clickEdit(data.data)\"\n                                                class=\"btn btn-default btn-sm  icon\" data-toggle=\"tooltip\"\n                                                data-placement=\"top\" title=\"\u0E41\u0E01\u0E49\u0E44\u0E02\"><i class=\"fal fa-pencil-alt\"></i></a>\n                                        <a id=\"btnView\" (click)=\"clickView(data.data)\"\n                                                class=\"btn btn-default btn-sm icon\" data-toggle=\"tooltip\"\n                                                data-placement=\"top\" title=\"\u0E14\u0E39\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\"><i class=\"fal fa-eye\"></i></a>\n                                        <a *ngIf=\"data.rowIndex !== 0 && mode !== 'VIEW'\" id=\"btnMoveUp\"\n                                                (click)=\"clickMoveUp(data)\" class=\"btn btn-default btn-sm icon\"\n                                                data-toggle=\"tooltip\" data-placement=\"top\" title=\"\u0E40\u0E25\u0E37\u0E48\u0E2D\u0E19\u0E02\u0E36\u0E49\u0E19\"><i\n                                                        class=\"fal fa-arrow-up\"></i></a>\n                                        <a *ngIf=\"data.rowIndex < data.component.pageSize() -1 && data.rowIndex < attachmentList.length - 1 && mode !== 'VIEW'\"\n                                                id=\"btnMoveDown\" (click)=\"clickMoveDown(data)\"\n                                                class=\"btn btn-default btn-sm icon\" data-toggle=\"tooltip\"\n                                                data-placement=\"top\" title=\"\u0E40\u0E25\u0E37\u0E48\u0E2D\u0E19\u0E25\u0E07\"><i\n                                                        class=\"fal fa-arrow-down\"></i></a>\n                                        <a id=\"btnDownload\" (click)=\"clickDownload(data.data)\"\n                                                class=\"btn btn-default btn-sm icon\" data-toggle=\"tooltip\"\n                                                data-placement=\"top\" title=\"\u0E14\u0E32\u0E27\u0E19\u0E4C\u0E42\u0E2B\u0E25\u0E14\"><i\n                                                        class=\"fal fa-download\"></i></a>\n                                </div>\n                        </dx-data-grid>\n                </div>\n        </div>\n</div>\n<!--End col-sm-12-->\n<!--<modal-step #modalStep (onUpdateModal)='getAttachmentList()' (onCreateModal)=\"addAttachmentList($event)\" [mode]=\"mode\"></modal-step>-->\n<modal-attachment #modalAttachment (onModalCreateSubmit)=\"addAttachmentList($event)\"\n        (onModalEditSubmit)=\"editAttachmentList($event)\" [isImage]=\"showImage\"></modal-attachment>\n<modal-attachment-view #modalAttachmentView [isImage]=\"showImage\"></modal-attachment-view>\n<app-alert #myModal (onOkDeleteAttachment)=\"fnDeleteMultiple()\" (onClickBack)=\"onClickBack()\"></app-alert>\n"
                }] }
    ];
    /** @nocollapse */
    AttachmentListComponent.ctorParameters = function () { return [
        { 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',] }]
    };
    return AttachmentListComponent;
}());
export { AttachmentListComponent };
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNobWVudC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3NvYy1hcHAtbGlicmFyeS8iLCJzb3VyY2VzIjpbImxpYi9hdHRhY2htZW50LWxpc3QvYXR0YWNobWVudC1saXN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXlCLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6RyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRXJELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQzFGLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQzs7SUErQ3BHLGlDQUNZLGtCQUNBLFNBQ0EsUUFDQTtRQUhBLHFCQUFnQixHQUFoQixnQkFBZ0I7UUFDaEIsWUFBTyxHQUFQLE9BQU87UUFDUCxXQUFNLEdBQU4sTUFBTTtRQUNOLFFBQUcsR0FBSCxHQUFHO29CQTNDNkIsUUFBUTtvQkFDNUIsQ0FBQzt5QkFFSyxLQUFLO3dCQUlkLElBQUksWUFBWSxFQUFFOzJCQUNmLElBQUksWUFBWSxFQUFFOzZCQUNoQixJQUFJLFlBQVksRUFBRTt1QkFXbEMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFFB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SUFFRCw4Q0FBWTs7OztJQUFaLFVBQWEsSUFBSTtRQUNiLE9BQU8sSUFBSSxDQUFDLEdBQUcsR0FBRyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO0tBQzVEOzs7O0lBRUQsc0NBQUk7OztJQUFKO1FBQ0ksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO1FBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUN0Qzs7Z0JBelBKLFNBQVMsU0FBQztvQkFDUCxRQUFRLEVBQUUscUJBQXFCO29CQUMvQiw0OVRBQStDO2lCQUNsRDs7OztnQkFkUSxnQkFBZ0I7Z0JBRWhCLE9BQU87Z0JBQ1AsTUFBTTtnQkFLTixVQUFVOzs7dUJBU2QsS0FBSzt1QkFDTCxLQUFLO3lCQUNMLEtBQUs7NEJBQ0wsS0FBSzs2QkFDTCxLQUFLO2tDQUNMLEtBQUs7c0NBQ0wsS0FBSzsyQkFDTCxNQUFNOzhCQUNOLE1BQU07Z0NBQ04sTUFBTTsyQ0FDTixTQUFTLFNBQUMsMEJBQTBCO2tDQUlwQyxTQUFTLFNBQUMsaUJBQWlCO3NDQUUzQixTQUFTLFNBQUMscUJBQXFCOzBCQUUvQixTQUFTLFNBQUMsU0FBUzs7a0NBckN4Qjs7U0FpQmEsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEFmdGVyVmlld0luaXQsIFZpZXdDaGlsZCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNb2RhbFN0ZXBDb21wb25lbnQgfSBmcm9tICcuLi9tb2RhbC1zdGVwL21vZGFsLXN0ZXAuY29tcG9uZW50JztcbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9hcHAtY29uZmlnL2FwcC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBEeERhdGFHcmlkQ29tcG9uZW50IH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyJztcbmltcG9ydCB7IFJlcXVlc3QgfSBmcm9tICcuLi9fc2VydmljZXMvcmVxdWVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1vbiB9IGZyb20gJy4uL19zZXJ2aWNlcy9jb21tb24uc2VydmljZSc7XG5pbXBvcnQgeyBNb2RhbFN0ZXBWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi4vbW9kYWwtc3RlcC12aWV3L21vZGFsLXN0ZXAtdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgTW9kYWxBdHRhY2htZW50Q29tcG9uZW50IH0gZnJvbSAnLi4vbW9kYWwtYXR0YWNobWVudC9tb2RhbC1hdHRhY2htZW50LmNvbXBvbmVudCc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBDcmVhdGVBbGVydENvbXBvbmVudCB9IGZyb20gJy4uL2FsZXJ0L2FsZXJ0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCMmJTZXJ2aWNlIH0gZnJvbSAnLi4vX3NlcnZpY2VzL2IyYi5zZXJ2aWNlJztcbmltcG9ydCB7IE1vZGFsQXR0YWNobWVudFZpZXdDb21wb25lbnQgfSBmcm9tICcuLi9tb2RhbC1hdHRhY2htZW50LXZpZXcvbW9kYWwtYXR0YWNobWVudC12aWV3LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc29jLWF0dGFjaG1lbnQtbGlzdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2F0dGFjaG1lbnQtbGlzdC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQXR0YWNobWVudExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgQElucHV0KCkgbW9kZTogJ0NSRUFURScgfCAnRURJVCcgfCAnVklFVycgPSAnQ1JFQVRFJztcbiAgICBASW5wdXQoKSB0eXBlOiBudW1iZXIgPSAyO1xuICAgIEBJbnB1dCgpIG9wdGlvbjogYW55O1xuICAgIEBJbnB1dCgpIHNob3dJbWFnZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGFsZXJ0TW9kYWw6IENyZWF0ZUFsZXJ0Q29tcG9uZW50O1xuICAgIEBJbnB1dCgpIGF0dGFjaG1lbnRNb2RhbDogTW9kYWxBdHRhY2htZW50Q29tcG9uZW50O1xuICAgIEBJbnB1dCgpIGF0dGFjaG1lbnRWaWV3TW9kYWw6IE1vZGFsQXR0YWNobWVudFZpZXdDb21wb25lbnQ7XG4gICAgQE91dHB1dCgpIG9uTG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBvbkNsaWNrU2NhbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgb25DbGlja0RlbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAVmlld0NoaWxkKCdkeERhdGFHcmlkQXR0YWNobWVudExpc3QnKVxuICAgIGR4RGF0YUdyaWRBdHRhY2htZW50TGlzdDogRHhEYXRhR3JpZENvbXBvbmVudDtcbiAgICAvLyBAVmlld0NoaWxkKCdtb2RhbFN0ZXAnKVxuICAgIC8vIG1vZGFsU3RlcDogTW9kYWxTdGVwQ29tcG9uZW50O1xuICAgIEBWaWV3Q2hpbGQoJ21vZGFsQXR0YWNobWVudCcpXG4gICAgbW9kYWxBdHRhY2htZW50OiBNb2RhbEF0dGFjaG1lbnRDb21wb25lbnQ7XG4gICAgQFZpZXdDaGlsZCgnbW9kYWxBdHRhY2htZW50VmlldycpXG4gICAgbW9kYWxBdHRhY2htZW50VmlldzogTW9kYWxBdHRhY2htZW50Vmlld0NvbXBvbmVudDtcbiAgICBAVmlld0NoaWxkKCdteU1vZGFsJykgbXlNb2RhbDtcblxuICAgIGNvbHVtbnMgPSBbJ+C4peC4s+C4lOC4seC4muC4l+C4teC5iCcsICfguJzguLnguYnguYHguIHguYnguYTguIInLCAn4Lin4Lix4LiZ4LiX4Li14LmIJywgJ+C4quC4luC4suC4meC4sOC4geC4suC4o+C4leC4tOC4lOC4leC4suC4oScsICfguKvguKHguLLguKLguYDguKvguJXguLgnXTtcbiAgICBhdHRhY2htZW50TGlzdDogYW55ID0gW107XG4gICAgdGg7XG4gICAgZHhncmlkUGFnZVNpemUgPSAxMDtcbiAgICBhbGxvd2VkUGFnZVNpemVzMSA9IDEwO1xuICAgIGFsbG93ZWRQYWdlU2l6ZXMyID0gMjU7XG4gICAgYWxsb3dlZFBhZ2VTaXplczMgPSA1MDtcbiAgICBhbGxvd2VkUGFnZVNpemVzNCA9IDEwMDtcbiAgICBjdXN0b21lcnMgPSBbXTtcbiAgICB1cmw7XG4gICAgbGFzdFN0ZXAgPSAnJztcbiAgICBjb25maWc6IGFueTtcbiAgICBkZWxldGVJZExpc3QgPSBbXTtcbiAgICBkc0F0dGFjaG1lbnQgPSBbXTtcbiAgICBzZWxlY3RlZEF0dGFjaG1lbnQgPSBbXTtcbiAgICB0bXBJZCA9IC0xO1xuICAgIGNsYXNzaWZpZWRzID0gMDtcbiAgICBkb3dubG9hZFRva2VuO1xuICAgIHVzZXJuYW1lX2NhcHRpb24gPSAn4Lic4Li54LmJ4Lia4Lix4LiZ4LiX4Li24LiBL+C4nOC4ueC5ieC4meC4s+C5gOC4guC5ieC4sidcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBhcHBDb25maWdTZXJ2aWNlOiBBcHBDb25maWdTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlcXVlc3Q6IFJlcXVlc3QsXG4gICAgICAgIHByaXZhdGUgY29tbW9uOiBDb21tb24sXG4gICAgICAgIHByaXZhdGUgYjJiOiBCMmJTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMuY29uZmlnID0gYXBwQ29uZmlnU2VydmljZS5nZXRDb25maWcoKTtcbiAgICB9XG5cbiAgICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRvd25sb2FkVG9rZW4gPSBhd2FpdCB0aGlzLmIyYi5nZXRBdHRhY2htZW50VG9rZW4oKTtcbiAgICAgICAgfSwgNTAwKVxuICAgICAgICBpZiAodGhpcy5tb2RlICE9PSBcIkNSRUFURVwiKSB7XG4gICAgICAgICAgICB0aGlzLmdldEF0dGFjaG1lbnRMaXN0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgZ2V0QXR0YWNobWVudExpc3QoKSB7XG5cbiAgICAgICAgY29uc29sZS5sb2coJ2dldEF0dGFjaG1lbnRMaXN0JywgdGhpcy5hdHRhY2htZW50TGlzdCwgdGhpcy5vcHRpb24udXNlcm5hbWVfY2FwdGlvbik7XG4gICAgICAgIGxldCBmaWx0ZXI6IGFueSA9IHtcbiAgICAgICAgICAgIGZpbHRlcjoge1xuICAgICAgICAgICAgICAgIHJlZl90YWJsZTogdGhpcy5vcHRpb24uZGF0YS5yZWZfdGFibGUsXG4gICAgICAgICAgICAgICAgcmVmX2lkOiB0aGlzLm9wdGlvbi5kYXRhLnJlZl9pZCxcbiAgICAgICAgICAgICAgICBzeXN0ZW1faWQ6IHRoaXMub3B0aW9uLmRhdGEuc3lzdGVtX2lkXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb3JkZXJfYnk6IFtcIm9yZGVyX25vXCJdXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9uLmRhdGEucmVzdWx0X3RhYmxlX2lkKSBmaWx0ZXIuZmlsdGVyLnJlc3VsdF90YWJsZV9pZCA9IHRoaXMub3B0aW9uLmRhdGEucmVzdWx0X3RhYmxlX2lkO1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5yZXF1ZXN0LnBvc3QoJy9zZWFyY2gvcmNfYXR0YWNobWVudF9wcm9wJywgZmlsdGVyKTtcbiAgICAgICAgdGhpcy5hdHRhY2htZW50TGlzdCA9IGRhdGEucmVzdWx0RGF0YTtcbiAgICAgICAgdGhpcy5jbGFzc2lmaWVkcyA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgb2YgdGhpcy5hdHRhY2htZW50TGlzdCkge1xuICAgICAgICAgICAgaWYgKGkuaXNfY2xhc3NpZmllZHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsYXNzaWZpZWRzKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coJ2dldEF0dGFjaG1lbnRMaXN0JywgdGhpcy5hdHRhY2htZW50TGlzdCk7XG4gICAgICAgIHRoaXMub25Mb2FkZWQuZW1pdCgpO1xuICAgIH1cblxuICAgIGFkZEF0dGFjaG1lbnRMaXN0KGRhdGEpIHtcbiAgICAgICAgZGF0YS5pZCA9IHRoaXMudG1wSWQ7XG4gICAgICAgIHRoaXMudG1wSWQtLTtcbiAgICAgICAgaWYgKHRoaXMuYjJiLmdldFZlcmlmeVRva2VuKCkucGhvbmVCb29rRGF0YSAmJiB0aGlzLmIyYi5nZXRWZXJpZnlUb2tlbigpLnBob25lQm9va0RhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZGF0YS51c2VybmFtZSA9IHRoaXMuYjJiLmdldFZlcmlmeVRva2VuKCkudXNlcm5hbWU7XG4gICAgICAgICAgICBkYXRhLnJlY29yZGVyX25hbWUgPSB0aGlzLmIyYi5nZXRWZXJpZnlUb2tlbigpLnBob25lQm9va0RhdGFbMF0ubmFtZTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhLmFjdGlvbiA9IFwiYWRkXCI7XG4gICAgICAgIGlmIChkYXRhLmlzX2NsYXNzaWZpZWRzKSB7XG4gICAgICAgICAgICB0aGlzLmNsYXNzaWZpZWRzKys7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hdHRhY2htZW50TGlzdC5wdXNoKGRhdGEpO1xuICAgICAgICBjb25zb2xlLmxvZygnZ2V0QXR0YWNobWVudExpc3QnLCB0aGlzLmF0dGFjaG1lbnRMaXN0KTtcbiAgICB9XG5cbiAgICBlZGl0QXR0YWNobWVudExpc3QoZGF0YSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYXR0YWNobWVudExpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmF0dGFjaG1lbnRMaXN0W2ldLmlkID09PSBkYXRhLmlkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaXNfY2xhc3NpZmllZHMgJiYgIXRoaXMuYXR0YWNobWVudExpc3RbaV0uaXNfY2xhc3NpZmllZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGFzc2lmaWVkcysrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWRhdGEuaXNfY2xhc3NpZmllZHMgJiYgdGhpcy5hdHRhY2htZW50TGlzdFtpXS5pc19jbGFzc2lmaWVkcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsYXNzaWZpZWRzLS07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuYXR0YWNobWVudExpc3RbaV0gPSBkYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKCdnZXRBdHRhY2htZW50TGlzdCcsIHRoaXMuYXR0YWNobWVudExpc3QpO1xuICAgIH1cblxuICAgIGdldFJvd0luZGV4KGRhdGEpIHtcbiAgICAgICAgaWYgKCFkYXRhLmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBkYXRhLmRhdGEub3JkZXJfbm8gPSBkYXRhLmNvbXBvbmVudC5wYWdlSW5kZXgoKSAqIGRhdGEuY29tcG9uZW50LnBhZ2VTaXplKCkgKyBkYXRhLnJvd0luZGV4ICsgMTtcbiAgICAgICAgcmV0dXJuIGRhdGEuZGF0YS5vcmRlcl9ubztcbiAgICB9XG4gICAgY2xpY2tBZGQoKSB7XG4gICAgICAgIHRoaXMub3B0aW9uLm1vZGUgPSAnQ1JFQVRFJztcbiAgICAgICAgaWYgKHRoaXMuYXR0YWNobWVudE1vZGFsKSB7XG4gICAgICAgICAgICB0aGlzLmF0dGFjaG1lbnRNb2RhbC5vcGVuKHRoaXMub3B0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubW9kYWxBdHRhY2htZW50Lm9wZW4odGhpcy5vcHRpb24pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNsaWNrRWRpdChkYXRhKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdjbGlja0VkaXQnLCBkYXRhKVxuICAgICAgICBsZXQgZmlsZU5hbWUgPSBkYXRhLmZpbGVuYW1lXG4gICAgICAgIGxldCBmaWxlVHlwZSA9IGZpbGVOYW1lLnN1YnN0cmluZyhmaWxlTmFtZS5sZW5ndGggLSAzLCBmaWxlTmFtZS5sZW5ndGgpXG4gICAgICAgIGNvbnNvbGUubG9nKCdmaWxlVHlwZScsIGZpbGVUeXBlKVxuICAgICAgICBpZiAodGhpcy50eXBlID09IDEgJiYgKGZpbGVUeXBlID09ICdwZGYnIHx8IGZpbGVUeXBlID09ICdQREYnKSkge1xuICAgICAgICAgICAgY29uc3QgZWRpdERhdGEgPSBfLmNsb25lRGVlcCh0aGlzLm9wdGlvbik7XG4gICAgICAgICAgICBlZGl0RGF0YS5kYXRhID0gZGF0YTtcbiAgICAgICAgICAgIGVkaXREYXRhLm1vZGUgPSAnRURJVCc7XG4gICAgICAgICAgICBlZGl0RGF0YS5kb3dubG9hZFRva2VuID0gdGhpcy5kb3dubG9hZFRva2VuO1xuICAgICAgICAgICAgdGhpcy5vbkNsaWNrU2Nhbi5lbWl0KGVkaXREYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgY29uc3QgZWRpdERhdGEgPSBfLmNsb25lRGVlcCh0aGlzLm9wdGlvbik7XG4gICAgICAgICAgICBlZGl0RGF0YS5kYXRhID0gZGF0YTtcbiAgICAgICAgICAgIGVkaXREYXRhLm1vZGUgPSAnRURJVCc7XG4gICAgICAgICAgICBlZGl0RGF0YS5kb3dubG9hZFRva2VuID0gdGhpcy5kb3dubG9hZFRva2VuO1xuICAgICAgICAgICAgaWYgKHRoaXMuYXR0YWNobWVudE1vZGFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdHRhY2htZW50TW9kYWwub3BlbihlZGl0RGF0YSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kYWxBdHRhY2htZW50Lm9wZW4oZWRpdERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9XG4gICAgY2xpY2tWaWV3KGRhdGEpIHtcbiAgICAgICAgbGV0IGZpbGVOYW1lID0gZGF0YS5maWxlbmFtZVxuICAgICAgICBsZXQgZmlsZVR5cGUgPSBmaWxlTmFtZS5zdWJzdHJpbmcoZmlsZU5hbWUubGVuZ3RoIC0gMywgZmlsZU5hbWUubGVuZ3RoKVxuICAgICAgICBjb25zb2xlLmxvZygnZmlsZVR5cGUnLCBmaWxlVHlwZSlcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PSAxICYmIChmaWxlVHlwZSA9PSAncGRmJyB8fCBmaWxlVHlwZSA9PSAnUERGJykpIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdEYXRhID0gXy5jbG9uZURlZXAodGhpcy5vcHRpb24pO1xuICAgICAgICAgICAgdmlld0RhdGEuZGF0YSA9IGRhdGE7XG4gICAgICAgICAgICB2aWV3RGF0YS5tb2RlID0gJ1ZJRVcnO1xuICAgICAgICAgICAgdGhpcy5vbkNsaWNrU2Nhbi5lbWl0KHZpZXdEYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdEYXRhID0gXy5jbG9uZURlZXAodGhpcy5vcHRpb24pO1xuICAgICAgICAgICAgdmlld0RhdGEuZGF0YSA9IGRhdGE7XG4gICAgICAgICAgICB2aWV3RGF0YS5tb2RlID0gJ1ZJRVcnO1xuICAgICAgICAgICAgdmlld0RhdGEuZG93bmxvYWRUb2tlbiA9IHRoaXMuZG93bmxvYWRUb2tlbjtcbiAgICAgICAgICAgIGlmICh0aGlzLmF0dGFjaG1lbnRWaWV3TW9kYWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmF0dGFjaG1lbnRWaWV3TW9kYWwub3Blbih2aWV3RGF0YSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kYWxBdHRhY2htZW50Vmlldy5vcGVuKHZpZXdEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjbGlja01vdmVVcChkYXRhKSB7XG4gICAgICAgIGxldCB0bXAgPSB0aGlzLmF0dGFjaG1lbnRMaXN0W2RhdGEucm93SW5kZXhdO1xuICAgICAgICB0aGlzLmF0dGFjaG1lbnRMaXN0W2RhdGEucm93SW5kZXhdID0gdGhpcy5hdHRhY2htZW50TGlzdFtkYXRhLnJvd0luZGV4IC0gMV07XG4gICAgICAgIHRoaXMuYXR0YWNobWVudExpc3RbZGF0YS5yb3dJbmRleCAtIDFdID0gdG1wO1xuICAgIH1cbiAgICBjbGlja01vdmVEb3duKGRhdGEpIHtcbiAgICAgICAgbGV0IHRtcCA9IHRoaXMuYXR0YWNobWVudExpc3RbZGF0YS5yb3dJbmRleF07XG4gICAgICAgIHRoaXMuYXR0YWNobWVudExpc3RbZGF0YS5yb3dJbmRleF0gPSB0aGlzLmF0dGFjaG1lbnRMaXN0W2RhdGEucm93SW5kZXggKyAxXTtcbiAgICAgICAgdGhpcy5hdHRhY2htZW50TGlzdFtkYXRhLnJvd0luZGV4ICsgMV0gPSB0bXA7XG4gICAgfVxuICAgIGFzeW5jIGNsaWNrRG93bmxvYWQoZGF0YSkge1xuICAgICAgICB3aW5kb3cub3BlbihkYXRhLnVybCArIFwiP2Rvd25sb2FkVG9rZW49XCIgKyB0aGlzLmRvd25sb2FkVG9rZW4pO1xuICAgIH1cbiAgICBnZXRMYXN0U3RlcCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGFzdFN0ZXA7XG4gICAgfVxuICAgIC8qKiBTVEFSVCBERUxFVEUgKi9cbiAgICBmbkNsaWNrRGVsZXRlKGlkTGlzdDogYW55W10pIHtcbiAgICAgICAgdGhpcy5vbkNsaWNrRGVsZXRlLmVtaXQoKTtcbiAgICAgICAgdGhpcy5kZWxldGVJZExpc3QgPSBpZExpc3Q7XG4gICAgICAgIGlmICh0aGlzLmRlbGV0ZUlkTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1EZWxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25maXJtRGVsZXRlKCkge1xuICAgICAgICB0aGlzLmdvQWxlcnQoJycsICcnLCAnbXlNb2RhbERlbGV0ZUF0dGFjaG1lbnQnKTtcbiAgICB9XG5cbiAgICBnb0FsZXJ0KHVzZXJUaXRsZSwgdXNlck1lc3NhZ2UsIG1vZGFsSWQpIHtcbiAgICAgICAgY29uc3QgZGF0YUFsZXJ0ID0ge1xuICAgICAgICAgICAgJ21vZGFsSWQnOiBtb2RhbElkLFxuICAgICAgICAgICAgJ3VzZXJUaXRsZSc6IHVzZXJUaXRsZSxcbiAgICAgICAgICAgICd1c2VyTWVzc2FnZSc6IHVzZXJNZXNzYWdlXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLmFsZXJ0TW9kYWwpIHtcbiAgICAgICAgICAgIHRoaXMuYWxlcnRNb2RhbC5vcGVuTW9kYWwoZGF0YUFsZXJ0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubXlNb2RhbC5vcGVuTW9kYWwoZGF0YUFsZXJ0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ2VsbFByZXBhcmVkKGUpIHtcbiAgICAgICAgaWYgKGUucm93VHlwZSA9PT0gJ2RhdGEnKSB7XG4gICAgICAgICAgICBlLmNlbGxFbGVtZW50LmFjY2Vzc0tleSA9IGUuY29sdW1uLmNhcHRpb247XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBmbkRlbGV0ZU11bHRpcGxlKCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcInRoaXMuZGVsZXRlSWRMaXN0XCIsIHRoaXMuZGVsZXRlSWRMaXN0KTtcbiAgICAgICAgY29uc29sZS5sb2coXCJ0aGlzLmF0dGFjaG1lbnRMaXN0IGJlZm9yZVwiLCB0aGlzLmF0dGFjaG1lbnRMaXN0KTtcbiAgICAgICAgZm9yIChsZXQgaWQgb2YgdGhpcy5kZWxldGVJZExpc3QpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSB0aGlzLmF0dGFjaG1lbnRMaXN0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYXR0YWNobWVudExpc3RbaV0uaWQgPT09IGlkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmF0dGFjaG1lbnRMaXN0W2ldLmlzX2NsYXNzaWZpZWRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsYXNzaWZpZWRzLS07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdHRhY2htZW50TGlzdC5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKFwidGhpcy5hdHRhY2htZW50TGlzdCBhZnRlclwiLCB0aGlzLmF0dGFjaG1lbnRMaXN0KTtcbiAgICB9XG4gICAgb25DbGlja0JhY2soKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiY2xpY2tiYWNrXCIpO1xuICAgIH1cblxuICAgIGdldEltYWdlTGluayhkYXRhKSB7XG4gICAgICAgIHJldHVybiBkYXRhLnVybCArIFwiP2Rvd25sb2FkVG9rZW49XCIgKyB0aGlzLmRvd25sb2FkVG9rZW47XG4gICAgfVxuXG4gICAgc2NhbigpIHtcbiAgICAgICAgdGhpcy5vcHRpb24ubW9kZSA9ICdDUkVBVEUnO1xuICAgICAgICB0aGlzLm9uQ2xpY2tTY2FuLmVtaXQodGhpcy5vcHRpb24pO1xuICAgIH1cblxufVxuIl19