@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.
@@ -1,709 +0,0 @@
1
- import { __awaiter } from 'tslib';
2
- import * as i0 from '@angular/core';
3
- import { Injectable } from '@angular/core';
4
- import * as mapboxgl from 'mapbox-gl';
5
- import * as turf from '@turf/turf';
6
- import { BehaviorSubject } from 'rxjs';
7
- import { MapboxLayer } from '@deck.gl/mapbox';
8
- 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
-
13
- class UtilsService {
14
- constructor(http, snackBar) {
15
- this.http = http;
16
- this.snackBar = snackBar;
17
- this.analyticsRESTURL = '';
18
- this.RESTURLPrefix = '';
19
- this.pickupOptions = [];
20
- this.destOptions = [];
21
- this.ownerOptions = [];
22
- this.customerOptions = [];
23
- this.unitOptions = [];
24
- this.materialOptions = [];
25
- this.jcodeOptions = [];
26
- this.driverOption = [];
27
- this.truckingCompanayOption = [];
28
- this.routeNameOptions = [];
29
- this.preventnavChange = new BehaviorSubject(false);
30
- this.navChangeObserve = this.preventnavChange.asObservable();
31
- this.clearViewRouteforJobCode = new BehaviorSubject(false);
32
- this.clearViewRouteforJobCodeObserve = this.clearViewRouteforJobCode.asObservable();
33
- this.preVentJobdetailclose = new BehaviorSubject(false);
34
- this.getpreVentJobdetailclose = this.preVentJobdetailclose.asObservable();
35
- this.routeDetailsUtility = new BehaviorSubject({});
36
- this.getrouteDetailsUtility = this.routeDetailsUtility.asObservable();
37
- this.removeMapEntity = new BehaviorSubject({});
38
- this.removeMapEntityUtility = this.removeMapEntity.asObservable();
39
- this.dict = new Map();
40
- this.analyticsRESTURL = 'https://test-analytics.aggdirect.com/REST/';
41
- this.RESTURLPrefix = 'https://test-server.aggdirect.com/REST/';
42
- }
43
- getDateFormat(strVal, seprater) {
44
- seprater = seprater ? seprater : '-';
45
- const mydate = strVal;
46
- 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());
47
- }
48
- getData(path) { return this.http.get(`${this.analyticsRESTURL}${path}`); }
49
- postdata(path, data) { return this.http.post(`${this.analyticsRESTURL}${path}`, data); }
50
- postDataWithRestUrl(path, data) { return this.http.post(`${this.RESTURLPrefix}${path}`, data); }
51
- fetchAutoCompleteLocations(keyword) {
52
- return this.http.get(`https://api.mapbox.com/geocoding/v5/mapbox.places/${keyword}.json?access_token=pk.eyJ1Ijoic2FudGFudS1vZ21hIiwiYSI6ImNsOGQ0cDVrNjAweTMzb3RmdG9ieTU5ZDkifQ.I6ZS7mViZYSvBo4zz-mGQQ&country=US`);
53
- }
54
- openSnackBar(message, className) {
55
- this.snackBar.open(message, '', {
56
- duration: 5000, verticalPosition: 'top', horizontalPosition: 'center', panelClass: [className ? className : 'default']
57
- });
58
- }
59
- makeOptions(item) {
60
- var _a;
61
- if (item.order_number) {
62
- (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;
63
- if (item.driver_list && ((_a = item.driver_list) === null || _a === void 0 ? void 0 : _a.length) > 0) {
64
- item.driver_list.forEach((driver) => {
65
- this.driverOption.findIndex(elem => elem === driver['driver_name']) === -1 ? this.driverOption.push(driver['driver_name']) : null;
66
- this.truckingCompanayOption.findIndex(elem => elem === driver['trucking_company']) === -1 ? this.truckingCompanayOption.push(driver['trucking_company']) : null;
67
- });
68
- }
69
- }
70
- ((this.pickupOptions.findIndex((elem) => elem === item.pickup_location)) === -1) ? this.pickupOptions.push(item.pickup_location) : null;
71
- ((this.destOptions.findIndex((elem) => elem === item.delivery_location)) === -1) ? this.destOptions.push(item.delivery_location) : null;
72
- (this.customerOptions.findIndex((customer) => customer === item.customer_name) === -1) ? this.customerOptions.push(item.customer_name) : null;
73
- (this.unitOptions.findIndex((elem) => elem === item.unit) === -1) ? this.unitOptions.push(item.unit) : null;
74
- (this.materialOptions.findIndex((elem) => elem === item.material) === -1) ? this.materialOptions.push(item.material) : null;
75
- if (item.route_name)
76
- this.routeNameOptions.findIndex(elem => elem === item.route_name) === -1 ? this.routeNameOptions.push(item.route_name) : null;
77
- }
78
- filter(value, filters) {
79
- if (typeof value !== 'string') {
80
- return [];
81
- }
82
- const filterValue = value.toLowerCase();
83
- if (filterValue === '') {
84
- return [];
85
- }
86
- const searchResults = [];
87
- this.unitOptions.map(unit => {
88
- if (unit.toLowerCase().includes(filterValue)) {
89
- searchResults.push({ "type": "unit", "label": unit, "value": unit });
90
- }
91
- });
92
- this.customerOptions.map(unit => {
93
- if (unit.toLowerCase().includes(filterValue)) {
94
- searchResults.push({ "type": "customer", "label": unit, "value": unit });
95
- }
96
- });
97
- this.materialOptions.map(unit => {
98
- if (unit.toLowerCase().includes(filterValue)) {
99
- searchResults.push({ "type": "material", "label": unit, "value": unit });
100
- }
101
- });
102
- this.pickupOptions.map(unit => {
103
- if (unit.toLowerCase().includes(filterValue)) {
104
- searchResults.push({ "type": "pickup location", "label": unit, "value": unit });
105
- }
106
- });
107
- this.destOptions.map(unit => {
108
- if (unit.toLowerCase().includes(filterValue)) {
109
- searchResults.push({ "type": "destination location", "label": unit, "value": unit });
110
- }
111
- });
112
- this.jcodeOptions.map(unit => {
113
- if (unit.job_code.toLowerCase().includes(filterValue)) {
114
- searchResults.push({ "type": "job", "label": unit['job_code'], "value": unit });
115
- }
116
- });
117
- this.driverOption.map(unit => {
118
- if (unit.toLowerCase().includes(filterValue)) {
119
- searchResults.push({ "type": "Driver", "label": unit, "value": unit });
120
- }
121
- });
122
- this.truckingCompanayOption.map(unit => {
123
- if (unit.toLowerCase().includes(filterValue)) {
124
- searchResults.push({ "type": "Trucking Company", "label": unit, "value": unit });
125
- }
126
- });
127
- this.routeNameOptions.map(unit => {
128
- if (unit.toLowerCase().includes(filterValue)) {
129
- searchResults.push({ "type": "Route name", "label": unit, "value": unit });
130
- }
131
- });
132
- const searchDict = {};
133
- filters.map((filter) => {
134
- searchDict[filter['name'] + filter['type']] = filter;
135
- });
136
- const furtherFilter = [];
137
- searchResults.map(search => {
138
- if ((search['label'] + search['type']) in searchDict) { }
139
- else {
140
- furtherFilter.push(search);
141
- }
142
- });
143
- return furtherFilter;
144
- }
145
- getSearchResults(list, filterval) {
146
- return list.filter(element => {
147
- var _a, _b;
148
- const result_list_boolean = [];
149
- if (filterval.length > 0) {
150
- if (filterval[0]['type'] === 'unit') {
151
- result_list_boolean.push(filterval[0]['name'] === element[filterval[0]['type']]);
152
- }
153
- if (filterval[0]['type'] === 'customer') {
154
- result_list_boolean.push(filterval[0]['name'] === element['customer_name']);
155
- }
156
- if (filterval[0]['type'] === 'material') {
157
- result_list_boolean.push(filterval[0]['name'] === element[filterval[0]['type']]);
158
- }
159
- if (filterval[0]['type'] === 'pickup location') {
160
- result_list_boolean.push(filterval[0]['name'] === element['pickup_location']);
161
- }
162
- if (filterval[0]['type'] === 'destination location') {
163
- result_list_boolean.push(filterval[0]['name'] === element['delivery_location']);
164
- }
165
- if (filterval[0]['type'] === 'job') {
166
- result_list_boolean.push(filterval[0]['name'] === element['order_number']);
167
- }
168
- if (filterval[0]['type'] === 'Route name') {
169
- result_list_boolean.push(filterval[0]['name'] === element['route_name']);
170
- }
171
- if (filterval[0]['type'] === 'Driver') {
172
- const index = (_a = element.driver_list) === null || _a === void 0 ? void 0 : _a.findIndex(ele => { return filterval[0]['name'] === ele['driver_name']; });
173
- if (index !== -1)
174
- result_list_boolean.push(true);
175
- }
176
- if (filterval[0]['type'] === 'Trucking Company') {
177
- const index = (_b = element.driver_list) === null || _b === void 0 ? void 0 : _b.findIndex(ele => { return filterval[0]['name'] === ele['trucking_company']; });
178
- if (index !== -1)
179
- result_list_boolean.push(true);
180
- }
181
- }
182
- if (result_list_boolean.length > 0) {
183
- return result_list_boolean.reduce((prev, curr) => prev && curr);
184
- }
185
- return false;
186
- });
187
- }
188
- clearOptions() {
189
- this.pickupOptions = [];
190
- this.destOptions = [];
191
- this.ownerOptions = [];
192
- this.customerOptions = [];
193
- this.unitOptions = [];
194
- this.materialOptions = [];
195
- this.jcodeOptions = [];
196
- this.routeNameOptions = [];
197
- }
198
- setdictValue(key, value) {
199
- this.dict.set(key, value);
200
- }
201
- getdictValue(key) {
202
- return JSON.parse(this.dict.get(key));
203
- }
204
- removedictValue(key) {
205
- this.dict.delete(key);
206
- }
207
- conveySearchIcon(value) {
208
- if (value && typeof (value) !== 'object')
209
- return true;
210
- return false;
211
- }
212
- }
213
- UtilsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: UtilsService, deps: [{ token: i1.HttpClient }, { token: i2.MatSnackBar }], target: i0.ɵɵFactoryTarget.Injectable });
214
- UtilsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: UtilsService, providedIn: 'root' });
215
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: UtilsService, decorators: [{
216
- type: Injectable,
217
- args: [{ providedIn: 'root' }]
218
- }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.MatSnackBar }]; } });
219
-
220
- class CoolmapService {
221
- constructor(utils, eventManager) {
222
- this.utils = utils;
223
- this.eventManager = eventManager;
224
- this.markerOriginList = [];
225
- this.markerDestinationList = [];
226
- this.initiatecoolmap = new BehaviorSubject(true);
227
- this.reintiatecoolmap = this.initiatecoolmap.asObservable();
228
- this.bounds = new mapboxgl.LngLatBounds();
229
- this.originDestinationCordinates = [];
230
- this.eventManager.addGlobalEventListener('window', 'resize', this.onResize.bind(this));
231
- this.windowActualHeightWidth = { availHeight: 0 };
232
- }
233
- initiateMapForAddRoute(el) {
234
- return new Promise((resolve, reject) => {
235
- this.map.remove();
236
- this.map = new mapboxgl.Map({
237
- accessToken: 'pk.eyJ1Ijoic2FudGFudS1vZ21hIiwiYSI6ImNsOGQ0cDVrNjAweTMzb3RmdG9ieTU5ZDkifQ.I6ZS7mViZYSvBo4zz-mGQQ',
238
- container: el,
239
- style: 'mapbox://styles/santanu-ogma/cl8ep33uz003414n1twlosz9d',
240
- center: [-77.036873, 38.907192],
241
- zoom: 10, bearing: 0, pitch: 65, interactive: true,
242
- });
243
- this.map.once('load', (res) => {
244
- resolve(res);
245
- });
246
- });
247
- }
248
- // Below method Load route with animation
249
- loadMapProperty(pinRouteGeojson, index, unit, route, bottom) {
250
- return new Promise((resolve, reject) => {
251
- let origin = pinRouteGeojson.features[0].geometry.coordinates[0];
252
- const linecolor = (unit === 'Ton') ? '#ff7272' : (unit === 'Load') ? '#a3c52e' : '#ae23d1';
253
- let destination = pinRouteGeojson.features[0].geometry.coordinates[pinRouteGeojson.features[0].geometry.coordinates.length - 1];
254
- this.extendBound(pinRouteGeojson.features[0].geometry.coordinates, true).then((res) => {
255
- const point = {
256
- 'type': 'FeatureCollection',
257
- 'features': [
258
- { 'type': 'Feature', 'properties': {}, 'geometry': { 'type': 'Point', 'coordinates': origin } }
259
- ]
260
- };
261
- const lineDistance = turf.length(pinRouteGeojson.features[0]);
262
- const arc = [];
263
- const steps = 10 * pinRouteGeojson.features[0].geometry.coordinates.length;
264
- for (let i = 0; i < lineDistance; i += lineDistance / steps) {
265
- const segment = turf.along(pinRouteGeojson.features[0], i);
266
- arc.push(segment.geometry.coordinates);
267
- }
268
- pinRouteGeojson.features[0].geometry.coordinates = arc;
269
- const pinRoute = pinRouteGeojson.features[0].geometry.coordinates;
270
- const marker = new mapboxgl.Marker(document.createElement('div'))
271
- .setLngLat(pinRoute[0]).addTo(this.map).togglePopup();
272
- if (this.map.getSource(`line${index}`)) {
273
- this.removeRouteAndMarker(index).then(() => { });
274
- }
275
- this.map.addSource(`line${index}`, { type: 'geojson', lineMetrics: true, data: pinRouteGeojson });
276
- this.map.addLayer({
277
- type: 'line',
278
- source: `line${index}`,
279
- id: `line${index}`,
280
- paint: {
281
- 'line-width': 2,
282
- 'line-gradient': [
283
- 'interpolate',
284
- ['linear'],
285
- ['line-progress'],
286
- 0, unit === 'Ton' ? '#d7f7e4' : unit === 'Load' ? '#c9d8f5' : '#f5dcc1',
287
- 1, unit === 'Ton' ? '#ff7272' : unit === 'Load' ? '#a3c52e' : '#ae23d1',
288
- ]
289
- },
290
- layout: { 'line-cap': 'round', 'line-join': 'round' }
291
- });
292
- const dataSetForMap = {
293
- counter: 0, pinRouteGeojson, steps,
294
- point, pointId: `point${index}`,
295
- marker, pinRoute, lineId: `line${index}`, index,
296
- origin, destination, lineDistance,
297
- linecolor, route, isViewRoute: true
298
- };
299
- this.createMarker(dataSetForMap);
300
- this.map.on('mouseenter', `line${index}`, (e) => {
301
- this.map.setPaintProperty(`line${index}`, 'line-width', 5);
302
- this.map.setPaintProperty(`line${index}`, 'line-opacity', 1);
303
- const datasetForPopup = {
304
- coordinate: [e.lngLat.lng, e.lngLat.lat],
305
- pickup: route.pickup_location ? route.pickup_location : '',
306
- drop: route.delivery_location ? route.delivery_location : '',
307
- routeType: route.project ? 'Project' : 'Route',
308
- title: route.project ? route.project : route.route_name ? route.route_name : '',
309
- material: route.material ? route.material : '',
310
- type: route.unit ? route.unit : ''
311
- };
312
- this.createPopup(datasetForPopup);
313
- });
314
- this.map.on('mouseleave', `line${index}`, (e) => {
315
- this.map.setPaintProperty(`line${index}`, 'line-width', 2);
316
- if (this.popup) {
317
- this.popup.remove();
318
- }
319
- });
320
- });
321
- this.map.once('idle', (res) => {
322
- resolve(true);
323
- });
324
- });
325
- }
326
- // Below method Load route without animation
327
- drawLine(cordinates, index, route, enablefitbound, routeType) {
328
- let linecolor;
329
- let origin = cordinates[0];
330
- let destination = cordinates[cordinates.length - 1];
331
- if (origin[0] && origin[1] && destination && destination[0] && destination[1]) {
332
- linecolor = this.provideLineColor(route['unit'], routeType);
333
- if (enablefitbound) {
334
- const padding = {
335
- top: this.padding.top, bottom: this.padding.bottom + (this.windowActualHeightWidth.availHeight - (window.innerHeight - 65)),
336
- left: this.padding.left, right: this.padding.right
337
- };
338
- this.map.fitBounds([origin, destination], { padding }, { fitboundCompleteJob: true });
339
- }
340
- if (this.map.getSource(`route-source-for-job-code${index}`)) {
341
- this.removeRouteAndMarker(index).then(() => { });
342
- }
343
- this.map.addSource(`route-source-for-job-code${index}`, {
344
- 'type': 'geojson',
345
- 'data': { 'type': 'Feature', 'properties': {}, 'geometry': { 'type': 'LineString', 'coordinates': cordinates } }
346
- });
347
- this.map.addLayer({
348
- 'id': `route-for-job-code${index}`, 'type': 'line', 'source': `route-source-for-job-code${index}`,
349
- paint: { 'line-color': linecolor, 'line-width': 2 },
350
- layout: { 'line-cap': 'round', 'line-join': 'round' }
351
- });
352
- const dataSetForMap = {
353
- origin, destination, index, linecolor, route
354
- };
355
- this.createMarker(dataSetForMap);
356
- this.map.on('mouseenter', `route-for-job-code${index}`, (e) => {
357
- if (this.popup) {
358
- this.popup.remove();
359
- }
360
- this.map.setPaintProperty(`route-for-job-code${index}`, 'line-width', 5);
361
- this.map.setPaintProperty(`route-for-job-code${index}`, 'line-opacity', 1);
362
- const datasetForPopup = {
363
- coordinate: [e.lngLat.lng, e.lngLat.lat],
364
- pickup: route.pickup_location ? route.pickup_location : '',
365
- drop: route.delivery_location ? route.delivery_location : '',
366
- jobCode: route.project ? route.order_number : null,
367
- customer: route.project ? route.customer_name : null,
368
- routeType: route.project ? 'Project' : 'Route',
369
- title: route.project ? route.project : route.route_name ? route.route_name : '',
370
- material: route.material ? route.material : '',
371
- type: route.unit ? route.unit : ''
372
- };
373
- this.createPopup(datasetForPopup);
374
- });
375
- this.map.on('mouseleave', `route-for-job-code${index}`, (e) => {
376
- this.map.setPaintProperty(`route-for-job-code${index}`, 'line-width', 2);
377
- if (this.popup) {
378
- this.popup.remove();
379
- }
380
- });
381
- }
382
- }
383
- provideLineColor(unitType, type) {
384
- let checkType = (type && !['jobrouteList', 'addroute'].includes(type)) ? true : false;
385
- let color;
386
- switch (unitType) {
387
- case "Ton":
388
- color = checkType ? '#39c471' : '#ff7272';
389
- break;
390
- case "Load":
391
- color = checkType ? '#326ad3' : '#a3c52e';
392
- break;
393
- case "Hourly":
394
- color = checkType ? '#ffad56' : '#ae23d1';
395
- break;
396
- }
397
- return color;
398
- }
399
- showRoutePopup(arcDetails, event, isViewRoute) {
400
- if (this.popup) {
401
- this.popup.remove();
402
- this.map.setPaintProperty(`${isViewRoute ? 'line' : 'route-for-job-code'}${arcDetails.layer.props.data.index}`, 'line-width', 2);
403
- }
404
- if (arcDetails.color && this.map.getLayoutProperty(arcDetails.layer.id, 'visibility') !== 'none') {
405
- this.map.setPaintProperty(`${isViewRoute ? 'line' : 'route-for-job-code'}${arcDetails.layer.props.data.index}`, 'line-width', 5);
406
- this.map.setPaintProperty(`${isViewRoute ? 'line' : 'route-for-job-code'}${arcDetails.layer.props.data.index}`, 'line-opacity', 1);
407
- const datasetForPopup = {
408
- coordinate: arcDetails.coordinate,
409
- pickup: arcDetails.layer.props.data.route.pickup_location ? arcDetails.layer.props.data.route.pickup_location : '',
410
- drop: arcDetails.layer.props.data.route.delivery_location ? arcDetails.layer.props.data.route.delivery_location : '',
411
- jobCode: arcDetails.layer.props.data.route.project ? arcDetails.layer.props.data.route.order_number : '',
412
- customer: arcDetails.layer.props.data.route.project ? arcDetails.layer.props.data.route.customer_name : '',
413
- routeType: arcDetails.layer.props.data.route.project ? 'Project' : 'Route',
414
- title: arcDetails.layer.props.data.route.project ? arcDetails.layer.props.data.route.project : arcDetails.layer.props.data.route.route_name ? arcDetails.layer.props.data.route.route_name : '',
415
- material: arcDetails.layer.props.data.route.material ? arcDetails.layer.props.data.route.material : '',
416
- type: arcDetails.layer.props.data.route.unit ? arcDetails.layer.props.data.route.unit : ''
417
- };
418
- this.createPopup(datasetForPopup);
419
- }
420
- }
421
- createPopup(datasetForPopup) {
422
- this.popup = new mapboxgl.Popup({
423
- closeButton: false,
424
- closeOnClick: false,
425
- closeOnMove: true,
426
- anchor: 'bottom-left'
427
- });
428
- this.popup.setLngLat(datasetForPopup.coordinate)
429
- .setHTML(`
430
- <div class="destination">
431
- <div class="duration">
432
- <p class="pickprt"><b>Pickup Location:</b> ${datasetForPopup.pickup}</p>
433
- <p class="dropprt"><b>Drop Location:</b> ${datasetForPopup.drop}</p>
434
- </div>
435
- ${datasetForPopup.jobCode ? '<span><b>Job Code:</b> ' + datasetForPopup.jobCode + '</span>' : ''}
436
- ${datasetForPopup.customer ? '<span><b>Customer:</b> ' + datasetForPopup.customer + '</span>' : ''}
437
- <span><b>${datasetForPopup.routeType} Name:</b> ${datasetForPopup.title}</span>
438
- <span><b>Material:</b> ${datasetForPopup.material}</span>
439
- <span><b>Type:</b> ${datasetForPopup.type}</span>
440
- </div>
441
- `)
442
- .addTo(this.map);
443
- }
444
- hexToRGB(hex) {
445
- return hex.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i, (m, r, g, b) => '#' + r + r + g + g + b + b)
446
- .substring(1).match(/.{2}/g)
447
- .map(x => parseInt(x, 16));
448
- }
449
- createMarker(routeDetails) {
450
- var _a, _b;
451
- if (routeDetails.origin[0] && routeDetails.origin[1] && routeDetails.destination[0] && routeDetails.destination[1]) {
452
- const popup = new mapboxgl.Popup({ closeButton: false }).setHTML('<b>Pickup: </b>' + ((_a = routeDetails.route) === null || _a === void 0 ? void 0 : _a.pickup_location));
453
- const popupForDestination = new mapboxgl.Popup({ closeButton: false })
454
- .setHTML('<b>Delivery: </b>' + ((_b = routeDetails.route) === null || _b === void 0 ? void 0 : _b.delivery_location));
455
- const el = document.createElement('div');
456
- el.className = 'marker';
457
- 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 mapboxgl.Marker(el)
459
- .setPopup(popup).setLngLat(routeDetails.origin).addTo(this.map);
460
- originMarker.getElement().addEventListener('mouseenter', () => originMarker.togglePopup());
461
- originMarker.getElement().addEventListener('mouseleave', () => originMarker.togglePopup());
462
- const elementForDestination = document.createElement('div');
463
- elementForDestination.className = 'marker';
464
- 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 mapboxgl.Marker(elementForDestination).setPopup(popupForDestination).setLngLat(routeDetails.destination).addTo(this.map);
466
- destinationMarker.getElement().addEventListener('mouseenter', () => destinationMarker.togglePopup());
467
- destinationMarker.getElement().addEventListener('mouseleave', () => destinationMarker.togglePopup());
468
- this.markerOriginList[routeDetails.index] = originMarker;
469
- this.markerDestinationList[routeDetails.index] = destinationMarker;
470
- const colorArray = this.hexToRGB(routeDetails.linecolor);
471
- const arcLayer = new MapboxLayer({
472
- id: 'arc-layer' + routeDetails.index,
473
- type: ArcLayer,
474
- pickable: true,
475
- data: { route: routeDetails.route, index: routeDetails.index },
476
- getWidth: 1,
477
- getSourcePosition: routeDetails.origin,
478
- getTargetPosition: routeDetails.destination,
479
- getTargetColor: [255, 255, 255],
480
- getSourceColor: [colorArray[0], colorArray[1], colorArray[2]],
481
- onHover: (info, event) => this.showRoutePopup(info, event, routeDetails.isViewRoute),
482
- });
483
- this.map.addLayer(arcLayer);
484
- }
485
- }
486
- removeRouteAndMarker(index) {
487
- return __awaiter(this, void 0, void 0, function* () {
488
- if (this.map) {
489
- this.map.getLayer(`arc-layer${index}`) ? this.map.removeLayer(`arc-layer${index}`) : '';
490
- this.map.getLayer(`line${index}`) ? this.map.removeLayer(`line${index}`) : '';
491
- this.map.getLayer(`custom_layer${index}`) ? this.map.removeLayer(`custom_layer${index}`) : '';
492
- this.map.getSource(`line${index}`) ? this.map.removeSource(`line${index}`) : '';
493
- this.map.getLayer(`route-for-job-code${index}`) ? this.map.removeLayer(`route-for-job-code${index}`) : '';
494
- this.map.getSource(`route-source-for-job-code${index}`) ? this.map.removeSource(`route-source-for-job-code${index}`) : '';
495
- this.findMarkerBound(index);
496
- this.markerOriginList[index] ? this.markerOriginList[index].remove() : '';
497
- this.markerDestinationList[index] ? this.markerDestinationList[index].remove() : '';
498
- yield true;
499
- }
500
- });
501
- }
502
- findMarkerBound(index) {
503
- const indexOfCordinates = this.originDestinationCordinates.findIndex((x) => { var _a, _b, _c, _d; return (x[0][0].toFixed(6) == ((_b = (_a = this.markerOriginList[index]) === null || _a === void 0 ? void 0 : _a.getLngLat()) === null || _b === void 0 ? void 0 : _b.lng.toFixed(6))) && (x[0][1].toFixed(6) == ((_d = (_c = this.markerOriginList[index]) === null || _c === void 0 ? void 0 : _c.getLngLat()) === null || _d === void 0 ? void 0 : _d.lat.toFixed(6))); });
504
- if (indexOfCordinates >= 0) {
505
- this.originDestinationCordinates.splice(indexOfCordinates, 1);
506
- }
507
- }
508
- filterRoute(ID, visibility, showAllFitbound) {
509
- return __awaiter(this, void 0, void 0, function* () {
510
- if (ID) {
511
- if (this.map.getLayer(`route-for-job-code${ID}`)) {
512
- this.map.setLayoutProperty(`route-for-job-code${ID}`, 'visibility', visibility);
513
- const originM = this.markerOriginList[ID].getElement();
514
- originM.style.display = ((visibility === 'visible') ? 'block' : visibility);
515
- const destinationM = this.markerDestinationList[ID].getElement();
516
- destinationM.style.display = ((visibility === 'visible') ? 'block' : visibility);
517
- if (visibility === 'none' && showAllFitbound) {
518
- this.findMarkerBound(ID);
519
- this.extendReBound();
520
- }
521
- }
522
- if (this.map.getLayer(`arc-layer${ID}`)) {
523
- this.map.setLayoutProperty(`arc-layer${ID}`, 'visibility', visibility);
524
- }
525
- }
526
- yield true;
527
- });
528
- }
529
- extendBound(route, showAllFitbound) {
530
- return new Promise((resolve, reject) => {
531
- if (route) {
532
- if (typeof route === 'string') {
533
- let path = route.split(';');
534
- path = path.map((ele) => { return ele = this.formateLatLong(ele); });
535
- path.forEach((ele, index) => {
536
- if (ele.length === 1)
537
- path.splice(index, 1);
538
- });
539
- route = path;
540
- }
541
- if (route[0][0] && route[0][1] && route[route.length - 1][0] && route[route.length - 1][1]) {
542
- this.originDestinationCordinates.push(route);
543
- route.map((item) => {
544
- this.bounds.extend(item);
545
- });
546
- }
547
- }
548
- if (showAllFitbound) {
549
- const padding = { top: this.padding.top, bottom: (this.padding.bottom + (this.windowActualHeightWidth.availHeight - (window.innerHeight - 65))), left: this.padding.left, right: this.padding.right };
550
- setTimeout(() => {
551
- if (showAllFitbound && (Object.keys(this.bounds).length > 0))
552
- this.map.fitBounds(this.bounds, { padding }, { fitboundComplete: true });
553
- }, 100);
554
- this.map.once('moveend', (event) => {
555
- if (event.fitboundComplete) {
556
- resolve(true);
557
- }
558
- });
559
- }
560
- });
561
- }
562
- extendReBound(bottom) {
563
- return new Promise((resolve, reject) => {
564
- this.bounds = new mapboxgl.LngLatBounds();
565
- if (this.originDestinationCordinates.length >= 0) {
566
- this.originDestinationCordinates.map((item, index) => {
567
- item.map((route) => {
568
- this.bounds.extend(route);
569
- });
570
- if (index === (this.originDestinationCordinates.length - 1)) {
571
- const padding = { top: this.padding.top, bottom: (this.padding.bottom + (this.windowActualHeightWidth.availHeight - (window.innerHeight - 65))), left: this.padding.left, right: this.padding.right };
572
- setTimeout(() => {
573
- if (this.originDestinationCordinates.length > 0)
574
- this.map.fitBounds(this.bounds, { padding });
575
- }, 500);
576
- resolve(true);
577
- }
578
- });
579
- }
580
- else {
581
- resolve(true);
582
- }
583
- });
584
- }
585
- plotRoute(route, i, type, enablefitbound, showAllFitbound) {
586
- return new Promise((resolve, reject) => {
587
- let param = {};
588
- if (['jobcode'].includes(type)) {
589
- param['job'] = route['job_id'];
590
- this.utils.postDataWithRestUrl('schedule/job/path', param).subscribe((res) => {
591
- if (res['data']['route']) {
592
- let path = res['data']['route'].split(';');
593
- path = path.map((ele) => { return ele = this.formateLatLong(ele); });
594
- path.forEach((ele, index) => {
595
- if (ele.length === 1)
596
- path.splice(index, 1);
597
- });
598
- route['path'] = path;
599
- this.extendBound(route['path'], showAllFitbound);
600
- if (route['path'] && route['path'].length > 0)
601
- this.drawLine(route['path'], i, route, enablefitbound, type);
602
- route['index'] = i;
603
- }
604
- else {
605
- this.extendBound(null, showAllFitbound);
606
- }
607
- resolve(true);
608
- }, (err) => {
609
- if (err) {
610
- reject(false);
611
- }
612
- });
613
- }
614
- else if (['jobrouteList', 'addroute'].includes(type)) {
615
- if (route['path'] && route['path'].length > 0) {
616
- let path = route['path'].split(';');
617
- path = path.map((ele) => { return ele = this.formateLatLong(ele); });
618
- path.forEach((ele, index) => {
619
- if (ele.length === 1)
620
- path.splice(index, 1);
621
- });
622
- this.extendBound(path, showAllFitbound);
623
- this.drawLine(path, i, route, enablefitbound, type);
624
- }
625
- ;
626
- }
627
- });
628
- }
629
- clearBound() { this.bounds = new mapboxgl.LngLatBounds(); this.originDestinationCordinates = []; this.clearPadding(); }
630
- formateLatLong(latlong) { return latlong ? latlong.split(',').map(x => +x).reverse() : null; }
631
- clearBoundWithCordinates() {
632
- this.bounds = new mapboxgl.LngLatBounds();
633
- this.originDestinationCordinates = [];
634
- }
635
- onResize(event) {
636
- if (!this.bounds.isEmpty()) {
637
- this.windowActualHeightWidth.availHeight = (window.innerHeight > window.screen.availHeight) ? window.innerHeight : window.screen.availHeight;
638
- setTimeout(() => {
639
- this.map.fitBounds(this.bounds, { padding: { top: this.padding.top, bottom: this.padding.bottom + (this.windowActualHeightWidth.availHeight - (event.target.innerHeight - 65)), left: this.padding.left, right: this.padding.right } });
640
- }, 500);
641
- }
642
- }
643
- setWindowHeight(screen) {
644
- this.windowActualHeightWidth.availHeight = screen;
645
- }
646
- setPadding(padding) { this.padding = padding; }
647
- clearPadding() { this.padding = null; }
648
- removeJobFromMap(data) {
649
- data.map((ele, index) => {
650
- const id = (ele['job_id'] ? ele['job_id'] : ele['route_id']);
651
- this.removeRouteAndMarker(id);
652
- if (index === (data.length - 1)) {
653
- this.extendReBound();
654
- }
655
- });
656
- }
657
- }
658
- CoolmapService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: CoolmapService, deps: [{ token: UtilsService }, { token: i2$1.EventManager }], target: i0.ɵɵFactoryTarget.Injectable });
659
- CoolmapService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: CoolmapService, providedIn: 'root' });
660
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: CoolmapService, decorators: [{
661
- type: Injectable,
662
- args: [{ providedIn: 'root' }]
663
- }], ctorParameters: function () { return [{ type: UtilsService }, { type: i2$1.EventManager }]; } });
664
-
665
- class Route {
666
- constructor() {
667
- this.index = 0;
668
- }
669
- }
670
- const EstinationData = ['estimated_distance', 'estimated_time'];
671
- var EstinationEnum;
672
- (function (EstinationEnum) {
673
- EstinationEnum["estimated_distance"] = "miles";
674
- EstinationEnum["estimated_time"] = "time";
675
- })(EstinationEnum || (EstinationEnum = {}));
676
- const JobCodeOverviewData = ['customer_contact', 'delivery_contact', 'pickup_location', 'delivery_location', 'project', 'unit'];
677
- var JobCodeOverviewEnum;
678
- (function (JobCodeOverviewEnum) {
679
- JobCodeOverviewEnum["customer_contact"] = "Customer Contact";
680
- JobCodeOverviewEnum["delivery_contact"] = "Delivery Contact";
681
- JobCodeOverviewEnum["pickup_location"] = "Pickup";
682
- JobCodeOverviewEnum["delivery_location"] = "Delivery";
683
- JobCodeOverviewEnum["project"] = "Project Name";
684
- JobCodeOverviewEnum["unit"] = "Job Type";
685
- })(JobCodeOverviewEnum || (JobCodeOverviewEnum = {}));
686
- const DriversmsCardKey = ['order_number', 'date', 'values', 'material', 'unit', 'pickup_location', 'delivery_location'];
687
- var DriverSmsCardEnum;
688
- (function (DriverSmsCardEnum) {
689
- DriverSmsCardEnum["order_number"] = "Jobcode";
690
- DriverSmsCardEnum["date"] = "Date";
691
- DriverSmsCardEnum["values"] = "Total tasks";
692
- DriverSmsCardEnum["material"] = "Material";
693
- DriverSmsCardEnum["unit"] = "Unit";
694
- DriverSmsCardEnum["pickup_location"] = "Pickup Address";
695
- DriverSmsCardEnum["delivery_location"] = "Delivery Address";
696
- })(DriverSmsCardEnum || (DriverSmsCardEnum = {}));
697
- class PopupData {
698
- }
699
-
700
- /*
701
- * Public API Surface of coolmap-services
702
- */
703
-
704
- /**
705
- * Generated bundle index. Do not edit.
706
- */
707
-
708
- export { CoolmapService, DriverSmsCardEnum, DriversmsCardKey, EstinationData, EstinationEnum, JobCodeOverviewData, JobCodeOverviewEnum, PopupData, Route, UtilsService };
709
- //# sourceMappingURL=aggdirect-coolmap-services.mjs.map