@aggdirect/coolmap-services 1.4.0 → 1.4.1
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/coolmap-services/esm2022/lib/service/coolmap.service.mjs +629 -0
- package/coolmap-services/esm2022/lib/service/utils.service.mjs +368 -0
- package/{fesm2022 → coolmap-services/fesm2022}/aggdirect-coolmap-services.mjs +25 -18
- package/coolmap-services/fesm2022/aggdirect-coolmap-services.mjs.map +1 -0
- package/package.json +7 -43
- package/esm2022/lib/service/coolmap.service.mjs +0 -626
- package/esm2022/lib/service/utils.service.mjs +0 -364
- package/fesm2022/aggdirect-coolmap-services.mjs.map +0 -1
- /package/{README.md → coolmap-services/README.md} +0 -0
- /package/{esm2022 → coolmap-services/esm2022}/aggdirect-coolmap-services.mjs +0 -0
- /package/{esm2022 → coolmap-services/esm2022}/lib/service/data-model.mjs +0 -0
- /package/{esm2022 → coolmap-services/esm2022}/public-api.mjs +0 -0
- /package/{index.d.ts → coolmap-services/index.d.ts} +0 -0
- /package/{lib → coolmap-services/lib}/service/coolmap.service.d.ts +0 -0
- /package/{lib → coolmap-services/lib}/service/data-model.d.ts +0 -0
- /package/{lib → coolmap-services/lib}/service/utils.service.d.ts +0 -0
- /package/{public-api.d.ts → coolmap-services/public-api.d.ts} +0 -0
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
import { Injectable, Inject } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject } from 'rxjs';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common/http";
|
|
5
|
+
import * as i2 from "@angular/material/snack-bar";
|
|
6
|
+
import * as i3 from "./data-model";
|
|
7
|
+
export class UtilsService {
|
|
8
|
+
http;
|
|
9
|
+
snackBar;
|
|
10
|
+
config;
|
|
11
|
+
ngZone;
|
|
12
|
+
analyticsRESTURL = '';
|
|
13
|
+
RESTURLPrefix = '';
|
|
14
|
+
pickupOptions = [];
|
|
15
|
+
destOptions = [];
|
|
16
|
+
ownerOptions = [];
|
|
17
|
+
customerOptions = [];
|
|
18
|
+
unitOptions = [];
|
|
19
|
+
materialOptions = [];
|
|
20
|
+
jcodeOptions = [];
|
|
21
|
+
driverOption = [];
|
|
22
|
+
truckingCompanayOption = [];
|
|
23
|
+
routeNameOptions = [];
|
|
24
|
+
preventnavChange = new BehaviorSubject(false);
|
|
25
|
+
navChangeObserve = this.preventnavChange.asObservable();
|
|
26
|
+
clearViewRouteforJobCode = new BehaviorSubject(false);
|
|
27
|
+
clearViewRouteforJobCodeObserve = this.clearViewRouteforJobCode.asObservable();
|
|
28
|
+
preVentJobdetailclose = new BehaviorSubject(false);
|
|
29
|
+
getpreVentJobdetailclose = this.preVentJobdetailclose.asObservable();
|
|
30
|
+
routeDetailsUtility = new BehaviorSubject({});
|
|
31
|
+
getrouteDetailsUtility = this.routeDetailsUtility.asObservable();
|
|
32
|
+
removeMapEntity = new BehaviorSubject({});
|
|
33
|
+
removeMapEntityUtility = this.removeMapEntity.asObservable();
|
|
34
|
+
dict = new Map();
|
|
35
|
+
unitsList;
|
|
36
|
+
materialsList;
|
|
37
|
+
materialsListForCustomer;
|
|
38
|
+
customersList;
|
|
39
|
+
constructor(http, snackBar, config, ngZone) {
|
|
40
|
+
this.http = http;
|
|
41
|
+
this.snackBar = snackBar;
|
|
42
|
+
this.config = config;
|
|
43
|
+
this.ngZone = ngZone;
|
|
44
|
+
this.analyticsRESTURL = config.analyticsRESTURL;
|
|
45
|
+
this.RESTURLPrefix = config.RESTURLPrefix;
|
|
46
|
+
}
|
|
47
|
+
getDateFormat(strVal, seprater) {
|
|
48
|
+
seprater = seprater ? seprater : '-';
|
|
49
|
+
const mydate = strVal;
|
|
50
|
+
return (mydate?.getFullYear() +
|
|
51
|
+
seprater +
|
|
52
|
+
((mydate ? mydate.getMonth() : 0) + 1) +
|
|
53
|
+
seprater +
|
|
54
|
+
mydate?.getDate());
|
|
55
|
+
}
|
|
56
|
+
getData(path) {
|
|
57
|
+
return this.http.get(`${this.analyticsRESTURL}${this.config.repository}/${path}`);
|
|
58
|
+
}
|
|
59
|
+
postdata(path, data) {
|
|
60
|
+
return this.http.post(`${this.analyticsRESTURL}${this.config.repository}/${path}`, data);
|
|
61
|
+
}
|
|
62
|
+
postDataWithRestUrl(path, data) {
|
|
63
|
+
return this.http.post(`${this.RESTURLPrefix}${path}`, data);
|
|
64
|
+
}
|
|
65
|
+
autocomplete(searchElementRef, form) {
|
|
66
|
+
return new Promise((resolve, reject) => {
|
|
67
|
+
const autocomplete = new google.maps.places.Autocomplete(searchElementRef.nativeElement, {
|
|
68
|
+
types: ['address']
|
|
69
|
+
});
|
|
70
|
+
google.maps.event.addListener(autocomplete, 'place_changed', () => {
|
|
71
|
+
this.ngZone.run(() => {
|
|
72
|
+
const place = autocomplete.getPlace();
|
|
73
|
+
resolve({ lat: place.geometry.location.lat(), lng: place.geometry.location.lng(), formatted_address: place['formatted_address'] });
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
openSnackBar(message, className) {
|
|
79
|
+
this.snackBar.open(message, '', {
|
|
80
|
+
duration: 5000,
|
|
81
|
+
verticalPosition: 'top',
|
|
82
|
+
horizontalPosition: 'center',
|
|
83
|
+
panelClass: [className ? className : 'default'],
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
makeOptions(item) {
|
|
87
|
+
if (item.order_number) {
|
|
88
|
+
this.jcodeOptions.findIndex((elem) => elem.job_id === item.job_id) === -1
|
|
89
|
+
? this.jcodeOptions.push({
|
|
90
|
+
job_code: item.order_number,
|
|
91
|
+
job_id: item.job_id,
|
|
92
|
+
})
|
|
93
|
+
: null;
|
|
94
|
+
if (item.driver_list && item.driver_list?.length > 0) {
|
|
95
|
+
item.driver_list.forEach((driver) => {
|
|
96
|
+
this.driverOption.findIndex((elem) => elem === driver['driver_name']) === -1
|
|
97
|
+
? this.driverOption.push(driver['driver_name'])
|
|
98
|
+
: null;
|
|
99
|
+
this.truckingCompanayOption.findIndex((elem) => elem === driver['trucking_company']) === -1
|
|
100
|
+
? this.truckingCompanayOption.push(driver['trucking_company'])
|
|
101
|
+
: null;
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
this.pickupOptions.findIndex((elem) => elem === item.pickup_location) === -1
|
|
106
|
+
? this.pickupOptions.push(item.pickup_location)
|
|
107
|
+
: null;
|
|
108
|
+
this.destOptions.findIndex((elem) => elem === item.delivery_location) === -1
|
|
109
|
+
? this.destOptions.push(item.delivery_location)
|
|
110
|
+
: null;
|
|
111
|
+
this.customerOptions.findIndex((customer) => customer === item.customer_name) === -1
|
|
112
|
+
? this.customerOptions.push(item.customer_name)
|
|
113
|
+
: null;
|
|
114
|
+
this.unitOptions.findIndex((elem) => elem === item.unit) === -1
|
|
115
|
+
? this.unitOptions.push(item.unit)
|
|
116
|
+
: null;
|
|
117
|
+
if (item.material) {
|
|
118
|
+
this.materialOptions.findIndex((elem) => elem === item.material) === -1
|
|
119
|
+
? this.materialOptions.push(item.material)
|
|
120
|
+
: null;
|
|
121
|
+
}
|
|
122
|
+
if (item.route_name)
|
|
123
|
+
this.routeNameOptions.findIndex((elem) => elem === item.route_name) === -1
|
|
124
|
+
? this.routeNameOptions.push(item.route_name)
|
|
125
|
+
: null;
|
|
126
|
+
}
|
|
127
|
+
filter(value, filters) {
|
|
128
|
+
if (typeof value !== 'string') {
|
|
129
|
+
return [];
|
|
130
|
+
}
|
|
131
|
+
const filterValue = value.toLowerCase();
|
|
132
|
+
if (filterValue === '') {
|
|
133
|
+
return [];
|
|
134
|
+
}
|
|
135
|
+
const searchResults = [];
|
|
136
|
+
this.unitOptions.map((unit) => {
|
|
137
|
+
if (unit.toLowerCase().includes(filterValue)) {
|
|
138
|
+
searchResults.push({ type: 'unit', label: unit, value: unit });
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
this.customerOptions.map((unit) => {
|
|
142
|
+
if (unit.toLowerCase().includes(filterValue)) {
|
|
143
|
+
searchResults.push({ type: 'customer', label: unit, value: unit });
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
if (this.materialOptions.length) {
|
|
147
|
+
this.materialOptions.map((unit) => {
|
|
148
|
+
if (unit.toLowerCase().includes(filterValue)) {
|
|
149
|
+
searchResults.push({ type: 'material', label: unit, value: unit });
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
this.pickupOptions.map((unit) => {
|
|
154
|
+
if (unit.toLowerCase().includes(filterValue)) {
|
|
155
|
+
searchResults.push({
|
|
156
|
+
type: 'pickup location',
|
|
157
|
+
label: unit,
|
|
158
|
+
value: unit,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
this.destOptions.map((unit) => {
|
|
163
|
+
if (unit.toLowerCase().includes(filterValue)) {
|
|
164
|
+
searchResults.push({
|
|
165
|
+
type: 'destination location',
|
|
166
|
+
label: unit,
|
|
167
|
+
value: unit,
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
this.jcodeOptions.map((unit) => {
|
|
172
|
+
if (unit.job_code.toLowerCase().includes(filterValue)) {
|
|
173
|
+
searchResults.push({
|
|
174
|
+
type: 'job',
|
|
175
|
+
label: unit['job_code'],
|
|
176
|
+
value: unit,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
this.driverOption.map((unit) => {
|
|
181
|
+
if (unit.toLowerCase().includes(filterValue)) {
|
|
182
|
+
searchResults.push({ type: 'Driver', label: unit, value: unit });
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
this.truckingCompanayOption.map((unit) => {
|
|
186
|
+
if (unit.toLowerCase().includes(filterValue)) {
|
|
187
|
+
searchResults.push({
|
|
188
|
+
type: 'Trucking Company',
|
|
189
|
+
label: unit,
|
|
190
|
+
value: unit,
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
this.routeNameOptions.map((unit) => {
|
|
195
|
+
if (unit.toLowerCase().includes(filterValue)) {
|
|
196
|
+
searchResults.push({ type: 'Route name', label: unit, value: unit });
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
const searchDict = {};
|
|
200
|
+
filters.map((filter) => {
|
|
201
|
+
searchDict[filter['name'] + filter['type']] = filter;
|
|
202
|
+
});
|
|
203
|
+
const furtherFilter = [];
|
|
204
|
+
searchResults.map((search) => {
|
|
205
|
+
if (search['label'] + search['type'] in searchDict) {
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
furtherFilter.push(search);
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
return furtherFilter;
|
|
212
|
+
}
|
|
213
|
+
getSearchResults(list, filterval) {
|
|
214
|
+
return list.filter((element) => {
|
|
215
|
+
const result_list_boolean = [];
|
|
216
|
+
if (filterval.length > 0) {
|
|
217
|
+
if (filterval[0]['type'] === 'unit') {
|
|
218
|
+
result_list_boolean.push(filterval[0]['name'] ===
|
|
219
|
+
element[filterval[0]['type']]);
|
|
220
|
+
}
|
|
221
|
+
if (filterval[0]['type'] === 'customer') {
|
|
222
|
+
result_list_boolean.push(filterval[0]['name'] === element['customer_name']);
|
|
223
|
+
}
|
|
224
|
+
if (filterval[0]['type'] === 'material') {
|
|
225
|
+
result_list_boolean.push(filterval[0]['name'] ===
|
|
226
|
+
element[filterval[0]['type']]);
|
|
227
|
+
}
|
|
228
|
+
if (filterval[0]['type'] === 'pickup location') {
|
|
229
|
+
result_list_boolean.push(filterval[0]['name'] === element['pickup_location']);
|
|
230
|
+
}
|
|
231
|
+
if (filterval[0]['type'] === 'destination location') {
|
|
232
|
+
result_list_boolean.push(filterval[0]['name'] === element['delivery_location']);
|
|
233
|
+
}
|
|
234
|
+
if (filterval[0]['type'] === 'job') {
|
|
235
|
+
result_list_boolean.push(filterval[0]['name'] === element['order_number']);
|
|
236
|
+
}
|
|
237
|
+
if (filterval[0]['type'] === 'Route name') {
|
|
238
|
+
result_list_boolean.push(filterval[0]['name'] === element['route_name']);
|
|
239
|
+
}
|
|
240
|
+
if (filterval[0]['type'] === 'Driver') {
|
|
241
|
+
const index = element.driver_list?.findIndex((ele) => {
|
|
242
|
+
return filterval[0]['name'] === ele['driver_name'];
|
|
243
|
+
});
|
|
244
|
+
if (index !== -1)
|
|
245
|
+
result_list_boolean.push(true);
|
|
246
|
+
}
|
|
247
|
+
if (filterval[0]['type'] === 'Trucking Company') {
|
|
248
|
+
const index = element.driver_list?.findIndex((ele) => {
|
|
249
|
+
return filterval[0]['name'] === ele['trucking_company'];
|
|
250
|
+
});
|
|
251
|
+
if (index !== -1)
|
|
252
|
+
result_list_boolean.push(true);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
if (result_list_boolean.length > 0) {
|
|
256
|
+
return result_list_boolean.reduce((prev, curr) => prev && curr);
|
|
257
|
+
}
|
|
258
|
+
return false;
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
clearOptions() {
|
|
262
|
+
this.pickupOptions = [];
|
|
263
|
+
this.destOptions = [];
|
|
264
|
+
this.ownerOptions = [];
|
|
265
|
+
this.customerOptions = [];
|
|
266
|
+
this.unitOptions = [];
|
|
267
|
+
this.materialOptions = [];
|
|
268
|
+
this.jcodeOptions = [];
|
|
269
|
+
this.routeNameOptions = [];
|
|
270
|
+
}
|
|
271
|
+
setdictValue(key, value) {
|
|
272
|
+
this.dict.set(key, value);
|
|
273
|
+
}
|
|
274
|
+
getdictValue(key) {
|
|
275
|
+
return JSON.parse(this.dict.get(key));
|
|
276
|
+
}
|
|
277
|
+
removedictValue(key) {
|
|
278
|
+
this.dict.delete(key);
|
|
279
|
+
}
|
|
280
|
+
conveySearchIcon(value) {
|
|
281
|
+
if (value && typeof value !== 'object')
|
|
282
|
+
return true;
|
|
283
|
+
return false;
|
|
284
|
+
}
|
|
285
|
+
fetchUnitsList() {
|
|
286
|
+
return new Promise((resolve, reject) => {
|
|
287
|
+
if (!this.unitsList) {
|
|
288
|
+
this.getData('unit/list/view').subscribe((res) => {
|
|
289
|
+
if (res) {
|
|
290
|
+
this.unitsList = res.data;
|
|
291
|
+
resolve(this.unitsList);
|
|
292
|
+
}
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
resolve(this.unitsList);
|
|
297
|
+
}
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
fetchMaterialsList() {
|
|
301
|
+
return new Promise((resolve, reject) => {
|
|
302
|
+
if (!this.materialsList) {
|
|
303
|
+
this.getData('material/list/view').subscribe((res) => {
|
|
304
|
+
this.materialsList = this.filtermaterialList(res.data);
|
|
305
|
+
resolve(this.materialsList);
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
resolve(this.materialsList);
|
|
310
|
+
}
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
fetchMaterialsListForCustomer() {
|
|
314
|
+
return new Promise((resolve, reject) => {
|
|
315
|
+
if (!this.materialsListForCustomer) {
|
|
316
|
+
this.getData('material/list/view').subscribe((res) => {
|
|
317
|
+
this.materialsListForCustomer = this.filtermaterialList(res.data);
|
|
318
|
+
resolve(this.materialsListForCustomer);
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
else {
|
|
322
|
+
resolve(this.materialsListForCustomer);
|
|
323
|
+
}
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
filtermaterialList(list) {
|
|
327
|
+
let meterialList = [];
|
|
328
|
+
list.map((item) => {
|
|
329
|
+
if (item.sub.length > 0) {
|
|
330
|
+
item.sub.map((subItem) => {
|
|
331
|
+
if (subItem.add_to_marketplace) {
|
|
332
|
+
subItem.material = item.material;
|
|
333
|
+
subItem.material_id = item.material_id;
|
|
334
|
+
subItem.label = item.material + ' | ' + subItem.sub_material;
|
|
335
|
+
meterialList.push(subItem);
|
|
336
|
+
}
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
});
|
|
340
|
+
meterialList.sort((a, b) => a.label.localeCompare(b.label));
|
|
341
|
+
return meterialList;
|
|
342
|
+
}
|
|
343
|
+
fetchCustomersList() {
|
|
344
|
+
return new Promise((resolve, reject) => {
|
|
345
|
+
if (!this.customersList) {
|
|
346
|
+
this.getData('company/list/view').subscribe((res) => {
|
|
347
|
+
if (res) {
|
|
348
|
+
this.customersList = res.data;
|
|
349
|
+
resolve(this.customersList);
|
|
350
|
+
}
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
else {
|
|
354
|
+
resolve(this.customersList);
|
|
355
|
+
}
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: UtilsService, deps: [{ token: i1.HttpClient }, { token: i2.MatSnackBar }, { token: 'memberData' }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
359
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: UtilsService, providedIn: 'root' });
|
|
360
|
+
}
|
|
361
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: UtilsService, decorators: [{
|
|
362
|
+
type: Injectable,
|
|
363
|
+
args: [{ providedIn: 'root' }]
|
|
364
|
+
}], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.MatSnackBar }, { type: i3.CoolmapConfigModel, decorators: [{
|
|
365
|
+
type: Inject,
|
|
366
|
+
args: ['memberData']
|
|
367
|
+
}] }, { type: i0.NgZone }] });
|
|
368
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nvb2xtYXAtc2VydmljZXMvc3JjL2xpYi9zZXJ2aWNlL3V0aWxzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFNdkMsTUFBTSxPQUFPLFlBQVk7SUE4QmQ7SUFDQTtJQUN1QjtJQUN2QjtJQWhDVCxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7SUFDdEIsYUFBYSxHQUFHLEVBQUUsQ0FBQztJQUNuQixhQUFhLEdBQVUsRUFBRSxDQUFDO0lBQzFCLFdBQVcsR0FBVSxFQUFFLENBQUM7SUFDeEIsWUFBWSxHQUFVLEVBQUUsQ0FBQztJQUN6QixlQUFlLEdBQVUsRUFBRSxDQUFDO0lBQzVCLFdBQVcsR0FBVSxFQUFFLENBQUM7SUFDeEIsZUFBZSxHQUFVLEVBQUUsQ0FBQztJQUM1QixZQUFZLEdBQVUsRUFBRSxDQUFDO0lBQ3pCLFlBQVksR0FBVSxFQUFFLENBQUM7SUFDekIsc0JBQXNCLEdBQVUsRUFBRSxDQUFDO0lBQ25DLGdCQUFnQixHQUFVLEVBQUUsQ0FBQztJQUN0QixnQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyRCxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDeEQsd0JBQXdCLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEQsK0JBQStCLEdBQzdCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMvQyxxQkFBcUIsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuRCx3QkFBd0IsR0FBRyxJ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WSxDQUFDO0lBQ3RCLENBQUM7SUFDRCxrQkFBa0I7UUFDaEIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBQ3ZELElBQUksR0FBRyxFQUFFLENBQUM7d0JBQ1IsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO3dCQUM5QixPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUM5QixDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDOUIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt1R0F6WFUsWUFBWSx1RUFnQ2IsWUFBWTsyR0FoQ1gsWUFBWSxjQURDLE1BQU07OzJGQUNuQixZQUFZO2tCQUR4QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBaUM3QixNQUFNOzJCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0LCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29vbG1hcENvbmZpZ01vZGVsLCBSb3V0ZSB9IGZyb20gJy4vZGF0YS1tb2RlbCc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5kZWNsYXJlIHZhciBnb29nbGU6IGFueTtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBVdGlsc1NlcnZpY2Uge1xuICBhbmFseXRpY3NSRVNUVVJMID0gJyc7XG4gIFJFU1RVUkxQcmVmaXggPSAnJztcbiAgcGlja3VwT3B0aW9uczogYW55W10gPSBbXTtcbiAgZGVzdE9wdGlvbnM6IGFueVtdID0gW107XG4gIG93bmVyT3B0aW9uczogYW55W10gPSBbXTtcbiAgY3VzdG9tZXJPcHRpb25zOiBhbnlbXSA9IFtdO1xuICB1bml0T3B0aW9uczogYW55W10gPSBbXTtcbiAgbWF0ZXJpYWxPcHRpb25zOiBhbnlbXSA9IFtdO1xuICBqY29kZU9wdGlvbnM6IGFueVtdID0gW107XG4gIGRyaXZlck9wdGlvbjogYW55W10gPSBbXTtcbiAgdHJ1Y2tpbmdDb21wYW5heU9wdGlvbjogYW55W10gPSBbXTtcbiAgcm91dGVOYW1lT3B0aW9uczogYW55W10gPSBbXTtcbiAgcHVibGljIHByZXZlbnRuYXZDaGFuZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgbmF2Q2hhbmdlT2JzZXJ2ZSA9IHRoaXMucHJldmVudG5hdkNoYW5nZS5hc09ic2VydmFibGUoKTtcbiAgY2xlYXJWaWV3Um91dGVmb3JKb2JDb2RlID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gIGNsZWFyVmlld1JvdXRlZm9ySm9iQ29kZU9ic2VydmUgPVxuICAgIHRoaXMuY2xlYXJWaWV3Um91dGVmb3JKb2JDb2RlLmFzT2JzZXJ2YWJsZSgpO1xuICBwcmVWZW50Sm9iZGV0YWlsY2xvc2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgZ2V0cHJlVmVudEpvYmRldGFpbGNsb3NlID0gdGhpcy5wcmVWZW50Sm9iZGV0YWlsY2xvc2UuYXNPYnNlcnZhYmxlKCk7XG4gIHJvdXRlRGV0YWlsc1V0aWxpdHkgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHt9KTtcbiAgZ2V0cm91dGVEZXRhaWxzVXRpbGl0eSA9IHRoaXMucm91dGVEZXRhaWxzVXRpbGl0eS5hc09ic2VydmFibGUoKTtcbiAgcmVtb3ZlTWFwRW50aXR5ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh7fSk7XG4gIHJlbW92ZU1hcEVudGl0eVV0aWxpdHkgPSB0aGlzLnJlbW92ZU1hcEVudGl0eS5hc09ic2VydmFibGUoKTtcbiAgZGljdCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gIHVuaXRzTGlzdDogYW55O1xuICBtYXRlcmlhbHNMaXN0OiBhbnk7XG4gIG1hdGVyaWFsc0xpc3RGb3JDdXN0b21lcjogYW55O1xuICBjdXN0b21lcnNMaXN0OiBhbnk7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHB1YmxpYyBzbmFja0JhcjogTWF0U25hY2tCYXIsXG4gICAgQEluamVjdCgnbWVtYmVyRGF0YScpIHByaXZhdGUgY29uZmlnOiBDb29sbWFwQ29uZmlnTW9kZWwsXG4gICAgcHVibGljIG5nWm9uZTogTmdab25lLFxuICApIHtcbiAgICB0aGlzLmFuYWx5dGljc1JFU1RVUkwgPSBjb25maWcuYW5hbHl0aWNzUkVTVFVSTDtcbiAgICB0aGlzLlJFU1RVUkxQcmVmaXggPSBjb25maWcuUkVTVFVSTFByZWZpeDtcbiAgfVxuICBnZXREYXRlRm9ybWF0KHN0clZhbDogRGF0ZSB8IG51bGwsIHNlcHJhdGVyPzogc3RyaW5nKSB7XG4gICAgc2VwcmF0ZXIgPSBzZXByYXRlciA/IHNlcHJhdGVyIDogJy0nO1xuICAgIGNvbnN0IG15ZGF0ZSA9IHN0clZhbDtcbiAgICByZXR1cm4gKFxuICAgICAgbXlkYXRlPy5nZXRGdWxsWWVhcigpICtcbiAgICAgIHNlcHJhdGVyICtcbiAgICAgICgobXlkYXRlID8gbXlkYXRlLmdldE1vbnRoKCkgOiAwKSArIDEpICtcbiAgICAgIHNlcHJhdGVyICtcbiAgICAgIG15ZGF0ZT8uZ2V0RGF0ZSgpXG4gICAgKTtcbiAgfVxuICBnZXREYXRhKHBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgYCR7dGhpcy5hbmFseXRpY3NSRVNUVVJMfSR7dGhpcy5jb25maWcucmVwb3NpdG9yeX0vJHtwYXRofWBcbiAgICApO1xuICB9XG4gIHBvc3RkYXRhKHBhdGg6IHN0cmluZywgZGF0YTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgYCR7dGhpcy5hbmFseXRpY3NSRVNUVVJMfSR7dGhpcy5jb25maWcucmVwb3NpdG9yeX0vJHtwYXRofWAsXG4gICAgICBkYXRhXG4gICAgKTtcbiAgfVxuICBwb3N0RGF0YVdpdGhSZXN0VXJsKHBhdGg6IHN0cmluZywgZGF0YTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuUkVTVFVSTFByZWZpeH0ke3BhdGh9YCwgZGF0YSk7XG4gIH1cbiAgXG4gIGF1dG9jb21wbGV0ZShzZWFyY2hFbGVtZW50UmVmLCBmb3JtPzogRm9ybUdyb3VwKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGF1dG9jb21wbGV0ZSA9IG5ldyBnb29nbGUubWFwcy5wbGFjZXMuQXV0b2NvbXBsZXRlKHNlYXJjaEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwge1xuICAgICAgICB0eXBlczogWydhZGRyZXNzJ11cbiAgICAgIH0pO1xuICAgICAgZ29vZ2xlLm1hcHMuZXZlbnQuYWRkTGlzdGVuZXIoYXV0b2NvbXBsZXRlLCAncGxhY2VfY2hhbmdlZCcsICgpID0+IHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBwbGFjZSA9IGF1dG9jb21wbGV0ZS5nZXRQbGFjZSgpO1xuICAgICAgICAgIHJlc29sdmUoe2xhdDogcGxhY2UuZ2VvbWV0cnkubG9jYXRpb24ubGF0KCksIGxuZzogcGxhY2UuZ2VvbWV0cnkubG9jYXRpb24ubG5nKCksIGZvcm1hdHRlZF9hZGRyZXNzOiBwbGFjZVsnZm9ybWF0dGVkX2FkZHJlc3MnXX0pXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBvcGVuU25hY2tCYXIobWVzc2FnZTogc3RyaW5nLCBjbGFzc05hbWU/OiBzdHJpbmcpIHtcbiAgICB0aGlzLnNuYWNrQmFyLm9wZW4obWVzc2FnZSwgJycsIHtcbiAgICAgIGR1cmF0aW9uOiA1MDAwLFxuICAgICAgdmVydGljYWxQb3NpdGlvbjogJ3RvcCcsXG4gICAgICBob3Jpem9udGFsUG9zaXRpb246ICdjZW50ZXInLFxuICAgICAgcGFuZWxDbGFzczogW2NsYXNzTmFtZSA/IGNsYXNzTmFtZSA6ICdkZWZhdWx0J10sXG4gICAgfSk7XG4gIH1cblxuICBtYWtlT3B0aW9ucyhpdGVtOiBSb3V0ZSkge1xuICAgIGlmIChpdGVtLm9yZGVyX251bWJlcikge1xuICAgICAgdGhpcy5qY29kZU9wdGlvbnMuZmluZEluZGV4KChlbGVtKSA9PiBlbGVtLmpvYl9pZCA9PT0gaXRlbS5qb2JfaWQpID09PSAtMVxuICAgICAgICA/IHRoaXMuamNvZGVPcHRpb25zLnB1c2goe1xuICAgICAgICAgICAgam9iX2NvZGU6IGl0ZW0ub3JkZXJfbnVtYmVyLFxuICAgICAgICAgICAgam9iX2lkOiBpdGVtLmpvYl9pZCxcbiAgICAgICAgICB9KVxuICAgICAgICA6IG51bGw7XG4gICAgICBpZiAoaXRlbS5kcml2ZXJfbGlzdCAmJiBpdGVtLmRyaXZlcl9saXN0Py5sZW5ndGggPiAwKSB7XG4gICAgICAgIGl0ZW0uZHJpdmVyX2xpc3QuZm9yRWFjaCgoZHJpdmVyKSA9PiB7XG4gICAgICAgICAgdGhpcy5kcml2ZXJPcHRpb24uZmluZEluZGV4KFxuICAgICAgICAgICAgKGVsZW0pID0+IGVsZW0gPT09IGRyaXZlclsnZHJpdmVyX25hbWUnXVxuICAgICAgICAgICkgPT09IC0xXG4gICAgICAgICAgICA/IHRoaXMuZHJpdmVyT3B0aW9uLnB1c2goZHJpdmVyWydkcml2ZXJfbmFtZSddKVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgIHRoaXMudHJ1Y2tpbmdDb21wYW5heU9wdGlvbi5maW5kSW5kZXgoXG4gICAgICAgICAgICAoZWxlbSkgPT4gZWxlbSA9PT0gZHJpdmVyWyd0cnVja2luZ19jb21wYW55J11cbiAgICAgICAgICApID09PSAtMVxuICAgICAgICAgICAgPyB0aGlzLnRydWNraW5nQ29tcGFuYXlPcHRpb24ucHVzaChkcml2ZXJbJ3RydWNraW5nX2NvbXBhbnknXSlcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucGlja3VwT3B0aW9ucy5maW5kSW5kZXgoKGVsZW0pID0+IGVsZW0gPT09IGl0ZW0ucGlja3VwX2xvY2F0aW9uKSA9PT0gLTFcbiAgICAgID8gdGhpcy5waWNrdXBPcHRpb25zLnB1c2goaXRlbS5waWNrdXBfbG9jYXRpb24pXG4gICAgICA6IG51bGw7XG4gICAgdGhpcy5kZXN0T3B0aW9ucy5maW5kSW5kZXgoKGVsZW0pID0+IGVsZW0gPT09IGl0ZW0uZGVsaXZlcnlfbG9jYXRpb24pID09PSAtMVxuICAgICAgPyB0aGlzLmRlc3RPcHRpb25zLnB1c2goaXRlbS5kZWxpdmVyeV9sb2NhdGlvbilcbiAgICAgIDogbnVsbDtcbiAgICB0aGlzLmN1c3RvbWVyT3B0aW9ucy5maW5kSW5kZXgoXG4gICAgICAoY3VzdG9tZXIpID0+IGN1c3RvbWVyID09PSBpdGVtLmN1c3RvbWVyX25hbWVcbiAgICApID09PSAtMVxuICAgICAgPyB0aGlzLmN1c3RvbWVyT3B0aW9ucy5wdXNoKGl0ZW0uY3VzdG9tZXJfbmFtZSlcbiAgICAgIDogbnVsbDtcbiAgICB0aGlzLnVuaXRPcHRpb25zLmZpbmRJbmRleCgoZWxlbSkgPT4gZWxlbSA9PT0gaXRlbS51bml0KSA9PT0gLTFcbiAgICAgID8gdGhpcy51bml0T3B0aW9ucy5wdXNoKGl0ZW0udW5pdClcbiAgICAgIDogbnVsbDtcblxuICAgIGlmKGl0ZW0ubWF0ZXJpYWwpIHtcbiAgICAgIHRoaXMubWF0ZXJpYWxPcHRpb25zLmZpbmRJbmRleCgoZWxlbSkgPT4gZWxlbSA9PT0gaXRlbS5tYXRlcmlhbCkgPT09IC0xXG4gICAgICA/IHRoaXMubWF0ZXJpYWxPcHRpb25zLnB1c2goaXRlbS5tYXRlcmlhbClcbiAgICAgIDogbnVsbDtcbiAgICB9XG4gICAgaWYgKGl0ZW0ucm91dGVfbmFtZSlcbiAgICAgIHRoaXMucm91dGVOYW1lT3B0aW9ucy5maW5kSW5kZXgoKGVsZW0pID0+IGVsZW0gPT09IGl0ZW0ucm91dGVfbmFtZSkgPT09IC0xXG4gICAgICAgID8gdGhpcy5yb3V0ZU5hbWVPcHRpb25zLnB1c2goaXRlbS5yb3V0ZV9uYW1lKVxuICAgICAgICA6IG51bGw7XG4gIH1cblxuICBmaWx0ZXIodmFsdWU6IHN0cmluZywgZmlsdGVyczogYW55KSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3QgZmlsdGVyVmFsdWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChmaWx0ZXJWYWx1ZSA9PT0gJycpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3Qgc2VhcmNoUmVzdWx0czogYW55W10gPSBbXTtcbiAgICB0aGlzLnVuaXRPcHRpb25zLm1hcCgodW5pdCkgPT4ge1xuICAgICAgaWYgKHVuaXQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXJWYWx1ZSkpIHtcbiAgICAgICAgc2VhcmNoUmVzdWx0cy5wdXNoKHsgdHlwZTogJ3VuaXQnLCBsYWJlbDogdW5pdCwgdmFsdWU6IHVuaXQgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5jdXN0b21lck9wdGlvbnMubWFwKCh1bml0KSA9PiB7XG4gICAgICBpZiAodW5pdC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlclZhbHVlKSkge1xuICAgICAgICBzZWFyY2hSZXN1bHRzLnB1c2goeyB0eXBlOiAnY3VzdG9tZXInLCBsYWJlbDogdW5pdCwgdmFsdWU6IHVuaXQgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZih0aGlzLm1hdGVyaWFsT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHRoaXMubWF0ZXJpYWxPcHRpb25zLm1hcCgodW5pdCkgPT4ge1xuICAgICAgICBpZiAodW5pdC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlclZhbHVlKSkge1xuICAgICAgICAgIHNlYXJjaFJlc3VsdHMucHVzaCh7IHR5cGU6ICdtYXRlcmlhbCcsIGxhYmVsOiB1bml0LCB2YWx1ZTogdW5pdCB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMucGlja3VwT3B0aW9ucy5tYXAoKHVuaXQpID0+IHtcbiAgICAgIGlmICh1bml0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyVmFsdWUpKSB7XG4gICAgICAgIHNlYXJjaFJlc3VsdHMucHVzaCh7XG4gICAgICAgICAgdHlwZTogJ3BpY2t1cCBsb2NhdGlvbicsXG4gICAgICAgICAgbGFiZWw6IHVuaXQsXG4gICAgICAgICAgdmFsdWU6IHVuaXQsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuZGVzdE9wdGlvbnMubWFwKCh1bml0KSA9PiB7XG4gICAgICBpZiAodW5pdC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlclZhbHVlKSkge1xuICAgICAgICBzZWFyY2hSZXN1bHRzLnB1c2goe1xuICAgICAgICAgIHR5cGU6ICdkZXN0aW5hdGlvbiBsb2NhdGlvbicsXG4gICAgICAgICAgbGFiZWw6IHVuaXQsXG4gICAgICAgICAgdmFsdWU6IHVuaXQsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuamNvZGVPcHRpb25zLm1hcCgodW5pdCkgPT4ge1xuICAgICAgaWYgKHVuaXQuam9iX2NvZGUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXJWYWx1ZSkpIHtcbiAgICAgICAgc2VhcmNoUmVzdWx0cy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiAnam9iJyxcbiAgICAgICAgICBsYWJlbDogdW5pdFsnam9iX2NvZGUnXSxcbiAgICAgICAgICB2YWx1ZTogdW5pdCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5kcml2ZXJPcHRpb24ubWFwKCh1bml0KSA9PiB7XG4gICAgICBpZiAodW5pdC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlclZhbHVlKSkge1xuICAgICAgICBzZWFyY2hSZXN1bHRzLnB1c2goeyB0eXBlOiAnRHJpdmVyJywgbGFiZWw6IHVuaXQsIHZhbHVlOiB1bml0IH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy50cnVja2luZ0NvbXBhbmF5T3B0aW9uLm1hcCgodW5pdCkgPT4ge1xuICAgICAgaWYgKHVuaXQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXJWYWx1ZSkpIHtcbiAgICAgICAgc2VhcmNoUmVzdWx0cy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiAnVHJ1Y2tpbmcgQ29tcGFueScsXG4gICAgICAgICAgbGFiZWw6IHVuaXQsXG4gICAgICAgICAgdmFsdWU6IHVuaXQsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMucm91dGVOYW1lT3B0aW9ucy5tYXAoKHVuaXQpID0+IHtcbiAgICAgIGlmICh1bml0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyVmFsdWUpKSB7XG4gICAgICAgIHNlYXJjaFJlc3VsdHMucHVzaCh7IHR5cGU6ICdSb3V0ZSBuYW1lJywgbGFiZWw6IHVuaXQsIHZhbHVlOiB1bml0IH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHNlYXJjaERpY3Q6IGFueSA9IHt9O1xuICAgIGZpbHRlcnMubWFwKChmaWx0ZXI6IHsgW3g6IHN0cmluZ106IGFueSB9KSA9PiB7XG4gICAgICBzZWFyY2hEaWN0W2ZpbHRlclsnbmFtZSddICsgZmlsdGVyWyd0eXBlJ11dID0gZmlsdGVyO1xuICAgIH0pO1xuICAgIGNvbnN0IGZ1cnRoZXJGaWx0ZXI6IGFueVtdID0gW107XG4gICAgc2VhcmNoUmVzdWx0cy5tYXAoKHNlYXJjaCkgPT4ge1xuICAgICAgaWYgKHNlYXJjaFsnbGFiZWwnXSArIHNlYXJjaFsndHlwZSddIGluIHNlYXJjaERpY3QpIHtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZ1cnRoZXJGaWx0ZXIucHVzaChzZWFyY2gpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBmdXJ0aGVyRmlsdGVyO1xuICB9XG5cbiAgZ2V0U2VhcmNoUmVzdWx0cyhsaXN0OiBSb3V0ZVtdLCBmaWx0ZXJ2YWw6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIGxpc3QuZmlsdGVyKChlbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCByZXN1bHRfbGlzdF9ib29sZWFuID0gW107XG4gICAgICBpZiAoZmlsdGVydmFsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKGZpbHRlcnZhbFswXVsndHlwZSddID09PSAndW5pdCcpIHtcbiAgICAgICAgICByZXN1bHRfbGlzdF9ib29sZWFuLnB1c2goXG4gICAgICAgICAgICBmaWx0ZXJ2YWxbMF1bJ25hbWUnXSA9PT1cbiAgICAgICAgICAgICAgZWxlbWVudFtmaWx0ZXJ2YWxbMF1bJ3R5cGUnXSBhcyBrZXlvZiBSb3V0ZV1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWx0ZXJ2YWxbMF1bJ3R5cGUnXSA9PT0gJ2N1c3RvbWVyJykge1xuICAgICAgICAgIHJlc3VsdF9saXN0X2Jvb2xlYW4ucHVzaChcbiAgICAgICAgICAgIGZpbHRlcnZhbFswXVsnbmFtZSddID09PSBlbGVtZW50WydjdXN0b21lcl9uYW1lJ11cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWx0ZXJ2YWxbMF1bJ3R5cGUnXSA9PT0gJ21hdGVyaWFsJykge1xuICAgICAgICAgIHJlc3VsdF9saXN0X2Jvb2xlYW4ucHVzaChcbiAgICAgICAgICAgIGZpbHRlcnZhbFswXVsnbmFtZSddID09PVxuICAgICAgICAgICAgICBlbGVtZW50W2ZpbHRlcnZhbFswXVsndHlwZSddIGFzIGtleW9mIFJvdXRlXVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlcnZhbFswXVsndHlwZSddID09PSAncGlja3VwIGxvY2F0aW9uJykge1xuICAgICAgICAgIHJlc3VsdF9saXN0X2Jvb2xlYW4ucHVzaChcbiAgICAgICAgICAgIGZpbHRlcnZhbFswXVsnbmFtZSddID09PSBlbGVtZW50WydwaWNrdXBfbG9jYXRpb24nXVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlcnZhbFswXVsndHlwZSddID09PSAnZGVzdGluYXRpb24gbG9jYXRpb24nKSB7XG4gICAgICAgICAgcmVzdWx0X2xpc3RfYm9vbGVhbi5wdXNoKFxuICAgICAgICAgICAgZmlsdGVydmFsWzBdWyduYW1lJ10gPT09IGVsZW1lbnRbJ2RlbGl2ZXJ5X2xvY2F0aW9uJ11cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWx0ZXJ2YWxbMF1bJ3R5cGUnXSA9PT0gJ2pvYicpIHtcbiAgICAgICAgICByZXN1bHRfbGlzdF9ib29sZWFuLnB1c2goXG4gICAgICAgICAgICBmaWx0ZXJ2YWxbMF1bJ25hbWUnXSA9PT0gZWxlbWVudFsnb3JkZXJfbnVtYmVyJ11cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWx0ZXJ2YWxbMF1bJ3R5cGUnXSA9PT0gJ1JvdXRlIG5hbWUnKSB7XG4gICAgICAgICAgcmVzdWx0X2xpc3RfYm9vbGVhbi5wdXNoKFxuICAgICAgICAgICAgZmlsdGVydmFsWzBdWyduYW1lJ10gPT09IGVsZW1lbnRbJ3JvdXRlX25hbWUnXVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlcnZhbFswXVsndHlwZSddID09PSAnRHJpdmVyJykge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gZWxlbWVudC5kcml2ZXJfbGlzdD8uZmluZEluZGV4KChlbGUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJ2YWxbMF1bJ25hbWUnXSA9PT0gZWxlWydkcml2ZXJfbmFtZSddO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHJlc3VsdF9saXN0X2Jvb2xlYW4ucHVzaCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVydmFsWzBdWyd0eXBlJ10gPT09ICdUcnVja2luZyBDb21wYW55Jykge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gZWxlbWVudC5kcml2ZXJfbGlzdD8uZmluZEluZGV4KChlbGUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJ2YWxbMF1bJ25hbWUnXSA9PT0gZWxlWyd0cnVja2luZ19jb21wYW55J107XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkgcmVzdWx0X2xpc3RfYm9vbGVhbi5wdXNoKHRydWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocmVzdWx0X2xpc3RfYm9vbGVhbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiByZXN1bHRfbGlzdF9ib29sZWFuLnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiAmJiBjdXJyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgfVxuXG4gIGNsZWFyT3B0aW9ucygpIHtcbiAgICB0aGlzLnBpY2t1cE9wdGlvbnMgPSBbXTtcbiAgICB0aGlzLmRlc3RPcHRpb25zID0gW107XG4gICAgdGhpcy5vd25lck9wdGlvbnMgPSBbXTtcbiAgICB0aGlzLmN1c3RvbWVyT3B0aW9ucyA9IFtdO1xuICAgIHRoaXMudW5pdE9wdGlvbnMgPSBbXTtcbiAgICB0aGlzLm1hdGVyaWFsT3B0aW9ucyA9IFtdO1xuICAgIHRoaXMuamNvZGVPcHRpb25zID0gW107XG4gICAgdGhpcy5yb3V0ZU5hbWVPcHRpb25zID0gW107XG4gIH1cbiAgc2V0ZGljdFZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5kaWN0LnNldChrZXksIHZhbHVlKTtcbiAgfVxuICBnZXRkaWN0VmFsdWUoa2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZSh0aGlzLmRpY3QuZ2V0KGtleSkpO1xuICB9XG4gIHJlbW92ZWRpY3RWYWx1ZShrZXk6IHN0cmluZykge1xuICAgIHRoaXMuZGljdC5kZWxldGUoa2V5KTtcbiAgfVxuICBjb252ZXlTZWFyY2hJY29uKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGZldGNoVW5pdHNMaXN0KCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoIXRoaXMudW5pdHNMaXN0KSB7XG4gICAgICAgIHRoaXMuZ2V0RGF0YSgndW5pdC9saXN0L3ZpZXcnKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgdGhpcy51bml0c0xpc3QgPSByZXMuZGF0YTtcbiAgICAgICAgICAgIHJlc29sdmUodGhpcy51bml0c0xpc3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKHRoaXMudW5pdHNMaXN0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGZldGNoTWF0ZXJpYWxzTGlzdCgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLm1hdGVyaWFsc0xpc3QpIHtcbiAgICAgICAgdGhpcy5nZXREYXRhKCdtYXRlcmlhbC9saXN0L3ZpZXcnKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5tYXRlcmlhbHNMaXN0ID0gdGhpcy5maWx0ZXJtYXRlcmlhbExpc3QocmVzLmRhdGEpO1xuICAgICAgICAgIHJlc29sdmUodGhpcy5tYXRlcmlhbHNMaXN0KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKHRoaXMubWF0ZXJpYWxzTGlzdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgZmV0Y2hNYXRlcmlhbHNMaXN0Rm9yQ3VzdG9tZXIoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghdGhpcy5tYXRlcmlhbHNMaXN0Rm9yQ3VzdG9tZXIpIHtcbiAgICAgICAgdGhpcy5nZXREYXRhKCdtYXRlcmlhbC9saXN0L3ZpZXcnKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5tYXRlcmlhbHNMaXN0Rm9yQ3VzdG9tZXIgPSB0aGlzLmZpbHRlcm1hdGVyaWFsTGlzdChyZXMuZGF0YSk7XG4gICAgICAgICAgcmVzb2x2ZSh0aGlzLm1hdGVyaWFsc0xpc3RGb3JDdXN0b21lcik7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZSh0aGlzLm1hdGVyaWFsc0xpc3RGb3JDdXN0b21lcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgZmlsdGVybWF0ZXJpYWxMaXN0KGxpc3QpIHtcbiAgICBsZXQgbWV0ZXJpYWxMaXN0ID0gW107XG4gICAgbGlzdC5tYXAoKGl0ZW0pID0+IHtcbiAgICAgIGlmIChpdGVtLnN1Yi5sZW5ndGggPiAwKSB7XG4gICAgICAgIGl0ZW0uc3ViLm1hcCgoc3ViSXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChzdWJJdGVtLmFkZF90b19tYXJrZXRwbGFjZSkge1xuICAgICAgICAgICAgc3ViSXRlbS5tYXRlcmlhbCA9IGl0ZW0ubWF0ZXJpYWw7XG4gICAgICAgICAgICBzdWJJdGVtLm1hdGVyaWFsX2lkID0gaXRlbS5tYXRlcmlhbF9pZDtcbiAgICAgICAgICAgIHN1Ykl0ZW0ubGFiZWwgPSBpdGVtLm1hdGVyaWFsICsgJyB8ICcgKyBzdWJJdGVtLnN1Yl9tYXRlcmlhbDtcbiAgICAgICAgICAgIG1ldGVyaWFsTGlzdC5wdXNoKHN1Ykl0ZW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgbWV0ZXJpYWxMaXN0LnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiBhLmxhYmVsLmxvY2FsZUNvbXBhcmUoYi5sYWJlbCkpO1xuICAgIHJldHVybiBtZXRlcmlhbExpc3Q7XG4gIH1cbiAgZmV0Y2hDdXN0b21lcnNMaXN0KCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY3VzdG9tZXJzTGlzdCkge1xuICAgICAgICB0aGlzLmdldERhdGEoJ2NvbXBhbnkvbGlzdC92aWV3Jykuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tZXJzTGlzdCA9IHJlcy5kYXRhO1xuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmN1c3RvbWVyc0xpc3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKHRoaXMuY3VzdG9tZXJzTGlzdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -209,9 +209,11 @@ class UtilsService {
|
|
|
209
209
|
this.unitOptions.findIndex((elem) => elem === item.unit) === -1
|
|
210
210
|
? this.unitOptions.push(item.unit)
|
|
211
211
|
: null;
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
212
|
+
if (item.material) {
|
|
213
|
+
this.materialOptions.findIndex((elem) => elem === item.material) === -1
|
|
214
|
+
? this.materialOptions.push(item.material)
|
|
215
|
+
: null;
|
|
216
|
+
}
|
|
215
217
|
if (item.route_name)
|
|
216
218
|
this.routeNameOptions.findIndex((elem) => elem === item.route_name) === -1
|
|
217
219
|
? this.routeNameOptions.push(item.route_name)
|
|
@@ -236,11 +238,13 @@ class UtilsService {
|
|
|
236
238
|
searchResults.push({ type: 'customer', label: unit, value: unit });
|
|
237
239
|
}
|
|
238
240
|
});
|
|
239
|
-
this.materialOptions.
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
241
|
+
if (this.materialOptions.length) {
|
|
242
|
+
this.materialOptions.map((unit) => {
|
|
243
|
+
if (unit.toLowerCase().includes(filterValue)) {
|
|
244
|
+
searchResults.push({ type: 'material', label: unit, value: unit });
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
}
|
|
244
248
|
this.pickupOptions.map((unit) => {
|
|
245
249
|
if (unit.toLowerCase().includes(filterValue)) {
|
|
246
250
|
searchResults.push({
|
|
@@ -594,7 +598,7 @@ class CoolmapService {
|
|
|
594
598
|
: route.route_name
|
|
595
599
|
? route.route_name
|
|
596
600
|
: '',
|
|
597
|
-
material: route.
|
|
601
|
+
material: route.material ? route.material : '',
|
|
598
602
|
type: route.unit ? route.unit : '',
|
|
599
603
|
};
|
|
600
604
|
this.createPopup(datasetForPopup);
|
|
@@ -677,7 +681,7 @@ class CoolmapService {
|
|
|
677
681
|
: route.route_name
|
|
678
682
|
? route.route_name
|
|
679
683
|
: '',
|
|
680
|
-
material: route.
|
|
684
|
+
material: route.material ? route.material : '',
|
|
681
685
|
type: route.unit ? route.unit : '',
|
|
682
686
|
};
|
|
683
687
|
this.createPopup(datasetForPopup);
|
|
@@ -737,8 +741,8 @@ class CoolmapService {
|
|
|
737
741
|
: arcDetails.layer.props.data.route.route_name
|
|
738
742
|
? arcDetails.layer.props.data.route.route_name
|
|
739
743
|
: '',
|
|
740
|
-
material: arcDetails.layer.props.data.route.
|
|
741
|
-
? arcDetails.layer.props.data.route.
|
|
744
|
+
material: arcDetails.layer.props.data.route.material
|
|
745
|
+
? arcDetails.layer.props.data.route.material
|
|
742
746
|
: '',
|
|
743
747
|
type: arcDetails.layer.props.data.route.unit
|
|
744
748
|
? arcDetails.layer.props.data.route.unit
|
|
@@ -756,8 +760,7 @@ class CoolmapService {
|
|
|
756
760
|
});
|
|
757
761
|
this.popup
|
|
758
762
|
.setLngLat(datasetForPopup.coordinate)
|
|
759
|
-
.setHTML(
|
|
760
|
-
<div class="destination">
|
|
763
|
+
.setHTML(`<div class="destination">
|
|
761
764
|
<div class="duration">
|
|
762
765
|
<p class="pickprt"><b>Pickup Location:</b> ${datasetForPopup.pickup}</p>
|
|
763
766
|
<p class="dropprt"><b>Drop Location:</b> ${datasetForPopup.drop}</p>
|
|
@@ -768,11 +771,15 @@ class CoolmapService {
|
|
|
768
771
|
${datasetForPopup.customer
|
|
769
772
|
? '<span><b>Customer:</b> ' + datasetForPopup.customer + '</span>'
|
|
770
773
|
: ''}
|
|
771
|
-
<span
|
|
772
|
-
|
|
774
|
+
<span>
|
|
775
|
+
<b>${datasetForPopup.routeType} Name:</b>
|
|
776
|
+
${datasetForPopup.title}
|
|
777
|
+
</span>
|
|
778
|
+
${datasetForPopup.material
|
|
779
|
+
? '<span><b>Material:</b> ' + datasetForPopup.material + '</span>'
|
|
780
|
+
: ''}
|
|
773
781
|
<span><b>Type:</b> ${datasetForPopup.type}</span>
|
|
774
|
-
</div
|
|
775
|
-
`)
|
|
782
|
+
</div>`)
|
|
776
783
|
.addTo(this.map);
|
|
777
784
|
}
|
|
778
785
|
hexToRGB(hex) {
|