@aggdirect/coolmap 2.5.2 → 2.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +57 -57
- package/esm2020/aggdirect-coolmap.mjs +4 -4
- package/esm2020/lib/component/add-route/add-route.component.mjs +335 -335
- package/esm2020/lib/component/job-code/job-code.component.mjs +181 -181
- package/esm2020/lib/component/map/map.component.mjs +37 -37
- package/esm2020/lib/component/nav/layout/add-route-nav/add-route-nav.component.mjs +146 -146
- package/esm2020/lib/component/nav/layout/job-code-nav/job-code-nav.component.mjs +114 -114
- package/esm2020/lib/component/nav/nav.component.mjs +52 -52
- package/esm2020/lib/component/route-jobcode-list/job-code-list-card/job-code-list-card.component.mjs +72 -72
- package/esm2020/lib/component/route-jobcode-list/route-jobcode-list.component.mjs +316 -316
- package/esm2020/lib/component/route-jobcode-list/sms-card-details-overview/sms-card-details-overview.component.mjs +19 -19
- package/esm2020/lib/component/route-jobcode-list/view-route-list-card/view-route-list-card.component.mjs +33 -33
- package/esm2020/lib/component/shared/dialog/dialog.component.mjs +29 -29
- package/esm2020/lib/component/shared/estimation-display/estimation-display.component.mjs +19 -19
- package/esm2020/lib/component/shared/job-route-list/job-route-list.component.mjs +71 -71
- package/esm2020/lib/component/shared/jobcode-overview/jobcode-overview.component.mjs +24 -24
- package/esm2020/lib/component/shared/jobcode-status/jobcode-status.component.mjs +14 -14
- package/esm2020/lib/component/shared/route-info-card/route-info-card.component.mjs +57 -57
- package/esm2020/lib/coolmap.module.mjs +185 -185
- package/esm2020/public-api.mjs +19 -19
- package/fesm2015/aggdirect-coolmap.mjs +1535 -1535
- package/fesm2015/aggdirect-coolmap.mjs.map +1 -1
- package/fesm2020/aggdirect-coolmap.mjs +1497 -1497
- package/fesm2020/aggdirect-coolmap.mjs.map +1 -1
- package/index.d.ts +5 -5
- package/lib/component/add-route/add-route.component.d.ts +61 -61
- package/lib/component/job-code/job-code.component.d.ts +42 -42
- package/lib/component/map/map.component.d.ts +15 -15
- package/lib/component/nav/layout/add-route-nav/add-route-nav.component.d.ts +49 -49
- package/lib/component/nav/layout/job-code-nav/job-code-nav.component.d.ts +42 -42
- package/lib/component/nav/nav.component.d.ts +31 -31
- package/lib/component/route-jobcode-list/job-code-list-card/job-code-list-card.component.d.ts +20 -20
- package/lib/component/route-jobcode-list/route-jobcode-list.component.d.ts +42 -42
- package/lib/component/route-jobcode-list/sms-card-details-overview/sms-card-details-overview.component.d.ts +9 -9
- package/lib/component/route-jobcode-list/view-route-list-card/view-route-list-card.component.d.ts +12 -12
- package/lib/component/shared/dialog/dialog.component.d.ts +13 -13
- package/lib/component/shared/estimation-display/estimation-display.component.d.ts +8 -8
- package/lib/component/shared/job-route-list/job-route-list.component.d.ts +26 -26
- package/lib/component/shared/jobcode-overview/jobcode-overview.component.d.ts +10 -10
- package/lib/component/shared/jobcode-status/jobcode-status.component.d.ts +7 -7
- package/lib/component/shared/route-info-card/route-info-card.component.d.ts +29 -29
- package/lib/coolmap.module.d.ts +44 -44
- package/package.json +10 -2
- package/public-api.d.ts +15 -15
|
@@ -1,316 +1,316 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
-
import { SelectionModel } from '@angular/cdk/collections';
|
|
3
|
-
import { FormControl, Validators } from '@angular/forms';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "@aggdirect/coolmap-services";
|
|
6
|
-
import * as i2 from "@angular/common";
|
|
7
|
-
import * as i3 from "@angular/forms";
|
|
8
|
-
import * as i4 from "@angular/material/form-field";
|
|
9
|
-
import * as i5 from "@angular/material/input";
|
|
10
|
-
import * as i6 from "@angular/material/icon";
|
|
11
|
-
import * as i7 from "@angular/material/progress-spinner";
|
|
12
|
-
import * as i8 from "ngx-perfect-scrollbar";
|
|
13
|
-
import * as i9 from "./view-route-list-card/view-route-list-card.component";
|
|
14
|
-
import * as i10 from "./sms-card-details-overview/sms-card-details-overview.component";
|
|
15
|
-
import * as i11 from "./job-code-list-card/job-code-list-card.component";
|
|
16
|
-
export class RouteJobCodeListComponent {
|
|
17
|
-
constructor(coolMap, utils) {
|
|
18
|
-
this.coolMap = coolMap;
|
|
19
|
-
this.utils = utils;
|
|
20
|
-
this.loader = true;
|
|
21
|
-
this.type = '';
|
|
22
|
-
this.data = [];
|
|
23
|
-
this.currentNav = '';
|
|
24
|
-
this.emitroute = new EventEmitter();
|
|
25
|
-
this.showAllRoute = new EventEmitter();
|
|
26
|
-
this.preventMouseout = false;
|
|
27
|
-
this.filterList = this.data;
|
|
28
|
-
this.isDriverList = false;
|
|
29
|
-
this.selectedRoute = new SelectionModel(true, []);
|
|
30
|
-
this.preventListSelect = false;
|
|
31
|
-
this.clearJobDetailsFromList = new EventEmitter();
|
|
32
|
-
this.preventDetailsClose = false;
|
|
33
|
-
this.messageLoader = false;
|
|
34
|
-
this.driverMessage = new FormControl('', [Validators.maxLength(256)]);
|
|
35
|
-
this.isSmsList = false;
|
|
36
|
-
this.driverList = [];
|
|
37
|
-
}
|
|
38
|
-
ngOnInit() {
|
|
39
|
-
this.utils.getpreVentJobdetailclose.subscribe(res => { this.preventDetailsClose = res; });
|
|
40
|
-
this.utils.removeMapEntityUtility.subscribe((res) => { this.passRoute(res); });
|
|
41
|
-
}
|
|
42
|
-
passRoute(job) {
|
|
43
|
-
this.data.forEach((each) => { if (each['route_id'] !== job['route_id']) {
|
|
44
|
-
each['isActive'] = false;
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
each['isActive'] = true;
|
|
48
|
-
} });
|
|
49
|
-
if (this.type == 'addroute')
|
|
50
|
-
this.filterList.forEach(ele => this.coolMap.filterRoute(ele['route_id'], 'none'));
|
|
51
|
-
}
|
|
52
|
-
selectRoute(route) {
|
|
53
|
-
if (!this.preventListSelect) {
|
|
54
|
-
this.preventListSelect = true;
|
|
55
|
-
this.selectedRoute.toggle(route);
|
|
56
|
-
this.clearJobDetailsFromList.emit(true);
|
|
57
|
-
this.utils.preVentJobdetailclose.next(false);
|
|
58
|
-
this.filterList.forEach(ele => this.coolMap.filterRoute(ele['job_id'], 'none'));
|
|
59
|
-
this.clearList();
|
|
60
|
-
this.selectedRoute.selected.forEach((ele, index) => {
|
|
61
|
-
this.coolMap.filterRoute(ele['job_id'], 'visible', ((this.selectedRoute.selected.length - 1) === index)).then(() => {
|
|
62
|
-
this.preventListSelect = false;
|
|
63
|
-
});
|
|
64
|
-
});
|
|
65
|
-
if (!this.selectedRoute.selected.length) {
|
|
66
|
-
this.preventListSelect = false;
|
|
67
|
-
this.data.forEach(ele => this.coolMap.filterRoute(ele['job_id'], 'visible'));
|
|
68
|
-
}
|
|
69
|
-
;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
checkroutes(route) {
|
|
73
|
-
const selectedRoute = this.selectedRoute.selected;
|
|
74
|
-
this.filterList = this.filterList.map(ele => { ele['isSelected'] = false; return ele; });
|
|
75
|
-
if (selectedRoute.length > 0) {
|
|
76
|
-
selectedRoute.forEach(ele => {
|
|
77
|
-
if (route['order_number'] === ele['order_number']) {
|
|
78
|
-
ele['isSelected'] = true;
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
return route;
|
|
83
|
-
}
|
|
84
|
-
ngOnChanges(changes) {
|
|
85
|
-
setTimeout(() => {
|
|
86
|
-
if (this.currentNav === 'Addroute' && (this.data.length < this.filterList.length)) {
|
|
87
|
-
const index = this.filterList.findIndex(ele => ele.isActive);
|
|
88
|
-
if (index > 0)
|
|
89
|
-
this.filterList[index].isActive = false;
|
|
90
|
-
this.data.forEach((ele, indexForData) => {
|
|
91
|
-
const id = (ele['job_id'] ? ele['job_id'] : ele['route_id']);
|
|
92
|
-
this.coolMap.plotRoute(ele, id, this.type, false, (indexForData === (this.data.length - 1))).then((res) => {
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
}, 500);
|
|
97
|
-
if (changes['data'] && changes['data']['currentValue']) {
|
|
98
|
-
this.filterList = changes['data']['currentValue'];
|
|
99
|
-
if (this.searchTerm) {
|
|
100
|
-
if (this.searchTerm.length > 0) {
|
|
101
|
-
this.data = this.utils.getSearchResults(changes['data']['currentValue'], this.searchTerm);
|
|
102
|
-
this.filterList = this.data;
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
this.filterList = changes['data']['currentValue'];
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
if (this.type === 'jobcode') {
|
|
109
|
-
this.loader = true;
|
|
110
|
-
this.clearList();
|
|
111
|
-
if (this.filterList.length === 0)
|
|
112
|
-
this.loader = false;
|
|
113
|
-
}
|
|
114
|
-
if (this.type !== 'jobcode') {
|
|
115
|
-
if (changes['data']['previousValue'] && this.currentNav === 'addForm') {
|
|
116
|
-
const activeRoute = changes['data']['previousValue'].find((ele) => ele.isActive);
|
|
117
|
-
if (activeRoute) {
|
|
118
|
-
this.filterList.map((item) => {
|
|
119
|
-
if (item.route_id === activeRoute.route_id) {
|
|
120
|
-
item.isActive = true;
|
|
121
|
-
}
|
|
122
|
-
});
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
if (changes['data']['previousValue'] && this.currentNav !== 'addForm') {
|
|
127
|
-
this.coolMap.removeJobFromMap(changes['data']['previousValue']);
|
|
128
|
-
this.selectedRoute.clear();
|
|
129
|
-
}
|
|
130
|
-
;
|
|
131
|
-
if (this.currentNav !== 'addForm') {
|
|
132
|
-
changes['data']['currentValue'].forEach((ele, indexForData) => {
|
|
133
|
-
const id = (ele['job_id'] ? ele['job_id'] : ele['route_id']);
|
|
134
|
-
if (this.type === 'jobcode')
|
|
135
|
-
ele.materialLabel = ele.material;
|
|
136
|
-
this.coolMap.plotRoute(ele, id, this.type, false, (indexForData === (this.data.length - 1))).then((res) => {
|
|
137
|
-
if (indexForData === (this.data.length - 1)) {
|
|
138
|
-
this.loader = false;
|
|
139
|
-
this.utils.preventnavChange.next(true);
|
|
140
|
-
}
|
|
141
|
-
});
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
if (changes['searchTerm']) {
|
|
146
|
-
if (this.filterList) {
|
|
147
|
-
this.data = this.filterList;
|
|
148
|
-
this.clearList();
|
|
149
|
-
if (changes['searchTerm']['currentValue'].length > 0) {
|
|
150
|
-
this.coolMap.removeRouteAndMarker(1);
|
|
151
|
-
this.data = this.utils.getSearchResults(this.data, changes['searchTerm']['currentValue']);
|
|
152
|
-
}
|
|
153
|
-
else {
|
|
154
|
-
this.data = this.filterList;
|
|
155
|
-
}
|
|
156
|
-
setTimeout(() => {
|
|
157
|
-
this.coolMap.clearBoundWithCordinates();
|
|
158
|
-
if (this.currentNav !== 'addForm' && !this.selectedRoute['selected'].length) {
|
|
159
|
-
this.coolMap.removeRouteAndMarker(1);
|
|
160
|
-
this.toggleFilterRoute(this.filterList);
|
|
161
|
-
}
|
|
162
|
-
}, 500);
|
|
163
|
-
if (this.currentNav !== 'addForm' && this.selectedRoute['selected'].length) {
|
|
164
|
-
if (this.data && this.data.length > 0) {
|
|
165
|
-
this.clearList();
|
|
166
|
-
this.clearJobDetailsFromList.emit(true);
|
|
167
|
-
this.coolMap.removeJobFromMap(this.selectedRoute.selected);
|
|
168
|
-
setTimeout(() => {
|
|
169
|
-
this.data.forEach((ele, indexForData) => {
|
|
170
|
-
this.coolMap.plotRoute(ele, ele['job_id'], this.type, false, (indexForData === (this.data.length - 1))).then(() => {
|
|
171
|
-
if (indexForData === (this.data.length - 1)) {
|
|
172
|
-
this.loader = false;
|
|
173
|
-
this.utils.preventnavChange.next(true);
|
|
174
|
-
}
|
|
175
|
-
if (this.selectedRoute['selected'].length && this.selectedRoute['selected'][0]['job_id'] === ele['job_id']) {
|
|
176
|
-
this.selectedRoute.clear();
|
|
177
|
-
}
|
|
178
|
-
});
|
|
179
|
-
});
|
|
180
|
-
}, 500);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
showRoute() {
|
|
187
|
-
this.utils.preventnavChange.next(false);
|
|
188
|
-
this.loader = true;
|
|
189
|
-
this.clearList();
|
|
190
|
-
this.showAllRoute.emit(true);
|
|
191
|
-
if (this.filterList && this.filterList.length > 0) {
|
|
192
|
-
this.coolMap.removeJobFromMap(this.selectedRoute.selected);
|
|
193
|
-
setTimeout(() => {
|
|
194
|
-
this.filterList.forEach((ele, indexForData) => {
|
|
195
|
-
this.coolMap.plotRoute(ele, ele['job_id'], this.type, false, (indexForData === this.filterList.length - 1)).then(() => {
|
|
196
|
-
if (indexForData === this.filterList.length - 1) {
|
|
197
|
-
this.loader = false;
|
|
198
|
-
this.utils.preventnavChange.next(true);
|
|
199
|
-
}
|
|
200
|
-
if (this.selectedRoute['selected'].length && this.selectedRoute['selected'][0]['job_id'] === ele['job_id']) {
|
|
201
|
-
this.selectedRoute.clear();
|
|
202
|
-
}
|
|
203
|
-
});
|
|
204
|
-
});
|
|
205
|
-
}, 500);
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
toggleDrivermenu(event) {
|
|
209
|
-
const mouseevntType = event.mouseevntType;
|
|
210
|
-
let route = event.route;
|
|
211
|
-
const isHoverOut = event.isHoverOut;
|
|
212
|
-
if (typeof (mouseevntType) === 'string') {
|
|
213
|
-
if (this.preventMouseout) {
|
|
214
|
-
this.isDriverList = !this.isDriverList;
|
|
215
|
-
}
|
|
216
|
-
;
|
|
217
|
-
this.preventMouseout = true;
|
|
218
|
-
}
|
|
219
|
-
if (typeof (mouseevntType) === 'boolean' && !mouseevntType && !this.preventMouseout) {
|
|
220
|
-
this.isDriverList = mouseevntType;
|
|
221
|
-
}
|
|
222
|
-
;
|
|
223
|
-
if (typeof (mouseevntType) === 'boolean' && mouseevntType && !this.preventMouseout) {
|
|
224
|
-
this.isDriverList = mouseevntType;
|
|
225
|
-
}
|
|
226
|
-
;
|
|
227
|
-
if (this.preventMouseout && !this.isDriverList)
|
|
228
|
-
this.preventMouseout = false;
|
|
229
|
-
if (isHoverOut) {
|
|
230
|
-
if (this.preventMouseout) {
|
|
231
|
-
route = this.utils.getdictValue('driver-details');
|
|
232
|
-
this.driverList = route;
|
|
233
|
-
}
|
|
234
|
-
if (!this.preventMouseout) {
|
|
235
|
-
this.driverList = route;
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
else {
|
|
239
|
-
this.driverList = route;
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
visiblesection(value) { if (this.type === value) {
|
|
243
|
-
return true;
|
|
244
|
-
}
|
|
245
|
-
else
|
|
246
|
-
return false; }
|
|
247
|
-
toggleFilterRoute(filterList) {
|
|
248
|
-
filterList.forEach((ele) => {
|
|
249
|
-
const filterItem = (this.type === 'jobcode') ? 'job_id' : 'route_id';
|
|
250
|
-
const index = this.data.findIndex((ele1) => { return (ele1[`${filterItem}`] === ele[`${filterItem}`]); });
|
|
251
|
-
const id = (ele['job_id'] ? ele['job_id'] : ele['route_id']);
|
|
252
|
-
if (id && index < 0)
|
|
253
|
-
this.coolMap.filterRoute(id, 'none');
|
|
254
|
-
if (id && index >= 0) {
|
|
255
|
-
this.data[index].isActive = false;
|
|
256
|
-
this.coolMap.filterRoute(id, 'visible');
|
|
257
|
-
this.coolMap.extendBound(ele['path'], (index === (this.data.length - 1)));
|
|
258
|
-
}
|
|
259
|
-
;
|
|
260
|
-
});
|
|
261
|
-
}
|
|
262
|
-
clearList() {
|
|
263
|
-
this.isDriverList = false;
|
|
264
|
-
this.driverList = null;
|
|
265
|
-
this.preventMouseout = false;
|
|
266
|
-
this.isSmsList = false;
|
|
267
|
-
}
|
|
268
|
-
sendMessage() {
|
|
269
|
-
this.messageLoader = true;
|
|
270
|
-
if (this.driverMessage.valid) {
|
|
271
|
-
const data = {
|
|
272
|
-
order_number: this.driverList['order_number'],
|
|
273
|
-
date: this.driverList['date'],
|
|
274
|
-
message: this.driverMessage.value,
|
|
275
|
-
};
|
|
276
|
-
this.utils.postdata('jobs_report_chat', data).subscribe((res) => {
|
|
277
|
-
if (res['data']['status'] === 'Success.') {
|
|
278
|
-
this.messageLoader = false;
|
|
279
|
-
this.driverMessage.reset();
|
|
280
|
-
this.utils.openSnackBar('Message Sent', 'success');
|
|
281
|
-
}
|
|
282
|
-
else {
|
|
283
|
-
this.messageLoader = false;
|
|
284
|
-
this.utils.openSnackBar('Message not sent', 'error');
|
|
285
|
-
}
|
|
286
|
-
}, err => { if (err) {
|
|
287
|
-
this.messageLoader = false;
|
|
288
|
-
} });
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
RouteJobCodeListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RouteJobCodeListComponent, deps: [{ token: i1.CoolmapService }, { token: i1.UtilsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
293
|
-
RouteJobCodeListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: RouteJobCodeListComponent, selector: "app-route-jobcode-list", inputs: { loader: "loader", type: "type", data: "data", currentNav: "currentNav", searchTerm: "searchTerm", clearListSeletion: "clearListSeletion" }, outputs: { emitroute: "emitroute", showAllRoute: "showAllRoute", clearJobDetailsFromList: "clearJobDetailsFromList" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"scrollprt addroutelist\" [class.viewroute]=\"visiblesection('addroute')\"\r\n [class.jobList]=\"visiblesection('jobcode')\">\r\n <button (click)=\"showRoute()\" [disabled]=\"loader\" *ngIf=\"selectedRoute.selected.length\" class=\"show_routebtn\">Show all\r\n route</button>\r\n <perfect-scrollbar [class.jobscroll]=\"visiblesection('jobcode')\">\r\n <mat-spinner *ngIf=\"loader\"></mat-spinner>\r\n <ul *ngIf=\"!loader && data.length > 0\">\r\n <li [class.active]=\"route['isActive'] && visiblesection('addroute')\" *ngFor=\"let route of data\">\r\n <app-job-code-list-card *ngIf=\"visiblesection('jobcode')\" (toggleDrivermenu)=\"toggleDrivermenu($event)\"\r\n (routeSeletion)=\"selectRoute($event)\" [preventCloseDetails]=\"preventDetailsClose\" [emitJobdetails]=\"{emitroute, clearJobDetailsFromList}\" [route]=\"checkroutes(route)\"></app-job-code-list-card>\r\n <app-view-route-list-card [emitrouteevent]=\"emitroute\" *ngIf=\"visiblesection('addroute')\"\r\n [route]=\"route\"></app-view-route-list-card>\r\n </li>\r\n </ul>\r\n <p *ngIf=\"!loader && data.length === 0\">{{visiblesection('addroute') ? 'No Route found' : 'No Job code found.'}}</p>\r\n </perfect-scrollbar>\r\n</div>\r\n\r\n<div class=\"driver_list\" *ngIf=\"isDriverList\">\r\n <div class=\"driver_headingprt\">\r\n <h2>Driver List</h2>\r\n <button *ngIf=\"driverList.driver_list?.length > 0\" (click)=\"isSmsList = true\">SMS</button>\r\n <div class=\"closebtn\" (click)=\"isDriverList = false; preventMouseout = false; isSmsList = false\">\r\n <mat-icon>clear</mat-icon>\r\n </div>\r\n </div>\r\n <ul class=\"driverList\" *ngIf=\"driverList && driverList.driver_list\">\r\n <li *ngFor=\"let driver of driverList?.driver_list\">\r\n <img src=\"assets/images/driver_icon.png\" [alt]=\"driver['driver_name']\" />\r\n <div class=\"driver_detail\">\r\n <b>{{driver['driver_name']}}</b> <span>{{driver['trucking_company']}}</span>\r\n <div class=\"cont_del\">\r\n <small>Driver contact: <b>{{driver['driver_phone'] ? driver['driver_phone'] : 'N/A'}}</b></small>\r\n <small>Company contact: <b>{{driver['trucking_company_phone'] ? driver['trucking_company_phone'] : 'N/A'}}</b></small>\r\n </div>\r\n </div>\r\n </li>\r\n <p *ngIf=\"driverList.driver_list?.length === 0\" style=\"font-weight:700; text-align:center;\">\r\n No Driver found\r\n </p>\r\n </ul>\r\n <div class=\"smslist\" *ngIf=\"isSmsList\">\r\n <div class=\"heading\">\r\n <h2>SMS All Drivers</h2>\r\n <div class=\"closebtn\" (click)=\"isSmsList = false\">\r\n <mat-icon>clear</mat-icon>\r\n </div>\r\n </div>\r\n <div class=\"detailprt\">\r\n <app-sms-card-details-overview [jobValue]=\"driverList\"></app-sms-card-details-overview>\r\n <div class=\"form_input\">\r\n <mat-form-field class=\"example-full-width\">\r\n <textarea matInput placeholder=\"Text here...\" autocomplete=\"nope\" column=\"10\"\r\n [formControl]=\"driverMessage\"></textarea>\r\n <mat-hint>{{driverMessage.value?.length}} / 256</mat-hint>\r\n </mat-form-field>\r\n <button *ngIf=\"!messageLoader\" [disabled]=\"!driverMessage.value || driverMessage.invalid\" (click)=\"sendMessage()\">\r\n Send SMS\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"loader\">\r\n <mat-spinner *ngIf=\"messageLoader\"></mat-spinner>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".driver_iconprt{position:absolute;right:10px;top:12px;z-index:9999}.driver_iconprt img{width:25px;height:25px}.driver_list{background:white;position:fixed;width:300px;top:10px;left:360px;border-top-left-radius:20px;border-top-right-radius:20px}.driver_list .driver_headingprt{display:flex;justify-content:space-between;align-items:center;padding:0 15px}.driver_list .driver_headingprt button{background:none;border:1px solid #ccc;border-radius:10px;padding:5px 20px}.driver_list .driver_headingprt button:hover{background:#326ad3;color:#fff}.driver_list h2{font-size:20px}.driver_list .driverList{height:300px;overflow:auto}.driver_list .driverList li{display:flex;padding:10px;align-items:flex-start;cursor:pointer;border-bottom:1px solid white;background:#eee}.driver_list .driverList li img{width:35px;height:35px;border-radius:100%;margin-right:10px}.driver_list .driverList li .driver_detail{width:calc(100% - 45px);display:flex;flex-direction:column;justify-content:flex-start}.driver_list .driverList li .driver_detail b{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:135px;font-size:.9rem}.driver_list .driverList li .driver_detail span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:150px;font-size:.8rem}.driver_list:after{height:10px;background:white;border-bottom-right-radius:20px;border-bottom-left-radius:20px;content:\"\";position:absolute;bottom:-9px;width:100%}.smslist{background:white;position:absolute;width:480px;top:0;left:105%;border-radius:20px;padding-bottom:20px}.smslist .heading{display:flex;justify-content:space-between;align-items:center;padding:0 15px}.smslist .detailprt{padding:0 15px}.smslist .detailprt span{display:flex;margin-bottom:12px;font-size:.8rem;align-items:center}.smslist .detailprt span label{font-weight:600;width:37%}.smslist .detailprt .form_input{display:flex;flex-direction:column;font-size:.8rem}.smslist .detailprt .form_input button{background:#326ad3;padding:10px 18px;color:#fff;font-size:.8125rem;border-radius:30px;display:flex;align-self:flex-end}.closebtn{box-shadow:0 0 5px #0000001c;border-radius:100%;width:30px;height:30px;display:flex;justify-content:center;align-items:center;cursor:pointer;background:#f5f5f5}.show_routebtn{font-size:.9rem;margin-bottom:20px;padding:6px 11px;position:absolute;top:8px;right:10px;background-color:transparent;color:#3f51b5;border:1px solid #3f51b5;border-radius:10px;box-shadow:none}.show_routebtn:hover{background-color:#3f51b5;color:#fff}.cont_del{margin-top:10px}.cont_del small{display:block}.jobList ul{margin:0 15px 0 10px;width:100%}.jobList ul li{position:relative;background:#fbfbfb;padding:10px;border-radius:15px;margin-bottom:5px;border:1px solid #fbfbfb;border-left:3px solid #fbfbfb;cursor:pointer;height:inherit}@media (min-width: 2500px){.jobList ul li{height:7.65vh}}@media (min-width: 3300px){.jobList ul li{height:5.61vh}}.viewroute ul{margin:0 15px;width:100%}.viewroute ul li{position:relative;background:#fbfbfb;padding:7px 10px;border-radius:15px;margin-bottom:5px;border:1px solid #fbfbfb;border-left:3px solid #fbfbfb;cursor:pointer;height:16.4vh}@media (min-width: 1600px){.viewroute ul li{height:12.4vh}}.viewroute ul li.active{border:1px solid #39c471;border-left:3px solid #39c471}.loader{position:absolute;height:100%;top:0;left:0;width:100%;display:flex;align-items:center;justify-content:center;pointer-events:none}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i7.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i8.PerfectScrollbarComponent, selector: "perfect-scrollbar", inputs: ["disabled", "usePSClass", "autoPropagation", "scrollIndicators", "config"], outputs: ["psScrollY", "psScrollX", "psScrollUp", "psScrollDown", "psScrollLeft", "psScrollRight", "psYReachEnd", "psYReachStart", "psXReachEnd", "psXReachStart"], exportAs: ["ngxPerfectScrollbar"] }, { kind: "component", type: i9.ViewRouteListCardComponent, selector: "app-view-route-list-card", inputs: ["route", "emitrouteevent"] }, { kind: "component", type: i10.SmsCardDetailsOverviewComponent, selector: "app-sms-card-details-overview", inputs: ["jobValue"] }, { kind: "component", type: i11.JobCodeListCardComponent, selector: "app-job-code-list-card", inputs: ["route", "emitJobdetails", "preventCloseDetails"], outputs: ["routeSeletion", "toggleDrivermenu"] }] });
|
|
294
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RouteJobCodeListComponent, decorators: [{
|
|
295
|
-
type: Component,
|
|
296
|
-
args: [{ selector: 'app-route-jobcode-list', template: "<div class=\"scrollprt addroutelist\" [class.viewroute]=\"visiblesection('addroute')\"\
|
|
297
|
-
}], ctorParameters: function () { return [{ type: i1.CoolmapService }, { type: i1.UtilsService }]; }, propDecorators: { loader: [{
|
|
298
|
-
type: Input
|
|
299
|
-
}], type: [{
|
|
300
|
-
type: Input
|
|
301
|
-
}], data: [{
|
|
302
|
-
type: Input
|
|
303
|
-
}], currentNav: [{
|
|
304
|
-
type: Input
|
|
305
|
-
}], emitroute: [{
|
|
306
|
-
type: Output
|
|
307
|
-
}], showAllRoute: [{
|
|
308
|
-
type: Output
|
|
309
|
-
}], searchTerm: [{
|
|
310
|
-
type: Input
|
|
311
|
-
}], clearJobDetailsFromList: [{
|
|
312
|
-
type: Output
|
|
313
|
-
}], clearListSeletion: [{
|
|
314
|
-
type: Input
|
|
315
|
-
}] } });
|
|
316
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtam9iY29kZS1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nvb2xtYXAvc3JjL2xpYi9jb21wb25lbnQvcm91dGUtam9iY29kZS1saXN0L3JvdXRlLWpvYmNvZGUtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb29sbWFwL3NyYy9saWIvY29tcG9uZW50L3JvdXRlLWpvYmNvZGUtbGlzdC9yb3V0ZS1qb2Jjb2RlLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBUXpELE1BQU0sT0FBTyx5QkFBeUI7SUFvQnBDLFlBQW1CLE9BQXVCLEVBQVMsS0FBbUI7UUFBbkQsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFBUyxVQUFLLEdBQUwsS0FBSyxDQUFjO1FBbkJ0RCxXQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ2QsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUNsQixTQUFJLEdBQVksRUFBRSxDQUFDO1FBQ25CLGVBQVUsR0FBVyxFQUFFLENBQUE7UUFDdEIsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDL0IsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ25ELG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBQ2pDLGVBQVUsR0FBWSxJQUFJLENBQUMsSUFBSSxDQUFDO1FBRWhDLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBQ3ZCLGtCQUFhLEdBQUcsSUFBSSxjQUFjLENB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LENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ25FLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLFVBQVUsRUFBRTtvQkFDeEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7b0JBQzNCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxTQUFTLENBQUMsQ0FBQztpQkFDcEQ7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7b0JBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxDQUFDO2lCQUN0RDtZQUNILENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFFLElBQUcsR0FBRyxFQUFFO2dCQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFBO2FBQUMsQ0FBQSxDQUFDLENBQUMsQ0FBQTtTQUNsRDtJQUNKLENBQUM7O3NIQTlOVyx5QkFBeUI7MEdBQXpCLHlCQUF5QixnV0NWdEMscytHQWtFQTsyRkR4RGEseUJBQXlCO2tCQUxyQyxTQUFTOytCQUNFLHdCQUF3QjtnSUFLbEIsTUFBTTtzQkFBckIsS0FBSztnQkFDVSxJQUFJO3NCQUFuQixLQUFLO2dCQUNVLElBQUk7c0JBQW5CLEtBQUs7Z0JBQ1UsVUFBVTtzQkFBekIsS0FBSztnQkFDVyxTQUFTO3NCQUF6QixNQUFNO2dCQUNVLFlBQVk7c0JBQTVCLE1BQU07Z0JBR1MsVUFBVTtzQkFBekIsS0FBSztnQkFLVyx1QkFBdUI7c0JBQXZDLE1BQU07Z0JBSVMsaUJBQWlCO3NCQUFoQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENvb2xtYXBTZXJ2aWNlLCBSb3V0ZSwgVXRpbHNTZXJ2aWNlIH0gZnJvbSAnQGFnZ2RpcmVjdC9jb29sbWFwLXNlcnZpY2VzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXJvdXRlLWpvYmNvZGUtbGlzdCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3JvdXRlLWpvYmNvZGUtbGlzdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcm91dGUtam9iY29kZS1saXN0LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFJvdXRlSm9iQ29kZUxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgQElucHV0KCkgcHVibGljIGxvYWRlciA9IHRydWU7XHJcbiAgQElucHV0KCkgcHVibGljIHR5cGU6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBkYXRhOiBSb3V0ZVtdID0gW107XHJcbiAgQElucHV0KCkgcHVibGljIGN1cnJlbnROYXY6IHN0cmluZyA9ICcnXHJcbiAgQE91dHB1dCgpIHB1YmxpYyBlbWl0cm91dGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHB1YmxpYyBzaG93QWxsUm91dGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgcHJldmVudE1vdXNlb3V0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgZmlsdGVyTGlzdDogUm91dGVbXSA9IHRoaXMuZGF0YTtcclxuICBASW5wdXQoKSBwdWJsaWMgc2VhcmNoVGVybSE6IGFueTtcclxuICBpc0RyaXZlckxpc3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2VsZWN0ZWRSb3V0ZSA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxhbnk+KHRydWUsIFtdKVxyXG4gIGRyaXZlckxpc3QhOiBhbnk7XHJcbiAgcHJldmVudExpc3RTZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAT3V0cHV0KCkgcHVibGljIGNsZWFySm9iRGV0YWlsc0Zyb21MaXN0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIHByZXZlbnREZXRhaWxzQ2xvc2UgPSBmYWxzZTtcclxuICBtZXNzYWdlTG9hZGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZHJpdmVyTWVzc2FnZSA9IG5ldyBGb3JtQ29udHJvbCgnJywgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDI1NildKTtcclxuICBASW5wdXQoKSBwdWJsaWMgY2xlYXJMaXN0U2VsZXRpb246IGJvb2xlYW47XHJcbiAgaXNTbXNMaXN0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgY29uc3RydWN0b3IocHVibGljIGNvb2xNYXA6IENvb2xtYXBTZXJ2aWNlLCBwdWJsaWMgdXRpbHM6IFV0aWxzU2VydmljZSkgeyB0aGlzLmRyaXZlckxpc3QgPSBbXSB9XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnV0aWxzLmdldHByZVZlbnRKb2JkZXRhaWxjbG9zZS5zdWJzY3JpYmUocmVzID0+IHsgdGhpcy5wcmV2ZW50RGV0YWlsc0Nsb3NlID0gcmVzIH0pO1xyXG4gICAgdGhpcy51dGlscy5yZW1vdmVNYXBFbnRpdHlVdGlsaXR5LnN1YnNjcmliZSgocmVzOiBSb3V0ZSkgPT4ge3RoaXMucGFzc1JvdXRlKHJlcyl9KTtcclxuICB9XHJcbiAgcGFzc1JvdXRlKGpvYjogUm91dGUpIHtcclxuICAgIHRoaXMuZGF0YS5mb3JFYWNoKChlYWNoKSA9PiB7IGlmIChlYWNoWydyb3V0ZV9pZCddICE9PSBqb2JbJ3JvdXRlX2lkJ10pIHsgZWFjaFsnaXNBY3RpdmUnXSA9IGZhbHNlIH0gZWxzZSB7IGVhY2hbJ2lzQWN0aXZlJ10gPSB0cnVlIH0gfSk7XHJcbiAgICBpZiAodGhpcy50eXBlID09ICdhZGRyb3V0ZScpIHRoaXMuZmlsdGVyTGlzdC5mb3JFYWNoKGVsZSA9PiB0aGlzLmNvb2xNYXAuZmlsdGVyUm91dGUoZWxlWydyb3V0ZV9pZCddLCAnbm9uZScpKTtcclxuICB9XHJcbiAgc2VsZWN0Um91dGUocm91dGU6IGFueSkge1xyXG4gICAgaWYgKCF0aGlzLnByZXZlbnRMaXN0U2VsZWN0KSB7XHJcbiAgICAgIHRoaXMucHJldmVudExpc3RTZWxlY3QgPSB0cnVlO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm91dGUudG9nZ2xlKHJvdXRlKTtcclxuICAgICAgdGhpcy5jbGVhckpvYkRldGFpbHNGcm9tTGlzdC5lbWl0KHRydWUpO1xyXG4gICAgICB0aGlzLnV0aWxzLnByZVZlbnRKb2JkZXRhaWxjbG9zZS5uZXh0KGZhbHNlKTtcclxuICAgICAgdGhpcy5maWx0ZXJMaXN0LmZvckVhY2goZWxlID0+IHRoaXMuY29vbE1hcC5maWx0ZXJSb3V0ZShlbGVbJ2pvYl9pZCddLCAnbm9uZScpKTtcclxuICAgICAgdGhpcy5jbGVhckxpc3QoKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvdXRlLnNlbGVjdGVkLmZvckVhY2goKGVsZSwgaW5kZXgpID0+IHtcclxuICAgICAgICB0aGlzLmNvb2xNYXAuZmlsdGVyUm91dGUoZWxlWydqb2JfaWQnXSwgJ3Zpc2libGUnLCAoKHRoaXMuc2VsZWN0ZWRSb3V0ZS5zZWxlY3RlZC5sZW5ndGggLSAxKSA9PT0gaW5kZXgpKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMucHJldmVudExpc3RTZWxlY3QgPSBmYWxzZTtcclxuICAgICAgICB9KVxyXG4gICAgICB9KTtcclxuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkUm91dGUuc2VsZWN0ZWQubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5wcmV2ZW50TGlzdFNlbGVjdCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5kYXRhLmZvckVhY2goZWxlID0+IHRoaXMuY29vbE1hcC5maWx0ZXJSb3V0ZShlbGVbJ2pvYl9pZCddLCAndmlzaWJsZScpKTtcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcbiAgY2hlY2tyb3V0ZXMocm91dGU6IFJvdXRlKSB7XHJcbiAgICBjb25zdCBzZWxlY3RlZFJvdXRlID0gdGhpcy5zZWxlY3RlZFJvdXRlLnNlbGVjdGVkO1xyXG4gICAgdGhpcy5maWx0ZXJMaXN0ID0gdGhpcy5maWx0ZXJMaXN0Lm1hcChlbGUgPT4geyBlbGVbJ2lzU2VsZWN0ZWQnXSA9IGZhbHNlOyByZXR1cm4gZWxlIH0pXHJcbiAgICBpZiAoc2VsZWN0ZWRSb3V0ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHNlbGVjdGVkUm91dGUuZm9yRWFjaChlbGUgPT4ge1xyXG4gICAgICAgIGlmIChyb3V0ZVsnb3JkZXJfbnVtYmVyJ10gPT09IGVsZVsnb3JkZXJfbnVtYmVyJ10pIHsgZWxlWydpc1NlbGVjdGVkJ10gPSB0cnVlIH1cclxuICAgICAgfSk7XHJcbiAgICB9IHJldHVybiByb3V0ZVxyXG4gIH1cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuY3VycmVudE5hdiA9PT0gJ0FkZHJvdXRlJyAmJiAodGhpcy5kYXRhLmxlbmd0aCA8IHRoaXMuZmlsdGVyTGlzdC5sZW5ndGgpKSB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmZpbHRlckxpc3QuZmluZEluZGV4KGVsZSA9PiBlbGUuaXNBY3RpdmUpO1xyXG4gICAgICAgIGlmIChpbmRleCA+IDApIHRoaXMuZmlsdGVyTGlzdFtpbmRleF0uaXNBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmRhdGEuZm9yRWFjaCgoZWxlOiBSb3V0ZSwgaW5kZXhGb3JEYXRhOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGlkID0gKGVsZVsnam9iX2lkJ10gPyBlbGVbJ2pvYl9pZCddIDogZWxlWydyb3V0ZV9pZCddKVxyXG4gICAgICAgICAgdGhpcy5jb29sTWFwLnBsb3RSb3V0ZShlbGUsIGlkLCB0aGlzLnR5cGUsIGZhbHNlLCAoaW5kZXhGb3JEYXRhID09PSAodGhpcy5kYXRhLmxlbmd0aCAtIDEpKSkudGhlbigocmVzKSA9PiB7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSwgNTAwKTtcclxuICAgIGlmIChjaGFuZ2VzWydkYXRhJ10gJiYgY2hhbmdlc1snZGF0YSddWydjdXJyZW50VmFsdWUnXSkge1xyXG4gICAgICB0aGlzLmZpbHRlckxpc3QgPSBjaGFuZ2VzWydkYXRhJ11bJ2N1cnJlbnRWYWx1ZSddO1xyXG4gICAgICBpZiAodGhpcy5zZWFyY2hUZXJtKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoVGVybS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLnV0aWxzLmdldFNlYXJjaFJlc3VsdHMoY2hhbmdlc1snZGF0YSddWydjdXJyZW50VmFsdWUnXSwgdGhpcy5zZWFyY2hUZXJtKTtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyTGlzdCA9IHRoaXMuZGF0YTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJMaXN0ID0gY2hhbmdlc1snZGF0YSddWydjdXJyZW50VmFsdWUnXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdqb2Jjb2RlJykge1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gdHJ1ZTsgdGhpcy5jbGVhckxpc3QoKTtcclxuICAgICAgICBpZiAodGhpcy5maWx0ZXJMaXN0Lmxlbmd0aCA9PT0gMCkgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMudHlwZSAhPT0gJ2pvYmNvZGUnKSB7XHJcbiAgICAgICAgaWYgKGNoYW5nZXNbJ2RhdGEnXVsncHJldmlvdXNWYWx1ZSddICYmIHRoaXMuY3VycmVudE5hdiA9PT0gJ2FkZEZvcm0nKSB7XHJcbiAgICAgICAgICBjb25zdCBhY3RpdmVSb3V0ZSA9IGNoYW5nZXNbJ2RhdGEnXVsncHJldmlvdXNWYWx1ZSddLmZpbmQoKGVsZTogUm91dGUpID0+IGVsZS5pc0FjdGl2ZSk7XHJcbiAgICAgICAgICBpZiAoYWN0aXZlUm91dGUpIHtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJMaXN0Lm1hcCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGl0ZW0ucm91dGVfaWQgPT09IGFjdGl2ZVJvdXRlLnJvdXRlX2lkKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmlzQWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChjaGFuZ2VzWydkYXRhJ11bJ3ByZXZpb3VzVmFsdWUnXSAmJiB0aGlzLmN1cnJlbnROYXYgIT09ICdhZGRGb3JtJykge1xyXG4gICAgICAgIHRoaXMuY29vbE1hcC5yZW1vdmVKb2JGcm9tTWFwKGNoYW5nZXNbJ2RhdGEnXVsncHJldmlvdXNWYWx1ZSddKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm91dGUuY2xlYXIoKTtcclxuICAgICAgfTtcclxuICAgICAgaWYgKHRoaXMuY3VycmVudE5hdiAhPT0gJ2FkZEZvcm0nKSB7XHJcbiAgICAgICAgY2hhbmdlc1snZGF0YSddWydjdXJyZW50VmFsdWUnXS5mb3JFYWNoKChlbGU6IFJvdXRlLCBpbmRleEZvckRhdGE6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgY29uc3QgaWQgPSAoZWxlWydqb2JfaWQnXSA/IGVsZVsnam9iX2lkJ10gOiBlbGVbJ3JvdXRlX2lkJ10pXHJcbiAgICAgICAgICBpZih0aGlzLnR5cGUgPT09ICdqb2Jjb2RlJykgZWxlLm1hdGVyaWFsTGFiZWwgPSBlbGUubWF0ZXJpYWw7XHJcbiAgICAgICAgICB0aGlzLmNvb2xNYXAucGxvdFJvdXRlKGVsZSwgaWQsIHRoaXMudHlwZSwgZmFsc2UsIChpbmRleEZvckRhdGEgPT09ICh0aGlzLmRhdGEubGVuZ3RoIC0gMSkpKS50aGVuKChyZXMpID0+IHtcclxuICAgICAgICAgICAgaWYgKGluZGV4Rm9yRGF0YSA9PT0gKHRoaXMuZGF0YS5sZW5ndGggLSAxKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy51dGlscy5wcmV2ZW50bmF2Q2hhbmdlLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1snc2VhcmNoVGVybSddKSB7XHJcbiAgICAgIGlmICh0aGlzLmZpbHRlckxpc3QpIHtcclxuICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmZpbHRlckxpc3Q7XHJcbiAgICAgICAgdGhpcy5jbGVhckxpc3QoKTtcclxuICAgICAgICBpZiAoY2hhbmdlc1snc2VhcmNoVGVybSddWydjdXJyZW50VmFsdWUnXS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLmNvb2xNYXAucmVtb3ZlUm91dGVBbmRNYXJrZXIoMSk7XHJcbiAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLnV0aWxzLmdldFNlYXJjaFJlc3VsdHModGhpcy5kYXRhLCBjaGFuZ2VzWydzZWFyY2hUZXJtJ11bJ2N1cnJlbnRWYWx1ZSddKTtcclxuICAgICAgICB9IGVsc2UgeyB0aGlzLmRhdGEgPSB0aGlzLmZpbHRlckxpc3Q7IH1cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuY29vbE1hcC5jbGVhckJvdW5kV2l0aENvcmRpbmF0ZXMoKTtcclxuICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnROYXYgIT09ICdhZGRGb3JtJyAmJiAhdGhpcy5zZWxlY3RlZFJvdXRlWydzZWxlY3RlZCddLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvb2xNYXAucmVtb3ZlUm91dGVBbmRNYXJrZXIoMSk7XHJcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlRmlsdGVyUm91dGUodGhpcy5maWx0ZXJMaXN0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnROYXYgIT09ICdhZGRGb3JtJyAmJiB0aGlzLnNlbGVjdGVkUm91dGVbJ3NlbGVjdGVkJ10ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJMaXN0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJKb2JEZXRhaWxzRnJvbUxpc3QuZW1pdCh0cnVlKVxyXG4gICAgICAgICAgICB0aGlzLmNvb2xNYXAucmVtb3ZlSm9iRnJvbU1hcCh0aGlzLnNlbGVjdGVkUm91dGUuc2VsZWN0ZWQpO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmRhdGEuZm9yRWFjaCgoZWxlLCBpbmRleEZvckRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29vbE1hcC5wbG90Um91dGUoZWxlLCBlbGVbJ2pvYl9pZCddLCB0aGlzLnR5cGUsIGZhbHNlLCAoaW5kZXhGb3JEYXRhID09PSAodGhpcy5kYXRhLmxlbmd0aCAtIDEpKSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChpbmRleEZvckRhdGEgPT09ICh0aGlzLmRhdGEubGVuZ3RoIC0gMSkpIHsgdGhpcy5sb2FkZXIgPSBmYWxzZTsgdGhpcy51dGlscy5wcmV2ZW50bmF2Q2hhbmdlLm5leHQodHJ1ZSkgfVxyXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFJvdXRlWydzZWxlY3RlZCddLmxlbmd0aCAmJiB0aGlzLnNlbGVjdGVkUm91dGVbJ3NlbGVjdGVkJ11bMF1bJ2pvYl9pZCddID09PSBlbGVbJ2pvYl9pZCddKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJvdXRlLmNsZWFyKClcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSwgNTAwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgc2hvd1JvdXRlKCkge1xyXG4gICAgdGhpcy51dGlscy5wcmV2ZW50bmF2Q2hhbmdlLm5leHQoZmFsc2UpO1xyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlOyB0aGlzLmNsZWFyTGlzdCgpO1xyXG4gICAgdGhpcy5zaG93QWxsUm91dGUuZW1pdCh0cnVlKTtcclxuICAgIGlmICh0aGlzLmZpbHRlckxpc3QgJiYgdGhpcy5maWx0ZXJMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5jb29sTWFwLnJlbW92ZUpvYkZyb21NYXAodGhpcy5zZWxlY3RlZFJvdXRlLnNlbGVjdGVkKTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJMaXN0LmZvckVhY2goKGVsZSwgaW5kZXhGb3JEYXRhKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNvb2xNYXAucGxvdFJvdXRlKGVsZSwgZWxlWydqb2JfaWQnXSwgdGhpcy50eXBlLCBmYWxzZSwgKGluZGV4Rm9yRGF0YSA9PT0gdGhpcy5maWx0ZXJMaXN0Lmxlbmd0aCAtIDEpKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKGluZGV4Rm9yRGF0YSA9PT0gdGhpcy5maWx0ZXJMaXN0Lmxlbmd0aCAtIDEpIHsgdGhpcy5sb2FkZXIgPSBmYWxzZTsgdGhpcy51dGlscy5wcmV2ZW50bmF2Q2hhbmdlLm5leHQodHJ1ZSkgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFJvdXRlWydzZWxlY3RlZCddLmxlbmd0aCAmJiB0aGlzLnNlbGVjdGVkUm91dGVbJ3NlbGVjdGVkJ11bMF1bJ2pvYl9pZCddID09PSBlbGVbJ2pvYl9pZCddKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJvdXRlLmNsZWFyKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH0sIDUwMCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHRvZ2dsZURyaXZlcm1lbnUoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgbW91c2Vldm50VHlwZSA9IGV2ZW50Lm1vdXNlZXZudFR5cGU7IGxldCByb3V0ZSA9IGV2ZW50LnJvdXRlO1xyXG4gICAgY29uc3QgaXNIb3Zlck91dCA9IGV2ZW50LmlzSG92ZXJPdXQ7XHJcbiAgICBpZih0eXBlb2YobW91c2Vldm50VHlwZSkgPT09ICdzdHJpbmcnKSB7aWYodGhpcy5wcmV2ZW50TW91c2VvdXQpe3RoaXMuaXNEcml2ZXJMaXN0ID0gIXRoaXMuaXNEcml2ZXJMaXN0fTsgdGhpcy5wcmV2ZW50TW91c2VvdXQgPSB0cnVlfVxyXG4gICAgaWYgKHR5cGVvZihtb3VzZWV2bnRUeXBlKSA9PT0gJ2Jvb2xlYW4nICYmIW1vdXNlZXZudFR5cGUgJiYgIXRoaXMucHJldmVudE1vdXNlb3V0KSB7IHRoaXMuaXNEcml2ZXJMaXN0ID0gbW91c2Vldm50VHlwZSB9O1xyXG4gICAgaWYgKHR5cGVvZihtb3VzZWV2bnRUeXBlKSA9PT0gJ2Jvb2xlYW4nICYmIG1vdXNlZXZudFR5cGUgJiYgIXRoaXMucHJldmVudE1vdXNlb3V0KSB7IHRoaXMuaXNEcml2ZXJMaXN0ID0gbW91c2Vldm50VHlwZSB9O1xyXG4gICAgaWYodGhpcy5wcmV2ZW50TW91c2VvdXQgJiYgIXRoaXMuaXNEcml2ZXJMaXN0KSB0aGlzLnByZXZlbnRNb3VzZW91dCA9IGZhbHNlO1xyXG4gICAgaWYgKGlzSG92ZXJPdXQpIHtcclxuICAgICAgaWYgKHRoaXMucHJldmVudE1vdXNlb3V0KSB7XHJcbiAgICAgICAgcm91dGUgPSB0aGlzLnV0aWxzLmdldGRpY3RWYWx1ZSgnZHJpdmVyLWRldGFpbHMnKTtcclxuICAgICAgICB0aGlzLmRyaXZlckxpc3QgPSByb3V0ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMucHJldmVudE1vdXNlb3V0KSB7XHJcbiAgICAgICAgdGhpcy5kcml2ZXJMaXN0ID0gcm91dGVcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kcml2ZXJMaXN0ID0gcm91dGVcclxuICAgIH1cclxuICB9XHJcbiAgdmlzaWJsZXNlY3Rpb24odmFsdWU6IHN0cmluZykgeyBpZiAodGhpcy50eXBlID09PSB2YWx1ZSkgeyByZXR1cm4gdHJ1ZSB9IGVsc2UgcmV0dXJuIGZhbHNlIH1cclxuICB0b2dnbGVGaWx0ZXJSb3V0ZShmaWx0ZXJMaXN0OiBSb3V0ZVtdKSB7XHJcbiAgICBmaWx0ZXJMaXN0LmZvckVhY2goKGVsZSkgPT4ge1xyXG4gICAgICBjb25zdCBmaWx0ZXJJdGVtID0gKHRoaXMudHlwZSA9PT0gJ2pvYmNvZGUnKSA/ICdqb2JfaWQnIDogJ3JvdXRlX2lkJztcclxuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmRhdGEuZmluZEluZGV4KChlbGUxKSA9PiB7IHJldHVybiAoZWxlMVtgJHtmaWx0ZXJJdGVtfWBdID09PSBlbGVbYCR7ZmlsdGVySXRlbX1gXSkgfSk7XHJcbiAgICAgIGNvbnN0IGlkID0gKGVsZVsnam9iX2lkJ10gPyBlbGVbJ2pvYl9pZCddIDogZWxlWydyb3V0ZV9pZCddKTtcclxuICAgICAgaWYgKGlkICYmIGluZGV4IDwgMCkgdGhpcy5jb29sTWFwLmZpbHRlclJvdXRlKGlkLCAnbm9uZScpO1xyXG4gICAgICBpZiAoaWQgJiYgaW5kZXggPj0gMCkge1xyXG4gICAgICAgIHRoaXMuZGF0YVtpbmRleF0uaXNBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNvb2xNYXAuZmlsdGVyUm91dGUoaWQsICd2aXNpYmxlJyk7XHJcbiAgICAgICAgdGhpcy5jb29sTWFwLmV4dGVuZEJvdW5kKGVsZVsncGF0aCddLCAoaW5kZXggPT09ICh0aGlzLmRhdGEubGVuZ3RoIC0gMSkpKTtcclxuICAgICAgfTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBjbGVhckxpc3QoKSB7XHJcbiAgICB0aGlzLmlzRHJpdmVyTGlzdCA9IGZhbHNlOyB0aGlzLmRyaXZlckxpc3QgPSBudWxsOyB0aGlzLnByZXZlbnRNb3VzZW91dCA9IGZhbHNlOyB0aGlzLmlzU21zTGlzdCA9IGZhbHNlO1xyXG4gIH1cclxuICBzZW5kTWVzc2FnZSgpIHtcclxuICAgIHRoaXMubWVzc2FnZUxvYWRlciA9IHRydWVcclxuICAgIGlmICh0aGlzLmRyaXZlck1lc3NhZ2UudmFsaWQpIHtcclxuICAgICAgY29uc3QgZGF0YSA9IHtcclxuICAgICAgICBvcmRlcl9udW1iZXI6IHRoaXMuZHJpdmVyTGlzdFsnb3JkZXJfbnVtYmVyJ10sXHJcbiAgICAgICAgZGF0ZTogdGhpcy5kcml2ZXJMaXN0WydkYXRlJ10sXHJcbiAgICAgICAgbWVzc2FnZTogdGhpcy5kcml2ZXJNZXNzYWdlLnZhbHVlLFxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudXRpbHMucG9zdGRhdGEoJ2pvYnNfcmVwb3J0X2NoYXQnLCBkYXRhKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc1snZGF0YSddWydzdGF0dXMnXSA9PT0gJ1N1Y2Nlc3MuJykge1xyXG4gICAgICAgICAgdGhpcy5tZXNzYWdlTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmRyaXZlck1lc3NhZ2UucmVzZXQoKTtcclxuICAgICAgICAgIHRoaXMudXRpbHMub3BlblNuYWNrQmFyKCdNZXNzYWdlIFNlbnQnLCAnc3VjY2VzcycpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudXRpbHMub3BlblNuYWNrQmFyKCdNZXNzYWdlIG5vdCBzZW50JywgJ2Vycm9yJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCBlcnIgPT4ge2lmKGVycikge3RoaXMubWVzc2FnZUxvYWRlciA9IGZhbHNlfX0pXHJcbiAgICB9XHJcbiB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInNjcm9sbHBydCBhZGRyb3V0ZWxpc3RcIiBbY2xhc3Mudmlld3JvdXRlXT1cInZpc2libGVzZWN0aW9uKCdhZGRyb3V0ZScpXCJcclxuICBbY2xhc3Muam9iTGlzdF09XCJ2aXNpYmxlc2VjdGlvbignam9iY29kZScpXCI+XHJcbiAgPGJ1dHRvbiAoY2xpY2spPVwic2hvd1JvdXRlKClcIiBbZGlzYWJsZWRdPVwibG9hZGVyXCIgKm5nSWY9XCJzZWxlY3RlZFJvdXRlLnNlbGVjdGVkLmxlbmd0aFwiIGNsYXNzPVwic2hvd19yb3V0ZWJ0blwiPlNob3cgYWxsXHJcbiAgICByb3V0ZTwvYnV0dG9uPlxyXG4gIDxwZXJmZWN0LXNjcm9sbGJhciBbY2xhc3Muam9ic2Nyb2xsXT1cInZpc2libGVzZWN0aW9uKCdqb2Jjb2RlJylcIj5cclxuICAgIDxtYXQtc3Bpbm5lciAqbmdJZj1cImxvYWRlclwiPjwvbWF0LXNwaW5uZXI+XHJcbiAgICA8dWwgKm5nSWY9XCIhbG9hZGVyICYmIGRhdGEubGVuZ3RoID4gMFwiPlxyXG4gICAgICA8bGkgW2NsYXNzLmFjdGl2ZV09XCJyb3V0ZVsnaXNBY3RpdmUnXSAmJiB2aXNpYmxlc2VjdGlvbignYWRkcm91dGUnKVwiICpuZ0Zvcj1cImxldCByb3V0ZSBvZiBkYXRhXCI+XHJcbiAgICAgICAgPGFwcC1qb2ItY29kZS1saXN0LWNhcmQgKm5nSWY9XCJ2aXNpYmxlc2VjdGlvbignam9iY29kZScpXCIgKHRvZ2dsZURyaXZlcm1lbnUpPVwidG9nZ2xlRHJpdmVybWVudSgkZXZlbnQpXCJcclxuICAgICAgICAgIChyb3V0ZVNlbGV0aW9uKT1cInNlbGVjdFJvdXRlKCRldmVudClcIiBbcHJldmVudENsb3NlRGV0YWlsc109XCJwcmV2ZW50RGV0YWlsc0Nsb3NlXCIgW2VtaXRKb2JkZXRhaWxzXT1cIntlbWl0cm91dGUsIGNsZWFySm9iRGV0YWlsc0Zyb21MaXN0fVwiIFtyb3V0ZV09XCJjaGVja3JvdXRlcyhyb3V0ZSlcIj48L2FwcC1qb2ItY29kZS1saXN0LWNhcmQ+XHJcbiAgICAgICAgPGFwcC12aWV3LXJvdXRlLWxpc3QtY2FyZCBbZW1pdHJvdXRlZXZlbnRdPVwiZW1pdHJvdXRlXCIgKm5nSWY9XCJ2aXNpYmxlc2VjdGlvbignYWRkcm91dGUnKVwiXHJcbiAgICAgICAgICBbcm91dGVdPVwicm91dGVcIj48L2FwcC12aWV3LXJvdXRlLWxpc3QtY2FyZD5cclxuICAgICAgPC9saT5cclxuICAgIDwvdWw+XHJcbiAgICA8cCAqbmdJZj1cIiFsb2FkZXIgJiYgZGF0YS5sZW5ndGggPT09IDBcIj57e3Zpc2libGVzZWN0aW9uKCdhZGRyb3V0ZScpID8gJ05vIFJvdXRlIGZvdW5kJyA6ICdObyBKb2IgY29kZSBmb3VuZC4nfX08L3A+XHJcbiAgPC9wZXJmZWN0LXNjcm9sbGJhcj5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwiZHJpdmVyX2xpc3RcIiAqbmdJZj1cImlzRHJpdmVyTGlzdFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJkcml2ZXJfaGVhZGluZ3BydFwiPlxyXG4gICAgPGgyPkRyaXZlciBMaXN0PC9oMj5cclxuICAgIDxidXR0b24gKm5nSWY9XCJkcml2ZXJMaXN0LmRyaXZlcl9saXN0Py5sZW5ndGggPiAwXCIgKGNsaWNrKT1cImlzU21zTGlzdCA9IHRydWVcIj5TTVM8L2J1dHRvbj5cclxuICAgIDxkaXYgY2xhc3M9XCJjbG9zZWJ0blwiIChjbGljayk9XCJpc0RyaXZlckxpc3QgPSBmYWxzZTsgcHJldmVudE1vdXNlb3V0ID0gZmFsc2U7IGlzU21zTGlzdCA9IGZhbHNlXCI+XHJcbiAgICAgIDxtYXQtaWNvbj5jbGVhcjwvbWF0LWljb24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8dWwgY2xhc3M9XCJkcml2ZXJMaXN0XCIgKm5nSWY9XCJkcml2ZXJMaXN0ICYmIGRyaXZlckxpc3QuZHJpdmVyX2xpc3RcIj5cclxuICAgIDxsaSAqbmdGb3I9XCJsZXQgZHJpdmVyIG9mIGRyaXZlckxpc3Q/LmRyaXZlcl9saXN0XCI+XHJcbiAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ltYWdlcy9kcml2ZXJfaWNvbi5wbmdcIiBbYWx0XT1cImRyaXZlclsnZHJpdmVyX25hbWUnXVwiIC8+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkcml2ZXJfZGV0YWlsXCI+XHJcbiAgICAgICAgPGI+e3tkcml2ZXJbJ2RyaXZlcl9uYW1lJ119fTwvYj4gPHNwYW4+e3tkcml2ZXJbJ3RydWNraW5nX2NvbXBhbnknXX19PC9zcGFuPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250X2RlbFwiPlxyXG4gICAgICAgICAgPHNtYWxsPkRyaXZlciBjb250YWN0OiA8Yj57e2RyaXZlclsnZHJpdmVyX3Bob25lJ10gPyBkcml2ZXJbJ2RyaXZlcl9waG9uZSddIDogJ04vQSd9fTwvYj48L3NtYWxsPlxyXG4gICAgICAgICAgPHNtYWxsPkNvbXBhbnkgY29udGFjdDogPGI+e3tkcml2ZXJbJ3RydWNraW5nX2NvbXBhbnlfcGhvbmUnXSA/IGRyaXZlclsndHJ1Y2tpbmdfY29tcGFueV9waG9uZSddIDogJ04vQSd9fTwvYj48L3NtYWxsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbGk+XHJcbiAgICA8cCAqbmdJZj1cImRyaXZlckxpc3QuZHJpdmVyX2xpc3Q/Lmxlbmd0aCA9PT0gMFwiIHN0eWxlPVwiZm9udC13ZWlnaHQ6NzAwOyB0ZXh0LWFsaWduOmNlbnRlcjtcIj5cclxuICAgICAgTm8gRHJpdmVyIGZvdW5kXHJcbiAgICA8L3A+XHJcbiAgPC91bD5cclxuICA8ZGl2IGNsYXNzPVwic21zbGlzdFwiICpuZ0lmPVwiaXNTbXNMaXN0XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaGVhZGluZ1wiPlxyXG4gICAgICA8aDI+U01TIEFsbCBEcml2ZXJzPC9oMj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNsb3NlYnRuXCIgKGNsaWNrKT1cImlzU21zTGlzdCA9IGZhbHNlXCI+XHJcbiAgICAgICAgPG1hdC1pY29uPmNsZWFyPC9tYXQtaWNvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxwcnRcIj5cclxuICAgICAgPGFwcC1zbXMtY2FyZC1kZXRhaWxzLW92ZXJ2aWV3IFtqb2JWYWx1ZV09XCJkcml2ZXJMaXN0XCI+PC9hcHAtc21zLWNhcmQtZGV0YWlscy1vdmVydmlldz5cclxuICAgICAgPGRpdiBjbGFzcz1cImZvcm1faW5wdXRcIj5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJleGFtcGxlLWZ1bGwtd2lkdGhcIj5cclxuICAgICAgICAgIDx0ZXh0YXJlYSBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIlRleHQgaGVyZS4uLlwiIGF1dG9jb21wbGV0ZT1cIm5vcGVcIiBjb2x1bW49XCIxMFwiXHJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJkcml2ZXJNZXNzYWdlXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgIDxtYXQtaGludD57e2RyaXZlck1lc3NhZ2UudmFsdWU/Lmxlbmd0aH19IC8gMjU2PC9tYXQtaGludD5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCIhbWVzc2FnZUxvYWRlclwiIFtkaXNhYmxlZF09XCIhZHJpdmVyTWVzc2FnZS52YWx1ZSB8fCBkcml2ZXJNZXNzYWdlLmludmFsaWRcIiAoY2xpY2spPVwic2VuZE1lc3NhZ2UoKVwiPlxyXG4gICAgICAgICAgU2VuZCBTTVNcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJsb2FkZXJcIj5cclxuICAgICAgPG1hdC1zcGlubmVyICpuZ0lmPVwibWVzc2FnZUxvYWRlclwiPjwvbWF0LXNwaW5uZXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import { SelectionModel } from '@angular/cdk/collections';
|
|
3
|
+
import { FormControl, Validators } from '@angular/forms';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@aggdirect/coolmap-services";
|
|
6
|
+
import * as i2 from "@angular/common";
|
|
7
|
+
import * as i3 from "@angular/forms";
|
|
8
|
+
import * as i4 from "@angular/material/form-field";
|
|
9
|
+
import * as i5 from "@angular/material/input";
|
|
10
|
+
import * as i6 from "@angular/material/icon";
|
|
11
|
+
import * as i7 from "@angular/material/progress-spinner";
|
|
12
|
+
import * as i8 from "ngx-perfect-scrollbar";
|
|
13
|
+
import * as i9 from "./view-route-list-card/view-route-list-card.component";
|
|
14
|
+
import * as i10 from "./sms-card-details-overview/sms-card-details-overview.component";
|
|
15
|
+
import * as i11 from "./job-code-list-card/job-code-list-card.component";
|
|
16
|
+
export class RouteJobCodeListComponent {
|
|
17
|
+
constructor(coolMap, utils) {
|
|
18
|
+
this.coolMap = coolMap;
|
|
19
|
+
this.utils = utils;
|
|
20
|
+
this.loader = true;
|
|
21
|
+
this.type = '';
|
|
22
|
+
this.data = [];
|
|
23
|
+
this.currentNav = '';
|
|
24
|
+
this.emitroute = new EventEmitter();
|
|
25
|
+
this.showAllRoute = new EventEmitter();
|
|
26
|
+
this.preventMouseout = false;
|
|
27
|
+
this.filterList = this.data;
|
|
28
|
+
this.isDriverList = false;
|
|
29
|
+
this.selectedRoute = new SelectionModel(true, []);
|
|
30
|
+
this.preventListSelect = false;
|
|
31
|
+
this.clearJobDetailsFromList = new EventEmitter();
|
|
32
|
+
this.preventDetailsClose = false;
|
|
33
|
+
this.messageLoader = false;
|
|
34
|
+
this.driverMessage = new FormControl('', [Validators.maxLength(256)]);
|
|
35
|
+
this.isSmsList = false;
|
|
36
|
+
this.driverList = [];
|
|
37
|
+
}
|
|
38
|
+
ngOnInit() {
|
|
39
|
+
this.utils.getpreVentJobdetailclose.subscribe(res => { this.preventDetailsClose = res; });
|
|
40
|
+
this.utils.removeMapEntityUtility.subscribe((res) => { this.passRoute(res); });
|
|
41
|
+
}
|
|
42
|
+
passRoute(job) {
|
|
43
|
+
this.data.forEach((each) => { if (each['route_id'] !== job['route_id']) {
|
|
44
|
+
each['isActive'] = false;
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
each['isActive'] = true;
|
|
48
|
+
} });
|
|
49
|
+
if (this.type == 'addroute')
|
|
50
|
+
this.filterList.forEach(ele => this.coolMap.filterRoute(ele['route_id'], 'none'));
|
|
51
|
+
}
|
|
52
|
+
selectRoute(route) {
|
|
53
|
+
if (!this.preventListSelect) {
|
|
54
|
+
this.preventListSelect = true;
|
|
55
|
+
this.selectedRoute.toggle(route);
|
|
56
|
+
this.clearJobDetailsFromList.emit(true);
|
|
57
|
+
this.utils.preVentJobdetailclose.next(false);
|
|
58
|
+
this.filterList.forEach(ele => this.coolMap.filterRoute(ele['job_id'], 'none'));
|
|
59
|
+
this.clearList();
|
|
60
|
+
this.selectedRoute.selected.forEach((ele, index) => {
|
|
61
|
+
this.coolMap.filterRoute(ele['job_id'], 'visible', ((this.selectedRoute.selected.length - 1) === index)).then(() => {
|
|
62
|
+
this.preventListSelect = false;
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
if (!this.selectedRoute.selected.length) {
|
|
66
|
+
this.preventListSelect = false;
|
|
67
|
+
this.data.forEach(ele => this.coolMap.filterRoute(ele['job_id'], 'visible'));
|
|
68
|
+
}
|
|
69
|
+
;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
checkroutes(route) {
|
|
73
|
+
const selectedRoute = this.selectedRoute.selected;
|
|
74
|
+
this.filterList = this.filterList.map(ele => { ele['isSelected'] = false; return ele; });
|
|
75
|
+
if (selectedRoute.length > 0) {
|
|
76
|
+
selectedRoute.forEach(ele => {
|
|
77
|
+
if (route['order_number'] === ele['order_number']) {
|
|
78
|
+
ele['isSelected'] = true;
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
return route;
|
|
83
|
+
}
|
|
84
|
+
ngOnChanges(changes) {
|
|
85
|
+
setTimeout(() => {
|
|
86
|
+
if (this.currentNav === 'Addroute' && (this.data.length < this.filterList.length)) {
|
|
87
|
+
const index = this.filterList.findIndex(ele => ele.isActive);
|
|
88
|
+
if (index > 0)
|
|
89
|
+
this.filterList[index].isActive = false;
|
|
90
|
+
this.data.forEach((ele, indexForData) => {
|
|
91
|
+
const id = (ele['job_id'] ? ele['job_id'] : ele['route_id']);
|
|
92
|
+
this.coolMap.plotRoute(ele, id, this.type, false, (indexForData === (this.data.length - 1))).then((res) => {
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
}, 500);
|
|
97
|
+
if (changes['data'] && changes['data']['currentValue']) {
|
|
98
|
+
this.filterList = changes['data']['currentValue'];
|
|
99
|
+
if (this.searchTerm) {
|
|
100
|
+
if (this.searchTerm.length > 0) {
|
|
101
|
+
this.data = this.utils.getSearchResults(changes['data']['currentValue'], this.searchTerm);
|
|
102
|
+
this.filterList = this.data;
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
this.filterList = changes['data']['currentValue'];
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (this.type === 'jobcode') {
|
|
109
|
+
this.loader = true;
|
|
110
|
+
this.clearList();
|
|
111
|
+
if (this.filterList.length === 0)
|
|
112
|
+
this.loader = false;
|
|
113
|
+
}
|
|
114
|
+
if (this.type !== 'jobcode') {
|
|
115
|
+
if (changes['data']['previousValue'] && this.currentNav === 'addForm') {
|
|
116
|
+
const activeRoute = changes['data']['previousValue'].find((ele) => ele.isActive);
|
|
117
|
+
if (activeRoute) {
|
|
118
|
+
this.filterList.map((item) => {
|
|
119
|
+
if (item.route_id === activeRoute.route_id) {
|
|
120
|
+
item.isActive = true;
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
if (changes['data']['previousValue'] && this.currentNav !== 'addForm') {
|
|
127
|
+
this.coolMap.removeJobFromMap(changes['data']['previousValue']);
|
|
128
|
+
this.selectedRoute.clear();
|
|
129
|
+
}
|
|
130
|
+
;
|
|
131
|
+
if (this.currentNav !== 'addForm') {
|
|
132
|
+
changes['data']['currentValue'].forEach((ele, indexForData) => {
|
|
133
|
+
const id = (ele['job_id'] ? ele['job_id'] : ele['route_id']);
|
|
134
|
+
if (this.type === 'jobcode')
|
|
135
|
+
ele.materialLabel = ele.material;
|
|
136
|
+
this.coolMap.plotRoute(ele, id, this.type, false, (indexForData === (this.data.length - 1))).then((res) => {
|
|
137
|
+
if (indexForData === (this.data.length - 1)) {
|
|
138
|
+
this.loader = false;
|
|
139
|
+
this.utils.preventnavChange.next(true);
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
if (changes['searchTerm']) {
|
|
146
|
+
if (this.filterList) {
|
|
147
|
+
this.data = this.filterList;
|
|
148
|
+
this.clearList();
|
|
149
|
+
if (changes['searchTerm']['currentValue'].length > 0) {
|
|
150
|
+
this.coolMap.removeRouteAndMarker(1);
|
|
151
|
+
this.data = this.utils.getSearchResults(this.data, changes['searchTerm']['currentValue']);
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
this.data = this.filterList;
|
|
155
|
+
}
|
|
156
|
+
setTimeout(() => {
|
|
157
|
+
this.coolMap.clearBoundWithCordinates();
|
|
158
|
+
if (this.currentNav !== 'addForm' && !this.selectedRoute['selected'].length) {
|
|
159
|
+
this.coolMap.removeRouteAndMarker(1);
|
|
160
|
+
this.toggleFilterRoute(this.filterList);
|
|
161
|
+
}
|
|
162
|
+
}, 500);
|
|
163
|
+
if (this.currentNav !== 'addForm' && this.selectedRoute['selected'].length) {
|
|
164
|
+
if (this.data && this.data.length > 0) {
|
|
165
|
+
this.clearList();
|
|
166
|
+
this.clearJobDetailsFromList.emit(true);
|
|
167
|
+
this.coolMap.removeJobFromMap(this.selectedRoute.selected);
|
|
168
|
+
setTimeout(() => {
|
|
169
|
+
this.data.forEach((ele, indexForData) => {
|
|
170
|
+
this.coolMap.plotRoute(ele, ele['job_id'], this.type, false, (indexForData === (this.data.length - 1))).then(() => {
|
|
171
|
+
if (indexForData === (this.data.length - 1)) {
|
|
172
|
+
this.loader = false;
|
|
173
|
+
this.utils.preventnavChange.next(true);
|
|
174
|
+
}
|
|
175
|
+
if (this.selectedRoute['selected'].length && this.selectedRoute['selected'][0]['job_id'] === ele['job_id']) {
|
|
176
|
+
this.selectedRoute.clear();
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
}, 500);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
showRoute() {
|
|
187
|
+
this.utils.preventnavChange.next(false);
|
|
188
|
+
this.loader = true;
|
|
189
|
+
this.clearList();
|
|
190
|
+
this.showAllRoute.emit(true);
|
|
191
|
+
if (this.filterList && this.filterList.length > 0) {
|
|
192
|
+
this.coolMap.removeJobFromMap(this.selectedRoute.selected);
|
|
193
|
+
setTimeout(() => {
|
|
194
|
+
this.filterList.forEach((ele, indexForData) => {
|
|
195
|
+
this.coolMap.plotRoute(ele, ele['job_id'], this.type, false, (indexForData === this.filterList.length - 1)).then(() => {
|
|
196
|
+
if (indexForData === this.filterList.length - 1) {
|
|
197
|
+
this.loader = false;
|
|
198
|
+
this.utils.preventnavChange.next(true);
|
|
199
|
+
}
|
|
200
|
+
if (this.selectedRoute['selected'].length && this.selectedRoute['selected'][0]['job_id'] === ele['job_id']) {
|
|
201
|
+
this.selectedRoute.clear();
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
});
|
|
205
|
+
}, 500);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
toggleDrivermenu(event) {
|
|
209
|
+
const mouseevntType = event.mouseevntType;
|
|
210
|
+
let route = event.route;
|
|
211
|
+
const isHoverOut = event.isHoverOut;
|
|
212
|
+
if (typeof (mouseevntType) === 'string') {
|
|
213
|
+
if (this.preventMouseout) {
|
|
214
|
+
this.isDriverList = !this.isDriverList;
|
|
215
|
+
}
|
|
216
|
+
;
|
|
217
|
+
this.preventMouseout = true;
|
|
218
|
+
}
|
|
219
|
+
if (typeof (mouseevntType) === 'boolean' && !mouseevntType && !this.preventMouseout) {
|
|
220
|
+
this.isDriverList = mouseevntType;
|
|
221
|
+
}
|
|
222
|
+
;
|
|
223
|
+
if (typeof (mouseevntType) === 'boolean' && mouseevntType && !this.preventMouseout) {
|
|
224
|
+
this.isDriverList = mouseevntType;
|
|
225
|
+
}
|
|
226
|
+
;
|
|
227
|
+
if (this.preventMouseout && !this.isDriverList)
|
|
228
|
+
this.preventMouseout = false;
|
|
229
|
+
if (isHoverOut) {
|
|
230
|
+
if (this.preventMouseout) {
|
|
231
|
+
route = this.utils.getdictValue('driver-details');
|
|
232
|
+
this.driverList = route;
|
|
233
|
+
}
|
|
234
|
+
if (!this.preventMouseout) {
|
|
235
|
+
this.driverList = route;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
this.driverList = route;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
visiblesection(value) { if (this.type === value) {
|
|
243
|
+
return true;
|
|
244
|
+
}
|
|
245
|
+
else
|
|
246
|
+
return false; }
|
|
247
|
+
toggleFilterRoute(filterList) {
|
|
248
|
+
filterList.forEach((ele) => {
|
|
249
|
+
const filterItem = (this.type === 'jobcode') ? 'job_id' : 'route_id';
|
|
250
|
+
const index = this.data.findIndex((ele1) => { return (ele1[`${filterItem}`] === ele[`${filterItem}`]); });
|
|
251
|
+
const id = (ele['job_id'] ? ele['job_id'] : ele['route_id']);
|
|
252
|
+
if (id && index < 0)
|
|
253
|
+
this.coolMap.filterRoute(id, 'none');
|
|
254
|
+
if (id && index >= 0) {
|
|
255
|
+
this.data[index].isActive = false;
|
|
256
|
+
this.coolMap.filterRoute(id, 'visible');
|
|
257
|
+
this.coolMap.extendBound(ele['path'], (index === (this.data.length - 1)));
|
|
258
|
+
}
|
|
259
|
+
;
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
clearList() {
|
|
263
|
+
this.isDriverList = false;
|
|
264
|
+
this.driverList = null;
|
|
265
|
+
this.preventMouseout = false;
|
|
266
|
+
this.isSmsList = false;
|
|
267
|
+
}
|
|
268
|
+
sendMessage() {
|
|
269
|
+
this.messageLoader = true;
|
|
270
|
+
if (this.driverMessage.valid) {
|
|
271
|
+
const data = {
|
|
272
|
+
order_number: this.driverList['order_number'],
|
|
273
|
+
date: this.driverList['date'],
|
|
274
|
+
message: this.driverMessage.value,
|
|
275
|
+
};
|
|
276
|
+
this.utils.postdata('jobs_report_chat', data).subscribe((res) => {
|
|
277
|
+
if (res['data']['status'] === 'Success.') {
|
|
278
|
+
this.messageLoader = false;
|
|
279
|
+
this.driverMessage.reset();
|
|
280
|
+
this.utils.openSnackBar('Message Sent', 'success');
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
this.messageLoader = false;
|
|
284
|
+
this.utils.openSnackBar('Message not sent', 'error');
|
|
285
|
+
}
|
|
286
|
+
}, err => { if (err) {
|
|
287
|
+
this.messageLoader = false;
|
|
288
|
+
} });
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
RouteJobCodeListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RouteJobCodeListComponent, deps: [{ token: i1.CoolmapService }, { token: i1.UtilsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
293
|
+
RouteJobCodeListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: RouteJobCodeListComponent, selector: "app-route-jobcode-list", inputs: { loader: "loader", type: "type", data: "data", currentNav: "currentNav", searchTerm: "searchTerm", clearListSeletion: "clearListSeletion" }, outputs: { emitroute: "emitroute", showAllRoute: "showAllRoute", clearJobDetailsFromList: "clearJobDetailsFromList" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"scrollprt addroutelist\" [class.viewroute]=\"visiblesection('addroute')\"\n [class.jobList]=\"visiblesection('jobcode')\">\n <button (click)=\"showRoute()\" [disabled]=\"loader\" *ngIf=\"selectedRoute.selected.length\" class=\"show_routebtn\">Show all\n route</button>\n <perfect-scrollbar [class.jobscroll]=\"visiblesection('jobcode')\">\n <mat-spinner *ngIf=\"loader\"></mat-spinner>\n <ul *ngIf=\"!loader && data.length > 0\">\n <li [class.active]=\"route['isActive'] && visiblesection('addroute')\" *ngFor=\"let route of data\">\n <app-job-code-list-card *ngIf=\"visiblesection('jobcode')\" (toggleDrivermenu)=\"toggleDrivermenu($event)\"\n (routeSeletion)=\"selectRoute($event)\" [preventCloseDetails]=\"preventDetailsClose\" [emitJobdetails]=\"{emitroute, clearJobDetailsFromList}\" [route]=\"checkroutes(route)\"></app-job-code-list-card>\n <app-view-route-list-card [emitrouteevent]=\"emitroute\" *ngIf=\"visiblesection('addroute')\"\n [route]=\"route\"></app-view-route-list-card>\n </li>\n </ul>\n <p *ngIf=\"!loader && data.length === 0\">{{visiblesection('addroute') ? 'No Route found' : 'No Job code found.'}}</p>\n </perfect-scrollbar>\n</div>\n\n<div class=\"driver_list\" *ngIf=\"isDriverList\">\n <div class=\"driver_headingprt\">\n <h2>Driver List</h2>\n <button *ngIf=\"driverList.driver_list?.length > 0\" (click)=\"isSmsList = true\">SMS</button>\n <div class=\"closebtn\" (click)=\"isDriverList = false; preventMouseout = false; isSmsList = false\">\n <mat-icon>clear</mat-icon>\n </div>\n </div>\n <ul class=\"driverList\" *ngIf=\"driverList && driverList.driver_list\">\n <li *ngFor=\"let driver of driverList?.driver_list\">\n <img src=\"assets/images/driver_icon.png\" [alt]=\"driver['driver_name']\" />\n <div class=\"driver_detail\">\n <b>{{driver['driver_name']}}</b> <span>{{driver['trucking_company']}}</span>\n <div class=\"cont_del\">\n <small>Driver contact: <b>{{driver['driver_phone'] ? driver['driver_phone'] : 'N/A'}}</b></small>\n <small>Company contact: <b>{{driver['trucking_company_phone'] ? driver['trucking_company_phone'] : 'N/A'}}</b></small>\n </div>\n </div>\n </li>\n <p *ngIf=\"driverList.driver_list?.length === 0\" style=\"font-weight:700; text-align:center;\">\n No Driver found\n </p>\n </ul>\n <div class=\"smslist\" *ngIf=\"isSmsList\">\n <div class=\"heading\">\n <h2>SMS All Drivers</h2>\n <div class=\"closebtn\" (click)=\"isSmsList = false\">\n <mat-icon>clear</mat-icon>\n </div>\n </div>\n <div class=\"detailprt\">\n <app-sms-card-details-overview [jobValue]=\"driverList\"></app-sms-card-details-overview>\n <div class=\"form_input\">\n <mat-form-field class=\"example-full-width\">\n <textarea matInput placeholder=\"Text here...\" autocomplete=\"nope\" column=\"10\"\n [formControl]=\"driverMessage\"></textarea>\n <mat-hint>{{driverMessage.value?.length}} / 256</mat-hint>\n </mat-form-field>\n <button *ngIf=\"!messageLoader\" [disabled]=\"!driverMessage.value || driverMessage.invalid\" (click)=\"sendMessage()\">\n Send SMS\n </button>\n </div>\n </div>\n <div class=\"loader\">\n <mat-spinner *ngIf=\"messageLoader\"></mat-spinner>\n </div>\n </div>\n</div>\n", styles: [".driver_iconprt{position:absolute;right:10px;top:12px;z-index:9999}.driver_iconprt img{width:25px;height:25px}.driver_list{background:white;position:fixed;width:300px;top:10px;left:360px;border-top-left-radius:20px;border-top-right-radius:20px}.driver_list .driver_headingprt{display:flex;justify-content:space-between;align-items:center;padding:0 15px}.driver_list .driver_headingprt button{background:none;border:1px solid #ccc;border-radius:10px;padding:5px 20px}.driver_list .driver_headingprt button:hover{background:#326ad3;color:#fff}.driver_list h2{font-size:20px}.driver_list .driverList{height:300px;overflow:auto}.driver_list .driverList li{display:flex;padding:10px;align-items:flex-start;cursor:pointer;border-bottom:1px solid white;background:#eee}.driver_list .driverList li img{width:35px;height:35px;border-radius:100%;margin-right:10px}.driver_list .driverList li .driver_detail{width:calc(100% - 45px);display:flex;flex-direction:column;justify-content:flex-start}.driver_list .driverList li .driver_detail b{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:135px;font-size:.9rem}.driver_list .driverList li .driver_detail span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:150px;font-size:.8rem}.driver_list:after{height:10px;background:white;border-bottom-right-radius:20px;border-bottom-left-radius:20px;content:\"\";position:absolute;bottom:-9px;width:100%}.smslist{background:white;position:absolute;width:480px;top:0;left:105%;border-radius:20px;padding-bottom:20px}.smslist .heading{display:flex;justify-content:space-between;align-items:center;padding:0 15px}.smslist .detailprt{padding:0 15px}.smslist .detailprt span{display:flex;margin-bottom:12px;font-size:.8rem;align-items:center}.smslist .detailprt span label{font-weight:600;width:37%}.smslist .detailprt .form_input{display:flex;flex-direction:column;font-size:.8rem}.smslist .detailprt .form_input button{background:#326ad3;padding:10px 18px;color:#fff;font-size:.8125rem;border-radius:30px;display:flex;align-self:flex-end}.closebtn{box-shadow:0 0 5px #0000001c;border-radius:100%;width:30px;height:30px;display:flex;justify-content:center;align-items:center;cursor:pointer;background:#f5f5f5}.show_routebtn{font-size:.9rem;margin-bottom:20px;padding:6px 11px;position:absolute;top:8px;right:10px;background-color:transparent;color:#3f51b5;border:1px solid #3f51b5;border-radius:10px;box-shadow:none}.show_routebtn:hover{background-color:#3f51b5;color:#fff}.cont_del{margin-top:10px}.cont_del small{display:block}.jobList ul{margin:0 15px 0 10px;width:100%}.jobList ul li{position:relative;background:#fbfbfb;padding:10px;border-radius:15px;margin-bottom:5px;border:1px solid #fbfbfb;border-left:3px solid #fbfbfb;cursor:pointer;height:inherit}@media (min-width: 2500px){.jobList ul li{height:7.65vh}}@media (min-width: 3300px){.jobList ul li{height:5.61vh}}.viewroute ul{margin:0 15px;width:100%}.viewroute ul li{position:relative;background:#fbfbfb;padding:7px 10px;border-radius:15px;margin-bottom:5px;border:1px solid #fbfbfb;border-left:3px solid #fbfbfb;cursor:pointer;height:16.4vh}@media (min-width: 1600px){.viewroute ul li{height:12.4vh}}.viewroute ul li.active{border:1px solid #39c471;border-left:3px solid #39c471}.loader{position:absolute;height:100%;top:0;left:0;width:100%;display:flex;align-items:center;justify-content:center;pointer-events:none}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i7.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i8.PerfectScrollbarComponent, selector: "perfect-scrollbar", inputs: ["disabled", "usePSClass", "autoPropagation", "scrollIndicators", "config"], outputs: ["psScrollY", "psScrollX", "psScrollUp", "psScrollDown", "psScrollLeft", "psScrollRight", "psYReachEnd", "psYReachStart", "psXReachEnd", "psXReachStart"], exportAs: ["ngxPerfectScrollbar"] }, { kind: "component", type: i9.ViewRouteListCardComponent, selector: "app-view-route-list-card", inputs: ["route", "emitrouteevent"] }, { kind: "component", type: i10.SmsCardDetailsOverviewComponent, selector: "app-sms-card-details-overview", inputs: ["jobValue"] }, { kind: "component", type: i11.JobCodeListCardComponent, selector: "app-job-code-list-card", inputs: ["route", "emitJobdetails", "preventCloseDetails"], outputs: ["routeSeletion", "toggleDrivermenu"] }] });
|
|
294
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RouteJobCodeListComponent, decorators: [{
|
|
295
|
+
type: Component,
|
|
296
|
+
args: [{ selector: 'app-route-jobcode-list', template: "<div class=\"scrollprt addroutelist\" [class.viewroute]=\"visiblesection('addroute')\"\n [class.jobList]=\"visiblesection('jobcode')\">\n <button (click)=\"showRoute()\" [disabled]=\"loader\" *ngIf=\"selectedRoute.selected.length\" class=\"show_routebtn\">Show all\n route</button>\n <perfect-scrollbar [class.jobscroll]=\"visiblesection('jobcode')\">\n <mat-spinner *ngIf=\"loader\"></mat-spinner>\n <ul *ngIf=\"!loader && data.length > 0\">\n <li [class.active]=\"route['isActive'] && visiblesection('addroute')\" *ngFor=\"let route of data\">\n <app-job-code-list-card *ngIf=\"visiblesection('jobcode')\" (toggleDrivermenu)=\"toggleDrivermenu($event)\"\n (routeSeletion)=\"selectRoute($event)\" [preventCloseDetails]=\"preventDetailsClose\" [emitJobdetails]=\"{emitroute, clearJobDetailsFromList}\" [route]=\"checkroutes(route)\"></app-job-code-list-card>\n <app-view-route-list-card [emitrouteevent]=\"emitroute\" *ngIf=\"visiblesection('addroute')\"\n [route]=\"route\"></app-view-route-list-card>\n </li>\n </ul>\n <p *ngIf=\"!loader && data.length === 0\">{{visiblesection('addroute') ? 'No Route found' : 'No Job code found.'}}</p>\n </perfect-scrollbar>\n</div>\n\n<div class=\"driver_list\" *ngIf=\"isDriverList\">\n <div class=\"driver_headingprt\">\n <h2>Driver List</h2>\n <button *ngIf=\"driverList.driver_list?.length > 0\" (click)=\"isSmsList = true\">SMS</button>\n <div class=\"closebtn\" (click)=\"isDriverList = false; preventMouseout = false; isSmsList = false\">\n <mat-icon>clear</mat-icon>\n </div>\n </div>\n <ul class=\"driverList\" *ngIf=\"driverList && driverList.driver_list\">\n <li *ngFor=\"let driver of driverList?.driver_list\">\n <img src=\"assets/images/driver_icon.png\" [alt]=\"driver['driver_name']\" />\n <div class=\"driver_detail\">\n <b>{{driver['driver_name']}}</b> <span>{{driver['trucking_company']}}</span>\n <div class=\"cont_del\">\n <small>Driver contact: <b>{{driver['driver_phone'] ? driver['driver_phone'] : 'N/A'}}</b></small>\n <small>Company contact: <b>{{driver['trucking_company_phone'] ? driver['trucking_company_phone'] : 'N/A'}}</b></small>\n </div>\n </div>\n </li>\n <p *ngIf=\"driverList.driver_list?.length === 0\" style=\"font-weight:700; text-align:center;\">\n No Driver found\n </p>\n </ul>\n <div class=\"smslist\" *ngIf=\"isSmsList\">\n <div class=\"heading\">\n <h2>SMS All Drivers</h2>\n <div class=\"closebtn\" (click)=\"isSmsList = false\">\n <mat-icon>clear</mat-icon>\n </div>\n </div>\n <div class=\"detailprt\">\n <app-sms-card-details-overview [jobValue]=\"driverList\"></app-sms-card-details-overview>\n <div class=\"form_input\">\n <mat-form-field class=\"example-full-width\">\n <textarea matInput placeholder=\"Text here...\" autocomplete=\"nope\" column=\"10\"\n [formControl]=\"driverMessage\"></textarea>\n <mat-hint>{{driverMessage.value?.length}} / 256</mat-hint>\n </mat-form-field>\n <button *ngIf=\"!messageLoader\" [disabled]=\"!driverMessage.value || driverMessage.invalid\" (click)=\"sendMessage()\">\n Send SMS\n </button>\n </div>\n </div>\n <div class=\"loader\">\n <mat-spinner *ngIf=\"messageLoader\"></mat-spinner>\n </div>\n </div>\n</div>\n", styles: [".driver_iconprt{position:absolute;right:10px;top:12px;z-index:9999}.driver_iconprt img{width:25px;height:25px}.driver_list{background:white;position:fixed;width:300px;top:10px;left:360px;border-top-left-radius:20px;border-top-right-radius:20px}.driver_list .driver_headingprt{display:flex;justify-content:space-between;align-items:center;padding:0 15px}.driver_list .driver_headingprt button{background:none;border:1px solid #ccc;border-radius:10px;padding:5px 20px}.driver_list .driver_headingprt button:hover{background:#326ad3;color:#fff}.driver_list h2{font-size:20px}.driver_list .driverList{height:300px;overflow:auto}.driver_list .driverList li{display:flex;padding:10px;align-items:flex-start;cursor:pointer;border-bottom:1px solid white;background:#eee}.driver_list .driverList li img{width:35px;height:35px;border-radius:100%;margin-right:10px}.driver_list .driverList li .driver_detail{width:calc(100% - 45px);display:flex;flex-direction:column;justify-content:flex-start}.driver_list .driverList li .driver_detail b{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:135px;font-size:.9rem}.driver_list .driverList li .driver_detail span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:150px;font-size:.8rem}.driver_list:after{height:10px;background:white;border-bottom-right-radius:20px;border-bottom-left-radius:20px;content:\"\";position:absolute;bottom:-9px;width:100%}.smslist{background:white;position:absolute;width:480px;top:0;left:105%;border-radius:20px;padding-bottom:20px}.smslist .heading{display:flex;justify-content:space-between;align-items:center;padding:0 15px}.smslist .detailprt{padding:0 15px}.smslist .detailprt span{display:flex;margin-bottom:12px;font-size:.8rem;align-items:center}.smslist .detailprt span label{font-weight:600;width:37%}.smslist .detailprt .form_input{display:flex;flex-direction:column;font-size:.8rem}.smslist .detailprt .form_input button{background:#326ad3;padding:10px 18px;color:#fff;font-size:.8125rem;border-radius:30px;display:flex;align-self:flex-end}.closebtn{box-shadow:0 0 5px #0000001c;border-radius:100%;width:30px;height:30px;display:flex;justify-content:center;align-items:center;cursor:pointer;background:#f5f5f5}.show_routebtn{font-size:.9rem;margin-bottom:20px;padding:6px 11px;position:absolute;top:8px;right:10px;background-color:transparent;color:#3f51b5;border:1px solid #3f51b5;border-radius:10px;box-shadow:none}.show_routebtn:hover{background-color:#3f51b5;color:#fff}.cont_del{margin-top:10px}.cont_del small{display:block}.jobList ul{margin:0 15px 0 10px;width:100%}.jobList ul li{position:relative;background:#fbfbfb;padding:10px;border-radius:15px;margin-bottom:5px;border:1px solid #fbfbfb;border-left:3px solid #fbfbfb;cursor:pointer;height:inherit}@media (min-width: 2500px){.jobList ul li{height:7.65vh}}@media (min-width: 3300px){.jobList ul li{height:5.61vh}}.viewroute ul{margin:0 15px;width:100%}.viewroute ul li{position:relative;background:#fbfbfb;padding:7px 10px;border-radius:15px;margin-bottom:5px;border:1px solid #fbfbfb;border-left:3px solid #fbfbfb;cursor:pointer;height:16.4vh}@media (min-width: 1600px){.viewroute ul li{height:12.4vh}}.viewroute ul li.active{border:1px solid #39c471;border-left:3px solid #39c471}.loader{position:absolute;height:100%;top:0;left:0;width:100%;display:flex;align-items:center;justify-content:center;pointer-events:none}\n"] }]
|
|
297
|
+
}], ctorParameters: function () { return [{ type: i1.CoolmapService }, { type: i1.UtilsService }]; }, propDecorators: { loader: [{
|
|
298
|
+
type: Input
|
|
299
|
+
}], type: [{
|
|
300
|
+
type: Input
|
|
301
|
+
}], data: [{
|
|
302
|
+
type: Input
|
|
303
|
+
}], currentNav: [{
|
|
304
|
+
type: Input
|
|
305
|
+
}], emitroute: [{
|
|
306
|
+
type: Output
|
|
307
|
+
}], showAllRoute: [{
|
|
308
|
+
type: Output
|
|
309
|
+
}], searchTerm: [{
|
|
310
|
+
type: Input
|
|
311
|
+
}], clearJobDetailsFromList: [{
|
|
312
|
+
type: Output
|
|
313
|
+
}], clearListSeletion: [{
|
|
314
|
+
type: Input
|
|
315
|
+
}] } });
|
|
316
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtam9iY29kZS1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nvb2xtYXAvc3JjL2xpYi9jb21wb25lbnQvcm91dGUtam9iY29kZS1saXN0L3JvdXRlLWpvYmNvZGUtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb29sbWFwL3NyYy9saWIvY29tcG9uZW50L3JvdXRlLWpvYmNvZGUtbGlzdC9yb3V0ZS1qb2Jjb2RlLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBUXpELE1BQU0sT0FBTyx5QkFBeUI7SUFvQnBDLFlBQW1CLE9BQXVCLEVBQVMsS0FBbUI7UUFBbkQsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFBUyxVQUFLLEdBQUwsS0FBSyxDQUFjO1FBbkJ0RCxXQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ2QsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUNsQixTQUFJLEdBQVksRUFBRSxDQUFDO1FBQ25CLGVBQVUsR0FBVyxFQUFFLENBQUE7UUFDdEIsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDL0IsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ25ELG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBQ2pDLGVBQVUsR0FBWSxJQUFJLENBQUMsSUFBSSxDQUFDO1FBRWhDLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBQ3ZCLGtCQUFhLEdBQUcsSUFBSSxjQUFjLENB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LENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ25FLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLFVBQVUsRUFBRTtvQkFDeEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7b0JBQzNCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxTQUFTLENBQUMsQ0FBQztpQkFDcEQ7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7b0JBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxDQUFDO2lCQUN0RDtZQUNILENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFFLElBQUcsR0FBRyxFQUFFO2dCQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFBO2FBQUMsQ0FBQSxDQUFDLENBQUMsQ0FBQTtTQUNsRDtJQUNKLENBQUM7O3NIQTlOVyx5QkFBeUI7MEdBQXpCLHlCQUF5QixnV0NWdEMsazJHQWtFQTsyRkR4RGEseUJBQXlCO2tCQUxyQyxTQUFTOytCQUNFLHdCQUF3QjtnSUFLbEIsTUFBTTtzQkFBckIsS0FBSztnQkFDVSxJQUFJO3NCQUFuQixLQUFLO2dCQUNVLElBQUk7c0JBQW5CLEtBQUs7Z0JBQ1UsVUFBVTtzQkFBekIsS0FBSztnQkFDVyxTQUFTO3NCQUF6QixNQUFNO2dCQUNVLFlBQVk7c0JBQTVCLE1BQU07Z0JBR1MsVUFBVTtzQkFBekIsS0FBSztnQkFLVyx1QkFBdUI7c0JBQXZDLE1BQU07Z0JBSVMsaUJBQWlCO3NCQUFoQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvb2xtYXBTZXJ2aWNlLCBSb3V0ZSwgVXRpbHNTZXJ2aWNlIH0gZnJvbSAnQGFnZ2RpcmVjdC9jb29sbWFwLXNlcnZpY2VzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXJvdXRlLWpvYmNvZGUtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9yb3V0ZS1qb2Jjb2RlLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yb3V0ZS1qb2Jjb2RlLWxpc3QuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBSb3V0ZUpvYkNvZGVMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBwdWJsaWMgbG9hZGVyID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIHR5cGU6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBwdWJsaWMgZGF0YTogUm91dGVbXSA9IFtdO1xuICBASW5wdXQoKSBwdWJsaWMgY3VycmVudE5hdjogc3RyaW5nID0gJydcbiAgQE91dHB1dCgpIHB1YmxpYyBlbWl0cm91dGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgc2hvd0FsbFJvdXRlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwcmV2ZW50TW91c2VvdXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZmlsdGVyTGlzdDogUm91dGVbXSA9IHRoaXMuZGF0YTtcbiAgQElucHV0KCkgcHVibGljIHNlYXJjaFRlcm0hOiBhbnk7XG4gIGlzRHJpdmVyTGlzdDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgc2VsZWN0ZWRSb3V0ZSA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxhbnk+KHRydWUsIFtdKVxuICBkcml2ZXJMaXN0ITogYW55O1xuICBwcmV2ZW50TGlzdFNlbGVjdDogYm9vbGVhbiA9IGZhbHNlO1xuICBAT3V0cHV0KCkgcHVibGljIGNsZWFySm9iRGV0YWlsc0Zyb21MaXN0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwcmV2ZW50RGV0YWlsc0Nsb3NlID0gZmFsc2U7XG4gIG1lc3NhZ2VMb2FkZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZHJpdmVyTWVzc2FnZSA9IG5ldyBGb3JtQ29udHJvbCgnJywgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDI1NildKTtcbiAgQElucHV0KCkgcHVibGljIGNsZWFyTGlzdFNlbGV0aW9uOiBib29sZWFuO1xuICBpc1Ntc0xpc3Q6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29uc3RydWN0b3IocHVibGljIGNvb2xNYXA6IENvb2xtYXBTZXJ2aWNlLCBwdWJsaWMgdXRpbHM6IFV0aWxzU2VydmljZSkgeyB0aGlzLmRyaXZlckxpc3QgPSBbXSB9XG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMudXRpbHMuZ2V0cHJlVmVudEpvYmRldGFpbGNsb3NlLnN1YnNjcmliZShyZXMgPT4geyB0aGlzLnByZXZlbnREZXRhaWxzQ2xvc2UgPSByZXMgfSk7XG4gICAgdGhpcy51dGlscy5yZW1vdmVNYXBFbnRpdHlVdGlsaXR5LnN1YnNjcmliZSgocmVzOiBSb3V0ZSkgPT4ge3RoaXMucGFzc1JvdXRlKHJlcyl9KTtcbiAgfVxuICBwYXNzUm91dGUoam9iOiBSb3V0ZSkge1xuICAgIHRoaXMuZGF0YS5mb3JFYWNoKChlYWNoKSA9PiB7IGlmIChlYWNoWydyb3V0ZV9pZCddICE9PSBqb2JbJ3JvdXRlX2lkJ10pIHsgZWFjaFsnaXNBY3RpdmUnXSA9IGZhbHNlIH0gZWxzZSB7IGVhY2hbJ2lzQWN0aXZlJ10gPSB0cnVlIH0gfSk7XG4gICAgaWYgKHRoaXMudHlwZSA9PSAnYWRkcm91dGUnKSB0aGlzLmZpbHRlckxpc3QuZm9yRWFjaChlbGUgPT4gdGhpcy5jb29sTWFwLmZpbHRlclJvdXRlKGVsZVsncm91dGVfaWQnXSwgJ25vbmUnKSk7XG4gIH1cbiAgc2VsZWN0Um91dGUocm91dGU6IGFueSkge1xuICAgIGlmICghdGhpcy5wcmV2ZW50TGlzdFNlbGVjdCkge1xuICAgICAgdGhpcy5wcmV2ZW50TGlzdFNlbGVjdCA9IHRydWU7XG4gICAgICB0aGlzLnNlbGVjdGVkUm91dGUudG9nZ2xlKHJvdXRlKTtcbiAgICAgIHRoaXMuY2xlYXJKb2JEZXRhaWxzRnJvbUxpc3QuZW1pdCh0cnVlKTtcbiAgICAgIHRoaXMudXRpbHMucHJlVmVudEpvYmRldGFpbGNsb3NlLm5leHQoZmFsc2UpO1xuICAgICAgdGhpcy5maWx0ZXJMaXN0LmZvckVhY2goZWxlID0+IHRoaXMuY29vbE1hcC5maWx0ZXJSb3V0ZShlbGVbJ2pvYl9pZCddLCAnbm9uZScpKTtcbiAgICAgIHRoaXMuY2xlYXJMaXN0KCk7XG4gICAgICB0aGlzLnNlbGVjdGVkUm91dGUuc2VsZWN0ZWQuZm9yRWFjaCgoZWxlLCBpbmRleCkgPT4ge1xuICAgICAgICB0aGlzLmNvb2xNYXAuZmlsdGVyUm91dGUoZWxlWydqb2JfaWQnXSwgJ3Zpc2libGUnLCAoKHRoaXMuc2VsZWN0ZWRSb3V0ZS5zZWxlY3RlZC5sZW5ndGggLSAxKSA9PT0gaW5kZXgpKS50aGVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnByZXZlbnRMaXN0U2VsZWN0ID0gZmFsc2U7XG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICAgIGlmICghdGhpcy5zZWxlY3RlZFJvdXRlLnNlbGVjdGVkLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnByZXZlbnRMaXN0U2VsZWN0ID0gZmFsc2VcbiAgICAgICAgdGhpcy5kYXRhLmZvckVhY2goZWxlID0+IHRoaXMuY29vbE1hcC5maWx0ZXJSb3V0ZShlbGVbJ2pvYl9pZCddLCAndmlzaWJsZScpKTtcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIGNoZWNrcm91dGVzKHJvdXRlOiBSb3V0ZSkge1xuICAgIGNvbnN0IHNlbGVjdGVkUm91dGUgPSB0aGlzLnNlbGVjdGVkUm91dGUuc2VsZWN0ZWQ7XG4gICAgdGhpcy5maWx0ZXJMaXN0ID0gdGhpcy5maWx0ZXJMaXN0Lm1hcChlbGUgPT4geyBlbGVbJ2lzU2VsZWN0ZWQnXSA9IGZhbHNlOyByZXR1cm4gZWxlIH0pXG4gICAgaWYgKHNlbGVjdGVkUm91dGUubGVuZ3RoID4gMCkge1xuICAgICAgc2VsZWN0ZWRSb3V0ZS5mb3JFYWNoKGVsZSA9PiB7XG4gICAgICAgIGlmIChyb3V0ZVsnb3JkZXJfbnVtYmVyJ10gPT09IGVsZVsnb3JkZXJfbnVtYmVyJ10pIHsgZWxlWydpc1NlbGVjdGVkJ10gPSB0cnVlIH1cbiAgICAgIH0pO1xuICAgIH0gcmV0dXJuIHJvdXRlXG4gIH1cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY3VycmVudE5hdiA9PT0gJ0FkZHJvdXRlJyAmJiAodGhpcy5kYXRhLmxlbmd0aCA8IHRoaXMuZmlsdGVyTGlzdC5sZW5ndGgpKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5maWx0ZXJMaXN0LmZpbmRJbmRleChlbGUgPT4gZWxlLmlzQWN0aXZlKTtcbiAgICAgICAgaWYgKGluZGV4ID4gMCkgdGhpcy5maWx0ZXJMaXN0W2luZGV4XS5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRhdGEuZm9yRWFjaCgoZWxlOiBSb3V0ZSwgaW5kZXhGb3JEYXRhOiBudW1iZXIpID0+IHtcbiAgICAgICAgICBjb25zdCBpZCA9IChlbGVbJ2pvYl9pZCddID8gZWxlWydqb2JfaWQnXSA6IGVsZVsncm91dGVfaWQnXSlcbiAgICAgICAgICB0aGlzLmNvb2xNYXAucGxvdFJvdXRlKGVsZSwgaWQsIHRoaXMudHlwZSwgZmFsc2UsIChpbmRleEZvckRhdGEgPT09ICh0aGlzLmRhdGEubGVuZ3RoIC0gMSkpKS50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSwgNTAwKTtcbiAgICBpZiAoY2hhbmdlc1snZGF0YSddICYmIGNoYW5nZXNbJ2RhdGEnXVsnY3VycmVudFZhbHVlJ10pIHtcbiAgICAgIHRoaXMuZmlsdGVyTGlzdCA9IGNoYW5nZXNbJ2RhdGEnXVsnY3VycmVudFZhbHVlJ107XG4gICAgICBpZiAodGhpcy5zZWFyY2hUZXJtKSB7XG4gICAgICAgIGlmICh0aGlzLnNlYXJjaFRlcm0ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuZGF0YSA9IHRoaXMudXRpbHMuZ2V0U2VhcmNoUmVzdWx0cyhjaGFuZ2VzWydkYXRhJ11bJ2N1cnJlbnRWYWx1ZSddLCB0aGlzLnNlYXJjaFRlcm0pO1xuICAgICAgICAgIHRoaXMuZmlsdGVyTGlzdCA9IHRoaXMuZGF0YTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmZpbHRlckxpc3QgPSBjaGFuZ2VzWydkYXRhJ11bJ2N1cnJlbnRWYWx1ZSddO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdqb2Jjb2RlJykge1xuICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7IHRoaXMuY2xlYXJMaXN0KCk7XG4gICAgICAgIGlmICh0aGlzLmZpbHRlckxpc3QubGVuZ3RoID09PSAwKSB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy50eXBlICE9PSAnam9iY29kZScpIHtcbiAgICAgICAgaWYgKGNoYW5nZXNbJ2RhdGEnXVsncHJldmlvdXNWYWx1ZSddICYmIHRoaXMuY3VycmVudE5hdiA9PT0gJ2FkZEZvcm0nKSB7XG4gICAgICAgICAgY29uc3QgYWN0aXZlUm91dGUgPSBjaGFuZ2VzWydkYXRhJ11bJ3ByZXZpb3VzVmFsdWUnXS5maW5kKChlbGU6IFJvdXRlKSA9PiBlbGUuaXNBY3RpdmUpO1xuICAgICAgICAgIGlmIChhY3RpdmVSb3V0ZSkge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJMaXN0Lm1hcCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChpdGVtLnJvdXRlX2lkID09PSBhY3RpdmVSb3V0ZS5yb3V0ZV9pZCkge1xuICAgICAgICAgICAgICAgIGl0ZW0uaXNBY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGNoYW5nZXNbJ2RhdGEnXVsncHJldmlvdXNWYWx1ZSddICYmIHRoaXMuY3VycmVudE5hdiAhPT0gJ2FkZEZvcm0nKSB7XG4gICAgICAgIHRoaXMuY29vbE1hcC5yZW1vdmVKb2JGcm9tTWFwKGNoYW5nZXNbJ2RhdGEnXVsncHJldmlvdXNWYWx1ZSddKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvdXRlLmNsZWFyKCk7XG4gICAgICB9O1xuICAgICAgaWYgKHRoaXMuY3VycmVudE5hdiAhPT0gJ2FkZEZvcm0nKSB7XG4gICAgICAgIGNoYW5nZXNbJ2RhdGEnXVsnY3VycmVudFZhbHVlJ10uZm9yRWFjaCgoZWxlOiBSb3V0ZSwgaW5kZXhGb3JEYXRhOiBudW1iZXIpID0+IHtcbiAgICAgICAgICBjb25zdCBpZCA9IChlbGVbJ2pvYl9pZCddID8gZWxlWydqb2JfaWQnXSA6IGVsZVsncm91dGVfaWQnXSlcbiAgICAgICAgICBpZih0aGlzLnR5cGUgPT09ICdqb2Jjb2RlJykgZWxlLm1hdGVyaWFsTGFiZWwgPSBlbGUubWF0ZXJpYWw7XG4gICAgICAgICAgdGhpcy5jb29sTWFwLnBsb3RSb3V0ZShlbGUsIGlkLCB0aGlzLnR5cGUsIGZhbHNlLCAoaW5kZXhGb3JEYXRhID09PSAodGhpcy5kYXRhLmxlbmd0aCAtIDEpKSkudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5kZXhGb3JEYXRhID09PSAodGhpcy5kYXRhLmxlbmd0aCAtIDEpKSB7XG4gICAgICAgICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgICAgIHRoaXMudXRpbHMucHJldmVudG5hdkNoYW5nZS5uZXh0KHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ3NlYXJjaFRlcm0nXSkge1xuICAgICAgaWYgKHRoaXMuZmlsdGVyTGlzdCkge1xuICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmZpbHRlckxpc3Q7XG4gICAgICAgIHRoaXMuY2xlYXJMaXN0KCk7XG4gICAgICAgIGlmIChjaGFuZ2VzWydzZWFyY2hUZXJtJ11bJ2N1cnJlbnRWYWx1ZSddLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLmNvb2xNYXAucmVtb3ZlUm91dGVBbmRNYXJrZXIoMSk7XG4gICAgICAgICAgdGhpcy5kYXRhID0gdGhpcy51dGlscy5nZXRTZWFyY2hSZXN1bHRzKHRoaXMuZGF0YSwgY2hhbmdlc1snc2VhcmNoVGVybSddWydjdXJyZW50VmFsdWUnXSk7XG4gICAgICAgIH0gZWxzZSB7IHRoaXMuZGF0YSA9IHRoaXMuZmlsdGVyTGlzdDsgfVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLmNvb2xNYXAuY2xlYXJCb3VuZFdpdGhDb3JkaW5hdGVzKCk7XG4gICAgICAgICAgaWYgKHRoaXMuY3VycmVudE5hdiAhPT0gJ2FkZEZvcm0nICYmICF0aGlzLnNlbGVjdGVkUm91dGVbJ3NlbGVjdGVkJ10ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmNvb2xNYXAucmVtb3ZlUm91dGVBbmRNYXJrZXIoMSk7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZUZpbHRlclJvdXRlKHRoaXMuZmlsdGVyTGlzdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCA1MDApO1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50TmF2ICE9PSAnYWRkRm9ybScgJiYgdGhpcy5zZWxlY3RlZFJvdXRlWydzZWxlY3RlZCddLmxlbmd0aCkge1xuICAgICAgICAgIGlmICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJMaXN0KCk7XG4gICAgICAgICAgICB0aGlzLmNsZWFySm9iRGV0YWlsc0Zyb21MaXN0LmVtaXQodHJ1ZSlcbiAgICAgICAgICAgIHRoaXMuY29vbE1hcC5yZW1vdmVKb2JGcm9tTWFwKHRoaXMuc2VsZWN0ZWRSb3V0ZS5zZWxlY3RlZCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5kYXRhLmZvckVhY2goKGVsZSwgaW5kZXhGb3JEYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb29sTWFwLnBsb3RSb3V0ZShlbGUsIGVsZVsnam9iX2lkJ10sIHRoaXMudHlwZSwgZmFsc2UsIChpbmRleEZvckRhdGEgPT09ICh0aGlzLmRhdGEubGVuZ3RoIC0gMSkpKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChpbmRleEZvckRhdGEgPT09ICh0aGlzLmRhdGEubGVuZ3RoIC0gMSkpIHsgdGhpcy5sb2FkZXIgPSBmYWxzZTsgdGhpcy51dGlscy5wcmV2ZW50bmF2Q2hhbmdlLm5leHQodHJ1ZSkgfVxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3V0ZVsnc2VsZWN0ZWQnXS5sZW5ndGggJiYgdGhpcy5zZWxlY3RlZFJvdXRlWydzZWxlY3RlZCddWzBdWydqb2JfaWQnXSA9PT0gZWxlWydqb2JfaWQnXSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUm91dGUuY2xlYXIoKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgc2hvd1JvdXRlKCkge1xuICAgIHRoaXMudXRpbHMucHJldmVudG5hdkNoYW5nZS5uZXh0KGZhbHNlKTtcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7IHRoaXMuY2xlYXJMaXN0KCk7XG4gICAgdGhpcy5zaG93QWxsUm91dGUuZW1pdCh0cnVlKTtcbiAgICBpZiAodGhpcy5maWx0ZXJMaXN0ICYmIHRoaXMuZmlsdGVyTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmNvb2xNYXAucmVtb3ZlSm9iRnJvbU1hcCh0aGlzLnNlbGVjdGVkUm91dGUuc2VsZWN0ZWQpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuZmlsdGVyTGlzdC5mb3JFYWNoKChlbGUsIGluZGV4Rm9yRGF0YSkgPT4ge1xuICAgICAgICAgIHRoaXMuY29vbE1hcC5wbG90Um91dGUoZWxlLCBlbGVbJ2pvYl9pZCddLCB0aGlzLnR5cGUsIGZhbHNlLCAoaW5kZXhGb3JEYXRhID09PSB0aGlzLmZpbHRlckxpc3QubGVuZ3RoIC0gMSkpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGluZGV4Rm9yRGF0YSA9PT0gdGhpcy5maWx0ZXJMaXN0Lmxlbmd0aCAtIDEpIHsgdGhpcy5sb2FkZXIgPSBmYWxzZTsgdGhpcy51dGlscy5wcmV2ZW50bmF2Q2hhbmdlLm5leHQodHJ1ZSkgfVxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3V0ZVsnc2VsZWN0ZWQnXS5sZW5ndGggJiYgdGhpcy5zZWxlY3RlZFJvdXRlWydzZWxlY3RlZCddWzBdWydqb2JfaWQnXSA9PT0gZWxlWydqb2JfaWQnXSkge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUm91dGUuY2xlYXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICAgIH0sIDUwMCk7XG4gICAgfVxuICB9XG4gIHRvZ2dsZURyaXZlcm1lbnUoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IG1vdXNlZXZudFR5cGUgPSBldmVudC5tb3VzZWV2bnRUeXBlOyBsZXQgcm91dGUgPSBldmVudC5yb3V0ZTtcbiAgICBjb25zdCBpc0hvdmVyT3V0ID0gZXZlbnQuaXNIb3Zlck91dDtcbiAgICBpZih0eXBlb2YobW91c2Vldm50VHlwZSkgPT09ICdzdHJpbmcnKSB7aWYodGhpcy5wcmV2ZW50TW91c2VvdXQpe3RoaXMuaXNEcml2ZXJMaXN0ID0gIXRoaXMuaXNEcml2ZXJMaXN0fTsgdGhpcy5wcmV2ZW50TW91c2VvdXQgPSB0cnVlfVxuICAgIGlmICh0eXBlb2YobW91c2Vldm50VHlwZSkgPT09ICdib29sZWFuJyAmJiFtb3VzZWV2bnRUeXBlICYmICF0aGlzLnByZXZlbnRNb3VzZW91dCkgeyB0aGlzLmlzRHJpdmVyTGlzdCA9IG1vdXNlZXZudFR5cGUgfTtcbiAgICBpZiAodHlwZW9mKG1vdXNlZXZudFR5cGUpID09PSAnYm9vbGVhbicgJiYgbW91c2Vldm50VHlwZSAmJiAhdGhpcy5wcmV2ZW50TW91c2VvdXQpIHsgdGhpcy5pc0RyaXZlckxpc3QgPSBtb3VzZWV2bnRUeXBlIH07XG4gICAgaWYodGhpcy5wcmV2ZW50TW91c2VvdXQgJiYgIXRoaXMuaXNEcml2ZXJMaXN0KSB0aGlzLnByZXZlbnRNb3VzZW91dCA9IGZhbHNlO1xuICAgIGlmIChpc0hvdmVyT3V0KSB7XG4gICAgICBpZiAodGhpcy5wcmV2ZW50TW91c2VvdXQpIHtcbiAgICAgICAgcm91dGUgPSB0aGlzLnV0aWxzLmdldGRpY3RWYWx1ZSgnZHJpdmVyLWRldGFpbHMnKTtcbiAgICAgICAgdGhpcy5kcml2ZXJMaXN0ID0gcm91dGU7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMucHJldmVudE1vdXNlb3V0KSB7XG4gICAgICAgIHRoaXMuZHJpdmVyTGlzdCA9IHJvdXRlXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZHJpdmVyTGlzdCA9IHJvdXRlXG4gICAgfVxuICB9XG4gIHZpc2libGVzZWN0aW9uKHZhbHVlOiBzdHJpbmcpIHsgaWYgKHRoaXMudHlwZSA9PT0gdmFsdWUpIHsgcmV0dXJuIHRydWUgfSBlbHNlIHJldHVybiBmYWxzZSB9XG4gIHRvZ2dsZUZpbHRlclJvdXRlKGZpbHRlckxpc3Q6IFJvdXRlW10pIHtcbiAgICBmaWx0ZXJMaXN0LmZvckVhY2goKGVsZSkgPT4ge1xuICAgICAgY29uc3QgZmlsdGVySXRlbSA9ICh0aGlzLnR5cGUgPT09ICdqb2Jjb2RlJykgPyAnam9iX2lkJyA6ICdyb3V0ZV9pZCc7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuZGF0YS5maW5kSW5kZXgoKGVsZTEpID0+IHsgcmV0dXJuIChlbGUxW2Ake2ZpbHRlckl0ZW19YF0gPT09IGVsZVtgJHtmaWx0ZXJJdGVtfWBdKSB9KTtcbiAgICAgIGNvbnN0IGlkID0gKGVsZVsnam9iX2lkJ10gPyBlbGVbJ2pvYl9pZCddIDogZWxlWydyb3V0ZV9pZCddKTtcbiAgICAgIGlmIChpZCAmJiBpbmRleCA8IDApIHRoaXMuY29vbE1hcC5maWx0ZXJSb3V0ZShpZCwgJ25vbmUnKTtcbiAgICAgIGlmIChpZCAmJiBpbmRleCA+PSAwKSB7XG4gICAgICAgIHRoaXMuZGF0YVtpbmRleF0uaXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jb29sTWFwLmZpbHRlclJvdXRlKGlkLCAndmlzaWJsZScpO1xuICAgICAgICB0aGlzLmNvb2xNYXAuZXh0ZW5kQm91bmQoZWxlWydwYXRoJ10sIChpbmRleCA9PT0gKHRoaXMuZGF0YS5sZW5ndGggLSAxKSkpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuICBjbGVhckxpc3QoKSB7XG4gICAgdGhpcy5pc0RyaXZlckxpc3QgPSBmYWxzZTsgdGhpcy5kcml2ZXJMaXN0ID0gbnVsbDsgdGhpcy5wcmV2ZW50TW91c2VvdXQgPSBmYWxzZTsgdGhpcy5pc1Ntc0xpc3QgPSBmYWxzZTtcbiAgfVxuICBzZW5kTWVzc2FnZSgpIHtcbiAgICB0aGlzLm1lc3NhZ2VMb2FkZXIgPSB0cnVlXG4gICAgaWYgKHRoaXMuZHJpdmVyTWVzc2FnZS52YWxpZCkge1xuICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgb3JkZXJfbnVtYmVyOiB0aGlzLmRyaXZlckxpc3RbJ29yZGVyX251bWJlciddLFxuICAgICAgICBkYXRlOiB0aGlzLmRyaXZlckxpc3RbJ2RhdGUnXSxcbiAgICAgICAgbWVzc2FnZTogdGhpcy5kcml2ZXJNZXNzYWdlLnZhbHVlLFxuICAgICAgfVxuICAgICAgdGhpcy51dGlscy5wb3N0ZGF0YSgnam9ic19yZXBvcnRfY2hhdCcsIGRhdGEpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHJlc1snZGF0YSddWydzdGF0dXMnXSA9PT0gJ1N1Y2Nlc3MuJykge1xuICAgICAgICAgIHRoaXMubWVzc2FnZUxvYWRlciA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuZHJpdmVyTWVzc2FnZS5yZXNldCgpO1xuICAgICAgICAgIHRoaXMudXRpbHMub3BlblNuYWNrQmFyKCdNZXNzYWdlIFNlbnQnLCAnc3VjY2VzcycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubWVzc2FnZUxvYWRlciA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMudXRpbHMub3BlblNuYWNrQmFyKCdNZXNzYWdlIG5vdCBzZW50JywgJ2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICAgIH0sIGVyciA9PiB7aWYoZXJyKSB7dGhpcy5tZXNzYWdlTG9hZGVyID0gZmFsc2V9fSlcbiAgICB9XG4gfVxufVxuIiwiPGRpdiBjbGFzcz1cInNjcm9sbHBydCBhZGRyb3V0ZWxpc3RcIiBbY2xhc3Mudmlld3JvdXRlXT1cInZpc2libGVzZWN0aW9uKCdhZGRyb3V0ZScpXCJcbiAgW2NsYXNzLmpvYkxpc3RdPVwidmlzaWJsZXNlY3Rpb24oJ2pvYmNvZGUnKVwiPlxuICA8YnV0dG9uIChjbGljayk9XCJzaG93Um91dGUoKVwiIFtkaXNhYmxlZF09XCJsb2FkZXJcIiAqbmdJZj1cInNlbGVjdGVkUm91dGUuc2VsZWN0ZWQubGVuZ3RoXCIgY2xhc3M9XCJzaG93X3JvdXRlYnRuXCI+U2hvdyBhbGxcbiAgICByb3V0ZTwvYnV0dG9uPlxuICA8cGVyZmVjdC1zY3JvbGxiYXIgW2NsYXNzLmpvYnNjcm9sbF09XCJ2aXNpYmxlc2VjdGlvbignam9iY29kZScpXCI+XG4gICAgPG1hdC1zcGlubmVyICpuZ0lmPVwibG9hZGVyXCI+PC9tYXQtc3Bpbm5lcj5cbiAgICA8dWwgKm5nSWY9XCIhbG9hZGVyICYmIGRhdGEubGVuZ3RoID4gMFwiPlxuICAgICAgPGxpIFtjbGFzcy5hY3RpdmVdPVwicm91dGVbJ2lzQWN0aXZlJ10gJiYgdmlzaWJsZXNlY3Rpb24oJ2FkZHJvdXRlJylcIiAqbmdGb3I9XCJsZXQgcm91dGUgb2YgZGF0YVwiPlxuICAgICAgICA8YXBwLWpvYi1jb2RlLWxpc3QtY2FyZCAqbmdJZj1cInZpc2libGVzZWN0aW9uKCdqb2Jjb2RlJylcIiAodG9nZ2xlRHJpdmVybWVudSk9XCJ0b2dnbGVEcml2ZXJtZW51KCRldmVudClcIlxuICAgICAgICAgIChyb3V0ZVNlbGV0aW9uKT1cInNlbGVjdFJvdXRlKCRldmVudClcIiBbcHJldmVudENsb3NlRGV0YWlsc109XCJwcmV2ZW50RGV0YWlsc0Nsb3NlXCIgW2VtaXRKb2JkZXRhaWxzXT1cIntlbWl0cm91dGUsIGNsZWFySm9iRGV0YWlsc0Zyb21MaXN0fVwiIFtyb3V0ZV09XCJjaGVja3JvdXRlcyhyb3V0ZSlcIj48L2FwcC1qb2ItY29kZS1saXN0LWNhcmQ+XG4gICAgICAgIDxhcHAtdmlldy1yb3V0ZS1saXN0LWNhcmQgW2VtaXRyb3V0ZWV2ZW50XT1cImVtaXRyb3V0ZVwiICpuZ0lmPVwidmlzaWJsZXNlY3Rpb24oJ2FkZHJvdXRlJylcIlxuICAgICAgICAgIFtyb3V0ZV09XCJyb3V0ZVwiPjwvYXBwLXZpZXctcm91dGUtbGlzdC1jYXJkPlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuICAgIDxwICpuZ0lmPVwiIWxvYWRlciAmJiBkYXRhLmxlbmd0aCA9PT0gMFwiPnt7dmlzaWJsZXNlY3Rpb24oJ2FkZHJvdXRlJykgPyAnTm8gUm91dGUgZm91bmQnIDogJ05vIEpvYiBjb2RlIGZvdW5kLid9fTwvcD5cbiAgPC9wZXJmZWN0LXNjcm9sbGJhcj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiZHJpdmVyX2xpc3RcIiAqbmdJZj1cImlzRHJpdmVyTGlzdFwiPlxuICA8ZGl2IGNsYXNzPVwiZHJpdmVyX2hlYWRpbmdwcnRcIj5cbiAgICA8aDI+RHJpdmVyIExpc3Q8L2gyPlxuICAgIDxidXR0b24gKm5nSWY9XCJkcml2ZXJMaXN0LmRyaXZlcl9saXN0Py5sZW5ndGggPiAwXCIgKGNsaWNrKT1cImlzU21zTGlzdCA9IHRydWVcIj5TTVM8L2J1dHRvbj5cbiAgICA8ZGl2IGNsYXNzPVwiY2xvc2VidG5cIiAoY2xpY2spPVwiaXNEcml2ZXJMaXN0ID0gZmFsc2U7IHByZXZlbnRNb3VzZW91dCA9IGZhbHNlOyBpc1Ntc0xpc3QgPSBmYWxzZVwiPlxuICAgICAgPG1hdC1pY29uPmNsZWFyPC9tYXQtaWNvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDx1bCBjbGFzcz1cImRyaXZlckxpc3RcIiAqbmdJZj1cImRyaXZlckxpc3QgJiYgZHJpdmVyTGlzdC5kcml2ZXJfbGlzdFwiPlxuICAgIDxsaSAqbmdGb3I9XCJsZXQgZHJpdmVyIG9mIGRyaXZlckxpc3Q/LmRyaXZlcl9saXN0XCI+XG4gICAgICA8aW1nIHNyYz1cImFzc2V0cy9pbWFnZXMvZHJpdmVyX2ljb24ucG5nXCIgW2FsdF09XCJkcml2ZXJbJ2RyaXZlcl9uYW1lJ11cIiAvPlxuICAgICAgPGRpdiBjbGFzcz1cImRyaXZlcl9kZXRhaWxcIj5cbiAgICAgICAgPGI+e3tkcml2ZXJbJ2RyaXZlcl9uYW1lJ119fTwvYj4gPHNwYW4+e3tkcml2ZXJbJ3RydWNraW5nX2NvbXBhbnknXX19PC9zcGFuPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udF9kZWxcIj5cbiAgICAgICAgICA8c21hbGw+RHJpdmVyIGNvbnRhY3Q6IDxiPnt7ZHJpdmVyWydkcml2ZXJfcGhvbmUnXSA/IGRyaXZlclsnZHJpdmVyX3Bob25lJ10gOiAnTi9BJ319PC9iPjwvc21hbGw+XG4gICAgICAgICAgPHNtYWxsPkNvbXBhbnkgY29udGFjdDogPGI+e3tkcml2ZXJbJ3RydWNraW5nX2NvbXBhbnlfcGhvbmUnXSA/IGRyaXZlclsndHJ1Y2tpbmdfY29tcGFueV9waG9uZSddIDogJ04vQSd9fTwvYj48L3NtYWxsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbGk+XG4gICAgPHAgKm5nSWY9XCJkcml2ZXJMaXN0LmRyaXZlcl9saXN0Py5sZW5ndGggPT09IDBcIiBzdHlsZT1cImZvbnQtd2VpZ2h0OjcwMDsgdGV4dC1hbGlnbjpjZW50ZXI7XCI+XG4gICAgICBObyBEcml2ZXIgZm91bmRcbiAgICA8L3A+XG4gIDwvdWw+XG4gIDxkaXYgY2xhc3M9XCJzbXNsaXN0XCIgKm5nSWY9XCJpc1Ntc0xpc3RcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaGVhZGluZ1wiPlxuICAgICAgPGgyPlNNUyBBbGwgRHJpdmVyczwvaDI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2xvc2VidG5cIiAoY2xpY2spPVwiaXNTbXNMaXN0ID0gZmFsc2VcIj5cbiAgICAgICAgPG1hdC1pY29uPmNsZWFyPC9tYXQtaWNvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxwcnRcIj5cbiAgICAgIDxhcHAtc21zLWNhcmQtZGV0YWlscy1vdmVydmlldyBbam9iVmFsdWVdPVwiZHJpdmVyTGlzdFwiPjwvYXBwLXNtcy1jYXJkLWRldGFpbHMtb3ZlcnZpZXc+XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybV9pbnB1dFwiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJleGFtcGxlLWZ1bGwtd2lkdGhcIj5cbiAgICAgICAgICA8dGV4dGFyZWEgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJUZXh0IGhlcmUuLi5cIiBhdXRvY29tcGxldGU9XCJub3BlXCIgY29sdW1uPVwiMTBcIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImRyaXZlck1lc3NhZ2VcIj48L3RleHRhcmVhPlxuICAgICAgICAgIDxtYXQtaGludD57e2RyaXZlck1lc3NhZ2UudmFsdWU/Lmxlbmd0aH19IC8gMjU2PC9tYXQtaGludD5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFtZXNzYWdlTG9hZGVyXCIgW2Rpc2FibGVkXT1cIiFkcml2ZXJNZXNzYWdlLnZhbHVlIHx8IGRyaXZlck1lc3NhZ2UuaW52YWxpZFwiIChjbGljayk9XCJzZW5kTWVzc2FnZSgpXCI+XG4gICAgICAgICAgU2VuZCBTTVNcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibG9hZGVyXCI+XG4gICAgICA8bWF0LXNwaW5uZXIgKm5nSWY9XCJtZXNzYWdlTG9hZGVyXCI+PC9tYXQtc3Bpbm5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|