modal-step.component.js
137 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
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
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, EventEmitter, Output, ViewChild } from '@angular/core';
import { ModalDirective } from 'ngx-bootstrap';
import { AppConfigService } from '../app-config/app-config.service';
import { Request } from '../_services/request.service';
import { Common } from '../_services/common.service';
import { FormBuilder, Validators } from '@angular/forms';
import { CustomValidators } from 'ng2-validation';
import { DxDataGridComponent } from 'devextreme-angular';
import * as _ from 'lodash';
import { DateService } from '../_services/date.service';
import { UploadAttachmentComponent } from '../upload-attachment/upload-attachment.component';
import { B2bService } from '../_services/b2b.service';
var Options = /** @class */ (function () {
function Options() {
}
return Options;
}());
if (false) {
/**
* title เธเธตเนเธเนเธญเธเธเธฒเธฃเนเธชเธเธ
* @type {?}
*/
Options.prototype.title;
/**
* data
* @type {?}
*/
Options.prototype.data;
}
var ModalStepComponent = /** @class */ (function (_super) {
tslib_1.__extends(ModalStepComponent, _super);
function ModalStepComponent(appConfigService, request, formBuilder, common, date, b2bService) {
var _this = _super.call(this) || this;
_this.appConfigService = appConfigService;
_this.request = request;
_this.formBuilder = formBuilder;
_this.common = common;
_this.date = date;
_this.b2bService = b2bService;
_this.onUpdateModal = new EventEmitter();
_this.submitted = false;
_this.submittedSend = false;
_this.submittedRecieve = false;
_this.title = '';
_this.selectList = [];
_this.sendList = [];
_this.recieveList = [];
_this.modalConfig = {
ignoreBackdropClick: true
};
_this.selectedStep = null;
_this.isMore = false;
_this.stepData = {};
_this.sendData = {};
_this.recieveData = {};
_this.lastStep = '';
_this.isSend = false;
_this.isRecieve = false;
_this.isEditSend = false;
_this.isEditRecieve = false;
_this.tmpData = {};
_this.filteredDepartments = [];
_this.departmentList = [];
_this.departmentUrl = "/db/ct_ext_department";
_this.causeUrl = "/db/ct_dropdown";
_this.causeFilter = "system_id,eq,23)$and(dropdown_type,like,เนเธฃเธทเนเธญเธเธชเนเธเธเธทเธ";
_this.tempId = -1;
_this.filter_ref_ext_department_id = false;
_this.filter_ref_ext_department_id_show = true;
_this.config = appConfigService.getConfig();
_this.attachmentUrl = _.get(_this.config, 'apiServers.alfresco.url') || "https://203.154.32.126:2585/api/mfec/Alfresco";
_this.system_id = _.get(_this.config, 'system_id');
return _this;
}
/**
* @return {?}
*/
ModalStepComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
this.th = this.common.fnLocalPCalendar('th');
this.recieveForm = this.formBuilder.group({
book_no: ['', [Validators.required]],
recv_date: [''],
});
this.sendForm = this.formBuilder.group({
send_to: [''],
book_no: [''],
send_date: [''],
is_important: [''],
});
this.registerForm = this.formBuilder.group({
name: [''],
step_id: ['', Validators.required],
step_date: [''],
remark: [''],
lastStep: [''],
moreField: this.formBuilder.array([]),
soc_recv_no: [''],
soc_recv_date: [''],
gtc_recv_no: [''],
gtc_recv_date: [''],
book_no: [''],
book_date: [''],
'for': [''],
dept_name: [''],
ministry: ['']
});
};
/**
* @param {?=} options
* @return {?}
*/
ModalStepComponent.prototype.open = /**
* @param {?=} options
* @return {?}
*/
function (options) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var _a;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
console.log(options);
this.stepData = {};
if (!options) return [3 /*break*/, 2];
this.title = options.title || '';
this.lastStep = options.data.lastStep;
this.stepData = JSON.parse(JSON.stringify(options.data));
this.stepData.step_date = this.date.getNow();
delete this.stepData['lastStep'];
_a = this;
return [4 /*yield*/, this.request.get('/db/ct_step?_where=(category_id,eq,' + options.data.category_id + ')&_sort=seq_no')];
case 1:
_a.selectList = _b.sent();
_b.label = 2;
case 2:
this.uploadAttachment.clearValue();
this.modal.show();
return [2 /*return*/];
}
});
});
};
/**
* @return {?}
*/
ModalStepComponent.prototype.f = /**
* @return {?}
*/
function () { return this.registerForm.controls; };
/**
* @return {?}
*/
ModalStepComponent.prototype.fs = /**
* @return {?}
*/
function () { return this.sendForm.controls; };
/**
* @return {?}
*/
ModalStepComponent.prototype.fr = /**
* @return {?}
*/
function () { return this.recieveForm.controls; };
/**
* @return {?}
*/
ModalStepComponent.prototype.closeModal = /**
* @return {?}
*/
function () {
this.submitted = false;
this.selectList = [];
this.sendList = [];
this.selectedStep = null;
this.isMore = false;
this.isSend = false;
this.moreField = [];
this.stepData = {};
this.lastStep = '';
this.modal.hide();
};
/**
* @return {?}
*/
ModalStepComponent.prototype.closeSendModal = /**
* @return {?}
*/
function () {
this.submittedSend = false;
this.sendData = {};
this.isEditSend = false;
this.tmpData = {};
this.sendModal.hide();
};
/**
* @return {?}
*/
ModalStepComponent.prototype.closeRecieveModal = /**
* @return {?}
*/
function () {
this.submittedRecieve = false;
this.recieveData = {};
this.isEditRecieve = false;
this.tmpData = {};
this.recieveModal.hide();
};
/**
* @param {?} modal
* @return {?}
*/
ModalStepComponent.prototype.onYesClick = /**
* @param {?} modal
* @return {?}
*/
function (modal) {
modal.hide();
};
/**
* @param {?} modal
* @return {?}
*/
ModalStepComponent.prototype.onNoClick = /**
* @param {?} modal
* @return {?}
*/
function (modal) {
modal.hide();
};
/**
* @param {?} $event
* @return {?}
*/
ModalStepComponent.prototype.onHidden = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
console.log('LOG MESSAGE: ModalConfirm -> onHidden -> $event', $event);
};
/**
* @param {?} value
* @return {?}
*/
ModalStepComponent.prototype.valueSeleteMinistry = /**
* @param {?} value
* @return {?}
*/
function (value) {
var _this = this;
this.filter_ref_ext_department_id_show = false;
console.log('value', value);
// this.stepData.ministry_id = value && value.id ? value.id : null
if (value && value.id) {
this.stepData.dept_name = null;
this.filter_ref_ext_department_id = "&_where=(ref_ext_department_id,eq," + value.id + ")$and(type,in,2,3,4,5)";
}
else {
this.filter_ref_ext_department_id = false;
}
setTimeout(function () {
_this.filter_ref_ext_department_id_show = true;
}, 50);
};
/**
* @param {?} value
* @return {?}
*/
ModalStepComponent.prototype.valueSeleteDeptName = /**
* @param {?} value
* @return {?}
*/
function (value) {
console.log('value', value);
this.stepData.code_dept = value && value.id ? value.id : null;
};
/**
* @return {?}
*/
ModalStepComponent.prototype.checkExtraField = /**
* @return {?}
*/
function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var i, flag, requireFlag, ct_step_flag, newField, _a;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
this.stepData.step_id = this.selectedStep.id;
this.stepData.step_name = this.selectedStep.name;
console.log(this.isMore);
this.moreField = [];
if (!(this.selectedStep.flag && this.selectedStep.flag !== '')) return [3 /*break*/, 6];
i = 0;
_b.label = 1;
case 1:
if (!(i < this.selectedStep.flag.length)) return [3 /*break*/, 5];
flag = this.selectedStep.flag.charAt(i);
requireFlag = this.selectedStep.require_flag ? this.selectedStep.require_flag.charAt(i) : 0;
return [4 /*yield*/, this.request.get('/db/ct_step_flag?_where=(flag,eq,' + flag + ')')];
case 2:
ct_step_flag = _b.sent();
newField = ct_step_flag[0];
return [4 /*yield*/, this.addField(newField, +requireFlag)];
case 3:
_b.sent();
this.moreField.push(newField);
console.log(this.f);
_b.label = 4;
case 4:
i++;
return [3 /*break*/, 1];
case 5:
this.isMore = true;
this.isSend = false;
this.isRecieve = false;
return [3 /*break*/, 9];
case 6:
this.isMore = false;
if (!(this.selectedStep.type_id === 8 || this.selectedStep.type_id === 13)) return [3 /*break*/, 8];
_a = this;
return [4 /*yield*/, this.request.get('/db/ct_ext_department?_sort=name')];
case 7:
_a.departmentList = _b.sent();
this.departmentList = this.departmentList.map(function (a) { return a.name; });
this.isSend = true;
this.isRecieve = false;
// } else if (this.selectedStep.type_id === 9 || this.selectedStep.type_id === 14) {
// const data = await this.request.post('/sql/getLastSend', this.stepData);
// if (data.resultData && data.resultData.length > 0) {
// const ct_step_data_id = data.resultData[0].id;
// const ct_sendList = await this.request.get('/db/ct_send?_where=(ct_step_data_id,eq,' + ct_step_data_id + ')');
// for (const ct_send of ct_sendList) {
// const recvData: any = {
// ct_send_id: ct_send.id,
// send_book_no: ct_send.book_no,
// send_date: ct_send.send_date,
// recv_from: ct_send.send_to,
// name: ct_send.name
// };
// this.recieveList.push(recvData);
// }
// }
// this.isRecieve = true;
// this.isSend = false;
return [3 /*break*/, 9];
case 8:
this.isSend = false;
this.isRecieve = false;
_b.label = 9;
case 9: return [2 /*return*/];
}
});
});
};
/**
* @param {?} data
* @return {?}
*/
ModalStepComponent.prototype.getFieldId = /**
* @param {?} data
* @return {?}
*/
function (data) {
/** @type {?} */
var id = '';
if (data.type === 'text') {
id += 'txt';
}
else if (data.type === 'datetime') {
id += 'txt';
}
else {
id += 'txt';
}
/** @type {?} */
var field = data.field_name.charAt(0).toLocaleUpperCase() + data.field_name.substring(1);
id += field;
return id;
};
/**
* @param {?} data
* @param {?} required
* @return {?}
*/
ModalStepComponent.prototype.addField = /**
* @param {?} data
* @param {?} required
* @return {?}
*/
function (data, required) {
/** @type {?} */
var control = /** @type {?} */ (this.registerForm.controls['moreField']);
/** @type {?} */
var newgroup;
this.stepData[data.field_name] = null;
if (data.type === 'text') {
if (required) {
/** @type {?} */
var group = {};
group[data.field_name] = ['', Validators.required];
newgroup = this.formBuilder.group(group);
}
else {
/** @type {?} */
var group = {};
group[data.field_name] = [''];
newgroup = this.formBuilder.group(group);
}
}
else if (data.type === 'datetime') {
if (required) {
/** @type {?} */
var group = {};
group[data.field_name] = ['', Validators.required, CustomValidators.date];
newgroup = this.formBuilder.group(group);
}
else {
/** @type {?} */
var group = {};
group[data.field_name] = [''];
newgroup = this.formBuilder.group(group);
}
this.stepData[data.field_name] = this.date.getNow();
}
else if (data.type === 'number') {
if (required) {
/** @type {?} */
var group = {};
group[data.field_name] = [Validators.required];
newgroup = this.formBuilder.group(group);
}
else {
/** @type {?} */
var group = {};
group[data.field_name] = [''];
newgroup = this.formBuilder.group(group);
}
}
else if (data.type === 'special') {
if (data.field_name === 'amount') {
if (required) {
/** @type {?} */
var group = {};
group[data.field_name] = ['', Validators.required];
group['amount_type'] = ['', Validators.required];
newgroup = this.formBuilder.group(group);
}
else {
/** @type {?} */
var group = {};
group[data.field_name] = [''];
group['amount_type'] = [''];
newgroup = this.formBuilder.group(group);
}
}
else if (data.field_name === 'follow') {
if (required) {
/** @type {?} */
var group = {};
group[data.field_name] = ['', Validators.required];
group['follow_remark'] = ['', Validators.required];
newgroup = this.formBuilder.group(group);
}
else {
/** @type {?} */
var group = {};
group[data.field_name] = [''];
group['follow_remark'] = [''];
newgroup = this.formBuilder.group(group);
}
}
else {
if (required) {
/** @type {?} */
var group = {};
group[data.field_name] = ['', Validators.required];
newgroup = this.formBuilder.group(group);
}
else {
/** @type {?} */
var group = {};
group[data.field_name] = [''];
newgroup = this.formBuilder.group(group);
}
}
}
control.push(newgroup);
};
/**
* @param {?} i
* @param {?} field
* @param {?=} validateType
* @return {?}
*/
ModalStepComponent.prototype.getValidateMoreField = /**
* @param {?} i
* @param {?} field
* @param {?=} validateType
* @return {?}
*/
function (i, field, validateType) {
/** @type {?} */
var formMoreField = this.f()['moreField'];
if (validateType) {
formMoreField = formMoreField.controls[i];
formMoreField = formMoreField.controls[field];
if (formMoreField.errors) {
return formMoreField.errors[validateType];
}
else {
return formMoreField.errors;
}
}
else {
return formMoreField.errors;
}
};
/**
* @param {?} data
* @return {?}
*/
ModalStepComponent.prototype.getRowIndex = /**
* @param {?} data
* @return {?}
*/
function (data) {
if (!data.data) {
return '';
}
/** @type {?} */
var no = data.row.dataIndex + 1;
return no;
};
/**
* @param {?} e
* @return {?}
*/
ModalStepComponent.prototype.onCellPrepared = /**
* @param {?} e
* @return {?}
*/
function (e) {
if (e.rowType === 'data') {
for (var i in e.component.columns) {
if (e.column.dataField === e.component.columns[i]) {
e.cellElement.accessKey = e.component.columns[i];
}
}
}
};
/**
* @return {?}
*/
ModalStepComponent.prototype.addSend = /**
* @return {?}
*/
function () {
this.sendData.send_date = this.date.getNow();
this.sendModal.show();
};
/**
* @param {?} data
* @return {?}
*/
ModalStepComponent.prototype.editSend = /**
* @param {?} data
* @return {?}
*/
function (data) {
this.tmpData = data;
this.sendData = JSON.parse(JSON.stringify(data));
// this.sendData.send_date = new Date(this.sendData.send_date);
this.isEditSend = true;
this.sendModal.show();
};
/**
* @param {?} data
* @return {?}
*/
ModalStepComponent.prototype.editRecieve = /**
* @param {?} data
* @return {?}
*/
function (data) {
this.tmpData = data;
this.recieveData = JSON.parse(JSON.stringify(data));
this.recieveData.recv_date = this.recieveData.recv_date ? new Date(this.recieveData.recv_date) : this.recieveData.recv_date;
this.isEditRecieve = true;
this.recieveModal.show();
};
/**
* @param {?} event
* @return {?}
*/
ModalStepComponent.prototype.filterDepartments = /**
* @param {?} event
* @return {?}
*/
function (event) {
this.filteredDepartments = [];
for (var i = 0; i < this.departmentList.length; i++) {
/** @type {?} */
var department = this.departmentList[i];
if (department.toLowerCase().indexOf(event.query.toLowerCase()) == 0) {
this.filteredDepartments.push(department);
}
}
};
/**
* @return {?}
*/
ModalStepComponent.prototype.onSubmit = /**
* @return {?}
*/
function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var e_1, _a, e_2, _b, postData, data, userData, main, ct_send, ct_recieve, _c, _d, data_1, ct_recieve, _e, _f, data_2, postResponse, stepList;
return tslib_1.__generator(this, function (_g) {
switch (_g.label) {
case 0:
this.submitted = true;
// เธเนเธฒ form เนเธกเนเธเธฃเธเธซเธฃเธทเธญเธเธดเธเธเธฒเธกเนเธเธทเนเธญเธเนเธเธเธตเนเธเธฑเนเธเนเธงเนเธเธฐเธเธเธเธตเนเธเธฃเธเธเธตเน
console.log('this.registerForm.invalid: ', this.registerForm.invalid);
if (this.registerForm.invalid) {
return [2 /*return*/];
}
postData = [];
data = _.cloneDeep(this.stepData);
data.action = "add";
userData = this.b2bService.getVerifyToken();
data.username = userData.username;
if (data.remind_date)
data.remind_date = this.date.getNow().add(data.remind_date, 'd').toDate();
delete data["ct_main_id"];
delete data["update_date"];
main = {
"ct_step_data": [data]
};
postData.push(main);
if (this.sendList && this.sendList.length > 0) {
ct_send = {
"ct_send": []
};
ct_recieve = {
"ct_recieve": []
};
try {
for (_c = tslib_1.__values(this.sendList), _d = _c.next(); !_d.done; _d = _c.next()) {
data_1 = _d.value;
data_1.name = data_1.name;
data_1.action = "add";
delete data_1.id;
ct_send.ct_send.push(data_1);
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
}
finally { if (e_1) throw e_1.error; }
}
postData.push(ct_send);
}
if (this.recieveList && this.recieveList.length > 0) {
ct_recieve = {
"ct_recieve": []
};
try {
for (_e = tslib_1.__values(this.recieveList), _f = _e.next(); !_f.done; _f = _e.next()) {
data_2 = _f.value;
delete data_2['send_book_no'];
delete data_2['send_date'];
data_2.name = data_2.name;
data_2.action = "add";
ct_recieve.ct_recieve.push(data_2);
}
}
catch (e_2_1) { e_2 = { error: e_2_1 }; }
finally {
try {
if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
}
finally { if (e_2) throw e_2.error; }
}
postData.push(ct_recieve);
}
console.log('postData', postData);
return [4 /*yield*/, this.request.post("/ct/main", postData)];
case 1:
postResponse = _g.sent();
if (!this.stepData.update_date) return [3 /*break*/, 5];
return [4 /*yield*/, this.getStepList()];
case 2:
stepList = _g.sent();
console.log("stepList", stepList);
if (!(stepList.length > 0)) return [3 /*break*/, 4];
return [4 /*yield*/, this.request.put("/db/" + this.stepData.ref_table + "/" + this.stepData.ref_id, { status: stepList[0].step_name, status_date: stepList[0].step_date })];
case 3:
_g.sent();
this.common.fnCheckResponse(postResponse, this.myModal);
_g.label = 4;
case 4: return [3 /*break*/, 7];
case 5: return [4 /*yield*/, this.request.put("/db/" + this.stepData.ref_table + "/" + this.stepData.ref_id, { status: this.stepData.step_name })];
case 6:
_g.sent();
this.common.fnCheckResponse(postResponse, this.myModal);
_g.label = 7;
case 7:
// }else{
// this.onCreateModal.emit(postData);
// }
return [2 /*return*/];
}
});
});
};
/**
* @return {?}
*/
ModalStepComponent.prototype.getStepList = /**
* @return {?}
*/
function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var filter, data;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
console.log('getStepList');
filter = {
filter: {
ref_table: "=" + this.stepData.ref_table,
ref_id: this.stepData.ref_id,
system_id: this.stepData.system_id
},
order_by: ["step_date desc"]
};
return [4 /*yield*/, this.request.post('/search/ct_step_data', filter)];
case 1:
data = _a.sent();
return [2 /*return*/, data.resultData || []];
}
});
});
};
/**
* @return {?}
*/
ModalStepComponent.prototype.onClickBack = /**
* @return {?}
*/
function () {
this.onUpdateModal.emit();
this.closeModal();
};
/**
* @return {?}
*/
ModalStepComponent.prototype.onSubmitSend = /**
* @return {?}
*/
function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var e_3, _a, tmpList, _b, _c, tmpSend;
return tslib_1.__generator(this, function (_d) {
this.submittedSend = true;
// เธเนเธฒ form เนเธกเนเธเธฃเธเธซเธฃเธทเธญเธเธดเธเธเธฒเธกเนเธเธทเนเธญเธเนเธเธเธตเนเธเธฑเนเธเนเธงเนเธเธฐเธเธเธเธตเนเธเธฃเธเธเธตเน
if (this.sendForm.invalid) {
return [2 /*return*/];
}
if (this.isEditSend) {
tmpList = [];
try {
for (_b = tslib_1.__values(this.sendList), _c = _b.next(); !_c.done; _c = _b.next()) {
tmpSend = _c.value;
if (tmpSend.id === this.tmpData.id) {
tmpList.push(this.sendData);
}
else {
tmpList.push(tmpSend);
}
}
}
catch (e_3_1) { e_3 = { error: e_3_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_3) throw e_3.error; }
}
this.sendList = tmpList;
}
else {
this.sendData.id = this.tempId;
this.tempId--;
this.sendList.push(this.sendData);
}
this.closeSendModal();
return [2 /*return*/];
});
});
};
/**
* @return {?}
*/
ModalStepComponent.prototype.onSubmitRecieve = /**
* @return {?}
*/
function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var e_4, _a, tmpList, _b, _c, tmpSend;
return tslib_1.__generator(this, function (_d) {
this.submittedSend = true;
// เธเนเธฒ form เนเธกเนเธเธฃเธเธซเธฃเธทเธญเธเธดเธเธเธฒเธกเนเธเธทเนเธญเธเนเธเธเธตเนเธเธฑเนเธเนเธงเนเธเธฐเธเธเธเธตเนเธเธฃเธเธเธตเน
if (this.recieveForm.invalid) {
return [2 /*return*/];
}
if (this.isEditRecieve) {
tmpList = [];
try {
for (_b = tslib_1.__values(this.recieveList), _c = _b.next(); !_c.done; _c = _b.next()) {
tmpSend = _c.value;
if (tmpSend.recv_from === this.tmpData.recv_from) {
tmpList.push(this.recieveData);
}
else {
tmpList.push(tmpSend);
}
}
}
catch (e_4_1) { e_4 = { error: e_4_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_4) throw e_4.error; }
}
this.recieveList = tmpList;
}
else {
this.recieveList.push(this.recieveData);
}
this.closeRecieveModal();
return [2 /*return*/];
});
});
};
/**
* @param {?} data
* @return {?}
*/
ModalStepComponent.prototype.isImportant = /**
* @param {?} data
* @return {?}
*/
function (data) {
return data.is_important ? "เธชเธณเธเธฑเธ" : "";
};
/**
* @param {?} data
* @return {?}
*/
ModalStepComponent.prototype.onUploaded = /**
* @param {?} data
* @return {?}
*/
function (data) {
this.stepData.url = this.attachmentUrl + '/' + data.uuid;
this.stepData.uuid = data.uuid;
};
/**
* @param {?} field
* @return {?}
*/
ModalStepComponent.prototype.checkDisable = /**
* @param {?} field
* @return {?}
*/
function (field) {
if (this.stepData[field.field_name] !== 'เนเธกเนเธเธฒเธเธเธฒเธฃ') {
return true;
}
else {
return false;
}
};
/**
* @param {?} data
* @return {?}
*/
ModalStepComponent.prototype.getImageLink = /**
* @param {?} data
* @return {?}
*/
function (data) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var url;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.request.getAttachmentLinkToken(data.url)];
case 1:
url = _a.sent();
return [2 /*return*/, url];
}
});
});
};
ModalStepComponent.decorators = [
{ type: Component, args: [{
selector: 'modal-step',
template: "<div class=\"modal fade\" bsModal #modal=\"bs-modal\" [config]=\"{backdrop: 'static'}\"\n tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"dialog-static-name1\">\n <div class=\"modal-dialog modal-lg\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <h4 id=\"dialog-static-name\" class=\"modal-title pull-left\"><label>{{title}}</label></h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"closeModal()\">\n <span aria-hidden=\"true\">×</span>\n </button>\n </div>\n <div class=\"modal-body\">\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <form class=\"m-form m-form--state m-form--fit m-form--label-align-right\" [formGroup]=\"registerForm\" (ngSubmit)=\"onSubmit()\">\n <div class=\"m-portlet__body\">\n\n <!-- \u0E2A\u0E16\u0E32\u0E19\u0E30\u0E25\u0E48\u0E32\u0E2A\u0E38\u0E14 -->\n <div class=\"row\">\n <!--<div class=\"col-sm-3\">-->\n <!--<span>\u0E2A\u0E16\u0E32\u0E19\u0E30\u0E1B\u0E31\u0E08\u0E08\u0E38\u0E1A\u0E31\u0E19 :</span>-->\n <!--</div>-->\n <div class=\"col-sm-6\">\n <div class=\"form-group m-form__group\" [ngClass]=\"{ 'has-error': submitted && f().lastStep.errors }\">\n <label class=\"control-label\">\u0E2A\u0E16\u0E32\u0E19\u0E30\u0E1B\u0E31\u0E08\u0E08\u0E38\u0E1A\u0E31\u0E19</label>\n <input type=\"text\" formControlName=\"lastStep\" class=\"form-control m-input\" id=\"txtLastStatus\" [(ngModel)]=\"lastStep\" disabled>\n </div>\n </div>\n <div class=\"col-sm-6\">\n <!--<select id=\"selNewStatus\" style=\"width: 100%\">-->\n <div class=\"form-group m-form__group\" [ngClass]=\"{ 'has-error': submitted && f().step_id.errors }\">\n <label class=\"control-label\">\u0E2A\u0E16\u0E32\u0E19\u0E30\u0E43\u0E2B\u0E21\u0E48<span class=\"color-red\"> *</span></label>\n <select id=\"selNewStatus\" class=\"form-control\" style=\"width: 100%\" [(ngModel)]=\"selectedStep\" formControlName=\"step_id\" (change)=\"checkExtraField()\">\n <option value=\"null\">\u0E01\u0E23\u0E38\u0E13\u0E32\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23</option>\n <option *ngFor=\"let step of selectList\" [ngValue]=\"step\">{{step.name}}</option>\n </select>\n <!-- <div *ngIf=\"submitted && f().step_id.errors\" class=\"invalid-feedback\">\n <div *ngIf=\"f().step_id.errors.required\"><font color=\"red\"> * \u0E01\u0E23\u0E38\u0E13\u0E32\u0E01\u0E23\u0E2D\u0E01</font></div>\n </div> -->\n </div>\n </div>\n </div>\n <br>\n <!--<div class=\"row\">-->\n <!-- \u0E2A\u0E16\u0E32\u0E19\u0E30\u0E43\u0E2B\u0E21\u0E48 -->\n <!--<div class=\"col-sm-3\">-->\n <!--<span>\u0E2A\u0E16\u0E32\u0E19\u0E30\u0E43\u0E2B\u0E21\u0E48 :</span>-->\n <!--</div>-->\n <!--</div>-->\n <!--<br>-->\n <div class=\"row\">\n <!-- \u0E27\u0E31\u0E19\u0E14\u0E33\u0E40\u0E19\u0E34\u0E19\u0E01\u0E32\u0E23 -->\n <!--<div class=\"col-sm-3\">-->\n <!--<span>\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E14\u0E33\u0E40\u0E19\u0E34\u0E19\u0E01\u0E32\u0E23 :</span>-->\n <!--</div>-->\n <div class=\"col-sm-6\">\n <div class=\"form-group m-form__group\" [ngClass]=\"{ 'has-error': submitted && f().step_date.errors }\">\n <label class=\"control-label\" *ngIf=\"stepData.system_id === 161\">\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48</label>\n <label class=\"control-label\" *ngIf=\"stepData.system_id !== 161\">\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E14\u0E33\u0E40\u0E19\u0E34\u0E19\u0E01\u0E32\u0E23</label>\n <soc-date-box [id]=\"'txtDate'\" [(value)]=\"stepData.step_date\"></soc-date-box>\n <div *ngIf=\"submitted && f().step_date.errors\" >\n <div *ngIf=\"f().step_date.errors.required\" class=\"lable-error\">Date is required</div>\n <div *ngIf=\"f().step_date.errors.date\" class=\"lable-error\">Date is invalid</div>\n </div>\n </div>\n </div>\n </div>\n <br>\n \n \n \n <!--<div class=\"row\" *ngIf=\"stepData.system_id === 23\">-->\n <!-- \u0E27\u0E31\u0E19\u0E14\u0E33\u0E40\u0E19\u0E34\u0E19\u0E01\u0E32\u0E23 -->\n <!--<div class=\"col-sm-3\">-->\n <!--<span>\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E14\u0E33\u0E40\u0E19\u0E34\u0E19\u0E01\u0E32\u0E23 :</span>-->\n <!--</div>-->\n <!-- <div class=\"col-sm-6\">-->\n <!-- <label class=\"control-label\">\u0E40\u0E25\u0E02\u0E17\u0E35\u0E48\u0E2B\u0E19\u0E31\u0E07\u0E2A\u0E37\u0E2D</label>-->\n <!-- <input type=\"text\" class=\"form-control m-input\" id=\"book_no\" [(ngModel)]=\"stepData.book_no\"-->\n <!-- formControlName=\"book_no\">-->\n <!-- </div>-->\n <!-- <div class=\"col-sm-6\">-->\n <!-- <label class=\"control-label\">\u0E25\u0E07\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48</label>-->\n <!-- <soc-date-box [id]=\"'book_date'\" [(value)]=\"stepData.book_date\" formControlName=\"book_date\"></soc-date-box>-->\n <!-- <input type=\"text\" class=\"form-control m-input\" id=\"book_date\" [(ngModel)]=\"stepData.book_date\"-->\n <!-- formControlName=\"book_date\"> -->\n <!-- </div>-->\n\n <!--</div>-->\n <!--<br>-->\n <!--<div class=\"row\" *ngIf=\"stepData.system_id === 23\">-->\n <!-- \u0E27\u0E31\u0E19\u0E14\u0E33\u0E40\u0E19\u0E34\u0E19\u0E01\u0E32\u0E23 -->\n <!--<div class=\"col-sm-3\">-->\n <!--<span>\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E14\u0E33\u0E40\u0E19\u0E34\u0E19\u0E01\u0E32\u0E23 :</span>-->\n <!--</div>-->\n <!-- <div class=\"col-sm-6\">-->\n <!-- <label class=\"control-label\">\u0E40\u0E25\u0E02\u0E17\u0E35\u0E48\u0E23\u0E31\u0E1A \u0E2A\u0E25\u0E04.</label>-->\n <!-- <input type=\"text\" class=\"form-control m-input\" id=\"soc_recv_no\" formControlName=\"soc_recv_no\" [(ngModel)]=\"stepData.soc_recv_no\">-->\n <!-- </div>-->\n <!-- <div class=\"col-sm-6\">-->\n <!-- <label class=\"control-label\">\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E23\u0E31\u0E1A \u0E2A\u0E25\u0E04.</label>-->\n <!-- <soc-date-box [id]=\"'soc_recv_date'\" [(value)]=\"stepData.soc_recv_date\" formControlName=\"soc_recv_date\"></soc-date-box>-->\n <!-- </div>-->\n <!--</div>-->\n <!--<br>-->\n <!--<div class=\"row\" *ngIf=\"stepData.system_id === 23\">-->\n <!-- \u0E27\u0E31\u0E19\u0E14\u0E33\u0E40\u0E19\u0E34\u0E19\u0E01\u0E32\u0E23 -->\n <!--<div class=\"col-sm-3\">-->\n <!--<span>\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E14\u0E33\u0E40\u0E19\u0E34\u0E19\u0E01\u0E32\u0E23 :</span>-->\n <!--</div>-->\n <!-- <div class=\"col-sm-6\">-->\n <!-- <label class=\"control-label\">\u0E2B\u0E19\u0E48\u0E27\u0E22\u0E07\u0E32\u0E19\u0E17\u0E35\u0E48\u0E23\u0E31\u0E1A-\u0E2A\u0E48\u0E07</label>-->\n <!-- <input type=\"text\" class=\"form-control m-input\" id=\"dept_name\" [(ngModel)]=\"stepData.dept_name\" formControlName=\"dept_name\">-->\n <!-- </div>-->\n <!--</div>-->\n <!--<br>-->\n \n \n \n <div class=\"row\" *ngIf=\"stepData.system_id === 23\">\n <div class=\"col-sm-6\">\n <label class=\"control-label\">\u0E40\u0E25\u0E02\u0E17\u0E35\u0E48\u0E23\u0E31\u0E1A \u0E2A\u0E25\u0E04.</label>\n <input type=\"text\" class=\"form-control m-input\" id=\"soc_recv_no\" formControlName=\"soc_recv_no\" [(ngModel)]=\"stepData.soc_recv_no\">\n </div>\n <div class=\"col-sm-6\">\n <label class=\"control-label\">\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E23\u0E31\u0E1A \u0E2A\u0E25\u0E04.</label>\n <soc-date-box [id]=\"'soc_recv_date'\" [(value)]=\"stepData.soc_recv_date\" formControlName=\"soc_recv_date\"></soc-date-box>\n </div>\n </div>\n <br>\n <div class=\"row\" *ngIf=\"stepData.system_id === 23\">\n <div class=\"col-sm-6\">\n <label class=\"control-label\">\u0E40\u0E25\u0E02\u0E17\u0E35\u0E48\u0E23\u0E31\u0E1A \u0E01\u0E2D\u0E04.</label>\n <input type=\"text\" class=\"form-control m-input\" id=\"gtc_recv_no\" [(ngModel)]=\"stepData.gtc_recv_no\" formControlName=\"gtc_recv_no\">\n </div>\n <div class=\"col-sm-6\">\n <label class=\"control-label\">\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E23\u0E31\u0E1A \u0E01\u0E2D\u0E04.</label>\n <soc-date-box [id]=\"'gtc_recv_date'\" [(value)]=\"stepData.gtc_recv_date\" formControlName=\"gtc_recv_date\"></soc-date-box>\n </div>\n </div>\n <br>\n <div class=\"row\" *ngIf=\"stepData.system_id === 23\">\n <div class=\"col-sm-6\">\n <label class=\"control-label\">\u0E40\u0E25\u0E02\u0E17\u0E35\u0E48\u0E2B\u0E19\u0E31\u0E07\u0E2A\u0E37\u0E2D</label>\n <input type=\"text\" class=\"form-control m-input\" id=\"book_no\" [(ngModel)]=\"stepData.book_no\"\n formControlName=\"book_no\">\n </div>\n <div class=\"col-sm-6\">\n <label class=\"control-label\">\u0E25\u0E07\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48</label>\n <soc-date-box [id]=\"'book_date'\" [(value)]=\"stepData.book_date\" formControlName=\"book_date\"></soc-date-box>\n <!-- <input type=\"text\" class=\"form-control m-input\" id=\"book_date\" [(ngModel)]=\"stepData.book_date\"\n formControlName=\"book_date\"> -->\n </div>\n </div>\n <br>\n <div class=\"row\" *ngIf=\"stepData.system_id === 23\">\n <div class=\"col-sm-6\">\n <label class=\"control-label\">\u0E40\u0E23\u0E35\u0E22\u0E19</label>\n <input type=\"text\" class=\"form-control m-input\" id=\"for\" [(ngModel)]=\"stepData.for\" formControlName=\"for\">\n </div>\n\n </div>\n <br>\n <div class=\"row\" *ngIf=\"stepData.system_id === 23\">\n <div class=\"col-sm-6\">\n <label class=\"control-label\">\u0E01\u0E23\u0E30\u0E17\u0E23\u0E27\u0E07</label>\n <soc-auto-complete-2 [id]=\"'ministry'\" mode=\"local\"\n [api]=\"'/db/ct_ext_department'\" [acceptCustomValue]=\"false\" field=\"name\" fieldApi=\"id,name,code,type\"\n [filter]=\"'&_where=(type,in,1,9)'\" (valueSelete)=\"valueSeleteMinistry($event)\"\n [(value)]=\"stepData.ministry\" [(ngModel)]=\"stepData.ministry\"\n formControlName=\"ministry\">\n </soc-auto-complete-2>\n </div>\n <div class=\"col-sm-6\">\n <label class=\"control-label\">\u0E01\u0E23\u0E21</label>\n <div *ngIf=\"filter_ref_ext_department_id_show\">\n <soc-auto-complete-2 [acceptCustomValue]=\"false\" [id]=\"'dept_name'\"\n mode=\"local\" [filter]=\"filter_ref_ext_department_id\"\n [api]=\"'/db/ct_ext_department'\" field=\"name\"\n fieldApi=\"id,name,code,type\" [(value)]=\"stepData.dept_name\" (valueSelete)=\"valueSeleteDeptName($event)\"\n [(ngModel)]=\"stepData.dept_name\" [disabled]=\"!filter_ref_ext_department_id\"\n formControlName=\"dept_name\">\n </soc-auto-complete-2>\n </div>\n </div>\n\n </div>\n <br>\n \n <!-- \u0E2B\u0E21\u0E32\u0E22\u0E40\u0E2B\u0E15\u0E38 -->\n <div class=\"row\">\n <!--<div class=\"col-sm-3\">-->\n <!--<span>\u0E2B\u0E21\u0E32\u0E22\u0E40\u0E2B\u0E15\u0E38 :</span>-->\n <!--</div>-->\n <div class=\"col-sm-12\">\n <div class=\"form-group m-form__group\" [ngClass]=\"{ 'has-error': submitted && f().remark.errors }\">\n <label class=\"control-label\">\u0E2B\u0E21\u0E32\u0E22\u0E40\u0E2B\u0E15\u0E38</label>\n <textarea class=\"form-control m-input\" id=\"txtRemark\" rows=\"5\" formControlName=\"remark\" [(ngModel)]=\"stepData.remark\"></textarea>\n </div>\n </div>\n </div>\n <br>\n <!-- \u0E40\u0E2D\u0E01\u0E2A\u0E32\u0E23\u0E41\u0E19\u0E1A -->\n <div class=\"row\">\n <!--<div class=\"col-sm-3\">-->\n <!--<span>\u0E40\u0E2D\u0E01\u0E2A\u0E32\u0E23\u0E41\u0E19\u0E1A :</span>-->\n <!--</div>-->\n <div class=\"col-sm-12\">\n <label class=\"control-label\">\u0E40\u0E2D\u0E01\u0E2A\u0E32\u0E23\u0E41\u0E19\u0E1A</label>\n <upload-attachment #uploadAttachment [systemId]=\"stepData.system_id\" (uploaded)=\"onUploaded($event)\"></upload-attachment>\n <!--<dx-tab-panel-->\n <!--#tabPanel-->\n <!--[items]=\"upLoadType\"-->\n <!--[selectedIndex]=\"0\"-->\n <!--[loop]=\"false\"-->\n <!--[animationEnabled]=\"false\"-->\n <!--[swipeEnabled]=\"false\"-->\n <!--itemTemplate=\"itemTemplate\"-->\n <!-->-->\n <!--<!–<div *dxTemplate=\"let type of upLoadType\">–>-->\n <!--<!–<span>{{type.name.toUpperCase()}}</span>–>-->\n <!--<!–</div>–>-->\n <!--<div *dxTemplate=\"let item of 'itemTemplate'\">-->\n <!--<div class=\"tabpanel-item\">-->\n <!--<div *ngIf=\"item.type === 1\">-->\n <!--<div class=\"col-sm-10\" style=\"text-align: center\">-->\n <!--<dx-file-uploader selectButtonText=\"\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E44\u0E1F\u0E25\u0E4C\" labelText=\"\" accept=\"*\" uploadMode=\"useForm\" uploadMethod=\"POST\"-->\n <!--multiple=\"true\" uploadMode=\"instantly\" labelText=\"\u0E2B\u0E23\u0E37\u0E2D\u0E27\u0E32\u0E07\u0E44\u0E1F\u0E25\u0E4C\u0E17\u0E35\u0E48\u0E19\u0E35\u0E48\" uploadUrl=\"https://filemanager-dot-smartrms-api.appspot.com/api/http/upload\"-->\n <!-->-->\n <!--</dx-file-uploader>-->\n <!--</div>-->\n <!--</div>-->\n <!--</div>-->\n <!--</div>-->\n <!--</dx-tab-panel>-->\n </div>\n </div>\n <br>\n <!-- field \u0E40\u0E1E\u0E34\u0E48\u0E21\u0E40\u0E15\u0E34\u0E21 -->\n <div *ngIf=\"isMore\">\n <div formArrayName=\"moreField\">\n <div *ngFor=\"let field of moreField; let i=index\">\n <div [formGroupName]=\"i\">\n <div class=\"row\">\n <!--<div class=\"col-sm-3\">-->\n <!--<span>field.display_name :</span>-->\n <!--</div>-->\n <!-- field \u0E40\u0E1E\u0E34\u0E48\u0E21\u0E40\u0E15\u0E34\u0E21 type text -->\n <div *ngIf=\"field.type === 'text'\">\n <div class=\"col-sm-12\">\n <div class=\"form-group m-form__group\" [ngClass]=\"{ 'has-error': submitted && getValidateMoreField(i,field.field_name) }\">\n <label class=\"control-label\">{{field.display_name}}</label>\n <input type=\"text\" class=\"form-control m-input\" [id]=\"getFieldId(field)\" [formControlName]=\"field.field_name\" [(ngModel)]=\"stepData[field.field_name]\">\n <div *ngIf=\"submitted && getValidateMoreField(i,field.field_name)\" class=\"invalid-feedback\">\n <div *ngIf=\"getValidateMoreField(i,field.field_name,'required')\"><font color=\"red\"> * \u0E01\u0E23\u0E38\u0E13\u0E32\u0E01\u0E23\u0E2D\u0E01</font></div>\n </div>\n </div>\n </div>\n </div>\n <!-- field \u0E40\u0E1E\u0E34\u0E48\u0E21\u0E40\u0E15\u0E34\u0E21 type datetime -->\n <div *ngIf=\"field.type === 'datetime'\">\n\n <div class=\"col-sm-6\">\n <div class=\"form-group m-form__group\" [ngClass]=\"{ 'has-error': submitted && getValidateMoreField(i,field.field_name) }\">\n <label class=\"control-label\">{{field.display_name}}</label>\n <soc-date-box [id]=\"getFieldId(field)\" [(value)]=\"stepData[field.field_name]\"></soc-date-box>\n <!--<div *ngIf=\"getValidateMoreField(i,field.field_name,'required')\" class=\"lable-error\">Date is required</div>-->\n <!--<div *ngIf=\"getValidateMoreField(i,field.field_name,'date')\" class=\"lable-error\">Date is invalid</div>-->\n </div>\n </div>\n </div>\n <div *ngIf=\"field.type === 'number'\">\n <div class=\"col-sm-4\">\n <div class=\"form-group m-form__group\" [ngClass]=\"{ 'has-error': submitted && getValidateMoreField(i,field.field_name) }\">\n <label class=\"control-label\">{{field.display_name}}</label>\n <div class=\"input-group\">\n <input type=\"number\" class=\"form-control m-input\" [id]=\"getFieldId(field)\" [formControlName]=\"field.field_name\" [(ngModel)]=\"stepData[field.field_name]\">\n <div *ngIf=\"field.field_name === 'remind_date'\" class=\"input-group-addon\"><span>\u0E27\u0E31\u0E19</span></div>\n </div>\n <div *ngIf=\"submitted && getValidateMoreField(i,field.field_name)\" class=\"invalid-feedback\">\n <div *ngIf=\"getValidateMoreField(i,field.field_name,'required')\"><font color=\"red\"> * \u0E01\u0E23\u0E38\u0E13\u0E32\u0E01\u0E23\u0E2D\u0E01</font></div>\n </div>\n </div>\n </div>\n <!--<div class=\"col-sm-2\" *ngIf=\"field.field_name === 'remind_date'\">-->\n <!--<span>\u0E27\u0E31\u0E19</span>-->\n <!--</div>-->\n </div>\n <div *ngIf=\"field.type === 'special'\">\n <div *ngIf=\"field.field_name === 'term'\">\n\n </div>\n <div *ngIf=\"field.field_name === 'amount'\">\n <div class=\"col-sm-6\">\n <div class=\"form-group m-form__group\" [ngClass]=\"{ 'has-error': submitted && getValidateMoreField(i,field.field_name) }\">\n <label class=\"control-label\">{{field.display_name}}</label>\n <input type=\"number\" class=\"form-control m-input\" [id]=\"getFieldId(field)\" [formControlName]=\"field.field_name\" [(ngModel)]=\"stepData[field.field_name]\">\n <div *ngIf=\"submitted && getValidateMoreField(i,field.field_name)\" class=\"invalid-feedback\">\n <div *ngIf=\"getValidateMoreField(i,field.field_name,'required')\"><font color=\"red\"> * \u0E01\u0E23\u0E38\u0E13\u0E32\u0E01\u0E23\u0E2D\u0E01</font></div>\n </div>\n </div>\n </div>\n <div class=\"col-sm-6\">\n <div class=\"form-group m-form__group\" [ngClass]=\"{ 'has-error': submitted && getValidateMoreField(i,'amount_type') }\">\n <div class=\"m-radio-inline\">\n <label class=\"m-radio\">\n <input type=\"radio\" id=\"rdlAmountType1\" name=\"amount_type\" value=\"0\" [formControlName]=\"'amount_type'\" [(ngModel)]=\"stepData['amount_type']\" checked>\n \u0E19\u0E31\u0E1A\u0E41\u0E15\u0E48<span></span>\n </label>\n <label class=\"m-radio\">\n <input type=\"radio\" id=\"rdlAmountType2\" name=\"amount_type\" value=\"1\" [formControlName]=\"'amount_type'\" [(ngModel)]=\"stepData['amount_type']\">\n \u0E19\u0E31\u0E1A\u0E16\u0E31\u0E14<span></span>\n </label>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"field.field_name === 'follow'\">\n <div class=\"col-sm-6\">\n <div class=\"form-group m-form__group\" [ngClass]=\"{ 'has-error': submitted && getValidateMoreField(i,'amount_type') }\">\n <label class=\"control-label\">{{field.display_name}}</label>\n <div class=\"m-radio-inline\">\n <label class=\"m-radio\">\n <input type=\"radio\" [id]=\"getFieldId(field) + '1'\" [name]=\"field.field_name\" value=\"\u0E17\u0E32\u0E07\u0E01\u0E32\u0E23\" [formControlName]=\"field.field_name\" [(ngModel)]=\"stepData[field.field_name]\" checked>\n \u0E17\u0E32\u0E07\u0E01\u0E32\u0E23<span></span>\n </label>\n <label class=\"m-radio\">\n <input type=\"radio\" [id]=\"getFieldId(field) + '2'\" [name]=\"field.field_name\" value=\"\u0E44\u0E21\u0E48\u0E17\u0E32\u0E07\u0E01\u0E32\u0E23\" [formControlName]=\"field.field_name\" [(ngModel)]=\"stepData[field.field_name]\">\n \u0E44\u0E21\u0E48\u0E17\u0E32\u0E07\u0E01\u0E32\u0E23<span></span>\n </label>\n </div>\n </div>\n </div>\n <!--<div class=\"col-sm-3\">-->\n <!--<span>\u0E2B\u0E21\u0E32\u0E22\u0E40\u0E2B\u0E15\u0E38 :</span>-->\n <!--</div>-->\n <div class=\"col-sm-6\">\n <div class=\"form-group m-form__group\" [ngClass]=\"{ 'has-error': submitted && getValidateMoreField(i,'follow_remark') }\">\n <label class=\"control-label\">\u0E2B\u0E21\u0E32\u0E22\u0E40\u0E2B\u0E15\u0E38</label>\n <input type=\"text\" class=\"form-control m-input\" id=\"txtFollowRemark\" [formControlName]=\"'follow_remark'\" [(ngModel)]=\"stepData['follow_remark']\" [disableControl]=\"checkDisable(field)\">\n <!--<div *ngIf=\"submitted && getValidateMoreField(i,'follow_remark')\" class=\"invalid-feedback\">-->\n <!--<div *ngIf=\"getValidateMoreField(i,'follow_remark','required')\">First Name is required</div>-->\n <!--</div>-->\n </div>\n </div>\n </div>\n <div *ngIf=\"field.field_name === 'cause'\">\n <div class=\"col-sm-6\">\n <div class=\"form-group m-form__group\" [ngClass]=\"{ 'has-error': submitted && getValidateMoreField(i,field.field_name) }\">\n <label class=\"control-label\">{{field.display_name}}</label>\n <soc-auto-complete id=\"'txtCause'\" mode=\"local\" [orderBy]=\"'name'\" [filter]=\"causeFilter\"\n [api]=\"causeUrl\" field=\"name\" [(value)]=\"stepData['cause']\"></soc-auto-complete>\n <div *ngIf=\"submitted && getValidateMoreField(i,field.field_name)\" class=\"invalid-feedback\">\n <div *ngIf=\"getValidateMoreField(i,field.field_name,'required')\"><font color=\"red\"> * \u0E01\u0E23\u0E38\u0E13\u0E32\u0E01\u0E23\u0E2D\u0E01</font></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <br>\n </div>\n </div>\n <div *ngIf=\"isSend\">\n <div class=\"row\">\n <div class=\"col-sm-3\">\n <span>\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\u0E2A\u0E48\u0E07 :</span>\n </div>\n <div class=\"col-sm-9\">\n <!--<a id=\"btnSendAdd\" (click)=\"sendModal.show()\" class=\"btn btn-default btn-sm icon\" data-toggle=\"tooltip\" data-placement=\"top\" title=\"Add\"><i class=\"fal fa-plus\"></i></a>-->\n <a id=\"btnSendAdd\" class=\"btn btn-default btn-md btn-md-search\" (click)=\"addSend()\">\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\u0E2A\u0E48\u0E07</a>\n </div>\n </div>\n <br>\n <dx-data-grid #dxDataGridStepSendList class=\"card-list-table\"\n id=\"gridStepSendList\" noDataText=\"\"\n (onCellPrepared)=\"onCellPrepared($event)\" [dataSource]=\"sendList\"\n [wordWrapEnabled]=\"true\"\n [showBorders]=\"true\">\n <dxi-column caption=\"\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\u0E17\u0E35\u0E48\" [allowSorting]=\"false\" cellTemplate=\"cellTemplate\" alignment=\"center\"></dxi-column>\n <dxi-column caption=\"\u0E08\u0E31\u0E14\u0E01\u0E32\u0E23\" [allowSorting]=\"false\" cellTemplate=\"cellTemplateAction\" alignment=\"center\"></dxi-column>\n <dxi-column dataField=\"send_to\" caption=\"\u0E2B\u0E19\u0E48\u0E27\u0E22\u0E07\u0E32\u0E19\"></dxi-column>\n <dxi-column dataField=\"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\"></dxi-column>\n <dxi-column [calculateCellValue]=\"isImportant\" caption=\"\u0E04\u0E27\u0E32\u0E21\u0E2A\u0E33\u0E04\u0E31\u0E0D\"></dxi-column>\n <div *dxTemplate=\"let data of 'cellTemplate'\">\n {{getRowIndex(data)}}\n </div>\n <div *dxTemplate=\"let data of 'cellTemplateAction'\">\n <a id=\"btnEditSend\" (click)=\"editSend(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 <br>\n </div>\n <div *ngIf=\"isRecieve\">\n <div class=\"row\">\n <div class=\"col-sm-3\">\n <span>\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\u0E23\u0E31\u0E1A :</span>\n </div>\n <div class=\"col-sm-9\">\n <!--<a id=\"btnSendAdd\" (click)=\"sendModal.show()\" class=\"btn btn-default btn-sm icon\" data-toggle=\"tooltip\" data-placement=\"top\" title=\"Add\"><i class=\"fal fa-plus\"></i></a>-->\n <a id=\"btnRecieveAdd\" class=\"btn btn-default btn-md btn-md-search\" (click)=\"recieveModal.show()\">\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\u0E23\u0E31\u0E1A</a>\n </div>\n </div>\n <br>\n <dx-data-grid #dxDataGridStepRecieveList class=\"card-list-table\"\n id=\"gridStepRecieveList\" noDataText=\"\"\n (onCellPrepared)=\"onCellPrepared($event)\" [dataSource]=\"recieveList\"\n [wordWrapEnabled]=\"true\"\n [showBorders]=\"true\">\n <dxi-column caption=\"\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\u0E17\u0E35\u0E48\" [allowSorting]=\"false\" cellTemplate=\"cellTemplate\"></dxi-column>\n <dxi-column caption=\"\u0E08\u0E31\u0E14\u0E01\u0E32\u0E23\" [allowSorting]=\"false\" cellTemplate=\"cellTemplateAction\"></dxi-column>\n <dxi-column dataField=\"recv_from\" 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\"></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\"></dxi-column>\n <div *dxTemplate=\"let data of 'cellTemplate'\">\n {{getRowIndex(data)}}\n </div>\n <div *dxTemplate=\"let data of 'cellTemplateAction'\">\n <a 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 <br>\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)=\"closeModal()\">\n \u0E22\u0E01\u0E40\u0E25\u0E34\u0E01\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n<div class=\"modal fade\" bsModal #sendModal=\"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-send\" class=\"modal-title pull-left\"><label>\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\u0E2A\u0E48\u0E07</label></h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"closeSendModal()\">\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]=\"sendForm\" (ngSubmit)=\"onSubmitSend()\">\n <div class=\"ibox-body\">\n <div class=\"row\">\n <div class=\"form-group\">\n <label class=\"control-label\">\u0E2B\u0E19\u0E48\u0E27\u0E22\u0E07\u0E32\u0E19</label>\n <div class=\"form-group m-form__group\" [ngClass]=\"{ 'has-error': submittedSend && fs().send_to.errors }\">\n <soc-auto-complete [id]=\"'txtSendTo'\" mode=\"local\" [orderBy]=\"'name'\"\n [api]=\"departmentUrl\" field=\"name\" [(value)]=\"sendData.send_to\"></soc-auto-complete>\n <!--<p-autoComplete type=\"text\" styleClass=\"form-control m-input\" id=\"txtSendTo\" formControlName=\"send_to\" [(ngModel)]=\"sendData.send_to\"-->\n <!--[suggestions]=\"filteredDepartments\" (completeMethod)=\"filterDepartments($event)\"></p-autoComplete>-->\n <div *ngIf=\"submittedSend && fs().send_to.errors\" class=\"invalid-feedback\">\n <div *ngIf=\"fs().send_to.errors.required\">First Name is required</div>\n </div>\n </div>\n </div>\n <div class=\"form-group\">\n <label class=\"control-label\">\u0E40\u0E25\u0E02\u0E17\u0E35\u0E48\u0E2B\u0E19\u0E31\u0E07\u0E2A\u0E37\u0E2D\u0E2A\u0E48\u0E07\u0E2D\u0E2D\u0E01</label>\n <div class=\"form-group m-form__group\" [ngClass]=\"{ 'has-error': submittedSend && fs().book_no.errors }\">\n <input type=\"text\" class=\"form-control m-input\" id=\"txtSendBookNo\" formControlName=\"book_no\" [(ngModel)]=\"sendData.book_no\">\n <div *ngIf=\"submittedSend && fs().book_no.errors\" class=\"invalid-feedback\">\n <div *ngIf=\"fs().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\u0E2A\u0E48\u0E07\u0E2D\u0E2D\u0E01</label>\n <div class=\"form-group m-form__group\" [ngClass]=\"{ 'has-error': submittedSend && fs().send_date.errors }\">\n <soc-date-box [id]=\"'txtSendDate'\" [(value)]=\"sendData.send_date\"></soc-date-box>\n <div *ngIf=\"submittedSend && fs().send_date.errors\" >\n <div *ngIf=\"fs().send_date.errors.required\" class=\"lable-error\">Date is required</div>\n <div *ngIf=\"fs().send_date.errors.date\" class=\"lable-error\">Date is invalid</div>\n </div>\n </div>\n </div>\n <div class=\"form-group\">\n <label class=\"control-label\"></label>\n <input type=\"checkbox\" id=\"chkIsImportant\" name=\"is_important\" formControlName=\"is_important\" [(ngModel)]=\"sendData.is_important\" ng-checked> \u0E2A\u0E33\u0E04\u0E31\u0E0D\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)=\"closeSendModal()\">\n \u0E22\u0E01\u0E40\u0E25\u0E34\u0E01\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\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<app-alert #myModal (onClickBack)=\"onClickBack()\"></app-alert>\n"
}] }
];
/** @nocollapse */
ModalStepComponent.ctorParameters = function () { return [
{ type: AppConfigService },
{ type: Request },
{ type: FormBuilder },
{ type: Common },
{ type: DateService },
{ type: B2bService }
]; };
ModalStepComponent.propDecorators = {
onUpdateModal: [{ type: Output }],
modal: [{ type: ViewChild, args: ['modal',] }],
myModal: [{ type: ViewChild, args: ['myModal',] }],
sendModal: [{ type: ViewChild, args: ['sendModal',] }],
recieveModal: [{ type: ViewChild, args: ['recieveModal',] }],
dxDataGridStepSendList: [{ type: ViewChild, args: ['dxDataGridStepSendList',] }],
uploadAttachment: [{ type: ViewChild, args: ['uploadAttachment',] }]
};
return ModalStepComponent;
}(Options));
export { ModalStepComponent };
if (false) {
/** @type {?} */
ModalStepComponent.prototype.onUpdateModal;
/** @type {?} */
ModalStepComponent.prototype.modal;
/** @type {?} */
ModalStepComponent.prototype.myModal;
/** @type {?} */
ModalStepComponent.prototype.sendModal;
/** @type {?} */
ModalStepComponent.prototype.recieveModal;
/** @type {?} */
ModalStepComponent.prototype.dxDataGridStepSendList;
/** @type {?} */
ModalStepComponent.prototype.uploadAttachment;
/** @type {?} */
ModalStepComponent.prototype.registerForm;
/** @type {?} */
ModalStepComponent.prototype.sendForm;
/** @type {?} */
ModalStepComponent.prototype.recieveForm;
/** @type {?} */
ModalStepComponent.prototype.submitted;
/** @type {?} */
ModalStepComponent.prototype.submittedSend;
/** @type {?} */
ModalStepComponent.prototype.submittedRecieve;
/** @type {?} */
ModalStepComponent.prototype.title;
/** @type {?} */
ModalStepComponent.prototype.selectList;
/** @type {?} */
ModalStepComponent.prototype.sendList;
/** @type {?} */
ModalStepComponent.prototype.recieveList;
/** @type {?} */
ModalStepComponent.prototype.modalConfig;
/** @type {?} */
ModalStepComponent.prototype.th;
/** @type {?} */
ModalStepComponent.prototype.selectedStep;
/** @type {?} */
ModalStepComponent.prototype.isMore;
/** @type {?} */
ModalStepComponent.prototype.moreField;
/** @type {?} */
ModalStepComponent.prototype.config;
/** @type {?} */
ModalStepComponent.prototype.stepData;
/** @type {?} */
ModalStepComponent.prototype.sendData;
/** @type {?} */
ModalStepComponent.prototype.recieveData;
/** @type {?} */
ModalStepComponent.prototype.lastStep;
/** @type {?} */
ModalStepComponent.prototype.isSend;
/** @type {?} */
ModalStepComponent.prototype.isRecieve;
/** @type {?} */
ModalStepComponent.prototype.isEditSend;
/** @type {?} */
ModalStepComponent.prototype.isEditRecieve;
/** @type {?} */
ModalStepComponent.prototype.tmpData;
/** @type {?} */
ModalStepComponent.prototype.filteredDepartments;
/** @type {?} */
ModalStepComponent.prototype.departmentList;
/** @type {?} */
ModalStepComponent.prototype.departmentUrl;
/** @type {?} */
ModalStepComponent.prototype.causeUrl;
/** @type {?} */
ModalStepComponent.prototype.causeFilter;
/** @type {?} */
ModalStepComponent.prototype.tempId;
/** @type {?} */
ModalStepComponent.prototype.attachmentUrl;
/** @type {?} */
ModalStepComponent.prototype.system_id;
/** @type {?} */
ModalStepComponent.prototype.filter_ref_ext_department_id;
/** @type {?} */
ModalStepComponent.prototype.filter_ref_ext_department_id_show;
/** @type {?} */
ModalStepComponent.prototype.appConfigService;
/** @type {?} */
ModalStepComponent.prototype.request;
/** @type {?} */
ModalStepComponent.prototype.formBuilder;
/** @type {?} */
ModalStepComponent.prototype.common;
/** @type {?} */
ModalStepComponent.prototype.date;
/** @type {?} */
ModalStepComponent.prototype.b2bService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtc3RlcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9zb2MtYXBwLWxpYnJhcnkvIiwic291cmNlcyI6WyJsaWIvbW9kYWwtc3RlcC9tb2RhbC1zdGVwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUE0QixNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ25HLE9BQU8sRUFBZSxjQUFjLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDbEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsV0FBVyxFQUF3QixVQUFVLEVBQWtCLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUYsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFdkQsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ3RELE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLGtEQUFrRCxDQUFDO0FBQzNGLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUVwRCxJQUFBOzs7a0JBZEE7SUFtQkMsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7SUFNdUMsOENBQU87SUFnRDNDLDRCQUFvQixnQkFBa0MsRUFBVSxPQUFnQixFQUFVLFdBQXdCLEVBQVMsTUFBYyxFQUFTLElBQWlCLEVBQVMsVUFBc0I7UUFBbE0sWUFDSSxpQkFBTyxTQUlWO1FBTG1CLHNCQUFnQixHQUFoQixnQkFBZ0IsQ0FB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LEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFDLEdBQUcsR0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3JELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7S0FDbEM7Ozs7O0lBQ0QseUNBQVk7Ozs7SUFBWixVQUFhLEtBQUs7UUFDZCxJQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLFdBQVcsRUFBQztZQUMvQyxPQUFPLElBQUksQ0FBQztTQUNmO2FBQUk7WUFDRCxPQUFPLEtBQUssQ0FBQztTQUNoQjtLQUNKOzs7OztJQUVLLHlDQUFZOzs7O0lBQWxCLFVBQW1CLElBQUk7Ozs7OzRCQUNULHFCQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFBOzt3QkFBekQsR0FBRyxHQUFHLFNBQW1EO3dCQUM3RCxzQkFBTyxHQUFHLEVBQUM7Ozs7S0FDZDs7Z0JBamhCSixTQUFTLFNBQUM7b0JBQ1AsUUFBUSxFQUFFLFlBQVk7b0JBQ3RCLG0zbERBQTBDO2lCQUM3Qzs7OztnQkF0Qk8sZ0JBQWdCO2dCQUNmLE9BQU87Z0JBRVIsV0FBVztnQkFEWCxNQUFNO2dCQU1OLFdBQVc7Z0JBRVgsVUFBVTs7O2dDQWNiLE1BQU07d0JBRU4sU0FBUyxTQUFDLE9BQU87MEJBQ2pCLFNBQVMsU0FBQyxTQUFTOzRCQUNuQixTQUFTLFNBQUMsV0FBVzsrQkFDckIsU0FBUyxTQUFDLGNBQWM7eUNBQ3hCLFNBQVMsU0FBQyx3QkFBd0I7bUNBRWxDLFNBQVMsU0FBQyxrQkFBa0I7OzZCQWxDakM7RUF5QndDLE9BQU87U0FBbEMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01vZGFsT3B0aW9ucywgTW9kYWxEaXJlY3RpdmV9IGZyb20gJ25neC1ib290c3RyYXAnO1xuaW1wb3J0IHtBcHBDb25maWdTZXJ2aWNlfSBmcm9tICcuLi9hcHAtY29uZmlnL2FwcC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBSZXF1ZXN0IH0gZnJvbSAnLi4vX3NlcnZpY2VzL3JlcXVlc3Quc2VydmljZSc7XG5pbXBvcnQge0NvbW1vbn0gZnJvbSAnLi4vX3NlcnZpY2VzL2NvbW1vbi5zZXJ2aWNlJztcbmltcG9ydCB7Rm9ybUJ1aWxkZXIsIEZvcm1BcnJheSwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzLCBBYnN0cmFjdENvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7Q3VzdG9tVmFsaWRhdG9yc30gZnJvbSAnbmcyLXZhbGlkYXRpb24nO1xuaW1wb3J0IHtEeERhdGFHcmlkQ29tcG9uZW50fSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXInO1xuaW1wb3J0ICogYXMgdXVpZCBmcm9tICd1dWlkJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7RGF0ZVNlcnZpY2V9IGZyb20gJy4uL19zZXJ2aWNlcy9kYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHtVcGxvYWRBdHRhY2htZW50Q29tcG9uZW50fSBmcm9tICcuLi91cGxvYWQtYXR0YWNobWVudC91cGxvYWQtYXR0YWNobWVudC5jb21wb25lbnQnO1xuaW1wb3J0IHtCMmJTZXJ2aWNlfSBmcm9tICcuLi9fc2VydmljZXMvYjJiLnNlcnZpY2UnO1xuXG5jbGFzcyBPcHRpb25zIHtcbiAgICAvKiogdGl0bGUg4LiX4Li14LmI4LiV4LmJ4Lit4LiH4LiB4Liy4Lij4LmB4Liq4LiU4LiHICovXG4gICAgdGl0bGU/OiBTdHJpbmc7XG4gICAgLyoqIGRhdGEgKi9cbiAgICBkYXRhOiBhbnk7XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbW9kYWwtc3RlcCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL21vZGFsLXN0ZXAuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBNb2RhbFN0ZXBDb21wb25lbnQgZXh0ZW5kcyBPcHRpb25zIGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBAT3V0cHV0KCkgb25VcGRhdGVNb2RhbCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAvLyBAT3V0cHV0KCkgb25DcmVhdGVNb2RhbCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAVmlld0NoaWxkKCdtb2RhbCcpIG1vZGFsOiBNb2RhbERpcmVjdGl2ZTtcbiAgICBAVmlld0NoaWxkKCdteU1vZGFsJykgbXlNb2RhbDtcbiAgICBAVmlld0NoaWxkKCdzZW5kTW9kYWwnKSBzZW5kTW9kYWw6IE1vZGFsRGlyZWN0aXZlO1xuICAgIEBWaWV3Q2hpbGQoJ3JlY2lldmVNb2RhbCcpIHJlY2lldmVNb2RhbDogTW9kYWxEaXJlY3RpdmU7XG4gICAgQFZpZXdDaGlsZCgnZHhEYXRhR3JpZFN0ZXBTZW5kTGlzdCcpXG4gICAgZHhEYXRhR3JpZFN0ZXBTZW5kTGlzdDogRHhEYXRhR3JpZENvbXBvbmVudDtcbiAgICBAVmlld0NoaWxkKCd1cGxvYWRBdHRhY2htZW50JykgdXBsb2FkQXR0YWNobWVudDogVXBsb2FkQXR0YWNobWVudENvbXBvbmVudDtcblxuICAgIHJlZ2lzdGVyRm9ybTogRm9ybUdyb3VwO1xuICAgIHNlbmRGb3JtOiBGb3JtR3JvdXA7XG4gICAgcmVjaWV2ZUZvcm06IEZvcm1Hcm91cDtcbiAgICBzdWJtaXR0ZWQgPSBmYWxzZTtcbiAgICBzdWJtaXR0ZWRTZW5kID0gZmFsc2U7XG4gICAgc3VibWl0dGVkUmVjaWV2ZSA9IGZhbHNlO1xuICAgIHRpdGxlOiBhbnkgPSAnJztcbiAgICBzZWxlY3RMaXN0OiBhbnkgPSBbXTtcbiAgICBzZW5kTGlzdDogYW55ID0gW107XG4gICAgcmVjaWV2ZUxpc3Q6IGFueSA9IFtdO1xuICAgIG1vZGFsQ29uZmlnOiBNb2RhbE9wdGlvbnMgPSB7XG4gICAgICAgIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IHRydWVcbiAgICB9O1xuICAgIHRoO1xuICAgIHNlbGVjdGVkU3RlcDogYW55ID0gbnVsbDtcbiAgICBpc01vcmUgPSBmYWxzZTtcbiAgICBtb3JlRmllbGQ6IGFueTtcbiAgICBwdWJsaWMgY29uZmlnOiBhbnk7XG4gICAgc3RlcERhdGE6IGFueSA9IHt9O1xuICAgIHNlbmREYXRhOiBhbnkgPSB7fTtcbiAgICByZWNpZXZlRGF0YTogYW55ID0ge307XG4gICAgbGFzdFN0ZXAgPSAnJztcbiAgICBpc1NlbmQgPSBmYWxzZTtcbiAgICBpc1JlY2lldmUgPSBmYWxzZTtcbiAgICBpc0VkaXRTZW5kID0gZmFsc2U7XG4gICAgaXNFZGl0UmVjaWV2ZSA9IGZhbHNlO1xuICAgIHRtcERhdGE6YW55ID0ge307XG4gICAgZmlsdGVyZWREZXBhcnRtZW50czphbnkgPSBbXTtcbiAgICBkZXBhcnRtZW50TGlzdDphbnkgPSBbXTtcbiAgICBkZXBhcnRtZW50VXJsID0gXCIvZGIvY3RfZXh0X2RlcGFydG1lbnRcIjtcbiAgICBjYXVzZVVybCA9IFwiL2RiL2N0X2Ryb3Bkb3duXCI7XG4gICAgY2F1c2VGaWx0ZXIgPSBcInN5c3RlbV9pZCxlcSwyMykkYW5kKGRyb3Bkb3duX3R5cGUsbGlrZSzguYDguKPguLfguYjguK3guIfguKrguYjguIfguITguLfguJlcIjtcbiAgICB0ZW1wSWQgPSAtMTtcbiAgICBhdHRhY2htZW50VXJsO1xuICAgIHN5c3RlbV9pZDtcbiAgICBmaWx0ZXJfcmVmX2V4dF9kZXBhcnRtZW50X2lkOiBhbnkgPSBmYWxzZTtcbiAgICBmaWx0ZXJfcmVmX2V4dF9kZXBhcnRtZW50X2lkX3Nob3cgPSB0cnVlO1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgYXBwQ29uZmlnU2VydmljZTogQXBwQ29uZmlnU2VydmljZSwgcHJpdmF0ZSByZXF1ZXN0OiBSZXF1ZXN0LCBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlciwgcHVibGljIGNvbW1vbjogQ29tbW9uLCBwdWJsaWMgZGF0ZTogRGF0ZVNlcnZpY2UsIHB1YmxpYyBiMmJTZXJ2aWNlOiBCMmJTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuY29uZmlnID0gYXBwQ29uZmlnU2VydmljZS5nZXRDb25maWcoKTtcbiAgICAgICAgdGhpcy5hdHRhY2htZW50VXJsID0gXy5nZXQodGhpcy5jb25maWcsICdhcGlTZXJ2ZXJzLmFsZnJlc2NvLnVybCcpIHx8IFwiaHR0cHM6Ly8yMDMuMTU0LjMyLjEyNjoyNTg1L2FwaS9tZmVjL0FsZnJlc2NvXCI7XG4gICAgICAgIHRoaXMuc3lzdGVtX2lkID0gXy5nZXQodGhpcy5jb25maWcsICdzeXN0ZW1faWQnKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy50aCA9IHRoaXMuY29tbW9uLmZuTG9jYWxQQ2FsZW5kYXIoJ3RoJyk7XG4gICAgICAgIHRoaXMucmVjaWV2ZUZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgICAgIGJvb2tfbm86IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgICAgICAgIHJlY3ZfZGF0ZTogWycnXSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2VuZEZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgICAgIHNlbmRfdG86IFsnJ10sXG4gICAgICAgICAgICBib29rX25vOiBbJyddLFxuICAgICAgICAgICAgc2VuZF9kYXRlOiBbJyddLFxuICAgICAgICAgICAgaXNfaW1wb3J0YW50OiBbJyddLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgICAgIG5hbWU6IFsnJ10sXG4gICAgICAgICAgICBzdGVwX2lkOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICAgICAgc3RlcF9kYXRlOiBbJyddLFxuICAgICAgICAgICAgcmVtYXJrOiBbJyddLFxuICAgICAgICAgICAgbGFzdFN0ZXA6IFsnJ10sXG4gICAgICAgICAgICBtb3JlRmllbGQ6IHRoaXMuZm9ybUJ1aWxkZXIuYXJyYXkoW10pLFxuICAgICAgICAgICAgc29jX3JlY3Zfbm86IFsnJ10sXG4gICAgICAgICAgICBzb2NfcmVjdl9kYXRlOiBbJyddLFxuICAgICAgICAgICAgZ3RjX3JlY3Zfbm86IFsnJ10sXG4gICAgICAgICAgICBndGNfcmVjdl9kYXRlOiBbJyddLFxuICAgICAgICAgICAgYm9va19ubzogWycnXSxcbiAgICAgICAgICAgIGJvb2tfZGF0ZTogWycnXSxcbiAgICAgICAgICAgICdmb3InOiBbJyddLFxuICAgICAgICAgICAgZGVwdF9uYW1lOiBbJyddLFxuICAgICAgICAgICAgbWluaXN0cnk6IFsnJ11cblxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBvcGVuKG9wdGlvbnM/OiBPcHRpb25zKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKG9wdGlvbnMpO1xuICAgICAgICB0aGlzLnN0ZXBEYXRhID0ge307XG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLnRpdGxlID0gb3B0aW9ucy50aXRsZSB8fCAnJztcbiAgICAgICAgICAgIHRoaXMubGFzdFN0ZXAgPSBvcHRpb25zLmRhdGEubGFzdFN0ZXA7XG4gICAgICAgICAgICB0aGlzLnN0ZXBEYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvcHRpb25zLmRhdGEpKTtcbiAgICAgICAgICAgIHRoaXMuc3RlcERhdGEuc3RlcF9kYXRlID0gdGhpcy5kYXRlLmdldE5vdygpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuc3RlcERhdGFbJ2xhc3RTdGVwJ107XG4gICAgICAgICAgICB0aGlzLnNlbGVjdExpc3QgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0KCcvZGIvY3Rfc3RlcD9fd2hlcmU9KGNhdGVnb3J5X2lkLGVxLCcgKyBvcHRpb25zLmRhdGEuY2F0ZWdvcnlfaWQgKyAnKSZfc29ydD1zZXFfbm8nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwbG9hZEF0dGFjaG1lbnQuY2xlYXJWYWx1ZSgpO1xuICAgICAgICB0aGlzLm1vZGFsLnNob3coKTtcbiAgICB9XG5cbiAgICBmKCkgeyByZXR1cm4gdGhpcy5yZWdpc3RlckZvcm0uY29udHJvbHM7IH1cbiAgICBmcygpIHsgcmV0dXJuIHRoaXMuc2VuZEZvcm0uY29udHJvbHM7IH1cbiAgICBmcigpIHsgcmV0dXJuIHRoaXMucmVjaWV2ZUZvcm0uY29udHJvbHM7IH1cblxuICAgIGNsb3NlTW9kYWwoKSB7XG4gICAgICAgIHRoaXMuc3VibWl0dGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2VsZWN0TGlzdCA9IFtdO1xuICAgICAgICB0aGlzLnNlbmRMaXN0ID0gW107XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTdGVwID0gbnVsbDtcbiAgICAgICAgdGhpcy5pc01vcmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc1NlbmQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tb3JlRmllbGQgPSBbXTtcbiAgICAgICAgdGhpcy5zdGVwRGF0YSA9IHt9O1xuICAgICAgICB0aGlzLmxhc3RTdGVwID0gJyc7XG4gICAgICAgIHRoaXMubW9kYWwuaGlkZSgpO1xuICAgIH1cblxuICAgIGNsb3NlU2VuZE1vZGFsKCkge1xuICAgICAgICB0aGlzLnN1Ym1pdHRlZFNlbmQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZW5kRGF0YSA9IHt9O1xuICAgICAgICB0aGlzLmlzRWRpdFNlbmQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50bXBEYXRhID0ge307XG4gICAgICAgIHRoaXMuc2VuZE1vZGFsLmhpZGUoKTtcbiAgICB9XG5cbiAgICBjbG9zZVJlY2lldmVNb2RhbCgpIHtcbiAgICAgICAgdGhpcy5zdWJtaXR0ZWRSZWNpZXZlID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVjaWV2ZURhdGEgPSB7fTtcbiAgICAgICAgdGhpcy5pc0VkaXRSZWNpZXZlID0gZmFsc2U7XG4gICAgICAgIHRoaXMudG1wRGF0YSA9IHt9O1xuICAgICAgICB0aGlzLnJlY2lldmVNb2RhbC5oaWRlKCk7XG4gICAgfVxuXG4gICAgb25ZZXNDbGljayhtb2RhbCkge1xuICAgICAgICBtb2RhbC5oaWRlKCk7XG4gICAgfVxuXG4gICAgb25Ob0NsaWNrKG1vZGFsKSB7XG4gICAgICAgIG1vZGFsLmhpZGUoKTtcbiAgICB9XG5cbiAgICBvbkhpZGRlbigkZXZlbnQ6IE1vZGFsRGlyZWN0aXZlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdMT0cgTUVTU0FHRTogTW9kYWxDb25maXJtIC0+IG9uSGlkZGVuIC0+ICRldmVudCcsICRldmVudCk7XG5cbiAgICB9XG4gICAgXG4gICAgdmFsdWVTZWxldGVNaW5pc3RyeSh2YWx1ZSkge1xuICAgICAgdGhpcy5maWx0ZXJfcmVmX2V4dF9kZXBhcnRtZW50X2lkX3Nob3cgPSBmYWxzZTtcbiAgICAgIGNvbnNvbGUubG9nKCd2YWx1ZScsIHZhbHVlKVxuICAgICAgLy8gdGhpcy5zdGVwRGF0YS5taW5pc3RyeV9pZCA9IHZhbHVlICYmIHZhbHVlLmlkID8gdmFsdWUuaWQgOiBudWxsXG4gICAgICBpZiAodmFsdWUgJiYgdmFsdWUuaWQpIHtcbiAgICAgICAgdGhpcy5zdGVwRGF0YS5kZXB0X25hbWUgPSBudWxsXG4gICAgICAgIHRoaXMuZmlsdGVyX3JlZl9leHRfZGVwYXJ0bWVudF9pZCA9IGAmX3doZXJlPShyZWZfZXh0X2RlcGFydG1lbnRfaWQsZXEsJHt2YWx1ZS5pZH0pJGFuZCh0eXBlLGluLDIsMyw0LDUpYFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5maWx0ZXJfcmVmX2V4dF9kZXBhcnRtZW50X2lkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5maWx0ZXJfcmVmX2V4dF9kZXBhcnRtZW50X2lkX3Nob3cgPSB0cnVlO1xuICAgICAgfSwgNTApXG5cbiAgICB9XG5cbiAgICB2YWx1ZVNlbGV0ZURlcHROYW1lKHZhbHVlKSB7XG4gICAgICBjb25zb2xlLmxvZygndmFsdWUnLCB2YWx1ZSlcbiAgICAgIHRoaXMuc3RlcERhdGEuY29kZV9kZXB0ID0gdmFsdWUgJiYgdmFsdWUuaWQgPyB2YWx1ZS5pZCA6IG51bGxcbiAgICB9XG5cblxuICAgIGFzeW5jIGNoZWNrRXh0cmFGaWVsZCgpIHtcbiAgICAgICAgdGhpcy5zdGVwRGF0YS5zdGVwX2lkID0gdGhpcy5zZWxlY3RlZFN0ZXAuaWQ7XG4gICAgICAgIHRoaXMuc3RlcERhdGEuc3RlcF9uYW1lID0gdGhpcy5zZWxlY3RlZFN0ZXAubmFtZTtcbiAgICAgICAgY29uc29sZS5sb2codGhpcy5pc01vcmUpO1xuICAgICAgICB0aGlzLm1vcmVGaWVsZCA9IFtdO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFN0ZXAuZmxhZyAmJiB0aGlzLnNlbGVjdGVkU3RlcC5mbGFnICE9PSAnJykge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNlbGVjdGVkU3RlcC5mbGFnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmxhZyA9IHRoaXMuc2VsZWN0ZWRTdGVwLmZsYWcuY2hhckF0KGkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVpcmVGbGFnID0gdGhpcy5zZWxlY3RlZFN0ZXAucmVxdWlyZV9mbGFnID8gdGhpcy5zZWxlY3RlZFN0ZXAucmVxdWlyZV9mbGFnLmNoYXJBdChpKSA6IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgY3Rfc3RlcF9mbGFnID0gYXdhaXQgdGhpcy5yZXF1ZXN0LmdldCgnL2RiL2N0X3N0ZXBfZmxhZz9fd2hlcmU9KGZsYWcsZXEsJyArIGZsYWcgKyAnKScpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0ZpZWxkID0gY3Rfc3RlcF9mbGFnWzBdO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuYWRkRmllbGQobmV3RmllbGQsICtyZXF1aXJlRmxhZyk7XG4gICAgICAgICAgICAgICAgdGhpcy5tb3JlRmllbGQucHVzaChuZXdGaWVsZCk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5mKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaXNNb3JlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaXNTZW5kID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmlzUmVjaWV2ZSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc01vcmUgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkU3RlcC50eXBlX2lkID09PSA4IHx8IHRoaXMuc2VsZWN0ZWRTdGVwLnR5cGVfaWQgPT09IDEzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXBhcnRtZW50TGlzdCA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQoJy9kYi9jdF9leHRfZGVwYXJ0bWVudD9fc29ydD1uYW1lJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXBhcnRtZW50TGlzdCA9IHRoaXMuZGVwYXJ0bWVudExpc3QubWFwKGEgPT4gYS5uYW1lKTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1JlY2lldmUgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZFN0ZXAudHlwZV9pZCA9PT0gOSB8fCB0aGlzLnNlbGVjdGVkU3RlcC50eXBlX2lkID09PSAxNCkge1xuICAgICAgICAgICAgLy8gICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLnJlcXVlc3QucG9zdCgnL3NxbC9nZXRMYXN0U2VuZCcsIHRoaXMuc3RlcERhdGEpO1xuICAgICAgICAgICAgLy8gICAgIGlmIChkYXRhLnJlc3VsdERhdGEgJiYgZGF0YS5yZXN1bHREYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgY29uc3QgY3Rfc3RlcF9kYXRhX2lkID0gZGF0YS5yZXN1bHREYXRhWzBdLmlkO1xuICAgICAgICAgICAgLy8gICAgICAgICBjb25zdCBjdF9zZW5kTGlzdCA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQoJy9kYi9jdF9zZW5kP193aGVyZT0oY3Rfc3RlcF9kYXRhX2lkLGVxLCcgKyBjdF9zdGVwX2RhdGFfaWQgKyAnKScpO1xuICAgICAgICAgICAgLy8gICAgICAgICBmb3IgKGNvbnN0IGN0X3NlbmQgb2YgY3Rfc2VuZExpc3QpIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIGNvbnN0IHJlY3ZEYXRhOiBhbnkgPSB7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgY3Rfc2VuZF9pZDogY3Rfc2VuZC5pZCxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICBzZW5kX2Jvb2tfbm86IGN0X3NlbmQuYm9va19ubyxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICBzZW5kX2RhdGU6IGN0X3NlbmQuc2VuZF9kYXRlLFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIHJlY3ZfZnJvbTogY3Rfc2VuZC5zZW5kX3RvLFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIG5hbWU6IGN0X3NlbmQubmFtZVxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIHRoaXMucmVjaWV2ZUxpc3QucHVzaChyZWN2RGF0YSk7XG4gICAgICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgICAgIC8vICAgICB9XG4gICAgICAgICAgICAvLyAgICAgdGhpcy5pc1JlY2lldmUgPSB0cnVlO1xuICAgICAgICAgICAgLy8gICAgIHRoaXMuaXNTZW5kID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNTZW5kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1JlY2lldmUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEZpZWxkSWQoZGF0YSkge1xuICAgICAgICBsZXQgaWQgPSAnJztcbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgICBpZCArPSAndHh0JztcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgPT09ICdkYXRldGltZScpIHtcbiAgICAgICAgICAgIGlkICs9ICd0eHQnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWQgKz0gJ3R4dCc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmllbGQgPSBkYXRhLmZpZWxkX25hbWUuY2hhckF0KDApLnRvTG9jYWxlVXBwZXJDYXNlKCkgKyBkYXRhLmZpZWxkX25hbWUuc3Vic3RyaW5nKDEpO1xuICAgICAgICBpZCArPSBmaWVsZDtcbiAgICAgICAgcmV0dXJuIGlkO1xuICAgIH1cblxuICAgIGFkZEZpZWxkKGRhdGEsIHJlcXVpcmVkKSB7XG4gICAgICAgIGxldCBjb250cm9sOmFueSA9IDxGb3JtQXJyYXk+dGhpcy5yZWdpc3RlckZvcm0uY29udHJvbHNbJ21vcmVGaWVsZCddO1xuICAgICAgICBsZXQgbmV3Z3JvdXA7XG4gICAgICAgIHRoaXMuc3RlcERhdGFbZGF0YS5maWVsZF9uYW1lXSA9IG51bGw7XG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICAgICAgaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXA6IGFueSA9IHt9O1xuICAgICAgICAgICAgICAgIGdyb3VwW2RhdGEuZmllbGRfbmFtZV0gPSBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdO1xuICAgICAgICAgICAgICAgIG5ld2dyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cChncm91cCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwOiBhbnkgPSB7fTtcbiAgICAgICAgICAgICAgICBncm91cFtkYXRhLmZpZWxkX25hbWVdID0gWycnXTtcbiAgICAgICAgICAgICAgICBuZXdncm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoZ3JvdXApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gJ2RhdGV0aW1lJykge1xuICAgICAgICAgICAgaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXA6IGFueSA9IHt9O1xuICAgICAgICAgICAgICAgIGdyb3VwW2RhdGEuZmllbGRfbmFtZV0gPSBbJycsVmFsaWRhdG9ycy5yZXF1aXJlZCwgQ3VzdG9tVmFsaWRhdG9ycy5kYXRlXTtcbiAgICAgICAgICAgICAgICBuZXdncm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoZ3JvdXApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cDogYW55ID0ge307XG4gICAgICAgICAgICAgICAgZ3JvdXBbZGF0YS5maWVsZF9uYW1lXSA9IFsnJ107XG4gICAgICAgICAgICAgICAgbmV3Z3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKGdyb3VwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3RlcERhdGFbZGF0YS5maWVsZF9uYW1lXSA9IHRoaXMuZGF0ZS5nZXROb3coKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBpZiAocmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cDogYW55ID0ge307XG4gICAgICAgICAgICAgICAgZ3JvdXBbZGF0YS5maWVsZF9uYW1lXSA9IFtWYWxpZGF0b3JzLnJlcXVpcmVkXTtcbiAgICAgICAgICAgICAgICBuZXdncm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoZ3JvdXApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cDogYW55ID0ge307XG4gICAgICAgICAgICAgICAgZ3JvdXBbZGF0YS5maWVsZF9uYW1lXSA9IFsnJ107XG4gICAgICAgICAgICAgICAgbmV3Z3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKGdyb3VwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgPT09ICdzcGVjaWFsJyl7XG4gICAgICAgICAgICBpZihkYXRhLmZpZWxkX25hbWUgPT09ICdhbW91bnQnKXtcbiAgICAgICAgICAgICAgICBpZiAocmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXA6IGFueSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBncm91cFtkYXRhLmZpZWxkX25hbWVdID0gWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXTtcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBbJ2Ftb3VudF90eXBlJ10gPSBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdO1xuICAgICAgICAgICAgICAgICAgICBuZXdncm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoZ3JvdXApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwOiBhbnkgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBbZGF0YS5maWVsZF9uYW1lXSA9IFsnJ107XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwWydhbW91bnRfdHlwZSddID0gWycnXTtcbiAgICAgICAgICAgICAgICAgICAgbmV3Z3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKGdyb3VwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9ZWxzZSBpZihkYXRhLmZpZWxkX25hbWUgPT09ICdmb2xsb3cnKXtcbiAgICAgICAgICAgICAgICBpZiAocmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXA6IGFueSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBncm91cFtkYXRhLmZpZWxkX25hbWVdID0gWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXTtcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBbJ2ZvbGxvd19yZW1hcmsnXSA9IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF07XG4gICAgICAgICAgICAgICAgICAgIG5ld2dyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cChncm91cCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXA6IGFueSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBncm91cFtkYXRhLmZpZWxkX25hbWVdID0gWycnXTtcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBbJ2ZvbGxvd19yZW1hcmsnXSA9IFsnJ107XG4gICAgICAgICAgICAgICAgICAgIG5ld2dyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cChncm91cCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwOiBhbnkgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBbZGF0YS5maWVsZF9uYW1lXSA9IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF07XG4gICAgICAgICAgICAgICAgICAgIG5ld2dyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cChncm91cCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXA6IGFueSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBncm91cFtkYXRhLmZpZWxkX25hbWVdID0gWycnXTtcbiAgICAgICAgICAgICAgICAgICAgbmV3Z3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKGdyb3VwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb250cm9sLnB1c2gobmV3Z3JvdXApO1xuICAgIH1cblxuICAgIGdldFZhbGlkYXRlTW9yZUZpZWxkKGksIGZpZWxkLCB2YWxpZGF0ZVR5cGU/KSB7XG4gICAgICAgIGxldCBmb3JtTW9yZUZpZWxkOiBhbnkgPSB0aGlzLmYoKVsnbW9yZUZpZWxkJ107XG4gICAgICAgIGlmICh2YWxpZGF0ZVR5cGUpIHtcbiAgICAgICAgICAgIGZvcm1Nb3JlRmllbGQgPSBmb3JtTW9yZUZpZWxkLmNvbnRyb2xzW2ldO1xuICAgICAgICAgICAgZm9ybU1vcmVGaWVsZCA9IGZvcm1Nb3JlRmllbGQuY29udHJvbHNbZmllbGRdO1xuICAgICAgICAgICAgaWYgKGZvcm1Nb3JlRmllbGQuZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1Nb3JlRmllbGQuZXJyb3JzW3ZhbGlkYXRlVHlwZV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmb3JtTW9yZUZpZWxkLmVycm9ycztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtTW9yZUZpZWxkLmVycm9ycztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFJvd0luZGV4KGRhdGEpIHtcbiAgICAgICAgaWYgKCFkYXRhLmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBubyA9IGRhdGEucm93LmRhdGFJbmRleCArIDE7XG4gICAgICAgIHJldHVybiBubztcbiAgICB9XG5cbiAgICBvbkNlbGxQcmVwYXJlZChlKSB7XG4gICAgICAgIGlmIChlLnJvd1R5cGUgPT09ICdkYXRhJykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBpIGluIGUuY29tcG9uZW50LmNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoZS5jb2x1bW4uZGF0YUZpZWxkID09PSBlLmNvbXBvbmVudC5jb2x1bW5zW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgIGUuY2VsbEVsZW1lbnQuYWNjZXNzS2V5ID0gZS5jb21wb25lbnQuY29sdW1uc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRTZW5kKCl7XG4gICAgICAgIHRoaXMuc2VuZERhdGEuc2VuZF9kYXRlID0gdGhpcy5kYXRlLmdldE5vdygpO1xuICAgICAgICB0aGlzLnNlbmRNb2RhbC5zaG93KCk7XG4gICAgfVxuXG4gICAgZWRpdFNlbmQoZGF0YSkge1xuICAgICAgICB0aGlzLnRtcERhdGEgPSBkYXRhO1xuICAgICAgICB0aGlzLnNlbmREYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gICAgICAgIC8vIHRoaXMuc2VuZERhdGEuc2VuZF9kYXRlID0gbmV3IERhdGUodGhpcy5zZW5kRGF0YS5zZW5kX2RhdGUpO1xuICAgICAgICB0aGlzLmlzRWRpdFNlbmQgPSB0cnVlO1xuICAgICAgICB0aGlzLnNlbmRNb2RhbC5zaG93KCk7XG4gICAgfVxuXG4gICAgZWRpdFJlY2lldmUoZGF0YSkge1xuICAgICAgICB0aGlzLnRtcERhdGEgPSBkYXRhO1xuICAgICAgICB0aGlzLnJlY2lldmVEYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gICAgICAgIHRoaXMucmVjaWV2ZURhdGEucmVjdl9kYXRlID0gdGhpcy5yZWNpZXZlRGF0YS5yZWN2X2RhdGUgPyBuZXcgRGF0ZSh0aGlzLnJlY2lldmVEYXRhLnJlY3ZfZGF0ZSkgOiB0aGlzLnJlY2lldmVEYXRhLnJlY3ZfZGF0ZTtcbiAgICAgICAgdGhpcy5pc0VkaXRSZWNpZXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZWNpZXZlTW9kYWwuc2hvdygpO1xuICAgIH1cblxuICAgIGZpbHRlckRlcGFydG1lbnRzKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuZmlsdGVyZWREZXBhcnRtZW50cyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZGVwYXJ0bWVudExpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGRlcGFydG1lbnQgPSB0aGlzLmRlcGFydG1lbnRMaXN0W2ldO1xuICAgICAgICAgICAgaWYgKGRlcGFydG1lbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKGV2ZW50LnF1ZXJ5LnRvTG93ZXJDYXNlKCkpID09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcmVkRGVwYXJ0bWVudHMucHVzaChkZXBhcnRtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIG9uU3VibWl0KCkge1xuICAgICAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XG4gICAgICAgIC8vIOC4luC5ieC4siBmb3JtIOC5hOC4oeC5iOC4hOC4o+C4muC4q+C4o+C4t+C4reC4nOC4tOC4lOC4leC4suC4oeC5gOC4h+C4t+C5iOC4reC4meC5hOC4guC4l+C4teC5iOC4leC4seC5ieC4h+C5hOC4p+C5ieC4iOC4sOC4iOC4muC4l+C4teC5iOC4leC4o+C4h+C4meC4teC5iVxuICAgICAgICBjb25zb2xlLmxvZygndGhpcy5yZWdpc3RlckZvcm0uaW52YWxpZDogJywgdGhpcy5yZWdpc3RlckZvcm0uaW52YWxpZCk7XG4gICAgICAgIGlmICh0aGlzLnJlZ2lzdGVyRm9ybS5pbnZhbGlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHBvc3REYXRhID0gW107XG4gICAgICAgIGxldCBkYXRhID0gXy5jbG9uZURlZXAodGhpcy5zdGVwRGF0YSk7XG4gICAgICAgIGRhdGEuYWN0aW9uID0gXCJhZGRcIjtcbiAgICAgICAgbGV0IHVzZXJEYXRhOmFueSA9IHRoaXMuYjJiU2VydmljZS5nZXRWZXJpZnlUb2tlbigpO1xuICAgICAgICBkYXRhLnVzZXJuYW1lID0gdXNlckRhdGEudXNlcm5hbWU7XG4gICAgICAgIGlmKGRhdGEucmVtaW5kX2RhdGUpIGRhdGEucmVtaW5kX2RhdGUgPSB0aGlzLmRhdGUuZ2V0Tm93KCkuYWRkKGRhdGEucmVtaW5kX2RhdGUsICdkJykudG9EYXRlKCk7XG4gICAgICAgIGRlbGV0ZSBkYXRhW1wiY3RfbWFpbl9pZFwiXTtcbiAgICAgICAgZGVsZXRlIGRhdGFbXCJ1cGRhdGVfZGF0ZVwiXTtcbiAgICAgICAgbGV0IG1haW4gPSB7XG4gICAgICAgICAgICBcImN0X3N0ZXBfZGF0YVwiOltkYXRhXVxuICAgICAgICB9XG4gICAgICAgIHBvc3REYXRhLnB1c2gobWFpbik7XG4gICAgICAgIGlmKHRoaXMuc2VuZExpc3QgJiYgdGhpcy5zZW5kTGlzdC5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgIGxldCBjdF9zZW5kID0ge1xuICAgICAgICAgICAgICAgIFwiY3Rfc2VuZFwiOltdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbGV0IGN0X3JlY2lldmUgPSB7XG4gICAgICAgICAgICAgICAgXCJjdF9yZWNpZXZlXCI6W11cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3IobGV0IGRhdGEgb2YgdGhpcy5zZW5kTGlzdCl7XG4gICAgICAgICAgICAgICAgZGF0YS5uYW1lID0gZGF0YS5uYW1lO1xuICAgICAgICAgICAgICAgIGRhdGEuYWN0aW9uID0gXCJhZGRcIjtcbiAgICAgICAgICAgICAgICBkZWxldGUgZGF0YS5pZDtcbiAgICAgICAgICAgICAgICBjdF9zZW5kLmN0X3NlbmQucHVzaChkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBvc3REYXRhLnB1c2goY3Rfc2VuZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYodGhpcy5yZWNpZXZlTGlzdCAmJiB0aGlzLnJlY2lldmVMaXN0Lmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgbGV0IGN0X3JlY2lldmUgPSB7XG4gICAgICAgICAgICAgICAgXCJjdF9yZWNpZXZlXCI6W11cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3IobGV0IGRhdGEgb2YgdGhpcy5yZWNpZXZlTGlzdCl7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGRhdGFbJ3NlbmRfYm9va19ubyddO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBkYXRhWydzZW5kX2RhdGUnXTtcbiAgICAgICAgICAgICAgICBkYXRhLm5hbWUgPSBkYXRhLm5hbWU7XG4gICAgICAgICAgICAgICAgZGF0YS5hY3Rpb24gPSBcImFkZFwiO1xuICAgICAgICAgICAgICAgIGN0X3JlY2lldmUuY3RfcmVjaWV2ZS5wdXNoKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcG9zdERhdGEucHVzaChjdF9yZWNpZXZlKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZygncG9zdERhdGEnLHBvc3REYXRhKTtcbiAgICAgICAgLy8gaWYodGhpcy5tb2RlID09PSAnRURJVCcpe1xuICAgICAgICBsZXQgcG9zdFJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LnBvc3QoXCIvY3QvbWFpblwiLHBvc3REYXRhKTtcbiAgICAgICAgaWYodGhpcy5zdGVwRGF0YS51cGRhdGVfZGF0ZSl7XG4gICAgICAgICAgbGV0IHN0ZXBMaXN0ID0gYXdhaXQgdGhpcy5nZXRTdGVwTGlzdCgpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwic3RlcExpc3RcIixzdGVwTGlzdClcbiAgICAgICAgICBpZihzdGVwTGlzdC5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVxdWVzdC5wdXQoXCIvZGIvXCIrdGhpcy5zdGVwRGF0YS5yZWZfdGFibGUrXCIvXCIrdGhpcy5zdGVwRGF0YS5yZWZfaWQse3N0YXR1czpzdGVwTGlzdFswXS5zdGVwX25hbWUsc3RhdHVzX2RhdGU6c3RlcExpc3RbMF0uc3RlcF9kYXRlfSk7XG4gICAgICAgICAgICB0aGlzLmNvbW1vbi5mbkNoZWNrUmVzcG9uc2UocG9zdFJlc3BvbnNlLCB0aGlzLm15TW9kYWwpXG4gICAgICAgICAgfVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICBhd2FpdCB0aGlzLnJlcXVlc3QucHV0KFwiL2RiL1wiK3RoaXMuc3RlcERhdGEucmVmX3RhYmxlK1wiL1wiK3RoaXMuc3RlcERhdGEucmVmX2lkLHtzdGF0dXM6dGhpcy5zdGVwRGF0YS5zdGVwX25hbWV9KTtcbiAgICAgICAgICB0aGlzLmNvbW1vbi5mbkNoZWNrUmVzcG9uc2UocG9zdFJlc3BvbnNlLCB0aGlzLm15TW9kYWwpXG4gICAgICAgIH1cblxuICAgICAgICAvLyB9ZWxzZXtcbiAgICAgICAgLy8gICAgIHRoaXMub25DcmVhdGVNb2RhbC5lbWl0KHBvc3REYXRhKTtcbiAgICAgICAgLy8gfVxuICAgIH1cblxuICAgIGFzeW5jIGdldFN0ZXBMaXN0KCkge1xuICAgICAgICBjb25zb2xlLmxvZygnZ2V0U3RlcExpc3QnKTtcbiAgICAgICAgbGV0IGZpbHRlciA9IHtcbiAgICAgICAgICAgIGZpbHRlcjp7XG4gICAgICAgICAgICAgICAgcmVmX3RhYmxlOlwiPVwiK3RoaXMuc3RlcERhdGEucmVmX3RhYmxlLFxuICAgICAgICAgICAgICAgIHJlZl9pZDp0aGlzLnN0ZXBEYXRhLnJlZl9pZCxcbiAgICAgICAgICAgICAgICBzeXN0ZW1faWQ6dGhpcy5zdGVwRGF0YS5zeXN0ZW1faWRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvcmRlcl9ieTpbXCJzdGVwX2RhdGUgZGVzY1wiXVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLnJlcXVlc3QucG9zdCgnL3NlYXJjaC9jdF9zdGVwX2RhdGEnLCBmaWx0ZXIpO1xuICAgICAgICByZXR1cm4gZGF0YS5yZXN1bHREYXRhIHx8IFtdO1xuICAgIH1cblxuXG4gICAgb25DbGlja0JhY2soKXtcbiAgICAgICAgdGhpcy5vblVwZGF0ZU1vZGFsLmVtaXQoKTtcbiAgICAgICAgdGhpcy5jbG9zZU1vZGFsKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgb25TdWJtaXRTZW5kKCkge1xuICAgICAgICB0aGlzLnN1Ym1pdHRlZFNlbmQgPSB0cnVlO1xuICAgICAgICAvLyDguJbguYnguLIgZm9ybSDguYTguKHguYjguITguKPguJrguKvguKPguLfguK3guJzguLTguJTguJXguLLguKHguYDguIfguLfguYjguK3guJnguYTguILguJfguLXguYjguJXguLHguYnguIfguYTguKfguYnguIjguLDguIjguJrguJfguLXguYjguJXguKPguIfguJnguLXguYlcbiAgICAgICAgaWYgKHRoaXMuc2VuZEZvcm0uaW52YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzRWRpdFNlbmQpIHtcbiAgICAgICAgICAgIGNvbnN0IHRtcExpc3QgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdG1wU2VuZCBvZiB0aGlzLnNlbmRMaXN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRtcFNlbmQuaWQgPT09IHRoaXMudG1wRGF0YS5pZCkge1xuICAgICAgICAgICAgICAgICAgICB0bXBMaXN0LnB1c2godGhpcy5zZW5kRGF0YSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdG1wTGlzdC5wdXNoKHRtcFNlbmQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2VuZExpc3QgPSB0bXBMaXN0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZW5kRGF0YS5pZCA9IHRoaXMudGVtcElkO1xuICAgICAgICAgICAgdGhpcy50ZW1wSWQtLTtcbiAgICAgICAgICAgIHRoaXMuc2VuZExpc3QucHVzaCh0aGlzLnNlbmREYXRhKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsb3NlU2VuZE1vZGFsKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgb25TdWJtaXRSZWNpZXZlKCkge1xuICAgICAgICB0aGlzLnN1Ym1pdHRlZFNlbmQgPSB0cnVlO1xuXG4gICAgICAgIC8vIOC4luC5ieC4siBmb3JtIOC5hOC4oeC5iOC4hOC4o+C4muC4q+C4o+C4t+C4reC4nOC4tOC4lOC4leC4suC4oeC5gOC4h+C4t+C5iOC4reC4meC5hOC4guC4l+C4teC5iOC4leC4seC5ieC4h+C5hOC4p+C5ieC4iOC4sOC4iOC4muC4l+C4teC5iOC4leC4o+C4h+C4meC4teC5iVxuICAgICAgICBpZiAodGhpcy5yZWNpZXZlRm9ybS5pbnZhbGlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNFZGl0UmVjaWV2ZSkge1xuICAgICAgICAgICAgY29uc3QgdG1wTGlzdCA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCB0bXBTZW5kIG9mIHRoaXMucmVjaWV2ZUxpc3QpIHtcbiAgICAgICAgICAgICAgICBpZiAodG1wU2VuZC5yZWN2X2Zyb20gPT09IHRoaXMudG1wRGF0YS5yZWN2X2Zyb20pIHtcbiAgICAgICAgICAgICAgICAgICAgdG1wTGlzdC5wdXNoKHRoaXMucmVjaWV2ZURhdGEpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRtcExpc3QucHVzaCh0bXBTZW5kKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJlY2lldmVMaXN0ID0gdG1wTGlzdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVjaWV2ZUxpc3QucHVzaCh0aGlzLnJlY2lldmVEYXRhKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsb3NlUmVjaWV2ZU1vZGFsKCk7XG4gICAgfVxuICAgIGlzSW1wb3J0YW50KGRhdGEpe1xuICAgICAgICByZXR1cm4gZGF0YS5pc19pbXBvcnRhbnQ/XCLguKrguLPguITguLHguI1cIjpcIlwiO1xuICAgIH1cbiAgICBvblVwbG9hZGVkKGRhdGEpe1xuICAgICAgICB0aGlzLnN0ZXBEYXRhLnVybCA9IHRoaXMuYXR0YWNobWVudFVybCsnLycrZGF0YS51dWlkO1xuICAgICAgICB0aGlzLnN0ZXBEYXRhLnV1aWQgPSBkYXRhLnV1aWQ7XG4gICAgfVxuICAgIGNoZWNrRGlzYWJsZShmaWVsZCl7XG4gICAgICAgIGlmKHRoaXMuc3RlcERhdGFbZmllbGQuZmllbGRfbmFtZV0gIT09ICfguYTguKHguYjguJfguLLguIfguIHguLLguKMnKXtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGdldEltYWdlTGluayhkYXRhKXtcbiAgICAgICAgbGV0IHVybCA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXRBdHRhY2htZW50TGlua1Rva2VuKGRhdGEudXJsKTtcbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG59XG4iXX0=