@smarterplan/ngx-smarterplan-locations 0.0.21

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 (50) hide show
  1. package/README.md +24 -0
  2. package/esm2020/lib/components/carousel/carousel.component.mjs +28 -0
  3. package/esm2020/lib/components/chevron/chevron.component.mjs +18 -0
  4. package/esm2020/lib/components/detail-location/detail-location.component.mjs +154 -0
  5. package/esm2020/lib/components/form-location/form-location.component.mjs +215 -0
  6. package/esm2020/lib/components/images/images.component.mjs +91 -0
  7. package/esm2020/lib/components/locations/locations.component.mjs +138 -0
  8. package/esm2020/lib/components/locations/map/map-popup/map-popup.component.mjs +66 -0
  9. package/esm2020/lib/components/locations/map/map.component.mjs +91 -0
  10. package/esm2020/lib/components/plans/calibration/calibration.component.mjs +484 -0
  11. package/esm2020/lib/components/plans/edit-plan/edit-plan.component.mjs +314 -0
  12. package/esm2020/lib/components/plans/plans.component.mjs +211 -0
  13. package/esm2020/lib/components/tab-navigation/tab-navigation.component.mjs +40 -0
  14. package/esm2020/lib/components/visits/visits.component.mjs +227 -0
  15. package/esm2020/lib/components/zones/add-zone/add-zone.component.mjs +592 -0
  16. package/esm2020/lib/components/zones/add-zone/selection/selection.component.mjs +77 -0
  17. package/esm2020/lib/components/zones/zones.component.mjs +214 -0
  18. package/esm2020/lib/helper.service.mjs +2 -0
  19. package/esm2020/lib/ngx-smarterplan-location-routing.module.mjs +49 -0
  20. package/esm2020/lib/ngx-smarterplan-locations.module.mjs +107 -0
  21. package/esm2020/lib/ngx-smarterplan-locations.service.mjs +14 -0
  22. package/esm2020/public-api.mjs +6 -0
  23. package/esm2020/smarterplan-ngx-smarterplan-locations.mjs +5 -0
  24. package/fesm2015/smarterplan-ngx-smarterplan-locations.mjs +3126 -0
  25. package/fesm2015/smarterplan-ngx-smarterplan-locations.mjs.map +1 -0
  26. package/fesm2020/smarterplan-ngx-smarterplan-locations.mjs +2987 -0
  27. package/fesm2020/smarterplan-ngx-smarterplan-locations.mjs.map +1 -0
  28. package/lib/components/carousel/carousel.component.d.ts +12 -0
  29. package/lib/components/chevron/chevron.component.d.ts +9 -0
  30. package/lib/components/detail-location/detail-location.component.d.ts +51 -0
  31. package/lib/components/form-location/form-location.component.d.ts +40 -0
  32. package/lib/components/images/images.component.d.ts +28 -0
  33. package/lib/components/locations/locations.component.d.ts +49 -0
  34. package/lib/components/locations/map/map-popup/map-popup.component.d.ts +22 -0
  35. package/lib/components/locations/map/map.component.d.ts +22 -0
  36. package/lib/components/plans/calibration/calibration.component.d.ts +140 -0
  37. package/lib/components/plans/edit-plan/edit-plan.component.d.ts +54 -0
  38. package/lib/components/plans/plans.component.d.ts +59 -0
  39. package/lib/components/tab-navigation/tab-navigation.component.d.ts +13 -0
  40. package/lib/components/visits/visits.component.d.ts +51 -0
  41. package/lib/components/zones/add-zone/add-zone.component.d.ts +154 -0
  42. package/lib/components/zones/add-zone/selection/selection.component.d.ts +44 -0
  43. package/lib/components/zones/zones.component.d.ts +66 -0
  44. package/lib/helper.service.d.ts +6 -0
  45. package/lib/ngx-smarterplan-location-routing.module.d.ts +7 -0
  46. package/lib/ngx-smarterplan-locations.module.d.ts +31 -0
  47. package/lib/ngx-smarterplan-locations.service.d.ts +6 -0
  48. package/package.json +39 -0
  49. package/public-api.d.ts +2 -0
  50. package/smarterplan-ngx-smarterplan-locations.d.ts +5 -0
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLXBvcHVwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1sb2NhdGlvbnMvc3JjL2xpYi9jb21wb25lbnRzL2xvY2F0aW9ucy9tYXAvbWFwLXBvcHVwL21hcC1wb3B1cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tbG9jYXRpb25zL3NyYy9saWIvY29tcG9uZW50cy9sb2NhdGlvbnMvbWFwL21hcC1wb3B1cC9tYXAtcG9wdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBa0IsTUFBTSxlQUFlLENBQUM7Ozs7QUFVMUQsTUFBTSxPQUFPLGlCQUFpQjtJQVkxQixZQUFvQixNQUFjLEVBQVUsTUFBYztRQUF0QyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUoxRCxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWxCLGlCQUFZLEdBQUcsSUFBSSxDQUFDO0lBRTBDLENBQUM7SUFFL0QsUUFBUTtRQUNKLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBRXhELElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUU7WUFDN0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQzthQUNwQjtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFNBQVM7UUFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRXhCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRTFELElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTtZQUMvQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUU7WUFDOUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFO1lBQzVCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxVQUFVO1FBQ04sSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsc0NBQXNDO1FBQ3RDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQzthQUM1QjtRQUNMLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNaLENBQUM7SUFFRCxpQkFBaUI7UUFDYixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDaEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1NBQ3RDO2FBQU07WUFDSCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDM0M7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFZO1FBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFO2dCQUMzQyxXQUFXLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRTthQUMxQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7OzhHQWxFUSxpQkFBaUI7a0dBQWpCLGlCQUFpQixxRENWOUIsMmxCQVdBOzJGRERhLGlCQUFpQjtrQkFMN0IsU0FBUzsrQkFDRSxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBOZ1pvbmUsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IE1hcmtlciB9IGZyb20gJ2xlYWZsZXQnO1xuaW1wb3J0IHsgU3BhY2UsIFZpc2l0IH0gZnJvbSAnbmd4LXNtYXJ0ZXJwbGFuLWNvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItbWFwLXBvcHVwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21hcC1wb3B1cC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21hcC1wb3B1cC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE1hcFBvcHVwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICAgIHNwYWNlOiBTcGFjZTtcblxuICAgIG1hcmtlcjogTWFya2VyO1xuXG4gICAgcG9wdXBhcmVhOiBIVE1MRWxlbWVudDtcblxuICAgIGlzT25Qb3B1cCA9IGZhbHNlO1xuXG4gICAgaXNNdXNldW1Vc2VyID0gdHJ1ZTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsIHByaXZhdGUgbmdab25lOiBOZ1pvbmUpIHsgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMubWFya2VyLm9uKFwiY2xpY2tcIiwgKCkgPT4gdGhpcy5vbkNsaWNrVmlzaXRGaXJzdCgpKTtcblxuICAgICAgICB0aGlzLm1hcmtlci5vbihcIm1vdXNlb3ZlclwiLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzT25Qb3B1cCA9IHRydWU7XG4gICAgICAgICAgICBpZiAoIXRoaXMubWFya2VyLmlzUG9wdXBPcGVuKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5Qb3B1cCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvcGVuUG9wdXAoKSB7XG4gICAgICAgIHRoaXMubWFya2VyLm9wZW5Qb3B1cCgpO1xuXG4gICAgICAgIHRoaXMuaXNPblBvcHVwID0gZmFsc2U7XG4gICAgICAgIHRoaXMucG9wdXBhcmVhID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5sZWFmbGV0LXBvcHVwXCIpO1xuXG4gICAgICAgIHRoaXMucG9wdXBhcmVhLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VQb3B1cCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5wb3B1cGFyZWEuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlb3ZlclwiLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzT25Qb3B1cCA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm1hcmtlci5vbihcIm1vdXNlb3V0XCIsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VQb3B1cCgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjbG9zZVBvcHVwKCkge1xuICAgICAgICB0aGlzLmlzT25Qb3B1cCA9IGZhbHNlO1xuICAgICAgICAvKiogV2Ugd2FudCB0byB3YWl0IHRvIGF2b2lkIGdsaXRjaCAqL1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc09uUG9wdXApIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1hcmtlci5jbG9zZVBvcHVwKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDEwMCk7XG4gICAgfVxuXG4gICAgb25DbGlja1Zpc2l0Rmlyc3QoKSB7XG4gICAgICAgIGlmICh0aGlzLnNwYWNlLnZpc2l0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiTm8gc3BhY2UgdG8gdmlzaXQgIVwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25WaXNpdENsaWNrKHRoaXMuc3BhY2UudmlzaXRzWzBdKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIG9uVmlzaXRDbGljayh2aXNpdDogVmlzaXQpIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcInZpc2l0XCIsIHRoaXMuc3BhY2UuaWRdLCB7XG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHsgbW9kZWwzRDogdmlzaXQubW9kZWwzZCB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxufVxuIiwiPGRpdiBpZD1cIm1hcC1wb3B1cFwiPlxuICAgIDxkaXYgY2xhc3M9XCJtYXAtcG9wdXAtaGVhZGVyXCIgKGNsaWNrKT1cIm9uQ2xpY2tWaXNpdEZpcnN0KClcIiBbc3R5bGUuY3Vyc29yXT1cIidwb2ludGVyJ1wiPlxuICAgICAgICA8aW1nIFtzcmNdPVwic3BhY2UuYW5uZXhlc1wiIC8+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm1hcC1wb3B1cC1kZXRhaWxzXCI+XG4gICAgPGgxIChjbGljayk9XCJvbkNsaWNrVmlzaXRGaXJzdCgpXCIgW3N0eWxlLmN1cnNvcl09XCIncG9pbnRlcidcIj57e3NwYWNlLm5hbWV9fTwvaDE+XG4gICAgPHNwYW4gY2xhc3M9XCJtYXAtcG9wdXAtYWRkcmVzc1wiPnt7c3BhY2UuYWRkcmVzc2VzfX08L3NwYW4+XG4gICAgPHNwYW4gKm5nRm9yPVwibGV0IHZpc2l0IG9mIHNwYWNlLnZpc2l0c1wiIGNsYXNzPVwibWFwLXBvcHVwLXZpc2l0XCIgKGNsaWNrKT1cIm9uVmlzaXRDbGljayh2aXNpdClcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmN1cnNvcl09XCIncG9pbnRlcidcIj7inqQge3sgdmlzaXQubmFtZSA/IHZpc2l0Lm5hbWUgOiBzcGFjZS5uYW1lfX08L3NwYW4+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1sb2NhdGlvbnMvc3JjL2xpYi9jb21wb25lbnRzL2xvY2F0aW9ucy9tYXAvbWFwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1sb2NhdGlvbnMvc3JjL2xpYi9jb21wb25lbnRzL2xvY2F0aW9ucy9tYXAvbWFwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXNDLEtBQUssRUFBc0QsTUFBTSxlQUFlLENBQUM7QUFFekksT0FBTyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLElBQUksR0FDTCxNQUFNLFNBQVMsQ0FBQztBQUNqQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7O0FBSXBFLE1BQU0sYUFBYSxHQUFHLDJCQUEyQixDQUFDO0FBQ2xELE1BQU0sT0FBTyxHQUFHLHdCQUF3QixDQUFDO0FBQ3pDLE1BQU0sU0FBUyxHQUFHLDBCQUEwQixDQUFDO0FBQzdDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQztJQUNyQixhQUFhO0lBQ2IsT0FBTztJQUNQLFNBQVM7SUFDVCxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2xCLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDcEIsV0FBVyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ3JCLGFBQWEsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUN4QixVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0NBQ3ZCLENBQUMsQ0FBQztB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LGFBQWEsRUFBRSxDQUFDO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUM7SUFDdkMsQ0FBQzs7eUdBekVRLFlBQVk7NkZBQVosWUFBWSxrR0NuQ3pCLGdNQUVBOzJGRGlDYSxZQUFZO2tCQUx4QixTQUFTOytCQUNFLFNBQVM7c0lBU1YsTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIEluamVjdG9yLCBJbnB1dCwgTmdab25lLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNwYWNlIH0gZnJvbSAnbmd4LXNtYXJ0ZXJwbGFuLWNvcmUnO1xuaW1wb3J0IHtcbiAgbGF0TG5nLFxuICBtYXJrZXIsXG4gIHRpbGVMYXllcixcbiAgTWFwLFxuICBsYXRMbmdCb3VuZHMsXG4gIHBvaW50LFxuICBNYXJrZXIsXG4gIGljb24sXG59IGZyb20gXCJsZWFmbGV0XCI7XG5pbXBvcnQgeyBNYXBQb3B1cENvbXBvbmVudCB9IGZyb20gJy4vbWFwLXBvcHVwL21hcC1wb3B1cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuXG5jb25zdCBpY29uUmV0aW5hVXJsID0gXCJhc3NldHMvbWFya2VyLWljb24tMngucG5nXCI7XG5jb25zdCBpY29uVXJsID0gXCJhc3NldHMvbWFya2VyLWljb24ucG5nXCI7XG5jb25zdCBzaGFkb3dVcmwgPSBcImFzc2V0cy9tYXJrZXItc2hhZG93LnBuZ1wiO1xuY29uc3QgaWNvbkRlZmF1bHQgPSBpY29uKHtcbiAgICBpY29uUmV0aW5hVXJsLFxuICAgIGljb25VcmwsXG4gICAgc2hhZG93VXJsLFxuICAgIGljb25TaXplOiBbMjUsIDQxXSxcbiAgICBpY29uQW5jaG9yOiBbMTIsIDQxXSxcbiAgICBwb3B1cEFuY2hvcjogWzEsIC0zNF0sXG4gICAgdG9vbHRpcEFuY2hvcjogWzE2LCAtMjhdLFxuICAgIHNoYWRvd1NpemU6IFs0MSwgNDFdLFxufSk7XG5NYXJrZXIucHJvdG90eXBlLm9wdGlvbnMuaWNvbiA9IGljb25EZWZhdWx0O1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLW1hcCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXAuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tYXAuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBNYXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsKSB7IH1cblxuICBASW5wdXQoKSBzcGFjZXM6IFNwYWNlW107XG5cbiAgICBvcHRpb25zID0ge1xuICAgICAgICBsYXllcnM6IFtcbiAgICAgICAgICAgIHRpbGVMYXllcihcImh0dHA6Ly97c30udGlsZS5vcGVuc3RyZWV0bWFwLm9yZy97en0ve3h9L3t5fS5wbmdcIiwge1xuICAgICAgICAgICAgICAgIG1heFpvb206IDE4LFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0aW9uOiBcIi4uLlwiLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICAgIHpvb206IDUuNSxcbiAgICAgICAgY2VudGVyOiBsYXRMbmcoNDcuMDYzOTQsIDIuNzc3MzYpLFxuICAgIH07XG5cbiAgICBsYXllcnM6IGFueVtdID0gW107XG5cbiAgICBtYXA6IGFueTtcblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgaWYgKGNoYW5nZXMuc3BhY2VzKSB7XG4gICAgICAgICAgICBjb25zdCBubSA9IFtdO1xuICAgICAgICAgICAgY29uc3QgYmQgPSBbXTtcbiAgICAgICAgICAgIGlmICghY2hhbmdlcy5zcGFjZXMuY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRmlsdGVyaW5nIG91dCBzcGFjZXMgd2l0aG91dCBsYXQvbG9uZ2l0dWRlc1xuICAgICAgICAgICAgZm9yIChjb25zdCBzIG9mIGNoYW5nZXMuc3BhY2VzLmN1cnJlbnRWYWx1ZSBhcyBTcGFjZVtdKSB7XG4gICAgICAgICAgICAgICAgaWYgKHMubGF0aXR1ZGUgPT09IG51bGwgfHwgcy5sb25naXR1ZGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICAgICAgICBgJHtzLm5hbWV9IGhhcyBub3QgY29vcmRpbmF0ZXMgZm9yICR7cy5hZGRyZXNzZXN9YCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFdlIHVzZSB0aGUgcG9wdXAgc3lzdGVtIGZyb20gbGVhZmxldCwgYXMgaXQgcGFja3MgYSBmZXcgaW1wcm92ZW1lbnRzXG4gICAgICAgICAgICAgICAgLy8gb24gdXNpbmcgYm9vdHN0cmFwOiBhdXRvY2xvc2Ugb3RoZXIgcG9wdXBzLCBjbG9zaW5nIG9wdGlvbi5cbiAgICAgICAgICAgICAgICBjb25zdCBtID0gbWFya2VyKFtzLmxhdGl0dWRlLCBzLmxvbmdpdHVkZV0pO1xuXG4gICAgICAgICAgICAgICAgbS5iaW5kUG9wdXAodGhpcy5jcmVhdGVQb3B1cENvbXBvbmVudChzLCBtKSk7XG5cbiAgICAgICAgICAgICAgICBubS5wdXNoKG0pO1xuICAgICAgICAgICAgICAgIGJkLnB1c2gobGF0TG5nKHMubGF0aXR1ZGUsIHMubG9uZ2l0dWRlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBOb3RlIGhvdyB3ZSBzZXQgdGhlIGxheWVycyBpbiBvbmUgYXNzaWdubWVudCwgaW4gb3JkZXIgdG8gaGF2ZSBsZWFmbGV0XG4gICAgICAgICAgICAvLyBkZXRlY3RzIHRoZSBjaGFuZ2UgY29ycmVjdGx5XG4gICAgICAgICAgICAvLyBXZSBhbHNvIHNldCB0aGUgYm91bmRzIGFmdGVyd2FyZCwgZm9yIHRoZSBtYXAgdG8gYmUgcHJvcGVybHkgem9vbWVkIGFuZFxuICAgICAgICAgICAgLy8gY2VudGVyZWRcbiAgICAgICAgICAgIHRoaXMubGF5ZXJzID0gbm07XG4gICAgICAgICAgICBpZiAodGhpcy5tYXAgJiYgYmQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMubWFwLmZpdEJvdW5kcyhsYXRMbmdCb3VuZHMoYmQpLCB7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IHBvaW50KDQ4LCA0OCksXG4gICAgICAgICAgICAgICAgICAgIG1heFpvb206IDEyLFxuICAgICAgICAgICAgICAgICAgICBhbmltYXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25NYXBSZWFkeShtYXA6IE1hcCkge1xuICAgICAgICB0aGlzLm1hcCA9IG1hcDtcbiAgICB9XG5cbiAgICBjcmVhdGVQb3B1cENvbXBvbmVudChzcGFjZTogU3BhY2UsIG1hcmtlcjogTWFya2VyKSB7XG4gICAgICAgIGNvbnN0IGNvbXAgPSB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlclxuICAgICAgICAucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoTWFwUG9wdXBDb21wb25lbnQpXG4gICAgICAgIC5jcmVhdGUodGhpcy5pbmplY3Rvcik7XG4gICAgICAgIGNvbXAuaW5zdGFuY2Uuc3BhY2UgPSBzcGFjZTtcbiAgICAgICAgY29tcC5pbnN0YW5jZS5tYXJrZXIgPSBtYXJrZXI7XG4gICAgICAgIGNvbXAuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICByZXR1cm4gY29tcC5sb2NhdGlvbi5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxufVxuIiwiPGRpdiBbbGVhZmxldExheWVyc109XCJsYXllcnNcIiBbbGVhZmxldE9wdGlvbnNdPVwib3B0aW9uc1wiIChsZWFmbGV0TWFwUmVhZHkpPVwib25NYXBSZWFkeSgkZXZlbnQpXCIgaWQ9XCJtYXBcIiBsZWFmbGV0XG4gICAgc3R5bGU9XCJoZWlnaHQ6IDUwMHB4OyBtYXJnaW4tdG9wOiAzMHB4OyB6LWluZGV4OiAxOTVcIj48L2Rpdj5cbiJdfQ==