@aggdirect/coolmap 2.9.6 → 2.9.8

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 (115) hide show
  1. package/karma.conf.js +44 -0
  2. package/ng-package.json +7 -0
  3. package/package.json +10 -19
  4. package/src/assets/mixin.scss +28 -0
  5. package/src/assets/palette.scss +24 -0
  6. package/src/assets/variable.scss +15 -0
  7. package/src/lib/component/add-route/add-route.component.html +172 -0
  8. package/src/lib/component/add-route/add-route.component.scss +243 -0
  9. package/src/lib/component/add-route/add-route.component.spec.ts +23 -0
  10. package/src/lib/component/add-route/add-route.component.ts +394 -0
  11. package/src/lib/component/job-code/job-code.component.html +79 -0
  12. package/src/lib/component/job-code/job-code.component.scss +396 -0
  13. package/src/lib/component/job-code/job-code.component.ts +146 -0
  14. package/src/lib/component/map/map.component.css +0 -0
  15. package/src/lib/component/map/map.component.html +4 -0
  16. package/src/lib/component/map/map.component.spec.ts +23 -0
  17. package/src/lib/component/map/map.component.ts +34 -0
  18. package/src/lib/component/nav/layout/add-route-nav/add-route-nav.component.html +46 -0
  19. package/src/lib/component/nav/layout/add-route-nav/add-route-nav.component.scss +18 -0
  20. package/src/lib/component/nav/layout/add-route-nav/add-route-nav.component.spec.ts +23 -0
  21. package/src/lib/component/nav/layout/add-route-nav/add-route-nav.component.ts +130 -0
  22. package/src/lib/component/nav/layout/job-code-nav/job-code-nav.component.html +48 -0
  23. package/src/lib/component/nav/layout/job-code-nav/job-code-nav.component.scss +24 -0
  24. package/src/lib/component/nav/layout/job-code-nav/job-code-nav.component.ts +143 -0
  25. package/src/lib/component/nav/nav.component.html +19 -0
  26. package/src/lib/component/nav/nav.component.scss +67 -0
  27. package/src/lib/component/nav/nav.component.ts +38 -0
  28. package/src/lib/component/route-jobcode-list/job-code-list-card/job-code-list-card.component.html +56 -0
  29. package/src/lib/component/route-jobcode-list/job-code-list-card/job-code-list-card.component.scss +168 -0
  30. package/src/lib/component/route-jobcode-list/job-code-list-card/job-code-list-card.component.spec.ts +23 -0
  31. package/src/lib/component/route-jobcode-list/job-code-list-card/job-code-list-card.component.ts +43 -0
  32. package/src/lib/component/route-jobcode-list/route-jobcode-list.component.html +73 -0
  33. package/src/lib/component/route-jobcode-list/route-jobcode-list.component.scss +227 -0
  34. package/src/lib/component/route-jobcode-list/route-jobcode-list.component.ts +233 -0
  35. package/src/lib/component/route-jobcode-list/sms-card-details-overview/sms-card-details-overview.component.html +7 -0
  36. package/src/lib/component/route-jobcode-list/sms-card-details-overview/sms-card-details-overview.component.scss +10 -0
  37. package/src/lib/component/route-jobcode-list/sms-card-details-overview/sms-card-details-overview.component.spec.ts +23 -0
  38. package/src/lib/component/route-jobcode-list/sms-card-details-overview/sms-card-details-overview.component.ts +15 -0
  39. package/src/lib/component/route-jobcode-list/view-route-list-card/view-route-list-card.component.html +28 -0
  40. package/src/lib/component/route-jobcode-list/view-route-list-card/view-route-list-card.component.scss +172 -0
  41. package/src/lib/component/route-jobcode-list/view-route-list-card/view-route-list-card.component.spec.ts +23 -0
  42. package/src/lib/component/route-jobcode-list/view-route-list-card/view-route-list-card.component.ts +20 -0
  43. package/src/lib/component/shared/dialog/dialog.component.html +7 -0
  44. package/src/lib/component/shared/dialog/dialog.component.scss +30 -0
  45. package/src/lib/component/shared/dialog/dialog.component.ts +18 -0
  46. package/src/lib/component/shared/estimation-display/estimation-display.component.html +7 -0
  47. package/src/lib/component/shared/estimation-display/estimation-display.component.scss +7 -0
  48. package/src/lib/component/shared/estimation-display/estimation-display.component.ts +13 -0
  49. package/src/lib/component/shared/job-route-list/job-route-list.component.html +46 -0
  50. package/src/lib/component/shared/job-route-list/job-route-list.component.scss +15 -0
  51. package/src/lib/component/shared/job-route-list/job-route-list.component.spec.ts +23 -0
  52. package/src/lib/component/shared/job-route-list/job-route-list.component.ts +54 -0
  53. package/src/lib/component/shared/jobcode-overview/jobcode-overview.component.html +11 -0
  54. package/src/lib/component/shared/jobcode-overview/jobcode-overview.component.scss +13 -0
  55. package/src/lib/component/shared/jobcode-overview/jobcode-overview.component.spec.ts +23 -0
  56. package/src/lib/component/shared/jobcode-overview/jobcode-overview.component.ts +19 -0
  57. package/src/lib/component/shared/jobcode-status/jobcode-status.component.html +5 -0
  58. package/src/lib/component/shared/jobcode-status/jobcode-status.component.scss +40 -0
  59. package/src/lib/component/shared/jobcode-status/jobcode-status.component.spec.ts +23 -0
  60. package/src/lib/component/shared/jobcode-status/jobcode-status.component.ts +11 -0
  61. package/src/lib/component/shared/route-info-card/route-info-card.component.html +19 -0
  62. package/src/lib/component/shared/route-info-card/route-info-card.component.scss +50 -0
  63. package/src/lib/component/shared/route-info-card/route-info-card.component.spec.ts +23 -0
  64. package/src/lib/component/shared/route-info-card/route-info-card.component.ts +74 -0
  65. package/src/lib/component/shared/searchoptiongroup/searchoptiongroup.component.css +3 -0
  66. package/src/lib/component/shared/searchoptiongroup/searchoptiongroup.component.html +6 -0
  67. package/src/lib/component/shared/searchoptiongroup/searchoptiongroup.component.spec.ts +23 -0
  68. package/src/lib/component/shared/searchoptiongroup/searchoptiongroup.component.ts +21 -0
  69. package/src/lib/coolmap.module.ts +120 -0
  70. package/{public-api.d.ts → src/public-api.ts} +8 -0
  71. package/src/test.ts +27 -0
  72. package/tsconfig.lib.json +15 -0
  73. package/tsconfig.lib.prod.json +10 -0
  74. package/tsconfig.spec.json +17 -0
  75. package/esm2022/aggdirect-coolmap.mjs +0 -5
  76. package/esm2022/lib/component/add-route/add-route.component.mjs +0 -433
  77. package/esm2022/lib/component/job-code/job-code.component.mjs +0 -181
  78. package/esm2022/lib/component/map/map.component.mjs +0 -39
  79. package/esm2022/lib/component/nav/layout/add-route-nav/add-route-nav.component.mjs +0 -151
  80. package/esm2022/lib/component/nav/layout/job-code-nav/job-code-nav.component.mjs +0 -150
  81. package/esm2022/lib/component/nav/nav.component.mjs +0 -54
  82. package/esm2022/lib/component/route-jobcode-list/job-code-list-card/job-code-list-card.component.mjs +0 -77
  83. package/esm2022/lib/component/route-jobcode-list/route-jobcode-list.component.mjs +0 -319
  84. package/esm2022/lib/component/route-jobcode-list/sms-card-details-overview/sms-card-details-overview.component.mjs +0 -19
  85. package/esm2022/lib/component/route-jobcode-list/view-route-list-card/view-route-list-card.component.mjs +0 -37
  86. package/esm2022/lib/component/shared/dialog/dialog.component.mjs +0 -31
  87. package/esm2022/lib/component/shared/estimation-display/estimation-display.component.mjs +0 -18
  88. package/esm2022/lib/component/shared/job-route-list/job-route-list.component.mjs +0 -79
  89. package/esm2022/lib/component/shared/jobcode-overview/jobcode-overview.component.mjs +0 -24
  90. package/esm2022/lib/component/shared/jobcode-status/jobcode-status.component.mjs +0 -15
  91. package/esm2022/lib/component/shared/route-info-card/route-info-card.component.mjs +0 -62
  92. package/esm2022/lib/component/shared/searchoptiongroup/searchoptiongroup.component.mjs +0 -25
  93. package/esm2022/lib/coolmap.module.mjs +0 -193
  94. package/esm2022/public-api.mjs +0 -19
  95. package/fesm2022/aggdirect-coolmap.mjs +0 -1778
  96. package/fesm2022/aggdirect-coolmap.mjs.map +0 -1
  97. package/index.d.ts +0 -5
  98. package/lib/component/add-route/add-route.component.d.ts +0 -73
  99. package/lib/component/job-code/job-code.component.d.ts +0 -41
  100. package/lib/component/map/map.component.d.ts +0 -15
  101. package/lib/component/nav/layout/add-route-nav/add-route-nav.component.d.ts +0 -49
  102. package/lib/component/nav/layout/job-code-nav/job-code-nav.component.d.ts +0 -42
  103. package/lib/component/nav/nav.component.d.ts +0 -31
  104. package/lib/component/route-jobcode-list/job-code-list-card/job-code-list-card.component.d.ts +0 -20
  105. package/lib/component/route-jobcode-list/route-jobcode-list.component.d.ts +0 -42
  106. package/lib/component/route-jobcode-list/sms-card-details-overview/sms-card-details-overview.component.d.ts +0 -9
  107. package/lib/component/route-jobcode-list/view-route-list-card/view-route-list-card.component.d.ts +0 -12
  108. package/lib/component/shared/dialog/dialog.component.d.ts +0 -13
  109. package/lib/component/shared/estimation-display/estimation-display.component.d.ts +0 -8
  110. package/lib/component/shared/job-route-list/job-route-list.component.d.ts +0 -26
  111. package/lib/component/shared/jobcode-overview/jobcode-overview.component.d.ts +0 -10
  112. package/lib/component/shared/jobcode-status/jobcode-status.component.d.ts +0 -7
  113. package/lib/component/shared/route-info-card/route-info-card.component.d.ts +0 -32
  114. package/lib/component/shared/searchoptiongroup/searchoptiongroup.component.d.ts +0 -14
  115. package/lib/coolmap.module.d.ts +0 -46
@@ -1,181 +0,0 @@
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 "@angular/cdk/scrolling";
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
- utils;
16
- coolMap;
17
- config;
18
- jobdetail;
19
- customerRepoDetails;
20
- isVisible = false;
21
- routes = [];
22
- selectedRoute = new SelectionModel(true, []);
23
- clearJobDetails = new EventEmitter();
24
- openShareRoute = new EventEmitter();
25
- isOverlapRouteSection = false;
26
- destroyer$ = new Subject();
27
- detailsCardEnable;
28
- preventMouseout = false;
29
- routeCardDetail;
30
- preventListUpdate;
31
- masterRoutes;
32
- unitList;
33
- materialsList;
34
- constructor(utils, coolMap, config) {
35
- this.utils = utils;
36
- this.coolMap = coolMap;
37
- this.config = config;
38
- this.utils.clearViewRouteforJobCodeObserve.pipe(takeUntil(this.destroyer$)).subscribe(res => {
39
- if (res)
40
- this.coolMap.removeJobFromMap(this.selectedRoute.selected);
41
- this.selectedRoute.clear();
42
- });
43
- }
44
- ngOnInit() { this.checkAndCallRouteList(); }
45
- checkAndCallRouteList() {
46
- this.utils.clearOptions();
47
- if (this.config.repository === 'customer') {
48
- this.utils.fetchUnitsList().then((res) => {
49
- this.unitList = res;
50
- this.utils.fetchMaterialsListForCustomer().then((res) => {
51
- this.materialsList = res;
52
- this.getRouteListForCustomer();
53
- });
54
- });
55
- }
56
- else {
57
- this.getRouteListForCoolMap();
58
- }
59
- }
60
- getUnitName(data) {
61
- let unitName = '';
62
- this.unitList.map((res) => {
63
- if (res.id === data.unit_id) {
64
- unitName = res.type;
65
- }
66
- });
67
- return unitName;
68
- }
69
- getRouteListForCoolMap() {
70
- this.utils.getData('routes/all').pipe(takeUntil(this.destroyer$)).subscribe((res) => {
71
- if (res) {
72
- this.routes = res.data;
73
- this.masterRoutes = res.data;
74
- this.preventListUpdate = false;
75
- this.routes.forEach((ele) => { this.utils.makeOptions(ele); });
76
- }
77
- });
78
- }
79
- getRouteListForCustomer() {
80
- const dataset = {
81
- customer_id: this.customerRepoDetails.customer.id
82
- };
83
- this.utils.postdata('routes/all', dataset).pipe(takeUntil(this.destroyer$)).subscribe((res) => {
84
- if (res) {
85
- this.routes = res.data;
86
- this.preventListUpdate = false;
87
- this.routes.map((ele) => {
88
- ele.unit = this.getUnitName(ele);
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
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: JobCodeComponent, deps: [{ token: i1.UtilsService }, { token: i1.CoolmapService }, { token: 'memberData' }], target: i0.ɵɵFactoryTarget.Component });
164
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", 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 <cdk-virtual-scroll-viewport itemSize=\"50\" class=\"routeList-viewport\">\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></h3>\n <div class=\"pickdropprt\">\n <div class=\"pickprt\">\n <b>\n <h4>{{list['pickup_location']?.split('|')[1] ? list['pickup_location'].split('|')[1] : list['pickup_location']}}</h4>\n </b>\n </div>\n <div class=\"dropprt\">\n <b>\n <h4>{{list['delivery_location']?.split('|')[1] ? list['delivery_location'].split('|')[1] : 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 </cdk-virtual-scroll-viewport>\n\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:20em;bottom:10px;background:#fff;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:#fff;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 label{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:7px 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;-webkit-box-flex:0;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}.routeList-viewport{height:944px}\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: "directive", type: i5.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "component", type: i5.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { 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"] }] });
165
- }
166
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", 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 <cdk-virtual-scroll-viewport itemSize=\"50\" class=\"routeList-viewport\">\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></h3>\n <div class=\"pickdropprt\">\n <div class=\"pickprt\">\n <b>\n <h4>{{list['pickup_location']?.split('|')[1] ? list['pickup_location'].split('|')[1] : list['pickup_location']}}</h4>\n </b>\n </div>\n <div class=\"dropprt\">\n <b>\n <h4>{{list['delivery_location']?.split('|')[1] ? list['delivery_location'].split('|')[1] : 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 </cdk-virtual-scroll-viewport>\n\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:20em;bottom:10px;background:#fff;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:#fff;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 label{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:7px 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;-webkit-box-flex:0;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}.routeList-viewport{height:944px}\n"] }]
169
- }], ctorParameters: () => [{ 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLWNvZGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29vbG1hcC9zcmMvbGliL2NvbXBvbmVudC9qb2ItY29kZS9qb2ItY29kZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb29sbWFwL3NyYy9saWIvY29tcG9uZW50L2pvYi1jb2RlL2pvYi1jb2RlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFhLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7QUFTMUMsTUFBTSxPQUFPLGdCQUFnQjtJQWlCUjtJQUE0QjtJQUNoQjtJQWpCZixTQUFTLENBQU87SUFDaEIsbUJBQW1CLENBQTRCO0lBQy9ELFNBQVMsR0FBWSxLQUFLLENBQUM7SUFDM0IsTUFBTSxHQUFZLEVBQUUsQ0FBQztJQUNkLGFBQWEsR0FBRyxJQUFJLGNBQWMsQ0FBTSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFDdkMsZUFBZSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDckMsY0FBYyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7SUFDN0UsVUFBVSxHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7SUFDM0MsaUJBQWlCLENBQW1CO0lBQ3BDLGVBQWUsR0FBWSxLQUFLLENBQUM7SUFDakMsZUFBZSxDQUFRO0lBQ3ZCLGlCQUFpQixDQUFVO0lBQzNCLFlBQVksQ0FBTTtJQUNsQixRQUFRLENBQU07SUFDZCxhQUFhLENBQU07SUFF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QUFZLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ2pELElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1lBQy9CLENBQUM7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUMxQixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQTtZQUM5QixDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQTtRQUM5QixDQUFDO1FBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDbkgsQ0FBQztJQUVELG1CQUFtQixDQUFDLElBQUk7UUFDdEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUNELFdBQVc7UUFDVCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2hDLENBQUM7dUdBcklVLGdCQUFnQiw0RUFrQmpCLFlBQVk7MkZBbEJYLGdCQUFnQix1TkNYN0IsbTBIQStFQTs7MkZEcEVhLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxjQUFjOzswQkFzQnJCLE1BQU07MkJBQUMsWUFBWTt5Q0FqQk4sU0FBUztzQkFBeEIsS0FBSztnQkFDVSxtQkFBbUI7c0JBQWxDLEtBQUs7Z0JBSVcsZUFBZTtzQkFBL0IsTUFBTTtnQkFDVSxjQUFjO3NCQUE5QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25EZXN0cm95LCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29vbG1hcENvbmZpZ01vZGVsLCBDb29sbWFwU2VydmljZSwgQ3VzdG9tZXJSZXBvRGV0YWlsc01vZGVsLCBSb3V0ZSwgVXRpbHNTZXJ2aWNlIH0gZnJvbSAnQGFnZ2RpcmVjdC9jb29sbWFwLXNlcnZpY2VzJztcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtam9iLWNvZGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vam9iLWNvZGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9qb2ItY29kZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEpvYkNvZGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIHB1YmxpYyBqb2JkZXRhaWwhOiBhbnk7XG4gIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21lclJlcG9EZXRhaWxzITogQ3VzdG9tZXJSZXBvRGV0YWlsc01vZGVsO1xuICBpc1Zpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcm91dGVzOiBSb3V0ZVtdID0gW107XG4gIHB1YmxpYyBzZWxlY3RlZFJvdXRlID0gbmV3IFNlbGVjdGlvbk1vZGVsPGFueT4odHJ1ZSwgW10pXG4gIEBPdXRwdXQoKSBwdWJsaWMgY2xlYXJKb2JEZXRhaWxzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcHVibGljIG9wZW5TaGFyZVJvdXRlID0gbmV3IEV2ZW50RW1pdHRlcigpOyBpc092ZXJsYXBSb3V0ZVNlY3Rpb24gPSBmYWxzZTtcbiAgcHVibGljIGRlc3Ryb3llciQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICBkZXRhaWxzQ2FyZEVuYWJsZTogYm9vbGVhbiB8IHN0cmluZztcbiAgcHJldmVudE1vdXNlb3V0OiBib29sZWFuID0gZmFsc2U7XG4gIHJvdXRlQ2FyZERldGFpbDogUm91dGU7XG4gIHByZXZlbnRMaXN0VXBkYXRlOiBib29sZWFuO1xuICBtYXN0ZXJSb3V0ZXM6IGFueTtcbiAgdW5pdExpc3Q6IGFueTtcbiAgbWF0ZXJpYWxzTGlzdDogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB1dGlsczogVXRpbHNTZXJ2aWNlLCBwdWJsaWMgY29vbE1hcDogQ29vbG1hcFNlcnZpY2UsXG4gICAgQEluamVjdCgnbWVtYmVyRGF0YScpIHB1YmxpYyBjb25maWc6IENvb2xtYXBDb25maWdNb2RlbCkge1xuICAgIHRoaXMudXRpbHMuY2xlYXJWaWV3Um91dGVmb3JKb2JDb2RlT2JzZXJ2ZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llciQpKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgIGlmIChyZXMpIHRoaXMuY29vbE1hcC5yZW1vdmVKb2JGcm9tTWFwKHRoaXMuc2VsZWN0ZWRSb3V0ZS5zZWxlY3RlZCk7IHRoaXMuc2VsZWN0ZWRSb3V0ZS5jbGVhcigpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7IHRoaXMuY2hlY2tBbmRDYWxsUm91dGVMaXN0KCkgfVxuICBjaGVja0FuZENhbGxSb3V0ZUxpc3QoKSB7XG4gICAgICAgIHRoaXMudXRpbHMuY2xlYXJPcHRpb25zKCk7XG4gICAgaWYgKHRoaXMuY29uZmlnLnJlcG9zaXRvcnkgPT09ICdjdXN0b21lcicpIHtcbiAgICAgIHRoaXMudXRpbHMuZmV0Y2hVbml0c0xpc3QoKS50aGVuKChyZXMpID0+IHtcbiAgICAgICAgdGhpcy51bml0TGlzdCA9IHJlcztcbiAgICAgICAgdGhpcy51dGlscy5mZXRjaE1hdGVyaWFsc0xpc3RGb3JDdXN0b21lcigpLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgIHRoaXMubWF0ZXJpYWxzTGlzdCA9IHJlcztcbiAgICAgICAgICB0aGlzLmdldFJvdXRlTGlzdEZvckN1c3RvbWVyKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ2V0Um91dGVMaXN0Rm9yQ29vbE1hcCgpXG4gICAgfVxuICB9XG4gIGdldFVuaXROYW1lKGRhdGEpOiBzdHJpbmcge1xuICAgIGxldCB1bml0TmFtZSA9ICcnO1xuICAgIHRoaXMudW5pdExpc3QubWFwKChyZXMpID0+IHtcbiAgICAgIGlmIChyZXMuaWQgPT09IGRhdGEudW5pdF9pZCkge1xuICAgICAgICB1bml0TmFtZSA9IHJlcy50eXBlXG4gICAgICB9XG4gICAgfSlcbiAgICByZXR1cm4gdW5pdE5hbWU7XG4gIH1cblxuICBnZXRSb3V0ZUxpc3RGb3JDb29sTWFwKCkge1xuICAgIHRoaXMudXRpbHMuZ2V0RGF0YSgncm91dGVzL2FsbCcpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVyJCkpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgdGhpcy5yb3V0ZXMgPSByZXMuZGF0YTtcbiAgICAgICAgdGhpcy5tYXN0ZXJSb3V0ZXMgPSByZXMuZGF0YTtcbiAgICAgICAgdGhpcy5wcmV2ZW50TGlzdFVwZGF0ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJvdXRlcy5mb3JFYWNoKChlbGU6IFJvdXRlKSA9PiB7IHRoaXMudXRpbHMubWFrZU9wdGlvbnMoZWxlKSB9KTtcbiAgICAgIH1cbiAgICB9KVxuICB9XG4gIGdldFJvdXRlTGlzdEZvckN1c3RvbWVyKCkge1xuICAgIGNvbnN0IGRhdGFzZXQgPSB7XG4gICAgICBjdXN0b21lcl9pZDogdGhpcy5jdXN0b21lclJlcG9EZXRhaWxzLmN1c3RvbWVyLmlkXG4gICAgfVxuICAgIHRoaXMudXRpbHMucG9zdGRhdGEoJ3JvdXRlcy9hbGwnLCBkYXRhc2V0KS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llciQpKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gICAgICBpZiAocmVzKSB7XG4gICAgICAgIHRoaXMucm91dGVzID0gcmVzLmRhdGE7XG4gICAgICAgIHRoaXMucHJldmVudExpc3RVcGRhdGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yb3V0ZXMubWFwKChlbGU6IFJvdXRlKSA9PiB7XG4gICAgICAgICAgZWxlLnVuaXQgPSB0aGlzLmdldFVuaXROYW1lKGVsZSk7XG4gICAgICAgICAgdGhpcy51dGlscy5tYWtlT3B0aW9ucyhlbGUpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm1hc3RlclJvdXRlcyA9IHRoaXMucm91dGVzO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdG9nZ2xlU2lkZW1lbnUoKSB7XG4gICAgdGhpcy5pc1Zpc2libGUgPSAhdGhpcy5pc1Zpc2libGU7XG4gICAgdGhpcy5kZXRhaWxzQ2FyZEVuYWJsZSA9IGZhbHNlO1xuICAgIHRoaXMucHJldmVudE1vdXNlb3V0ID0gZmFsc2VcbiAgfVxuICBjbGVhckpvYigpIHsgdGhpcy5jbGVhckpvYkRldGFpbHMuZW1pdCh0cnVlKTsgdGhpcy51dGlscy5wcmVWZW50Sm9iZGV0YWlsY2xvc2UubmV4dChmYWxzZSkgfVxuICBzZWxlY3RSb3V0ZShldmVudDogUm91dGUpIHtcbiAgICBjb25zdCBpID0gdGhpcy5zZWxlY3RlZFJvdXRlLnNlbGVjdGVkLmZpbmRJbmRleChlbGUgPT4gZWxlWydvcmRlcl9udW1iZXInXSA9PT0gZXZlbnRbJ29yZGVyX251bWJlciddKTtcbiAgICB0aGlzLnNlbGVjdGVkUm91dGUudG9nZ2xlKGV2ZW50KTtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRSb3V0ZS5pc1NlbGVjdGVkKGV2ZW50KSAmJiBldmVudFsncm91dGVfaWQnXSkge1xuICAgICAgdGhpcy5jb29sTWFwLnJlbW92ZVJvdXRlQW5kTWFya2VyKGV2ZW50Wydyb3V0ZV9pZCddKS50aGVuKChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmNvb2xNYXAuZXh0ZW5kUmVCb3VuZCgpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29vbE1hcC5wbG90Um91dGUoZXZlbnQsIGV2ZW50Wydyb3V0ZV9pZCddLCAnam9icm91dGVMaXN0JywgZmFsc2UsIHRydWUpO1xuICAgIH1cbiAgfVxuICBtYXN0ZXJUb2dnbGUoKSB7XG4gICAgaWYgKHRoaXMucm91dGVzLmxlbmd0aCA9PT0gdGhpcy5zZWxlY3RlZFJvdXRlLnNlbGVjdGVkLmxlbmd0aCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFJvdXRlLmNsZWFyKCk7XG4gICAgICB0aGlzLnJvdXRlcy5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgIHRoaXMuY29vbE1hcC5yZW1vdmVSb3V0ZUFuZE1hcmtlcihyb3dbJ3JvdXRlX2lkJ10pLnRoZW4oKHJlczogYW55KSA9PiB7IHRoaXMuY29vbE1hcC5leHRlbmRSZUJvdW5kKCkgfSlcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvdXRlcy5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3V0ZS5zZWxlY3Qocm93KTtcbiAgICAgICAgdGhpcy5jb29sTWFwLnBsb3RSb3V0ZShyb3csIHJvd1sncm91dGVfaWQnXSwgJ2pvYnJvdXRlTGlzdCcsIGZhbHNlLCB0cnVlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICB0b2dnbGVyb3V0ZURldGFpbHMoZXZlbnRUeXBlOiBzdHJpbmcgfCBib29sZWFuLCByb3V0ZTogUm91dGUsIG1vdXNlT3V0PzogYm9vbGVhbikge1xuICAgIGlmICh0eXBlb2YgKGV2ZW50VHlwZSkgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLnByZXZlbnRNb3VzZW91dCA9IHRydWU7IHRoaXMudXRpbHMuc2V0ZGljdFZhbHVlKCdyb3V0ZS1kZXRhaWxzJywgSlNPTi5zdHJpbmdpZnkocm91dGUpKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiAoZXZlbnRUeXBlKSA9PT0gJ2Jvb2xlYW4nICYmIGV2ZW50VHlwZSAmJiAhdGhpcy5wcmV2ZW50TW91c2VvdXQpIHsgdGhpcy5kZXRhaWxzQ2FyZEVuYWJsZSA9IGV2ZW50VHlwZSB9O1xuICAgIGlmICh0eXBlb2YgKGV2ZW50VHlwZSkgPT09ICdib29sZWFuJyAmJiAhZXZlbnRUeXBlICYmICF0aGlzLnByZXZlbnRNb3VzZW91dCkgeyB0aGlzLmRldGFpbHNDYXJkRW5hYmxlID0gZXZlbnRUeXBlIH07XG4gICAgaWYgKHRoaXMucHJldmVudE1vdXNlb3V0ICYmICF0aGlzLmRldGFpbHNDYXJkRW5hYmxlKSB0aGlzLnByZXZlbnRNb3VzZW91dCA9IGZhbHNlO1xuICAgIGlmIChtb3VzZU91dCkge1xuICAgICAgaWYgKHRoaXMucHJldmVudE1vdXNlb3V0KSB7XG4gICAgICAgIHJvdXRlID0gdGhpcy51dGlscy5nZXRkaWN0VmFsdWUoJ3JvdXRlLWRldGFpbHMnKTtcbiAgICAgICAgdGhpcy5yb3V0ZUNhcmREZXRhaWwgPSByb3V0ZTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5wcmV2ZW50TW91c2VvdXQpIHtcbiAgICAgICAgdGhpcy5yb3V0ZUNhcmREZXRhaWwgPSByb3V0ZVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvdXRlQ2FyZERldGFpbCA9IHJvdXRlXG4gICAgfVxuICAgIHRoaXMucm91dGVDYXJkRGV0YWlsWydjcmVhdGVkX2F0J10gPSB0aGlzLnV0aWxzLmdldERhdGVGb3JtYXQobmV3IERhdGUodGhpcy5yb3V0ZUNhcmREZXRhaWxbJ2NyZWF0ZWRfYXQnXSksICcvJyk7XG4gIH1cblxuICBvcGVuU2hhcmVSb3V0ZU1vZGFsKGRhdGEpIHtcbiAgICB0aGlzLm9wZW5TaGFyZVJvdXRlLmVtaXQoZGF0YSk7XG4gIH1cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95ZXIkLm5leHQodHJ1ZSk7XG4gICAgdGhpcy5kZXN0cm95ZXIkLnVuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJqb2Jjb2RlX2RldGFpbHBydFwiIChjbGljayk9XCJpc092ZXJsYXBSb3V0ZVNlY3Rpb24gPSBmYWxzZVwiICAqbmdJZj1cImpvYmRldGFpbFwiIFtuZ0NsYXNzXT1cInsnb3ZlcmxhcCc6ICFpc092ZXJsYXBSb3V0ZVNlY3Rpb259XCIgY2RrRHJhZz5cbiAgPHNwYW4gY2xhc3M9XCJjbG9zZVwiPjxtYXQtaWNvbiAoY2xpY2spPVwiY2xlYXJKb2IoKVwiPmNsZWFyPC9tYXQtaWNvbj48L3NwYW4+XG4gIDxkaXYgY2xhc3M9XCJqb2JfZGV0YWlsc19hcmVhXCI+XG4gICAgPGRpdiBjbGFzcz1cImRldGFpbG5hbWVwcnRcIj5cbiAgICAgIDxhcHAtam9iY29kZS1zdGF0dXMgW2pvYlZhbHVlXT1cImpvYmRldGFpbFwiPjwvYXBwLWpvYmNvZGUtc3RhdHVzPlxuICAgIDwvZGl2PlxuICAgIDxhcHAtam9iY29kZS1vdmVydmlldyBbam9iVmFsdWVdPVwiam9iZGV0YWlsXCI+PC9hcHAtam9iY29kZS1vdmVydmlldz5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cInJvdXRlX2xpc3RwcnRcIiAoY2xpY2spPVwiaXNPdmVybGFwUm91dGVTZWN0aW9uID0gdHJ1ZVwiIFtuZ0NsYXNzXT1cInsgJ3Nob3cnOiBpc1Zpc2libGUsICdvdmVybGFwJzogaXNPdmVybGFwUm91dGVTZWN0aW9ufVwiPlxuICA8ZGl2IGNsYXNzPVwibGlzdGluZ190b2dnbGVcIiAoY2xpY2spPVwidG9nZ2xlU2lkZW1lbnUoKVwiPlxuICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ltYWdlcy9yb3V0ZS5zdmdcIiBhbHQ9XCJcIiAvPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwibGlzdGluZ19ib3hcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY2xvc2VidG5cIiAoY2xpY2spPVwidG9nZ2xlU2lkZW1lbnUoKVwiPlxuICAgICAgPG1hdC1pY29uPmNsZWFyPC9tYXQtaWNvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJidG5wcnRcIj5cbiAgICAgIDxoMj4gTGlzdCBvZiBSb3V0ZXMgPC9oMj5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cIm1hc3RlclRvZ2dsZSgpXCI+e3tyb3V0ZXMgJiYgcm91dGVzLmxlbmd0aCA+IDAgJiYgcm91dGVzLmxlbmd0aCA9PT0gc2VsZWN0ZWRSb3V0ZS5zZWxlY3RlZC5sZW5ndGggPyAnVW5jaGVjaycgOiAnQ2hlY2snfX0gQWxsPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8YXBwLWpvYi1yb3V0ZS1saXN0IFtyb3V0ZXNdPVwicm91dGVzXCIgW21hc3RlclJvdXRlc109XCJtYXN0ZXJSb3V0ZXNcIiBbc2VsZWN0ZWRSb3V0ZV09XCJzZWxlY3RlZFJvdXRlXCIgKGNoYW5nZVJvdXRlcyk9XCJyb3V0ZXMgPSAkZXZlbnRcIiAoY2hhbmdlU2VsZWN0ZWRSb3V0ZSk9XCJzZWxlY3RlZFJvdXRlID0gJGV2ZW50XCI+PC9hcHAtam9iLXJvdXRlLWxpc3Q+XG4gICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCBpdGVtU2l6ZT1cIjUwXCIgY2xhc3M9XCJyb3V0ZUxpc3Qtdmlld3BvcnRcIj5cbiAgICAgIDx1bCAqbmdJZj1cInJvdXRlc1snbGVuZ3RoJ10gPiAwXCI+XG4gICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgbGlzdCBvZiByb3V0ZXNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbnBydFwiPlxuICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJzZWxlY3RlZFJvdXRlLmlzU2VsZWN0ZWQobGlzdClcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiJGV2ZW50ID8gc2VsZWN0Um91dGUobGlzdCkgOiBudWxsXCIgLz48bGFiZWw+Jm5ic3A7PC9sYWJlbD5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlclwiPjwvZGl2PlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0YXR1c3VuaXRcIiBbbmdDbGFzc109XCJsaXN0Wyd1bml0J11cIj57e2xpc3RbJ3VuaXQnXX19PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mb2ljb25cIj5cbiAgICAgICAgICAgICAgPGltZyAobW91c2VlbnRlcik9XCJ0b2dnbGVyb3V0ZURldGFpbHModHJ1ZSwgbGlzdClcIiAobW91c2VvdXQpPVwidG9nZ2xlcm91dGVEZXRhaWxzKGZhbHNlLCBsaXN0LCB0cnVlKVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVyb3V0ZURldGFpbHMoJ2NsaWNrJywgbGlzdClcIiBzcmM9XCJhc3NldHMvaW1hZ2VzL2luZm9faWNvbi5wbmdcIiBbYWx0XT1cIlwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvaWNvblwiICpuZ0lmPVwiY29uZmlnLnJlcG9zaXRvcnkgPT09ICdjdXN0b21lcidcIj5cbiAgICAgICAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvaW1hZ2VzL3NoYXJlX2ljb24ucG5nXCIgKGNsaWNrKT1cIm9wZW5TaGFyZVJvdXRlTW9kYWwobGlzdClcIiBbYWx0XT1cIlwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicGlja3BydGJveFwiPlxuICAgICAgICAgICAgPGgyPiB7e2xpc3RbJ3JvdXRlX25hbWUnXX19IDwvaDI+XG4gICAgICAgICAgICA8aDM+PG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbmZpZz8ucmVwb3NpdG9yeSA9PT0gJ2Nvb2xtYXAnXCI+e3tsaXN0WydjdXN0b21lcl9uYW1lJ119fSA8L25nLWNvbnRhaW5lcj48L2gzPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBpY2tkcm9wcHJ0XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwaWNrcHJ0XCI+XG4gICAgICAgICAgICAgICAgPGI+XG4gICAgICAgICAgICAgICAgICA8aDQ+e3tsaXN0WydwaWNrdXBfbG9jYXRpb24nXT8uc3BsaXQoJ3wnKVsxXSA/IGxpc3RbJ3BpY2t1cF9sb2NhdGlvbiddLnNwbGl0KCd8JylbMV0gOiBsaXN0WydwaWNrdXBfbG9jYXRpb24nXX19PC9oND5cbiAgICAgICAgICAgICAgICA8L2I+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcHBydFwiPlxuICAgICAgICAgICAgICAgIDxiPlxuICAgICAgICAgICAgICAgICAgPGg0Pnt7bGlzdFsnZGVsaXZlcnlfbG9jYXRpb24nXT8uc3BsaXQoJ3wnKVsxXSA/IGxpc3RbJ2RlbGl2ZXJ5X2xvY2F0aW9uJ10uc3BsaXQoJ3wnKVsxXSA6IGxpc3RbJ2RlbGl2ZXJ5X2xvY2F0aW9uJ119fTwvaDQ+XG4gICAgICAgICAgICAgICAgPC9iPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2xpPlxuICAgICAgPC91bD5cbiAgICAgIDxwIHN0eWxlPVwiY29sb3I6ICNmZmY7XCIgKm5nSWY9XCJyb3V0ZXMubGVuZ3RoID09PSAwXCI+Tm8gUm91dGUgZm91bmQ8L3A+XG4gICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cInJvdXRlX2RldGFpbFwiICpuZ0lmPVwiZGV0YWlsc0NhcmRFbmFibGVcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY2xvc2VidG5yb3V0ZWRldGFpbFwiIChjbGljayk9XCJkZXRhaWxzQ2FyZEVuYWJsZSA9IGZhbHNlOyBwcmV2ZW50TW91c2VvdXQgPSBmYWxzZVwiPlxuICAgICAgPG1hdC1pY29uPmNsZWFyPC9tYXQtaWNvbj5cbiAgICA8L2Rpdj5cbiAgICA8bGliLXJvdXRlLWluZm8tY2FyZCBbcHJvcERhdGFdPVwie2NsYXNzTmFtZTogJ2xpc3RSb3V0ZWNhcmQnLCByZXBvc2l0b3J5OiBjb25maWdbJ3JlcG9zaXRvcnknXX1cIiAgW3BvcHVwRGF0YV09XCJyb3V0ZUNhcmREZXRhaWxcIj48L2xpYi1yb3V0ZS1pbmZvLWNhcmQ+XG4gICAgPGRpdiBjbGFzcz1cImNyZWF0ZVR4dFwiPlxuICAgICAgPHNtYWxsPlxuICAgICAgICBDcmVhdGVkIGJ5IHt7cm91dGVDYXJkRGV0YWlsPy5jcmVhdGVkX2J5X25hbWV9fSBvbiB7e3JvdXRlQ2FyZERldGFpbD8uY3JlYXRlZF9hdH19XG4gICAgICA8L3NtYWxsPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -1,39 +0,0 @@
1
- import { Component, ViewChild } from '@angular/core';
2
- import { Subject, takeUntil } from 'rxjs';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@aggdirect/coolmap-services";
5
- import * as i2 from "@angular/common";
6
- import * as i3 from "@angular/material/progress-bar";
7
- export class MapComponent {
8
- coolmapService;
9
- mapDiv;
10
- enableProgress = true;
11
- destroyer$ = new Subject();
12
- constructor(coolmapService) {
13
- this.coolmapService = coolmapService;
14
- }
15
- ngAfterViewInit() {
16
- this.coolmapService.reintiatecoolmap.pipe(takeUntil(this.destroyer$)).subscribe((res) => {
17
- this.enableProgress = true;
18
- if (res) {
19
- this.coolmapService.initiateMapForAddRoute(this.mapDiv.nativeElement).then((res) => {
20
- this.enableProgress = false;
21
- });
22
- }
23
- });
24
- }
25
- ngOnDestroy() {
26
- this.destroyer$.next(true);
27
- this.destroyer$.unsubscribe();
28
- }
29
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: MapComponent, deps: [{ token: i1.CoolmapService }], target: i0.ɵɵFactoryTarget.Component });
30
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: MapComponent, selector: "app-map", viewQueries: [{ propertyName: "mapDiv", first: true, predicate: ["map"], descendants: true, static: true }], ngImport: i0, template: "<div>\n <mat-progress-bar *ngIf=\"enableProgress\" mode=\"indeterminate\"></mat-progress-bar>\n <div #map class=\"coolmap\" style=\"height: 100vh;\"></div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }] });
31
- }
32
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: MapComponent, decorators: [{
33
- type: Component,
34
- args: [{ selector: 'app-map', template: "<div>\n <mat-progress-bar *ngIf=\"enableProgress\" mode=\"indeterminate\"></mat-progress-bar>\n <div #map class=\"coolmap\" style=\"height: 100vh;\"></div>\n</div>\n" }]
35
- }], ctorParameters: () => [{ type: i1.CoolmapService }], propDecorators: { mapDiv: [{
36
- type: ViewChild,
37
- args: ['map', { static: true }]
38
- }] } });
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nvb2xtYXAvc3JjL2xpYi9jb21wb25lbnQvbWFwL21hcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb29sbWFwL3NyYy9saWIvY29tcG9uZW50L21hcC9tYXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBeUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7OztBQVUxQyxNQUFNLE9BQU8sWUFBWTtJQUtIO0lBSnVCLE1BQU0sQ0FBYztJQUMvRCxjQUFjLEdBQVksSUFBSSxDQUFDO0lBQ3hCLFVBQVUsR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO0lBRTNDLFlBQW9CLGNBQThCO1FBQTlCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtJQUFLLENBQUM7SUFFeEQsZUFBZTtRQUNiLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUMzRixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztZQUMzQixJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNSLElBQUksQ0FBQyxjQUFjLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDakYsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7Z0JBQzlCLENBQUMsQ0FBQyxDQUFBO1lBQ0osQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2hDLENBQUM7dUdBckJVLFlBQVk7MkZBQVosWUFBWSw0SkNYekIseUtBSUE7OzJGRE9hLFlBQVk7a0JBTHhCLFNBQVM7K0JBQ0UsU0FBUzttRkFLd0IsTUFBTTtzQkFBaEQsU0FBUzt1QkFBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkRlc3Ryb3ksIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb29sbWFwU2VydmljZSB9IGZyb20gJ0BhZ2dkaXJlY3QvY29vbG1hcC1zZXJ2aWNlcyc7XG5cblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtbWFwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21hcC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21hcC5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTWFwQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgnbWFwJywgeyBzdGF0aWM6IHRydWUgfSkgcHVibGljIG1hcERpdiE6IEVsZW1lbnRSZWY7XG4gIGVuYWJsZVByb2dyZXNzOiBib29sZWFuID0gdHJ1ZTtcbiAgcHVibGljIGRlc3Ryb3llciQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gIGNvbnN0cnVjdG9yKCBwdWJsaWMgY29vbG1hcFNlcnZpY2U6IENvb2xtYXBTZXJ2aWNlICkgeyB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuY29vbG1hcFNlcnZpY2UucmVpbnRpYXRlY29vbG1hcC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llciQpKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gICAgICB0aGlzLmVuYWJsZVByb2dyZXNzID0gdHJ1ZTtcbiAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgdGhpcy5jb29sbWFwU2VydmljZS5pbml0aWF0ZU1hcEZvckFkZFJvdXRlKHRoaXMubWFwRGl2Lm5hdGl2ZUVsZW1lbnQpLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgIHRoaXMuZW5hYmxlUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveWVyJC5uZXh0KHRydWUpO1xuICAgIHRoaXMuZGVzdHJveWVyJC51bnN1YnNjcmliZSgpO1xuICB9XG59XG4iLCI8ZGl2PlxuICA8bWF0LXByb2dyZXNzLWJhciAqbmdJZj1cImVuYWJsZVByb2dyZXNzXCIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIj48L21hdC1wcm9ncmVzcy1iYXI+XG4gIDxkaXYgI21hcCBjbGFzcz1cImNvb2xtYXBcIiBzdHlsZT1cImhlaWdodDogMTAwdmg7XCI+PC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -1,151 +0,0 @@
1
- import { Component, EventEmitter, Output, Input, Inject } from '@angular/core';
2
- import { FormControl, FormGroup } from '@angular/forms';
3
- import { map, startWith } from 'rxjs';
4
- import { Subject, takeUntil } from 'rxjs';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@aggdirect/coolmap-services";
7
- import * as i2 from "@angular/common";
8
- import * as i3 from "@angular/forms";
9
- import * as i4 from "@angular/material/input";
10
- import * as i5 from "@angular/material/form-field";
11
- import * as i6 from "@angular/material/core";
12
- import * as i7 from "@angular/material/icon";
13
- import * as i8 from "@angular/material/autocomplete";
14
- import * as i9 from "@angular/material/chips";
15
- import * as i10 from "@angular/material/button";
16
- import * as i11 from "../../../route-jobcode-list/route-jobcode-list.component";
17
- export class AddRouteNavComponent {
18
- utils;
19
- config;
20
- filterForm = new FormGroup({ search: new FormControl() });
21
- filteredOptions;
22
- filters = [];
23
- loaderVal = false;
24
- routes = [];
25
- changeNav = new EventEmitter();
26
- navValue = '';
27
- addemit = new EventEmitter();
28
- updateRouteList = false;
29
- customerRepoDetails;
30
- destroyer$ = new Subject();
31
- preventListUpdate = false;
32
- unitList;
33
- materialsList;
34
- constructor(utils, config) {
35
- this.utils = utils;
36
- this.config = config;
37
- this.filteredOptions = this.filterForm.get('search')?.valueChanges.pipe(startWith(''), map(value => this.utils.filter(value, this.filters)));
38
- }
39
- showAddForm() { this.changeNav.emit('addForm'); this.addemit.emit(''); }
40
- filterSearch(e) {
41
- this.changeNav.emit({ type: 'Addroute' });
42
- this.preventListUpdate = true;
43
- this.filterForm.controls.search.setValue(null);
44
- this.filters = [{ name: e.source.value.label, type: e.source.value.type, value: e.source.value }];
45
- }
46
- removeFromFilter(filter) {
47
- this.changeNav.emit({ type: 'Addroute' });
48
- const index = this.filters.indexOf(filter);
49
- if (index >= 0) {
50
- this.filters = [];
51
- }
52
- }
53
- ngAfterViewInit() {
54
- this.checkAndCallRouteList();
55
- }
56
- ngOnChanges(changes) {
57
- if (changes['updateRouteList'] && changes['updateRouteList']['currentValue'])
58
- this.checkAndCallRouteList();
59
- if (changes['navValue'] && (changes['navValue']['previousValue'] === 'addForm') && !this.preventListUpdate)
60
- this.checkAndCallRouteList();
61
- }
62
- getRoute(event) { if (event['type'] === 'editroute') {
63
- this.addemit.emit(event);
64
- } }
65
- checkAndCallRouteList() {
66
- if (this.config.repository === 'customer') {
67
- this.utils.fetchUnitsList().then((res) => {
68
- this.unitList = res;
69
- this.utils.fetchMaterialsListForCustomer().then((res) => {
70
- this.materialsList = res;
71
- this.getRouteListForCustomer();
72
- });
73
- });
74
- }
75
- else {
76
- this.getRouteListForCoolMap();
77
- }
78
- }
79
- getUnitName(data) {
80
- let unitName = '';
81
- this.unitList.map((res) => {
82
- if (res.id === data.unit_id) {
83
- unitName = res.type;
84
- }
85
- });
86
- return unitName;
87
- }
88
- getMaterialName(data) {
89
- let materialName = '';
90
- this.materialsList.map((res) => {
91
- if (res.sub_material_id === data.materials_id) {
92
- materialName = res.label;
93
- }
94
- });
95
- return materialName;
96
- }
97
- getRouteListForCoolMap() {
98
- this.utils.getData('routes/all').pipe(takeUntil(this.destroyer$)).subscribe((res) => {
99
- if (res) {
100
- this.filters = [];
101
- this.routes = res['data'];
102
- this.preventListUpdate = false;
103
- this.utils.clearOptions();
104
- this.routes.forEach((ele) => { this.utils.makeOptions(ele); });
105
- }
106
- });
107
- }
108
- getRouteListForCustomer() {
109
- const dataset = {
110
- customer_id: this.customerRepoDetails.customer.id
111
- };
112
- this.utils.postdata('routes/all', dataset).pipe(takeUntil(this.destroyer$)).subscribe((res) => {
113
- if (res) {
114
- this.filters = [];
115
- this.routes = res['data'];
116
- this.preventListUpdate = false;
117
- this.utils.clearOptions();
118
- this.routes.map((ele) => {
119
- ele.unit = this.getUnitName(ele);
120
- ele.material = this.getMaterialName(ele).split('|')[0].trim();
121
- this.utils.makeOptions(ele);
122
- });
123
- }
124
- });
125
- }
126
- resetSearch() { this.changeNav.emit('Addroute'); }
127
- ngOnDestroy() {
128
- this.destroyer$.next(true);
129
- this.destroyer$.unsubscribe();
130
- }
131
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: AddRouteNavComponent, deps: [{ token: i1.UtilsService }, { token: 'memberData' }], target: i0.ɵɵFactoryTarget.Component });
132
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.1", type: AddRouteNavComponent, selector: "app-add-route-nav", inputs: { navValue: "navValue", updateRouteList: "updateRouteList", customerRepoDetails: "customerRepoDetails" }, outputs: { changeNav: "changeNav", addemit: "addemit" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"nav_body\">\n <div class=\"logo\">\n <img src=\"assets/images/logo.png\" alt=\"logo\" />\n </div>\n <div class=\"heading m-20\">\n <h1>View Route</h1>\n <button mat-raised-button (click)=\"showAddForm()\">\n <mat-icon>add_circle_outline</mat-icon> Add route\n </button>\n </div>\n\n <div class=\"search-panel\">\n <div class=\"w-100\">\n <form [formGroup]=\"filterForm\">\n <mat-form-field class=\"full-width\" [class.disabled]=\"loaderVal\">\n <input matInput [matChipInputFor]=\"chipList\" formControlName=\"search\" [matAutocomplete]=\"auto\"\n [disabled]=\"loaderVal\" placeholder=\"Search\">\n <mat-icon matSuffix *ngIf=\"!utils.conveySearchIcon(filterForm.value.search)\">search</mat-icon>\n <button matSuffix mat-icon-button aria-label=\"Clear\" *ngIf=\"utils.conveySearchIcon(filterForm.value.search)\"\n (click)=\"filterForm.reset()\">\n <mat-icon>close</mat-icon>\n </button>\n <mat-autocomplete autoActiveFirstOption #auto=\"matAutocomplete\" class=\"whole_width\">\n <mat-option *ngFor=\"let option of filteredOptions | async\" (onSelectionChange)=\"filterSearch($event)\"\n [value]=\"option\">\n {{option.type | titlecase }}: {{option['label']}}\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n </form>\n <div class=\"chip-list\">\n <mat-chip-grid #chipList aria-label=\"Filter selection\">\n @for (filter of filters; track filter) {\n <mat-chip-row class=\"chip-grid\" (removed)=\"removeFromFilter(filter)\">\n {{filter.type | titlecase }}: {{filter.name}}\n <button matChipRemove>\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n </mat-chip-grid>\n </div>\n </div>\n </div>\n <app-route-jobcode-list [type]=\"'addroute'\" [currentNav]=\"navValue\" [searchTerm]=\"filters\" [data]=\"routes\" [loader]=\"loaderVal\" (emitroute)=\"getRoute($event)\"></app-route-jobcode-list>\n</div>\n", styles: [".chip-grid{width:auto;height:auto}:host ::ng-deep .mdc-evolution-chip-set__chips{max-width:100%}:host ::ng-deep .mat-mdc-standard-chip .mdc-evolution-chip__cell--primary,:host ::ng-deep .mat-mdc-standard-chip .mdc-evolution-chip__action--primary,:host ::ng-deep .mat-mdc-standard-chip .mat-mdc-chip-action-label{overflow:hidden}:host ::ng-deep .mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--trailing{padding:auto}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i8.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i8.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i9.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i9.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i9.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i9.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "component", type: i10.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i10.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i11.RouteJobCodeListComponent, selector: "app-route-jobcode-list", inputs: ["loader", "type", "data", "currentNav", "searchTerm", "clearListSeletion"], outputs: ["emitroute", "showAllRoute", "clearJobDetailsFromList"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TitleCasePipe, name: "titlecase" }] });
133
- }
134
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: AddRouteNavComponent, decorators: [{
135
- type: Component,
136
- args: [{ selector: 'app-add-route-nav', template: "<div class=\"nav_body\">\n <div class=\"logo\">\n <img src=\"assets/images/logo.png\" alt=\"logo\" />\n </div>\n <div class=\"heading m-20\">\n <h1>View Route</h1>\n <button mat-raised-button (click)=\"showAddForm()\">\n <mat-icon>add_circle_outline</mat-icon> Add route\n </button>\n </div>\n\n <div class=\"search-panel\">\n <div class=\"w-100\">\n <form [formGroup]=\"filterForm\">\n <mat-form-field class=\"full-width\" [class.disabled]=\"loaderVal\">\n <input matInput [matChipInputFor]=\"chipList\" formControlName=\"search\" [matAutocomplete]=\"auto\"\n [disabled]=\"loaderVal\" placeholder=\"Search\">\n <mat-icon matSuffix *ngIf=\"!utils.conveySearchIcon(filterForm.value.search)\">search</mat-icon>\n <button matSuffix mat-icon-button aria-label=\"Clear\" *ngIf=\"utils.conveySearchIcon(filterForm.value.search)\"\n (click)=\"filterForm.reset()\">\n <mat-icon>close</mat-icon>\n </button>\n <mat-autocomplete autoActiveFirstOption #auto=\"matAutocomplete\" class=\"whole_width\">\n <mat-option *ngFor=\"let option of filteredOptions | async\" (onSelectionChange)=\"filterSearch($event)\"\n [value]=\"option\">\n {{option.type | titlecase }}: {{option['label']}}\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n </form>\n <div class=\"chip-list\">\n <mat-chip-grid #chipList aria-label=\"Filter selection\">\n @for (filter of filters; track filter) {\n <mat-chip-row class=\"chip-grid\" (removed)=\"removeFromFilter(filter)\">\n {{filter.type | titlecase }}: {{filter.name}}\n <button matChipRemove>\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n </mat-chip-grid>\n </div>\n </div>\n </div>\n <app-route-jobcode-list [type]=\"'addroute'\" [currentNav]=\"navValue\" [searchTerm]=\"filters\" [data]=\"routes\" [loader]=\"loaderVal\" (emitroute)=\"getRoute($event)\"></app-route-jobcode-list>\n</div>\n", styles: [".chip-grid{width:auto;height:auto}:host ::ng-deep .mdc-evolution-chip-set__chips{max-width:100%}:host ::ng-deep .mat-mdc-standard-chip .mdc-evolution-chip__cell--primary,:host ::ng-deep .mat-mdc-standard-chip .mdc-evolution-chip__action--primary,:host ::ng-deep .mat-mdc-standard-chip .mat-mdc-chip-action-label{overflow:hidden}:host ::ng-deep .mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--trailing{padding:auto}\n"] }]
137
- }], ctorParameters: () => [{ type: i1.UtilsService }, { type: i1.CoolmapConfigModel, decorators: [{
138
- type: Inject,
139
- args: ['memberData']
140
- }] }], propDecorators: { changeNav: [{
141
- type: Output
142
- }], navValue: [{
143
- type: Input
144
- }], addemit: [{
145
- type: Output
146
- }], updateRouteList: [{
147
- type: Input
148
- }], customerRepoDetails: [{
149
- type: Input
150
- }] } });
151
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXJvdXRlLW5hdi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb29sbWFwL3NyYy9saWIvY29tcG9uZW50L25hdi9sYXlvdXQvYWRkLXJvdXRlLW5hdi9hZGQtcm91dGUtbmF2LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nvb2xtYXAvc3JjL2xpYi9jb21wb25lbnQvbmF2L2xheW91dC9hZGQtcm91dGUtbmF2L2FkZC1yb3V0ZS1uYXYuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBNEIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEQsT0FBTyxFQUFFLEdBQUcsRUFBYyxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFPbEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFRMUMsTUFBTSxPQUFPLG9CQUFvQjtJQWdCWjtJQUNhO0lBaEJoQyxVQUFVLEdBQUcsSUFBSSxTQUFTLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDMUQsZUFBZSxDQUFpQztJQUNoRCxPQUFPLEdBQWEsRUFBRSxDQUFDO0lBQ3ZCLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDbEIsTUFBTSxHQUFZLEVBQUUsQ0FBQztJQUNKLFNBQVMsR0FBRyxJQUFJLFlBQVksRUFBZ0IsQ0FBQztJQUM5QyxRQUFRLEdBQVcsRUFBRSxDQUFDO0lBQ3JCLE9BQU8sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQzlCLGVBQWUsR0FBWSxLQUFL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QUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBVSxFQUFFLEVBQUU7b0JBQzdCLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDakMsR0FBRyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDOUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUE7Z0JBQzdCLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELFdBQVcsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFDakQsV0FBVztRQUNULElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDaEMsQ0FBQzt1R0E5R1Usb0JBQW9CLDhDQWlCckIsWUFBWTsyRkFqQlgsb0JBQW9CLHlQQ2xCakMsbW1FQThDQTs7MkZENUJhLG9CQUFvQjtrQkFOaEMsU0FBUzsrQkFDRSxtQkFBbUI7OzBCQXNCMUIsTUFBTTsyQkFBQyxZQUFZO3lDQVhMLFNBQVM7c0JBQXpCLE1BQU07Z0JBQ1MsUUFBUTtzQkFBdkIsS0FBSztnQkFDVyxPQUFPO3NCQUF2QixNQUFNO2dCQUNTLGVBQWU7c0JBQTlCLEtBQUs7Z0JBQ1UsbUJBQW1CO3NCQUFsQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgSW5wdXQsIFNpbXBsZUNoYW5nZXMsIE9uRGVzdHJveSwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29vbG1hcENvbmZpZ01vZGVsLCBDdXN0b21lclJlcG9EZXRhaWxzTW9kZWwsIFJvdXRlLCBVdGlsc1NlcnZpY2UgfSBmcm9tICdAYWdnZGlyZWN0L2Nvb2xtYXAtc2VydmljZXMnO1xuaW1wb3J0IHsgbWFwLCBPYnNlcnZhYmxlLCBzdGFydFdpdGggfSBmcm9tICdyeGpzJztcbmludGVyZmFjZSBGaWx0ZXIge1xuICBuYW1lPzogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIHZhbHVlOiBhbnk7XG4gIGxhYmVsPzogc3RyaW5nO1xufVxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1hZGQtcm91dGUtbmF2JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkZC1yb3V0ZS1uYXYuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hZGQtcm91dGUtbmF2LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5cbmV4cG9ydCBjbGFzcyBBZGRSb3V0ZU5hdkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIGZpbHRlckZvcm0gPSBuZXcgRm9ybUdyb3VwKHsgc2VhcmNoOiBuZXcgRm9ybUNvbnRyb2woKSB9KTtcbiAgZmlsdGVyZWRPcHRpb25zITogT2JzZXJ2YWJsZTxhbnlbXT4gfCB1bmRlZmluZWQ7XG4gIGZpbHRlcnM6IEZpbHRlcltdID0gW107XG4gIGxvYWRlclZhbCA9IGZhbHNlO1xuICByb3V0ZXM6IFJvdXRlW10gPSBbXTtcbiAgQE91dHB1dCgpIHB1YmxpYyBjaGFuZ2VOYXYgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZyB8IGFueT4oKTtcbiAgQElucHV0KCkgcHVibGljIG5hdlZhbHVlOiBzdHJpbmcgPSAnJztcbiAgQE91dHB1dCgpIHB1YmxpYyBhZGRlbWl0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBASW5wdXQoKSBwdWJsaWMgdXBkYXRlUm91dGVMaXN0OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21lclJlcG9EZXRhaWxzITogQ3VzdG9tZXJSZXBvRGV0YWlsc01vZGVsO1xuXG4gIHB1YmxpYyBkZXN0cm95ZXIkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHJldmVudExpc3RVcGRhdGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdW5pdExpc3Q6IGFueTtcbiAgbWF0ZXJpYWxzTGlzdDogYW55O1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdXRpbHM6IFV0aWxzU2VydmljZSxcbiAgICBASW5qZWN0KCdtZW1iZXJEYXRhJykgcHJpdmF0ZSBjb25maWc6IENvb2xtYXBDb25maWdNb2RlbCkge1xuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5maWx0ZXJGb3JtLmdldCgnc2VhcmNoJyk/LnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCgnJyksXG4gICAgICBtYXAodmFsdWUgPT4gdGhpcy51dGlscy5maWx0ZXIodmFsdWUsIHRoaXMuZmlsdGVycykpKTtcbiAgfVxuXG4gIHNob3dBZGRGb3JtKCkgeyB0aGlzLmNoYW5nZU5hdi5lbWl0KCdhZGRGb3JtJyk7IHRoaXMuYWRkZW1pdC5lbWl0KCcnKSB9XG4gIGZpbHRlclNlYXJjaChlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmNoYW5nZU5hdi5lbWl0KHsgdHlwZTogJ0FkZHJvdXRlJyB9KTtcbiAgICB0aGlzLnByZXZlbnRMaXN0VXBkYXRlID0gdHJ1ZTtcbiAgICB0aGlzLmZpbHRlckZvcm0uY29udHJvbHMuc2VhcmNoLnNldFZhbHVlKG51bGwpO1xuICAgIHRoaXMuZmlsdGVycyA9IFt7IG5hbWU6IGUuc291cmNlLnZhbHVlLmxhYmVsLCB0eXBlOiBlLnNvdXJjZS52YWx1ZS50eXBlLCB2YWx1ZTogZS5zb3VyY2UudmFsdWUgfV1cbiAgfVxuICByZW1vdmVGcm9tRmlsdGVyKGZpbHRlcjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5jaGFuZ2VOYXYuZW1pdCh7IHR5cGU6ICdBZGRyb3V0ZScgfSk7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmZpbHRlcnMuaW5kZXhPZihmaWx0ZXIpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7IHRoaXMuZmlsdGVycyA9IFtdIH1cbiAgfVxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jaGVja0FuZENhbGxSb3V0ZUxpc3QoKTtcbiAgfVxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXNbJ3VwZGF0ZVJvdXRlTGlzdCddICYmIGNoYW5nZXNbJ3VwZGF0ZVJvdXRlTGlzdCddWydjdXJyZW50VmFsdWUnXSkgdGhpcy5jaGVja0FuZENhbGxSb3V0ZUxpc3QoKTtcbiAgICBpZiAoY2hhbmdlc1snbmF2VmFsdWUnXSAmJiAoY2hhbmdlc1snbmF2VmFsdWUnXVsncHJldmlvdXNWYWx1ZSddID09PSAnYWRkRm9ybScpICYmICF0aGlzLnByZXZlbnRMaXN0VXBkYXRlKSB0aGlzLmNoZWNrQW5kQ2FsbFJvdXRlTGlzdCgpO1xuICB9XG4gIGdldFJvdXRlKGV2ZW50OiBSb3V0ZSkgeyBpZiAoZXZlbnRbJ3R5cGUnXSA9PT0gJ2VkaXRyb3V0ZScpIHsgdGhpcy5hZGRlbWl0LmVtaXQoZXZlbnQpIH0gfVxuXG4gIGNoZWNrQW5kQ2FsbFJvdXRlTGlzdCgpIHtcbiAgICBpZiAodGhpcy5jb25maWcucmVwb3NpdG9yeSA9PT0gJ2N1c3RvbWVyJykge1xuICAgICAgdGhpcy51dGlscy5mZXRjaFVuaXRzTGlzdCgpLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICB0aGlzLnVuaXRMaXN0ID0gcmVzO1xuICAgICAgICB0aGlzLnV0aWxzLmZldGNoTWF0ZXJpYWxzTGlzdEZvckN1c3RvbWVyKCkudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgdGhpcy5tYXRlcmlhbHNMaXN0ID0gcmVzO1xuICAgICAgICAgIHRoaXMuZ2V0Um91dGVMaXN0Rm9yQ3VzdG9tZXIoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5nZXRSb3V0ZUxpc3RGb3JDb29sTWFwKClcbiAgICB9XG4gIH1cbiAgZ2V0VW5pdE5hbWUoZGF0YSk6IHN0cmluZyB7XG4gICAgbGV0IHVuaXROYW1lID0gJyc7XG4gICAgdGhpcy51bml0TGlzdC5tYXAoKHJlcykgPT4ge1xuICAgICAgaWYgKHJlcy5pZCA9PT0gZGF0YS51bml0X2lkKSB7XG4gICAgICAgIHVuaXROYW1lID0gcmVzLnR5cGVcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiB1bml0TmFtZTtcbiAgfVxuXG4gIGdldE1hdGVyaWFsTmFtZShkYXRhKTogc3RyaW5nIHtcbiAgICBsZXQgbWF0ZXJpYWxOYW1lID0gJyc7XG4gICAgdGhpcy5tYXRlcmlhbHNMaXN0Lm1hcCgocmVzKSA9PiB7ICAgICAgXG4gICAgICBpZiAocmVzLnN1Yl9tYXRlcmlhbF9pZCA9PT0gZGF0YS5tYXRlcmlhbHNfaWQpIHtcbiAgICAgICAgbWF0ZXJpYWxOYW1lID0gcmVzLmxhYmVsXG4gICAgICB9XG4gICAgfSkgICAgXG4gICAgcmV0dXJuIG1hdGVyaWFsTmFtZTtcbiAgfVxuXG4gIGdldFJvdXRlTGlzdEZvckNvb2xNYXAoKSB7XG4gICAgdGhpcy51dGlscy5nZXREYXRhKCdyb3V0ZXMvYWxsJykucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZXIkKSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlcykge1xuICAgICAgICB0aGlzLmZpbHRlcnMgPSBbXTtcbiAgICAgICAgdGhpcy5yb3V0ZXMgPSByZXNbJ2RhdGEnXVxuICAgICAgICB0aGlzLnByZXZlbnRMaXN0VXBkYXRlID0gZmFsc2U7XG4gICAgICAgIHRoaXMudXRpbHMuY2xlYXJPcHRpb25zKCk7XG4gICAgICAgIHRoaXMucm91dGVzLmZvckVhY2goKGVsZTogUm91dGUpID0+IHsgdGhpcy51dGlscy5tYWtlT3B0aW9ucyhlbGUpIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0Um91dGVMaXN0Rm9yQ3VzdG9tZXIoKSB7XG4gICAgY29uc3QgZGF0YXNldCA9IHtcbiAgICAgIGN1c3RvbWVyX2lkOiB0aGlzLmN1c3RvbWVyUmVwb0RldGFpbHMuY3VzdG9tZXIuaWRcbiAgICB9XG4gICAgdGhpcy51dGlscy5wb3N0ZGF0YSgncm91dGVzL2FsbCcsIGRhdGFzZXQpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVyJCkpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJzID0gW107XG4gICAgICAgIHRoaXMucm91dGVzID0gcmVzWydkYXRhJ11cbiAgICAgICAgdGhpcy5wcmV2ZW50TGlzdFVwZGF0ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnV0aWxzLmNsZWFyT3B0aW9ucygpO1xuICAgICAgICB0aGlzLnJvdXRlcy5tYXAoKGVsZTogUm91dGUpID0+IHtcbiAgICAgICAgICBlbGUudW5pdCA9IHRoaXMuZ2V0VW5pdE5hbWUoZWxlKTtcbiAgICAgICAgICBlbGUubWF0ZXJpYWwgPSB0aGlzLmdldE1hdGVyaWFsTmFtZShlbGUpLnNwbGl0KCd8JylbMF0udHJpbSgpO1xuICAgICAgICAgIHRoaXMudXRpbHMubWFrZU9wdGlvbnMoZWxlKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXNldFNlYXJjaCgpIHsgdGhpcy5jaGFuZ2VOYXYuZW1pdCgnQWRkcm91dGUnKSB9XG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveWVyJC5uZXh0KHRydWUpO1xuICAgIHRoaXMuZGVzdHJveWVyJC51bnN1YnNjcmliZSgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibmF2X2JvZHlcIj5cbiAgPGRpdiBjbGFzcz1cImxvZ29cIj5cbiAgICA8aW1nIHNyYz1cImFzc2V0cy9pbWFnZXMvbG9nby5wbmdcIiBhbHQ9XCJsb2dvXCIgLz5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJoZWFkaW5nIG0tMjBcIj5cbiAgICA8aDE+VmlldyBSb3V0ZTwvaDE+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiAoY2xpY2spPVwic2hvd0FkZEZvcm0oKVwiPlxuICAgICAgPG1hdC1pY29uPmFkZF9jaXJjbGVfb3V0bGluZTwvbWF0LWljb24+IEFkZCByb3V0ZVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwic2VhcmNoLXBhbmVsXCI+XG4gICAgPGRpdiBjbGFzcz1cInctMTAwXCI+XG4gICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZpbHRlckZvcm1cIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZnVsbC13aWR0aFwiIFtjbGFzcy5kaXNhYmxlZF09XCJsb2FkZXJWYWxcIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW21hdENoaXBJbnB1dEZvcl09XCJjaGlwTGlzdFwiIGZvcm1Db250cm9sTmFtZT1cInNlYXJjaFwiIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwibG9hZGVyVmFsXCIgcGxhY2Vob2xkZXI9XCJTZWFyY2hcIj5cbiAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4ICpuZ0lmPVwiIXV0aWxzLmNvbnZleVNlYXJjaEljb24oZmlsdGVyRm9ybS52YWx1ZS5zZWFyY2gpXCI+c2VhcmNoPC9tYXQtaWNvbj5cbiAgICAgICAgICA8YnV0dG9uIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIkNsZWFyXCIgKm5nSWY9XCJ1dGlscy5jb252ZXlTZWFyY2hJY29uKGZpbHRlckZvcm0udmFsdWUuc2VhcmNoKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZmlsdGVyRm9ybS5yZXNldCgpXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlIGF1dG9BY3RpdmVGaXJzdE9wdGlvbiAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiIGNsYXNzPVwid2hvbGVfd2lkdGhcIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZmlsdGVyZWRPcHRpb25zIHwgYXN5bmNcIiAob25TZWxlY3Rpb25DaGFuZ2UpPVwiZmlsdGVyU2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uXCI+XG4gICAgICAgICAgICAgIHt7b3B0aW9uLnR5cGUgfCB0aXRsZWNhc2UgfX06IHt7b3B0aW9uWydsYWJlbCddfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Zvcm0+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2hpcC1saXN0XCI+XG4gICAgICAgIDxtYXQtY2hpcC1ncmlkICNjaGlwTGlzdCBhcmlhLWxhYmVsPVwiRmlsdGVyIHNlbGVjdGlvblwiPlxuICAgICAgICAgIEBmb3IgKGZpbHRlciBvZiBmaWx0ZXJzOyB0cmFjayBmaWx0ZXIpIHtcbiAgICAgICAgICAgIDxtYXQtY2hpcC1yb3cgY2xhc3M9XCJjaGlwLWdyaWRcIiAocmVtb3ZlZCk9XCJyZW1vdmVGcm9tRmlsdGVyKGZpbHRlcilcIj5cbiAgICAgICAgICAgICAge3tmaWx0ZXIudHlwZSB8IHRpdGxlY2FzZSB9fToge3tmaWx0ZXIubmFtZX19XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0Q2hpcFJlbW92ZT5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2FuY2VsPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L21hdC1jaGlwLXJvdz5cbiAgICAgICAgICB9XG4gICAgICAgIDwvbWF0LWNoaXAtZ3JpZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGFwcC1yb3V0ZS1qb2Jjb2RlLWxpc3QgW3R5cGVdPVwiJ2FkZHJvdXRlJ1wiIFtjdXJyZW50TmF2XT1cIm5hdlZhbHVlXCIgW3NlYXJjaFRlcm1dPVwiZmlsdGVyc1wiIFtkYXRhXT1cInJvdXRlc1wiIFtsb2FkZXJdPVwibG9hZGVyVmFsXCIgKGVtaXRyb3V0ZSk9XCJnZXRSb3V0ZSgkZXZlbnQpXCI+PC9hcHAtcm91dGUtam9iY29kZS1saXN0PlxuPC9kaXY+XG4iXX0=