@aggdirect/coolmap-services 1.0.4 → 1.0.6
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/bundles/coolmap-services.umd.js +1125 -0
- package/bundles/coolmap-services.umd.js.map +1 -0
- package/bundles/coolmap-services.umd.min.js +2 -0
- package/bundles/coolmap-services.umd.min.js.map +1 -0
- package/{index.d.ts → coolmap-services.d.ts} +0 -1
- package/coolmap-services.metadata.json +1 -0
- package/esm2015/lib/service/coolmap.service.js +449 -0
- package/esm2015/lib/service/utils.service.js +216 -0
- package/fesm2015/{coolmap-services.mjs → coolmap-services.js} +49 -56
- package/fesm2015/coolmap-services.js.map +1 -0
- package/lib/service/coolmap.service.d.ts +0 -3
- package/lib/service/utils.service.d.ts +0 -3
- package/package.json +8 -21
- package/esm2020/aggdirect-coolmap-services.mjs +0 -5
- package/esm2020/lib/service/coolmap.service.mjs +0 -439
- package/esm2020/lib/service/utils.service.mjs +0 -210
- package/fesm2015/aggdirect-coolmap-services.mjs +0 -709
- package/fesm2015/aggdirect-coolmap-services.mjs.map +0 -1
- package/fesm2015/coolmap-services.mjs.map +0 -1
- package/fesm2020/aggdirect-coolmap-services.mjs +0 -691
- package/fesm2020/aggdirect-coolmap-services.mjs.map +0 -1
- package/fesm2020/coolmap-services.mjs +0 -691
- package/fesm2020/coolmap-services.mjs.map +0 -1
- /package/{esm2020/coolmap-services.mjs → esm2015/coolmap-services.js} +0 -0
- /package/{esm2020/lib/service/data-model.mjs → esm2015/lib/service/data-model.js} +0 -0
- /package/{esm2020/public-api.mjs → esm2015/public-api.js} +0 -0
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import { HttpClient } from '@angular/common/http';
|
|
2
|
+
import { Injectable } from '@angular/core';
|
|
3
|
+
import { MatSnackBar } from '@angular/material/snack-bar';
|
|
4
|
+
import { BehaviorSubject } from 'rxjs';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/common/http";
|
|
7
|
+
import * as i2 from "@angular/material/snack-bar";
|
|
8
|
+
export class UtilsService {
|
|
9
|
+
constructor(http, snackBar) {
|
|
10
|
+
this.http = http;
|
|
11
|
+
this.snackBar = snackBar;
|
|
12
|
+
this.analyticsRESTURL = '';
|
|
13
|
+
this.RESTURLPrefix = '';
|
|
14
|
+
this.pickupOptions = [];
|
|
15
|
+
this.destOptions = [];
|
|
16
|
+
this.ownerOptions = [];
|
|
17
|
+
this.customerOptions = [];
|
|
18
|
+
this.unitOptions = [];
|
|
19
|
+
this.materialOptions = [];
|
|
20
|
+
this.jcodeOptions = [];
|
|
21
|
+
this.driverOption = [];
|
|
22
|
+
this.truckingCompanayOption = [];
|
|
23
|
+
this.routeNameOptions = [];
|
|
24
|
+
this.preventnavChange = new BehaviorSubject(false);
|
|
25
|
+
this.navChangeObserve = this.preventnavChange.asObservable();
|
|
26
|
+
this.clearViewRouteforJobCode = new BehaviorSubject(false);
|
|
27
|
+
this.clearViewRouteforJobCodeObserve = this.clearViewRouteforJobCode.asObservable();
|
|
28
|
+
this.preVentJobdetailclose = new BehaviorSubject(false);
|
|
29
|
+
this.getpreVentJobdetailclose = this.preVentJobdetailclose.asObservable();
|
|
30
|
+
this.routeDetailsUtility = new BehaviorSubject({});
|
|
31
|
+
this.getrouteDetailsUtility = this.routeDetailsUtility.asObservable();
|
|
32
|
+
this.removeMapEntity = new BehaviorSubject({});
|
|
33
|
+
this.removeMapEntityUtility = this.removeMapEntity.asObservable();
|
|
34
|
+
this.dict = new Map();
|
|
35
|
+
this.analyticsRESTURL = 'https://test-analytics.aggdirect.com/REST/';
|
|
36
|
+
this.RESTURLPrefix = 'https://test-server.aggdirect.com/REST/';
|
|
37
|
+
}
|
|
38
|
+
getDateFormat(strVal, seprater) {
|
|
39
|
+
seprater = seprater ? seprater : '-';
|
|
40
|
+
const mydate = strVal;
|
|
41
|
+
return (mydate === null || mydate === void 0 ? void 0 : mydate.getFullYear()) + seprater + ((mydate ? mydate.getMonth() : 0) + 1) + seprater + (mydate === null || mydate === void 0 ? void 0 : mydate.getDate());
|
|
42
|
+
}
|
|
43
|
+
getData(path) { return this.http.get(`${this.analyticsRESTURL}${path}`); }
|
|
44
|
+
postdata(path, data) { return this.http.post(`${this.analyticsRESTURL}${path}`, data); }
|
|
45
|
+
postDataWithRestUrl(path, data) { return this.http.post(`${this.RESTURLPrefix}${path}`, data); }
|
|
46
|
+
fetchAutoCompleteLocations(keyword) {
|
|
47
|
+
return this.http.get(`https://api.mapbox.com/geocoding/v5/mapbox.places/${keyword}.json?access_token=pk.eyJ1Ijoic2FudGFudS1vZ21hIiwiYSI6ImNsOGQ0cDVrNjAweTMzb3RmdG9ieTU5ZDkifQ.I6ZS7mViZYSvBo4zz-mGQQ&country=US`);
|
|
48
|
+
}
|
|
49
|
+
openSnackBar(message, className) {
|
|
50
|
+
this.snackBar.open(message, '', {
|
|
51
|
+
duration: 5000, verticalPosition: 'top', horizontalPosition: 'center', panelClass: [className ? className : 'default']
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
makeOptions(item) {
|
|
55
|
+
var _a;
|
|
56
|
+
if (item.order_number) {
|
|
57
|
+
(this.jcodeOptions.findIndex((elem) => elem.job_id === item.job_id) === -1) ? this.jcodeOptions.push({ job_code: item.order_number, job_id: item.job_id }) : null;
|
|
58
|
+
if (item.driver_list && ((_a = item.driver_list) === null || _a === void 0 ? void 0 : _a.length) > 0) {
|
|
59
|
+
item.driver_list.forEach((driver) => {
|
|
60
|
+
this.driverOption.findIndex(elem => elem === driver['driver_name']) === -1 ? this.driverOption.push(driver['driver_name']) : null;
|
|
61
|
+
this.truckingCompanayOption.findIndex(elem => elem === driver['trucking_company']) === -1 ? this.truckingCompanayOption.push(driver['trucking_company']) : null;
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
((this.pickupOptions.findIndex((elem) => elem === item.pickup_location)) === -1) ? this.pickupOptions.push(item.pickup_location) : null;
|
|
66
|
+
((this.destOptions.findIndex((elem) => elem === item.delivery_location)) === -1) ? this.destOptions.push(item.delivery_location) : null;
|
|
67
|
+
(this.customerOptions.findIndex((customer) => customer === item.customer_name) === -1) ? this.customerOptions.push(item.customer_name) : null;
|
|
68
|
+
(this.unitOptions.findIndex((elem) => elem === item.unit) === -1) ? this.unitOptions.push(item.unit) : null;
|
|
69
|
+
(this.materialOptions.findIndex((elem) => elem === item.material) === -1) ? this.materialOptions.push(item.material) : null;
|
|
70
|
+
if (item.route_name)
|
|
71
|
+
this.routeNameOptions.findIndex(elem => elem === item.route_name) === -1 ? this.routeNameOptions.push(item.route_name) : null;
|
|
72
|
+
}
|
|
73
|
+
filter(value, filters) {
|
|
74
|
+
if (typeof value !== 'string') {
|
|
75
|
+
return [];
|
|
76
|
+
}
|
|
77
|
+
const filterValue = value.toLowerCase();
|
|
78
|
+
if (filterValue === '') {
|
|
79
|
+
return [];
|
|
80
|
+
}
|
|
81
|
+
const searchResults = [];
|
|
82
|
+
this.unitOptions.map(unit => {
|
|
83
|
+
if (unit.toLowerCase().includes(filterValue)) {
|
|
84
|
+
searchResults.push({ "type": "unit", "label": unit, "value": unit });
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
this.customerOptions.map(unit => {
|
|
88
|
+
if (unit.toLowerCase().includes(filterValue)) {
|
|
89
|
+
searchResults.push({ "type": "customer", "label": unit, "value": unit });
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
this.materialOptions.map(unit => {
|
|
93
|
+
if (unit.toLowerCase().includes(filterValue)) {
|
|
94
|
+
searchResults.push({ "type": "material", "label": unit, "value": unit });
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
this.pickupOptions.map(unit => {
|
|
98
|
+
if (unit.toLowerCase().includes(filterValue)) {
|
|
99
|
+
searchResults.push({ "type": "pickup location", "label": unit, "value": unit });
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
this.destOptions.map(unit => {
|
|
103
|
+
if (unit.toLowerCase().includes(filterValue)) {
|
|
104
|
+
searchResults.push({ "type": "destination location", "label": unit, "value": unit });
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
this.jcodeOptions.map(unit => {
|
|
108
|
+
if (unit.job_code.toLowerCase().includes(filterValue)) {
|
|
109
|
+
searchResults.push({ "type": "job", "label": unit['job_code'], "value": unit });
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
this.driverOption.map(unit => {
|
|
113
|
+
if (unit.toLowerCase().includes(filterValue)) {
|
|
114
|
+
searchResults.push({ "type": "Driver", "label": unit, "value": unit });
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
this.truckingCompanayOption.map(unit => {
|
|
118
|
+
if (unit.toLowerCase().includes(filterValue)) {
|
|
119
|
+
searchResults.push({ "type": "Trucking Company", "label": unit, "value": unit });
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
this.routeNameOptions.map(unit => {
|
|
123
|
+
if (unit.toLowerCase().includes(filterValue)) {
|
|
124
|
+
searchResults.push({ "type": "Route name", "label": unit, "value": unit });
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
const searchDict = {};
|
|
128
|
+
filters.map((filter) => {
|
|
129
|
+
searchDict[filter['name'] + filter['type']] = filter;
|
|
130
|
+
});
|
|
131
|
+
const furtherFilter = [];
|
|
132
|
+
searchResults.map(search => {
|
|
133
|
+
if ((search['label'] + search['type']) in searchDict) { }
|
|
134
|
+
else {
|
|
135
|
+
furtherFilter.push(search);
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
return furtherFilter;
|
|
139
|
+
}
|
|
140
|
+
getSearchResults(list, filterval) {
|
|
141
|
+
return list.filter(element => {
|
|
142
|
+
var _a, _b;
|
|
143
|
+
const result_list_boolean = [];
|
|
144
|
+
if (filterval.length > 0) {
|
|
145
|
+
if (filterval[0]['type'] === 'unit') {
|
|
146
|
+
result_list_boolean.push(filterval[0]['name'] === element[filterval[0]['type']]);
|
|
147
|
+
}
|
|
148
|
+
if (filterval[0]['type'] === 'customer') {
|
|
149
|
+
result_list_boolean.push(filterval[0]['name'] === element['customer_name']);
|
|
150
|
+
}
|
|
151
|
+
if (filterval[0]['type'] === 'material') {
|
|
152
|
+
result_list_boolean.push(filterval[0]['name'] === element[filterval[0]['type']]);
|
|
153
|
+
}
|
|
154
|
+
if (filterval[0]['type'] === 'pickup location') {
|
|
155
|
+
result_list_boolean.push(filterval[0]['name'] === element['pickup_location']);
|
|
156
|
+
}
|
|
157
|
+
if (filterval[0]['type'] === 'destination location') {
|
|
158
|
+
result_list_boolean.push(filterval[0]['name'] === element['delivery_location']);
|
|
159
|
+
}
|
|
160
|
+
if (filterval[0]['type'] === 'job') {
|
|
161
|
+
result_list_boolean.push(filterval[0]['name'] === element['order_number']);
|
|
162
|
+
}
|
|
163
|
+
if (filterval[0]['type'] === 'Route name') {
|
|
164
|
+
result_list_boolean.push(filterval[0]['name'] === element['route_name']);
|
|
165
|
+
}
|
|
166
|
+
if (filterval[0]['type'] === 'Driver') {
|
|
167
|
+
const index = (_a = element.driver_list) === null || _a === void 0 ? void 0 : _a.findIndex(ele => { return filterval[0]['name'] === ele['driver_name']; });
|
|
168
|
+
if (index !== -1)
|
|
169
|
+
result_list_boolean.push(true);
|
|
170
|
+
}
|
|
171
|
+
if (filterval[0]['type'] === 'Trucking Company') {
|
|
172
|
+
const index = (_b = element.driver_list) === null || _b === void 0 ? void 0 : _b.findIndex(ele => { return filterval[0]['name'] === ele['trucking_company']; });
|
|
173
|
+
if (index !== -1)
|
|
174
|
+
result_list_boolean.push(true);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
if (result_list_boolean.length > 0) {
|
|
178
|
+
return result_list_boolean.reduce((prev, curr) => prev && curr);
|
|
179
|
+
}
|
|
180
|
+
return false;
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
clearOptions() {
|
|
184
|
+
this.pickupOptions = [];
|
|
185
|
+
this.destOptions = [];
|
|
186
|
+
this.ownerOptions = [];
|
|
187
|
+
this.customerOptions = [];
|
|
188
|
+
this.unitOptions = [];
|
|
189
|
+
this.materialOptions = [];
|
|
190
|
+
this.jcodeOptions = [];
|
|
191
|
+
this.routeNameOptions = [];
|
|
192
|
+
}
|
|
193
|
+
setdictValue(key, value) {
|
|
194
|
+
this.dict.set(key, value);
|
|
195
|
+
}
|
|
196
|
+
getdictValue(key) {
|
|
197
|
+
return JSON.parse(this.dict.get(key));
|
|
198
|
+
}
|
|
199
|
+
removedictValue(key) {
|
|
200
|
+
this.dict.delete(key);
|
|
201
|
+
}
|
|
202
|
+
conveySearchIcon(value) {
|
|
203
|
+
if (value && typeof (value) !== 'object')
|
|
204
|
+
return true;
|
|
205
|
+
return false;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
UtilsService.ɵprov = i0.ɵɵdefineInjectable({ factory: function UtilsService_Factory() { return new UtilsService(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(i2.MatSnackBar)); }, token: UtilsService, providedIn: "root" });
|
|
209
|
+
UtilsService.decorators = [
|
|
210
|
+
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
211
|
+
];
|
|
212
|
+
UtilsService.ctorParameters = () => [
|
|
213
|
+
{ type: HttpClient },
|
|
214
|
+
{ type: MatSnackBar }
|
|
215
|
+
];
|
|
216
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nvb2xtYXAtc2VydmljZXMvc3JjL2xpYi9zZXJ2aWNlL3V0aWxzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7QUFJdkMsTUFBTSxPQUFPLFlBQVk7SUF3QnZCLFlBQW1CLElBQWdCLEVBQVEsUUFBcUI7UUFBN0MsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUFRLGFBQVEsR0FBUixRQUFRLENBQWE7UUF2QmhFLHFCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUN0QixrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQUNuQixrQkFBYSxHQUFVLEVBQUUsQ0FBQztRQUMxQixnQkFBVyxHQUFVLEVBQUUsQ0FBQztRQUN4QixpQkFBWSxHQUFVLEVBQUUsQ0FBQztRQUN6QixvQkFBZSxHQUFVLEVBQUUsQ0FBQztRQUM1QixnQkFBVyxHQUFVLEVBQUUsQ0FBQztRQUN4QixvQkFBZSxHQUFVLEVBQUUsQ0FBQztRQUM1QixpQkFBWSxHQUFVLEVBQUUsQ0FBQztRQUN6QixpQkFBWSxHQUFVLEVBQUUsQ0FBQztRQUN6QiwyQkFBc0IsR0FBVSxFQUFFLENBQUM7UUFDbkMscUJBQWdCLEdBQVUsRUFBRSxDQUFDO1FBQ3RCLHFCQUFnQixHQUFHLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JELHFCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4RCw2QkFBd0IsR0FBRyxJQUFJLGVBQWUsQ0FB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QUMsQ0FBQyxJQUFJLENBQUM7UUFDeEksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3hJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDOUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUM1RyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzVILElBQUksSUFBSSxDQUFDLFVBQVU7WUFBRSxJQUFJLENBQUMsZ0JB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QzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUNELFlBQVksQ0FBQyxHQUFXLEVBQUUsS0FBYTtRQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUNELFlBQVksQ0FBQyxHQUFXO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFDRCxlQUFlLENBQUMsR0FBVztRQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsZ0JBQWdCLENBQUMsS0FBVTtRQUN6QixJQUFHLEtBQUssSUFBSSxPQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssUUFBUTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3BELE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQzs7OztZQTlMRixVQUFVLFNBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzs7WUFOekIsVUFBVTtZQUVWLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFJvdXRlIH0gZnJvbSAnLi9kYXRhLW1vZGVsJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBVdGlsc1NlcnZpY2Uge1xyXG4gIGFuYWx5dGljc1JFU1RVUkwgPSAnJztcclxuICBSRVNUVVJMUHJlZml4ID0gJyc7XHJcbiAgcGlja3VwT3B0aW9uczogYW55W10gPSBbXTtcclxuICBkZXN0T3B0aW9uczogYW55W10gPSBbXTtcclxuICBvd25lck9wdGlvbnM6IGFueVtdID0gW107XHJcbiAgY3VzdG9tZXJPcHRpb25zOiBhbnlbXSA9IFtdO1xyXG4gIHVuaXRPcHRpb25zOiBhbnlbXSA9IFtdO1xyXG4gIG1hdGVyaWFsT3B0aW9uczogYW55W10gPSBbXTtcclxuICBqY29kZU9wdGlvbnM6IGFueVtdID0gW107XHJcbiAgZHJpdmVyT3B0aW9uOiBhbnlbXSA9IFtdO1xyXG4gIHRydWNraW5nQ29tcGFuYXlPcHRpb246IGFueVtdID0gW107XHJcbiAgcm91dGVOYW1lT3B0aW9uczogYW55W10gPSBbXTtcclxuICBwdWJsaWMgcHJldmVudG5hdkNoYW5nZSA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xyXG4gIG5hdkNoYW5nZU9ic2VydmUgPSB0aGlzLnByZXZlbnRuYXZDaGFuZ2UuYXNPYnNlcnZhYmxlKCk7XHJcbiAgY2xlYXJWaWV3Um91dGVmb3JKb2JDb2RlID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XHJcbiAgY2xlYXJWaWV3Um91dGVmb3JKb2JDb2RlT2JzZXJ2ZSA9IHRoaXMuY2xlYXJWaWV3Um91dGVmb3JKb2JDb2RlLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIHByZVZlbnRKb2JkZXRhaWxjbG9zZSA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xyXG4gIGdldHByZVZlbnRKb2JkZXRhaWxjbG9zZSA9IHRoaXMucHJlVmVudEpvYmRldGFpbGNsb3NlLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIHJvdXRlRGV0YWlsc1V0aWxpdHkgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHt9KTtcclxuICBnZXRyb3V0ZURldGFpbHNVdGlsaXR5ID0gdGhpcy5yb3V0ZURldGFpbHNVdGlsaXR5LmFzT2JzZXJ2YWJsZSgpO1xyXG4gIHJlbW92ZU1hcEVudGl0eSA9IG5ldyBCZWhhdmlvclN1YmplY3Qoe30pO1xyXG4gIHJlbW92ZU1hcEVudGl0eVV0aWxpdHkgPSB0aGlzLnJlbW92ZU1hcEVudGl0eS5hc09ic2VydmFibGUoKTtcclxuICBkaWN0ID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgaHR0cDogSHR0cENsaWVudCxwdWJsaWMgc25hY2tCYXI6IE1hdFNuYWNrQmFyKSB7XHJcbiAgICB0aGlzLmFuYWx5dGljc1JFU1RVUkwgPSAnaHR0cHM6Ly90ZXN0LWFuYWx5dGljcy5hZ2dkaXJlY3QuY29tL1JFU1QvJztcclxuICAgIHRoaXMuUkVTVFVSTFByZWZpeCA9ICdodHRwczovL3Rlc3Qtc2VydmVyLmFnZ2RpcmVjdC5jb20vUkVTVC8nO1xyXG4gIH1cclxuICBnZXREYXRlRm9ybWF0KHN0clZhbDogRGF0ZSB8IG51bGwsIHNlcHJhdGVyPzogc3RyaW5nKSB7XHJcbiAgICBzZXByYXRlciA9IHNlcHJhdGVyID8gc2VwcmF0ZXIgOiAnLSc7XHJcbiAgICBjb25zdCBteWRhdGUgPSBzdHJWYWw7XHJcbiAgICByZXR1cm4gbXlkYXRlPy5nZXRGdWxsWWVhcigpICsgc2VwcmF0ZXIgKyAoKG15ZGF0ZSA/IG15ZGF0ZS5nZXRNb250aCgpIDogMCkgKyAxKSArIHNlcHJhdGVyICsgbXlkYXRlPy5nZXREYXRlKCk7XHJcbiAgfVxyXG4gIGdldERhdGEocGF0aDogc3RyaW5nKSB7IHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuYW5hbHl0aWNzUkVTVFVSTH0ke3BhdGh9YCkgfVxyXG4gIHBvc3RkYXRhKHBhdGg6IHN0cmluZywgZGF0YTogYW55KSB7IHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmFuYWx5dGljc1JFU1RVUkx9JHtwYXRofWAsIGRhdGEpIH1cclxuICBwb3N0RGF0YVdpdGhSZXN0VXJsKHBhdGg6IHN0cmluZywgZGF0YTogYW55KSB7IHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLlJFU1RVUkxQcmVmaXh9JHtwYXRofWAsIGRhdGEpIH1cclxuICBmZXRjaEF1dG9Db21wbGV0ZUxvY2F0aW9ucyhrZXl3b3JkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGBodHRwczovL2FwaS5tYXBib3guY29tL2dlb2NvZGluZy92NS9tYXBib3gucGxhY2VzLyR7a2V5d29yZH0uanNvbj9hY2Nlc3NfdG9rZW49cGsuZXlKMUlqb2ljMkZ1ZEdGdWRTMXZaMjFoSWl3aVlTSTZJbU5zT0dRMGNEVnJOakF3ZVRNemIzUm1kRzlpZVRVNVpEa2lmUS5JNlpTN21WaVpZU3ZCbzR6ei1tR1FRJmNvdW50cnk9VVNgKVxyXG4gIH1cclxuICBvcGVuU25hY2tCYXIobWVzc2FnZTogc3RyaW5nLCBjbGFzc05hbWU/OiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc25hY2tCYXIub3BlbihtZXNzYWdlLCAnJywge1xyXG4gICAgICBkdXJhdGlvbjogNTAwMCwgdmVydGljYWxQb3NpdGlvbjogJ3RvcCcsIGhvcml6b250YWxQb3NpdGlvbjogJ2NlbnRlcicsIHBhbmVsQ2xhc3M6IFtjbGFzc05hbWUgPyBjbGFzc05hbWUgOiAnZGVmYXVsdCddXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG1ha2VPcHRpb25zKGl0ZW06IFJvdXRlKSB7XHJcbiAgICBpZiAoaXRlbS5vcmRlcl9udW1iZXIpIHtcclxuICAgICAgKHRoaXMuamNvZGVPcHRpb25zLmZpbmRJbmRleCgoZWxlbSkgPT4gZWxlbS5qb2JfaWQgPT09IGl0ZW0uam9iX2lkKSA9PT0gLTEpID8gdGhpcy5qY29kZU9wdGlvbnMucHVzaCh7IGpvYl9jb2RlOiBpdGVtLm9yZGVyX251bWJlciwgam9iX2lkOiBpdGVtLmpvYl9pZCB9KSA6IG51bGw7XHJcbiAgICAgIGlmIChpdGVtLmRyaXZlcl9saXN0ICYmIGl0ZW0uZHJpdmVyX2xpc3Q/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICBpdGVtLmRyaXZlcl9saXN0LmZvckVhY2goKGRyaXZlcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5kcml2ZXJPcHRpb24uZmluZEluZGV4KGVsZW0gPT4gZWxlbSA9PT0gZHJpdmVyWydkcml2ZXJfbmFtZSddKSA9PT0gLTEgPyB0aGlzLmRyaXZlck9wdGlvbi5wdXNoKGRyaXZlclsnZHJpdmVyX25hbWUnXSkgOiBudWxsO1xyXG4gICAgICAgICAgdGhpcy50cnVja2luZ0NvbXBhbmF5T3B0aW9uLmZpbmRJbmRleChlbGVtID0+IGVsZW0gPT09IGRyaXZlclsndHJ1Y2tpbmdfY29tcGFueSddKSA9PT0gLTEgPyB0aGlzLnRydWNraW5nQ29tcGFuYXlPcHRpb24ucHVzaChkcml2ZXJbJ3RydWNraW5nX2NvbXBhbnknXSkgOiBudWxsO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAoKHRoaXMucGlja3VwT3B0aW9ucy5maW5kSW5kZXgoKGVsZW0pID0+IGVsZW0gPT09IGl0ZW0ucGlja3VwX2xvY2F0aW9uKSkgPT09IC0xKSA/IHRoaXMucGlja3VwT3B0aW9ucy5wdXNoKGl0ZW0ucGlja3VwX2xvY2F0aW9uKSA6IG51bGw7XHJcbiAgICAoKHRoaXMuZGVzdE9wdGlvbnMuZmluZEluZGV4KChlbGVtKSA9PiBlbGVtID09PSBpdGVtLmRlbGl2ZXJ5X2xvY2F0aW9uKSkgPT09IC0xKSA/IHRoaXMuZGVzdE9wdGlvbnMucHVzaChpdGVtLmRlbGl2ZXJ5X2xvY2F0aW9uKSA6IG51bGw7XHJcbiAgICAodGhpcy5jdXN0b21lck9wdGlvbnMuZmluZEluZGV4KChjdXN0b21lcikgPT4gY3VzdG9tZXIgPT09IGl0ZW0uY3VzdG9tZXJfbmFtZSkgPT09IC0xKSA/IHRoaXMuY3VzdG9tZXJPcHRpb25zLnB1c2goaXRlbS5jdXN0b21lcl9uYW1lKSA6IG51bGw7XHJcbiAgICAodGhpcy51bml0T3B0aW9ucy5maW5kSW5kZXgoKGVsZW0pID0+IGVsZW0gPT09IGl0ZW0udW5pdCkgPT09IC0xKSA/IHRoaXMudW5pdE9wdGlvbnMucHVzaChpdGVtLnVuaXQpIDogbnVsbDtcclxuICAgICh0aGlzLm1hdGVyaWFsT3B0aW9ucy5maW5kSW5kZXgoKGVsZW0pID0+IGVsZW0gPT09IGl0ZW0ubWF0ZXJpYWwpID09PSAtMSkgPyB0aGlzLm1hdGVyaWFsT3B0aW9ucy5wdXNoKGl0ZW0ubWF0ZXJpYWwpIDogbnVsbDtcclxuICAgIGlmIChpdGVtLnJvdXRlX25hbWUpIHRoaXMucm91dGVOYW1lT3B0aW9ucy5maW5kSW5kZXgoZWxlbSA9PiBlbGVtID09PSBpdGVtLnJvdXRlX25hbWUpID09PSAtMSA/IHRoaXMucm91dGVOYW1lT3B0aW9ucy5wdXNoKGl0ZW0ucm91dGVfbmFtZSkgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZmlsdGVyKHZhbHVlOiBzdHJpbmcsIGZpbHRlcnM6IGFueSkge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHsgcmV0dXJuIFtdIH1cclxuICAgIGNvbnN0IGZpbHRlclZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcclxuICAgIGlmIChmaWx0ZXJWYWx1ZSA9PT0gJycpIHsgcmV0dXJuIFtdIH1cclxuICAgIGNvbnN0IHNlYXJjaFJlc3VsdHM6IGFueVtdID0gW107XHJcbiAgICB0aGlzLnVuaXRPcHRpb25zLm1hcCh1bml0ID0+IHtcclxuICAgICAgaWYgKHVuaXQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXJWYWx1ZSkpIHtcclxuICAgICAgICBzZWFyY2hSZXN1bHRzLnB1c2goeyBcInR5cGVcIjogXCJ1bml0XCIsIFwibGFiZWxcIjogdW5pdCwgXCJ2YWx1ZVwiOiB1bml0IH0pXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5jdXN0b21lck9wdGlvbnMubWFwKHVuaXQgPT4ge1xyXG4gICAgICBpZiAodW5pdC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlclZhbHVlKSkge1xyXG4gICAgICAgIHNlYXJjaFJlc3VsdHMucHVzaCh7IFwidHlwZVwiOiBcImN1c3RvbWVyXCIsIFwibGFiZWxcIjogdW5pdCwgXCJ2YWx1ZVwiOiB1bml0IH0pXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5tYXRlcmlhbE9wdGlvbnMubWFwKHVuaXQgPT4ge1xyXG4gICAgICBpZiAodW5pdC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlclZhbHVlKSkge1xyXG4gICAgICAgIHNlYXJjaFJlc3VsdHMucHVzaCh7IFwidHlwZVwiOiBcIm1hdGVyaWFsXCIsIFwibGFiZWxcIjogdW5pdCwgXCJ2YWx1ZVwiOiB1bml0IH0pXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5waWNrdXBPcHRpb25zLm1hcCh1bml0ID0+IHtcclxuICAgICAgaWYgKHVuaXQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXJWYWx1ZSkpIHtcclxuICAgICAgICBzZWFyY2hSZXN1bHRzLnB1c2goeyBcInR5cGVcIjogXCJwaWNrdXAgbG9jYXRpb25cIiwgXCJsYWJlbFwiOiB1bml0LCBcInZhbHVlXCI6IHVuaXQgfSlcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmRlc3RPcHRpb25zLm1hcCh1bml0ID0+IHtcclxuICAgICAgaWYgKHVuaXQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXJWYWx1ZSkpIHtcclxuICAgICAgICBzZWFyY2hSZXN1bHRzLnB1c2goeyBcInR5cGVcIjogXCJkZXN0aW5hdGlvbiBsb2NhdGlvblwiLCBcImxhYmVsXCI6IHVuaXQsIFwidmFsdWVcIjogdW5pdCB9KVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuamNvZGVPcHRpb25zLm1hcCh1bml0ID0+IHtcclxuICAgICAgaWYgKHVuaXQuam9iX2NvZGUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXJWYWx1ZSkpIHtcclxuICAgICAgICBzZWFyY2hSZXN1bHRzLnB1c2goeyBcInR5cGVcIjogXCJqb2JcIiwgXCJsYWJlbFwiOiB1bml0Wydqb2JfY29kZSddLCBcInZhbHVlXCI6IHVuaXQgfSlcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmRyaXZlck9wdGlvbi5tYXAodW5pdCA9PiB7XHJcbiAgICAgIGlmICh1bml0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyVmFsdWUpKSB7XHJcbiAgICAgICAgc2VhcmNoUmVzdWx0cy5wdXNoKHsgXCJ0eXBlXCI6IFwiRHJpdmVyXCIsIFwibGFiZWxcIjogdW5pdCwgXCJ2YWx1ZVwiOiB1bml0IH0pXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMudHJ1Y2tpbmdDb21wYW5heU9wdGlvbi5tYXAodW5pdCA9PiB7XHJcbiAgICAgIGlmICh1bml0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyVmFsdWUpKSB7XHJcbiAgICAgICAgc2VhcmNoUmVzdWx0cy5wdXNoKHsgXCJ0eXBlXCI6IFwiVHJ1Y2tpbmcgQ29tcGFueVwiLCBcImxhYmVsXCI6IHVuaXQsIFwidmFsdWVcIjogdW5pdCB9KVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMucm91dGVOYW1lT3B0aW9ucy5tYXAodW5pdCA9PiB7XHJcbiAgICAgIGlmICh1bml0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyVmFsdWUpKSB7XHJcbiAgICAgICAgc2VhcmNoUmVzdWx0cy5wdXNoKHsgXCJ0eXBlXCI6IFwiUm91dGUgbmFtZVwiLCBcImxhYmVsXCI6IHVuaXQsIFwidmFsdWVcIjogdW5pdCB9KVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IHNlYXJjaERpY3Q6IGFueSA9IHt9XHJcbiAgICBmaWx0ZXJzLm1hcCgoZmlsdGVyOiB7IFt4OiBzdHJpbmddOiBhbnk7IH0pID0+IHtcclxuICAgICAgc2VhcmNoRGljdFtmaWx0ZXJbJ25hbWUnXSArIGZpbHRlclsndHlwZSddXSA9IGZpbHRlcjtcclxuICAgIH0pXHJcbiAgICBjb25zdCBmdXJ0aGVyRmlsdGVyOiBhbnlbXSA9IFtdO1xyXG4gICAgc2VhcmNoUmVzdWx0cy5tYXAoc2VhcmNoID0+IHtcclxuICAgICAgaWYgKChzZWFyY2hbJ2xhYmVsJ10gKyBzZWFyY2hbJ3R5cGUnXSkgaW4gc2VhcmNoRGljdCkgeyB9XHJcbiAgICAgIGVsc2UgeyBmdXJ0aGVyRmlsdGVyLnB1c2goc2VhcmNoKSB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBmdXJ0aGVyRmlsdGVyO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VhcmNoUmVzdWx0cyhsaXN0OiBSb3V0ZVtdLCBmaWx0ZXJ2YWw6IGFueSk6IGFueSB7XHJcbiAgICByZXR1cm4gbGlzdC5maWx0ZXIoZWxlbWVudCA9PiB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdF9saXN0X2Jvb2xlYW4gPSBbXVxyXG4gICAgICBpZiAoZmlsdGVydmFsLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBpZiAoZmlsdGVydmFsWzBdWyd0eXBlJ10gPT09ICd1bml0Jykge1xyXG4gICAgICAgICAgcmVzdWx0X2xpc3RfYm9vbGVhbi5wdXNoKGZpbHRlcnZhbFswXVsnbmFtZSddID09PSBlbGVtZW50W2ZpbHRlcnZhbFswXVsndHlwZSddIGFzIGtleW9mIFJvdXRlXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmaWx0ZXJ2YWxbMF1bJ3R5cGUnXSA9PT0gJ2N1c3RvbWVyJykge1xyXG4gICAgICAgICAgcmVzdWx0X2xpc3RfYm9vbGVhbi5wdXNoKGZpbHRlcnZhbFswXVsnbmFtZSddID09PSBlbGVtZW50WydjdXN0b21lcl9uYW1lJ10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZmlsdGVydmFsWzBdWyd0eXBlJ10gPT09ICdtYXRlcmlhbCcpIHtcclxuICAgICAgICAgIHJlc3VsdF9saXN0X2Jvb2xlYW4ucHVzaChmaWx0ZXJ2YWxbMF1bJ25hbWUnXSA9PT0gZWxlbWVudFtmaWx0ZXJ2YWxbMF1bJ3R5cGUnXSBhcyBrZXlvZiBSb3V0ZV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZmlsdGVydmFsWzBdWyd0eXBlJ10gPT09ICdwaWNrdXAgbG9jYXRpb24nKSB7XHJcbiAgICAgICAgICByZXN1bHRfbGlzdF9ib29sZWFuLnB1c2goZmlsdGVydmFsWzBdWyduYW1lJ10gPT09IGVsZW1lbnRbJ3BpY2t1cF9sb2NhdGlvbiddKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZpbHRlcnZhbFswXVsndHlwZSddID09PSAnZGVzdGluYXRpb24gbG9jYXRpb24nKSB7XHJcbiAgICAgICAgICByZXN1bHRfbGlzdF9ib29sZWFuLnB1c2goZmlsdGVydmFsWzBdWyduYW1lJ10gPT09IGVsZW1lbnRbJ2RlbGl2ZXJ5X2xvY2F0aW9uJ10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZmlsdGVydmFsWzBdWyd0eXBlJ10gPT09ICdqb2InKSB7XHJcbiAgICAgICAgICByZXN1bHRfbGlzdF9ib29sZWFuLnB1c2goZmlsdGVydmFsWzBdWyduYW1lJ10gPT09IGVsZW1lbnRbJ29yZGVyX251bWJlciddKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZpbHRlcnZhbFswXVsndHlwZSddID09PSAnUm91dGUgbmFtZScpIHtcclxuICAgICAgICAgIHJlc3VsdF9saXN0X2Jvb2xlYW4ucHVzaChmaWx0ZXJ2YWxbMF1bJ25hbWUnXSA9PT0gZWxlbWVudFsncm91dGVfbmFtZSddKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZpbHRlcnZhbFswXVsndHlwZSddID09PSAnRHJpdmVyJykge1xyXG4gICAgICAgICAgY29uc3QgaW5kZXggPSBlbGVtZW50LmRyaXZlcl9saXN0Py5maW5kSW5kZXgoZWxlID0+IHsgcmV0dXJuIGZpbHRlcnZhbFswXVsnbmFtZSddID09PSBlbGVbJ2RyaXZlcl9uYW1lJ10gfSk7XHJcbiAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSByZXN1bHRfbGlzdF9ib29sZWFuLnB1c2godHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmaWx0ZXJ2YWxbMF1bJ3R5cGUnXSA9PT0gJ1RydWNraW5nIENvbXBhbnknKSB7XHJcbiAgICAgICAgICBjb25zdCBpbmRleCA9IGVsZW1lbnQuZHJpdmVyX2xpc3Q/LmZpbmRJbmRleChlbGUgPT4geyByZXR1cm4gZmlsdGVydmFsWzBdWyduYW1lJ10gPT09IGVsZVsndHJ1Y2tpbmdfY29tcGFueSddIH0pO1xyXG4gICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkgcmVzdWx0X2xpc3RfYm9vbGVhbi5wdXNoKHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAocmVzdWx0X2xpc3RfYm9vbGVhbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdF9saXN0X2Jvb2xlYW4ucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICYmIGN1cnIpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJPcHRpb25zKCkge1xyXG4gICAgdGhpcy5waWNrdXBPcHRpb25zID0gW107XHJcbiAgICB0aGlzLmRlc3RPcHRpb25zID0gW107XHJcbiAgICB0aGlzLm93bmVyT3B0aW9ucyA9IFtdO1xyXG4gICAgdGhpcy5jdXN0b21lck9wdGlvbnMgPSBbXTtcclxuICAgIHRoaXMudW5pdE9wdGlvbnMgPSBbXTtcclxuICAgIHRoaXMubWF0ZXJpYWxPcHRpb25zID0gW107XHJcbiAgICB0aGlzLmpjb2RlT3B0aW9ucyA9IFtdO1xyXG4gICAgdGhpcy5yb3V0ZU5hbWVPcHRpb25zID0gW107XHJcbiAgfVxyXG4gIHNldGRpY3RWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5kaWN0LnNldChrZXksIHZhbHVlKTtcclxuICB9XHJcbiAgZ2V0ZGljdFZhbHVlKGtleTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gSlNPTi5wYXJzZSh0aGlzLmRpY3QuZ2V0KGtleSkpO1xyXG4gIH1cclxuICByZW1vdmVkaWN0VmFsdWUoa2V5OiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZGljdC5kZWxldGUoa2V5KTtcclxuICB9XHJcbiAgY29udmV5U2VhcmNoSWNvbih2YWx1ZTogYW55KTogYm9vbGVhbntcclxuICAgIGlmKHZhbHVlICYmIHR5cGVvZih2YWx1ZSkgIT09ICdvYmplY3QnKSByZXR1cm4gdHJ1ZTtcclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import { __awaiter } from 'tslib';
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
import * as turf from '@turf/turf';
|
|
2
|
+
import { ɵɵdefineInjectable, ɵɵinject, Injectable } from '@angular/core';
|
|
3
|
+
import { LngLatBounds, Map as Map$1, Marker, Popup } from 'mapbox-gl';
|
|
4
|
+
import { length, along } from '@turf/turf';
|
|
6
5
|
import { BehaviorSubject } from 'rxjs';
|
|
6
|
+
import { HttpClient } from '@angular/common/http';
|
|
7
|
+
import { MatSnackBar } from '@angular/material/snack-bar';
|
|
8
|
+
import { EventManager } from '@angular/platform-browser';
|
|
7
9
|
import { MapboxLayer } from '@deck.gl/mapbox';
|
|
8
10
|
import { ArcLayer } from '@deck.gl/layers';
|
|
9
|
-
import * as i1 from '@angular/common/http';
|
|
10
|
-
import * as i2 from '@angular/material/snack-bar';
|
|
11
|
-
import * as i2$1 from '@angular/platform-browser';
|
|
12
11
|
|
|
13
12
|
class UtilsService {
|
|
14
13
|
constructor(http, snackBar) {
|
|
@@ -210,12 +209,14 @@ class UtilsService {
|
|
|
210
209
|
return false;
|
|
211
210
|
}
|
|
212
211
|
}
|
|
213
|
-
UtilsService.ɵ
|
|
214
|
-
UtilsService
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
212
|
+
UtilsService.ɵprov = ɵɵdefineInjectable({ factory: function UtilsService_Factory() { return new UtilsService(ɵɵinject(HttpClient), ɵɵinject(MatSnackBar)); }, token: UtilsService, providedIn: "root" });
|
|
213
|
+
UtilsService.decorators = [
|
|
214
|
+
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
215
|
+
];
|
|
216
|
+
UtilsService.ctorParameters = () => [
|
|
217
|
+
{ type: HttpClient },
|
|
218
|
+
{ type: MatSnackBar }
|
|
219
|
+
];
|
|
219
220
|
|
|
220
221
|
class CoolmapService {
|
|
221
222
|
constructor(utils, eventManager) {
|
|
@@ -225,15 +226,15 @@ class CoolmapService {
|
|
|
225
226
|
this.markerDestinationList = [];
|
|
226
227
|
this.initiatecoolmap = new BehaviorSubject(true);
|
|
227
228
|
this.reintiatecoolmap = this.initiatecoolmap.asObservable();
|
|
228
|
-
this.bounds = new
|
|
229
|
+
this.bounds = new LngLatBounds();
|
|
229
230
|
this.originDestinationCordinates = [];
|
|
230
231
|
this.eventManager.addGlobalEventListener('window', 'resize', this.onResize.bind(this));
|
|
231
232
|
this.windowActualHeightWidth = { availHeight: 0 };
|
|
232
233
|
}
|
|
233
234
|
initiateMapForAddRoute(el) {
|
|
234
235
|
return new Promise((resolve, reject) => {
|
|
235
|
-
this.map.remove();
|
|
236
|
-
this.map = new
|
|
236
|
+
// this.map.remove();
|
|
237
|
+
this.map = new Map$1({
|
|
237
238
|
accessToken: 'pk.eyJ1Ijoic2FudGFudS1vZ21hIiwiYSI6ImNsOGQ0cDVrNjAweTMzb3RmdG9ieTU5ZDkifQ.I6ZS7mViZYSvBo4zz-mGQQ',
|
|
238
239
|
container: el,
|
|
239
240
|
style: 'mapbox://styles/santanu-ogma/cl8ep33uz003414n1twlosz9d',
|
|
@@ -258,16 +259,16 @@ class CoolmapService {
|
|
|
258
259
|
{ 'type': 'Feature', 'properties': {}, 'geometry': { 'type': 'Point', 'coordinates': origin } }
|
|
259
260
|
]
|
|
260
261
|
};
|
|
261
|
-
const lineDistance =
|
|
262
|
+
const lineDistance = length(pinRouteGeojson.features[0]);
|
|
262
263
|
const arc = [];
|
|
263
264
|
const steps = 10 * pinRouteGeojson.features[0].geometry.coordinates.length;
|
|
264
265
|
for (let i = 0; i < lineDistance; i += lineDistance / steps) {
|
|
265
|
-
const segment =
|
|
266
|
+
const segment = along(pinRouteGeojson.features[0], i);
|
|
266
267
|
arc.push(segment.geometry.coordinates);
|
|
267
268
|
}
|
|
268
269
|
pinRouteGeojson.features[0].geometry.coordinates = arc;
|
|
269
270
|
const pinRoute = pinRouteGeojson.features[0].geometry.coordinates;
|
|
270
|
-
const marker = new
|
|
271
|
+
const marker = new Marker(document.createElement('div'))
|
|
271
272
|
.setLngLat(pinRoute[0]).addTo(this.map).togglePopup();
|
|
272
273
|
if (this.map.getSource(`line${index}`)) {
|
|
273
274
|
this.removeRouteAndMarker(index).then(() => { });
|
|
@@ -419,7 +420,7 @@ class CoolmapService {
|
|
|
419
420
|
}
|
|
420
421
|
}
|
|
421
422
|
createPopup(datasetForPopup) {
|
|
422
|
-
this.popup = new
|
|
423
|
+
this.popup = new Popup({
|
|
423
424
|
closeButton: false,
|
|
424
425
|
closeOnClick: false,
|
|
425
426
|
closeOnMove: true,
|
|
@@ -449,20 +450,20 @@ class CoolmapService {
|
|
|
449
450
|
createMarker(routeDetails) {
|
|
450
451
|
var _a, _b;
|
|
451
452
|
if (routeDetails.origin[0] && routeDetails.origin[1] && routeDetails.destination[0] && routeDetails.destination[1]) {
|
|
452
|
-
const popup = new
|
|
453
|
-
const popupForDestination = new
|
|
453
|
+
const popup = new Popup({ closeButton: false }).setHTML('<b>Pickup: </b>' + ((_a = routeDetails.route) === null || _a === void 0 ? void 0 : _a.pickup_location));
|
|
454
|
+
const popupForDestination = new Popup({ closeButton: false })
|
|
454
455
|
.setHTML('<b>Delivery: </b>' + ((_b = routeDetails.route) === null || _b === void 0 ? void 0 : _b.delivery_location));
|
|
455
456
|
const el = document.createElement('div');
|
|
456
457
|
el.className = 'marker';
|
|
457
458
|
el.innerHTML = `<span class='markerPointer' style='background:${routeDetails.linecolor}'><b>P</b><span class='markerSpan' style='border-top: 10px solid ${routeDetails.linecolor}'></span></span>`;
|
|
458
|
-
const originMarker = new
|
|
459
|
+
const originMarker = new Marker(el)
|
|
459
460
|
.setPopup(popup).setLngLat(routeDetails.origin).addTo(this.map);
|
|
460
461
|
originMarker.getElement().addEventListener('mouseenter', () => originMarker.togglePopup());
|
|
461
462
|
originMarker.getElement().addEventListener('mouseleave', () => originMarker.togglePopup());
|
|
462
463
|
const elementForDestination = document.createElement('div');
|
|
463
464
|
elementForDestination.className = 'marker';
|
|
464
465
|
elementForDestination.innerHTML = `<span class='markerPointer' style='background:${routeDetails.linecolor}'><b>D</b><span class='markerSpan' style='border-top: 10px solid ${routeDetails.linecolor}'></span></span>`;
|
|
465
|
-
const destinationMarker = new
|
|
466
|
+
const destinationMarker = new Marker(elementForDestination).setPopup(popupForDestination).setLngLat(routeDetails.destination).addTo(this.map);
|
|
466
467
|
destinationMarker.getElement().addEventListener('mouseenter', () => destinationMarker.togglePopup());
|
|
467
468
|
destinationMarker.getElement().addEventListener('mouseleave', () => destinationMarker.togglePopup());
|
|
468
469
|
this.markerOriginList[routeDetails.index] = originMarker;
|
|
@@ -532,10 +533,8 @@ class CoolmapService {
|
|
|
532
533
|
if (typeof route === 'string') {
|
|
533
534
|
let path = route.split(';');
|
|
534
535
|
path = path.map((ele) => { return ele = this.formateLatLong(ele); });
|
|
535
|
-
path.forEach((ele, index) => {
|
|
536
|
-
|
|
537
|
-
path.splice(index, 1);
|
|
538
|
-
});
|
|
536
|
+
path.forEach((ele, index) => { if (ele.length === 1)
|
|
537
|
+
path.splice(index, 1); });
|
|
539
538
|
route = path;
|
|
540
539
|
}
|
|
541
540
|
if (route[0][0] && route[0][1] && route[route.length - 1][0] && route[route.length - 1][1]) {
|
|
@@ -551,17 +550,15 @@ class CoolmapService {
|
|
|
551
550
|
if (showAllFitbound && (Object.keys(this.bounds).length > 0))
|
|
552
551
|
this.map.fitBounds(this.bounds, { padding }, { fitboundComplete: true });
|
|
553
552
|
}, 100);
|
|
554
|
-
this.map.once('moveend', (event) => {
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
}
|
|
558
|
-
});
|
|
553
|
+
this.map.once('moveend', (event) => { if (event.fitboundComplete) {
|
|
554
|
+
resolve(true);
|
|
555
|
+
} });
|
|
559
556
|
}
|
|
560
557
|
});
|
|
561
558
|
}
|
|
562
559
|
extendReBound(bottom) {
|
|
563
560
|
return new Promise((resolve, reject) => {
|
|
564
|
-
this.bounds = new
|
|
561
|
+
this.bounds = new LngLatBounds();
|
|
565
562
|
if (this.originDestinationCordinates.length >= 0) {
|
|
566
563
|
this.originDestinationCordinates.map((item, index) => {
|
|
567
564
|
item.map((route) => {
|
|
@@ -591,10 +588,8 @@ class CoolmapService {
|
|
|
591
588
|
if (res['data']['route']) {
|
|
592
589
|
let path = res['data']['route'].split(';');
|
|
593
590
|
path = path.map((ele) => { return ele = this.formateLatLong(ele); });
|
|
594
|
-
path.forEach((ele, index) => {
|
|
595
|
-
|
|
596
|
-
path.splice(index, 1);
|
|
597
|
-
});
|
|
591
|
+
path.forEach((ele, index) => { if (ele.length === 1)
|
|
592
|
+
path.splice(index, 1); });
|
|
598
593
|
route['path'] = path;
|
|
599
594
|
this.extendBound(route['path'], showAllFitbound);
|
|
600
595
|
if (route['path'] && route['path'].length > 0)
|
|
@@ -605,20 +600,16 @@ class CoolmapService {
|
|
|
605
600
|
this.extendBound(null, showAllFitbound);
|
|
606
601
|
}
|
|
607
602
|
resolve(true);
|
|
608
|
-
}, (err) => {
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
}
|
|
612
|
-
});
|
|
603
|
+
}, (err) => { if (err) {
|
|
604
|
+
reject(false);
|
|
605
|
+
} });
|
|
613
606
|
}
|
|
614
607
|
else if (['jobrouteList', 'addroute'].includes(type)) {
|
|
615
608
|
if (route['path'] && route['path'].length > 0) {
|
|
616
609
|
let path = route['path'].split(';');
|
|
617
610
|
path = path.map((ele) => { return ele = this.formateLatLong(ele); });
|
|
618
|
-
path.forEach((ele, index) => {
|
|
619
|
-
|
|
620
|
-
path.splice(index, 1);
|
|
621
|
-
});
|
|
611
|
+
path.forEach((ele, index) => { if (ele.length === 1)
|
|
612
|
+
path.splice(index, 1); });
|
|
622
613
|
this.extendBound(path, showAllFitbound);
|
|
623
614
|
this.drawLine(path, i, route, enablefitbound, type);
|
|
624
615
|
}
|
|
@@ -626,10 +617,10 @@ class CoolmapService {
|
|
|
626
617
|
}
|
|
627
618
|
});
|
|
628
619
|
}
|
|
629
|
-
clearBound() { this.bounds = new
|
|
620
|
+
clearBound() { this.bounds = new LngLatBounds(); this.originDestinationCordinates = []; this.clearPadding(); }
|
|
630
621
|
formateLatLong(latlong) { return latlong ? latlong.split(',').map(x => +x).reverse() : null; }
|
|
631
622
|
clearBoundWithCordinates() {
|
|
632
|
-
this.bounds = new
|
|
623
|
+
this.bounds = new LngLatBounds();
|
|
633
624
|
this.originDestinationCordinates = [];
|
|
634
625
|
}
|
|
635
626
|
onResize(event) {
|
|
@@ -655,12 +646,14 @@ class CoolmapService {
|
|
|
655
646
|
});
|
|
656
647
|
}
|
|
657
648
|
}
|
|
658
|
-
CoolmapService.ɵ
|
|
659
|
-
CoolmapService
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
649
|
+
CoolmapService.ɵprov = ɵɵdefineInjectable({ factory: function CoolmapService_Factory() { return new CoolmapService(ɵɵinject(UtilsService), ɵɵinject(EventManager)); }, token: CoolmapService, providedIn: "root" });
|
|
650
|
+
CoolmapService.decorators = [
|
|
651
|
+
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
652
|
+
];
|
|
653
|
+
CoolmapService.ctorParameters = () => [
|
|
654
|
+
{ type: UtilsService },
|
|
655
|
+
{ type: EventManager }
|
|
656
|
+
];
|
|
664
657
|
|
|
665
658
|
class Route {
|
|
666
659
|
constructor() {
|
|
@@ -706,4 +699,4 @@ class PopupData {
|
|
|
706
699
|
*/
|
|
707
700
|
|
|
708
701
|
export { CoolmapService, DriverSmsCardEnum, DriversmsCardKey, EstinationData, EstinationEnum, JobCodeOverviewData, JobCodeOverviewEnum, PopupData, Route, UtilsService };
|
|
709
|
-
//# sourceMappingURL=coolmap-services.
|
|
702
|
+
//# sourceMappingURL=coolmap-services.js.map
|