@aggdirect/coolmap 1.0.4 → 1.0.5

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 (23) hide show
  1. package/esm2020/lib/component/add-route/add-route.component.mjs +310 -0
  2. package/esm2020/lib/component/job-code/job-code.component.mjs +1 -1
  3. package/esm2020/lib/component/nav/layout/add-route-nav/add-route-nav.component.mjs +1 -1
  4. package/esm2020/lib/component/nav/layout/job-code-nav/job-code-nav.component.mjs +1 -1
  5. package/esm2020/lib/component/route-jobcode-list/route-jobcode-list.component.mjs +1 -1
  6. package/esm2020/lib/component/route-jobcode-list/sms-card-details-overview/sms-card-details-overview.component.mjs +1 -1
  7. package/esm2020/lib/component/shared/job-route-list/job-route-list.component.mjs +1 -1
  8. package/esm2020/lib/component/shared/jobcode-overview/jobcode-overview.component.mjs +1 -1
  9. package/esm2020/lib/component/shared/jobcode-status/jobcode-status.component.mjs +1 -1
  10. package/esm2020/lib/coolmap.module.mjs +13 -6
  11. package/esm2020/public-api.mjs +2 -1
  12. package/fesm2015/aggdirect-coolmap.mjs +316 -7
  13. package/fesm2015/aggdirect-coolmap.mjs.map +1 -1
  14. package/fesm2020/aggdirect-coolmap.mjs +306 -7
  15. package/fesm2020/aggdirect-coolmap.mjs.map +1 -1
  16. package/lib/component/add-route/add-route.component.d.ts +62 -0
  17. package/lib/component/nav/layout/add-route-nav/add-route-nav.component.d.ts +2 -1
  18. package/lib/component/nav/layout/job-code-nav/job-code-nav.component.d.ts +2 -1
  19. package/lib/component/route-jobcode-list/route-jobcode-list.component.d.ts +2 -2
  20. package/lib/component/shared/job-route-list/job-route-list.component.d.ts +1 -1
  21. package/lib/coolmap.module.d.ts +21 -20
  22. package/package.json +1 -1
  23. package/public-api.d.ts +1 -0
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Component, ViewChild, EventEmitter, Output, Input, Inject, NgModule } from '@angular/core';
3
- import { Subject, takeUntil, startWith, map } from 'rxjs';
3
+ import { Subject, takeUntil, startWith, map, fromEvent, distinctUntilChanged, debounceTime } from 'rxjs';
4
4
  import * as i1 from 'coolmap-services';
5
5
  import { DriversmsCardKey, DriverSmsCardEnum, JobCodeOverviewData, JobCodeOverviewEnum } from 'coolmap-services';
6
6
  import * as i2 from '@angular/common';
@@ -17,6 +17,7 @@ import * as i3$1 from '@angular/forms';
17
17
  import { FormControl, Validators, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';
18
18
  import * as i5 from '@angular/material/input';
19
19
  import { MatInputModule } from '@angular/material/input';
20
+ import * as i8$2 from '@angular/material/select';
20
21
  import { MatSelectModule } from '@angular/material/select';
21
22
  import * as i7 from '@angular/material/icon';
22
23
  import { MatIconModule } from '@angular/material/icon';
@@ -890,6 +891,298 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
890
891
  args: [MAT_DIALOG_DATA]
891
892
  }] }]; } });
892
893
 
894
+ class AddRouteComponent {
895
+ constructor(coolMapService, utils, dialog) {
896
+ this.coolMapService = coolMapService;
897
+ this.utils = utils;
898
+ this.dialog = dialog;
899
+ this.changeNav = new EventEmitter();
900
+ this.updateRouteList = new EventEmitter();
901
+ this.pickupOptions = [];
902
+ this.deliveryOptions = [];
903
+ this.requestParmsForRouteDetails = { pickup_lat_lng: '', delivery_lat_lng: '' };
904
+ this.customersList = [];
905
+ this.unitsList = [];
906
+ this.materialsList = [];
907
+ this.preventSave = false;
908
+ this.preventInitialSave = false;
909
+ this.destroyer$ = new Subject();
910
+ this.enablePopUp = false;
911
+ this.prevantPopupClose = false;
912
+ this.enableForm = false;
913
+ this.fetchCustomersList();
914
+ this.fetchUnitsList();
915
+ this.fetchMaterialsList();
916
+ this.formInit();
917
+ this.utils.getrouteDetailsUtility.subscribe(res => {
918
+ if (res) {
919
+ if (res['event'] !== 'click' && !this.prevantPopupClose) {
920
+ this.enablePopUp = res['event'];
921
+ }
922
+ else if (this.enablePopUp && !this.prevantPopupClose) {
923
+ this.prevantPopupClose = true;
924
+ }
925
+ if (res['event'] !== 'click' && !res['event'] && this.prevantPopupClose) {
926
+ this.popupDetails = this.utils.getdictValue('route-detailsv2');
927
+ }
928
+ else {
929
+ this.popupDetails = res['route'];
930
+ }
931
+ this.popupDetails['created_at'] = this.utils.getDateFormat(new Date(this.popupDetails['created_at']), '/');
932
+ }
933
+ });
934
+ }
935
+ filterCustomerList() {
936
+ this.customersList$ = this.addRouteForm.controls['customer_name'].valueChanges.pipe(startWith(''), map(value => this._filter(value || '')));
937
+ }
938
+ _filter(value) {
939
+ const filterValue = value.toLowerCase();
940
+ return this.customersList.filter((option) => option['customer_name'].toLowerCase().includes(filterValue));
941
+ }
942
+ ngOnChanges(changes) {
943
+ if (changes['routeData'] && !changes['routeData']['currentValue'])
944
+ this.inIt(null);
945
+ }
946
+ openDialog() {
947
+ const dialogRef = this.dialog.open(DialogComponent, {
948
+ data: { body: 'Are you sure you want to delete this route?' },
949
+ });
950
+ dialogRef.afterClosed().subscribe(res => { if (res) {
951
+ this.deleteRoute();
952
+ } });
953
+ }
954
+ editEvent() {
955
+ this.prevantPopupClose = false;
956
+ this.enableForm = true;
957
+ this.enablePopUp = false;
958
+ this.popupDetails['prevent'] = false;
959
+ this.utils.removeMapEntity.next(this.popupDetails);
960
+ this.inIt(this.popupDetails);
961
+ }
962
+ inIt(changes) {
963
+ if (changes) {
964
+ if (!changes['prevent']) {
965
+ this.preventSave = false;
966
+ this.formControlValue();
967
+ this.patchFormValue(changes);
968
+ this.checkAndFetchRouteInformation(true);
969
+ }
970
+ }
971
+ if (!changes) {
972
+ this.enableForm = true;
973
+ this.preventSave = true;
974
+ this.patchFormValue();
975
+ this.checkAndFetchRouteInformation();
976
+ }
977
+ }
978
+ ngOnInit() {
979
+ this.formControlValue();
980
+ }
981
+ ngAfterViewInit() {
982
+ fromEvent(this.filterPickup.nativeElement, 'keyup').pipe(distinctUntilChanged(), debounceTime(150)).pipe(takeUntil(this.destroyer$)).subscribe(() => {
983
+ this.utils.fetchAutoCompleteLocations(this.filterPickup.nativeElement.value).pipe(takeUntil(this.destroyer$)).subscribe((res) => {
984
+ this.pickupOptions = res.features;
985
+ });
986
+ });
987
+ fromEvent(this.filterDelivery.nativeElement, 'keyup').pipe(distinctUntilChanged(), debounceTime(150)).pipe(takeUntil(this.destroyer$)).subscribe(() => {
988
+ this.utils.fetchAutoCompleteLocations(this.filterDelivery.nativeElement.value).pipe(takeUntil(this.destroyer$)).subscribe((res) => {
989
+ this.deliveryOptions = res.features;
990
+ });
991
+ });
992
+ }
993
+ formControlValue() {
994
+ this.addRouteForm.controls['pickup_location']?.valueChanges.pipe(takeUntil(this.destroyer$)).subscribe((res) => {
995
+ if (this.addRouteForm.value.pickup_location && res !== this.addRouteForm.value.pickup_location) {
996
+ this.addRouteForm.patchValue({
997
+ pickup_lat_lng: '',
998
+ });
999
+ this.addRouteForm.controls['pickup_lat_lng'].markAsTouched();
1000
+ }
1001
+ });
1002
+ this.addRouteForm.controls['delivery_location']?.valueChanges.pipe(takeUntil(this.destroyer$)).subscribe((res) => {
1003
+ if (this.addRouteForm.value.delivery_location && res !== this.addRouteForm.value.delivery_location) {
1004
+ this.addRouteForm.patchValue({
1005
+ delivery_lat_lng: '',
1006
+ });
1007
+ this.addRouteForm.controls['delivery_lat_lng'].markAsTouched();
1008
+ }
1009
+ });
1010
+ }
1011
+ formInit() {
1012
+ this.addRouteForm = new FormGroup({
1013
+ route_name: new FormControl('', [Validators.required]),
1014
+ customer_name: new FormControl({ value: '', disabled: true }, [Validators.required]),
1015
+ materials_id: new FormControl('', [Validators.required]),
1016
+ unit_id: new FormControl('', [Validators.required]),
1017
+ path: new FormControl('', [Validators.required]),
1018
+ pickup_location: new FormControl('', [Validators.required]),
1019
+ pickup_lat_lng: new FormControl('', [Validators.required]),
1020
+ delivery_location: new FormControl('', [Validators.required]),
1021
+ delivery_lat_lng: new FormControl('', [Validators.required]),
1022
+ estimated_distance: new FormControl('', [Validators.required]),
1023
+ estimated_time: new FormControl('', [Validators.required]),
1024
+ note: new FormControl('', [Validators.maxLength(2048)]),
1025
+ });
1026
+ }
1027
+ patchFormValue(data) {
1028
+ this.addRouteForm.reset();
1029
+ this.addRouteForm.patchValue(data);
1030
+ this.routeId = data?.route_id;
1031
+ this.routeDetails = data ? { pickup_location: data.pickup_location, delivery_location: data.delivery_location } : null;
1032
+ this.addRouteForm.valueChanges.pipe(takeUntil(this.destroyer$)).subscribe(res => {
1033
+ if (res) {
1034
+ if (this.preventInitialSave)
1035
+ this.preventInitialSave = false;
1036
+ }
1037
+ });
1038
+ this.filterCustomerList();
1039
+ }
1040
+ fetchCustomersList() {
1041
+ this.utils.getData('coolmap/company/list/view').pipe(takeUntil(this.destroyer$)).subscribe((res) => {
1042
+ if (res) {
1043
+ this.customersList = res.data;
1044
+ this.filterCustomerList();
1045
+ this.addRouteForm.controls['customer_name'].enable();
1046
+ }
1047
+ });
1048
+ }
1049
+ async fetchUnitsList() {
1050
+ await this.utils.getData('coolmap/unit/list/view').pipe(takeUntil(this.destroyer$)).subscribe((res) => {
1051
+ if (res) {
1052
+ this.unitsList = res.data;
1053
+ }
1054
+ });
1055
+ }
1056
+ fetchMaterialsList() {
1057
+ this.utils.getData('coolmap/material/list/view').pipe(takeUntil(this.destroyer$)).subscribe(((res) => {
1058
+ res.data.sort((a, b) => a.material.localeCompare(b.material));
1059
+ this.materialsList = res.data;
1060
+ }));
1061
+ }
1062
+ selectedLongLat(type, event) {
1063
+ if (type === 'pickup') {
1064
+ this.addRouteForm.patchValue({
1065
+ pickup_lat_lng: (event.geometry.coordinates[1] + ',' + event.geometry.coordinates[0]).toString()
1066
+ });
1067
+ this.coolMapService.clearBoundWithCordinates();
1068
+ }
1069
+ else if (type === 'delivery') {
1070
+ this.addRouteForm.patchValue({
1071
+ delivery_lat_lng: (event.geometry.coordinates[1] + ',' + event.geometry.coordinates[0]).toString()
1072
+ });
1073
+ }
1074
+ this.checkAndFetchRouteInformation();
1075
+ }
1076
+ checkAndFetchRouteInformation(isinitial) {
1077
+ if (this.addRouteForm.value?.delivery_lat_lng?.length > 0 && this.addRouteForm.value?.pickup_lat_lng?.length > 0) {
1078
+ const param = {
1079
+ delivery_lat_lng: this.addRouteForm.value.delivery_lat_lng,
1080
+ pickup_lat_lng: this.addRouteForm.value.pickup_lat_lng
1081
+ };
1082
+ this.utils.postdata('coolmap/calculate/routes/estimation', param).pipe(takeUntil(this.destroyer$)).subscribe((res) => {
1083
+ if (res && res['path']) {
1084
+ this.addRouteForm.patchValue({
1085
+ estimated_distance: res.dist, estimated_time: res.time, path: res.path
1086
+ });
1087
+ let path = res['path'].split(';');
1088
+ path = path.map((ele) => { return ele = this.formateLatLong(ele); });
1089
+ res['path'] = path;
1090
+ const element = {
1091
+ type: 'FeatureCollection',
1092
+ features: [{ type: 'Feature', properties: {}, geometry: { type: 'LineString', coordinates: res['path'] } }]
1093
+ };
1094
+ this.coolMapService.removeRouteAndMarker(1).then(() => {
1095
+ const unit = this.unitsList.find((x) => x.id === this.addRouteForm.value.unit_id);
1096
+ const materialDetails = this.materialsList.find((x) => x.material_id === this.addRouteForm.value.materials_id);
1097
+ this.coolMapService.loadMapProperty(element, 1, unit?.type, {
1098
+ pickup_location: this.addRouteForm.get('pickup_location')?.value,
1099
+ delivery_location: this.addRouteForm.get('delivery_location')?.value,
1100
+ route_name: this.addRouteForm.get('route_name')?.value,
1101
+ material: materialDetails?.material, unit: unit?.type
1102
+ }).then((res) => { this.preventSave = true; });
1103
+ });
1104
+ }
1105
+ else {
1106
+ this.coolMapService.removeRouteAndMarker(1);
1107
+ this.utils.openSnackBar(res['status'], 'error');
1108
+ }
1109
+ if (this.routeId && isinitial)
1110
+ this.preventInitialSave = true;
1111
+ });
1112
+ }
1113
+ else {
1114
+ this.coolMapService.removeRouteAndMarker(1);
1115
+ }
1116
+ }
1117
+ formateLatLong(latlong) { return latlong ? latlong.split(',').map(x => +x).reverse() : null; }
1118
+ saveRoute() {
1119
+ if (this.addRouteForm.valid) {
1120
+ this.preventSave = false;
1121
+ const data = this.addRouteForm.value;
1122
+ const url = this.routeId ? this.utils.postdata('coolmap/update/routes', data) : this.utils.postdata('coolmap/add/routes', data);
1123
+ if (this.routeId)
1124
+ data['id'] = this.routeId;
1125
+ url.pipe(takeUntil(this.destroyer$)).subscribe((res) => {
1126
+ if (res.success) {
1127
+ this.updateRouteList.emit(true);
1128
+ this.utils.openSnackBar(res.message, 'success');
1129
+ this.preventInitialSave = true;
1130
+ this.preventSave = true;
1131
+ if (!this.routeId)
1132
+ this.changeNav.next('Addroute');
1133
+ }
1134
+ else {
1135
+ this.utils.openSnackBar(res.message, 'error');
1136
+ this.preventSave = true;
1137
+ }
1138
+ }, (err) => { if (err) {
1139
+ this.preventSave = true;
1140
+ } });
1141
+ }
1142
+ else {
1143
+ this.addRouteForm.markAllAsTouched();
1144
+ }
1145
+ }
1146
+ deleteRoute() {
1147
+ this.preventSave = false;
1148
+ this.utils.postdata('coolmap/delete/routes', { uuid: this.routeId }).subscribe(res => {
1149
+ if (res['data']['success']) {
1150
+ this.utils.openSnackBar(res['data']['message'], 'success');
1151
+ this.updateRouteList.emit(true);
1152
+ this.changeNav.next('Addroute');
1153
+ this.preventInitialSave = true;
1154
+ this.preventSave = true;
1155
+ }
1156
+ else {
1157
+ this.utils.openSnackBar('Somthing went wrong', 'error');
1158
+ this.preventSave = true;
1159
+ }
1160
+ }, (err) => { this.preventSave = true; });
1161
+ }
1162
+ ngOnDestroy() {
1163
+ this.destroyer$.next(true);
1164
+ this.destroyer$.unsubscribe();
1165
+ }
1166
+ }
1167
+ AddRouteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AddRouteComponent, deps: [{ token: i1.CoolmapService }, { token: i1.UtilsService }, { token: i1$1.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
1168
+ AddRouteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: AddRouteComponent, selector: "app-add-route", inputs: { routeData: "routeData" }, outputs: { changeNav: "changeNav", updateRouteList: "updateRouteList" }, viewQueries: [{ propertyName: "filterPickup", first: true, predicate: ["filterPickup"], descendants: true }, { propertyName: "filterDelivery", first: true, predicate: ["filterDelivery"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"addroutebox\">\r\n <div class=\"routedetailbox\" *ngIf=\"enablePopUp\">\r\n <div class=\"closebtnroutedetail\">\r\n <mat-icon (click)=\"prevantPopupClose = false; enablePopUp = false;\">clear</mat-icon>\r\n </div>\r\n <div class=\"destination\">\r\n <div class=\"duration\">\r\n <p class=\"pickprt\"><b>Pickup:</b>{{popupDetails['pickup_location']}}</p>\r\n <p class=\"dropprt\"><b>Delivery:</b>{{popupDetails['delivery_location']}}</p>\r\n </div>\r\n <span><b>Name:</b> {{popupDetails['route_name']}}</span>\r\n <span><b>Customer:</b> {{popupDetails['customer_name']}}</span>\r\n <span><b>Material:</b> {{popupDetails['material']}}</span>\r\n <span><b>Type:</b> {{popupDetails['unit']}}</span>\r\n <span><b>Distance:</b> {{popupDetails['estimated_distance']}}</span>\r\n <span><b>Travel Time:</b> {{popupDetails['estimated_time']}}</span>\r\n\r\n <span class=\"routenotes\"><b>Notes:</b> {{popupDetails['note']}}</span>\r\n </div>\r\n <div class=\"createTxt\">\r\n <small>\r\n Created by {{popupDetails['created_by_name']}} on {{popupDetails['created_at']}}\r\n </small>\r\n <button class=\"editbtn\" (click)=\"editEvent()\">Edit</button>\r\n </div>\r\n </div>\r\n <div class=\"add_add_route_box\" cdkDrag [style.visibility]=\"!enableForm ? 'hidden' : 'visible'\">\r\n <div class=\"topheadingprt\">\r\n <h2> {{routeId? 'EDIT' : 'ADD'}} ROUTE </h2>\r\n <div class=\"buttonprt\">\r\n <button class=\"delbtn\" (click)=\"openDialog()\">Delete</button>\r\n <button mat-raised-button type=\"submit\" class=\"closebtn\" (click)=\"changeNav.next('Addroute')\">Close</button>\r\n </div>\r\n </div>\r\n <form [formGroup]=\"addRouteForm\">\r\n <div class=\"route_form_area\">\r\n <div class=\"col-6\">\r\n <mat-form-field>\r\n <mat-label>Route Name</mat-label>\r\n <input matInput formControlName=\"route_name\" autocomplete=\"nope\" (mousedown)=\"$event.stopPropagation()\">\r\n <mat-error *ngIf=\"addRouteForm.controls['route_name'].hasError('required')\">\r\n Route Name is required\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-6\">\r\n <mat-form-field>\r\n <input type=\"text\" placeholder=\"Customer Name\" matInput formControlName=\"customer_name\" [matAutocomplete]=\"auto\" (mousedown)=\"$event.stopPropagation()\">\r\n <mat-autocomplete autoActiveFirstOption #auto=\"matAutocomplete\">\r\n <mat-option *ngFor=\"let customer of customersList$ | async\" [value]=\"customer['customer_name']\">\r\n {{customer['customer_name']}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n <mat-error *ngIf=\"addRouteForm.controls['customer_name'].hasError('required')\">\r\n Customer name is required.\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-6\">\r\n <mat-form-field>\r\n <mat-label>Pickup</mat-label>\r\n <input type=\"text\" placeholder=\"Search...\" matInput #filterPickup [matAutocomplete]=\"pickupAutocomplete\"\r\n formControlName=\"pickup_location\" (mousedown)=\"$event.stopPropagation()\">\r\n\r\n <mat-autocomplete #pickupAutocomplete=\"matAutocomplete\">\r\n <mat-option (click)=\"selectedLongLat('pickup', option)\" *ngFor=\"let option of pickupOptions\"\r\n [value]=\"option?.place_name\">\r\n {{option?.place_name}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n <mat-error *ngIf=\"addRouteForm.controls['pickup_lat_lng'].touched && addRouteForm.controls['pickup_lat_lng'].hasError('required')\">\r\n Please select pickup location from the list.\r\n </mat-error>\r\n </div>\r\n <div class=\"col-6\">\r\n <mat-form-field>\r\n <mat-label>Delivery</mat-label>\r\n <input type=\"text\" placeholder=\"Search...\" matInput #filterDelivery [matAutocomplete]=\"deliveryAutocomplete\"\r\n formControlName=\"delivery_location\" (mousedown)=\"$event.stopPropagation()\">\r\n <mat-autocomplete #deliveryAutocomplete=\"matAutocomplete\">\r\n <mat-option (click)=\"selectedLongLat('delivery', option)\" *ngFor=\"let option of deliveryOptions\"\r\n [value]=\"option?.place_name\">\r\n {{option?.place_name}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n <mat-error *ngIf=\"addRouteForm.controls['delivery_lat_lng'].touched && addRouteForm.controls['delivery_lat_lng'].hasError('required')\">\r\n Please select delivery location from the list.\r\n </mat-error>\r\n </div>\r\n <div class=\"col-6\">\r\n <mat-form-field>\r\n <mat-label>Notes</mat-label>\r\n <textarea style=\"height: 18px; resize: none;\" matInput name=\"\" id=\"\" cols=\"30\" rows=\"10\" formControlName=\"note\" autocomplete=\"nope\" (mousedown)=\"$event.stopPropagation()\"></textarea>\r\n <mat-error *ngIf=\"addRouteForm.controls['note'].hasError('maxlength')\">\r\n Notes should be within 2048 characters.\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"col-6 d-flex\">\r\n <div class=\"inputbox m-0\">\r\n <mat-form-field>\r\n <mat-label>Unit type</mat-label>\r\n <mat-select formControlName=\"unit_id\" (selectionChange)=\"checkAndFetchRouteInformation()\" (mousedown)=\"$event.stopPropagation()\">\r\n <mat-option *ngFor=\"let unit of unitsList\" [value]=\"unit?.id\"> {{unit?.type}} </mat-option>\r\n </mat-select>\r\n <mat-error *ngIf=\"addRouteForm.controls['unit_id'].hasError('required')\">\r\n Unit is required\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"inputbox m-0\">\r\n <mat-form-field>\r\n <mat-label>Material</mat-label>\r\n <mat-select formControlName=\"materials_id\" (mousedown)=\"$event.stopPropagation()\">\r\n <mat-option *ngFor=\"let material of materialsList\" [value]=\"material?.material_id\"> {{material?.material}}\r\n </mat-option>\r\n </mat-select>\r\n <mat-error *ngIf=\"addRouteForm.controls['materials_id'].hasError('required')\">\r\n Meterial is required\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div class=\"col-6\">\r\n <app-estimation-display *ngIf=\"addRouteForm?.value?.pickup_lat_lng && addRouteForm?.value?.delivery_lat_lng\" [value]=\"addRouteForm['value']\"></app-estimation-display>\r\n </div>\r\n <button mat-raised-button type=\"submit\" (click)=\"saveRoute()\" *ngIf=\"preventSave\"\r\n [disabled]=\"addRouteForm.invalid && preventSave || preventInitialSave\">{{routeId? 'Update' : 'Save'}}\r\n </button>\r\n <div class=\"loader\">\r\n <mat-spinner *ngIf=\"!preventSave\"></mat-spinner>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n</div>\r\n", styles: [".addroutebox{width:calc(100% - 315px);position:absolute;left:300px;bottom:10px;z-index:999;display:flex;justify-content:space-between;align-items:flex-start}.addroutebox .routedetailbox{max-width:300px;padding:10px;background-color:#fff;border-radius:20px;margin-right:20px}@media (min-width: 1600px){.addroutebox .routedetailbox{max-width:280px}}.addroutebox .editbtn{background:#326ad3;padding:10px 25px;color:#fff;font-size:.8125rem;border-radius:30px;float:right}.add_add_route_box{background:white;padding:10px 20px;border-radius:20px;box-shadow:2px 4px 4px 2px #00000024;height:370px;width:100%;position:relative;cursor:move}.add_add_route_box .route_form_area{display:flex;flex-wrap:wrap;justify-content:space-between}.add_add_route_box .route_form_area .col-6{width:48%;margin-top:15px;justify-content:space-between}.add_add_route_box .route_form_area .col-6 .inputbox{width:47%}.add_add_route_box .route_form_area .col-6 span{font-size:.875rem}.add_add_route_box .route_form_area button{background:#326ad3;padding:10px 18px;color:#fff;font-size:.8125rem;border-radius:30px;position:absolute;right:18px;top:20px}.closebtn{background:black;color:#fff;border-radius:30px;padding:10px 18px;margin-left:10px}.delbtn{background:red;color:#fff;border-radius:30px;padding:10px 18px}.add_route_listingpart .listing_toggle{background:white;border-radius:15px;padding:8px 10px;position:absolute;right:10px;top:30px;cursor:pointer}.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 40px;opacity:0}.listing_box .closebtn{display:none}.show .listing_box{width:250px;max-width:250px;flex:0 0 250px;transition:.5s;-webkit-transition:.5s;-moz-transition:.5s;padding:40px 0 40px 20px;opacity:1}@media (min-width: 1600px){.show .listing_box{width:320px;max-width:320px;flex:0 0 320px}}.show .listing_box h2{color:#fff;white-space:nowrap}.show .listing_box ul{padding:0 20px 0 0}.show .listing_box ul li{background:#4a4a4a;padding:15px;border-radius:15px;display:flex;margin-bottom:15px}.show .listing_box ul li .companayIcon{width:40px;height:40px;border-radius:10px;background:white;margin-right:10px;display:flex;justify-content:center;align-items:center}.show .listing_box ul li .company_cont{width:calc(100% - 50px)}.show .listing_box ul li .company_cont h3{color:#fff;font-size:15px;font-weight:400;margin:0;text-overflow:ellipsis;max-width:129px;-webkit-box-orient:vertical;white-space:nowrap;overflow:hidden}@media (min-width: 1600px){.show .listing_box ul li .company_cont h3{max-width:170px}}.show .listing_box ul li .company_cont p{color:#bcbcbc;font-size:12px;margin:5px 0;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;line-height:16px}.show .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}.loader{position:absolute;width:95%;height:100%;display:flex;justify-content:center;align-items:center;pointer-events:none}.buttonprt{margin-right:83px}.destination .duration{padding:10px}.destination span{padding:5px 0}.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:#fff;position:absolute;top:-11px;left:-11px}.routenotes{max-height:170px;overflow: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$2.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: "directive", type: i3$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3$1.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$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.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: i8$2.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i8$1.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i8$1.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i7$1.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i10.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }] });
1169
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AddRouteComponent, decorators: [{
1170
+ type: Component,
1171
+ args: [{ selector: 'app-add-route', template: "<div class=\"addroutebox\">\r\n <div class=\"routedetailbox\" *ngIf=\"enablePopUp\">\r\n <div class=\"closebtnroutedetail\">\r\n <mat-icon (click)=\"prevantPopupClose = false; enablePopUp = false;\">clear</mat-icon>\r\n </div>\r\n <div class=\"destination\">\r\n <div class=\"duration\">\r\n <p class=\"pickprt\"><b>Pickup:</b>{{popupDetails['pickup_location']}}</p>\r\n <p class=\"dropprt\"><b>Delivery:</b>{{popupDetails['delivery_location']}}</p>\r\n </div>\r\n <span><b>Name:</b> {{popupDetails['route_name']}}</span>\r\n <span><b>Customer:</b> {{popupDetails['customer_name']}}</span>\r\n <span><b>Material:</b> {{popupDetails['material']}}</span>\r\n <span><b>Type:</b> {{popupDetails['unit']}}</span>\r\n <span><b>Distance:</b> {{popupDetails['estimated_distance']}}</span>\r\n <span><b>Travel Time:</b> {{popupDetails['estimated_time']}}</span>\r\n\r\n <span class=\"routenotes\"><b>Notes:</b> {{popupDetails['note']}}</span>\r\n </div>\r\n <div class=\"createTxt\">\r\n <small>\r\n Created by {{popupDetails['created_by_name']}} on {{popupDetails['created_at']}}\r\n </small>\r\n <button class=\"editbtn\" (click)=\"editEvent()\">Edit</button>\r\n </div>\r\n </div>\r\n <div class=\"add_add_route_box\" cdkDrag [style.visibility]=\"!enableForm ? 'hidden' : 'visible'\">\r\n <div class=\"topheadingprt\">\r\n <h2> {{routeId? 'EDIT' : 'ADD'}} ROUTE </h2>\r\n <div class=\"buttonprt\">\r\n <button class=\"delbtn\" (click)=\"openDialog()\">Delete</button>\r\n <button mat-raised-button type=\"submit\" class=\"closebtn\" (click)=\"changeNav.next('Addroute')\">Close</button>\r\n </div>\r\n </div>\r\n <form [formGroup]=\"addRouteForm\">\r\n <div class=\"route_form_area\">\r\n <div class=\"col-6\">\r\n <mat-form-field>\r\n <mat-label>Route Name</mat-label>\r\n <input matInput formControlName=\"route_name\" autocomplete=\"nope\" (mousedown)=\"$event.stopPropagation()\">\r\n <mat-error *ngIf=\"addRouteForm.controls['route_name'].hasError('required')\">\r\n Route Name is required\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-6\">\r\n <mat-form-field>\r\n <input type=\"text\" placeholder=\"Customer Name\" matInput formControlName=\"customer_name\" [matAutocomplete]=\"auto\" (mousedown)=\"$event.stopPropagation()\">\r\n <mat-autocomplete autoActiveFirstOption #auto=\"matAutocomplete\">\r\n <mat-option *ngFor=\"let customer of customersList$ | async\" [value]=\"customer['customer_name']\">\r\n {{customer['customer_name']}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n <mat-error *ngIf=\"addRouteForm.controls['customer_name'].hasError('required')\">\r\n Customer name is required.\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-6\">\r\n <mat-form-field>\r\n <mat-label>Pickup</mat-label>\r\n <input type=\"text\" placeholder=\"Search...\" matInput #filterPickup [matAutocomplete]=\"pickupAutocomplete\"\r\n formControlName=\"pickup_location\" (mousedown)=\"$event.stopPropagation()\">\r\n\r\n <mat-autocomplete #pickupAutocomplete=\"matAutocomplete\">\r\n <mat-option (click)=\"selectedLongLat('pickup', option)\" *ngFor=\"let option of pickupOptions\"\r\n [value]=\"option?.place_name\">\r\n {{option?.place_name}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n <mat-error *ngIf=\"addRouteForm.controls['pickup_lat_lng'].touched && addRouteForm.controls['pickup_lat_lng'].hasError('required')\">\r\n Please select pickup location from the list.\r\n </mat-error>\r\n </div>\r\n <div class=\"col-6\">\r\n <mat-form-field>\r\n <mat-label>Delivery</mat-label>\r\n <input type=\"text\" placeholder=\"Search...\" matInput #filterDelivery [matAutocomplete]=\"deliveryAutocomplete\"\r\n formControlName=\"delivery_location\" (mousedown)=\"$event.stopPropagation()\">\r\n <mat-autocomplete #deliveryAutocomplete=\"matAutocomplete\">\r\n <mat-option (click)=\"selectedLongLat('delivery', option)\" *ngFor=\"let option of deliveryOptions\"\r\n [value]=\"option?.place_name\">\r\n {{option?.place_name}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n <mat-error *ngIf=\"addRouteForm.controls['delivery_lat_lng'].touched && addRouteForm.controls['delivery_lat_lng'].hasError('required')\">\r\n Please select delivery location from the list.\r\n </mat-error>\r\n </div>\r\n <div class=\"col-6\">\r\n <mat-form-field>\r\n <mat-label>Notes</mat-label>\r\n <textarea style=\"height: 18px; resize: none;\" matInput name=\"\" id=\"\" cols=\"30\" rows=\"10\" formControlName=\"note\" autocomplete=\"nope\" (mousedown)=\"$event.stopPropagation()\"></textarea>\r\n <mat-error *ngIf=\"addRouteForm.controls['note'].hasError('maxlength')\">\r\n Notes should be within 2048 characters.\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"col-6 d-flex\">\r\n <div class=\"inputbox m-0\">\r\n <mat-form-field>\r\n <mat-label>Unit type</mat-label>\r\n <mat-select formControlName=\"unit_id\" (selectionChange)=\"checkAndFetchRouteInformation()\" (mousedown)=\"$event.stopPropagation()\">\r\n <mat-option *ngFor=\"let unit of unitsList\" [value]=\"unit?.id\"> {{unit?.type}} </mat-option>\r\n </mat-select>\r\n <mat-error *ngIf=\"addRouteForm.controls['unit_id'].hasError('required')\">\r\n Unit is required\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"inputbox m-0\">\r\n <mat-form-field>\r\n <mat-label>Material</mat-label>\r\n <mat-select formControlName=\"materials_id\" (mousedown)=\"$event.stopPropagation()\">\r\n <mat-option *ngFor=\"let material of materialsList\" [value]=\"material?.material_id\"> {{material?.material}}\r\n </mat-option>\r\n </mat-select>\r\n <mat-error *ngIf=\"addRouteForm.controls['materials_id'].hasError('required')\">\r\n Meterial is required\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div class=\"col-6\">\r\n <app-estimation-display *ngIf=\"addRouteForm?.value?.pickup_lat_lng && addRouteForm?.value?.delivery_lat_lng\" [value]=\"addRouteForm['value']\"></app-estimation-display>\r\n </div>\r\n <button mat-raised-button type=\"submit\" (click)=\"saveRoute()\" *ngIf=\"preventSave\"\r\n [disabled]=\"addRouteForm.invalid && preventSave || preventInitialSave\">{{routeId? 'Update' : 'Save'}}\r\n </button>\r\n <div class=\"loader\">\r\n <mat-spinner *ngIf=\"!preventSave\"></mat-spinner>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n</div>\r\n", styles: [".addroutebox{width:calc(100% - 315px);position:absolute;left:300px;bottom:10px;z-index:999;display:flex;justify-content:space-between;align-items:flex-start}.addroutebox .routedetailbox{max-width:300px;padding:10px;background-color:#fff;border-radius:20px;margin-right:20px}@media (min-width: 1600px){.addroutebox .routedetailbox{max-width:280px}}.addroutebox .editbtn{background:#326ad3;padding:10px 25px;color:#fff;font-size:.8125rem;border-radius:30px;float:right}.add_add_route_box{background:white;padding:10px 20px;border-radius:20px;box-shadow:2px 4px 4px 2px #00000024;height:370px;width:100%;position:relative;cursor:move}.add_add_route_box .route_form_area{display:flex;flex-wrap:wrap;justify-content:space-between}.add_add_route_box .route_form_area .col-6{width:48%;margin-top:15px;justify-content:space-between}.add_add_route_box .route_form_area .col-6 .inputbox{width:47%}.add_add_route_box .route_form_area .col-6 span{font-size:.875rem}.add_add_route_box .route_form_area button{background:#326ad3;padding:10px 18px;color:#fff;font-size:.8125rem;border-radius:30px;position:absolute;right:18px;top:20px}.closebtn{background:black;color:#fff;border-radius:30px;padding:10px 18px;margin-left:10px}.delbtn{background:red;color:#fff;border-radius:30px;padding:10px 18px}.add_route_listingpart .listing_toggle{background:white;border-radius:15px;padding:8px 10px;position:absolute;right:10px;top:30px;cursor:pointer}.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 40px;opacity:0}.listing_box .closebtn{display:none}.show .listing_box{width:250px;max-width:250px;flex:0 0 250px;transition:.5s;-webkit-transition:.5s;-moz-transition:.5s;padding:40px 0 40px 20px;opacity:1}@media (min-width: 1600px){.show .listing_box{width:320px;max-width:320px;flex:0 0 320px}}.show .listing_box h2{color:#fff;white-space:nowrap}.show .listing_box ul{padding:0 20px 0 0}.show .listing_box ul li{background:#4a4a4a;padding:15px;border-radius:15px;display:flex;margin-bottom:15px}.show .listing_box ul li .companayIcon{width:40px;height:40px;border-radius:10px;background:white;margin-right:10px;display:flex;justify-content:center;align-items:center}.show .listing_box ul li .company_cont{width:calc(100% - 50px)}.show .listing_box ul li .company_cont h3{color:#fff;font-size:15px;font-weight:400;margin:0;text-overflow:ellipsis;max-width:129px;-webkit-box-orient:vertical;white-space:nowrap;overflow:hidden}@media (min-width: 1600px){.show .listing_box ul li .company_cont h3{max-width:170px}}.show .listing_box ul li .company_cont p{color:#bcbcbc;font-size:12px;margin:5px 0;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;line-height:16px}.show .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}.loader{position:absolute;width:95%;height:100%;display:flex;justify-content:center;align-items:center;pointer-events:none}.buttonprt{margin-right:83px}.destination .duration{padding:10px}.destination span{padding:5px 0}.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:#fff;position:absolute;top:-11px;left:-11px}.routenotes{max-height:170px;overflow:auto}\n"] }]
1172
+ }], ctorParameters: function () { return [{ type: i1.CoolmapService }, { type: i1.UtilsService }, { type: i1$1.MatDialog }]; }, propDecorators: { filterPickup: [{
1173
+ type: ViewChild,
1174
+ args: ['filterPickup']
1175
+ }], filterDelivery: [{
1176
+ type: ViewChild,
1177
+ args: ['filterDelivery']
1178
+ }], changeNav: [{
1179
+ type: Output
1180
+ }], updateRouteList: [{
1181
+ type: Output
1182
+ }], routeData: [{
1183
+ type: Input
1184
+ }] } });
1185
+
893
1186
  class CoolmapModule {
894
1187
  }
895
1188
  CoolmapModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: CoolmapModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
@@ -906,7 +1199,8 @@ CoolmapModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version:
906
1199
  JobRouteListComponent,
907
1200
  JobcodeStatusComponent,
908
1201
  JobcodeOverviewComponent,
909
- DialogComponent], imports: [CommonModule,
1202
+ DialogComponent,
1203
+ AddRouteComponent], imports: [CommonModule,
910
1204
  MatSnackBarModule,
911
1205
  MatSidenavModule,
912
1206
  DragDropModule,
@@ -939,7 +1233,8 @@ CoolmapModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version:
939
1233
  JobRouteListComponent,
940
1234
  JobcodeStatusComponent,
941
1235
  JobcodeOverviewComponent,
942
- DialogComponent] });
1236
+ DialogComponent,
1237
+ AddRouteComponent] });
943
1238
  CoolmapModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: CoolmapModule, imports: [CommonModule,
944
1239
  MatSnackBarModule,
945
1240
  MatSidenavModule,
@@ -978,7 +1273,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
978
1273
  JobRouteListComponent,
979
1274
  JobcodeStatusComponent,
980
1275
  JobcodeOverviewComponent,
981
- DialogComponent
1276
+ DialogComponent,
1277
+ AddRouteComponent
982
1278
  ],
983
1279
  imports: [
984
1280
  CommonModule,
@@ -1017,10 +1313,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
1017
1313
  JobRouteListComponent,
1018
1314
  JobcodeStatusComponent,
1019
1315
  JobcodeOverviewComponent,
1020
- DialogComponent
1316
+ DialogComponent,
1317
+ AddRouteComponent
1021
1318
  ],
1022
1319
  entryComponents: [
1023
- DialogComponent
1320
+ DialogComponent,
1321
+ JobCodeComponent,
1322
+ AddRouteComponent
1024
1323
  ],
1025
1324
  providers: []
1026
1325
  }]
@@ -1034,5 +1333,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
1034
1333
  * Generated bundle index. Do not edit.
1035
1334
  */
1036
1335
 
1037
- export { AddRouteNavComponent, CoolmapComponent, CoolmapModule, DialogComponent, JobCodeComponent, JobCodeListCardComponent, JobCodeNavComponent, JobRouteListComponent, JobcodeOverviewComponent, JobcodeStatusComponent, MapComponent, NavComponent, RouteJobCodeListComponent, SmsCardDetailsOverviewComponent, ViewRouteListCardComponent };
1336
+ export { AddRouteComponent, AddRouteNavComponent, CoolmapComponent, CoolmapModule, DialogComponent, JobCodeComponent, JobCodeListCardComponent, JobCodeNavComponent, JobRouteListComponent, JobcodeOverviewComponent, JobcodeStatusComponent, MapComponent, NavComponent, RouteJobCodeListComponent, SmsCardDetailsOverviewComponent, ViewRouteListCardComponent };
1038
1337
  //# sourceMappingURL=aggdirect-coolmap.mjs.map