@smarterplan/ngx-smarterplan-locations 0.2.44 → 0.2.45
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/components/carousel/carousel.component.mjs +28 -0
- package/esm2020/lib/components/chevron/chevron.component.mjs +18 -0
- package/esm2020/lib/components/detail-location/detail-location.component.mjs +168 -0
- package/esm2020/lib/components/form-location/form-location.component.mjs +237 -0
- package/esm2020/lib/components/images/images.component.mjs +107 -0
- package/esm2020/lib/components/locations/locations.component.mjs +145 -0
- package/esm2020/lib/components/locations/map/map-popup/map-popup.component.mjs +66 -0
- package/esm2020/lib/components/locations/map/map.component.mjs +91 -0
- package/esm2020/lib/components/plan-legend/plan-legend.component.mjs +47 -0
- package/esm2020/lib/components/plans/calibration/calibration.component.mjs +468 -0
- package/esm2020/lib/components/plans/edit-plan/edit-plan.component.mjs +324 -0
- package/esm2020/lib/components/plans/plans.component.mjs +225 -0
- package/esm2020/lib/components/tab-navigation/tab-navigation.component.mjs +41 -0
- package/esm2020/lib/components/visits/visits.component.mjs +283 -0
- package/esm2020/lib/components/zones/add-audio-zone/add-audio-zone.component.mjs +230 -0
- package/esm2020/lib/components/zones/add-zone/add-zone.component.mjs +315 -0
- package/esm2020/lib/components/zones/add-zone/selection/selection.component.mjs +77 -0
- package/esm2020/lib/components/zones/add-zone/sweep-plan-selection/sweep-plan-selection.component.mjs +502 -0
- package/esm2020/lib/components/zones/zones.component.mjs +268 -0
- package/esm2020/lib/helper.service.mjs +134 -0
- package/esm2020/lib/ngx-smarterplan-location-routing.module.mjs +49 -0
- package/esm2020/lib/ngx-smarterplan-locations.module.mjs +125 -0
- package/esm2020/lib/ngx-smarterplan-locations.service.mjs +14 -0
- package/esm2020/lib/pipes/count-audio-sweeps.pipe.mjs +27 -0
- package/esm2020/lib/radio-button/radio-button.component.mjs +26 -0
- package/esm2020/public-api.mjs +9 -0
- package/esm2020/smarterplan-ngx-smarterplan-locations.mjs +5 -0
- package/fesm2015/smarterplan-ngx-smarterplan-locations.mjs +3991 -0
- package/fesm2015/smarterplan-ngx-smarterplan-locations.mjs.map +1 -0
- package/fesm2020/smarterplan-ngx-smarterplan-locations.mjs +3828 -0
- package/fesm2020/smarterplan-ngx-smarterplan-locations.mjs.map +1 -0
- package/lib/components/carousel/carousel.component.d.ts +12 -0
- package/lib/components/chevron/chevron.component.d.ts +9 -0
- package/lib/components/detail-location/detail-location.component.d.ts +55 -0
- package/lib/components/form-location/form-location.component.d.ts +45 -0
- package/lib/components/images/images.component.d.ts +33 -0
- package/lib/components/locations/locations.component.d.ts +51 -0
- package/lib/components/locations/map/map-popup/map-popup.component.d.ts +22 -0
- package/lib/components/locations/map/map.component.d.ts +22 -0
- package/lib/components/plan-legend/plan-legend.component.d.ts +14 -0
- package/lib/components/plans/calibration/calibration.component.d.ts +140 -0
- package/lib/components/plans/edit-plan/edit-plan.component.d.ts +55 -0
- package/lib/components/plans/plans.component.d.ts +63 -0
- package/lib/components/tab-navigation/tab-navigation.component.d.ts +13 -0
- package/lib/components/visits/visits.component.d.ts +62 -0
- package/lib/components/zones/add-audio-zone/add-audio-zone.component.d.ts +63 -0
- package/lib/components/zones/add-zone/add-zone.component.d.ts +69 -0
- package/lib/components/zones/add-zone/selection/selection.component.d.ts +44 -0
- package/lib/components/zones/add-zone/sweep-plan-selection/sweep-plan-selection.component.d.ts +107 -0
- package/lib/components/zones/zones.component.d.ts +73 -0
- package/lib/helper.service.d.ts +53 -0
- package/lib/ngx-smarterplan-location-routing.module.d.ts +7 -0
- package/lib/ngx-smarterplan-locations.module.d.ts +36 -0
- package/lib/ngx-smarterplan-locations.service.d.ts +6 -0
- package/lib/pipes/count-audio-sweeps.pipe.d.ts +10 -0
- package/lib/radio-button/radio-button.component.d.ts +12 -0
- package/package.json +22 -5
- package/{src/public-api.ts → public-api.d.ts} +4 -11
- package/smarterplan-ngx-smarterplan-locations.d.ts +5 -0
- package/.browserslistrc +0 -16
- package/karma.conf.js +0 -44
- package/ng-package.json +0 -7
- package/src/lib/components/carousel/carousel.component.html +0 -13
- package/src/lib/components/carousel/carousel.component.scss +0 -0
- package/src/lib/components/carousel/carousel.component.spec.ts +0 -25
- package/src/lib/components/carousel/carousel.component.ts +0 -31
- package/src/lib/components/chevron/chevron.component.html +0 -5
- package/src/lib/components/chevron/chevron.component.scss +0 -16
- package/src/lib/components/chevron/chevron.component.spec.ts +0 -25
- package/src/lib/components/chevron/chevron.component.ts +0 -17
- package/src/lib/components/detail-location/detail-location.component.html +0 -108
- package/src/lib/components/detail-location/detail-location.component.scss +0 -0
- package/src/lib/components/detail-location/detail-location.component.spec.ts +0 -25
- package/src/lib/components/detail-location/detail-location.component.ts +0 -215
- package/src/lib/components/form-location/form-location.component.html +0 -160
- package/src/lib/components/form-location/form-location.component.scss +0 -62
- package/src/lib/components/form-location/form-location.component.spec.ts +0 -25
- package/src/lib/components/form-location/form-location.component.ts +0 -274
- package/src/lib/components/images/images.component.html +0 -27
- package/src/lib/components/images/images.component.scss +0 -0
- package/src/lib/components/images/images.component.spec.ts +0 -25
- package/src/lib/components/images/images.component.ts +0 -133
- package/src/lib/components/locations/locations.component.html +0 -63
- package/src/lib/components/locations/locations.component.scss +0 -121
- package/src/lib/components/locations/locations.component.spec.ts +0 -25
- package/src/lib/components/locations/locations.component.ts +0 -186
- package/src/lib/components/locations/map/map-popup/map-popup.component.html +0 -11
- package/src/lib/components/locations/map/map-popup/map-popup.component.scss +0 -51
- package/src/lib/components/locations/map/map-popup/map-popup.component.spec.ts +0 -25
- package/src/lib/components/locations/map/map-popup/map-popup.component.ts +0 -79
- package/src/lib/components/locations/map/map.component.html +0 -2
- package/src/lib/components/locations/map/map.component.scss +0 -0
- package/src/lib/components/locations/map/map.component.spec.ts +0 -25
- package/src/lib/components/locations/map/map.component.ts +0 -111
- package/src/lib/components/plan-legend/plan-legend.component.html +0 -9
- package/src/lib/components/plan-legend/plan-legend.component.scss +0 -38
- package/src/lib/components/plan-legend/plan-legend.component.spec.ts +0 -25
- package/src/lib/components/plan-legend/plan-legend.component.ts +0 -50
- package/src/lib/components/plans/calibration/calibration.component.html +0 -98
- package/src/lib/components/plans/calibration/calibration.component.scss +0 -136
- package/src/lib/components/plans/calibration/calibration.component.spec.ts +0 -25
- package/src/lib/components/plans/calibration/calibration.component.ts +0 -603
- package/src/lib/components/plans/edit-plan/edit-plan.component.html +0 -77
- package/src/lib/components/plans/edit-plan/edit-plan.component.scss +0 -9
- package/src/lib/components/plans/edit-plan/edit-plan.component.spec.ts +0 -25
- package/src/lib/components/plans/edit-plan/edit-plan.component.ts +0 -421
- package/src/lib/components/plans/plans.component.html +0 -102
- package/src/lib/components/plans/plans.component.scss +0 -24
- package/src/lib/components/plans/plans.component.spec.ts +0 -25
- package/src/lib/components/plans/plans.component.ts +0 -305
- package/src/lib/components/tab-navigation/tab-navigation.component.html +0 -7
- package/src/lib/components/tab-navigation/tab-navigation.component.scss +0 -27
- package/src/lib/components/tab-navigation/tab-navigation.component.spec.ts +0 -25
- package/src/lib/components/tab-navigation/tab-navigation.component.ts +0 -35
- package/src/lib/components/visits/visits.component.html +0 -134
- package/src/lib/components/visits/visits.component.scss +0 -24
- package/src/lib/components/visits/visits.component.spec.ts +0 -25
- package/src/lib/components/visits/visits.component.ts +0 -357
- package/src/lib/components/zones/add-audio-zone/add-audio-zone.component.html +0 -73
- package/src/lib/components/zones/add-audio-zone/add-audio-zone.component.scss +0 -14
- package/src/lib/components/zones/add-audio-zone/add-audio-zone.component.spec.ts +0 -25
- package/src/lib/components/zones/add-audio-zone/add-audio-zone.component.ts +0 -269
- package/src/lib/components/zones/add-zone/add-zone.component.html +0 -153
- package/src/lib/components/zones/add-zone/add-zone.component.scss +0 -44
- package/src/lib/components/zones/add-zone/add-zone.component.spec.ts +0 -25
- package/src/lib/components/zones/add-zone/add-zone.component.ts +0 -377
- package/src/lib/components/zones/add-zone/selection/selection.component.html +0 -3
- package/src/lib/components/zones/add-zone/selection/selection.component.scss +0 -16
- package/src/lib/components/zones/add-zone/selection/selection.component.spec.ts +0 -25
- package/src/lib/components/zones/add-zone/selection/selection.component.ts +0 -95
- package/src/lib/components/zones/add-zone/sweep-plan-selection/sweep-plan-selection.component.html +0 -73
- package/src/lib/components/zones/add-zone/sweep-plan-selection/sweep-plan-selection.component.scss +0 -23
- package/src/lib/components/zones/add-zone/sweep-plan-selection/sweep-plan-selection.component.spec.ts +0 -25
- package/src/lib/components/zones/add-zone/sweep-plan-selection/sweep-plan-selection.component.ts +0 -595
- package/src/lib/components/zones/zones.component.html +0 -181
- package/src/lib/components/zones/zones.component.scss +0 -36
- package/src/lib/components/zones/zones.component.spec.ts +0 -25
- package/src/lib/components/zones/zones.component.ts +0 -339
- package/src/lib/helper.service.ts +0 -161
- package/src/lib/ngx-smarterplan-location-routing.module.ts +0 -41
- package/src/lib/ngx-smarterplan-locations.module.ts +0 -74
- package/src/lib/ngx-smarterplan-locations.service.spec.ts +0 -16
- package/src/lib/ngx-smarterplan-locations.service.ts +0 -9
- package/src/lib/pipes/count-audio-sweeps.pipe.ts +0 -21
- package/src/lib/radio-button/radio-button.component.html +0 -9
- package/src/lib/radio-button/radio-button.component.scss +0 -152
- package/src/lib/radio-button/radio-button.component.spec.ts +0 -25
- package/src/lib/radio-button/radio-button.component.ts +0 -26
- package/src/test.ts +0 -27
- package/tsconfig.lib.json +0 -15
- package/tsconfig.lib.prod.json +0 -10
- package/tsconfig.spec.json +0 -17
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import { LevelStatus, enumToArray, SearchObjectType } from '@smarterplan/ngx-smarterplan-core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@smarterplan/ngx-smarterplan-core";
|
|
5
|
+
import * as i2 from "@angular/router";
|
|
6
|
+
import * as i3 from "../tab-navigation/tab-navigation.component";
|
|
7
|
+
import * as i4 from "./map/map.component";
|
|
8
|
+
import * as i5 from "../form-location/form-location.component";
|
|
9
|
+
import * as i6 from "@angular/common";
|
|
10
|
+
import * as i7 from "@ng-bootstrap/ng-bootstrap";
|
|
11
|
+
import * as i8 from "@ngx-translate/core";
|
|
12
|
+
export class LocationsComponent {
|
|
13
|
+
constructor(spaceService, router, userService, viewerService, navigationService, navigatorService) {
|
|
14
|
+
this.spaceService = spaceService;
|
|
15
|
+
this.router = router;
|
|
16
|
+
this.userService = userService;
|
|
17
|
+
this.viewerService = viewerService;
|
|
18
|
+
this.navigationService = navigationService;
|
|
19
|
+
this.navigatorService = navigatorService;
|
|
20
|
+
this.isAdding = false;
|
|
21
|
+
this.filteredLocations = [];
|
|
22
|
+
this.isManager = false;
|
|
23
|
+
this.isMuseumUser = true;
|
|
24
|
+
this.locations = [];
|
|
25
|
+
this.menuItems = [];
|
|
26
|
+
/** Last filtered Locations, used when we go back on all locations from the search bar location */
|
|
27
|
+
this.lastFiltredLocations = [];
|
|
28
|
+
this.levels = enumToArray(LevelStatus);
|
|
29
|
+
this.userSubcription = this.userService.isChanged.subscribe((isConnected) => {
|
|
30
|
+
if (isConnected) {
|
|
31
|
+
this.refresh();
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
this.locationIDSubscription =
|
|
35
|
+
this.navigatorService.locationIDChange.subscribe((id) => {
|
|
36
|
+
this.changeSelectedLocation(id);
|
|
37
|
+
this.setupMenuItems();
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
async ngOnInit() {
|
|
41
|
+
if (this.userService.cu) {
|
|
42
|
+
this.resetList();
|
|
43
|
+
this.updateUserRights();
|
|
44
|
+
}
|
|
45
|
+
this.setupMenuItems();
|
|
46
|
+
}
|
|
47
|
+
findSpaceById(id) {
|
|
48
|
+
return this.locations.find((loc) => loc.id === id);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Update when we change the selected location in filter (search bar)
|
|
52
|
+
* @param id for a location, if null display all last filtred location
|
|
53
|
+
*/
|
|
54
|
+
changeSelectedLocation(id) {
|
|
55
|
+
const space = id ? this.findSpaceById(id) : null;
|
|
56
|
+
this.filteredLocations = space ? [space] : this.lastFiltredLocations; // New selected space or last filtered location
|
|
57
|
+
}
|
|
58
|
+
refresh() {
|
|
59
|
+
this.updateUserRights();
|
|
60
|
+
this.resetList();
|
|
61
|
+
}
|
|
62
|
+
ngOnDestroy() {
|
|
63
|
+
this.userSubcription.unsubscribe();
|
|
64
|
+
this.locationIDSubscription.unsubscribe();
|
|
65
|
+
}
|
|
66
|
+
setupMenuItems() {
|
|
67
|
+
this.menuItems = [{ label: "All Locations", url: "/localisation" }];
|
|
68
|
+
if (this.isAdding) {
|
|
69
|
+
this.menuItems.push({ label: "New" });
|
|
70
|
+
}
|
|
71
|
+
if (this.filteredLocations.length === 1) {
|
|
72
|
+
const selectedLoc = this.filteredLocations[0];
|
|
73
|
+
this.menuItems.push({ label: selectedLoc.name });
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
updateUserRights() {
|
|
77
|
+
this.isManager = this.userService.hasManagerRoleInAnyMission();
|
|
78
|
+
this.isMuseumUser = this.userService.hasOnlyMuseumRole();
|
|
79
|
+
}
|
|
80
|
+
isManagerForSpace(spaceID) {
|
|
81
|
+
return (this.userService.isManager(spaceID) ||
|
|
82
|
+
this.userService.isGuide(spaceID));
|
|
83
|
+
}
|
|
84
|
+
async resetList() {
|
|
85
|
+
this.locations = await this.spaceService.getLocationsForCurrentUser();
|
|
86
|
+
this.filteredLocations = this.locations;
|
|
87
|
+
this.lastFiltredLocations = this.locations;
|
|
88
|
+
this.isAdding = false;
|
|
89
|
+
this.changeSelectedLocation(this.navigatorService.currentNavBarLocationID); // Set for the current selected location
|
|
90
|
+
this.setupMenuItems();
|
|
91
|
+
}
|
|
92
|
+
onAddLocation() {
|
|
93
|
+
this.isAdding = true;
|
|
94
|
+
this.setupMenuItems();
|
|
95
|
+
}
|
|
96
|
+
handleImageInput(files) {
|
|
97
|
+
this.imageToUpload = files.item(0);
|
|
98
|
+
}
|
|
99
|
+
onFormChange(event) {
|
|
100
|
+
this.navigatorService.locationIDChange.next(null); /** Remove selected location */
|
|
101
|
+
this.isAdding = false;
|
|
102
|
+
if (event) {
|
|
103
|
+
this.resetList();
|
|
104
|
+
}
|
|
105
|
+
this.setupMenuItems();
|
|
106
|
+
}
|
|
107
|
+
async onVisitClick(loc, visit) {
|
|
108
|
+
if (!this.userService.userHasAccessToAllZonesInSpace(loc.id)) {
|
|
109
|
+
// get allowed sweep for the user
|
|
110
|
+
const allowedSweeps = await this.navigationService.getAllowedSweepsIDsForUserInSpace(loc.id);
|
|
111
|
+
const firstSweep = allowedSweeps[0];
|
|
112
|
+
this.viewerService.setSweepToMove(firstSweep);
|
|
113
|
+
}
|
|
114
|
+
if (this.userService.isGuide(loc.id)) {
|
|
115
|
+
this.router.navigate(["museum", loc.id]);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
this.router.navigate(["visit", loc.id], {
|
|
119
|
+
queryParams: { model3D: visit.model3d },
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
applyResultsSearchBar(results) {
|
|
124
|
+
this.filteredLocations = results || this.locations;
|
|
125
|
+
this.lastFiltredLocations = this.filteredLocations;
|
|
126
|
+
this.navigatorService.locationIDChange.next(null); // When we search with keyword, we would like to search on all locations
|
|
127
|
+
}
|
|
128
|
+
getSearchType() {
|
|
129
|
+
return SearchObjectType.LOCATION;
|
|
130
|
+
}
|
|
131
|
+
getStringNoSpace(data) {
|
|
132
|
+
return data.replace(/\s/g, '');
|
|
133
|
+
}
|
|
134
|
+
onDetailViewClick(spaceID) {
|
|
135
|
+
this.navigatorService.locationIDChange.next(spaceID); // Send update for the location filter bar
|
|
136
|
+
this.router.navigate(["dashboard/localisation", spaceID]);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
LocationsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: LocationsComponent, deps: [{ token: i1.SpaceService }, { token: i2.Router }, { token: i1.BaseUserService }, { token: i1.ViewerService }, { token: i1.NavigationService }, { token: i1.NavigatorService }], target: i0.ɵɵFactoryTarget.Component });
|
|
140
|
+
LocationsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: LocationsComponent, selector: "lib-locations", ngImport: i0, template: "<div class=\"dashboard-tab\">\n <div class=\"header-dashboard-tab\">\n <div class=\"m-3\">\n <lib-tab-navigation (onGoBack)=\"onFormChange(null)\" [menuItems]='menuItems'></lib-tab-navigation>\n <span class=\"ml-3 refreshIcon\" (click)=\"refresh()\" *ngIf=\"!(isAdding)\" ngbTooltip=\"Refresh list\">\n <span class=\"iconify refreshIcon\" data-icon=\"ion:refresh-circle\" data-width=\"35\" data-rotate=\"90deg\"></span>\n </span>\n </div> \n <lib-search-bar *ngIf=\"!isAdding && !isMuseumUser\" [searchable]=\"locations\" [objectType]=\"getSearchType()\"\n (searchEvent)=\"applyResultsSearchBar($event)\"></lib-search-bar>\n \n <div class=\"col-md-8\">\n <div class=\"sp-row\" *ngIf=\"!isAdding && isManager\">\n <button data-testid=\"new-location-btn\" class=\"btn btn-outline-primary rounded-pill add-location\" (click)=\"onAddLocation()\">\n {{'Add location' | translate}}</button>\n <!-- <div class=\"outer_circle\">\n <button id='btn-icon' (click)=\"onAddLocation()\"></button>\n </div> -->\n </div>\n </div>\n </div>\n <hr>\n <div class=\"row\" *ngIf=\"isAdding\">\n <div class=\"col-md-6\">\n <h4>{{'New location' | translate}}</h4>\n </div>\n </div>\n <section *ngIf=\"!isAdding\">\n <div class=\"row\">\n <div class=\"col-sm-12 col-md-12 col-lg-6\" *ngIf=\"filteredLocations\">\n <ul data-testid=\"location-list-container\" class=\"list-group list-group-flush\">\n <li class=\"d-flex justify-content-between list-group-item\"\n *ngFor=\"let loc of filteredLocations; index as index\">\n <div class=\"d-flex\">\n <div class=\"col-md-5 img-main-container\">\n <div id=\"img_container\">\n <img class=\"location-img\" *ngIf=\"loc.annexes; else elseBlock\" [src]=\"loc.annexes\">\n <ng-template #elseBlock><img class=\"location-img\"\n src=\"./../../../../assets/images/visuel-off-big.jpg\" />\n </ng-template>\n <button [ngClass]=\"['open-btn-'+getStringNoSpace(loc.name)]\" *ngIf=\"isManagerForSpace(loc.id)\" class=\"btn-details\" (click)=\"onDetailViewClick(loc.id)\">\n {{'View details' | translate}}</button>\n </div>\n \n </div>\n <div class=\"col-md-7 location-info\">\n <p>{{loc.name}}</p>\n <p>{{loc.addresses}}</p>\n <p [ngClass]=\"['view-btn-'+getStringNoSpace(loc.name)]\" *ngFor=\"let visit of loc.visits\" (click)=\"onVisitClick(loc, visit)\" class=\"visit-name\"\n [style.cursor]=\"'pointer'\" ngbTooltip=\"Visit\">{{ visit.name ? visit.name : loc.name}}</p>\n </div>\n </div>\n </li>\n \n </ul>\n </div>\n <div class=\"col-sm-12 col-md-12 col-lg-6\">\n <lib-map [spaces]=\"filteredLocations\"></lib-map>\n </div>\n </div>\n </section>\n <lib-form-location *ngIf=\"isAdding\" (onChange)=\"onFormChange($event)\"></lib-form-location>\n</div>\n", styles: [".searchbar{margin-bottom:10px}input[type=file]{display:none}.form-control{border-radius:var(--form-control-border-radius)}.custom-select{border-color:var(--smarterplan-primary);width:auto}.form-new-loc{background-color:#d3d3d3;padding-top:10px;padding-bottom:10px;margin-bottom:15px}.btn-outline-primary{background-color:#fff}h4{color:var(--smarterplan-primary)}section .list-group{margin-top:15px}section .list-group-item{padding:5px 0}section .location-info{font-size:1.1em}section .location-img{width:100%;object-fit:cover;object-position:center bottom;height:165px}#img_container{position:relative;display:inline-block;text-align:center;width:250px}.img-main-container{max-width:250px;width:250px!important;margin-right:10px}.visit-name{color:var(--smarterplan-primary);font-weight:600}.btn-details{background-color:var(--smarterplan-primary-transparent);position:absolute;color:#fff;bottom:0px;right:0px;width:100%;height:30%;border:none;font-size:1em;text-transform:lowercase}#btn-icon{width:30px;height:30px;background:url(../../../../assets/icons/plus.svg);border:none;vertical-align:middle}#btn-icon:hover{background:url(../../../../assets/icons/plus-over.svg)}#btn-icon[disabled]:hover{background:url(../../../../assets/icons/plus.svg)}.outer_circle{background-color:#ebebeb;border-radius:50%;width:32px;height:32px;padding:1px;margin-left:5px}.refreshIcon{color:var(--smarterplan-primary);cursor:pointer}.refreshIcon svg{vertical-align:middle!important}.add-location{width:12vw}.sp-row{display:flex;flex-direction:row}\n"], components: [{ type: i3.TabNavigationComponent, selector: "lib-tab-navigation", inputs: ["menuItems"], outputs: ["onGoBack"] }, { type: i1.SearchBarComponent, selector: "lib-search-bar", inputs: ["searchable", "objectType"], outputs: ["searchEvent"] }, { type: i4.MapComponent, selector: "lib-map", inputs: ["spaces"] }, { type: i5.FormLocationComponent, selector: "lib-form-location", inputs: ["location"], outputs: ["onChange"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "translate": i8.TranslatePipe } });
|
|
141
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: LocationsComponent, decorators: [{
|
|
142
|
+
type: Component,
|
|
143
|
+
args: [{ selector: 'lib-locations', template: "<div class=\"dashboard-tab\">\n <div class=\"header-dashboard-tab\">\n <div class=\"m-3\">\n <lib-tab-navigation (onGoBack)=\"onFormChange(null)\" [menuItems]='menuItems'></lib-tab-navigation>\n <span class=\"ml-3 refreshIcon\" (click)=\"refresh()\" *ngIf=\"!(isAdding)\" ngbTooltip=\"Refresh list\">\n <span class=\"iconify refreshIcon\" data-icon=\"ion:refresh-circle\" data-width=\"35\" data-rotate=\"90deg\"></span>\n </span>\n </div> \n <lib-search-bar *ngIf=\"!isAdding && !isMuseumUser\" [searchable]=\"locations\" [objectType]=\"getSearchType()\"\n (searchEvent)=\"applyResultsSearchBar($event)\"></lib-search-bar>\n \n <div class=\"col-md-8\">\n <div class=\"sp-row\" *ngIf=\"!isAdding && isManager\">\n <button data-testid=\"new-location-btn\" class=\"btn btn-outline-primary rounded-pill add-location\" (click)=\"onAddLocation()\">\n {{'Add location' | translate}}</button>\n <!-- <div class=\"outer_circle\">\n <button id='btn-icon' (click)=\"onAddLocation()\"></button>\n </div> -->\n </div>\n </div>\n </div>\n <hr>\n <div class=\"row\" *ngIf=\"isAdding\">\n <div class=\"col-md-6\">\n <h4>{{'New location' | translate}}</h4>\n </div>\n </div>\n <section *ngIf=\"!isAdding\">\n <div class=\"row\">\n <div class=\"col-sm-12 col-md-12 col-lg-6\" *ngIf=\"filteredLocations\">\n <ul data-testid=\"location-list-container\" class=\"list-group list-group-flush\">\n <li class=\"d-flex justify-content-between list-group-item\"\n *ngFor=\"let loc of filteredLocations; index as index\">\n <div class=\"d-flex\">\n <div class=\"col-md-5 img-main-container\">\n <div id=\"img_container\">\n <img class=\"location-img\" *ngIf=\"loc.annexes; else elseBlock\" [src]=\"loc.annexes\">\n <ng-template #elseBlock><img class=\"location-img\"\n src=\"./../../../../assets/images/visuel-off-big.jpg\" />\n </ng-template>\n <button [ngClass]=\"['open-btn-'+getStringNoSpace(loc.name)]\" *ngIf=\"isManagerForSpace(loc.id)\" class=\"btn-details\" (click)=\"onDetailViewClick(loc.id)\">\n {{'View details' | translate}}</button>\n </div>\n \n </div>\n <div class=\"col-md-7 location-info\">\n <p>{{loc.name}}</p>\n <p>{{loc.addresses}}</p>\n <p [ngClass]=\"['view-btn-'+getStringNoSpace(loc.name)]\" *ngFor=\"let visit of loc.visits\" (click)=\"onVisitClick(loc, visit)\" class=\"visit-name\"\n [style.cursor]=\"'pointer'\" ngbTooltip=\"Visit\">{{ visit.name ? visit.name : loc.name}}</p>\n </div>\n </div>\n </li>\n \n </ul>\n </div>\n <div class=\"col-sm-12 col-md-12 col-lg-6\">\n <lib-map [spaces]=\"filteredLocations\"></lib-map>\n </div>\n </div>\n </section>\n <lib-form-location *ngIf=\"isAdding\" (onChange)=\"onFormChange($event)\"></lib-form-location>\n</div>\n", styles: [".searchbar{margin-bottom:10px}input[type=file]{display:none}.form-control{border-radius:var(--form-control-border-radius)}.custom-select{border-color:var(--smarterplan-primary);width:auto}.form-new-loc{background-color:#d3d3d3;padding-top:10px;padding-bottom:10px;margin-bottom:15px}.btn-outline-primary{background-color:#fff}h4{color:var(--smarterplan-primary)}section .list-group{margin-top:15px}section .list-group-item{padding:5px 0}section .location-info{font-size:1.1em}section .location-img{width:100%;object-fit:cover;object-position:center bottom;height:165px}#img_container{position:relative;display:inline-block;text-align:center;width:250px}.img-main-container{max-width:250px;width:250px!important;margin-right:10px}.visit-name{color:var(--smarterplan-primary);font-weight:600}.btn-details{background-color:var(--smarterplan-primary-transparent);position:absolute;color:#fff;bottom:0px;right:0px;width:100%;height:30%;border:none;font-size:1em;text-transform:lowercase}#btn-icon{width:30px;height:30px;background:url(../../../../assets/icons/plus.svg);border:none;vertical-align:middle}#btn-icon:hover{background:url(../../../../assets/icons/plus-over.svg)}#btn-icon[disabled]:hover{background:url(../../../../assets/icons/plus.svg)}.outer_circle{background-color:#ebebeb;border-radius:50%;width:32px;height:32px;padding:1px;margin-left:5px}.refreshIcon{color:var(--smarterplan-primary);cursor:pointer}.refreshIcon svg{vertical-align:middle!important}.add-location{width:12vw}.sp-row{display:flex;flex-direction:row}\n"] }]
|
|
144
|
+
}], ctorParameters: function () { return [{ type: i1.SpaceService }, { type: i2.Router }, { type: i1.BaseUserService }, { type: i1.ViewerService }, { type: i1.NavigationService }, { type: i1.NavigatorService }]; } });
|
|
145
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYXRpb25zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1sb2NhdGlvbnMvc3JjL2xpYi9jb21wb25lbnRzL2xvY2F0aW9ucy9sb2NhdGlvbnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy9zcmMvbGliL2NvbXBvbmVudHMvbG9jYXRpb25zL2xvY2F0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBR2xELE9BQU8sRUFBRSxXQUFXLEVBQTRGLFdBQVcsRUFBbUIsZ0JBQWdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7Ozs7OztBQVExTSxNQUFNLE9BQU8sa0JBQWtCO0lBMkIzQixZQUNZLFlBQTBCLEVBQzFCLE1BQWMsRUFDZCxXQUE0QixFQUM1QixhQUE0QixFQUM1QixpQkFBb0MsRUFDcEMsZ0JBQWtDO1FBTGxDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBekI5QyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWpCLHNCQUFpQixHQUFZLEVBQUUsQ0FBQztRQUVoQyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWxCLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBRXBCLGNBQVMsR0FBWSxFQUFFLENBQUM7UUFFeEIsY0FBUyxHQUFlLEVBQUUsQ0FBQztRQU0zQixrR0FBa0c7UUFDbEcseUJBQW9CLEdBQVksRUFBRSxDQUFDO1FBVS9CLElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDeEUsSUFBSSxXQUFXLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQ2xCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsc0JBQXNCO1lBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTtnQkFDcEQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDMUIsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVE7UUFDVixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUMzQjtRQUNELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBR0QsYUFBYSxDQUFDLEVBQVU7UUFDcEIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsc0JBQXNCLENBQUMsRUFBVztRQUM5QixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNqRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQywrQ0FBK0M7SUFDekgsQ0FBQztJQUVELE9BQU87UUFDSCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUdELFdBQVc7UUFDUCxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsY0FBYztRQUNWLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFDcEUsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztTQUN6QztRQUNELElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDckMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ3BEO0lBQ0wsQ0FBQztJQUVELGdCQUFnQjtRQUNaLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQy9ELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzdELENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxPQUFlO1FBQzdCLE9BQU8sQ0FDSCxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7WUFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQ3BDLENBQUM7SUFDTixDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVM7UUFDWCxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ3RFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQzNDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxzQkFBc0IsQ0FDdkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLHVCQUF1QixDQUNoRCxDQUFDLENBQUMsd0NBQXdDO1FBQzNDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsYUFBYTtRQUNULElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBZTtRQUM1QixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFVO1FBQ25CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQ3ZDLElBQUksQ0FDUCxDQUFDLENBQUMsK0JBQStCO1FBQ2xDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksS0FBSyxFQUFFO1lBQ1AsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ3BCO1FBQ0QsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQVUsRUFBRSxLQUFZO1FBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLDhCQUE4QixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUMxRCxpQ0FBaUM7WUFDakMsTUFBTSxhQUFhLEdBQ2YsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsaUNBQWlDLENBQzFELEdBQUcsQ0FBQyxFQUFFLENBQ1QsQ0FBQztZQUNOLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNqRDtRQUNELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQzVDO2FBQU07WUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0JBQ3BDLFdBQVcsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFO2FBQzFDLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUVELHFCQUFxQixDQUFDLE9BQWdCO1FBQ2xDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNuRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQ25ELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyx3RUFBd0U7SUFDL0gsQ0FBQztJQUVELGFBQWE7UUFDVCxPQUFPLGdCQUFnQixDQUFDLFFBQVEsQ0FBQztJQUNyQyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBSTtRQUNqQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxPQUFlO1FBQzdCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQywwQ0FBMEM7UUFDaEcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzlELENBQUM7OytHQTVLUSxrQkFBa0I7bUdBQWxCLGtCQUFrQixxRENYL0IsaXJHQStEQTsyRkRwRGEsa0JBQWtCO2tCQUw5QixTQUFTOytCQUNJLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IExldmVsU3RhdHVzLCBTcGFjZSwgU3BhY2VTZXJ2aWNlLCBCYXNlVXNlclNlcnZpY2UsIFZpZXdlclNlcnZpY2UsIE5hdmlnYXRpb25TZXJ2aWNlLCBOYXZpZ2F0b3JTZXJ2aWNlLCBlbnVtVG9BcnJheSwgVmlzaXQsIE1lbnVJdGVtLCBTZWFyY2hPYmplY3RUeXBlIH0gZnJvbSAnQHNtYXJ0ZXJwbGFuL25neC1zbWFydGVycGxhbi1jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2xpYi1sb2NhdGlvbnMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9sb2NhdGlvbnMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2xvY2F0aW9ucy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIExvY2F0aW9uc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBjcmVhdGVGb3JtOiBGb3JtR3JvdXA7XG5cbiAgICBsZXZlbHM6IEFycmF5PExldmVsU3RhdHVzPjtcblxuICAgIGltYWdlVG9VcGxvYWQ6IEZpbGU7XG5cbiAgICBpc0FkZGluZyA9IGZhbHNlO1xuXG4gICAgZmlsdGVyZWRMb2NhdGlvbnM6IFNwYWNlW10gPSBbXTtcblxuICAgIGlzTWFuYWdlciA9IGZhbHNlO1xuXG4gICAgaXNNdXNldW1Vc2VyID0gdHJ1ZTtcblxuICAgIGxvY2F0aW9uczogU3BhY2VbXSA9IFtdO1xuXG4gICAgbWVudUl0ZW1zOiBNZW51SXRlbVtdID0gW107XG5cbiAgICB1c2VyU3ViY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIGxvY2F0aW9uSURTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIC8qKiBMYXN0IGZpbHRlcmVkIExvY2F0aW9ucywgdXNlZCB3aGVuIHdlIGdvIGJhY2sgb24gYWxsIGxvY2F0aW9ucyBmcm9tIHRoZSBzZWFyY2ggYmFyIGxvY2F0aW9uICovXG4gICAgbGFzdEZpbHRyZWRMb2NhdGlvbnM6IFNwYWNlW10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHNwYWNlU2VydmljZTogU3BhY2VTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBCYXNlVXNlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdmlld2VyU2VydmljZTogVmlld2VyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBuYXZpZ2F0aW9uU2VydmljZTogTmF2aWdhdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbmF2aWdhdG9yU2VydmljZTogTmF2aWdhdG9yU2VydmljZSxcbiAgICApIHtcbiAgICAgICAgdGhpcy5sZXZlbHMgPSBlbnVtVG9BcnJheShMZXZlbFN0YXR1cyk7XG4gICAgICAgIHRoaXMudXNlclN1YmNyaXB0aW9uID0gdGhpcy51c2VyU2VydmljZS5pc0NoYW5nZWQuc3Vic2NyaWJlKChpc0Nvbm5lY3RlZCkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzQ29ubmVjdGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubG9jYXRpb25JRFN1YnNjcmlwdGlvbiA9XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRvclNlcnZpY2UubG9jYXRpb25JRENoYW5nZS5zdWJzY3JpYmUoKGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VTZWxlY3RlZExvY2F0aW9uKGlkKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHVwTWVudUl0ZW1zKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMudXNlclNlcnZpY2UuY3UpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRMaXN0KCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVVzZXJSaWdodHMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldHVwTWVudUl0ZW1zKCk7XG4gICAgfVxuXG5cbiAgICBmaW5kU3BhY2VCeUlkKGlkOiBzdHJpbmcpOiBTcGFjZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2F0aW9ucy5maW5kKChsb2MpID0+IGxvYy5pZCA9PT0gaWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSB3aGVuIHdlIGNoYW5nZSB0aGUgc2VsZWN0ZWQgbG9jYXRpb24gaW4gZmlsdGVyIChzZWFyY2ggYmFyKVxuICAgICAqIEBwYXJhbSBpZCBmb3IgYSBsb2NhdGlvbiwgaWYgbnVsbCBkaXNwbGF5IGFsbCBsYXN0IGZpbHRyZWQgbG9jYXRpb25cbiAgICAgKi9cbiAgICBjaGFuZ2VTZWxlY3RlZExvY2F0aW9uKGlkPzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHNwYWNlID0gaWQgPyB0aGlzLmZpbmRTcGFjZUJ5SWQoaWQpIDogbnVsbDtcbiAgICAgICAgdGhpcy5maWx0ZXJlZExvY2F0aW9ucyA9IHNwYWNlID8gW3NwYWNlXSA6IHRoaXMubGFzdEZpbHRyZWRMb2NhdGlvbnM7IC8vIE5ldyBzZWxlY3RlZCBzcGFjZSBvciBsYXN0IGZpbHRlcmVkIGxvY2F0aW9uXG4gICAgfVxuXG4gICAgcmVmcmVzaCgpIHtcbiAgICAgICAgdGhpcy51cGRhdGVVc2VyUmlnaHRzKCk7XG4gICAgICAgIHRoaXMucmVzZXRMaXN0KCk7XG4gICAgfVxuXG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy51c2VyU3ViY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5sb2NhdGlvbklEU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgc2V0dXBNZW51SXRlbXMoKSB7XG4gICAgICAgIHRoaXMubWVudUl0ZW1zID0gW3sgbGFiZWw6IFwiQWxsIExvY2F0aW9uc1wiLCB1cmw6IFwiL2xvY2FsaXNhdGlvblwiIH1dO1xuICAgICAgICBpZiAodGhpcy5pc0FkZGluZykge1xuICAgICAgICAgICAgdGhpcy5tZW51SXRlbXMucHVzaCh7IGxhYmVsOiBcIk5ld1wiIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZpbHRlcmVkTG9jYXRpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRMb2MgPSB0aGlzLmZpbHRlcmVkTG9jYXRpb25zWzBdO1xuICAgICAgICAgICAgdGhpcy5tZW51SXRlbXMucHVzaCh7IGxhYmVsOiBzZWxlY3RlZExvYy5uYW1lIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlVXNlclJpZ2h0cygpIHtcbiAgICAgICAgdGhpcy5pc01hbmFnZXIgPSB0aGlzLnVzZXJTZXJ2aWNlLmhhc01hbmFnZXJSb2xlSW5BbnlNaXNzaW9uKCk7XG4gICAgICAgIHRoaXMuaXNNdXNldW1Vc2VyID0gdGhpcy51c2VyU2VydmljZS5oYXNPbmx5TXVzZXVtUm9sZSgpO1xuICAgIH1cblxuICAgIGlzTWFuYWdlckZvclNwYWNlKHNwYWNlSUQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy51c2VyU2VydmljZS5pc01hbmFnZXIoc3BhY2VJRCkgfHxcbiAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2UuaXNHdWlkZShzcGFjZUlEKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGFzeW5jIHJlc2V0TGlzdCgpIHtcbiAgICAgICAgdGhpcy5sb2NhdGlvbnMgPSBhd2FpdCB0aGlzLnNwYWNlU2VydmljZS5nZXRMb2NhdGlvbnNGb3JDdXJyZW50VXNlcigpO1xuICAgICAgICB0aGlzLmZpbHRlcmVkTG9jYXRpb25zID0gdGhpcy5sb2NhdGlvbnM7XG4gICAgICAgIHRoaXMubGFzdEZpbHRyZWRMb2NhdGlvbnMgPSB0aGlzLmxvY2F0aW9ucztcbiAgICAgICAgdGhpcy5pc0FkZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNoYW5nZVNlbGVjdGVkTG9jYXRpb24oXG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRvclNlcnZpY2UuY3VycmVudE5hdkJhckxvY2F0aW9uSUQsXG4gICAgICAgICk7IC8vIFNldCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgbG9jYXRpb25cbiAgICAgICAgdGhpcy5zZXR1cE1lbnVJdGVtcygpO1xuICAgIH1cblxuICAgIG9uQWRkTG9jYXRpb24oKSB7XG4gICAgICAgIHRoaXMuaXNBZGRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnNldHVwTWVudUl0ZW1zKCk7XG4gICAgfVxuXG4gICAgaGFuZGxlSW1hZ2VJbnB1dChmaWxlczogRmlsZUxpc3QpIHtcbiAgICAgICAgdGhpcy5pbWFnZVRvVXBsb2FkID0gZmlsZXMuaXRlbSgwKTtcbiAgICB9XG5cbiAgICBvbkZvcm1DaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgICAgICB0aGlzLm5hdmlnYXRvclNlcnZpY2UubG9jYXRpb25JRENoYW5nZS5uZXh0KFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgKTsgLyoqIFJlbW92ZSBzZWxlY3RlZCBsb2NhdGlvbiAqL1xuICAgICAgICB0aGlzLmlzQWRkaW5nID0gZmFsc2U7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgdGhpcy5yZXNldExpc3QoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldHVwTWVudUl0ZW1zKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgb25WaXNpdENsaWNrKGxvYzogU3BhY2UsIHZpc2l0OiBWaXNpdCkge1xuICAgICAgICBpZiAoIXRoaXMudXNlclNlcnZpY2UudXNlckhhc0FjY2Vzc1RvQWxsWm9uZXNJblNwYWNlKGxvYy5pZCkpIHtcbiAgICAgICAgICAgIC8vIGdldCBhbGxvd2VkIHN3ZWVwIGZvciB0aGUgdXNlclxuICAgICAgICAgICAgY29uc3QgYWxsb3dlZFN3ZWVwcyA9XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRBbGxvd2VkU3dlZXBzSURzRm9yVXNlckluU3BhY2UoXG4gICAgICAgICAgICAgICAgICAgIGxvYy5pZCxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgZmlyc3RTd2VlcCA9IGFsbG93ZWRTd2VlcHNbMF07XG4gICAgICAgICAgICB0aGlzLnZpZXdlclNlcnZpY2Uuc2V0U3dlZXBUb01vdmUoZmlyc3RTd2VlcCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudXNlclNlcnZpY2UuaXNHdWlkZShsb2MuaWQpKSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJtdXNldW1cIiwgbG9jLmlkXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJ2aXNpdFwiLCBsb2MuaWRdLCB7XG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHsgbW9kZWwzRDogdmlzaXQubW9kZWwzZCB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhcHBseVJlc3VsdHNTZWFyY2hCYXIocmVzdWx0czogU3BhY2VbXSkge1xuICAgICAgICB0aGlzLmZpbHRlcmVkTG9jYXRpb25zID0gcmVzdWx0cyB8fCB0aGlzLmxvY2F0aW9ucztcbiAgICAgICAgdGhpcy5sYXN0RmlsdHJlZExvY2F0aW9ucyA9IHRoaXMuZmlsdGVyZWRMb2NhdGlvbnM7XG4gICAgICAgIHRoaXMubmF2aWdhdG9yU2VydmljZS5sb2NhdGlvbklEQ2hhbmdlLm5leHQobnVsbCk7IC8vIFdoZW4gd2Ugc2VhcmNoIHdpdGgga2V5d29yZCwgd2Ugd291bGQgbGlrZSB0byBzZWFyY2ggb24gYWxsIGxvY2F0aW9uc1xuICAgIH1cblxuICAgIGdldFNlYXJjaFR5cGUoKTogU2VhcmNoT2JqZWN0VHlwZSB7XG4gICAgICAgIHJldHVybiBTZWFyY2hPYmplY3RUeXBlLkxPQ0FUSU9OO1xuICAgIH1cblxuICAgIGdldFN0cmluZ05vU3BhY2UoZGF0YSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBkYXRhLnJlcGxhY2UoL1xccy9nLCAnJyk7XG4gICAgfVxuXG4gICAgb25EZXRhaWxWaWV3Q2xpY2soc3BhY2VJRDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMubmF2aWdhdG9yU2VydmljZS5sb2NhdGlvbklEQ2hhbmdlLm5leHQoc3BhY2VJRCk7IC8vIFNlbmQgdXBkYXRlIGZvciB0aGUgbG9jYXRpb24gZmlsdGVyIGJhclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJkYXNoYm9hcmQvbG9jYWxpc2F0aW9uXCIsIHNwYWNlSURdKTtcbiAgICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJkYXNoYm9hcmQtdGFiXCI+XG4gICAgPGRpdiBjbGFzcz1cImhlYWRlci1kYXNoYm9hcmQtdGFiXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibS0zXCI+XG4gICAgICAgIDxsaWItdGFiLW5hdmlnYXRpb24gKG9uR29CYWNrKT1cIm9uRm9ybUNoYW5nZShudWxsKVwiIFttZW51SXRlbXNdPSdtZW51SXRlbXMnPjwvbGliLXRhYi1uYXZpZ2F0aW9uPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1sLTMgcmVmcmVzaEljb25cIiAoY2xpY2spPVwicmVmcmVzaCgpXCIgKm5nSWY9XCIhKGlzQWRkaW5nKVwiIG5nYlRvb2x0aXA9XCJSZWZyZXNoIGxpc3RcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb25pZnkgcmVmcmVzaEljb25cIiBkYXRhLWljb249XCJpb246cmVmcmVzaC1jaXJjbGVcIiBkYXRhLXdpZHRoPVwiMzVcIiBkYXRhLXJvdGF0ZT1cIjkwZGVnXCI+PC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj4gIFxuICAgICAgPGxpYi1zZWFyY2gtYmFyICpuZ0lmPVwiIWlzQWRkaW5nICYmICFpc011c2V1bVVzZXJcIiBbc2VhcmNoYWJsZV09XCJsb2NhdGlvbnNcIiBbb2JqZWN0VHlwZV09XCJnZXRTZWFyY2hUeXBlKClcIlxuICAgICAgICAoc2VhcmNoRXZlbnQpPVwiYXBwbHlSZXN1bHRzU2VhcmNoQmFyKCRldmVudClcIj48L2xpYi1zZWFyY2gtYmFyPlxuICAgICAgXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLThcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNwLXJvd1wiICpuZ0lmPVwiIWlzQWRkaW5nICYmIGlzTWFuYWdlclwiPlxuICAgICAgICAgIDxidXR0b24gZGF0YS10ZXN0aWQ9XCJuZXctbG9jYXRpb24tYnRuXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgYWRkLWxvY2F0aW9uXCIgKGNsaWNrKT1cIm9uQWRkTG9jYXRpb24oKVwiPlxuICAgICAgICAgICAge3snQWRkIGxvY2F0aW9uJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XG4gICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwib3V0ZXJfY2lyY2xlXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGlkPSdidG4taWNvbicgKGNsaWNrKT1cIm9uQWRkTG9jYXRpb24oKVwiPjwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8aHI+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwiaXNBZGRpbmdcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICA8aDQ+e3snTmV3IGxvY2F0aW9uJyB8IHRyYW5zbGF0ZX19PC9oND5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxzZWN0aW9uICpuZ0lmPVwiIWlzQWRkaW5nXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTEyIGNvbC1sZy02XCIgKm5nSWY9XCJmaWx0ZXJlZExvY2F0aW9uc1wiPlxuICAgICAgICAgIDx1bCBkYXRhLXRlc3RpZD1cImxvY2F0aW9uLWxpc3QtY29udGFpbmVyXCIgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIj5cbiAgICAgICAgICAgIDxsaSBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBsaXN0LWdyb3VwLWl0ZW1cIlxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgbG9jIG9mIGZpbHRlcmVkTG9jYXRpb25zOyBpbmRleCBhcyBpbmRleFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC01IGltZy1tYWluLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cImltZ19jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImxvY2F0aW9uLWltZ1wiICpuZ0lmPVwibG9jLmFubmV4ZXM7IGVsc2UgZWxzZUJsb2NrXCIgW3NyY109XCJsb2MuYW5uZXhlc1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Vsc2VCbG9jaz48aW1nIGNsYXNzPVwibG9jYXRpb24taW1nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cIi4vLi4vLi4vLi4vLi4vYXNzZXRzL2ltYWdlcy92aXN1ZWwtb2ZmLWJpZy5qcGdcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFtuZ0NsYXNzXT1cIlsnb3Blbi1idG4tJytnZXRTdHJpbmdOb1NwYWNlKGxvYy5uYW1lKV1cIiAqbmdJZj1cImlzTWFuYWdlckZvclNwYWNlKGxvYy5pZClcIiBjbGFzcz1cImJ0bi1kZXRhaWxzXCIgKGNsaWNrKT1cIm9uRGV0YWlsVmlld0NsaWNrKGxvYy5pZClcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eydWaWV3IGRldGFpbHMnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICBcbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTcgbG9jYXRpb24taW5mb1wiPlxuICAgICAgICAgICAgICAgICAgPHA+e3tsb2MubmFtZX19PC9wPlxuICAgICAgICAgICAgICAgICAgPHA+e3tsb2MuYWRkcmVzc2VzfX08L3A+XG4gICAgICAgICAgICAgICAgICA8cCBbbmdDbGFzc109XCJbJ3ZpZXctYnRuLScrZ2V0U3RyaW5nTm9TcGFjZShsb2MubmFtZSldXCIgKm5nRm9yPVwibGV0IHZpc2l0IG9mIGxvYy52aXNpdHNcIiAoY2xpY2spPVwib25WaXNpdENsaWNrKGxvYywgdmlzaXQpXCIgY2xhc3M9XCJ2aXNpdC1uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmN1cnNvcl09XCIncG9pbnRlcidcIiBuZ2JUb29sdGlwPVwiVmlzaXRcIj57eyB2aXNpdC5uYW1lID8gdmlzaXQubmFtZSA6IGxvYy5uYW1lfX08L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9saT5cbiAgXG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTEyIGNvbC1sZy02XCI+XG4gICAgICAgICAgPGxpYi1tYXAgW3NwYWNlc109XCJmaWx0ZXJlZExvY2F0aW9uc1wiPjwvbGliLW1hcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG4gICAgPGxpYi1mb3JtLWxvY2F0aW9uICpuZ0lmPVwiaXNBZGRpbmdcIiAob25DaGFuZ2UpPVwib25Gb3JtQ2hhbmdlKCRldmVudClcIj48L2xpYi1mb3JtLWxvY2F0aW9uPlxuPC9kaXY+XG4iXX0=
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/router";
|
|
4
|
+
import * as i2 from "@angular/common";
|
|
5
|
+
export class MapPopupComponent {
|
|
6
|
+
constructor(router, ngZone) {
|
|
7
|
+
this.router = router;
|
|
8
|
+
this.ngZone = ngZone;
|
|
9
|
+
this.isOnPopup = false;
|
|
10
|
+
this.isMuseumUser = true;
|
|
11
|
+
}
|
|
12
|
+
ngOnInit() {
|
|
13
|
+
this.marker.on("click", () => this.onClickVisitFirst());
|
|
14
|
+
this.marker.on("mouseover", () => {
|
|
15
|
+
this.isOnPopup = true;
|
|
16
|
+
if (!this.marker.isPopupOpen()) {
|
|
17
|
+
this.openPopup();
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
openPopup() {
|
|
22
|
+
this.marker.openPopup();
|
|
23
|
+
this.isOnPopup = false;
|
|
24
|
+
this.popuparea = document.querySelector(".leaflet-popup");
|
|
25
|
+
this.popuparea.addEventListener("mouseleave", () => {
|
|
26
|
+
this.closePopup();
|
|
27
|
+
});
|
|
28
|
+
this.popuparea.addEventListener("mouseover", () => {
|
|
29
|
+
this.isOnPopup = true;
|
|
30
|
+
});
|
|
31
|
+
this.marker.on("mouseout", () => {
|
|
32
|
+
this.closePopup();
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
closePopup() {
|
|
36
|
+
this.isOnPopup = false;
|
|
37
|
+
/** We want to wait to avoid glitch */
|
|
38
|
+
setTimeout(() => {
|
|
39
|
+
if (!this.isOnPopup) {
|
|
40
|
+
this.marker.closePopup();
|
|
41
|
+
}
|
|
42
|
+
}, 100);
|
|
43
|
+
}
|
|
44
|
+
onClickVisitFirst() {
|
|
45
|
+
if (this.space.visits.length === 0) {
|
|
46
|
+
console.log("No space to visit !");
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
this.onVisitClick(this.space.visits[0]);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
async onVisitClick(visit) {
|
|
53
|
+
this.ngZone.run(() => {
|
|
54
|
+
this.router.navigate(["visit", this.space.id], {
|
|
55
|
+
queryParams: { model3D: visit.model3d },
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
MapPopupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: MapPopupComponent, deps: [{ token: i1.Router }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
|
|
61
|
+
MapPopupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: MapPopupComponent, selector: "lib-map-popup", ngImport: i0, template: "<div id=\"map-popup\">\n <div class=\"map-popup-header\" (click)=\"onClickVisitFirst()\" [style.cursor]=\"'pointer'\">\n <img [src]=\"space.annexes\" />\n </div>\n <div class=\"map-popup-details\">\n <h1 (click)=\"onClickVisitFirst()\" [style.cursor]=\"'pointer'\">{{space.name}}</h1>\n <span class=\"map-popup-address\">{{space.addresses}}</span>\n <span *ngFor=\"let visit of space.visits\" class=\"map-popup-visit\" (click)=\"onVisitClick(visit)\"\n [style.cursor]=\"'pointer'\">\u27A4 {{ visit.name ? visit.name : space.name}}</span>\n </div>\n</div>\n", styles: [".map-popup-header{height:120px;overflow:hidden;border-top-right-radius:20px;border-top-left-radius:20px}.map-popup-header img{width:100%;position:relative;top:50%;transform:translateY(-50%)}.map-popup-details{padding:5px 10px 10px;border-bottom-left-radius:20px;border-bottom-right-radius:20px;background-color:#fff;color:#000}.map-popup-details{display:flex;flex-direction:column}.map-popup-details h1{font-size:1.5rem;font-weight:700;margin-bottom:0;color:var(--smarterplan-primary)}.map-popup-address{align-self:flex-end;margin-bottom:10px}.map-popup-visit{color:var(--smarterplan-primary);font-size:1.15rem}.map-popup-visit:hover{color:var(--smarterplan-primary)}\n"], directives: [{ type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
62
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: MapPopupComponent, decorators: [{
|
|
63
|
+
type: Component,
|
|
64
|
+
args: [{ selector: 'lib-map-popup', template: "<div id=\"map-popup\">\n <div class=\"map-popup-header\" (click)=\"onClickVisitFirst()\" [style.cursor]=\"'pointer'\">\n <img [src]=\"space.annexes\" />\n </div>\n <div class=\"map-popup-details\">\n <h1 (click)=\"onClickVisitFirst()\" [style.cursor]=\"'pointer'\">{{space.name}}</h1>\n <span class=\"map-popup-address\">{{space.addresses}}</span>\n <span *ngFor=\"let visit of space.visits\" class=\"map-popup-visit\" (click)=\"onVisitClick(visit)\"\n [style.cursor]=\"'pointer'\">\u27A4 {{ visit.name ? visit.name : space.name}}</span>\n </div>\n</div>\n", styles: [".map-popup-header{height:120px;overflow:hidden;border-top-right-radius:20px;border-top-left-radius:20px}.map-popup-header img{width:100%;position:relative;top:50%;transform:translateY(-50%)}.map-popup-details{padding:5px 10px 10px;border-bottom-left-radius:20px;border-bottom-right-radius:20px;background-color:#fff;color:#000}.map-popup-details{display:flex;flex-direction:column}.map-popup-details h1{font-size:1.5rem;font-weight:700;margin-bottom:0;color:var(--smarterplan-primary)}.map-popup-address{align-self:flex-end;margin-bottom:10px}.map-popup-visit{color:var(--smarterplan-primary);font-size:1.15rem}.map-popup-visit:hover{color:var(--smarterplan-primary)}\n"] }]
|
|
65
|
+
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i0.NgZone }]; } });
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLXBvcHVwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1sb2NhdGlvbnMvc3JjL2xpYi9jb21wb25lbnRzL2xvY2F0aW9ucy9tYXAvbWFwLXBvcHVwL21hcC1wb3B1cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tbG9jYXRpb25zL3NyYy9saWIvY29tcG9uZW50cy9sb2NhdGlvbnMvbWFwL21hcC1wb3B1cC9tYXAtcG9wdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBa0IsTUFBTSxlQUFlLENBQUM7Ozs7QUFVMUQsTUFBTSxPQUFPLGlCQUFpQjtJQVkxQixZQUFvQixNQUFjLEVBQVUsTUFBYztRQUF0QyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUoxRCxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWxCLGlCQUFZLEdBQUcsSUFBSSxDQUFDO0lBRTBDLENBQUM7SUFFL0QsUUFBUTtRQUNKLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBRXhELElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUU7WUFDN0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQzthQUNwQjtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFNBQVM7UUFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRXhCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRTFELElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTtZQUMvQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUU7WUFDOUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFO1lBQzVCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxVQUFVO1FBQ04sSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsc0NBQXNDO1FBQ3RDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQzthQUM1QjtRQUNMLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNaLENBQUM7SUFFRCxpQkFBaUI7UUFDYixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDaEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1NBQ3RDO2FBQU07WUFDSCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDM0M7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFZO1FBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFO2dCQUMzQyxXQUFXLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRTthQUMxQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7OzhHQWxFUSxpQkFBaUI7a0dBQWpCLGlCQUFpQixxRENWOUIsMmxCQVdBOzJGRERhLGlCQUFpQjtrQkFMN0IsU0FBUzsrQkFDRSxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBOZ1pvbmUsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IE1hcmtlciB9IGZyb20gJ2xlYWZsZXQnO1xuaW1wb3J0IHsgU3BhY2UsIFZpc2l0IH0gZnJvbSAnQHNtYXJ0ZXJwbGFuL25neC1zbWFydGVycGxhbi1jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLW1hcC1wb3B1cCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXAtcG9wdXAuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tYXAtcG9wdXAuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBNYXBQb3B1cENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBzcGFjZTogU3BhY2U7XG5cbiAgICBtYXJrZXI6IE1hcmtlcjtcblxuICAgIHBvcHVwYXJlYTogSFRNTEVsZW1lbnQ7XG5cbiAgICBpc09uUG9wdXAgPSBmYWxzZTtcblxuICAgIGlzTXVzZXVtVXNlciA9IHRydWU7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlcjogUm91dGVyLCBwcml2YXRlIG5nWm9uZTogTmdab25lKSB7IH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLm1hcmtlci5vbihcImNsaWNrXCIsICgpID0+IHRoaXMub25DbGlja1Zpc2l0Rmlyc3QoKSk7XG5cbiAgICAgICAgdGhpcy5tYXJrZXIub24oXCJtb3VzZW92ZXJcIiwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc09uUG9wdXAgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCF0aGlzLm1hcmtlci5pc1BvcHVwT3BlbigpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuUG9wdXAoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb3BlblBvcHVwKCkge1xuICAgICAgICB0aGlzLm1hcmtlci5vcGVuUG9wdXAoKTtcblxuICAgICAgICB0aGlzLmlzT25Qb3B1cCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBvcHVwYXJlYSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIubGVhZmxldC1wb3B1cFwiKTtcblxuICAgICAgICB0aGlzLnBvcHVwYXJlYS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlUG9wdXAoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucG9wdXBhcmVhLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW92ZXJcIiwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc09uUG9wdXAgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5tYXJrZXIub24oXCJtb3VzZW91dFwiLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlUG9wdXAoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2xvc2VQb3B1cCgpIHtcbiAgICAgICAgdGhpcy5pc09uUG9wdXAgPSBmYWxzZTtcbiAgICAgICAgLyoqIFdlIHdhbnQgdG8gd2FpdCB0byBhdm9pZCBnbGl0Y2ggKi9cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNPblBvcHVwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXJrZXIuY2xvc2VQb3B1cCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCAxMDApO1xuICAgIH1cblxuICAgIG9uQ2xpY2tWaXNpdEZpcnN0KCkge1xuICAgICAgICBpZiAodGhpcy5zcGFjZS52aXNpdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIk5vIHNwYWNlIHRvIHZpc2l0ICFcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9uVmlzaXRDbGljayh0aGlzLnNwYWNlLnZpc2l0c1swXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBvblZpc2l0Q2xpY2sodmlzaXQ6IFZpc2l0KSB7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJ2aXNpdFwiLCB0aGlzLnNwYWNlLmlkXSwge1xuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7IG1vZGVsM0Q6IHZpc2l0Lm1vZGVsM2QgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbn1cbiIsIjxkaXYgaWQ9XCJtYXAtcG9wdXBcIj5cbiAgICA8ZGl2IGNsYXNzPVwibWFwLXBvcHVwLWhlYWRlclwiIChjbGljayk9XCJvbkNsaWNrVmlzaXRGaXJzdCgpXCIgW3N0eWxlLmN1cnNvcl09XCIncG9pbnRlcidcIj5cbiAgICAgICAgPGltZyBbc3JjXT1cInNwYWNlLmFubmV4ZXNcIiAvPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJtYXAtcG9wdXAtZGV0YWlsc1wiPlxuICAgIDxoMSAoY2xpY2spPVwib25DbGlja1Zpc2l0Rmlyc3QoKVwiIFtzdHlsZS5jdXJzb3JdPVwiJ3BvaW50ZXInXCI+e3tzcGFjZS5uYW1lfX08L2gxPlxuICAgIDxzcGFuIGNsYXNzPVwibWFwLXBvcHVwLWFkZHJlc3NcIj57e3NwYWNlLmFkZHJlc3Nlc319PC9zcGFuPlxuICAgIDxzcGFuICpuZ0Zvcj1cImxldCB2aXNpdCBvZiBzcGFjZS52aXNpdHNcIiBjbGFzcz1cIm1hcC1wb3B1cC12aXNpdFwiIChjbGljayk9XCJvblZpc2l0Q2xpY2sodmlzaXQpXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5jdXJzb3JdPVwiJ3BvaW50ZXInXCI+4p6kIHt7IHZpc2l0Lm5hbWUgPyB2aXNpdC5uYW1lIDogc3BhY2UubmFtZX19PC9zcGFuPlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { latLng, marker, tileLayer, latLngBounds, point, Marker, icon, } from "leaflet";
|
|
3
|
+
import { MapPopupComponent } from './map-popup/map-popup.component';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@asymmetrik/ngx-leaflet";
|
|
6
|
+
const iconRetinaUrl = "assets/marker-icon-2x.png";
|
|
7
|
+
const iconUrl = "assets/marker-icon.png";
|
|
8
|
+
const shadowUrl = "assets/marker-shadow.png";
|
|
9
|
+
const iconDefault = icon({
|
|
10
|
+
iconRetinaUrl,
|
|
11
|
+
iconUrl,
|
|
12
|
+
shadowUrl,
|
|
13
|
+
iconSize: [25, 41],
|
|
14
|
+
iconAnchor: [12, 41],
|
|
15
|
+
popupAnchor: [1, -34],
|
|
16
|
+
tooltipAnchor: [16, -28],
|
|
17
|
+
shadowSize: [41, 41],
|
|
18
|
+
});
|
|
19
|
+
Marker.prototype.options.icon = iconDefault;
|
|
20
|
+
export class MapComponent {
|
|
21
|
+
constructor(componentFactoryResolver, injector) {
|
|
22
|
+
this.componentFactoryResolver = componentFactoryResolver;
|
|
23
|
+
this.injector = injector;
|
|
24
|
+
this.options = {
|
|
25
|
+
layers: [
|
|
26
|
+
tileLayer("http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", {
|
|
27
|
+
maxZoom: 18,
|
|
28
|
+
attribution: "...",
|
|
29
|
+
}),
|
|
30
|
+
],
|
|
31
|
+
zoom: 5.5,
|
|
32
|
+
center: latLng(47.06394, 2.77736),
|
|
33
|
+
};
|
|
34
|
+
this.layers = [];
|
|
35
|
+
}
|
|
36
|
+
ngOnChanges(changes) {
|
|
37
|
+
if (changes.spaces) {
|
|
38
|
+
const nm = [];
|
|
39
|
+
const bd = [];
|
|
40
|
+
if (!changes.spaces.currentValue) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
// Filtering out spaces without lat/longitudes
|
|
44
|
+
for (const s of changes.spaces.currentValue) {
|
|
45
|
+
if (s.latitude === null || s.longitude === null) {
|
|
46
|
+
console.log(`${s.name} has not coordinates for ${s.addresses}`);
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
// We use the popup system from leaflet, as it packs a few improvements
|
|
50
|
+
// on using bootstrap: autoclose other popups, closing option.
|
|
51
|
+
const m = marker([s.latitude, s.longitude]);
|
|
52
|
+
m.bindPopup(this.createPopupComponent(s, m));
|
|
53
|
+
nm.push(m);
|
|
54
|
+
bd.push(latLng(s.latitude, s.longitude));
|
|
55
|
+
}
|
|
56
|
+
// Note how we set the layers in one assignment, in order to have leaflet
|
|
57
|
+
// detects the change correctly
|
|
58
|
+
// We also set the bounds afterward, for the map to be properly zoomed and
|
|
59
|
+
// centered
|
|
60
|
+
this.layers = nm;
|
|
61
|
+
if (this.map && bd.length > 0) {
|
|
62
|
+
this.map.fitBounds(latLngBounds(bd), {
|
|
63
|
+
padding: point(48, 48),
|
|
64
|
+
maxZoom: 12,
|
|
65
|
+
animate: true,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
onMapReady(map) {
|
|
71
|
+
this.map = map;
|
|
72
|
+
}
|
|
73
|
+
createPopupComponent(space, marker) {
|
|
74
|
+
const comp = this.componentFactoryResolver
|
|
75
|
+
.resolveComponentFactory(MapPopupComponent)
|
|
76
|
+
.create(this.injector);
|
|
77
|
+
comp.instance.space = space;
|
|
78
|
+
comp.instance.marker = marker;
|
|
79
|
+
comp.changeDetectorRef.detectChanges();
|
|
80
|
+
return comp.location.nativeElement;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
MapComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: MapComponent, deps: [{ token: i0.ComponentFactoryResolver }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
|
|
84
|
+
MapComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: MapComponent, selector: "lib-map", inputs: { spaces: "spaces" }, usesOnChanges: true, ngImport: i0, template: "<div [leafletLayers]=\"layers\" [leafletOptions]=\"options\" (leafletMapReady)=\"onMapReady($event)\" id=\"map\" leaflet\n style=\"height: 500px; margin-top: 30px; z-index: 195\"></div>\n", styles: [""], directives: [{ type: i1.LeafletDirective, selector: "[leaflet]", inputs: ["leafletFitBoundsOptions", "leafletPanOptions", "leafletZoomOptions", "leafletZoomPanOptions", "leafletOptions", "leafletZoom", "leafletCenter", "leafletFitBounds", "leafletMaxBounds", "leafletMinZoom", "leafletMaxZoom"], outputs: ["leafletMapReady", "leafletZoomChange", "leafletCenterChange", "leafletClick", "leafletDoubleClick", "leafletMouseDown", "leafletMouseUp", "leafletMouseMove", "leafletMouseOver", "leafletMouseOut", "leafletMapMove", "leafletMapMoveStart", "leafletMapMoveEnd", "leafletMapZoom", "leafletMapZoomStart", "leafletMapZoomEnd"] }, { type: i1.LeafletLayersDirective, selector: "[leafletLayers]", inputs: ["leafletLayers"] }] });
|
|
85
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: MapComponent, decorators: [{
|
|
86
|
+
type: Component,
|
|
87
|
+
args: [{ selector: 'lib-map', template: "<div [leafletLayers]=\"layers\" [leafletOptions]=\"options\" (leafletMapReady)=\"onMapReady($event)\" id=\"map\" leaflet\n style=\"height: 500px; margin-top: 30px; z-index: 195\"></div>\n", styles: [""] }]
|
|
88
|
+
}], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i0.Injector }]; }, propDecorators: { spaces: [{
|
|
89
|
+
type: Input
|
|
90
|
+
}] } });
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1sb2NhdGlvbnMvc3JjL2xpYi9jb21wb25lbnRzL2xvY2F0aW9ucy9tYXAvbWFwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1sb2NhdGlvbnMvc3JjL2xpYi9jb21wb25lbnRzL2xvY2F0aW9ucy9tYXAvbWFwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXNDLEtBQUssRUFBc0QsTUFBTSxlQUFlLENBQUM7QUFFekksT0FBTyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLElBQUksR0FDTCxNQUFNLFNBQVMsQ0FBQztBQUNqQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7O0FBSXBFLE1BQU0sYUFBYSxHQUFHLDJCQUEyQixDQUFDO0FBQ2xELE1BQU0sT0FBTyxHQUFHLHdCQUF3QixDQUFDO0FBQ3pDLE1BQU0sU0FBUyxHQUFHLDBCQUEwQixDQUFDO0FBQzdDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQztJQUNyQixhQUFhO0lBQ2IsT0FBTztJQUNQLFNBQVM7SUFDVCxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xCLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDcEIsV0FBVyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ3JCLGFBQWEsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUN4QixVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0NBQ3ZCLENBQUMsQ0FBQztBQUNILE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUM7QUFNNUMsTUFBTSxPQUFPLFlBQVk7SUFFdkIsWUFBb0Isd0JBQWtELEVBQzVELFFBQWtCO1FBRFIsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUM1RCxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBSTFCLFlBQU8sR0FBRztZQUNOLE1BQU0sRUFBRTtnQkFDSixTQUFTLENBQUMsbURBQW1ELEVBQUU7b0JBQzNELE9BQU8sRUFBRSxFQUFFO29CQUNYLFdBQVcsRUFBRSxLQUFLO2lCQUNyQixDQUFDO2FBQ0w7WUFDRCxJQUFJLEVBQUUsR0FBRztZQUNULE1BQU0sRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQztTQUNwQyxDQUFDO1FBRUYsV0FBTSxHQUFVLEVBQUUsQ0FBQztJQWZZLENBQUM7SUFtQmhDLFdBQVcsQ0FBQyxPQUFzQjtRQUM5QixJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDaEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ2QsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFO2dCQUM5QixPQUFPO2FBQ1Y7WUFDRCw4Q0FBOEM7WUFDOUMsS0FBSyxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLFlBQXVCLEVBQUU7Z0JBQ3BELElBQUksQ0FBQyxDQUFDLFFBQVEsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLFNBQVMsS0FBSyxJQUFJLEVBQUU7b0JBQzdDLE9BQU8sQ0FBQyxHQUFHLENBQ1AsR0FBRyxDQUFDLENBQUMsSUFBSSw0QkFBNEIsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUNyRCxDQUFDO29CQUNGLFNBQVM7aUJBQ1o7Z0JBQ0QsdUVBQXVFO2dCQUN2RSw4REFBOEQ7Z0JBQzlELE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBRTVDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUU3QyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNYLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7YUFDNUM7WUFDRCx5RUFBeUU7WUFDekUsK0JBQStCO1lBQy9CLDBFQUEwRTtZQUMxRSxXQUFXO1lBQ1gsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDakIsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUU7b0JBQ2pDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztvQkFDdEIsT0FBTyxFQUFFLEVBQUU7b0JBQ1gsT0FBTyxFQUFFLElBQUk7aUJBQ2hCLENBQUMsQ0FBQzthQUNOO1NBQ0o7SUFDTCxDQUFDO0lBRUQsVUFBVSxDQUFDLEdBQVE7UUFDZixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNuQixDQUFDO0lBRUQsb0JBQW9CLENBQUMsS0FBWSxFQUFFLE1BQWM7UUFDN0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLHdCQUF3QjthQUN6Qyx1QkFBdUIsQ0FBQyxpQkFBaUIsQ0FBQzthQUMxQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDOUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUM7SUFDdkMsQ0FBQzs7eUdBekVRLFlBQVk7NkZBQVosWUFBWSxrR0NuQ3pCLGdNQUVBOzJGRGlDYSxZQUFZO2tCQUx4QixTQUFTOytCQUNFLFNBQVM7c0lBU1YsTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIEluamVjdG9yLCBJbnB1dCwgTmdab25lLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNwYWNlIH0gZnJvbSAnQHNtYXJ0ZXJwbGFuL25neC1zbWFydGVycGxhbi1jb3JlJztcbmltcG9ydCB7XG4gIGxhdExuZyxcbiAgbWFya2VyLFxuICB0aWxlTGF5ZXIsXG4gIE1hcCxcbiAgbGF0TG5nQm91bmRzLFxuICBwb2ludCxcbiAgTWFya2VyLFxuICBpY29uLFxufSBmcm9tIFwibGVhZmxldFwiO1xuaW1wb3J0IHsgTWFwUG9wdXBDb21wb25lbnQgfSBmcm9tICcuL21hcC1wb3B1cC9tYXAtcG9wdXAuY29tcG9uZW50JztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cblxuY29uc3QgaWNvblJldGluYVVybCA9IFwiYXNzZXRzL21hcmtlci1pY29uLTJ4LnBuZ1wiO1xuY29uc3QgaWNvblVybCA9IFwiYXNzZXRzL21hcmtlci1pY29uLnBuZ1wiO1xuY29uc3Qgc2hhZG93VXJsID0gXCJhc3NldHMvbWFya2VyLXNoYWRvdy5wbmdcIjtcbmNvbnN0IGljb25EZWZhdWx0ID0gaWNvbih7XG4gICAgaWNvblJldGluYVVybCxcbiAgICBpY29uVXJsLFxuICAgIHNoYWRvd1VybCxcbiAgICBpY29uU2l6ZTogWzI1LCA0MV0sXG4gICAgaWNvbkFuY2hvcjogWzEyLCA0MV0sXG4gICAgcG9wdXBBbmNob3I6IFsxLCAtMzRdLFxuICAgIHRvb2x0aXBBbmNob3I6IFsxNiwgLTI4XSxcbiAgICBzaGFkb3dTaXplOiBbNDEsIDQxXSxcbn0pO1xuTWFya2VyLnByb3RvdHlwZS5vcHRpb25zLmljb24gPSBpY29uRGVmYXVsdDtcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1tYXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWFwLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWFwLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTWFwQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLCkgeyB9XG5cbiAgQElucHV0KCkgc3BhY2VzOiBTcGFjZVtdO1xuXG4gICAgb3B0aW9ucyA9IHtcbiAgICAgICAgbGF5ZXJzOiBbXG4gICAgICAgICAgICB0aWxlTGF5ZXIoXCJodHRwOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nXCIsIHtcbiAgICAgICAgICAgICAgICBtYXhab29tOiAxOCxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGlvbjogXCIuLi5cIixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdLFxuICAgICAgICB6b29tOiA1LjUsXG4gICAgICAgIGNlbnRlcjogbGF0TG5nKDQ3LjA2Mzk0LCAyLjc3NzM2KSxcbiAgICB9O1xuXG4gICAgbGF5ZXJzOiBhbnlbXSA9IFtdO1xuXG4gICAgbWFwOiBhbnk7XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGlmIChjaGFuZ2VzLnNwYWNlcykge1xuICAgICAgICAgICAgY29uc3Qgbm0gPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IGJkID0gW107XG4gICAgICAgICAgICBpZiAoIWNoYW5nZXMuc3BhY2VzLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEZpbHRlcmluZyBvdXQgc3BhY2VzIHdpdGhvdXQgbGF0L2xvbmdpdHVkZXNcbiAgICAgICAgICAgIGZvciAoY29uc3QgcyBvZiBjaGFuZ2VzLnNwYWNlcy5jdXJyZW50VmFsdWUgYXMgU3BhY2VbXSkge1xuICAgICAgICAgICAgICAgIGlmIChzLmxhdGl0dWRlID09PSBudWxsIHx8IHMubG9uZ2l0dWRlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgICAgICAgYCR7cy5uYW1lfSBoYXMgbm90IGNvb3JkaW5hdGVzIGZvciAke3MuYWRkcmVzc2VzfWAsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBXZSB1c2UgdGhlIHBvcHVwIHN5c3RlbSBmcm9tIGxlYWZsZXQsIGFzIGl0IHBhY2tzIGEgZmV3IGltcHJvdmVtZW50c1xuICAgICAgICAgICAgICAgIC8vIG9uIHVzaW5nIGJvb3RzdHJhcDogYXV0b2Nsb3NlIG90aGVyIHBvcHVwcywgY2xvc2luZyBvcHRpb24uXG4gICAgICAgICAgICAgICAgY29uc3QgbSA9IG1hcmtlcihbcy5sYXRpdHVkZSwgcy5sb25naXR1ZGVdKTtcblxuICAgICAgICAgICAgICAgIG0uYmluZFBvcHVwKHRoaXMuY3JlYXRlUG9wdXBDb21wb25lbnQocywgbSkpO1xuXG4gICAgICAgICAgICAgICAgbm0ucHVzaChtKTtcbiAgICAgICAgICAgICAgICBiZC5wdXNoKGxhdExuZyhzLmxhdGl0dWRlLCBzLmxvbmdpdHVkZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gTm90ZSBob3cgd2Ugc2V0IHRoZSBsYXllcnMgaW4gb25lIGFzc2lnbm1lbnQsIGluIG9yZGVyIHRvIGhhdmUgbGVhZmxldFxuICAgICAgICAgICAgLy8gZGV0ZWN0cyB0aGUgY2hhbmdlIGNvcnJlY3RseVxuICAgICAgICAgICAgLy8gV2UgYWxzbyBzZXQgdGhlIGJvdW5kcyBhZnRlcndhcmQsIGZvciB0aGUgbWFwIHRvIGJlIHByb3Blcmx5IHpvb21lZCBhbmRcbiAgICAgICAgICAgIC8vIGNlbnRlcmVkXG4gICAgICAgICAgICB0aGlzLmxheWVycyA9IG5tO1xuICAgICAgICAgICAgaWYgKHRoaXMubWFwICYmIGJkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1hcC5maXRCb3VuZHMobGF0TG5nQm91bmRzKGJkKSwge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBwb2ludCg0OCwgNDgpLFxuICAgICAgICAgICAgICAgICAgICBtYXhab29tOiAxMixcbiAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uTWFwUmVhZHkobWFwOiBNYXApIHtcbiAgICAgICAgdGhpcy5tYXAgPSBtYXA7XG4gICAgfVxuXG4gICAgY3JlYXRlUG9wdXBDb21wb25lbnQoc3BhY2U6IFNwYWNlLCBtYXJrZXI6IE1hcmtlcikge1xuICAgICAgICBjb25zdCBjb21wID0gdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJcbiAgICAgICAgLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KE1hcFBvcHVwQ29tcG9uZW50KVxuICAgICAgICAuY3JlYXRlKHRoaXMuaW5qZWN0b3IpO1xuICAgICAgICBjb21wLmluc3RhbmNlLnNwYWNlID0gc3BhY2U7XG4gICAgICAgIGNvbXAuaW5zdGFuY2UubWFya2VyID0gbWFya2VyO1xuICAgICAgICBjb21wLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgcmV0dXJuIGNvbXAubG9jYXRpb24ubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbn1cbiIsIjxkaXYgW2xlYWZsZXRMYXllcnNdPVwibGF5ZXJzXCIgW2xlYWZsZXRPcHRpb25zXT1cIm9wdGlvbnNcIiAobGVhZmxldE1hcFJlYWR5KT1cIm9uTWFwUmVhZHkoJGV2ZW50KVwiIGlkPVwibWFwXCIgbGVhZmxldFxuICAgIHN0eWxlPVwiaGVpZ2h0OiA1MDBweDsgbWFyZ2luLXRvcDogMzBweDsgei1pbmRleDogMTk1XCI+PC9kaXY+XG4iXX0=
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@ngx-translate/core";
|
|
4
|
+
import * as i2 from "@angular/common";
|
|
5
|
+
export class PlanLegendComponent {
|
|
6
|
+
constructor(translate) {
|
|
7
|
+
this.translate = translate;
|
|
8
|
+
this.isAudioZone = false;
|
|
9
|
+
this.buttonsToRender = [];
|
|
10
|
+
this.colorToText = {};
|
|
11
|
+
}
|
|
12
|
+
async ngOnInit() {
|
|
13
|
+
this.render();
|
|
14
|
+
}
|
|
15
|
+
async render() {
|
|
16
|
+
this.buttonsToRender = [
|
|
17
|
+
{
|
|
18
|
+
url: `url("https://api.iconify.design/mdi:adjust.svg?color=green&height=17&width=17")`,
|
|
19
|
+
text: this.translate.instant("legend.green")
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
url: `url("https://api.iconify.design/mdi:close-circle-outline.svg?color=red&height=17&width=17")`,
|
|
23
|
+
text: this.translate.instant("legend.red")
|
|
24
|
+
}
|
|
25
|
+
];
|
|
26
|
+
if (this.isAudioZone) {
|
|
27
|
+
let audioPoints = [{
|
|
28
|
+
url: `url("https://api.iconify.design/mdi:close-circle-outline.svg?color=black&height=17&width=17")`,
|
|
29
|
+
text: this.translate.instant("legend.black")
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
url: `url("https://api.iconify.design/mdi:adjust.svg?color=orange&height=17&width=17")`,
|
|
33
|
+
text: this.translate.instant("legend.orange")
|
|
34
|
+
}];
|
|
35
|
+
this.buttonsToRender = this.buttonsToRender.concat(audioPoints);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
PlanLegendComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: PlanLegendComponent, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
40
|
+
PlanLegendComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: PlanLegendComponent, selector: "lib-plan-legend", inputs: { isAudioZone: "isAudioZone" }, ngImport: i0, template: "<div class=\"mt-3 ms-3\" class=\"legendContainer\">\n <h5>{{\"legend.title\" | translate}}</h5>\n <div class=\"legendBox\">\n <div class=\"legendRow\" *ngFor=\"let elemnt of buttonsToRender\">\n <button class=\"legendIcon\" [ngStyle] = \"{'background-image': elemnt.url}\"></button>\n <span>{{elemnt.text}}</span>\n </div>\n </div>\n</div>\n", styles: [".legendContainer{padding:1rem;border:solid var(--smarterplan-primary) 2px;border-radius:6px;width:100%;margin-bottom:.5rem;background:#FFF}.legendContainer .legendBox{display:flex;flex-direction:row;justify-content:center;flex-wrap:wrap}.legendContainer .legendBox .legendRow{display:flex;flex-direction:row;align-items:center}.legendContainer .legendBox .legendRow .legendIcon{width:2.5rem;height:2.5rem;background-repeat:no-repeat;background-size:cover;border:none;background-color:transparent;margin-right:.5rem;cursor:auto}.legendContainer .legendBox .legendRow span{margin-right:1rem;cursor:auto}.legendContainer .legendBox .legendRow h5{cursor:auto}\n"], directives: [{ type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], pipes: { "translate": i1.TranslatePipe } });
|
|
41
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: PlanLegendComponent, decorators: [{
|
|
42
|
+
type: Component,
|
|
43
|
+
args: [{ selector: 'lib-plan-legend', template: "<div class=\"mt-3 ms-3\" class=\"legendContainer\">\n <h5>{{\"legend.title\" | translate}}</h5>\n <div class=\"legendBox\">\n <div class=\"legendRow\" *ngFor=\"let elemnt of buttonsToRender\">\n <button class=\"legendIcon\" [ngStyle] = \"{'background-image': elemnt.url}\"></button>\n <span>{{elemnt.text}}</span>\n </div>\n </div>\n</div>\n", styles: [".legendContainer{padding:1rem;border:solid var(--smarterplan-primary) 2px;border-radius:6px;width:100%;margin-bottom:.5rem;background:#FFF}.legendContainer .legendBox{display:flex;flex-direction:row;justify-content:center;flex-wrap:wrap}.legendContainer .legendBox .legendRow{display:flex;flex-direction:row;align-items:center}.legendContainer .legendBox .legendRow .legendIcon{width:2.5rem;height:2.5rem;background-repeat:no-repeat;background-size:cover;border:none;background-color:transparent;margin-right:.5rem;cursor:auto}.legendContainer .legendBox .legendRow span{margin-right:1rem;cursor:auto}.legendContainer .legendBox .legendRow h5{cursor:auto}\n"] }]
|
|
44
|
+
}], ctorParameters: function () { return [{ type: i1.TranslateService }]; }, propDecorators: { isAudioZone: [{
|
|
45
|
+
type: Input
|
|
46
|
+
}] } });
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhbi1sZWdlbmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy9zcmMvbGliL2NvbXBvbmVudHMvcGxhbi1sZWdlbmQvcGxhbi1sZWdlbmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy9zcmMvbGliL2NvbXBvbmVudHMvcGxhbi1sZWdlbmQvcGxhbi1sZWdlbmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQWMsTUFBTSxlQUFlLENBQUM7Ozs7QUFRckUsTUFBTSxPQUFPLG1CQUFtQjtJQU85QixZQUNVLFNBQTJCO1FBQTNCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBUDVCLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBRXRDLG9CQUFlLEdBQUcsRUFBRSxDQUFDO1FBRXJCLGdCQUFXLEdBQUcsRUFBRSxDQUFDO0lBSWQsQ0FBQztJQUVKLEtBQUssQ0FBQyxRQUFRO1FBQ1osSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFBO0lBQ2YsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNO1FBQ1YsSUFBSSxDQUFDLGVBQWUsR0FBRztZQUNyQjtnQkFDRSxHQUFHLEVBQUUsaUZBQWlGO2dCQUN0RixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO2FBQzdDO1lBQ0Q7Z0JBQ0UsR0FBRyxFQUFFLDZGQUE2RjtnQkFDbEcsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQzthQUMzQztTQUNGLENBQUE7UUFDRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbEIsSUFBSSxXQUFXLEdBQUcsQ0FBQztvQkFDakIsR0FBRyxFQUFFLCtGQUErRjtvQkFDcEcsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQztpQkFDN0M7Z0JBQ0Q7b0JBQ0UsR0FBRyxFQUFFLGtGQUFrRjtvQkFDdkYsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztpQkFDOUMsQ0FBQyxDQUFBO1lBQ0YsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQTtTQUNsRTtJQUNILENBQUM7O2dIQXJDVSxtQkFBbUI7b0dBQW5CLG1CQUFtQiwrRkNSaEMsb1lBU0E7MkZERGEsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGlCQUFpQjt1R0FLbEIsV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT25DaGFuZ2VzICB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1wbGFuLWxlZ2VuZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9wbGFuLWxlZ2VuZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3BsYW4tbGVnZW5kLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUGxhbkxlZ2VuZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGlzQXVkaW9ab25lPzpib29sZWFuID0gZmFsc2U7XG5cbiAgYnV0dG9uc1RvUmVuZGVyID0gW107XG5cbiAgY29sb3JUb1RleHQgPSB7fTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgKSB7fVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIHRoaXMucmVuZGVyKClcbiAgfVxuXG4gIGFzeW5jIHJlbmRlcigpIHtcbiAgICB0aGlzLmJ1dHRvbnNUb1JlbmRlciA9IFtcbiAgICAgIHtcbiAgICAgICAgdXJsOiBgdXJsKFwiaHR0cHM6Ly9hcGkuaWNvbmlmeS5kZXNpZ24vbWRpOmFkanVzdC5zdmc/Y29sb3I9Z3JlZW4maGVpZ2h0PTE3JndpZHRoPTE3XCIpYCxcbiAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImxlZ2VuZC5ncmVlblwiKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdXJsOiBgdXJsKFwiaHR0cHM6Ly9hcGkuaWNvbmlmeS5kZXNpZ24vbWRpOmNsb3NlLWNpcmNsZS1vdXRsaW5lLnN2Zz9jb2xvcj1yZWQmaGVpZ2h0PTE3JndpZHRoPTE3XCIpYCxcbiAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImxlZ2VuZC5yZWRcIilcbiAgICAgIH1cbiAgICBdXG4gICAgaWYgKHRoaXMuaXNBdWRpb1pvbmUpIHtcbiAgICAgICAgbGV0IGF1ZGlvUG9pbnRzID0gW3tcbiAgICAgICAgICB1cmw6IGB1cmwoXCJodHRwczovL2FwaS5pY29uaWZ5LmRlc2lnbi9tZGk6Y2xvc2UtY2lyY2xlLW91dGxpbmUuc3ZnP2NvbG9yPWJsYWNrJmhlaWdodD0xNyZ3aWR0aD0xN1wiKWAsXG4gICAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImxlZ2VuZC5ibGFja1wiKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdXJsOiBgdXJsKFwiaHR0cHM6Ly9hcGkuaWNvbmlmeS5kZXNpZ24vbWRpOmFkanVzdC5zdmc/Y29sb3I9b3JhbmdlJmhlaWdodD0xNyZ3aWR0aD0xN1wiKWAsXG4gICAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImxlZ2VuZC5vcmFuZ2VcIilcbiAgICAgICAgfV1cbiAgICAgICAgdGhpcy5idXR0b25zVG9SZW5kZXIgPSB0aGlzLmJ1dHRvbnNUb1JlbmRlci5jb25jYXQoYXVkaW9Qb2ludHMpXG4gICAgfVxuICB9XG5cbiAgLy9zdHlsZUJ1dHRvbihlbGVtZW50LCBTd2VlcFN0YXRlLkRJU0FCTEVEKTtcblxufVxuIiwiPGRpdiBjbGFzcz1cIm10LTMgbXMtM1wiIGNsYXNzPVwibGVnZW5kQ29udGFpbmVyXCI+XG4gICAgPGg1Pnt7XCJsZWdlbmQudGl0bGVcIiB8IHRyYW5zbGF0ZX19PC9oNT5cbiAgICA8ZGl2IGNsYXNzPVwibGVnZW5kQm94XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmRSb3dcIiAqbmdGb3I9XCJsZXQgZWxlbW50IG9mIGJ1dHRvbnNUb1JlbmRlclwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImxlZ2VuZEljb25cIiBbbmdTdHlsZV0gPSBcInsnYmFja2dyb3VuZC1pbWFnZSc6IGVsZW1udC51cmx9XCI+PC9idXR0b24+XG4gICAgICAgICAgICA8c3Bhbj57e2VsZW1udC50ZXh0fX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|