@aggdirect/coolmap 2.5.2 → 2.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/README.md +57 -57
  2. package/esm2020/aggdirect-coolmap.mjs +4 -4
  3. package/esm2020/lib/component/add-route/add-route.component.mjs +335 -335
  4. package/esm2020/lib/component/job-code/job-code.component.mjs +181 -181
  5. package/esm2020/lib/component/map/map.component.mjs +37 -37
  6. package/esm2020/lib/component/nav/layout/add-route-nav/add-route-nav.component.mjs +146 -146
  7. package/esm2020/lib/component/nav/layout/job-code-nav/job-code-nav.component.mjs +114 -114
  8. package/esm2020/lib/component/nav/nav.component.mjs +52 -52
  9. package/esm2020/lib/component/route-jobcode-list/job-code-list-card/job-code-list-card.component.mjs +72 -72
  10. package/esm2020/lib/component/route-jobcode-list/route-jobcode-list.component.mjs +316 -316
  11. package/esm2020/lib/component/route-jobcode-list/sms-card-details-overview/sms-card-details-overview.component.mjs +19 -19
  12. package/esm2020/lib/component/route-jobcode-list/view-route-list-card/view-route-list-card.component.mjs +33 -33
  13. package/esm2020/lib/component/shared/dialog/dialog.component.mjs +29 -29
  14. package/esm2020/lib/component/shared/estimation-display/estimation-display.component.mjs +19 -19
  15. package/esm2020/lib/component/shared/job-route-list/job-route-list.component.mjs +71 -71
  16. package/esm2020/lib/component/shared/jobcode-overview/jobcode-overview.component.mjs +24 -24
  17. package/esm2020/lib/component/shared/jobcode-status/jobcode-status.component.mjs +14 -14
  18. package/esm2020/lib/component/shared/route-info-card/route-info-card.component.mjs +57 -57
  19. package/esm2020/lib/coolmap.module.mjs +185 -185
  20. package/esm2020/public-api.mjs +19 -19
  21. package/fesm2015/aggdirect-coolmap.mjs +1535 -1535
  22. package/fesm2015/aggdirect-coolmap.mjs.map +1 -1
  23. package/fesm2020/aggdirect-coolmap.mjs +1497 -1497
  24. package/fesm2020/aggdirect-coolmap.mjs.map +1 -1
  25. package/index.d.ts +5 -5
  26. package/lib/component/add-route/add-route.component.d.ts +61 -61
  27. package/lib/component/job-code/job-code.component.d.ts +42 -42
  28. package/lib/component/map/map.component.d.ts +15 -15
  29. package/lib/component/nav/layout/add-route-nav/add-route-nav.component.d.ts +49 -49
  30. package/lib/component/nav/layout/job-code-nav/job-code-nav.component.d.ts +42 -42
  31. package/lib/component/nav/nav.component.d.ts +31 -31
  32. package/lib/component/route-jobcode-list/job-code-list-card/job-code-list-card.component.d.ts +20 -20
  33. package/lib/component/route-jobcode-list/route-jobcode-list.component.d.ts +42 -42
  34. package/lib/component/route-jobcode-list/sms-card-details-overview/sms-card-details-overview.component.d.ts +9 -9
  35. package/lib/component/route-jobcode-list/view-route-list-card/view-route-list-card.component.d.ts +12 -12
  36. package/lib/component/shared/dialog/dialog.component.d.ts +13 -13
  37. package/lib/component/shared/estimation-display/estimation-display.component.d.ts +8 -8
  38. package/lib/component/shared/job-route-list/job-route-list.component.d.ts +26 -26
  39. package/lib/component/shared/jobcode-overview/jobcode-overview.component.d.ts +10 -10
  40. package/lib/component/shared/jobcode-status/jobcode-status.component.d.ts +7 -7
  41. package/lib/component/shared/route-info-card/route-info-card.component.d.ts +29 -29
  42. package/lib/coolmap.module.d.ts +44 -44
  43. package/package.json +10 -2
  44. package/public-api.d.ts +15 -15
@@ -1,181 +1,181 @@
1
- import { SelectionModel } from '@angular/cdk/collections';
2
- import { Component, Input, Output, EventEmitter, Inject } from '@angular/core';
3
- import { Subject, takeUntil } from 'rxjs';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@aggdirect/coolmap-services";
6
- import * as i2 from "@angular/common";
7
- import * as i3 from "@angular/cdk/drag-drop";
8
- import * as i4 from "@angular/material/icon";
9
- import * as i5 from "ngx-perfect-scrollbar";
10
- import * as i6 from "../shared/job-route-list/job-route-list.component";
11
- import * as i7 from "../shared/jobcode-status/jobcode-status.component";
12
- import * as i8 from "../shared/jobcode-overview/jobcode-overview.component";
13
- import * as i9 from "../shared/route-info-card/route-info-card.component";
14
- export class JobCodeComponent {
15
- constructor(utils, coolMap, config) {
16
- this.utils = utils;
17
- this.coolMap = coolMap;
18
- this.config = config;
19
- this.isVisible = false;
20
- this.routes = [];
21
- this.selectedRoute = new SelectionModel(true, []);
22
- this.clearJobDetails = new EventEmitter();
23
- this.openShareRoute = new EventEmitter();
24
- this.isOverlapRouteSection = false;
25
- this.destroyer$ = new Subject();
26
- this.preventMouseout = false;
27
- this.utils.clearViewRouteforJobCodeObserve.pipe(takeUntil(this.destroyer$)).subscribe(res => {
28
- if (res)
29
- this.coolMap.removeJobFromMap(this.selectedRoute.selected);
30
- this.selectedRoute.clear();
31
- });
32
- }
33
- ngOnInit() { this.checkAndCallRouteList(); }
34
- checkAndCallRouteList() {
35
- this.utils.clearOptions();
36
- if (this.config.repository === 'customer') {
37
- this.utils.fetchUnitsList().then((res) => {
38
- this.unitList = res;
39
- this.utils.fetchMaterialsListForCustomer().then((res) => {
40
- this.materialsList = res;
41
- this.getRouteListForCustomer();
42
- });
43
- });
44
- }
45
- else {
46
- this.getRouteListForCoolMap();
47
- }
48
- }
49
- getUnitName(data) {
50
- let unitName = '';
51
- this.unitList.map((res) => {
52
- if (res.id === data.unit_id) {
53
- unitName = res.type;
54
- }
55
- });
56
- return unitName;
57
- }
58
- getMaterialName(data) {
59
- let materialName = '';
60
- this.materialsList.map((res) => {
61
- if (res.sub_material_id === data.materials_id) {
62
- materialName = res.label;
63
- }
64
- });
65
- return materialName;
66
- }
67
- getRouteListForCoolMap() {
68
- this.utils.getData('routes/all').pipe(takeUntil(this.destroyer$)).subscribe((res) => {
69
- if (res) {
70
- this.routes = res.data;
71
- this.masterRoutes = res.data;
72
- this.preventListUpdate = false;
73
- this.routes.forEach((ele) => { this.utils.makeOptions(ele); });
74
- }
75
- });
76
- }
77
- getRouteListForCustomer() {
78
- const dataset = {
79
- customer_id: this.customerRepoDetails.customer.id
80
- };
81
- this.utils.postdata('routes/all', dataset).pipe(takeUntil(this.destroyer$)).subscribe((res) => {
82
- if (res) {
83
- this.routes = res.data;
84
- this.preventListUpdate = false;
85
- this.routes.map((ele) => {
86
- ele.unit = this.getUnitName(ele);
87
- ele.materialLabel = this.getMaterialName(ele);
88
- ele.material = this.getMaterialName(ele).split('|')[0].trim();
89
- this.utils.makeOptions(ele);
90
- });
91
- this.masterRoutes = this.routes;
92
- }
93
- });
94
- }
95
- toggleSidemenu() {
96
- this.isVisible = !this.isVisible;
97
- this.detailsCardEnable = false;
98
- this.preventMouseout = false;
99
- }
100
- clearJob() { this.clearJobDetails.emit(true); this.utils.preVentJobdetailclose.next(false); }
101
- selectRoute(event) {
102
- const i = this.selectedRoute.selected.findIndex(ele => ele['order_number'] === event['order_number']);
103
- this.selectedRoute.toggle(event);
104
- if (!this.selectedRoute.isSelected(event) && event['route_id']) {
105
- this.coolMap.removeRouteAndMarker(event['route_id']).then((res) => {
106
- this.coolMap.extendReBound();
107
- });
108
- }
109
- else {
110
- this.coolMap.plotRoute(event, event['route_id'], 'jobrouteList', false, true);
111
- }
112
- }
113
- masterToggle() {
114
- if (this.routes.length === this.selectedRoute.selected.length) {
115
- this.selectedRoute.clear();
116
- this.routes.forEach(row => {
117
- this.coolMap.removeRouteAndMarker(row['route_id']).then((res) => { this.coolMap.extendReBound(); });
118
- });
119
- }
120
- else {
121
- this.routes.forEach(row => {
122
- this.selectedRoute.select(row);
123
- this.coolMap.plotRoute(row, row['route_id'], 'jobrouteList', false, true);
124
- });
125
- }
126
- }
127
- togglerouteDetails(eventType, route, mouseOut) {
128
- if (typeof (eventType) === 'string') {
129
- this.preventMouseout = true;
130
- this.utils.setdictValue('route-details', JSON.stringify(route));
131
- }
132
- if (typeof (eventType) === 'boolean' && eventType && !this.preventMouseout) {
133
- this.detailsCardEnable = eventType;
134
- }
135
- ;
136
- if (typeof (eventType) === 'boolean' && !eventType && !this.preventMouseout) {
137
- this.detailsCardEnable = eventType;
138
- }
139
- ;
140
- if (this.preventMouseout && !this.detailsCardEnable)
141
- this.preventMouseout = false;
142
- if (mouseOut) {
143
- if (this.preventMouseout) {
144
- route = this.utils.getdictValue('route-details');
145
- this.routeCardDetail = route;
146
- }
147
- if (!this.preventMouseout) {
148
- this.routeCardDetail = route;
149
- }
150
- }
151
- else {
152
- this.routeCardDetail = route;
153
- }
154
- this.routeCardDetail['created_at'] = this.utils.getDateFormat(new Date(this.routeCardDetail['created_at']), '/');
155
- }
156
- openShareRouteModal(data) {
157
- this.openShareRoute.emit(data);
158
- }
159
- ngOnDestroy() {
160
- this.destroyer$.next(true);
161
- this.destroyer$.unsubscribe();
162
- }
163
- }
164
- JobCodeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: JobCodeComponent, deps: [{ token: i1.UtilsService }, { token: i1.CoolmapService }, { token: 'memberData' }], target: i0.ɵɵFactoryTarget.Component });
165
- JobCodeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: JobCodeComponent, selector: "app-job-code", inputs: { jobdetail: "jobdetail", customerRepoDetails: "customerRepoDetails" }, outputs: { clearJobDetails: "clearJobDetails", openShareRoute: "openShareRoute" }, ngImport: i0, template: "<div class=\"jobcode_detailprt\" (click)=\"isOverlapRouteSection = false\" *ngIf=\"jobdetail\" [ngClass]=\"{'overlap': !isOverlapRouteSection}\" cdkDrag>\r\n <span class=\"close\"><mat-icon (click)=\"clearJob()\">clear</mat-icon></span>\r\n <div class=\"job_details_area\">\r\n <div class=\"detailnameprt\">\r\n <app-jobcode-status [jobValue]=\"jobdetail\"></app-jobcode-status>\r\n </div>\r\n <app-jobcode-overview [jobValue]=\"jobdetail\"></app-jobcode-overview>\r\n </div>\r\n</div>\r\n\r\n<div class=\"route_listprt\" (click)=\"isOverlapRouteSection = true\" [ngClass]=\"{ 'show': isVisible, 'overlap': isOverlapRouteSection}\">\r\n <div class=\"listing_toggle\" (click)=\"toggleSidemenu()\">\r\n <img src=\"assets/images/route.svg\" alt=\"\" />\r\n </div>\r\n\r\n <div class=\"listing_box\">\r\n <div class=\"closebtn\" (click)=\"toggleSidemenu()\">\r\n <mat-icon>clear</mat-icon>\r\n </div>\r\n\r\n <div class=\"btnprt\">\r\n <h2> List of Routes </h2>\r\n <button (click)=\"masterToggle()\">{{routes && routes.length > 0 && routes.length === selectedRoute.selected.length ? 'Uncheck' : 'Check'}} All</button>\r\n </div>\r\n\r\n <app-job-route-list [routes]=\"routes\" [masterRoutes]=\"masterRoutes\" [selectedRoute]=\"selectedRoute\" (changeRoutes)=\"routes = $event\" (changeSelectedRoute)=\"selectedRoute = $event\"></app-job-route-list>\r\n\r\n <perfect-scrollbar>\r\n <ul *ngIf=\"routes['length'] > 0\">\r\n <li *ngFor=\"let list of routes\">\r\n <div class=\"iconprt\">\r\n <span>\r\n <input type=\"checkbox\" [checked]=\"selectedRoute.isSelected(list)\"\r\n (change)=\"$event ? selectRoute(list) : null\" /><label>&nbsp;</label>\r\n <div class=\"border\"></div>\r\n </span>\r\n <div class=\"statusunit\" [ngClass]=\"list['unit']\">{{list['unit']}}</div>\r\n <div class=\"infoicon\">\r\n <img (mouseenter)=\"togglerouteDetails(true, list)\" (mouseout)=\"togglerouteDetails(false, list, true)\"\r\n (click)=\"togglerouteDetails('click', list)\" src=\"assets/images/info_icon.png\" [alt]=\"\" />\r\n </div>\r\n <div class=\"infoicon\" *ngIf=\"config.repository === 'customer'\">\r\n <img src=\"assets/images/share_icon.png\" (click)=\"openShareRouteModal(list)\" [alt]=\"\" />\r\n </div>\r\n </div>\r\n <div class=\"pickprtbox\">\r\n <h2> {{list['route_name']}} </h2>\r\n <h3><ng-container *ngIf=\"config?.repository === 'coolmap'\">{{list['customer_name']}} | </ng-container>{{config.repository === 'coolmap' ? list['material'] : list['materialLabel']}}</h3>\r\n <div class=\"pickdropprt\">\r\n <div class=\"pickprt\">\r\n <b>\r\n <h4>{{list['pickup_location']}}</h4>\r\n </b>\r\n </div>\r\n <div class=\"dropprt\">\r\n <b>\r\n <h4>{{list['delivery_location']}}</h4>\r\n </b>\r\n </div>\r\n </div>\r\n </div>\r\n </li>\r\n </ul>\r\n <p style=\"color: #fff;\" *ngIf=\"routes.length === 0\">No Route found</p>\r\n </perfect-scrollbar>\r\n </div>\r\n\r\n <div class=\"route_detail\" *ngIf=\"detailsCardEnable\">\r\n <div class=\"closebtnroutedetail\" (click)=\"detailsCardEnable = false; preventMouseout = false\">\r\n <mat-icon>clear</mat-icon>\r\n </div>\r\n <lib-route-info-card [propData]=\"{className: 'listRoutecard', repository: config['repository']}\" [popupData]=\"routeCardDetail\"></lib-route-info-card>\r\n <div class=\"createTxt\">\r\n <small>\r\n Created by {{routeCardDetail?.created_by_name}} on {{routeCardDetail?.created_at}}\r\n </small>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".jobcode_detailprt{position:absolute;left:300px;bottom:10px;background:white;padding:15px 20px;border-radius:20px;max-width:350px;z-index:999;box-shadow:0 0 5px #0000001a}.jobcode_detailprt .close{box-shadow:0 0 5px #0000001c;border-radius:100%;width:30px;height:30px;display:flex;justify-content:center;align-items:center;cursor:pointer;background:#fff;position:absolute;top:-11px;left:-11px}@keyframes autoslide{to{transform:translate(calc(90vw - 100%))}0%{transform:translate(0)}}.route_listprt .listing_toggle{background:white;border-radius:15px;padding:5px;position:absolute;right:10px;top:20px;cursor:pointer}.route_listprt .listing_toggle img{width:28px}.route_listprt .listing_box{background:#282828;height:100vh;position:fixed;right:0;top:0;z-index:1111;box-shadow:-3px 0 5px #ffffff14;transition:.5s;-webkit-transition:.5s;-moz-transition:.5s;width:0;border-radius:40px 0 0;opacity:0}.route_listprt .listing_box .closebtn{display:none}.route_listprt .listing_box ul{padding:0 20px 0 0}.route_listprt .listing_box ul li{background:#4a4a4a;padding:10px 15px;border-radius:15px;display:flex;margin-bottom:10px;position:relative;height:inherit}@media (min-width: 1600px){.route_listprt .listing_box ul li{padding:6px 15px;margin-bottom:5px}}.route_listprt .listing_box ul li .iconprt{display:flex;flex-direction:column}.route_listprt .listing_box ul li .iconprt span{display:flex;align-items:center;margin-bottom:32px}.route_listprt .listing_box ul li .iconprt span input[type=checkbox]{width:100%;height:100%;margin-right:10px;opacity:0;position:absolute;left:0;margin-left:0;top:0;z-index:3;cursor:pointer}.route_listprt .listing_box ul li .iconprt span input[type=checkbox]:checked+label{background:url(../../../assets/images/fill-check.png) 16px 15px no-repeat}.route_listprt .listing_box ul li .iconprt span label{background:url(../../../assets/images/blank-check.png) 16px 15px no-repeat;width:100%;position:relative;z-index:2;font-size:12px;color:#878787;height:100%;position:absolute;top:0;left:0}.route_listprt .listing_box ul li .iconprt span .border{position:absolute;width:100%;height:100%;left:0;right:0;top:0;border-radius:15px}.route_listprt .listing_box ul li .iconprt span input:checked~.border{border-left:1px solid white;border-right:1px solid white;border-top:1px solid white;border-bottom:1px solid white}.route_listprt .listing_box ul li .iconprt span h2{margin-left:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:150px;padding-left:16px;font-size:.9rem;margin-bottom:0;font-weight:400;margin-top:0}.route_listprt .listing_box ul li .iconprt .statusunit{border-radius:30px;font-size:0;color:#fff;text-transform:capitalize;font-weight:500;width:20px;height:20px;text-align:center;line-height:20px;margin-bottom:7px}.route_listprt .listing_box ul li .iconprt .statusunit:first-letter{font-size:.8rem}.route_listprt .listing_box ul li .iconprt .statusunit.Ton{background:#ff7272}.route_listprt .listing_box ul li .iconprt .statusunit.Load{background:#a3c52e}.route_listprt .listing_box ul li .iconprt .statusunit.Hourly{background:#ae23d1}@media (min-width: 1600px){.route_listprt .listing_box ul li .iconprt .statusunit{line-height:21px}}.route_listprt .listing_box ul li .iconprt .infoicon{z-index:5;cursor:pointer}.route_listprt .listing_box ul li .iconprt .infoicon img{width:20px;height:20px}.route_listprt .listing_box ul li .pickprtbox{margin-left:10px}.route_listprt .listing_box ul li .pickprtbox h2{font-size:.9rem;margin:3px 0 5px;white-space:nowrap;text-overflow:ellipsis;max-width:195px;overflow:hidden}.route_listprt .listing_box ul li h3{font-size:.8rem;color:#979797;font-weight:600;margin-top:0;white-space:nowrap;text-overflow:ellipsis;max-width:195px;overflow:hidden;margin-bottom:5px}.route_listprt .listing_box ul li .pickdropprt{font-size:.75rem}.route_listprt .listing_box ul li .pickdropprt .pickprt{position:relative;display:flex;align-items:center;padding-bottom:10px}.route_listprt .listing_box ul li .pickdropprt .pickprt span{padding-left:0;padding-right:20px;display:block}.route_listprt .listing_box ul li .pickdropprt .pickprt b{position:relative}.route_listprt .listing_box ul li .pickdropprt .pickprt b:after{background:#bcbcbc;width:1px;height:100%;left:3px;content:\"\";position:absolute;top:10px}.route_listprt .listing_box ul li .pickdropprt .pickprt h4{position:relative;padding-left:15px;margin:0;line-height:18px;color:#bcbcbc;font-weight:400;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical}.route_listprt .listing_box ul li .pickdropprt .pickprt h4:before{background:#bcbcbc;top:4px;left:0;position:absolute;content:\"\";width:7px;height:7px;border-radius:100%}.route_listprt .listing_box ul li .pickdropprt .dropprt{position:relative;padding-bottom:10px;display:flex;align-items:center}.route_listprt .listing_box ul li .pickdropprt .dropprt span{padding-left:0;padding-right:20px;display:block}.route_listprt .listing_box ul li .pickdropprt .dropprt b{position:relative}.route_listprt .listing_box ul li .pickdropprt .dropprt b:after{background:#bcbcbc;width:1px;height:12px;left:3px;content:\"\";position:absolute;top:-7px}.route_listprt .listing_box ul li .pickdropprt .dropprt h4{position:relative;padding-left:15px;margin:0;line-height:18px;color:#bcbcbc;font-weight:400;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical}.route_listprt .listing_box ul li .pickdropprt .dropprt h4:before{background:#bcbcbc;top:4px;left:0;position:absolute;content:\"\";width:7px;height:7px;border-radius:100%}.route_listprt.show .listing_box{width:300px;max-width:300px;flex:0 0 350px;transition:.5s;-webkit-transition:.5s;-moz-transition:.5s;padding:40px 0 40px 20px;opacity:1}.route_listprt.show .listing_box h2{color:#fff;white-space:nowrap}.route_listprt.show .listing_box .closebtn{position:absolute;left:-33px;top:50px;background:#282828;color:#fff;padding:8px;border-top-left-radius:15px;border-bottom-left-radius:15px;cursor:pointer;box-shadow:-4px 2px 5px #ffffff14;display:block}.btnprt{display:flex;justify-content:space-between;align-items:center;padding-right:20px}.btnprt h2{margin:0}.btnprt button{font-size:15px;padding:8px 20px;background-color:#326ad3;color:#fff;border:none;border-radius:10px;box-shadow:none;outline:none}.hidden{display:none}.route_detail{background:#282828;position:absolute;width:260px;top:50%;transform:translateY(-50%);right:310px;border-radius:20px;padding:10px;box-shadow:0 0 5px #ffffff36}.createTxt small{color:#fff;font-size:.7rem}.closebtnroutedetail{box-shadow:0 0 5px #0000001c;border-radius:100%;width:30px;height:30px;display:flex;justify-content:center;align-items:center;cursor:pointer;background:#f5f5f5;position:absolute;top:-7px;left:-11px}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5.PerfectScrollbarComponent, selector: "perfect-scrollbar", inputs: ["disabled", "usePSClass", "autoPropagation", "scrollIndicators", "config"], outputs: ["psScrollY", "psScrollX", "psScrollUp", "psScrollDown", "psScrollLeft", "psScrollRight", "psYReachEnd", "psYReachStart", "psXReachEnd", "psXReachStart"], exportAs: ["ngxPerfectScrollbar"] }, { kind: "component", type: i6.JobRouteListComponent, selector: "app-job-route-list", inputs: ["routes", "selectedRoute", "masterRoutes"], outputs: ["changeNav", "changeRoutes", "changeSelectedRoute"] }, { kind: "component", type: i7.JobcodeStatusComponent, selector: "app-jobcode-status", inputs: ["jobValue"] }, { kind: "component", type: i8.JobcodeOverviewComponent, selector: "app-jobcode-overview", inputs: ["jobValue"] }, { kind: "component", type: i9.RouteInfoCardComponent, selector: "lib-route-info-card", inputs: ["popupData", "propData"] }] });
166
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: JobCodeComponent, decorators: [{
167
- type: Component,
168
- args: [{ selector: 'app-job-code', template: "<div class=\"jobcode_detailprt\" (click)=\"isOverlapRouteSection = false\" *ngIf=\"jobdetail\" [ngClass]=\"{'overlap': !isOverlapRouteSection}\" cdkDrag>\r\n <span class=\"close\"><mat-icon (click)=\"clearJob()\">clear</mat-icon></span>\r\n <div class=\"job_details_area\">\r\n <div class=\"detailnameprt\">\r\n <app-jobcode-status [jobValue]=\"jobdetail\"></app-jobcode-status>\r\n </div>\r\n <app-jobcode-overview [jobValue]=\"jobdetail\"></app-jobcode-overview>\r\n </div>\r\n</div>\r\n\r\n<div class=\"route_listprt\" (click)=\"isOverlapRouteSection = true\" [ngClass]=\"{ 'show': isVisible, 'overlap': isOverlapRouteSection}\">\r\n <div class=\"listing_toggle\" (click)=\"toggleSidemenu()\">\r\n <img src=\"assets/images/route.svg\" alt=\"\" />\r\n </div>\r\n\r\n <div class=\"listing_box\">\r\n <div class=\"closebtn\" (click)=\"toggleSidemenu()\">\r\n <mat-icon>clear</mat-icon>\r\n </div>\r\n\r\n <div class=\"btnprt\">\r\n <h2> List of Routes </h2>\r\n <button (click)=\"masterToggle()\">{{routes && routes.length > 0 && routes.length === selectedRoute.selected.length ? 'Uncheck' : 'Check'}} All</button>\r\n </div>\r\n\r\n <app-job-route-list [routes]=\"routes\" [masterRoutes]=\"masterRoutes\" [selectedRoute]=\"selectedRoute\" (changeRoutes)=\"routes = $event\" (changeSelectedRoute)=\"selectedRoute = $event\"></app-job-route-list>\r\n\r\n <perfect-scrollbar>\r\n <ul *ngIf=\"routes['length'] > 0\">\r\n <li *ngFor=\"let list of routes\">\r\n <div class=\"iconprt\">\r\n <span>\r\n <input type=\"checkbox\" [checked]=\"selectedRoute.isSelected(list)\"\r\n (change)=\"$event ? selectRoute(list) : null\" /><label>&nbsp;</label>\r\n <div class=\"border\"></div>\r\n </span>\r\n <div class=\"statusunit\" [ngClass]=\"list['unit']\">{{list['unit']}}</div>\r\n <div class=\"infoicon\">\r\n <img (mouseenter)=\"togglerouteDetails(true, list)\" (mouseout)=\"togglerouteDetails(false, list, true)\"\r\n (click)=\"togglerouteDetails('click', list)\" src=\"assets/images/info_icon.png\" [alt]=\"\" />\r\n </div>\r\n <div class=\"infoicon\" *ngIf=\"config.repository === 'customer'\">\r\n <img src=\"assets/images/share_icon.png\" (click)=\"openShareRouteModal(list)\" [alt]=\"\" />\r\n </div>\r\n </div>\r\n <div class=\"pickprtbox\">\r\n <h2> {{list['route_name']}} </h2>\r\n <h3><ng-container *ngIf=\"config?.repository === 'coolmap'\">{{list['customer_name']}} | </ng-container>{{config.repository === 'coolmap' ? list['material'] : list['materialLabel']}}</h3>\r\n <div class=\"pickdropprt\">\r\n <div class=\"pickprt\">\r\n <b>\r\n <h4>{{list['pickup_location']}}</h4>\r\n </b>\r\n </div>\r\n <div class=\"dropprt\">\r\n <b>\r\n <h4>{{list['delivery_location']}}</h4>\r\n </b>\r\n </div>\r\n </div>\r\n </div>\r\n </li>\r\n </ul>\r\n <p style=\"color: #fff;\" *ngIf=\"routes.length === 0\">No Route found</p>\r\n </perfect-scrollbar>\r\n </div>\r\n\r\n <div class=\"route_detail\" *ngIf=\"detailsCardEnable\">\r\n <div class=\"closebtnroutedetail\" (click)=\"detailsCardEnable = false; preventMouseout = false\">\r\n <mat-icon>clear</mat-icon>\r\n </div>\r\n <lib-route-info-card [propData]=\"{className: 'listRoutecard', repository: config['repository']}\" [popupData]=\"routeCardDetail\"></lib-route-info-card>\r\n <div class=\"createTxt\">\r\n <small>\r\n Created by {{routeCardDetail?.created_by_name}} on {{routeCardDetail?.created_at}}\r\n </small>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".jobcode_detailprt{position:absolute;left:300px;bottom:10px;background:white;padding:15px 20px;border-radius:20px;max-width:350px;z-index:999;box-shadow:0 0 5px #0000001a}.jobcode_detailprt .close{box-shadow:0 0 5px #0000001c;border-radius:100%;width:30px;height:30px;display:flex;justify-content:center;align-items:center;cursor:pointer;background:#fff;position:absolute;top:-11px;left:-11px}@keyframes autoslide{to{transform:translate(calc(90vw - 100%))}0%{transform:translate(0)}}.route_listprt .listing_toggle{background:white;border-radius:15px;padding:5px;position:absolute;right:10px;top:20px;cursor:pointer}.route_listprt .listing_toggle img{width:28px}.route_listprt .listing_box{background:#282828;height:100vh;position:fixed;right:0;top:0;z-index:1111;box-shadow:-3px 0 5px #ffffff14;transition:.5s;-webkit-transition:.5s;-moz-transition:.5s;width:0;border-radius:40px 0 0;opacity:0}.route_listprt .listing_box .closebtn{display:none}.route_listprt .listing_box ul{padding:0 20px 0 0}.route_listprt .listing_box ul li{background:#4a4a4a;padding:10px 15px;border-radius:15px;display:flex;margin-bottom:10px;position:relative;height:inherit}@media (min-width: 1600px){.route_listprt .listing_box ul li{padding:6px 15px;margin-bottom:5px}}.route_listprt .listing_box ul li .iconprt{display:flex;flex-direction:column}.route_listprt .listing_box ul li .iconprt span{display:flex;align-items:center;margin-bottom:32px}.route_listprt .listing_box ul li .iconprt span input[type=checkbox]{width:100%;height:100%;margin-right:10px;opacity:0;position:absolute;left:0;margin-left:0;top:0;z-index:3;cursor:pointer}.route_listprt .listing_box ul li .iconprt span input[type=checkbox]:checked+label{background:url(../../../assets/images/fill-check.png) 16px 15px no-repeat}.route_listprt .listing_box ul li .iconprt span label{background:url(../../../assets/images/blank-check.png) 16px 15px no-repeat;width:100%;position:relative;z-index:2;font-size:12px;color:#878787;height:100%;position:absolute;top:0;left:0}.route_listprt .listing_box ul li .iconprt span .border{position:absolute;width:100%;height:100%;left:0;right:0;top:0;border-radius:15px}.route_listprt .listing_box ul li .iconprt span input:checked~.border{border-left:1px solid white;border-right:1px solid white;border-top:1px solid white;border-bottom:1px solid white}.route_listprt .listing_box ul li .iconprt span h2{margin-left:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:150px;padding-left:16px;font-size:.9rem;margin-bottom:0;font-weight:400;margin-top:0}.route_listprt .listing_box ul li .iconprt .statusunit{border-radius:30px;font-size:0;color:#fff;text-transform:capitalize;font-weight:500;width:20px;height:20px;text-align:center;line-height:20px;margin-bottom:7px}.route_listprt .listing_box ul li .iconprt .statusunit:first-letter{font-size:.8rem}.route_listprt .listing_box ul li .iconprt .statusunit.Ton{background:#ff7272}.route_listprt .listing_box ul li .iconprt .statusunit.Load{background:#a3c52e}.route_listprt .listing_box ul li .iconprt .statusunit.Hourly{background:#ae23d1}@media (min-width: 1600px){.route_listprt .listing_box ul li .iconprt .statusunit{line-height:21px}}.route_listprt .listing_box ul li .iconprt .infoicon{z-index:5;cursor:pointer}.route_listprt .listing_box ul li .iconprt .infoicon img{width:20px;height:20px}.route_listprt .listing_box ul li .pickprtbox{margin-left:10px}.route_listprt .listing_box ul li .pickprtbox h2{font-size:.9rem;margin:3px 0 5px;white-space:nowrap;text-overflow:ellipsis;max-width:195px;overflow:hidden}.route_listprt .listing_box ul li h3{font-size:.8rem;color:#979797;font-weight:600;margin-top:0;white-space:nowrap;text-overflow:ellipsis;max-width:195px;overflow:hidden;margin-bottom:5px}.route_listprt .listing_box ul li .pickdropprt{font-size:.75rem}.route_listprt .listing_box ul li .pickdropprt .pickprt{position:relative;display:flex;align-items:center;padding-bottom:10px}.route_listprt .listing_box ul li .pickdropprt .pickprt span{padding-left:0;padding-right:20px;display:block}.route_listprt .listing_box ul li .pickdropprt .pickprt b{position:relative}.route_listprt .listing_box ul li .pickdropprt .pickprt b:after{background:#bcbcbc;width:1px;height:100%;left:3px;content:\"\";position:absolute;top:10px}.route_listprt .listing_box ul li .pickdropprt .pickprt h4{position:relative;padding-left:15px;margin:0;line-height:18px;color:#bcbcbc;font-weight:400;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical}.route_listprt .listing_box ul li .pickdropprt .pickprt h4:before{background:#bcbcbc;top:4px;left:0;position:absolute;content:\"\";width:7px;height:7px;border-radius:100%}.route_listprt .listing_box ul li .pickdropprt .dropprt{position:relative;padding-bottom:10px;display:flex;align-items:center}.route_listprt .listing_box ul li .pickdropprt .dropprt span{padding-left:0;padding-right:20px;display:block}.route_listprt .listing_box ul li .pickdropprt .dropprt b{position:relative}.route_listprt .listing_box ul li .pickdropprt .dropprt b:after{background:#bcbcbc;width:1px;height:12px;left:3px;content:\"\";position:absolute;top:-7px}.route_listprt .listing_box ul li .pickdropprt .dropprt h4{position:relative;padding-left:15px;margin:0;line-height:18px;color:#bcbcbc;font-weight:400;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical}.route_listprt .listing_box ul li .pickdropprt .dropprt h4:before{background:#bcbcbc;top:4px;left:0;position:absolute;content:\"\";width:7px;height:7px;border-radius:100%}.route_listprt.show .listing_box{width:300px;max-width:300px;flex:0 0 350px;transition:.5s;-webkit-transition:.5s;-moz-transition:.5s;padding:40px 0 40px 20px;opacity:1}.route_listprt.show .listing_box h2{color:#fff;white-space:nowrap}.route_listprt.show .listing_box .closebtn{position:absolute;left:-33px;top:50px;background:#282828;color:#fff;padding:8px;border-top-left-radius:15px;border-bottom-left-radius:15px;cursor:pointer;box-shadow:-4px 2px 5px #ffffff14;display:block}.btnprt{display:flex;justify-content:space-between;align-items:center;padding-right:20px}.btnprt h2{margin:0}.btnprt button{font-size:15px;padding:8px 20px;background-color:#326ad3;color:#fff;border:none;border-radius:10px;box-shadow:none;outline:none}.hidden{display:none}.route_detail{background:#282828;position:absolute;width:260px;top:50%;transform:translateY(-50%);right:310px;border-radius:20px;padding:10px;box-shadow:0 0 5px #ffffff36}.createTxt small{color:#fff;font-size:.7rem}.closebtnroutedetail{box-shadow:0 0 5px #0000001c;border-radius:100%;width:30px;height:30px;display:flex;justify-content:center;align-items:center;cursor:pointer;background:#f5f5f5;position:absolute;top:-7px;left:-11px}\n"] }]
169
- }], ctorParameters: function () { return [{ type: i1.UtilsService }, { type: i1.CoolmapService }, { type: i1.CoolmapConfigModel, decorators: [{
170
- type: Inject,
171
- args: ['memberData']
172
- }] }]; }, propDecorators: { jobdetail: [{
173
- type: Input
174
- }], customerRepoDetails: [{
175
- type: Input
176
- }], clearJobDetails: [{
177
- type: Output
178
- }], openShareRoute: [{
179
- type: Output
180
- }] } });
181
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLWNvZGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29vbG1hcC9zcmMvbGliL2NvbXBvbmVudC9qb2ItY29kZS9qb2ItY29kZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb29sbWFwL3NyYy9saWIvY29tcG9uZW50L2pvYi1jb2RlL2pvYi1jb2RlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFhLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7QUFRMUMsTUFBTSxPQUFPLGdCQUFnQjtJQWlCM0IsWUFBbUIsS0FBbUIsRUFBUyxPQUF1QixFQUN2QyxNQUEwQjtRQUR0QyxVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQVMsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDdkMsV0FBTSxHQUFOLE1BQU0sQ0FBb0I7UUFmekQsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixXQUFNLEdBQVksRUFBRSxDQUFDO1FBQ2Qsa0JBQWEsR0FBRyxJQUFJLGNBQWMsQ0FBTSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFDdkMsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3JDLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUFDLDBCQUFxQixHQUFHLEtBQUssQ0FBQztRQUM3RSxlQUFVLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQUUzQyxvQkFBZSxHQUFZLEtBQUssQ0FBQztRQVMvQixJQUFJLENBQUMsS0FBSyxDQUFDLCtCQUEr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QUE5QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkRlc3Ryb3ksIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ29vbG1hcENvbmZpZ01vZGVsLCBDb29sbWFwU2VydmljZSwgQ3VzdG9tZXJSZXBvRGV0YWlsc01vZGVsLCBSb3V0ZSwgVXRpbHNTZXJ2aWNlIH0gZnJvbSAnQGFnZ2RpcmVjdC9jb29sbWFwLXNlcnZpY2VzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWpvYi1jb2RlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vam9iLWNvZGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2pvYi1jb2RlLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEpvYkNvZGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KCkgcHVibGljIGpvYmRldGFpbCE6IGFueTtcclxuICBASW5wdXQoKSBwdWJsaWMgY3VzdG9tZXJSZXBvRGV0YWlscyE6IEN1c3RvbWVyUmVwb0RldGFpbHNNb2RlbDtcclxuICBpc1Zpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICByb3V0ZXM6IFJvdXRlW10gPSBbXTtcclxuICBwdWJsaWMgc2VsZWN0ZWRSb3V0ZSA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxhbnk+KHRydWUsIFtdKVxyXG4gIEBPdXRwdXQoKSBwdWJsaWMgY2xlYXJKb2JEZXRhaWxzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBwdWJsaWMgb3BlblNoYXJlUm91dGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7IGlzT3ZlcmxhcFJvdXRlU2VjdGlvbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBkZXN0cm95ZXIkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICBkZXRhaWxzQ2FyZEVuYWJsZTogYm9vbGVhbiB8IHN0cmluZztcclxuICBwcmV2ZW50TW91c2VvdXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICByb3V0ZUNhcmREZXRhaWw6IFJvdXRlO1xyXG4gIHByZXZlbnRMaXN0VXBkYXRlOiBib29sZWFuO1xyXG4gIG1hc3RlclJvdXRlczogYW55O1xyXG4gIHVuaXRMaXN0OiBhbnk7XHJcbiAgbWF0ZXJpYWxzTGlzdDogYW55O1xyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdXRpbHM6IFV0aWxzU2VydmljZSwgcHVibGljIGNvb2xNYXA6IENvb2xtYXBTZXJ2aWNlLFxyXG4gICAgQEluamVjdCgnbWVtYmVyRGF0YScpIHB1YmxpYyBjb25maWc6IENvb2xtYXBDb25maWdNb2RlbCkge1xyXG4gICAgdGhpcy51dGlscy5jbGVhclZpZXdSb3V0ZWZvckpvYkNvZGVPYnNlcnZlLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVyJCkpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICBpZiAocmVzKSB0aGlzLmNvb2xNYXAucmVtb3ZlSm9iRnJvbU1hcCh0aGlzLnNlbGVjdGVkUm91dGUuc2VsZWN0ZWQpOyB0aGlzLnNlbGVjdGVkUm91dGUuY2xlYXIoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7IHRoaXMuY2hlY2tBbmRDYWxsUm91dGVMaXN0KCkgfVxyXG4gIGNoZWNrQW5kQ2FsbFJvdXRlTGlzdCgpIHtcclxuICAgICAgICB0aGlzLnV0aWxzLmNsZWFyT3B0aW9ucygpO1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLnJlcG9zaXRvcnkgPT09ICdjdXN0b21lcicpIHtcclxuICAgICAgdGhpcy51dGlscy5mZXRjaFVuaXRzTGlzdCgpLnRoZW4oKHJlcykgPT4ge1xyXG4gICAgICAgIHRoaXMudW5pdExpc3QgPSByZXM7XHJcbiAgICAgICAgdGhpcy51dGlscy5mZXRjaE1hdGVyaWFsc0xpc3RGb3JDdXN0b21lcigpLnRoZW4oKHJlcykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5tYXRlcmlhbHNMaXN0ID0gcmVzO1xyXG4gICAgICAgICAgdGhpcy5nZXRSb3V0ZUxpc3RGb3JDdXN0b21lcigpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZ2V0Um91dGVMaXN0Rm9yQ29vbE1hcCgpXHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldFVuaXROYW1lKGRhdGEpOiBzdHJpbmcge1xyXG4gICAgbGV0IHVuaXROYW1lID0gJyc7XHJcbiAgICB0aGlzLnVuaXRMaXN0Lm1hcCgocmVzKSA9PiB7XHJcbiAgICAgIGlmIChyZXMuaWQgPT09IGRhdGEudW5pdF9pZCkge1xyXG4gICAgICAgIHVuaXROYW1lID0gcmVzLnR5cGVcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIHJldHVybiB1bml0TmFtZTtcclxuICB9XHJcblxyXG4gIGdldE1hdGVyaWFsTmFtZShkYXRhKTogc3RyaW5nIHtcclxuICAgIGxldCBtYXRlcmlhbE5hbWUgPSAnJztcclxuICAgIHRoaXMubWF0ZXJpYWxzTGlzdC5tYXAoKHJlcykgPT4ge1xyXG4gICAgICBpZiAocmVzLnN1Yl9tYXRlcmlhbF9pZCA9PT0gZGF0YS5tYXRlcmlhbHNfaWQpIHtcclxuICAgICAgICBtYXRlcmlhbE5hbWUgPSByZXMubGFiZWxcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIHJldHVybiBtYXRlcmlhbE5hbWU7XHJcbiAgfVxyXG4gIGdldFJvdXRlTGlzdEZvckNvb2xNYXAoKSB7XHJcbiAgICB0aGlzLnV0aWxzLmdldERhdGEoJ3JvdXRlcy9hbGwnKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llciQpKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICB0aGlzLnJvdXRlcyA9IHJlcy5kYXRhO1xyXG4gICAgICAgIHRoaXMubWFzdGVyUm91dGVzID0gcmVzLmRhdGE7XHJcbiAgICAgICAgdGhpcy5wcmV2ZW50TGlzdFVwZGF0ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucm91dGVzLmZvckVhY2goKGVsZTogUm91dGUpID0+IHsgdGhpcy51dGlscy5tYWtlT3B0aW9ucyhlbGUpIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICBnZXRSb3V0ZUxpc3RGb3JDdXN0b21lcigpIHtcclxuICAgIGNvbnN0IGRhdGFzZXQgPSB7XHJcbiAgICAgIGN1c3RvbWVyX2lkOiB0aGlzLmN1c3RvbWVyUmVwb0RldGFpbHMuY3VzdG9tZXIuaWRcclxuICAgIH1cclxuICAgIHRoaXMudXRpbHMucG9zdGRhdGEoJ3JvdXRlcy9hbGwnLCBkYXRhc2V0KS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llciQpKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICB0aGlzLnJvdXRlcyA9IHJlcy5kYXRhO1xyXG4gICAgICAgIHRoaXMucHJldmVudExpc3RVcGRhdGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJvdXRlcy5tYXAoKGVsZTogUm91dGUpID0+IHtcclxuICAgICAgICAgIGVsZS51bml0ID0gdGhpcy5nZXRVbml0TmFtZShlbGUpO1xyXG4gICAgICAgICAgZWxlLm1hdGVyaWFsTGFiZWwgPSB0aGlzLmdldE1hdGVyaWFsTmFtZShlbGUpO1xyXG4gICAgICAgICAgZWxlLm1hdGVyaWFsID0gdGhpcy5nZXRNYXRlcmlhbE5hbWUoZWxlKS5zcGxpdCgnfCcpWzBdLnRyaW0oKTtcclxuICAgICAgICAgIHRoaXMudXRpbHMubWFrZU9wdGlvbnMoZWxlKVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMubWFzdGVyUm91dGVzID0gdGhpcy5yb3V0ZXM7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlU2lkZW1lbnUoKSB7XHJcbiAgICB0aGlzLmlzVmlzaWJsZSA9ICF0aGlzLmlzVmlzaWJsZTtcclxuICAgIHRoaXMuZGV0YWlsc0NhcmRFbmFibGUgPSBmYWxzZTtcclxuICAgIHRoaXMucHJldmVudE1vdXNlb3V0ID0gZmFsc2VcclxuICB9XHJcbiAgY2xlYXJKb2IoKSB7IHRoaXMuY2xlYXJKb2JEZXRhaWxzLmVtaXQodHJ1ZSk7IHRoaXMudXRpbHMucHJlVmVudEpvYmRldGFpbGNsb3NlLm5leHQoZmFsc2UpIH1cclxuICBzZWxlY3RSb3V0ZShldmVudDogUm91dGUpIHtcclxuICAgIGNvbnN0IGkgPSB0aGlzLnNlbGVjdGVkUm91dGUuc2VsZWN0ZWQuZmluZEluZGV4KGVsZSA9PiBlbGVbJ29yZGVyX251bWJlciddID09PSBldmVudFsnb3JkZXJfbnVtYmVyJ10pO1xyXG4gICAgdGhpcy5zZWxlY3RlZFJvdXRlLnRvZ2dsZShldmVudCk7XHJcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRSb3V0ZS5pc1NlbGVjdGVkKGV2ZW50KSAmJiBldmVudFsncm91dGVfaWQnXSkge1xyXG4gICAgICB0aGlzLmNvb2xNYXAucmVtb3ZlUm91dGVBbmRNYXJrZXIoZXZlbnRbJ3JvdXRlX2lkJ10pLnRoZW4oKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5jb29sTWFwLmV4dGVuZFJlQm91bmQoKTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvb2xNYXAucGxvdFJvdXRlKGV2ZW50LCBldmVudFsncm91dGVfaWQnXSwgJ2pvYnJvdXRlTGlzdCcsIGZhbHNlLCB0cnVlKTtcclxuICAgIH1cclxuICB9XHJcbiAgbWFzdGVyVG9nZ2xlKCkge1xyXG4gICAgaWYgKHRoaXMucm91dGVzLmxlbmd0aCA9PT0gdGhpcy5zZWxlY3RlZFJvdXRlLnNlbGVjdGVkLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm91dGUuY2xlYXIoKTtcclxuICAgICAgdGhpcy5yb3V0ZXMuZm9yRWFjaChyb3cgPT4ge1xyXG4gICAgICAgIHRoaXMuY29vbE1hcC5yZW1vdmVSb3V0ZUFuZE1hcmtlcihyb3dbJ3JvdXRlX2lkJ10pLnRoZW4oKHJlczogYW55KSA9PiB7IHRoaXMuY29vbE1hcC5leHRlbmRSZUJvdW5kKCkgfSlcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJvdXRlcy5mb3JFYWNoKHJvdyA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvdXRlLnNlbGVjdChyb3cpO1xyXG4gICAgICAgIHRoaXMuY29vbE1hcC5wbG90Um91dGUocm93LCByb3dbJ3JvdXRlX2lkJ10sICdqb2Jyb3V0ZUxpc3QnLCBmYWxzZSwgdHJ1ZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuICB0b2dnbGVyb3V0ZURldGFpbHMoZXZlbnRUeXBlOiBzdHJpbmcgfCBib29sZWFuLCByb3V0ZTogUm91dGUsIG1vdXNlT3V0PzogYm9vbGVhbikge1xyXG4gICAgaWYgKHR5cGVvZiAoZXZlbnRUeXBlKSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgdGhpcy5wcmV2ZW50TW91c2VvdXQgPSB0cnVlOyB0aGlzLnV0aWxzLnNldGRpY3RWYWx1ZSgncm91dGUtZGV0YWlscycsIEpTT04uc3RyaW5naWZ5KHJvdXRlKSk7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIChldmVudFR5cGUpID09PSAnYm9vbGVhbicgJiYgZXZlbnRUeXBlICYmICF0aGlzLnByZXZlbnRNb3VzZW91dCkgeyB0aGlzLmRldGFpbHNDYXJkRW5hYmxlID0gZXZlbnRUeXBlIH07XHJcbiAgICBpZiAodHlwZW9mIChldmVudFR5cGUpID09PSAnYm9vbGVhbicgJiYgIWV2ZW50VHlwZSAmJiAhdGhpcy5wcmV2ZW50TW91c2VvdXQpIHsgdGhpcy5kZXRhaWxzQ2FyZEVuYWJsZSA9IGV2ZW50VHlwZSB9O1xyXG4gICAgaWYgKHRoaXMucHJldmVudE1vdXNlb3V0ICYmICF0aGlzLmRldGFpbHNDYXJkRW5hYmxlKSB0aGlzLnByZXZlbnRNb3VzZW91dCA9IGZhbHNlO1xyXG4gICAgaWYgKG1vdXNlT3V0KSB7XHJcbiAgICAgIGlmICh0aGlzLnByZXZlbnRNb3VzZW91dCkge1xyXG4gICAgICAgIHJvdXRlID0gdGhpcy51dGlscy5nZXRkaWN0VmFsdWUoJ3JvdXRlLWRldGFpbHMnKTtcclxuICAgICAgICB0aGlzLnJvdXRlQ2FyZERldGFpbCA9IHJvdXRlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5wcmV2ZW50TW91c2VvdXQpIHtcclxuICAgICAgICB0aGlzLnJvdXRlQ2FyZERldGFpbCA9IHJvdXRlXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucm91dGVDYXJkRGV0YWlsID0gcm91dGVcclxuICAgIH1cclxuICAgIHRoaXMucm91dGVDYXJkRGV0YWlsWydjcmVhdGVkX2F0J10gPSB0aGlzLnV0aWxzLmdldERhdGVGb3JtYXQobmV3IERhdGUodGhpcy5yb3V0ZUNhcmREZXRhaWxbJ2NyZWF0ZWRfYXQnXSksICcvJyk7XHJcbiAgfVxyXG5cclxuICBvcGVuU2hhcmVSb3V0ZU1vZGFsKGRhdGEpIHtcclxuICAgIHRoaXMub3BlblNoYXJlUm91dGUuZW1pdChkYXRhKTtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3llciQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveWVyJC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiam9iY29kZV9kZXRhaWxwcnRcIiAoY2xpY2spPVwiaXNPdmVybGFwUm91dGVTZWN0aW9uID0gZmFsc2VcIiAgKm5nSWY9XCJqb2JkZXRhaWxcIiBbbmdDbGFzc109XCJ7J292ZXJsYXAnOiAhaXNPdmVybGFwUm91dGVTZWN0aW9ufVwiIGNka0RyYWc+XHJcbiAgPHNwYW4gY2xhc3M9XCJjbG9zZVwiPjxtYXQtaWNvbiAoY2xpY2spPVwiY2xlYXJKb2IoKVwiPmNsZWFyPC9tYXQtaWNvbj48L3NwYW4+XHJcbiAgPGRpdiBjbGFzcz1cImpvYl9kZXRhaWxzX2FyZWFcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxuYW1lcHJ0XCI+XHJcbiAgICAgIDxhcHAtam9iY29kZS1zdGF0dXMgW2pvYlZhbHVlXT1cImpvYmRldGFpbFwiPjwvYXBwLWpvYmNvZGUtc3RhdHVzPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8YXBwLWpvYmNvZGUtb3ZlcnZpZXcgW2pvYlZhbHVlXT1cImpvYmRldGFpbFwiPjwvYXBwLWpvYmNvZGUtb3ZlcnZpZXc+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cInJvdXRlX2xpc3RwcnRcIiAoY2xpY2spPVwiaXNPdmVybGFwUm91dGVTZWN0aW9uID0gdHJ1ZVwiIFtuZ0NsYXNzXT1cInsgJ3Nob3cnOiBpc1Zpc2libGUsICdvdmVybGFwJzogaXNPdmVybGFwUm91dGVTZWN0aW9ufVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJsaXN0aW5nX3RvZ2dsZVwiIChjbGljayk9XCJ0b2dnbGVTaWRlbWVudSgpXCI+XHJcbiAgICA8aW1nIHNyYz1cImFzc2V0cy9pbWFnZXMvcm91dGUuc3ZnXCIgYWx0PVwiXCIgLz5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImxpc3RpbmdfYm94XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2xvc2VidG5cIiAoY2xpY2spPVwidG9nZ2xlU2lkZW1lbnUoKVwiPlxyXG4gICAgICA8bWF0LWljb24+Y2xlYXI8L21hdC1pY29uPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImJ0bnBydFwiPlxyXG4gICAgICA8aDI+IExpc3Qgb2YgUm91dGVzIDwvaDI+XHJcbiAgICAgIDxidXR0b24gKGNsaWNrKT1cIm1hc3RlclRvZ2dsZSgpXCI+e3tyb3V0ZXMgJiYgcm91dGVzLmxlbmd0aCA+IDAgJiYgcm91dGVzLmxlbmd0aCA9PT0gc2VsZWN0ZWRSb3V0ZS5zZWxlY3RlZC5sZW5ndGggPyAnVW5jaGVjaycgOiAnQ2hlY2snfX0gQWxsPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8YXBwLWpvYi1yb3V0ZS1saXN0IFtyb3V0ZXNdPVwicm91dGVzXCIgW21hc3RlclJvdXRlc109XCJtYXN0ZXJSb3V0ZXNcIiBbc2VsZWN0ZWRSb3V0ZV09XCJzZWxlY3RlZFJvdXRlXCIgKGNoYW5nZVJvdXRlcyk9XCJyb3V0ZXMgPSAkZXZlbnRcIiAoY2hhbmdlU2VsZWN0ZWRSb3V0ZSk9XCJzZWxlY3RlZFJvdXRlID0gJGV2ZW50XCI+PC9hcHAtam9iLXJvdXRlLWxpc3Q+XHJcblxyXG4gICAgPHBlcmZlY3Qtc2Nyb2xsYmFyPlxyXG4gICAgICA8dWwgKm5nSWY9XCJyb3V0ZXNbJ2xlbmd0aCddID4gMFwiPlxyXG4gICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgbGlzdCBvZiByb3V0ZXNcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29ucHJ0XCI+XHJcbiAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJzZWxlY3RlZFJvdXRlLmlzU2VsZWN0ZWQobGlzdClcIlxyXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyBzZWxlY3RSb3V0ZShsaXN0KSA6IG51bGxcIiAvPjxsYWJlbD4mbmJzcDs8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RhdHVzdW5pdFwiIFtuZ0NsYXNzXT1cImxpc3RbJ3VuaXQnXVwiPnt7bGlzdFsndW5pdCddfX08L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm9pY29uXCI+XHJcbiAgICAgICAgICAgICAgPGltZyAobW91c2VlbnRlcik9XCJ0b2dnbGVyb3V0ZURldGFpbHModHJ1ZSwgbGlzdClcIiAobW91c2VvdXQpPVwidG9nZ2xlcm91dGVEZXRhaWxzKGZhbHNlLCBsaXN0LCB0cnVlKVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZXJvdXRlRGV0YWlscygnY2xpY2snLCBsaXN0KVwiIHNyYz1cImFzc2V0cy9pbWFnZXMvaW5mb19pY29uLnBuZ1wiIFthbHRdPVwiXCIgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvaWNvblwiICpuZ0lmPVwiY29uZmlnLnJlcG9zaXRvcnkgPT09ICdjdXN0b21lcidcIj5cclxuICAgICAgICAgICAgICA8aW1nIHNyYz1cImFzc2V0cy9pbWFnZXMvc2hhcmVfaWNvbi5wbmdcIiAoY2xpY2spPVwib3BlblNoYXJlUm91dGVNb2RhbChsaXN0KVwiIFthbHRdPVwiXCIgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwaWNrcHJ0Ym94XCI+XHJcbiAgICAgICAgICAgIDxoMj4ge3tsaXN0Wydyb3V0ZV9uYW1lJ119fSA8L2gyPlxyXG4gICAgICAgICAgICA8aDM+PG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbmZpZz8ucmVwb3NpdG9yeSA9PT0gJ2Nvb2xtYXAnXCI+e3tsaXN0WydjdXN0b21lcl9uYW1lJ119fSB8IDwvbmctY29udGFpbmVyPnt7Y29uZmlnLnJlcG9zaXRvcnkgPT09ICdjb29sbWFwJyA/IGxpc3RbJ21hdGVyaWFsJ10gOiBsaXN0WydtYXRlcmlhbExhYmVsJ119fTwvaDM+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwaWNrZHJvcHBydFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwaWNrcHJ0XCI+XHJcbiAgICAgICAgICAgICAgICA8Yj5cclxuICAgICAgICAgICAgICAgICAgPGg0Pnt7bGlzdFsncGlja3VwX2xvY2F0aW9uJ119fTwvaDQ+XHJcbiAgICAgICAgICAgICAgICA8L2I+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3BwcnRcIj5cclxuICAgICAgICAgICAgICAgIDxiPlxyXG4gICAgICAgICAgICAgICAgICA8aDQ+e3tsaXN0WydkZWxpdmVyeV9sb2NhdGlvbiddfX08L2g0PlxyXG4gICAgICAgICAgICAgICAgPC9iPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgIDwvdWw+XHJcbiAgICAgIDxwIHN0eWxlPVwiY29sb3I6ICNmZmY7XCIgKm5nSWY9XCJyb3V0ZXMubGVuZ3RoID09PSAwXCI+Tm8gUm91dGUgZm91bmQ8L3A+XHJcbiAgICA8L3BlcmZlY3Qtc2Nyb2xsYmFyPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwicm91dGVfZGV0YWlsXCIgKm5nSWY9XCJkZXRhaWxzQ2FyZEVuYWJsZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNsb3NlYnRucm91dGVkZXRhaWxcIiAoY2xpY2spPVwiZGV0YWlsc0NhcmRFbmFibGUgPSBmYWxzZTsgcHJldmVudE1vdXNlb3V0ID0gZmFsc2VcIj5cclxuICAgICAgPG1hdC1pY29uPmNsZWFyPC9tYXQtaWNvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGxpYi1yb3V0ZS1pbmZvLWNhcmQgW3Byb3BEYXRhXT1cIntjbGFzc05hbWU6ICdsaXN0Um91dGVjYXJkJywgcmVwb3NpdG9yeTogY29uZmlnWydyZXBvc2l0b3J5J119XCIgIFtwb3B1cERhdGFdPVwicm91dGVDYXJkRGV0YWlsXCI+PC9saWItcm91dGUtaW5mby1jYXJkPlxyXG4gICAgPGRpdiBjbGFzcz1cImNyZWF0ZVR4dFwiPlxyXG4gICAgICA8c21hbGw+XHJcbiAgICAgICAgQ3JlYXRlZCBieSB7e3JvdXRlQ2FyZERldGFpbD8uY3JlYXRlZF9ieV9uYW1lfX0gb24ge3tyb3V0ZUNhcmREZXRhaWw/LmNyZWF0ZWRfYXR9fVxyXG4gICAgICA8L3NtYWxsPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
1
+ import { SelectionModel } from '@angular/cdk/collections';
2
+ import { Component, Input, Output, EventEmitter, Inject } from '@angular/core';
3
+ import { Subject, takeUntil } from 'rxjs';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@aggdirect/coolmap-services";
6
+ import * as i2 from "@angular/common";
7
+ import * as i3 from "@angular/cdk/drag-drop";
8
+ import * as i4 from "@angular/material/icon";
9
+ import * as i5 from "ngx-perfect-scrollbar";
10
+ import * as i6 from "../shared/job-route-list/job-route-list.component";
11
+ import * as i7 from "../shared/jobcode-status/jobcode-status.component";
12
+ import * as i8 from "../shared/jobcode-overview/jobcode-overview.component";
13
+ import * as i9 from "../shared/route-info-card/route-info-card.component";
14
+ export class JobCodeComponent {
15
+ constructor(utils, coolMap, config) {
16
+ this.utils = utils;
17
+ this.coolMap = coolMap;
18
+ this.config = config;
19
+ this.isVisible = false;
20
+ this.routes = [];
21
+ this.selectedRoute = new SelectionModel(true, []);
22
+ this.clearJobDetails = new EventEmitter();
23
+ this.openShareRoute = new EventEmitter();
24
+ this.isOverlapRouteSection = false;
25
+ this.destroyer$ = new Subject();
26
+ this.preventMouseout = false;
27
+ this.utils.clearViewRouteforJobCodeObserve.pipe(takeUntil(this.destroyer$)).subscribe(res => {
28
+ if (res)
29
+ this.coolMap.removeJobFromMap(this.selectedRoute.selected);
30
+ this.selectedRoute.clear();
31
+ });
32
+ }
33
+ ngOnInit() { this.checkAndCallRouteList(); }
34
+ checkAndCallRouteList() {
35
+ this.utils.clearOptions();
36
+ if (this.config.repository === 'customer') {
37
+ this.utils.fetchUnitsList().then((res) => {
38
+ this.unitList = res;
39
+ this.utils.fetchMaterialsListForCustomer().then((res) => {
40
+ this.materialsList = res;
41
+ this.getRouteListForCustomer();
42
+ });
43
+ });
44
+ }
45
+ else {
46
+ this.getRouteListForCoolMap();
47
+ }
48
+ }
49
+ getUnitName(data) {
50
+ let unitName = '';
51
+ this.unitList.map((res) => {
52
+ if (res.id === data.unit_id) {
53
+ unitName = res.type;
54
+ }
55
+ });
56
+ return unitName;
57
+ }
58
+ getMaterialName(data) {
59
+ let materialName = '';
60
+ this.materialsList.map((res) => {
61
+ if (res.sub_material_id === data.materials_id) {
62
+ materialName = res.label;
63
+ }
64
+ });
65
+ return materialName;
66
+ }
67
+ getRouteListForCoolMap() {
68
+ this.utils.getData('routes/all').pipe(takeUntil(this.destroyer$)).subscribe((res) => {
69
+ if (res) {
70
+ this.routes = res.data;
71
+ this.masterRoutes = res.data;
72
+ this.preventListUpdate = false;
73
+ this.routes.forEach((ele) => { this.utils.makeOptions(ele); });
74
+ }
75
+ });
76
+ }
77
+ getRouteListForCustomer() {
78
+ const dataset = {
79
+ customer_id: this.customerRepoDetails.customer.id
80
+ };
81
+ this.utils.postdata('routes/all', dataset).pipe(takeUntil(this.destroyer$)).subscribe((res) => {
82
+ if (res) {
83
+ this.routes = res.data;
84
+ this.preventListUpdate = false;
85
+ this.routes.map((ele) => {
86
+ ele.unit = this.getUnitName(ele);
87
+ ele.materialLabel = this.getMaterialName(ele);
88
+ ele.material = this.getMaterialName(ele).split('|')[0].trim();
89
+ this.utils.makeOptions(ele);
90
+ });
91
+ this.masterRoutes = this.routes;
92
+ }
93
+ });
94
+ }
95
+ toggleSidemenu() {
96
+ this.isVisible = !this.isVisible;
97
+ this.detailsCardEnable = false;
98
+ this.preventMouseout = false;
99
+ }
100
+ clearJob() { this.clearJobDetails.emit(true); this.utils.preVentJobdetailclose.next(false); }
101
+ selectRoute(event) {
102
+ const i = this.selectedRoute.selected.findIndex(ele => ele['order_number'] === event['order_number']);
103
+ this.selectedRoute.toggle(event);
104
+ if (!this.selectedRoute.isSelected(event) && event['route_id']) {
105
+ this.coolMap.removeRouteAndMarker(event['route_id']).then((res) => {
106
+ this.coolMap.extendReBound();
107
+ });
108
+ }
109
+ else {
110
+ this.coolMap.plotRoute(event, event['route_id'], 'jobrouteList', false, true);
111
+ }
112
+ }
113
+ masterToggle() {
114
+ if (this.routes.length === this.selectedRoute.selected.length) {
115
+ this.selectedRoute.clear();
116
+ this.routes.forEach(row => {
117
+ this.coolMap.removeRouteAndMarker(row['route_id']).then((res) => { this.coolMap.extendReBound(); });
118
+ });
119
+ }
120
+ else {
121
+ this.routes.forEach(row => {
122
+ this.selectedRoute.select(row);
123
+ this.coolMap.plotRoute(row, row['route_id'], 'jobrouteList', false, true);
124
+ });
125
+ }
126
+ }
127
+ togglerouteDetails(eventType, route, mouseOut) {
128
+ if (typeof (eventType) === 'string') {
129
+ this.preventMouseout = true;
130
+ this.utils.setdictValue('route-details', JSON.stringify(route));
131
+ }
132
+ if (typeof (eventType) === 'boolean' && eventType && !this.preventMouseout) {
133
+ this.detailsCardEnable = eventType;
134
+ }
135
+ ;
136
+ if (typeof (eventType) === 'boolean' && !eventType && !this.preventMouseout) {
137
+ this.detailsCardEnable = eventType;
138
+ }
139
+ ;
140
+ if (this.preventMouseout && !this.detailsCardEnable)
141
+ this.preventMouseout = false;
142
+ if (mouseOut) {
143
+ if (this.preventMouseout) {
144
+ route = this.utils.getdictValue('route-details');
145
+ this.routeCardDetail = route;
146
+ }
147
+ if (!this.preventMouseout) {
148
+ this.routeCardDetail = route;
149
+ }
150
+ }
151
+ else {
152
+ this.routeCardDetail = route;
153
+ }
154
+ this.routeCardDetail['created_at'] = this.utils.getDateFormat(new Date(this.routeCardDetail['created_at']), '/');
155
+ }
156
+ openShareRouteModal(data) {
157
+ this.openShareRoute.emit(data);
158
+ }
159
+ ngOnDestroy() {
160
+ this.destroyer$.next(true);
161
+ this.destroyer$.unsubscribe();
162
+ }
163
+ }
164
+ JobCodeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: JobCodeComponent, deps: [{ token: i1.UtilsService }, { token: i1.CoolmapService }, { token: 'memberData' }], target: i0.ɵɵFactoryTarget.Component });
165
+ JobCodeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: JobCodeComponent, selector: "app-job-code", inputs: { jobdetail: "jobdetail", customerRepoDetails: "customerRepoDetails" }, outputs: { clearJobDetails: "clearJobDetails", openShareRoute: "openShareRoute" }, ngImport: i0, template: "<div class=\"jobcode_detailprt\" (click)=\"isOverlapRouteSection = false\" *ngIf=\"jobdetail\" [ngClass]=\"{'overlap': !isOverlapRouteSection}\" cdkDrag>\n <span class=\"close\"><mat-icon (click)=\"clearJob()\">clear</mat-icon></span>\n <div class=\"job_details_area\">\n <div class=\"detailnameprt\">\n <app-jobcode-status [jobValue]=\"jobdetail\"></app-jobcode-status>\n </div>\n <app-jobcode-overview [jobValue]=\"jobdetail\"></app-jobcode-overview>\n </div>\n</div>\n\n<div class=\"route_listprt\" (click)=\"isOverlapRouteSection = true\" [ngClass]=\"{ 'show': isVisible, 'overlap': isOverlapRouteSection}\">\n <div class=\"listing_toggle\" (click)=\"toggleSidemenu()\">\n <img src=\"assets/images/route.svg\" alt=\"\" />\n </div>\n\n <div class=\"listing_box\">\n <div class=\"closebtn\" (click)=\"toggleSidemenu()\">\n <mat-icon>clear</mat-icon>\n </div>\n\n <div class=\"btnprt\">\n <h2> List of Routes </h2>\n <button (click)=\"masterToggle()\">{{routes && routes.length > 0 && routes.length === selectedRoute.selected.length ? 'Uncheck' : 'Check'}} All</button>\n </div>\n\n <app-job-route-list [routes]=\"routes\" [masterRoutes]=\"masterRoutes\" [selectedRoute]=\"selectedRoute\" (changeRoutes)=\"routes = $event\" (changeSelectedRoute)=\"selectedRoute = $event\"></app-job-route-list>\n\n <perfect-scrollbar>\n <ul *ngIf=\"routes['length'] > 0\">\n <li *ngFor=\"let list of routes\">\n <div class=\"iconprt\">\n <span>\n <input type=\"checkbox\" [checked]=\"selectedRoute.isSelected(list)\"\n (change)=\"$event ? selectRoute(list) : null\" /><label>&nbsp;</label>\n <div class=\"border\"></div>\n </span>\n <div class=\"statusunit\" [ngClass]=\"list['unit']\">{{list['unit']}}</div>\n <div class=\"infoicon\">\n <img (mouseenter)=\"togglerouteDetails(true, list)\" (mouseout)=\"togglerouteDetails(false, list, true)\"\n (click)=\"togglerouteDetails('click', list)\" src=\"assets/images/info_icon.png\" [alt]=\"\" />\n </div>\n <div class=\"infoicon\" *ngIf=\"config.repository === 'customer'\">\n <img src=\"assets/images/share_icon.png\" (click)=\"openShareRouteModal(list)\" [alt]=\"\" />\n </div>\n </div>\n <div class=\"pickprtbox\">\n <h2> {{list['route_name']}} </h2>\n <h3><ng-container *ngIf=\"config?.repository === 'coolmap'\">{{list['customer_name']}} | </ng-container>{{config.repository === 'coolmap' ? list['material'] : list['materialLabel']}}</h3>\n <div class=\"pickdropprt\">\n <div class=\"pickprt\">\n <b>\n <h4>{{list['pickup_location']}}</h4>\n </b>\n </div>\n <div class=\"dropprt\">\n <b>\n <h4>{{list['delivery_location']}}</h4>\n </b>\n </div>\n </div>\n </div>\n </li>\n </ul>\n <p style=\"color: #fff;\" *ngIf=\"routes.length === 0\">No Route found</p>\n </perfect-scrollbar>\n </div>\n\n <div class=\"route_detail\" *ngIf=\"detailsCardEnable\">\n <div class=\"closebtnroutedetail\" (click)=\"detailsCardEnable = false; preventMouseout = false\">\n <mat-icon>clear</mat-icon>\n </div>\n <lib-route-info-card [propData]=\"{className: 'listRoutecard', repository: config['repository']}\" [popupData]=\"routeCardDetail\"></lib-route-info-card>\n <div class=\"createTxt\">\n <small>\n Created by {{routeCardDetail?.created_by_name}} on {{routeCardDetail?.created_at}}\n </small>\n </div>\n </div>\n</div>\n", styles: [".jobcode_detailprt{position:absolute;left:300px;bottom:10px;background:white;padding:15px 20px;border-radius:20px;max-width:350px;z-index:999;box-shadow:0 0 5px #0000001a}.jobcode_detailprt .close{box-shadow:0 0 5px #0000001c;border-radius:100%;width:30px;height:30px;display:flex;justify-content:center;align-items:center;cursor:pointer;background:#fff;position:absolute;top:-11px;left:-11px}@keyframes autoslide{to{transform:translate(calc(90vw - 100%))}0%{transform:translate(0)}}.route_listprt .listing_toggle{background:white;border-radius:15px;padding:5px;position:absolute;right:10px;top:20px;cursor:pointer}.route_listprt .listing_toggle img{width:28px}.route_listprt .listing_box{background:#282828;height:100vh;position:fixed;right:0;top:0;z-index:1111;box-shadow:-3px 0 5px #ffffff14;transition:.5s;-webkit-transition:.5s;-moz-transition:.5s;width:0;border-radius:40px 0 0;opacity:0}.route_listprt .listing_box .closebtn{display:none}.route_listprt .listing_box ul{padding:0 20px 0 0}.route_listprt .listing_box ul li{background:#4a4a4a;padding:10px 15px;border-radius:15px;display:flex;margin-bottom:10px;position:relative;height:inherit}@media (min-width: 1600px){.route_listprt .listing_box ul li{padding:6px 15px;margin-bottom:5px}}.route_listprt .listing_box ul li .iconprt{display:flex;flex-direction:column}.route_listprt .listing_box ul li .iconprt span{display:flex;align-items:center;margin-bottom:32px}.route_listprt .listing_box ul li .iconprt span input[type=checkbox]{width:100%;height:100%;margin-right:10px;opacity:0;position:absolute;left:0;margin-left:0;top:0;z-index:3;cursor:pointer}.route_listprt .listing_box ul li .iconprt span input[type=checkbox]:checked+label{background:url(../../../assets/images/fill-check.png) 16px 15px no-repeat}.route_listprt .listing_box ul li .iconprt span label{background:url(../../../assets/images/blank-check.png) 16px 15px no-repeat;width:100%;position:relative;z-index:2;font-size:12px;color:#878787;height:100%;position:absolute;top:0;left:0}.route_listprt .listing_box ul li .iconprt span .border{position:absolute;width:100%;height:100%;left:0;right:0;top:0;border-radius:15px}.route_listprt .listing_box ul li .iconprt span input:checked~.border{border-left:1px solid white;border-right:1px solid white;border-top:1px solid white;border-bottom:1px solid white}.route_listprt .listing_box ul li .iconprt span h2{margin-left:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:150px;padding-left:16px;font-size:.9rem;margin-bottom:0;font-weight:400;margin-top:0}.route_listprt .listing_box ul li .iconprt .statusunit{border-radius:30px;font-size:0;color:#fff;text-transform:capitalize;font-weight:500;width:20px;height:20px;text-align:center;line-height:20px;margin-bottom:7px}.route_listprt .listing_box ul li .iconprt .statusunit:first-letter{font-size:.8rem}.route_listprt .listing_box ul li .iconprt .statusunit.Ton{background:#ff7272}.route_listprt .listing_box ul li .iconprt .statusunit.Load{background:#a3c52e}.route_listprt .listing_box ul li .iconprt .statusunit.Hourly{background:#ae23d1}@media (min-width: 1600px){.route_listprt .listing_box ul li .iconprt .statusunit{line-height:21px}}.route_listprt .listing_box ul li .iconprt .infoicon{z-index:5;cursor:pointer}.route_listprt .listing_box ul li .iconprt .infoicon img{width:20px;height:20px}.route_listprt .listing_box ul li .pickprtbox{margin-left:10px}.route_listprt .listing_box ul li .pickprtbox h2{font-size:.9rem;margin:3px 0 5px;white-space:nowrap;text-overflow:ellipsis;max-width:195px;overflow:hidden}.route_listprt .listing_box ul li h3{font-size:.8rem;color:#979797;font-weight:600;margin-top:0;white-space:nowrap;text-overflow:ellipsis;max-width:195px;overflow:hidden;margin-bottom:5px}.route_listprt .listing_box ul li .pickdropprt{font-size:.75rem}.route_listprt .listing_box ul li .pickdropprt .pickprt{position:relative;display:flex;align-items:center;padding-bottom:10px}.route_listprt .listing_box ul li .pickdropprt .pickprt span{padding-left:0;padding-right:20px;display:block}.route_listprt .listing_box ul li .pickdropprt .pickprt b{position:relative}.route_listprt .listing_box ul li .pickdropprt .pickprt b:after{background:#bcbcbc;width:1px;height:100%;left:3px;content:\"\";position:absolute;top:10px}.route_listprt .listing_box ul li .pickdropprt .pickprt h4{position:relative;padding-left:15px;margin:0;line-height:18px;color:#bcbcbc;font-weight:400;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical}.route_listprt .listing_box ul li .pickdropprt .pickprt h4:before{background:#bcbcbc;top:4px;left:0;position:absolute;content:\"\";width:7px;height:7px;border-radius:100%}.route_listprt .listing_box ul li .pickdropprt .dropprt{position:relative;padding-bottom:10px;display:flex;align-items:center}.route_listprt .listing_box ul li .pickdropprt .dropprt span{padding-left:0;padding-right:20px;display:block}.route_listprt .listing_box ul li .pickdropprt .dropprt b{position:relative}.route_listprt .listing_box ul li .pickdropprt .dropprt b:after{background:#bcbcbc;width:1px;height:12px;left:3px;content:\"\";position:absolute;top:-7px}.route_listprt .listing_box ul li .pickdropprt .dropprt h4{position:relative;padding-left:15px;margin:0;line-height:18px;color:#bcbcbc;font-weight:400;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical}.route_listprt .listing_box ul li .pickdropprt .dropprt h4:before{background:#bcbcbc;top:4px;left:0;position:absolute;content:\"\";width:7px;height:7px;border-radius:100%}.route_listprt.show .listing_box{width:300px;max-width:300px;flex:0 0 350px;transition:.5s;-webkit-transition:.5s;-moz-transition:.5s;padding:40px 0 40px 20px;opacity:1}.route_listprt.show .listing_box h2{color:#fff;white-space:nowrap}.route_listprt.show .listing_box .closebtn{position:absolute;left:-33px;top:50px;background:#282828;color:#fff;padding:8px;border-top-left-radius:15px;border-bottom-left-radius:15px;cursor:pointer;box-shadow:-4px 2px 5px #ffffff14;display:block}.btnprt{display:flex;justify-content:space-between;align-items:center;padding-right:20px}.btnprt h2{margin:0}.btnprt button{font-size:15px;padding:8px 20px;background-color:#326ad3;color:#fff;border:none;border-radius:10px;box-shadow:none;outline:none}.hidden{display:none}.route_detail{background:#282828;position:absolute;width:260px;top:50%;transform:translateY(-50%);right:310px;border-radius:20px;padding:10px;box-shadow:0 0 5px #ffffff36}.createTxt small{color:#fff;font-size:.7rem}.closebtnroutedetail{box-shadow:0 0 5px #0000001c;border-radius:100%;width:30px;height:30px;display:flex;justify-content:center;align-items:center;cursor:pointer;background:#f5f5f5;position:absolute;top:-7px;left:-11px}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5.PerfectScrollbarComponent, selector: "perfect-scrollbar", inputs: ["disabled", "usePSClass", "autoPropagation", "scrollIndicators", "config"], outputs: ["psScrollY", "psScrollX", "psScrollUp", "psScrollDown", "psScrollLeft", "psScrollRight", "psYReachEnd", "psYReachStart", "psXReachEnd", "psXReachStart"], exportAs: ["ngxPerfectScrollbar"] }, { kind: "component", type: i6.JobRouteListComponent, selector: "app-job-route-list", inputs: ["routes", "selectedRoute", "masterRoutes"], outputs: ["changeNav", "changeRoutes", "changeSelectedRoute"] }, { kind: "component", type: i7.JobcodeStatusComponent, selector: "app-jobcode-status", inputs: ["jobValue"] }, { kind: "component", type: i8.JobcodeOverviewComponent, selector: "app-jobcode-overview", inputs: ["jobValue"] }, { kind: "component", type: i9.RouteInfoCardComponent, selector: "lib-route-info-card", inputs: ["popupData", "propData"] }] });
166
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: JobCodeComponent, decorators: [{
167
+ type: Component,
168
+ args: [{ selector: 'app-job-code', template: "<div class=\"jobcode_detailprt\" (click)=\"isOverlapRouteSection = false\" *ngIf=\"jobdetail\" [ngClass]=\"{'overlap': !isOverlapRouteSection}\" cdkDrag>\n <span class=\"close\"><mat-icon (click)=\"clearJob()\">clear</mat-icon></span>\n <div class=\"job_details_area\">\n <div class=\"detailnameprt\">\n <app-jobcode-status [jobValue]=\"jobdetail\"></app-jobcode-status>\n </div>\n <app-jobcode-overview [jobValue]=\"jobdetail\"></app-jobcode-overview>\n </div>\n</div>\n\n<div class=\"route_listprt\" (click)=\"isOverlapRouteSection = true\" [ngClass]=\"{ 'show': isVisible, 'overlap': isOverlapRouteSection}\">\n <div class=\"listing_toggle\" (click)=\"toggleSidemenu()\">\n <img src=\"assets/images/route.svg\" alt=\"\" />\n </div>\n\n <div class=\"listing_box\">\n <div class=\"closebtn\" (click)=\"toggleSidemenu()\">\n <mat-icon>clear</mat-icon>\n </div>\n\n <div class=\"btnprt\">\n <h2> List of Routes </h2>\n <button (click)=\"masterToggle()\">{{routes && routes.length > 0 && routes.length === selectedRoute.selected.length ? 'Uncheck' : 'Check'}} All</button>\n </div>\n\n <app-job-route-list [routes]=\"routes\" [masterRoutes]=\"masterRoutes\" [selectedRoute]=\"selectedRoute\" (changeRoutes)=\"routes = $event\" (changeSelectedRoute)=\"selectedRoute = $event\"></app-job-route-list>\n\n <perfect-scrollbar>\n <ul *ngIf=\"routes['length'] > 0\">\n <li *ngFor=\"let list of routes\">\n <div class=\"iconprt\">\n <span>\n <input type=\"checkbox\" [checked]=\"selectedRoute.isSelected(list)\"\n (change)=\"$event ? selectRoute(list) : null\" /><label>&nbsp;</label>\n <div class=\"border\"></div>\n </span>\n <div class=\"statusunit\" [ngClass]=\"list['unit']\">{{list['unit']}}</div>\n <div class=\"infoicon\">\n <img (mouseenter)=\"togglerouteDetails(true, list)\" (mouseout)=\"togglerouteDetails(false, list, true)\"\n (click)=\"togglerouteDetails('click', list)\" src=\"assets/images/info_icon.png\" [alt]=\"\" />\n </div>\n <div class=\"infoicon\" *ngIf=\"config.repository === 'customer'\">\n <img src=\"assets/images/share_icon.png\" (click)=\"openShareRouteModal(list)\" [alt]=\"\" />\n </div>\n </div>\n <div class=\"pickprtbox\">\n <h2> {{list['route_name']}} </h2>\n <h3><ng-container *ngIf=\"config?.repository === 'coolmap'\">{{list['customer_name']}} | </ng-container>{{config.repository === 'coolmap' ? list['material'] : list['materialLabel']}}</h3>\n <div class=\"pickdropprt\">\n <div class=\"pickprt\">\n <b>\n <h4>{{list['pickup_location']}}</h4>\n </b>\n </div>\n <div class=\"dropprt\">\n <b>\n <h4>{{list['delivery_location']}}</h4>\n </b>\n </div>\n </div>\n </div>\n </li>\n </ul>\n <p style=\"color: #fff;\" *ngIf=\"routes.length === 0\">No Route found</p>\n </perfect-scrollbar>\n </div>\n\n <div class=\"route_detail\" *ngIf=\"detailsCardEnable\">\n <div class=\"closebtnroutedetail\" (click)=\"detailsCardEnable = false; preventMouseout = false\">\n <mat-icon>clear</mat-icon>\n </div>\n <lib-route-info-card [propData]=\"{className: 'listRoutecard', repository: config['repository']}\" [popupData]=\"routeCardDetail\"></lib-route-info-card>\n <div class=\"createTxt\">\n <small>\n Created by {{routeCardDetail?.created_by_name}} on {{routeCardDetail?.created_at}}\n </small>\n </div>\n </div>\n</div>\n", styles: [".jobcode_detailprt{position:absolute;left:300px;bottom:10px;background:white;padding:15px 20px;border-radius:20px;max-width:350px;z-index:999;box-shadow:0 0 5px #0000001a}.jobcode_detailprt .close{box-shadow:0 0 5px #0000001c;border-radius:100%;width:30px;height:30px;display:flex;justify-content:center;align-items:center;cursor:pointer;background:#fff;position:absolute;top:-11px;left:-11px}@keyframes autoslide{to{transform:translate(calc(90vw - 100%))}0%{transform:translate(0)}}.route_listprt .listing_toggle{background:white;border-radius:15px;padding:5px;position:absolute;right:10px;top:20px;cursor:pointer}.route_listprt .listing_toggle img{width:28px}.route_listprt .listing_box{background:#282828;height:100vh;position:fixed;right:0;top:0;z-index:1111;box-shadow:-3px 0 5px #ffffff14;transition:.5s;-webkit-transition:.5s;-moz-transition:.5s;width:0;border-radius:40px 0 0;opacity:0}.route_listprt .listing_box .closebtn{display:none}.route_listprt .listing_box ul{padding:0 20px 0 0}.route_listprt .listing_box ul li{background:#4a4a4a;padding:10px 15px;border-radius:15px;display:flex;margin-bottom:10px;position:relative;height:inherit}@media (min-width: 1600px){.route_listprt .listing_box ul li{padding:6px 15px;margin-bottom:5px}}.route_listprt .listing_box ul li .iconprt{display:flex;flex-direction:column}.route_listprt .listing_box ul li .iconprt span{display:flex;align-items:center;margin-bottom:32px}.route_listprt .listing_box ul li .iconprt span input[type=checkbox]{width:100%;height:100%;margin-right:10px;opacity:0;position:absolute;left:0;margin-left:0;top:0;z-index:3;cursor:pointer}.route_listprt .listing_box ul li .iconprt span input[type=checkbox]:checked+label{background:url(../../../assets/images/fill-check.png) 16px 15px no-repeat}.route_listprt .listing_box ul li .iconprt span label{background:url(../../../assets/images/blank-check.png) 16px 15px no-repeat;width:100%;position:relative;z-index:2;font-size:12px;color:#878787;height:100%;position:absolute;top:0;left:0}.route_listprt .listing_box ul li .iconprt span .border{position:absolute;width:100%;height:100%;left:0;right:0;top:0;border-radius:15px}.route_listprt .listing_box ul li .iconprt span input:checked~.border{border-left:1px solid white;border-right:1px solid white;border-top:1px solid white;border-bottom:1px solid white}.route_listprt .listing_box ul li .iconprt span h2{margin-left:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:150px;padding-left:16px;font-size:.9rem;margin-bottom:0;font-weight:400;margin-top:0}.route_listprt .listing_box ul li .iconprt .statusunit{border-radius:30px;font-size:0;color:#fff;text-transform:capitalize;font-weight:500;width:20px;height:20px;text-align:center;line-height:20px;margin-bottom:7px}.route_listprt .listing_box ul li .iconprt .statusunit:first-letter{font-size:.8rem}.route_listprt .listing_box ul li .iconprt .statusunit.Ton{background:#ff7272}.route_listprt .listing_box ul li .iconprt .statusunit.Load{background:#a3c52e}.route_listprt .listing_box ul li .iconprt .statusunit.Hourly{background:#ae23d1}@media (min-width: 1600px){.route_listprt .listing_box ul li .iconprt .statusunit{line-height:21px}}.route_listprt .listing_box ul li .iconprt .infoicon{z-index:5;cursor:pointer}.route_listprt .listing_box ul li .iconprt .infoicon img{width:20px;height:20px}.route_listprt .listing_box ul li .pickprtbox{margin-left:10px}.route_listprt .listing_box ul li .pickprtbox h2{font-size:.9rem;margin:3px 0 5px;white-space:nowrap;text-overflow:ellipsis;max-width:195px;overflow:hidden}.route_listprt .listing_box ul li h3{font-size:.8rem;color:#979797;font-weight:600;margin-top:0;white-space:nowrap;text-overflow:ellipsis;max-width:195px;overflow:hidden;margin-bottom:5px}.route_listprt .listing_box ul li .pickdropprt{font-size:.75rem}.route_listprt .listing_box ul li .pickdropprt .pickprt{position:relative;display:flex;align-items:center;padding-bottom:10px}.route_listprt .listing_box ul li .pickdropprt .pickprt span{padding-left:0;padding-right:20px;display:block}.route_listprt .listing_box ul li .pickdropprt .pickprt b{position:relative}.route_listprt .listing_box ul li .pickdropprt .pickprt b:after{background:#bcbcbc;width:1px;height:100%;left:3px;content:\"\";position:absolute;top:10px}.route_listprt .listing_box ul li .pickdropprt .pickprt h4{position:relative;padding-left:15px;margin:0;line-height:18px;color:#bcbcbc;font-weight:400;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical}.route_listprt .listing_box ul li .pickdropprt .pickprt h4:before{background:#bcbcbc;top:4px;left:0;position:absolute;content:\"\";width:7px;height:7px;border-radius:100%}.route_listprt .listing_box ul li .pickdropprt .dropprt{position:relative;padding-bottom:10px;display:flex;align-items:center}.route_listprt .listing_box ul li .pickdropprt .dropprt span{padding-left:0;padding-right:20px;display:block}.route_listprt .listing_box ul li .pickdropprt .dropprt b{position:relative}.route_listprt .listing_box ul li .pickdropprt .dropprt b:after{background:#bcbcbc;width:1px;height:12px;left:3px;content:\"\";position:absolute;top:-7px}.route_listprt .listing_box ul li .pickdropprt .dropprt h4{position:relative;padding-left:15px;margin:0;line-height:18px;color:#bcbcbc;font-weight:400;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical}.route_listprt .listing_box ul li .pickdropprt .dropprt h4:before{background:#bcbcbc;top:4px;left:0;position:absolute;content:\"\";width:7px;height:7px;border-radius:100%}.route_listprt.show .listing_box{width:300px;max-width:300px;flex:0 0 350px;transition:.5s;-webkit-transition:.5s;-moz-transition:.5s;padding:40px 0 40px 20px;opacity:1}.route_listprt.show .listing_box h2{color:#fff;white-space:nowrap}.route_listprt.show .listing_box .closebtn{position:absolute;left:-33px;top:50px;background:#282828;color:#fff;padding:8px;border-top-left-radius:15px;border-bottom-left-radius:15px;cursor:pointer;box-shadow:-4px 2px 5px #ffffff14;display:block}.btnprt{display:flex;justify-content:space-between;align-items:center;padding-right:20px}.btnprt h2{margin:0}.btnprt button{font-size:15px;padding:8px 20px;background-color:#326ad3;color:#fff;border:none;border-radius:10px;box-shadow:none;outline:none}.hidden{display:none}.route_detail{background:#282828;position:absolute;width:260px;top:50%;transform:translateY(-50%);right:310px;border-radius:20px;padding:10px;box-shadow:0 0 5px #ffffff36}.createTxt small{color:#fff;font-size:.7rem}.closebtnroutedetail{box-shadow:0 0 5px #0000001c;border-radius:100%;width:30px;height:30px;display:flex;justify-content:center;align-items:center;cursor:pointer;background:#f5f5f5;position:absolute;top:-7px;left:-11px}\n"] }]
169
+ }], ctorParameters: function () { return [{ type: i1.UtilsService }, { type: i1.CoolmapService }, { type: i1.CoolmapConfigModel, decorators: [{
170
+ type: Inject,
171
+ args: ['memberData']
172
+ }] }]; }, propDecorators: { jobdetail: [{
173
+ type: Input
174
+ }], customerRepoDetails: [{
175
+ type: Input
176
+ }], clearJobDetails: [{
177
+ type: Output
178
+ }], openShareRoute: [{
179
+ type: Output
180
+ }] } });
181
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLWNvZGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29vbG1hcC9zcmMvbGliL2NvbXBvbmVudC9qb2ItY29kZS9qb2ItY29kZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb29sbWFwL3NyYy9saWIvY29tcG9uZW50L2pvYi1jb2RlL2pvYi1jb2RlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFhLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7QUFRMUMsTUFBTSxPQUFPLGdCQUFnQjtJQWlCM0IsWUFBbUIsS0FBbUIsRUFBUyxPQUF1QixFQUN2QyxNQUEwQjtRQUR0QyxVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQVMsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDdkMsV0FBTSxHQUFOLE1BQU0sQ0FBb0I7UUFmekQsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixXQUFNLEdBQVksRUFBRSxDQUFDO1FBQ2Qsa0JBQWEsR0FBRyxJQUFJLGNBQWMsQ0FBTSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFDdkMsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3JDLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUFDLDBCQUFxQixHQUFHLEtBQUssQ0FBQztRQUM3RSxlQUFVLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQUUzQyxvQkFBZSxHQUFZLEtBQUssQ0FBQztRQVMvQixJQUFJLENBQUMsS0FBSyxDQUFDLCtCQUEr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QUE5QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25EZXN0cm95LCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29vbG1hcENvbmZpZ01vZGVsLCBDb29sbWFwU2VydmljZSwgQ3VzdG9tZXJSZXBvRGV0YWlsc01vZGVsLCBSb3V0ZSwgVXRpbHNTZXJ2aWNlIH0gZnJvbSAnQGFnZ2RpcmVjdC9jb29sbWFwLXNlcnZpY2VzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWpvYi1jb2RlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2pvYi1jb2RlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vam9iLWNvZGUuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBKb2JDb2RlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBwdWJsaWMgam9iZGV0YWlsITogYW55O1xuICBASW5wdXQoKSBwdWJsaWMgY3VzdG9tZXJSZXBvRGV0YWlscyE6IEN1c3RvbWVyUmVwb0RldGFpbHNNb2RlbDtcbiAgaXNWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIHJvdXRlczogUm91dGVbXSA9IFtdO1xuICBwdWJsaWMgc2VsZWN0ZWRSb3V0ZSA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxhbnk+KHRydWUsIFtdKVxuICBAT3V0cHV0KCkgcHVibGljIGNsZWFySm9iRGV0YWlscyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHB1YmxpYyBvcGVuU2hhcmVSb3V0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTsgaXNPdmVybGFwUm91dGVTZWN0aW9uID0gZmFsc2U7XG4gIHB1YmxpYyBkZXN0cm95ZXIkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgZGV0YWlsc0NhcmRFbmFibGU6IGJvb2xlYW4gfCBzdHJpbmc7XG4gIHByZXZlbnRNb3VzZW91dDogYm9vbGVhbiA9IGZhbHNlO1xuICByb3V0ZUNhcmREZXRhaWw6IFJvdXRlO1xuICBwcmV2ZW50TGlzdFVwZGF0ZTogYm9vbGVhbjtcbiAgbWFzdGVyUm91dGVzOiBhbnk7XG4gIHVuaXRMaXN0OiBhbnk7XG4gIG1hdGVyaWFsc0xpc3Q6IGFueTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdXRpbHM6IFV0aWxzU2VydmljZSwgcHVibGljIGNvb2xNYXA6IENvb2xtYXBTZXJ2aWNlLFxuICAgIEBJbmplY3QoJ21lbWJlckRhdGEnKSBwdWJsaWMgY29uZmlnOiBDb29sbWFwQ29uZmlnTW9kZWwpIHtcbiAgICB0aGlzLnV0aWxzLmNsZWFyVmlld1JvdXRlZm9ySm9iQ29kZU9ic2VydmUucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZXIkKSkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICBpZiAocmVzKSB0aGlzLmNvb2xNYXAucmVtb3ZlSm9iRnJvbU1hcCh0aGlzLnNlbGVjdGVkUm91dGUuc2VsZWN0ZWQpOyB0aGlzLnNlbGVjdGVkUm91dGUuY2xlYXIoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQgeyB0aGlzLmNoZWNrQW5kQ2FsbFJvdXRlTGlzdCgpIH1cbiAgY2hlY2tBbmRDYWxsUm91dGVMaXN0KCkge1xuICAgICAgICB0aGlzLnV0aWxzLmNsZWFyT3B0aW9ucygpO1xuICAgIGlmICh0aGlzLmNvbmZpZy5yZXBvc2l0b3J5ID09PSAnY3VzdG9tZXInKSB7XG4gICAgICB0aGlzLnV0aWxzLmZldGNoVW5pdHNMaXN0KCkudGhlbigocmVzKSA9PiB7XG4gICAgICAgIHRoaXMudW5pdExpc3QgPSByZXM7XG4gICAgICAgIHRoaXMudXRpbHMuZmV0Y2hNYXRlcmlhbHNMaXN0Rm9yQ3VzdG9tZXIoKS50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICB0aGlzLm1hdGVyaWFsc0xpc3QgPSByZXM7XG4gICAgICAgICAgdGhpcy5nZXRSb3V0ZUxpc3RGb3JDdXN0b21lcigpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdldFJvdXRlTGlzdEZvckNvb2xNYXAoKVxuICAgIH1cbiAgfVxuICBnZXRVbml0TmFtZShkYXRhKTogc3RyaW5nIHtcbiAgICBsZXQgdW5pdE5hbWUgPSAnJztcbiAgICB0aGlzLnVuaXRMaXN0Lm1hcCgocmVzKSA9PiB7XG4gICAgICBpZiAocmVzLmlkID09PSBkYXRhLnVuaXRfaWQpIHtcbiAgICAgICAgdW5pdE5hbWUgPSByZXMudHlwZVxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIHVuaXROYW1lO1xuICB9XG5cbiAgZ2V0TWF0ZXJpYWxOYW1lKGRhdGEpOiBzdHJpbmcge1xuICAgIGxldCBtYXRlcmlhbE5hbWUgPSAnJztcbiAgICB0aGlzLm1hdGVyaWFsc0xpc3QubWFwKChyZXMpID0+IHtcbiAgICAgIGlmIChyZXMuc3ViX21hdGVyaWFsX2lkID09PSBkYXRhLm1hdGVyaWFsc19pZCkge1xuICAgICAgICBtYXRlcmlhbE5hbWUgPSByZXMubGFiZWxcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBtYXRlcmlhbE5hbWU7XG4gIH1cbiAgZ2V0Um91dGVMaXN0Rm9yQ29vbE1hcCgpIHtcbiAgICB0aGlzLnV0aWxzLmdldERhdGEoJ3JvdXRlcy9hbGwnKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llciQpKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gICAgICBpZiAocmVzKSB7XG4gICAgICAgIHRoaXMucm91dGVzID0gcmVzLmRhdGE7XG4gICAgICAgIHRoaXMubWFzdGVyUm91dGVzID0gcmVzLmRhdGE7XG4gICAgICAgIHRoaXMucHJldmVudExpc3RVcGRhdGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yb3V0ZXMuZm9yRWFjaCgoZWxlOiBSb3V0ZSkgPT4geyB0aGlzLnV0aWxzLm1ha2VPcHRpb25zKGVsZSkgfSk7XG4gICAgICB9XG4gICAgfSlcbiAgfVxuICBnZXRSb3V0ZUxpc3RGb3JDdXN0b21lcigpIHtcbiAgICBjb25zdCBkYXRhc2V0ID0ge1xuICAgICAgY3VzdG9tZXJfaWQ6IHRoaXMuY3VzdG9tZXJSZXBvRGV0YWlscy5jdXN0b21lci5pZFxuICAgIH1cbiAgICB0aGlzLnV0aWxzLnBvc3RkYXRhKCdyb3V0ZXMvYWxsJywgZGF0YXNldCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZXIkKSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlcykge1xuICAgICAgICB0aGlzLnJvdXRlcyA9IHJlcy5kYXRhO1xuICAgICAgICB0aGlzLnByZXZlbnRMaXN0VXBkYXRlID0gZmFsc2U7XG4gICAgICAgIHRoaXMucm91dGVzLm1hcCgoZWxlOiBSb3V0ZSkgPT4ge1xuICAgICAgICAgIGVsZS51bml0ID0gdGhpcy5nZXRVbml0TmFtZShlbGUpO1xuICAgICAgICAgIGVsZS5tYXRlcmlhbExhYmVsID0gdGhpcy5nZXRNYXRlcmlhbE5hbWUoZWxlKTtcbiAgICAgICAgICBlbGUubWF0ZXJpYWwgPSB0aGlzLmdldE1hdGVyaWFsTmFtZShlbGUpLnNwbGl0KCd8JylbMF0udHJpbSgpO1xuICAgICAgICAgIHRoaXMudXRpbHMubWFrZU9wdGlvbnMoZWxlKVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5tYXN0ZXJSb3V0ZXMgPSB0aGlzLnJvdXRlcztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHRvZ2dsZVNpZGVtZW51KCkge1xuICAgIHRoaXMuaXNWaXNpYmxlID0gIXRoaXMuaXNWaXNpYmxlO1xuICAgIHRoaXMuZGV0YWlsc0NhcmRFbmFibGUgPSBmYWxzZTtcbiAgICB0aGlzLnByZXZlbnRNb3VzZW91dCA9IGZhbHNlXG4gIH1cbiAgY2xlYXJKb2IoKSB7IHRoaXMuY2xlYXJKb2JEZXRhaWxzLmVtaXQodHJ1ZSk7IHRoaXMudXRpbHMucHJlVmVudEpvYmRldGFpbGNsb3NlLm5leHQoZmFsc2UpIH1cbiAgc2VsZWN0Um91dGUoZXZlbnQ6IFJvdXRlKSB7XG4gICAgY29uc3QgaSA9IHRoaXMuc2VsZWN0ZWRSb3V0ZS5zZWxlY3RlZC5maW5kSW5kZXgoZWxlID0+IGVsZVsnb3JkZXJfbnVtYmVyJ10gPT09IGV2ZW50WydvcmRlcl9udW1iZXInXSk7XG4gICAgdGhpcy5zZWxlY3RlZFJvdXRlLnRvZ2dsZShldmVudCk7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkUm91dGUuaXNTZWxlY3RlZChldmVudCkgJiYgZXZlbnRbJ3JvdXRlX2lkJ10pIHtcbiAgICAgIHRoaXMuY29vbE1hcC5yZW1vdmVSb3V0ZUFuZE1hcmtlcihldmVudFsncm91dGVfaWQnXSkudGhlbigocmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5jb29sTWFwLmV4dGVuZFJlQm91bmQoKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvb2xNYXAucGxvdFJvdXRlKGV2ZW50LCBldmVudFsncm91dGVfaWQnXSwgJ2pvYnJvdXRlTGlzdCcsIGZhbHNlLCB0cnVlKTtcbiAgICB9XG4gIH1cbiAgbWFzdGVyVG9nZ2xlKCkge1xuICAgIGlmICh0aGlzLnJvdXRlcy5sZW5ndGggPT09IHRoaXMuc2VsZWN0ZWRSb3V0ZS5zZWxlY3RlZC5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3V0ZS5jbGVhcigpO1xuICAgICAgdGhpcy5yb3V0ZXMuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICB0aGlzLmNvb2xNYXAucmVtb3ZlUm91dGVBbmRNYXJrZXIocm93Wydyb3V0ZV9pZCddKS50aGVuKChyZXM6IGFueSkgPT4geyB0aGlzLmNvb2xNYXAuZXh0ZW5kUmVCb3VuZCgpIH0pXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yb3V0ZXMuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICB0aGlzLnNlbGVjdGVkUm91dGUuc2VsZWN0KHJvdyk7XG4gICAgICAgIHRoaXMuY29vbE1hcC5wbG90Um91dGUocm93LCByb3dbJ3JvdXRlX2lkJ10sICdqb2Jyb3V0ZUxpc3QnLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgdG9nZ2xlcm91dGVEZXRhaWxzKGV2ZW50VHlwZTogc3RyaW5nIHwgYm9vbGVhbiwgcm91dGU6IFJvdXRlLCBtb3VzZU91dD86IGJvb2xlYW4pIHtcbiAgICBpZiAodHlwZW9mIChldmVudFR5cGUpID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5wcmV2ZW50TW91c2VvdXQgPSB0cnVlOyB0aGlzLnV0aWxzLnNldGRpY3RWYWx1ZSgncm91dGUtZGV0YWlscycsIEpTT04uc3RyaW5naWZ5KHJvdXRlKSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgKGV2ZW50VHlwZSkgPT09ICdib29sZWFuJyAmJiBldmVudFR5cGUgJiYgIXRoaXMucHJldmVudE1vdXNlb3V0KSB7IHRoaXMuZGV0YWlsc0NhcmRFbmFibGUgPSBldmVudFR5cGUgfTtcbiAgICBpZiAodHlwZW9mIChldmVudFR5cGUpID09PSAnYm9vbGVhbicgJiYgIWV2ZW50VHlwZSAmJiAhdGhpcy5wcmV2ZW50TW91c2VvdXQpIHsgdGhpcy5kZXRhaWxzQ2FyZEVuYWJsZSA9IGV2ZW50VHlwZSB9O1xuICAgIGlmICh0aGlzLnByZXZlbnRNb3VzZW91dCAmJiAhdGhpcy5kZXRhaWxzQ2FyZEVuYWJsZSkgdGhpcy5wcmV2ZW50TW91c2VvdXQgPSBmYWxzZTtcbiAgICBpZiAobW91c2VPdXQpIHtcbiAgICAgIGlmICh0aGlzLnByZXZlbnRNb3VzZW91dCkge1xuICAgICAgICByb3V0ZSA9IHRoaXMudXRpbHMuZ2V0ZGljdFZhbHVlKCdyb3V0ZS1kZXRhaWxzJyk7XG4gICAgICAgIHRoaXMucm91dGVDYXJkRGV0YWlsID0gcm91dGU7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMucHJldmVudE1vdXNlb3V0KSB7XG4gICAgICAgIHRoaXMucm91dGVDYXJkRGV0YWlsID0gcm91dGVcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yb3V0ZUNhcmREZXRhaWwgPSByb3V0ZVxuICAgIH1cbiAgICB0aGlzLnJvdXRlQ2FyZERldGFpbFsnY3JlYXRlZF9hdCddID0gdGhpcy51dGlscy5nZXREYXRlRm9ybWF0KG5ldyBEYXRlKHRoaXMucm91dGVDYXJkRGV0YWlsWydjcmVhdGVkX2F0J10pLCAnLycpO1xuICB9XG5cbiAgb3BlblNoYXJlUm91dGVNb2RhbChkYXRhKSB7XG4gICAgdGhpcy5vcGVuU2hhcmVSb3V0ZS5lbWl0KGRhdGEpO1xuICB9XG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveWVyJC5uZXh0KHRydWUpO1xuICAgIHRoaXMuZGVzdHJveWVyJC51bnN1YnNjcmliZSgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiam9iY29kZV9kZXRhaWxwcnRcIiAoY2xpY2spPVwiaXNPdmVybGFwUm91dGVTZWN0aW9uID0gZmFsc2VcIiAgKm5nSWY9XCJqb2JkZXRhaWxcIiBbbmdDbGFzc109XCJ7J292ZXJsYXAnOiAhaXNPdmVybGFwUm91dGVTZWN0aW9ufVwiIGNka0RyYWc+XG4gIDxzcGFuIGNsYXNzPVwiY2xvc2VcIj48bWF0LWljb24gKGNsaWNrKT1cImNsZWFySm9iKClcIj5jbGVhcjwvbWF0LWljb24+PC9zcGFuPlxuICA8ZGl2IGNsYXNzPVwiam9iX2RldGFpbHNfYXJlYVwiPlxuICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxuYW1lcHJ0XCI+XG4gICAgICA8YXBwLWpvYmNvZGUtc3RhdHVzIFtqb2JWYWx1ZV09XCJqb2JkZXRhaWxcIj48L2FwcC1qb2Jjb2RlLXN0YXR1cz5cbiAgICA8L2Rpdj5cbiAgICA8YXBwLWpvYmNvZGUtb3ZlcnZpZXcgW2pvYlZhbHVlXT1cImpvYmRldGFpbFwiPjwvYXBwLWpvYmNvZGUtb3ZlcnZpZXc+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJyb3V0ZV9saXN0cHJ0XCIgKGNsaWNrKT1cImlzT3ZlcmxhcFJvdXRlU2VjdGlvbiA9IHRydWVcIiBbbmdDbGFzc109XCJ7ICdzaG93JzogaXNWaXNpYmxlLCAnb3ZlcmxhcCc6IGlzT3ZlcmxhcFJvdXRlU2VjdGlvbn1cIj5cbiAgPGRpdiBjbGFzcz1cImxpc3RpbmdfdG9nZ2xlXCIgKGNsaWNrKT1cInRvZ2dsZVNpZGVtZW51KClcIj5cbiAgICA8aW1nIHNyYz1cImFzc2V0cy9pbWFnZXMvcm91dGUuc3ZnXCIgYWx0PVwiXCIgLz5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImxpc3RpbmdfYm94XCI+XG4gICAgPGRpdiBjbGFzcz1cImNsb3NlYnRuXCIgKGNsaWNrKT1cInRvZ2dsZVNpZGVtZW51KClcIj5cbiAgICAgIDxtYXQtaWNvbj5jbGVhcjwvbWF0LWljb24+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiYnRucHJ0XCI+XG4gICAgICA8aDI+IExpc3Qgb2YgUm91dGVzIDwvaDI+XG4gICAgICA8YnV0dG9uIChjbGljayk9XCJtYXN0ZXJUb2dnbGUoKVwiPnt7cm91dGVzICYmIHJvdXRlcy5sZW5ndGggPiAwICYmIHJvdXRlcy5sZW5ndGggPT09IHNlbGVjdGVkUm91dGUuc2VsZWN0ZWQubGVuZ3RoID8gJ1VuY2hlY2snIDogJ0NoZWNrJ319IEFsbDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPGFwcC1qb2Itcm91dGUtbGlzdCBbcm91dGVzXT1cInJvdXRlc1wiIFttYXN0ZXJSb3V0ZXNdPVwibWFzdGVyUm91dGVzXCIgW3NlbGVjdGVkUm91dGVdPVwic2VsZWN0ZWRSb3V0ZVwiIChjaGFuZ2VSb3V0ZXMpPVwicm91dGVzID0gJGV2ZW50XCIgKGNoYW5nZVNlbGVjdGVkUm91dGUpPVwic2VsZWN0ZWRSb3V0ZSA9ICRldmVudFwiPjwvYXBwLWpvYi1yb3V0ZS1saXN0PlxuXG4gICAgPHBlcmZlY3Qtc2Nyb2xsYmFyPlxuICAgICAgPHVsICpuZ0lmPVwicm91dGVzWydsZW5ndGgnXSA+IDBcIj5cbiAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBsaXN0IG9mIHJvdXRlc1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29ucHJ0XCI+XG4gICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cInNlbGVjdGVkUm91dGUuaXNTZWxlY3RlZChsaXN0KVwiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyBzZWxlY3RSb3V0ZShsaXN0KSA6IG51bGxcIiAvPjxsYWJlbD4mbmJzcDs8L2xhYmVsPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyXCI+PC9kaXY+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RhdHVzdW5pdFwiIFtuZ0NsYXNzXT1cImxpc3RbJ3VuaXQnXVwiPnt7bGlzdFsndW5pdCddfX08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvaWNvblwiPlxuICAgICAgICAgICAgICA8aW1nIChtb3VzZWVudGVyKT1cInRvZ2dsZXJvdXRlRGV0YWlscyh0cnVlLCBsaXN0KVwiIChtb3VzZW91dCk9XCJ0b2dnbGVyb3V0ZURldGFpbHMoZmFsc2UsIGxpc3QsIHRydWUpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZXJvdXRlRGV0YWlscygnY2xpY2snLCBsaXN0KVwiIHNyYz1cImFzc2V0cy9pbWFnZXMvaW5mb19pY29uLnBuZ1wiIFthbHRdPVwiXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm9pY29uXCIgKm5nSWY9XCJjb25maWcucmVwb3NpdG9yeSA9PT0gJ2N1c3RvbWVyJ1wiPlxuICAgICAgICAgICAgICA8aW1nIHNyYz1cImFzc2V0cy9pbWFnZXMvc2hhcmVfaWNvbi5wbmdcIiAoY2xpY2spPVwib3BlblNoYXJlUm91dGVNb2RhbChsaXN0KVwiIFthbHRdPVwiXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwaWNrcHJ0Ym94XCI+XG4gICAgICAgICAgICA8aDI+IHt7bGlzdFsncm91dGVfbmFtZSddfX0gPC9oMj5cbiAgICAgICAgICAgIDxoMz48bmctY29udGFpbmVyICpuZ0lmPVwiY29uZmlnPy5yZXBvc2l0b3J5ID09PSAnY29vbG1hcCdcIj57e2xpc3RbJ2N1c3RvbWVyX25hbWUnXX19IHwgPC9uZy1jb250YWluZXI+e3tjb25maWcucmVwb3NpdG9yeSA9PT0gJ2Nvb2xtYXAnID8gbGlzdFsnbWF0ZXJpYWwnXSA6IGxpc3RbJ21hdGVyaWFsTGFiZWwnXX19PC9oMz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwaWNrZHJvcHBydFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGlja3BydFwiPlxuICAgICAgICAgICAgICAgIDxiPlxuICAgICAgICAgICAgICAgICAgPGg0Pnt7bGlzdFsncGlja3VwX2xvY2F0aW9uJ119fTwvaDQ+XG4gICAgICAgICAgICAgICAgPC9iPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3BwcnRcIj5cbiAgICAgICAgICAgICAgICA8Yj5cbiAgICAgICAgICAgICAgICAgIDxoND57e2xpc3RbJ2RlbGl2ZXJ5X2xvY2F0aW9uJ119fTwvaDQ+XG4gICAgICAgICAgICAgICAgPC9iPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2xpPlxuICAgICAgPC91bD5cbiAgICAgIDxwIHN0eWxlPVwiY29sb3I6ICNmZmY7XCIgKm5nSWY9XCJyb3V0ZXMubGVuZ3RoID09PSAwXCI+Tm8gUm91dGUgZm91bmQ8L3A+XG4gICAgPC9wZXJmZWN0LXNjcm9sbGJhcj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cInJvdXRlX2RldGFpbFwiICpuZ0lmPVwiZGV0YWlsc0NhcmRFbmFibGVcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY2xvc2VidG5yb3V0ZWRldGFpbFwiIChjbGljayk9XCJkZXRhaWxzQ2FyZEVuYWJsZSA9IGZhbHNlOyBwcmV2ZW50TW91c2VvdXQgPSBmYWxzZVwiPlxuICAgICAgPG1hdC1pY29uPmNsZWFyPC9tYXQtaWNvbj5cbiAgICA8L2Rpdj5cbiAgICA8bGliLXJvdXRlLWluZm8tY2FyZCBbcHJvcERhdGFdPVwie2NsYXNzTmFtZTogJ2xpc3RSb3V0ZWNhcmQnLCByZXBvc2l0b3J5OiBjb25maWdbJ3JlcG9zaXRvcnknXX1cIiAgW3BvcHVwRGF0YV09XCJyb3V0ZUNhcmREZXRhaWxcIj48L2xpYi1yb3V0ZS1pbmZvLWNhcmQ+XG4gICAgPGRpdiBjbGFzcz1cImNyZWF0ZVR4dFwiPlxuICAgICAgPHNtYWxsPlxuICAgICAgICBDcmVhdGVkIGJ5IHt7cm91dGVDYXJkRGV0YWlsPy5jcmVhdGVkX2J5X25hbWV9fSBvbiB7e3JvdXRlQ2FyZERldGFpbD8uY3JlYXRlZF9hdH19XG4gICAgICA8L3NtYWxsPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19