@smarterplan/ngx-smarterplan-locations 0.0.21 → 0.0.22

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 (33) hide show
  1. package/esm2020/lib/components/detail-location/detail-location.component.mjs +3 -3
  2. package/esm2020/lib/components/form-location/form-location.component.mjs +3 -3
  3. package/esm2020/lib/components/images/images.component.mjs +3 -3
  4. package/esm2020/lib/components/locations/locations.component.mjs +3 -3
  5. package/esm2020/lib/components/locations/map/map-popup/map-popup.component.mjs +1 -1
  6. package/esm2020/lib/components/locations/map/map.component.mjs +1 -1
  7. package/esm2020/lib/components/plans/calibration/calibration.component.mjs +3 -3
  8. package/esm2020/lib/components/plans/edit-plan/edit-plan.component.mjs +3 -3
  9. package/esm2020/lib/components/plans/plans.component.mjs +3 -3
  10. package/esm2020/lib/components/tab-navigation/tab-navigation.component.mjs +1 -1
  11. package/esm2020/lib/components/visits/visits.component.mjs +3 -3
  12. package/esm2020/lib/components/zones/add-zone/add-zone.component.mjs +3 -3
  13. package/esm2020/lib/components/zones/zones.component.mjs +3 -3
  14. package/esm2020/lib/ngx-smarterplan-locations.module.mjs +2 -2
  15. package/fesm2015/smarterplan-ngx-smarterplan-locations.mjs +2 -2
  16. package/fesm2015/smarterplan-ngx-smarterplan-locations.mjs.map +1 -1
  17. package/fesm2020/smarterplan-ngx-smarterplan-locations.mjs +2 -2
  18. package/fesm2020/smarterplan-ngx-smarterplan-locations.mjs.map +1 -1
  19. package/lib/components/detail-location/detail-location.component.d.ts +1 -1
  20. package/lib/components/form-location/form-location.component.d.ts +1 -1
  21. package/lib/components/images/images.component.d.ts +1 -1
  22. package/lib/components/locations/locations.component.d.ts +1 -1
  23. package/lib/components/locations/map/map-popup/map-popup.component.d.ts +1 -1
  24. package/lib/components/locations/map/map.component.d.ts +1 -1
  25. package/lib/components/plans/calibration/calibration.component.d.ts +1 -1
  26. package/lib/components/plans/edit-plan/edit-plan.component.d.ts +1 -1
  27. package/lib/components/plans/plans.component.d.ts +1 -1
  28. package/lib/components/tab-navigation/tab-navigation.component.d.ts +1 -1
  29. package/lib/components/visits/visits.component.d.ts +1 -1
  30. package/lib/components/zones/add-zone/add-zone.component.d.ts +1 -1
  31. package/lib/components/zones/zones.component.d.ts +1 -1
  32. package/lib/ngx-smarterplan-locations.module.d.ts +1 -1
  33. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"smarterplan-ngx-smarterplan-locations.mjs","sources":["../../../projects/ngx-smarterplan-locations/src/lib/ngx-smarterplan-locations.service.ts","../../../projects/ngx-smarterplan-locations/src/lib/components/tab-navigation/tab-navigation.component.ts","../../../projects/ngx-smarterplan-locations/src/lib/components/tab-navigation/tab-navigation.component.html","../../../projects/ngx-smarterplan-locations/src/lib/components/locations/map/map-popup/map-popup.component.ts","../../../projects/ngx-smarterplan-locations/src/lib/components/locations/map/map-popup/map-popup.component.html","../../../projects/ngx-smarterplan-locations/src/lib/components/locations/map/map.component.ts","../../../projects/ngx-smarterplan-locations/src/lib/components/locations/map/map.component.html","../../../projects/ngx-smarterplan-locations/src/lib/components/form-location/form-location.component.ts","../../../projects/ngx-smarterplan-locations/src/lib/components/form-location/form-location.component.html","../../../projects/ngx-smarterplan-locations/src/lib/components/locations/locations.component.ts","../../../projects/ngx-smarterplan-locations/src/lib/components/locations/locations.component.html","../../../projects/ngx-smarterplan-locations/src/lib/components/detail-location/detail-location.component.ts","../../../projects/ngx-smarterplan-locations/src/lib/components/detail-location/detail-location.component.html","../../../projects/ngx-smarterplan-locations/src/lib/components/plans/calibration/calibration.component.ts","../../../projects/ngx-smarterplan-locations/src/lib/components/plans/calibration/calibration.component.html","../../../projects/ngx-smarterplan-locations/src/lib/components/plans/plans.component.ts","../../../projects/ngx-smarterplan-locations/src/lib/components/plans/plans.component.html","../../../projects/ngx-smarterplan-locations/src/lib/components/chevron/chevron.component.ts","../../../projects/ngx-smarterplan-locations/src/lib/components/chevron/chevron.component.html","../../../projects/ngx-smarterplan-locations/src/lib/components/visits/visits.component.ts","../../../projects/ngx-smarterplan-locations/src/lib/components/visits/visits.component.html","../../../projects/ngx-smarterplan-locations/src/lib/components/carousel/carousel.component.ts","../../../projects/ngx-smarterplan-locations/src/lib/components/carousel/carousel.component.html","../../../projects/ngx-smarterplan-locations/src/lib/components/zones/add-zone/selection/selection.component.ts","../../../projects/ngx-smarterplan-locations/src/lib/components/zones/add-zone/selection/selection.component.html","../../../projects/ngx-smarterplan-locations/src/lib/components/zones/add-zone/add-zone.component.ts","../../../projects/ngx-smarterplan-locations/src/lib/components/zones/add-zone/add-zone.component.html","../../../projects/ngx-smarterplan-locations/src/lib/components/zones/zones.component.ts","../../../projects/ngx-smarterplan-locations/src/lib/components/zones/zones.component.html","../../../projects/ngx-smarterplan-locations/src/lib/components/images/images.component.ts","../../../projects/ngx-smarterplan-locations/src/lib/components/images/images.component.html","../../../projects/ngx-smarterplan-locations/src/lib/components/plans/edit-plan/edit-plan.component.ts","../../../projects/ngx-smarterplan-locations/src/lib/components/plans/edit-plan/edit-plan.component.html","../../../projects/ngx-smarterplan-locations/src/lib/ngx-smarterplan-location-routing.module.ts","../../../projects/ngx-smarterplan-locations/src/lib/ngx-smarterplan-locations.module.ts","../../../projects/ngx-smarterplan-locations/src/public-api.ts","../../../projects/ngx-smarterplan-locations/src/smarterplan-ngx-smarterplan-locations.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NgxSmarterplanLocationsService {\n\n constructor() { }\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { MenuItem } from 'ngx-smarterplan-core';\n\n@Component({\n selector: 'lib-tab-navigation',\n templateUrl: './tab-navigation.component.html',\n styleUrls: ['./tab-navigation.component.scss']\n})\nexport class TabNavigationComponent {\n\n @Output() onGoBack = new EventEmitter<void>();\n\n @Input() menuItems: MenuItem[] = [];\n\n constructor(private router: Router) {}\n\n onClick(url: string, parameter: any, index: number) {\n if (index === this.menuItems.length - 1) {\n return;\n }\n if (url) {\n const newURL = `/dashboard${url}`;\n if (this.router.url !== newURL) {\n this.router.navigate([newURL]);\n } else {\n this.onGoBack.emit(parameter);\n }\n } else {\n this.onGoBack.emit(parameter);\n }\n }\n\n}\n","<span class=\"menu\">\n <span *ngFor=\"let item of menuItems; let index = index;\">\n <span class=\"item\" [ngClass]=\"{'current':index === menuItems.length - 1}\"\n (click)=\"onClick(item.url,item.back, index)\">{{item.label | translate}}</span> <span\n *ngIf=\"index !== menuItems.length - 1\" class=\"separator\">></span>\n </span>\n</span>\n","import { Component, NgZone, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Marker } from 'leaflet';\nimport { Space, Visit } from 'ngx-smarterplan-core';\n\n@Component({\n selector: 'lib-map-popup',\n templateUrl: './map-popup.component.html',\n styleUrls: ['./map-popup.component.scss']\n})\nexport class MapPopupComponent implements OnInit {\n\n space: Space;\n\n marker: Marker;\n\n popuparea: HTMLElement;\n\n isOnPopup = false;\n\n isMuseumUser = true;\n\n constructor(private router: Router, private ngZone: NgZone) { }\n\n ngOnInit() {\n this.marker.on(\"click\", () => this.onClickVisitFirst());\n\n this.marker.on(\"mouseover\", () => {\n this.isOnPopup = true;\n if (!this.marker.isPopupOpen()) {\n this.openPopup();\n }\n });\n }\n\n openPopup() {\n this.marker.openPopup();\n\n this.isOnPopup = false;\n this.popuparea = document.querySelector(\".leaflet-popup\");\n\n this.popuparea.addEventListener(\"mouseleave\", () => {\n this.closePopup();\n });\n this.popuparea.addEventListener(\"mouseover\", () => {\n this.isOnPopup = true;\n });\n this.marker.on(\"mouseout\", () => {\n this.closePopup();\n });\n }\n\n closePopup() {\n this.isOnPopup = false;\n /** We want to wait to avoid glitch */\n setTimeout(() => {\n if (!this.isOnPopup) {\n this.marker.closePopup();\n }\n }, 100);\n }\n\n onClickVisitFirst() {\n if (this.space.visits.length === 0) {\n console.log(\"No space to visit !\");\n } else {\n this.onVisitClick(this.space.visits[0]);\n }\n }\n\n async onVisitClick(visit: Visit) {\n this.ngZone.run(() => {\n this.router.navigate([\"visit\", this.space.id], {\n queryParams: { model3D: visit.model3d },\n });\n });\n }\n\n}\n","<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'\">➤ {{ visit.name ? visit.name : space.name}}</span>\n </div>\n</div>\n","import { Component, ComponentFactoryResolver, Injector, Input, NgZone, OnChanges, SimpleChanges, ViewContainerRef } from '@angular/core';\nimport { Space } from 'ngx-smarterplan-core';\nimport {\n latLng,\n marker,\n tileLayer,\n Map,\n latLngBounds,\n point,\n Marker,\n icon,\n} from \"leaflet\";\nimport { MapPopupComponent } from './map-popup/map-popup.component';\nimport { Router } from '@angular/router';\n\n\nconst iconRetinaUrl = \"assets/marker-icon-2x.png\";\nconst iconUrl = \"assets/marker-icon.png\";\nconst shadowUrl = \"assets/marker-shadow.png\";\nconst iconDefault = icon({\n iconRetinaUrl,\n iconUrl,\n shadowUrl,\n iconSize: [25, 41],\n iconAnchor: [12, 41],\n popupAnchor: [1, -34],\n tooltipAnchor: [16, -28],\n shadowSize: [41, 41],\n});\nMarker.prototype.options.icon = iconDefault;\n@Component({\n selector: 'lib-map',\n templateUrl: './map.component.html',\n styleUrls: ['./map.component.scss']\n})\nexport class MapComponent implements OnChanges {\n\n constructor(private componentFactoryResolver: ComponentFactoryResolver,\n private injector: Injector,) { }\n\n @Input() spaces: Space[];\n\n options = {\n layers: [\n tileLayer(\"http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png\", {\n maxZoom: 18,\n attribution: \"...\",\n }),\n ],\n zoom: 5.5,\n center: latLng(47.06394, 2.77736),\n };\n\n layers: any[] = [];\n\n map: any;\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.spaces) {\n const nm = [];\n const bd = [];\n if (!changes.spaces.currentValue) {\n return;\n }\n // Filtering out spaces without lat/longitudes\n for (const s of changes.spaces.currentValue as Space[]) {\n if (s.latitude === null || s.longitude === null) {\n console.log(\n `${s.name} has not coordinates for ${s.addresses}`,\n );\n continue;\n }\n // We use the popup system from leaflet, as it packs a few improvements\n // on using bootstrap: autoclose other popups, closing option.\n const m = marker([s.latitude, s.longitude]);\n\n m.bindPopup(this.createPopupComponent(s, m));\n\n nm.push(m);\n bd.push(latLng(s.latitude, s.longitude));\n }\n // Note how we set the layers in one assignment, in order to have leaflet\n // detects the change correctly\n // We also set the bounds afterward, for the map to be properly zoomed and\n // centered\n this.layers = nm;\n if (this.map && bd.length > 0) {\n this.map.fitBounds(latLngBounds(bd), {\n padding: point(48, 48),\n maxZoom: 12,\n animate: true,\n });\n }\n }\n }\n\n onMapReady(map: Map) {\n this.map = map;\n }\n\n createPopupComponent(space: Space, marker: Marker) {\n const comp = this.componentFactoryResolver\n .resolveComponentFactory(MapPopupComponent)\n .create(this.injector);\n comp.instance.space = space;\n comp.instance.marker = marker;\n comp.changeDetectorRef.detectChanges();\n return comp.location.nativeElement;\n }\n\n}\n","<div [leafletLayers]=\"layers\" [leafletOptions]=\"options\" (leafletMapReady)=\"onMapReady($event)\" id=\"map\" leaflet\n style=\"height: 500px; margin-top: 30px; z-index: 195\"></div>\n","import { Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { FormGroup, FormBuilder, Validators, AbstractControl } from '@angular/forms';\nimport { Space, LevelStatus, SpaceService, PropertyService, BaseUserService, MissionService, enumToArray, uploadFileToS3, Layer, PropertyType, getSignedImageUrlForSpace, LayerService, deleteFromS3 } from 'ngx-smarterplan-core';\n\n@Component({\n selector: 'lib-form-location',\n templateUrl: './form-location.component.html',\n styleUrls: ['./form-location.component.scss']\n})\nexport class FormLocationComponent implements OnInit {\n\n form: FormGroup;\n\n @ViewChild(\"imageInputContainer\")\n imageInputContainer: ElementRef;\n\n @ViewChild(\"imageInput\")\n imageInput: ElementRef;\n\n @ViewChild(\"imageBasePreview\")\n imageBasePreview: ElementRef;\n\n @Input()\n location: Space;\n\n imageToUpload: any;\n\n isSubmitted = false;\n\n levels: Array<LevelStatus>;\n\n addMissionForNewSpace = true;\n\n imageInputText: string;\n\n currentImage: string;\n\n imageToBeDeleted: boolean = false;\n\n @Output() onChange = new EventEmitter<Space | null>();\n\n constructor(\n private spaceService: SpaceService,\n private propertyService: PropertyService,\n private userService: BaseUserService,\n private fb: FormBuilder,\n private missionService: MissionService,\n private layerService: LayerService,\n ) {\n this.levels = enumToArray(LevelStatus);\n }\n\n ngOnInit(): void {\n if (this.location) {\n this.initEditForm();\n } else {\n this.initForm();\n }\n this.handleInputImageText();\n }\n\n initForm() {\n this.form = this.fb.group({\n name: [null, [Validators.required]],\n addresses: [\"\"],\n latitude: [null],\n longitude: [null],\n level: LevelStatus.LOW,\n classGes: [null],\n classEnergyConsumption: [null],\n constructionYear: [null],\n });\n }\n\n initEditForm() {\n this.form = this.fb.group({\n id: this.location.id,\n name: [this.location.name, [Validators.required]],\n addresses: this.location.addresses,\n latitude: this.location.latitude,\n longitude: this.location.longitude,\n level: this.location.level,\n classGes: this.location.classGes,\n classEnergyConsumption: this.location.classEnergyConsumption,\n constructionYear: this.location.constructionYear,\n });\n }\n\n handleImageInput(target: EventTarget) {\n this.imageToUpload = (target as HTMLInputElement).files[0];\n if (this.imageToUpload) {\n this.imageInputContainer.nativeElement.style.display = \"none\";\n const reader = new FileReader();\n reader.addEventListener(\"load\", () => {\n this.currentImage = reader.result as string;\n });\n reader.readAsDataURL(this.imageToUpload);\n }\n }\n\n async uploadImage(spaceID: string) {\n if (this.imageToUpload) {\n uploadFileToS3(\"locations/\", this.imageToUpload, spaceID).then(\n async (url) => {\n if (url) {\n await this.spaceService.updateSpace({\n id: spaceID,\n annexes: url,\n });\n }\n },\n );\n } else if (this.imageToBeDeleted) {\n await this.spaceService.updateSpace({\n id: spaceID,\n annexes: null,\n });\n await deleteFromS3(this.location.annexes);\n }\n }\n\n clearImageFile() {\n this.imageToUpload = null;\n this.currentImage = null;\n this.imageInputContainer.nativeElement.style.display = \"flex\";\n this.imageInput.nativeElement.value = \"\";\n this.imageInputText = \"Add picture\";\n }\n\n async getLayerByName(name: string): Promise<Layer> {\n const currentOrgId = this.userService.currentOrganisation().id;\n const layers = await this.layerService.getLayerByNameForOrganisation(\n name,\n currentOrgId,\n );\n if (layers) {\n return layers[0];\n }\n // create then\n return this.layerService.createLayerForOrganisation(name, currentOrgId);\n }\n\n async onSubmit() {\n this.isSubmitted = true;\n if (!this.form.valid) {\n return;\n }\n try {\n let space;\n if (this.location) {\n this.changeCommaToDot();\n space = await this.spaceService.updateSpace(this.form.value);\n if (space) {\n await this.uploadImage(space.id);\n this.location = space;\n this.onChange.emit(space);\n }\n } else {\n this.changeCommaToDot();\n let layer = await this.getLayerByName(\"BUILDING\");\n if (!layer) {\n layer = await this.layerService.createLayerForOrganisation(\n \"BUILDING\",\n this.userService.currentOrganisation().id,\n );\n }\n space = await this.spaceService.createSpace(\n this.form.value,\n layer,\n );\n\n const missions = this.userService.getManagerMissions();\n if (space && missions.length > 0) {\n const exampleMission = missions[0];\n await this.uploadImage(space.id);\n await this.propertyService.createProperty({\n type: PropertyType.PROPERTY,\n spaceID: space.id,\n organisationID: exampleMission.organisationID,\n });\n // add directly a mission for this space\n if (this.addMissionForNewSpace) {\n await this.missionService.create({\n spaceID: space.id,\n userID: exampleMission.userID,\n role: exampleMission.role,\n level: exampleMission.level,\n organisationID: exampleMission.organisationID,\n orderedOrganisationID:\n exampleMission.organisationID,\n });\n }\n this.onChange.emit(space);\n } else {\n this.onChange.emit(null);\n }\n }\n } catch (error) {\n console.error(error);\n this.onChange.emit(null);\n }\n }\n\n onCancel() {\n this.form.reset();\n this.onChange.emit(null);\n }\n\n get name(): AbstractControl {\n return this.form.get(\"name\");\n }\n\n changeCommaToDot() {\n const updatedSpace = this.form.value;\n if (\n updatedSpace.latitude &&\n updatedSpace.latitude.toString().includes(\",\")\n ) {\n updatedSpace.latitude = updatedSpace.latitude\n .toString()\n .replace(\",\", \".\");\n Number.parseFloat(updatedSpace.latitude);\n }\n if (\n updatedSpace.longitude &&\n updatedSpace.longitude.toString().includes(\",\")\n ) {\n updatedSpace.longitude = updatedSpace.longitude\n .toString()\n .replace(\",\", \".\");\n Number.parseFloat(updatedSpace.longitude);\n }\n }\n\n handleInputImageText() {\n if (this.location && this.location.annexes) {\n this.imageInputText = \"Change picture\";\n getSignedImageUrlForSpace(this.location).then((url) => {\n if (url) {\n this.currentImage = url;\n }\n });\n } else {\n this.imageInputText = \"Add picture\";\n }\n }\n}\n","<div class=\"col-md-6 form-new-loc\" *ngIf=\"form\">\n <form (ngSubmit)=\"onSubmit()\" [formGroup]=\"form\">\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Name' | translate}} *</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" [class.is-invalid]=\"name.invalid && isSubmitted\" required\n formControlName=\"name\">\n <div class=\"invalid-feedback\">\n {{'Name is mandatory' | translate}}\n </div>\n </div>\n </div>\n \n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Address' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"addresses\">\n </div>\n </div>\n \n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Construction year' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"constructionYear\">\n </div>\n </div>\n \n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Latitude' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"latitude\">\n </div>\n </div>\n \n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Longitude' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"longitude\">\n </div>\n </div>\n \n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Access level' | translate}}</label>\n <div class=\"col-sm-9\">\n <select class=\"d-inline-block custom-select rounded-pill\" formControlName=\"level\">\n <option *ngFor=\"let level of levels\" [value]=\"level\">{{level | translate}}</option>\n </select>\n </div>\n </div>\n \n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Energy Class' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"classEnergyConsumption\">\n </div>\n </div>\n \n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Greenhouse gas emission Class' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"classGes\">\n </div>\n </div>\n \n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Cover picture' | translate}}</label>\n <div class=\"col-sm-9\">\n <img #imageBasePreview *ngIf=\"currentImage\" class=\"image-preview\" [src]=\"currentImage\">\n <label #imageInputContainer for=\"image\"\n class=\"btn btn-label-file btn-outline-primary rounded-pill imageInputContainer\">\n <input #imageInput type=\"file\" id=\"image\" (change)=\"handleImageInput($event.target)\" />\n {{ imageInputText | translate}}</label>\n <button *ngIf=\"currentImage && !imageToUpload\" \n class=\"btn btn-outline-primary rounded-pill\" (click)=\"imageToBeDeleted=true;clearImageFile()\">{{'Delete picture' | translate }}</button>\n <div class=\"image-name\" *ngIf=\"imageToUpload\">\n <p >{{ imageToUpload.name}}</p>\n <div (click)=\"clearImageFile()\" [style.cursor]=\"'pointer'\">\n <span class=\"iconify\" data-icon=\"mdi:trash-can-outline\"></span>\n </div>\n </div>\n \n </div>\n </div>\n <div class=\"mb-3 row\" *ngIf=\"!location\">\n <label class=\"col-sm-3 col-form-label\">{{'Create mission for this space' | translate}}</label>\n <div class=\"col-sm-3\">\n <input type=\"checkbox\" [(ngModel)]=\"addMissionForNewSpace\" [ngModelOptions]=\"{standalone: true}\">\n </div>\n </div>\n \n <button type=\"submit\" class=\"btn btn-outline-primary rounded-pill me-3\">{{'Save' | translate}}</button>\n <button type=\"button\" (click)=\"onCancel()\" class=\"btn btn-outline-primary rounded-pill\">{{'Cancel' |\n translate}}</button>\n </form>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { LevelStatus, Space, SpaceService, BaseUserService, ViewerService, NavigationService, NavigatorService, enumToArray, Visit, MenuItem, SearchObjectType } from 'ngx-smarterplan-core';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'lib-locations',\n templateUrl: './locations.component.html',\n styleUrls: ['./locations.component.scss']\n})\nexport class LocationsComponent implements OnInit {\n\n createForm: FormGroup;\n\n levels: Array<LevelStatus>;\n\n imageToUpload: File;\n\n isAdding = false;\n\n filteredLocations: Space[] = [];\n\n isManager = false;\n\n isMuseumUser = true;\n\n locations: Space[] = [];\n\n menuItems: MenuItem[] = [];\n\n userSubcription: Subscription;\n\n locationIDSubscription: Subscription;\n\n /** Last filtered Locations, used when we go back on all locations from the search bar location */\n lastFiltredLocations: Space[] = [];\n\n constructor(\n private spaceService: SpaceService,\n private router: Router,\n private userService: BaseUserService,\n private viewerService: ViewerService,\n private navigationService: NavigationService,\n private navigatorService: NavigatorService,\n ) {\n this.levels = enumToArray(LevelStatus);\n this.userSubcription = this.userService.isChanged.subscribe((isConnected) => {\n if (isConnected) {\n this.refresh();\n }\n });\n\n this.locationIDSubscription =\n this.navigatorService.locationIDChange.subscribe((id) => {\n this.changeSelectedLocation(id);\n this.setupMenuItems();\n });\n }\n\n async ngOnInit() {\n if (this.userService.cu) {\n this.resetList();\n this.updateUserRights();\n }\n this.setupMenuItems();\n }\n\n\n findSpaceById(id: string): Space {\n return this.locations.find((loc) => loc.id === id);\n }\n\n /**\n * Update when we change the selected location in filter (search bar)\n * @param id for a location, if null display all last filtred location\n */\n changeSelectedLocation(id?: string) {\n const space = id ? this.findSpaceById(id) : null;\n this.filteredLocations = space ? [space] : this.lastFiltredLocations; // New selected space or last filtered location\n }\n\n refresh() {\n this.updateUserRights();\n this.resetList();\n }\n\n \n ngOnDestroy() {\n this.userSubcription.unsubscribe();\n this.locationIDSubscription.unsubscribe();\n }\n\n setupMenuItems() {\n this.menuItems = [{ label: \"All Locations\", url: \"/localisation\" }];\n if (this.isAdding) {\n this.menuItems.push({ label: \"New\" });\n }\n if (this.filteredLocations.length === 1) {\n const selectedLoc = this.filteredLocations[0];\n this.menuItems.push({ label: selectedLoc.name });\n }\n }\n\n updateUserRights() {\n this.isManager = this.userService.hasManagerRoleInAnyMission();\n this.isMuseumUser = this.userService.hasOnlyMuseumRole();\n }\n\n isManagerForSpace(spaceID: string): boolean {\n return (\n this.userService.isManager(spaceID) ||\n this.userService.isGuide(spaceID)\n );\n }\n\n async resetList() {\n this.locations = await this.spaceService.getLocationsForCurrentUser();\n this.filteredLocations = this.locations;\n this.lastFiltredLocations = this.locations;\n this.isAdding = false;\n this.changeSelectedLocation(\n this.navigatorService.currentNavBarLocationID,\n ); // Set for the current selected location\n this.setupMenuItems();\n }\n\n onAddLocation() {\n this.isAdding = true;\n this.setupMenuItems();\n }\n\n handleImageInput(files: FileList) {\n this.imageToUpload = files.item(0);\n }\n\n onFormChange(event: any) {\n this.navigatorService.locationIDChange.next(\n null,\n ); /** Remove selected location */\n this.isAdding = false;\n if (event) {\n this.resetList();\n }\n this.setupMenuItems();\n }\n\n async onVisitClick(loc: Space, visit: Visit) {\n if (!this.userService.userHasAccessToAllZonesInSpace(loc.id)) {\n // get allowed sweep for the user\n const allowedSweeps =\n await this.navigationService.getAllowedSweepsIDsForUserInSpace(\n loc.id,\n );\n const firstSweep = allowedSweeps[0];\n this.viewerService.setSweepToMove(firstSweep);\n }\n if (this.userService.isGuide(loc.id)) {\n this.router.navigate([\"museum\", loc.id]);\n } else {\n this.router.navigate([\"visit\", loc.id], {\n queryParams: { model3D: visit.model3d },\n });\n }\n }\n\n applyResultsSearchBar(results: Space[]) {\n this.filteredLocations = results || this.locations;\n this.lastFiltredLocations = this.filteredLocations;\n this.navigatorService.locationIDChange.next(null); // When we search with keyword, we would like to search on all locations\n }\n\n getSearchType(): SearchObjectType {\n return SearchObjectType.LOCATION;\n }\n\n}\n","<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 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 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 *ngIf=\"isManagerForSpace(loc.id)\" class=\"btn-details\" [routerLink]=\"[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 *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","import { Component, OnInit } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { MenuItem, SpaceService, BaseUserService, NavigatorService, SpaceStatus, Space } from 'ngx-smarterplan-core';\n\n@Component({\n selector: 'lib-detail-location',\n templateUrl: './detail-location.component.html',\n styleUrls: ['./detail-location.component.scss']\n})\nexport class DetailLocationComponent implements OnInit {\n\n space: Space;\n\n editForm: FormGroup;\n\n isEditing = false;\n\n imageToUpload: File;\n\n id: string;\n\n menuItems: MenuItem[] = [];\n\n isValidatingDpe = false;\n\n selectedDpeResult: any;\n\n gettingData = false;\n\n parsedMetadata: {\n geo_adresse: string;\n secteur_activite: string;\n annee_construction: string;\n classe_consommation_energie: string;\n classe_estimation_ges: string;\n selected: boolean;\n }[];\n\n guestLink: string;\n\n canArchive: boolean;\n\n constructor(\n private route: ActivatedRoute,\n private spaceService: SpaceService,\n private router: Router,\n private userService: BaseUserService,\n private translate: TranslateService,\n private navigatorService: NavigatorService,\n ) {}\n\n async ngOnInit() {\n this.id = this.route.snapshot.paramMap.get(\"id\");\n this.navigatorService.locationIDChange.next(this.id); // Send update for the location filter bar\n this.space = await this.spaceService.getSpace(this.id);\n this.setupMenuItems();\n this.setGuestLink();\n this.setCanArchive();\n }\n\n setupMenuItems() {\n this.menuItems = [\n { label: \"Locations\", url: \"/localisation\" },\n {\n label: this.space.name,\n url: `/localisation/${this.space.id}`,\n },\n ];\n\n if (this.isEditing) {\n this.menuItems.push({ label: \"Edit\" });\n } else {\n this.menuItems.push({ label: \"Information\" });\n }\n }\n\n onEdit() {\n this.isEditing = true;\n this.setupMenuItems();\n }\n\n onReturn() {\n // this.locationService.back()\n this.router.navigate([\"dashboard/localisation\"]);\n }\n\n reset() {\n this.isEditing = false;\n this.setupMenuItems();\n }\n\n async onArchive() {\n const message = this.translate.instant(\"confirm.archiveSpace\");\n if (window.confirm(message)) {\n await this.spaceService.softDeleteSpace(this.id);\n this.onReturn();\n }\n }\n\n onFormChange(event: Space) {\n this.isEditing = false;\n if (event) {\n this.space = event;\n }\n this.setupMenuItems();\n }\n\n onDpeValidate() {\n this.isValidatingDpe = true;\n this.parsedMetadata = JSON.parse(this.space.metadata);\n this.parsedMetadata = this.parsedMetadata.filter(\n (result) => result.geo_adresse,\n );\n }\n\n onSelectChange(selectedResult: any) {\n for (const result of this.parsedMetadata) {\n if (result !== selectedResult && result.selected) {\n result.selected = false;\n }\n }\n this.selectedDpeResult = selectedResult;\n }\n\n async onSaveResult() {\n if (this.selectedDpeResult) {\n const input = {\n id: this.space.id,\n constructionYear: this.selectedDpeResult.annee_construction,\n classEnergyConsumption:\n this.selectedDpeResult.classe_consommation_energie,\n classGes: this.selectedDpeResult.classe_estimation_ges,\n status: SpaceStatus.DPE_VALIDATED,\n };\n const updatedLoc = await this.spaceService.updateSpace(input);\n this.space = updatedLoc;\n this.isValidatingDpe = false;\n }\n }\n\n onCancel() {\n this.isValidatingDpe = false;\n }\n\n async onErase() {\n await this.spaceService.updateSpace({\n id: this.space.id,\n status: SpaceStatus.DPE_VALIDATED,\n });\n this.space.status = SpaceStatus.DPE_VALIDATED;\n this.isValidatingDpe = false;\n }\n\n async onGetDpeData() {\n this.gettingData = true;\n await this.spaceService.updateSpace({\n id: this.space.id,\n status: SpaceStatus.DPE_FETCH,\n });\n\n // force update of location\n setTimeout(async () => {\n this.space = await this.spaceService.getSpace(this.space.id);\n this.gettingData = false;\n }, 1500);\n }\n\n setGuestLink() {\n if (this.space.guestLink) {\n const { origin } = document.location;\n this.guestLink = `${origin}/${this.space.guestLink}`;\n setTimeout(() => {\n const hyperlink = document.querySelector(\n \"#linkHref\",\n ) as HTMLLinkElement;\n const message = this.translate.instant(\"confirm.followLink\");\n hyperlink.addEventListener(\"click\", async () => {\n if (window.confirm(message)) {\n window.location.href = this.guestLink;\n await this.userService.logoutCurrentAndSignOutAuth();\n this.router.navigate([\"auth\"]);\n }\n });\n }, 0);\n }\n }\n\n async setCanArchive() {\n this.canArchive = this.userService.isSPAdmin()\n ? true\n : await this.spaceService.canArchiveSpace(this.id);\n }\n\n}\n","<div class=\"container-fluid\">\n <div class=\"m-3\">\n <lib-tab-navigation [menuItems]='menuItems' (onGoBack)=\"reset()\"></lib-tab-navigation>\n </div>\n <button class=\"btn btn-outline-primary rounded-pill me-3\" (click)=\"onReturn()\">{{'Back to locations' |\n translate}}</button>\n <div class=\"row\" *ngIf=\"!isEditing && space\">\n <div class=\"col-md-5\">\n <ul class=\"list-group list-group-flush\">\n <li class=\"list-group-item bg-transparent\">{{'Name' | translate}}: {{space.name}} </li>\n <li class=\"list-group-item bg-transparent\">{{'Address' | translate}}: {{space.addresses}} </li>\n <li class=\"list-group-item bg-transparent\">{{'Construction year' | translate}}:\n {{space.constructionYear ?\n space.constructionYear : \"No data\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\">{{'Latitude' | translate}}:\n {{space.latitude ?\n space.latitude : \"No data\" | translate}}</li>\n <li class=\"list-group-item bg-transparent\">{{'Longitude' | translate}}: {{space.longitude ?\n space.longitude : \"No data\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\">{{'Access level' | translate}}: {{space.level | translate\n }} </li>\n <li class=\"list-group-item bg-transparent\">{{'Energy Class' | translate}}:\n {{space.classEnergyConsumption ?\n space.classEnergyConsumption : \"No data\" | translate}}\n <button *ngIf=\"space.status !== 'DPE_TO_VALIDATE'\"\n class=\"btn btn-outline-primary rounded-pill no-lowercase ms-5\" (click)=\"onGetDpeData()\">\n {{'Get data from API DPE' | translate}}</button>\n <a class=\"bg-transparent ms-5\" *ngIf=\"space.status === 'DPE_TO_VALIDATE'\"\n (click)=\"onDpeValidate()\" style=\"cursor: pointer;\">\n <span class=\"iconify\" data-icon=\"mdi:alert-circle-check\" style=\"color: #f19c80;\" data-width=\"25\"\n data-height=\"25\"></span>\n {{'DPE data found. Click to validate' | translate}}\n </a>\n </li>\n <li class=\"list-group-item bg-transparent\">{{'Greenhouse gas emission Class' | translate}}:\n {{space.classGes ? space.classGes : \"No data\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\">{{'Shareable Guest Link' | translate}}:\n <div style=\"display: inline;\" *ngIf=\"guestLink\">\n <a id=\"linkHref\" target=\"_blank\">{{'Try the link' | translate }}</a>\n <div ngxClipboard [cbContent]=\"guestLink\" [style.cursor]=\"'pointer'\"\n style=\"margin-left: 5px; max-width: 20px; display: inline;\" ngbTooltip=\"Copied!\"\n triggers=\"click:blur\">\n <span class=\"iconify\" data-icon=\"mdi:content-copy\" data-inline=\"false\" data-width=\"20\"\n data-height=\"20\"></span>\n </div>\n </div>\n <p *ngIf=\"!guestLink\" style=\"display: inline;\">{{'No link' | translate }}</p>\n <p *ngIf=\"!guestLink\"><small>({{'Generate link from a VISITOR mission'|translate}})</small>\n </p>\n </li>\n\n </ul>\n <div class=\"d-flex justify-content-center\" *ngIf=\"gettingData\">\n <div class=\"spinner-border\" role=\"status\">\n <span class=\"visually-hidden\">Loading...</span>\n </div>\n </div>\n <hr>\n <div class=\"d-flex\">\n <button class=\"btn btn-outline-primary rounded-pill me-3\" (click)=\"onEdit()\">{{'Edit' |\n translate}}</button>\n <div class=\"tooltip-wrapper\" ngbTooltip=\"{{!canArchive ? ('Contact SmarterPlan' | translate) : ('Archive location and related data' | translate)}}\">\n <button class=\"btn btn-outline-primary rounded-pill\" (click)=\"onArchive()\" [disabled]=\"!canArchive\">\n {{'Archive' | translate}}</button>\n </div>\n </div>\n\n\n </div>\n <div class=\"col-md-7\" *ngIf=\"isValidatingDpe\">\n <h6>{{'Most relevant results for' | translate}} : \n <b>diagnostics de performance énergétique (DPE) des bâtiments tertiaires</b></h6>\n <table class=\"table table-striped\">\n <thead>\n <tr>\n <th scope=\"col\">#</th>\n <th scope=\"col\">{{'Apply to location' | translate}}</th>\n <th scope=\"col\">{{'Address' | translate}}</th>\n <th scope=\"col\">{{'Activity sector' | translate}}</th>\n <th scope=\"col\">{{'Construction year' | translate}}</th>\n <th scope=\"col\">{{'Energy Class' | translate}}</th>\n <th scope=\"col\">{{'Greenhouse gas emission Class' | translate}}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let result of parsedMetadata; index as i\">\n <th scope=\"row\">{{ i + 1 }}</th>\n <td><input class=\"checkbox-apply\" type=\"checkbox\" [(ngModel)]=\"result.selected\"\n (change)=\"onSelectChange(result)\"></td>\n <td>{{result.geo_adresse}}</td>\n <td>{{result.secteur_activite}}</td>\n <td>{{ result.annee_construction }}</td>\n <td>{{ result.classe_consommation_energie }}</td>\n <td>{{ result.classe_estimation_ges }}</td>\n </tr>\n </tbody>\n </table>\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onSaveResult()\"\n [disabled]=\"!selectedDpeResult\">{{'Save selected' |\n translate}}</button>\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onErase()\">\n {{'No match (erase data)' | translate}}</button>\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onCancel()\">\n {{'Cancel' | translate}}</button>\n </div>\n </div>\n <lib-form-location *ngIf=\"isEditing\" [location]=\"space\" (onChange)=\"onFormChange($event)\"></lib-form-location>\n</div>\n","import { Component, ElementRef, OnInit, ViewChild } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { getDocument } from \"pdfjs-dist\";\nimport { PDFDocumentProxy } from \"ng2-pdf-viewer\";\nimport { Zone, MenuItem, Plan, Space, Navigation, PlanService, ZoneService, SpaceService, NavigationService, getMetaForImage, MatterportImportService } from 'ngx-smarterplan-core';\nimport panzoom from 'panzoom';\n\n@Component({\n selector: 'lib-calibration',\n templateUrl: './calibration.component.html',\n styleUrls: ['./calibration.component.scss']\n})\nexport class CalibrationComponent implements OnInit {\n\n /** Item to display for the navbar */\n menuItems: MenuItem[] = [];\n\n /** Canvas (Plan) */\n canvas;\n\n /** CanvasDiv (Div that contain the canvas + matterport iframe) */\n @ViewChild(\"canvasDiv\") canvasDiv: ElementRef;\n\n /** Size of the canvas & matterport iframe */\n canvasSize: { w: number; h: number };\n\n /** Zoom ratio of the canvas/plan */\n canvasZoom = 0;\n\n /** Opacity for matterport iframe */\n opacity: number = 50;\n\n /** Current rotation for matterport, [0-360], matterport rotation is bind to input range */\n rotation: number = 180;\n\n /** Previous rotation, use to calculate the deltaRotation to rotate, when user change rotation value using range input */\n prevRotation: number = 180;\n\n /** Current Camera Pose */\n cameraPose: any;\n\n /** True when the user is currently rotating with the input range, the matterport rotation events will be ignored */\n isRotatingRange: boolean = false;\n\n /** Rotating queue event to send to matterport */\n rotatingQueueEvent: number[] = [];\n\n /** True when Vertical symmetry is enabled */\n reflectV = false;\n\n /** True when Horizontal symmetry is enabled */\n reflectH = false;\n\n chosenPlan: Plan;\n\n spaceID: string;\n\n currentSpace: Space;\n\n currentZone: Zone;\n\n chosenPlanIsPdf = false;\n\n /** First Point in visit, used to determine the calibration */\n firstMarkVisit = { x: 0, y: 0 };\n\n /** Second Point in visit, used to determine the calibration */\n secondMarkVisit = { x: 0.5, y: 0.5 };\n\n /** Equivalent of 'firstMarkVisit' in canvas */\n firstMarkPlan: { x: number; y: number } = { x: 0, y: 0 };\n\n /** Equivalent of 'secondMarkVisit' in canvas */\n secondMarkPlan: { x: number; y: number } = { x: 0, y: 0 };\n\n /** Calibration result, (offsetX, offsetY, x, y) */\n calibrage: any = {};\n\n /** Is in preview mode (see scan result) */\n preview = false;\n\n /** Matterport is loading */\n loading = true;\n\n /* for pan and zoom of canvas */\n panzoom: any;\n\n currentNavigations: Navigation[];\n\n positions: { navID: string; planID: string; x: number; y: number }[] = [];\n\n floors: any[] = [];\n\n currentFloor;\n\n zoomCanBeChanged: boolean = false;\n\n constructor(\n private matterportImportService: MatterportImportService,\n private planService: PlanService,\n private route: ActivatedRoute,\n private router: Router,\n private zoneService: ZoneService,\n private spaceService: SpaceService,\n private navigationService: NavigationService,\n private translate: TranslateService,\n ) {}\n\n ngOnDestroy(): void {\n if (!this.loading) {\n this.matterportImportService.removeFrame();\n }\n }\n\n async ngOnInit(): Promise<void> {\n this.spaceID = this.route.snapshot.queryParams.spaceID;\n this.currentSpace = await this.spaceService.getSpace(this.spaceID);\n\n /** Menu nav bar */\n this.setupMenuItems();\n\n this.chosenPlan = this.planService.getChosenPlan();\n\n if (this.chosenPlan) {\n this.chosenPlanIsPdf = this.chosenPlan.annexe.includes(\"pdf\");\n this.launchViewer();\n setTimeout(() => {\n this.configureCanvas().then(() => {\n this.panzoom = panzoom(this.canvas, {\n bounds: true,\n boundsPadding: 0,\n maxZoom: 2.5,\n minZoom: 0.1,\n initialZoom: 1,\n zoomSpeed: 0.02,\n });\n });\n }, 500);\n } else {\n this.router.navigate([\n \"/dashboard/localisation\",\n this.spaceID,\n \"plans\",\n ]);\n }\n }\n\n /** **********************************************************************************************\n * MENU NAV BAR\n *********************************************************************************************** */\n setupMenuItems() {\n this.menuItems = [\n { label: \"Locations\", url: \"/localisation\" },\n {\n label: this.currentSpace.name,\n url: `/localisation/${this.spaceID}`,\n },\n {\n label: \"Plans\",\n url: `/localisation/${this.currentSpace.id}/plans`,\n },\n {\n label: \"Calibration\",\n url: `/localisation/${this.currentSpace.id}/plan-calibration?spaceID=${this.currentSpace.id}`,\n },\n ];\n }\n\n /** **********************************************************************************************\n * CANVAS\n *********************************************************************************************** */\n\n /** Display the plan */\n async configureCanvas() {\n /** Get canvas */\n if (!this.canvas) {\n const canvas = document.querySelector(\n \"#canvas\",\n ) as HTMLCanvasElement;\n this.canvas = canvas;\n }\n\n if (!this.chosenPlanIsPdf) {\n const image = await getMetaForImage(this.chosenPlan.filepath);\n /** Compute the new size for the canvas/matterport, base on the dimension of the plan, keeping the ratio */\n const size = this.getSizeForCanvas(image.width, image.height);\n\n /** Compute the plan zoom ratio (use for the calibration later) */\n this.canvasZoom = size.w / image.width;\n\n this.resizeView(size);\n\n /** Draw Plan on the canvas */\n this.drawImage(this.chosenPlan.filepath);\n } else {\n // TODO\n this.pdfToCanvas();\n }\n }\n\n /** Update size of the canvas/matterport */\n resizeView(size) {\n this.canvasDiv.nativeElement.style.width = `${size.w}px`;\n this.canvasDiv.nativeElement.style.height = `${size.h}px`;\n this.canvas.style.width = `${size.w}px`;\n this.canvas.style.height = `${size.h}px`;\n this.canvas.width = size.w;\n this.canvas.height = size.h;\n this.canvasSize = size;\n }\n\n /** Draw something on the canvas */\n drawImage(url: string, x = 0, y = 0, icone = false) {\n const image = new Image();\n const size = this.canvasSize;\n const context = this.canvas.getContext(\"2d\");\n\n /** Flip the context, for symmetry */\n // if (this.reflectV) {\n // context.translate(size.w, 0);\n // context.scale(-1, 1);\n // }\n // if (this.reflectH) {\n // context.translate(0, size.h);\n // context.scale(1, -1);\n // }\n\n let imageWidth = size.w;\n let imageHeight = size.h;\n image.addEventListener(\"load\", () => {\n if (icone) {\n imageWidth = image.width;\n imageHeight = image.height;\n }\n context.drawImage(\n image,\n 0,\n 0,\n image.width,\n image.height,\n x,\n y,\n imageWidth,\n imageHeight,\n );\n });\n image.src = url;\n }\n\n /** Get the size for the canvas, based on the plan size, keeping the ratio */\n getSizeForCanvas(w, h) {\n let canvasW = this.canvasDiv.nativeElement.offsetWidth;\n let canvasH = this.canvasDiv.nativeElement.offsetHeight;\n\n const imageRatio = w / h;\n const canvasRatio = canvasW / canvasH;\n\n if (imageRatio > canvasRatio) {\n canvasH = canvasW / imageRatio;\n } else {\n canvasW = canvasH * imageRatio;\n }\n return { w: canvasW, h: canvasH };\n }\n\n /** [TODO] Convert a PDF to a Canvas */\n async pdfToCanvas() {\n const pdfjs = await import(\"pdfjs-dist/build/pdf\");\n const pdfjsWorker = await import(\"pdfjs-dist/build/pdf.worker.entry\");\n\n pdfjs.GlobalWorkerOptions.workerSrc = pdfjsWorker;\n\n const pdf: PDFDocumentProxy = await getDocument(\n this.chosenPlan.filepath,\n ).promise;\n const page = await pdf.getPage(1);\n\n const viewPortParameters = { scale: 1 };\n const viewport = page.getViewport(viewPortParameters);\n\n this.canvas.height = viewport.height;\n this.canvas.width = viewport.width;\n\n const size = this.getSizeForCanvas(viewport.width, viewport.height);\n console.log(size);\n this.canvasSize = size;\n\n this.canvasZoom = size.w / viewport.width;\n\n const context = this.canvas.getContext(\n \"2d\",\n ) as CanvasRenderingContext2D;\n const renderContext = {\n canvasContext: context,\n viewport,\n };\n const renderTask = page.render(renderContext).promise;\n\n renderTask.then(() => console.log(\"Page rendered\"));\n\n // const res = canvas.toDataURL();\n // if (pdf != null) pdf.destroy();\n // return res;\n }\n\n /** User click to user Symmetry Vertical */\n onReflectV() {\n this.reflectV = !this.reflectV;\n this.configureCanvas();\n }\n\n /** User click to user Symmetry Horizontal */\n onReflectH() {\n this.reflectH = !this.reflectH;\n this.configureCanvas();\n }\n\n /** **********************************************************************************************\n * MATTERPORT\n *********************************************************************************************** */\n\n /** Launch matterport */\n async launchViewer() {\n await this.matterportImportService.initSdkForModel(\n this.chosenPlan.model3d,\n );\n\n const { sdk } = this.matterportImportService;\n this.floors = Object.values(this.matterportImportService.floors);\n // console.log(this.floors);\n setTimeout(async () => {\n /** Move Floor mode */\n await sdk.Mode.moveTo(sdk.Mode.Mode.FLOORPLAN);\n /** Display the correct floor for the plan */\n try {\n await this.matterportImportService.moveToFloor(\n this.chosenPlan.name,\n );\n } catch {\n console.log(\"couldnot move to floor\");\n }\n\n /** We can display the matterport view now */\n this.loading = false;\n }, 300);\n\n /** When the user try to change the view mode we set it back to floorpan */\n\n sdk.on(sdk.Mode.Event.CHANGE_END, (oldMode, newMode) => {\n if (newMode !== sdk.Mode.Mode.FLOORPLAN) {\n sdk.Mode.moveTo(sdk.Mode.Mode.FLOORPLAN, {\n transition: \"transition.instant\",\n });\n }\n });\n\n /** Update current camera pose and rotation */\n sdk.Camera.pose.subscribe((event) => {\n /** We update only if the user is not changing the rotation with the <input> range, to not override the <input> value */\n if (!this.isRotatingRange) {\n this.rotation = event.rotation.y + 180;\n this.prevRotation = this.rotation;\n this.cameraPose = event;\n }\n });\n }\n\n /** When the <input> range, for rotation, change */\n async onRotationChange() {\n const rotationDelta = this.rotation - this.prevRotation;\n this.prevRotation = this.rotation;\n\n /** Send the rotationDelta to th queue event in order to be send to matterport */\n this.rotatingQueueEvent.push(rotationDelta);\n\n /** Start to process the queue, if it's the first event */\n if (!this.isRotatingRange) {\n this.isRotatingRange = true;\n this.processRotatingQueueEvent();\n }\n }\n\n /** Process the rotating event queue, send event one by one to matterport */\n async processRotatingQueueEvent() {\n const { sdk } = this.matterportImportService;\n\n /** While the queue is not empty */\n while (this.rotatingQueueEvent.length > 0) {\n /** Rotate matterport by deltaRotation and remove event from queue */\n await sdk.Camera.rotate(this.rotatingQueueEvent.shift(), 0, {\n speed: 360,\n });\n }\n\n /** When the queue is empty, then the user is not rotating with the <input> range anymore */\n this.isRotatingRange = false;\n }\n\n /** **********************************************************************************************\n * USER ACTIONS\n *********************************************************************************************** */\n\n /** Preview calibration */\n async onPreview() {\n this.preview = true;\n /** Place sweeps */\n this.onPlaceSweeps();\n }\n\n async calibrate() {\n const [navigation] = this.currentNavigations;\n const position = JSON.parse(navigation.position);\n this.firstMarkPlan =\n await this.matterportImportService.sdk.Renderer.getScreenPosition({\n x: position.x,\n y: position.y,\n z: position.z,\n });\n this.secondMarkPlan =\n await this.matterportImportService.sdk.Renderer.getScreenPosition({\n x: position.x,\n y: 0,\n z: 0,\n });\n const deltaZVisit = 0 - position.z;\n let deltaXPlan = this.secondMarkPlan.x - this.firstMarkPlan.x;\n if (deltaXPlan === 0) {\n // console.log(\"we moved along Y axis on Plan\");\n const deltaYPlan = this.secondMarkPlan.y - this.firstMarkPlan.y;\n this.calibrage.nameYAxis = \"z\";\n this.calibrage.nameXAxis = \"x\";\n this.calibrage.offsetY = this.secondMarkPlan.y;\n this.calibrage.scaleY = deltaYPlan / deltaZVisit;\n } else {\n // console.log(\" we moved along X axis on Plan\");\n this.calibrage.nameYAxis = \"x\";\n this.calibrage.nameXAxis = \"z\";\n this.calibrage.offsetX = this.secondMarkPlan.x;\n this.calibrage.scaleX = deltaXPlan / deltaZVisit;\n }\n const thirdMarkPlan =\n await this.matterportImportService.sdk.Renderer.getScreenPosition({\n x: 0,\n y: 0,\n z: position.z,\n });\n const deltaXVisit = 0 - position.x;\n if (deltaXPlan === 0) {\n // console.log(\" we moved along X axis on Plan\");\n deltaXPlan = thirdMarkPlan.x - this.firstMarkPlan.x;\n this.calibrage.offsetX = thirdMarkPlan.x;\n this.calibrage.scaleX = deltaXPlan / deltaXVisit;\n } else {\n const deltaYPlan = thirdMarkPlan.y - this.firstMarkPlan.y;\n this.calibrage.offsetY = thirdMarkPlan.y;\n this.calibrage.scaleY = deltaYPlan / deltaXVisit;\n }\n\n /** Take considiration of pan and zoom of plan on canvas */\n const transformInfo = this.panzoom.getTransform();\n const { scale, x, y } = transformInfo;\n // console.log(transformInfo);\n this.calibrage.offsetXPlan = x;\n this.calibrage.offsetYPlan = y;\n this.calibrage.scalePlan = scale;\n console.log(this.calibrage);\n }\n\n /** Place sweeps */\n async onPlaceSweeps() {\n /** Display all scan */\n const zone = await this.zoneService.getZone(this.chosenPlan.zoneID);\n\n if (zone) {\n this.currentZone = zone;\n const navigations =\n await this.navigationService.getNavigationsForZone(\n this.currentZone,\n );\n this.currentNavigations = navigations;\n await this.calibrate();\n if (navigations.length > 0) {\n for (const navigation of navigations) { \n const testPosition = JSON.parse(navigation.position);\n const positionX =\n this.calibrage.nameXAxis === \"x\"\n ? testPosition.x\n : testPosition.z;\n const positionY =\n this.calibrage.nameYAxis === \"x\"\n ? testPosition.x\n : testPosition.z;\n const testX =\n positionX * this.calibrage.scaleX +\n this.calibrage.offsetX;\n const testY =\n positionY * this.calibrage.scaleY +\n this.calibrage.offsetY;\n // console.log(\"test position GREEN\", testX, testY);\n const transformedX =\n (testX - this.calibrage.offsetXPlan) /\n this.calibrage.scalePlan; // we are undoing the pan and zoom\n const transformedY =\n (testY - this.calibrage.offsetYPlan) /\n this.calibrage.scalePlan;\n this.positions.push({\n navID: navigation.id,\n planID: this.chosenPlan.id,\n x: transformedX,\n y: transformedY,\n });\n const iconSize = 30 * this.calibrage.scalePlan;\n const shift = iconSize / 2;\n this.drawImage(\n \"https://api.iconify.design/mdi:adjust.svg?color=green&height=30&width=30\",\n transformedX - shift,\n transformedY - shift,\n true,\n );\n }\n }\n }\n }\n\n /** Save calibration */\n async onSave() {\n if (this.currentZone) {\n /** Normalize with the zoom */\n // this.calibrage.offsetX /= this.canvasZoom;\n // this.calibrage.offsetY /= this.canvasZoom;\n // this.calibrage.x /= this.canvasZoom;\n // this.calibrage.y /= this.canvasZoom;\n this.calibrage.new = true;\n this.calibrage.imgWidth = this.canvasSize.w;\n this.calibrage.imgHeight = this.canvasSize.h;\n\n await this.planService.updatePlan({\n id: this.chosenPlan.id,\n calibration: JSON.stringify(this.calibrage),\n });\n await Promise.all(\n this.positions.map(async (position) => {\n const { navID } = position;\n delete position.navID;\n const nav = this.currentNavigations.find(\n (_nav) => _nav.id === navID,\n );\n let positionsDataToUpdate;\n if (nav.positionOnPlan) {\n const positionOnPlan = nav.positionOnPlan.map((entry) =>\n JSON.parse(entry),\n );\n const positionForCurrentPlan = positionOnPlan.find(\n (entry) => entry.planID === this.chosenPlan.id,\n );\n if (positionForCurrentPlan) {\n positionOnPlan.splice(\n positionOnPlan.indexOf(positionForCurrentPlan),\n 1,\n position,\n );\n } else {\n positionOnPlan.push(position);\n }\n positionsDataToUpdate = [...positionOnPlan];\n } else {\n positionsDataToUpdate = [position];\n }\n // console.log(positionsDataToUpdate);\n await this.navigationService.updateNavigation({\n id: navID,\n positionOnPlan: positionsDataToUpdate.map((entry) =>\n JSON.stringify(entry),\n ),\n });\n }),\n );\n }\n this.matterportImportService.removeFrame();\n\n this.router.navigate([\n \"/dashboard/localisation\",\n this.spaceID,\n \"plans\",\n ]);\n alert(this.translate.instant(\"calibration.success\"));\n }\n\n /** Reset the canvas */\n onReset() {\n this.reflectH = false;\n this.reflectV = false;\n this.preview = false;\n\n this.configureCanvas();\n }\n\n /** Cancel, leave */\n onCancel() {\n this.matterportImportService.removeFrame();\n this.router.navigate([\n \"/dashboard/localisation\",\n this.spaceID,\n \"plans\",\n ]);\n alert(this.translate.instant(\"calibration.canceled\"));\n }\n\n async onFloorClick(floor) {\n this.currentFloor = floor;\n await this.matterportImportService.moveToFloor(floor.id);\n }\n\n onActivateZoomChange() {\n this.zoomCanBeChanged = !this.zoomCanBeChanged;\n const iframe = document.querySelector(\"#viewer-frame\") as HTMLElement;\n if (iframe) {\n iframe.style.zIndex = this.zoomCanBeChanged ? \"1\" : \"0\";\n }\n }\n\n}\n","<div class=\"row mt-3\">\n <div class=\"col\">\n <div class=\"m-3\">\n <lib-tab-navigation [menuItems]='menuItems'></lib-tab-navigation>\n </div>\n </div>\n</div>\n\n<div id=\"rowCanvas\">\n <div #canvasDiv id=\"canvasDiv\">\n\n <div id=\"viewer-frame\" [style.pointer-events]=\"zoomCanBeChanged?'auto':'none'\">\n <!-- <div class=\"blur\"></div> -->\n </div>\n <canvas id=\"canvas\" [ngStyle]=\"{'opacity': (preview||loading) ? '1' : 'calc(' + opacity + '/ 100)'}\"></canvas>\n </div>\n\n <div class=\"calibration-tools container-fluid\" *ngIf=\"!(preview || loading)\">\n <h1>{{'Calibration tool' | translate}}</h1>\n <div class=\"tool\">\n <div class=\"row ms-0 me-0 legend\">\n <div [ngStyle]=\"{'opacity': 'calc(' + (-(opacity-100)+10) + '/ 100)'}\">{{'Less' | translate}}</div>\n <div class=\"legend-title\">{{'Plan Opacity' | translate }}</div>\n <div [ngStyle]=\"{'opacity': 'calc(' + (opacity+10) + '/ 100)'}\">{{'More' | translate}}</div>\n </div>\n <div class=\"row ms-0 me-0 \">\n <input [disabled]=\"false\" [ngModelOptions]=\"{standalone: true}\" [(ngModel)]=\"opacity\" type=\"range\"\n class=\"form-range\" min=\"0\" max=\"100\" value=\"50\" id=\"opacity\">\n </div>\n </div>\n <div class=\"tool\">\n <div class=\"row ms-0 me-0 \">\n <div class=\"label-legend\">{{'Change Visit Floor' | translate}}</div>\n <div ngbDropdown class=\"d-inline-block ms-3\">\n <button class=\"btn btn-label-file rounded-pill\" id=\"dropdownBasic1\" ngbDropdownToggle>\n {{currentFloor ? currentFloor.id : ('Floor' | translate) }}</button>\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\">\n <button ngbDropdownItem *ngFor=\"let floor of floors\" (click)=\"onFloorClick(floor)\">\n {{ floor.name.length > 0 ? floor.name : ('Floor ' + floor.id) }}\n </button>\n </div>\n </div>\n </div>\n\n </div>\n <div class=\"tool\">\n <div class=\"row ms-0 me-0 \">\n <div class=\"label-legend me-3\">{{'Pan/Zoom Visit' | translate}} {{zoomCanBeChanged ? \"ON\" : \"OFF\"}}\n </div>\n <input type=\"checkbox\" (change)=\"onActivateZoomChange()\" style=\"margin-top: 5px;\">\n <div class=\"card border-warning mb-3 mt-3\" *ngIf=\"zoomCanBeChanged\">\n <div class=\"card-body text-warning\">\n <h5 class=\"card-title\">{{\"calibration.wait-message\" | translate}}</h5>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"action\">\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill\" (click)=\"onPreview()\"\n [disabled]=\"zoomCanBeChanged\">{{'Preview' | translate}}</button>\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill\" (click)=\"onCancel()\">{{'Cancel' |\n translate}}</button>\n\n </div>\n\n </div>\n <div class=\"calibration-tools container-fluid\" *ngIf=\"preview\">\n <h1>{{'Validation' | translate}}</h1>\n <div class=\"action\">\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill\" (click)=\"onSave()\">{{'Validate' |\n translate}}</button>\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill\" (click)=\"onReset()\">{{'Reset' |\n translate}}</button>\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill\" (click)=\"onCancel()\">{{'Cancel' |\n translate}}</button>\n\n </div>\n </div>\n\n\n <div class=\"calibration-tools container-fluid\" *ngIf=\"loading\">\n <h3>{{\"Waiting for Matterport\" | translate}}...</h3>\n <div class=\"d-flex justify-content-center\">\n <div class=\"spinner-border\" role=\"status\">\n <span class=\"visually-hidden\">Loading...</span>\n </div>\n </div>\n\n </div>\n</div>","import { Component, OnInit } from '@angular/core';\nimport { FormGroup, FormBuilder, Validators } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Zone, Space, Plan, MenuItem, SpaceService, PlanService, getMetaForImage, getSignedFile, downloadFileAsObject, downloadBlob } from 'ngx-smarterplan-core';\nimport panzoom from 'panzoom';\n\n@Component({\n selector: 'lib-plans',\n templateUrl: './plans.component.html',\n styleUrls: ['./plans.component.scss']\n})\nexport class PlansComponent implements OnInit {\n\n spaceID: string;\n\n currentSpace: Space;\n\n plans: Plan[];\n\n // chosenPlan: Plan;\n\n indexDetails = -1;\n\n loading = false;\n\n uploadingPlan = false;\n\n planForm: FormGroup;\n\n isCurrentPlanForZone = false;\n\n canvas;\n\n scale: number;\n\n panzoom: any;\n\n currentZone: Zone;\n\n fileToUpload: File;\n\n chosenPlanIsPdf = false;\n\n zones: Zone[];\n\n menuItems: MenuItem[] = [];\n\n constructor(\n private route: ActivatedRoute,\n private router: Router,\n private spaceService: SpaceService,\n private planService: PlanService,\n private fb: FormBuilder,\n private translate: TranslateService,\n ) {}\n\n ngOnInit(): void {\n this.spaceID = this.route.snapshot.paramMap.get(\"id\");\n this.getPlans();\n if (\n this.planService.getPlanFileCache() &&\n this.planService.getChosenPlan()\n ) {\n this.addPlanFromCache(\n this.planService.getPlanFileCache(),\n this.planService.getChosenPlan(),\n );\n this.planService.setPlanFileCache(null);\n }\n this.planService.setChosenPlan(null);\n }\n\n setupMenuItems() {\n this.menuItems = [\n { label: \"Locations\", url: \"/localisation\" },\n {\n label: this.currentSpace.name,\n url: `/localisation/${this.currentSpace.id}`,\n },\n {\n label: \"Plans\",\n url: `/localisation/${this.currentSpace.id}/plans`,\n },\n ];\n }\n\n onGoBack() {}\n\n async onPlanClick(plan?: Plan) {\n if (plan) this.planService.setChosenPlan(plan);\n this.chosenPlanIsPdf = plan.annexe.includes(\"pdf\");\n if (!this.chosenPlanIsPdf) {\n setTimeout(() => {\n this.configureCanvas().then(() => {\n this.panzoom = panzoom(this.canvas, {\n bounds: true,\n boundsPadding: 0,\n maxZoom: 3.5,\n minZoom: 0.1,\n initialZoom: 0.5,\n });\n });\n }, 500);\n }\n }\n\n async configureCanvas() {\n this.uploadingPlan = true;\n const canvas = document.querySelector(\"#canvas\") as HTMLCanvasElement;\n const image = await getMetaForImage(this.getChoosenPlan().filepath);\n canvas.width = image.width;\n canvas.height = image.height;\n this.canvas = canvas;\n this.drawImage(this.getChoosenPlan().filepath);\n this.uploadingPlan = false;\n }\n\n drawImage(url: string, x = 0, y = 0) {\n const image = new Image();\n const context = this.canvas.getContext(\"2d\");\n const imageWidth = this.canvas.width;\n const imageHeight = this.canvas.height;\n image.addEventListener(\"load\", () => {\n context.drawImage(\n image,\n 0,\n 0,\n image.width,\n image.height,\n x,\n y,\n imageWidth,\n imageHeight,\n );\n });\n image.src = url;\n // image.crossOrigin = \"*\"; //need to download as png,\n // BUT: https://stackoverflow.com/questions/49503171/the-image-tag-with-crossorigin-anonymous-cant-load-success-from-s3\n }\n\n async getPlans() {\n this.loading = true;\n this.currentSpace = await this.spaceService.getSpace(this.spaceID);\n this.setupMenuItems();\n\n this.zones = this.currentSpace.zones.items;\n this.plans = await this.planService.getSingedPlansForSpace(this.spaceID);\n this.loading = false;\n if (this.plans.length === 1) {\n this.onPlanClick(this.plans[0]);\n }\n }\n\n getChoosenPlan() {\n return this.planService.getChosenPlan();\n }\n\n removeImage() {\n const context = this.canvas.getContext(\"2d\");\n context.clearRect(0, 0, 4096, 4096);\n }\n\n /**\n *\n */\n onCalibrateClick() {\n if (this.getChoosenPlan()) {\n this.router.navigate(\n [\"/dashboard/localisation\", this.spaceID, \"plan-calibration\"],\n { queryParams: { spaceID: this.spaceID } },\n );\n }\n }\n\n /**\n *\n */\n onEditClick() {\n if (this.getChoosenPlan()) {\n this.router.navigate(\n [\"/dashboard/localisation\", this.spaceID, \"plan-edit\"],\n { queryParams: { spaceID: this.spaceID } },\n );\n }\n }\n\n onUploadClick() {\n const inputFile = document.querySelector(\n \"#upload-file\",\n ) as HTMLInputElement;\n inputFile.click();\n }\n\n addPlan(target: EventTarget) {\n this.fileToUpload = (target as HTMLInputElement).files[0];\n this.planForm = this.fb.group({\n name: [this.fileToUpload.name, [Validators.required]],\n zoneID: [null, [Validators.required]],\n spaceID: this.spaceID,\n isModified: false,\n calibration:\"\",\n });\n }\n\n addPlanFromCache(file: File, plan: Plan) {\n this.fileToUpload = file;\n this.planForm = this.fb.group({\n name: [this.fileToUpload.name, [Validators.required]],\n zoneID: [plan ? plan.zoneID : null, [Validators.required]],\n spaceID: this.spaceID,\n isModified: !!plan,\n calibration:\n plan && plan.isModified && plan.calibration\n ? plan.calibration\n : \"\",\n });\n }\n\n async onSavePlan() {\n const formValue = this.planForm.value as Plan;\n formValue.isCurrentForZone = this.isCurrentPlanForZone;\n const createdPlan = await this.planService.createPlanWithAnnexe(\n formValue,\n this.fileToUpload,\n );\n const filepath = await getSignedFile(createdPlan.annexe);\n if (filepath) {\n createdPlan.filepath = filepath;\n }\n if (formValue.isCurrentForZone) {\n // set all other plans to not current\n this.planService.setAllPlansForZoneNotCurrent(\n createdPlan.zoneID,\n createdPlan.id,\n );\n }\n this.plans.push(createdPlan);\n this.planForm = null;\n this.fileToUpload = null;\n }\n\n onCancelUpload() {\n this.fileToUpload = null;\n this.planForm = null;\n }\n\n async onCurrentPlanClick() {\n await this.planService.updatePlan({\n id: this.getChoosenPlan().id,\n isCurrentForZone: this.getChoosenPlan().isCurrentForZone,\n });\n if (this.getChoosenPlan().isCurrentForZone) {\n this.planService.setAllPlansForZoneNotCurrent(\n this.getChoosenPlan().zoneID,\n this.getChoosenPlan().id,\n );\n }\n }\n\n async onDownloadClick() {\n const signedFile = await downloadFileAsObject(\n this.getChoosenPlan().annexe,\n );\n if (signedFile) {\n // @ts-ignore\n downloadBlob(signedFile.Body, this.getChoosenPlan().name);\n }\n }\n\n async onDownloadAsPng() {\n const canvas = document.querySelector(\"#canvas\") as HTMLCanvasElement;\n canvas.toBlob(function (blob) {\n downloadBlob(blob, \"plan-as-png.png\");\n });\n }\n\n async onRemoveClick() {\n const message = this.translate.instant(\"confirm.deletePlan\");\n if (window.confirm(message)) {\n await this.planService.deletePlan(this.getChoosenPlan());\n this.removeImage();\n this.planService.setChosenPlan(null);\n this.getPlans();\n }\n }\n}\n","<div class=\"container-fluid\" *ngIf=\"currentSpace\" class=\"dashboard-tab\">\n <div class=\"m-3\">\n <lib-tab-navigation [menuItems]='menuItems' (onGoBack)=\"onGoBack()\"></lib-tab-navigation>\n </div>\n <div class=\"d-flex justify-content-center\" *ngIf=\"loading\">\n <div class=\"spinner-border\" role=\"status\">\n <span class=\"visually-hidden\">Loading...</span>\n </div>\n </div>\n <div class=\"mt-3\" *ngIf=\"!plans && !loading\">\n <h4 style=\"font-weight: bold;\">{{'No imported plans' | translate }}</h4>\n <p>{{'For import from 3D visit: go Virtual Visits => Import Images' | translate}}</p>\n </div>\n <div class=\"row ms-1\">\n <div ngbDropdown class=\"d-inline-block me-3\">\n <button class=\"btn btn-label-file rounded-pill\" id=\"dropdownBasic1\" ngbDropdownToggle>{{getChoosenPlan() ?\n getChoosenPlan().name: ('Choose Plan' | translate) }}</button>\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\">\n <button ngbDropdownItem *ngFor=\"let plan of plans\" (click)=\"onPlanClick(plan)\">{{plan.name }}\n </button>\n </div>\n </div>\n <div class=\"d-inline-block\" ngbDropdown #myDrop=\"ngbDropdown\">\n <button class=\"btn btn-label-file rounded-pill\" id=\"dropdownManual\" ngbDropdownToggle>{{'Choose action' |\n translate}}</button>\n <div ngbDropdownMenu aria-labelledby=\"dropdownManual\">\n <button (click)=\"onCalibrateClick()\" ngbDropdownItem [disabled]=\"!getChoosenPlan()\">{{'Calibrate' |\n translate}}</button>\n <button (click)=\"onEditClick()\" ngbDropdownItem [disabled]=\"!getChoosenPlan()\">{{'Edit plan' |\n translate}}\n </button>\n <button (click)=\"onUploadClick()\" ngbDropdownItem>{{'Upload new plan' | translate}}</button>\n <button (click)=\"onDownloadClick()\" ngbDropdownItem [disabled]=\"!getChoosenPlan()\">{{'Download plan' |\n translate}}</button>\n <button (click)=\"onRemoveClick()\" ngbDropdownItem\n [disabled]=\"!getChoosenPlan() || getChoosenPlan().isImportedMatterport\">{{'Delete plan' |\n translate}}</button>\n <!-- <button (click)=\"onDownloadAsPng()\" ngbDropdownItem [disabled]=\"!getChoosenPlan()\">\n {{'Download plan as PNG' | translate}}</button> -->\n </div>\n </div>\n </div>\n <div class=\"row mt-3 ms-0\">\n <h4 *ngIf=\"fileToUpload\">{{'New plan' | translate }}</h4>\n <input class=\"hidden\" type=\"file\" id=\"upload-file\" name=\"upload-file\" accept=\"image/png, image/jpeg, .pdf, .svg\"\n ngf-max-size=\"6MB\" (change)=\"addPlan($event.target)\">\n </div>\n <div class=\"col-md-6 mt-3\" *ngIf=\"planForm\">\n <form (ngSubmit)=\"onSavePlan()\" [formGroup]=\"planForm\">\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3\">{{'Name' | translate}} </label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"name\">\n </div>\n </div>\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3\">{{'Zone' | translate}} </label>\n <div class=\"col-sm-9\">\n <select class=\"form-control\" formControlName=\"zoneID\">\n <option *ngFor=\"let zone of zones\" [ngValue]=\"zone.id\">\n {{ zone.name }}\n </option>\n </select>\n </div>\n </div>\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3\">{{'Set as current plan for zone' | translate}}</label>\n <div class=\"col-sm-3\">\n <input type=\"checkbox\" [(ngModel)]=\"isCurrentPlanForZone\" [ngModelOptions]=\"{standalone: true}\">\n </div>\n </div>\n <button [disabled]=\"planForm.invalid\" type='submit' class=\"btn btn-label-file rounded-pill\">{{'Save' |\n translate}}</button>\n <button class=\"btn btn-label-file rounded-pill ms-3\" type=\"button\" (click)=\"onCancelUpload()\">{{'Cancel' |\n translate}}</button>\n </form>\n </div>\n <ul class=\"col-md-6 list-group list-group-flush\" *ngIf=\"getChoosenPlan()\">\n <li class=\"list-group-item bg-transparent\">{{'Name' | translate }} : {{getChoosenPlan().name}} </li>\n <li class=\"list-group-item bg-transparent\"> {{'Plan is ' | translate }} :\n {{getChoosenPlan().calibration ? ('Calibrated' | translate) : ('Not calibrated' | translate)}}</li>\n <li class=\"list-group-item bg-transparent\">{{'Attributed to zone ' | translate }} :\n {{getChoosenPlan().zone ? getChoosenPlan().zone.name : 'None'}}</li>\n <li class=\"list-group-item bg-transparent\">{{'Is current plan for zone ' | translate }} :\n <input type=\"checkbox\" [(ngModel)]=\"getChoosenPlan().isCurrentForZone\" (change)=\"onCurrentPlanClick()\">\n </li>\n\n </ul>\n\n <div class=\"row mt-4\">\n <div class=\"col-md-10\">\n <embed *ngIf=\"getChoosenPlan() && chosenPlanIsPdf\" [src]=\"getChoosenPlan().filepath | safeUrl\"\n type=\"application/pdf\" frameBorder=\"0\" scrolling=\"auto\" height=\"650px;\" width=\"100%\" />\n <div *ngIf=\"!chosenPlanIsPdf\" class=\"row\" style=\"height: 500px; overflow: hidden;\" id=\"canvasDiv\">\n <canvas id=\"canvas\" width=\"4096px\" height=\"4096px\">\n <!-- <img *ngIf=\"chosenPlan\" id=\"plan-image\" [src]=\"chosenPlan.filepath\" style=\"width: 100%;\"> -->\n </canvas>\n\n </div>\n </div>\n </div>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'lib-chevron',\n templateUrl: './chevron.component.html',\n styleUrls: ['./chevron.component.scss']\n})\nexport class ChevronComponent implements OnInit {\n\n @Input() conditionShowing = false;\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","<div style=\"height: 30px; width: 30px;\">\n <span class=\"icon-container\" >\n <div [class]=\"conditionShowing ? 'icon-img-up' : 'icon-img-down'\"></div>\n </span>\n</div>\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { FormGroup, FormBuilder, Validators, AbstractControl } from '@angular/forms';\nimport { ActivatedRoute } from '@angular/router';\nimport { NgbModal, ModalDismissReasons } from '@ng-bootstrap/ng-bootstrap';\nimport { Node, Visit, MenuItem, MatterportImportService, CaptureService, NodeService, SpaceService, VisitService, CaptureViewer, Capture } from 'ngx-smarterplan-core';\n\n@Component({\n selector: 'lib-visits',\n templateUrl: './visits.component.html',\n styleUrls: ['./visits.component.scss']\n})\nexport class VisitsComponent implements OnInit {\n spaceId: string;\n\n visitIndexDetails = -1;\n\n visitForm: FormGroup;\n\n isEditing: boolean = false;\n\n visitSubmitted: boolean = false;\n\n captureDate: number;\n\n currentSpace = { zones: [] } as any;\n\n visits: Visit[] = [];\n\n closeResult: string;\n\n @ViewChild(\"content\", { static: false }) private content;\n\n modalReference: any;\n\n canCancelImport = false;\n\n imagesProcessed: number = 0;\n\n totalImages: number = 0;\n\n menuItems: MenuItem[] = [];\n\n constructor(\n private fb: FormBuilder,\n private matterportImportService: MatterportImportService,\n private captureService: CaptureService,\n private nodeService: NodeService,\n private spaceService: SpaceService,\n private route: ActivatedRoute,\n private modalService: NgbModal,\n private visitService: VisitService,\n ) {\n this.matterportImportService.importingImages.subscribe(() => {\n this.canCancelImport = true;\n });\n this.matterportImportService.sweepProcessedCount.subscribe((count) => {\n this.imagesProcessed = count + 1;\n });\n this.matterportImportService.totalSweepsCount.subscribe((count) => {\n this.totalImages = count;\n });\n }\n\n ngOnInit(): void {\n this.spaceId = this.route.snapshot.paramMap.get(\"id\");\n this.resetVisits();\n }\n\n /*\n Visit = {\n captureID: string,\n model3d: string,\n takenAt: number,\n spaceID: string,\n viewer: CaptureViewer,\n surface: number,\n node: Node,\n name?: string | null\n }\n */\n setupMenuItems() {\n this.menuItems = [\n { label: \"Locations\", url: \"/localisation\" },\n {\n label: this.currentSpace.name,\n url: `/localisation/${this.currentSpace.id}`,\n },\n {\n label: \"Virtual visits\",\n url: `/localisation/${this.currentSpace.id}/visits`,\n },\n ];\n }\n\n onGoBack() {\n this.onCancel();\n }\n\n async resetVisits() {\n this.visits = [];\n this.currentSpace = await this.spaceService.getSpace(this.spaceId);\n this.setupMenuItems();\n await this.visitService\n .getVisitsForSpaceForUser(this.spaceId)\n .then((visits) => {\n if (visits) {\n this.visits = visits;\n }\n });\n }\n\n initVisitForm(input: Visit = null) {\n if (input) {\n this.visitForm = this.fb.group({\n captureID: input.captureID,\n nodeID: input.node.id,\n name: [input.name, [Validators.required]],\n model3D: [input.model3d, [Validators.required]],\n viewer: input.viewer ? input.viewer : CaptureViewer.MATTERPORT,\n surface: input.surface ? input.surface : null,\n });\n this.captureDate = input.takenAt;\n } else {\n this.visitForm = this.fb.group({\n model3D: [null, [Validators.required]],\n viewer: CaptureViewer.MATTERPORT,\n surface: null,\n name: [null, [Validators.required]],\n });\n }\n }\n\n onToggleDetail(index) {\n this.visitIndexDetails = index === this.visitIndexDetails ? -1 : index;\n }\n\n onAddVisit() {\n this.initVisitForm();\n this.menuItems.push({ label: \"New\" });\n }\n\n onEdit(visit) {\n this.initVisitForm(visit);\n this.isEditing = true;\n this.menuItems.push({ label: visit.name });\n }\n\n async onSubmitVisit() {\n this.visitSubmitted = true;\n if (!this.visitForm.valid) {\n return;\n }\n const formValue = this.visitForm.value;\n const capture = {\n viewer: formValue.viewer,\n takenAt: this.captureDate,\n surface: formValue.surface,\n spaceID: this.currentSpace.id,\n } as Capture;\n\n if (this.isEditing) {\n capture.id = formValue.captureID;\n await this.captureService.updateCapture(capture);\n const node = {\n id: formValue.nodeID,\n model3D: formValue.model3D,\n metadata: formValue.name,\n } as Node;\n await this.nodeService.updateNode(node);\n } else {\n let createdNode;\n await this.captureService.createCapture(capture).then(async (res) => {\n if (res) {\n const node = {\n model3D: formValue.model3D,\n captureID: res.id,\n metadata: formValue.name,\n } as Node;\n createdNode = await this.nodeService.createNode(node);\n }\n });\n // let newMetadata = this.currentSpace.metadata + \",\" + formValue.model3D;\n // this.spaceService.update({ id: this.spaceId, metadata: newMetadata});\n await this.launchImport(\n formValue.model3D,\n formValue.surface,\n createdNode,\n false,\n );\n this.modalReference.close();\n }\n await this.resetVisits();\n this.onCancel();\n }\n\n get model3D(): AbstractControl {\n return this.visitForm.get(\"model3D\");\n }\n\n get name(): AbstractControl {\n return this.visitForm.get(\"name\");\n }\n\n onCancel() {\n this.visitSubmitted = false;\n this.visitForm = null;\n this.isEditing = false;\n this.canCancelImport = false;\n this.totalImages = 0;\n this.imagesProcessed = 0;\n this.setupMenuItems();\n }\n\n async onDelete(visit: Visit, index) {\n await this.visitService.deleteVisit(visit, this.spaceId);\n this.resetVisits();\n }\n\n private getDismissReason(reason: any): string {\n if (reason === ModalDismissReasons.ESC) {\n return \"by pressing ESC\";\n }\n if (reason === ModalDismissReasons.BACKDROP_CLICK) {\n return \"by clicking on a backdrop\";\n }\n return `with: ${reason}`;\n }\n\n async launchImport(\n model3D,\n surface,\n node,\n imagesOnly = false,\n ): Promise<void> {\n this.modalReference = this.modalService.open(this.content, {\n ariaLabelledBy: \"modal-basic-title\",\n });\n this.modalReference.result.then(\n (result) => {\n this.closeResult = `Closed with: ${result}`;\n console.log(this.closeResult);\n this.cancelImport();\n },\n (error) => {\n this.closeResult = `Dismissed ${this.getDismissReason(error)}`;\n console.log(this.closeResult);\n this.cancelImport();\n },\n );\n const sdkStarted = await this.matterportImportService.initSdkForModel(\n model3D,\n );\n await (imagesOnly\n ? this.matterportImportService.importData(\n this.spaceId,\n surface,\n true,\n node,\n )\n : this.matterportImportService.importData(\n this.spaceId,\n surface,\n false,\n node,\n ));\n return Promise.resolve();\n }\n\n private cancelImport() {\n this.matterportImportService.abandon();\n this.onCancel();\n this.resetVisits();\n }\n\n onImport(visit: Visit) {\n this.launchImport(visit.model3d, null, visit.node.id, true);\n }\n}\n","<div class=\"container-fluid\" class=\"dashboard-tab\">\r\n <div class=\"m-3\">\r\n <lib-tab-navigation [menuItems]='menuItems' (onGoBack)=\"onGoBack()\"></lib-tab-navigation>\r\n </div>\r\n\r\n <div class=\"row main-form-container\">\r\n <div class=\"col-md-6 form-container\">\r\n <ul class=\"list-group list-group-flush\" *ngIf=\"!visitForm\">\r\n <li class=\"list-group-item list-group-item-action\" *ngFor=\"let visit of visits; index as index\"\r\n (click)=\"onToggleDetail(index)\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n {{visit.name ? visit.name : visit.model3d }}\r\n <lib-chevron [conditionShowing]=\"index==visitIndexDetails\"></lib-chevron>\r\n </div>\r\n <div *ngIf=\"index==visitIndexDetails\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item bg-transparent\">{{'Name' | translate}} : {{ visit.name ?\r\n visit.name : \"Not provided\" | translate}}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'3D Model' | translate}} : {{ visit.model3d }}\r\n </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Surface' | translate}}, m<sup>2</sup>: {{\r\n visit.surface ?\r\n visit.surface : 'Not provided' | translate}}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Viewer' | translate}} : {{ visit.viewer }}\r\n </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Date of capture' | translate}} : {{\r\n visit.takenAt | timeDateString | async}}\r\n <li class=\"list-group-item bg-transparent\">{{'Images are imported' | translate}} : {{\r\n visit.imagesImported }}\r\n </li>\r\n </ul>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\"\r\n *ngIf=\"!visit.imagesImported\" (click)=\"onImport(visit)\">{{'Import images' |\r\n translate}}</button>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\"\r\n (click)=\"onEdit(visit)\">{{'Edit' | translate}}</button>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill\"\r\n (click)=\"onDelete(visit, index)\">{{'Delete' | translate}}</button>\r\n </div>\r\n </li>\r\n </ul>\r\n <div *ngIf=\"visitForm\">\r\n <form (ngSubmit)=\"onSubmitVisit()\" [formGroup]=\"visitForm\">\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-2 col-form-label\">{{'Name' | translate}}</label>\r\n <div class=\"col-sm-10\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"name\">\r\n </div>\r\n </div>\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-2 col-form-label\">{{'Reference 3D model' | translate}} *</label>\r\n <div class=\"col-sm-10\">\r\n <input type=\"text\" class=\"form-control\" [readonly]=\"isEditing\"\r\n [class.is-invalid]=\"model3D.invalid && visitSubmitted\" required\r\n formControlName=\"model3D\">\r\n <div class=\"invalid-feedback\">\r\n {{'Please provide the 3D model reference' | translate}}\r\n </div>\r\n <div *ngIf=\"isEditing\" class=\"text-danger\">\r\n {{'Cannot change 3D model reference. Please add new model.' | translate}}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-2 col-form-label\">{{'Viewer' | translate}}</label>\r\n <div class=\"col-sm-10\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"viewer\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-2 col-form-label\">{{'Surface' | translate}}</label>\r\n <div class=\"col-sm-10\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"surface\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-2 col-form-label\">{{'Capture Date' | translate}}</label>\r\n <div class=\"input-group\">\r\n <input class=\"form-control\" placeholder=\"dd/mm/yyyy\" [(ngModel)]=\"captureDate\" ngbDatepicker\r\n #d1=\"ngbDatepicker\" [ngModelOptions]=\"{standalone: true}\">\r\n <div class=\"input-group-append\">\r\n <button class=\"btn btn-outline-secondary calendar\" (click)=\"d1.toggle()\"\r\n type=\"button\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n <button type=\"submit\" class=\"btn btn-outline-primary rounded-pill me-2\">{{'Save' |\r\n translate}}</button>\r\n <button type=\"button\" (click)=\"onCancel()\" class=\"btn btn-outline-primary rounded-pill\">{{'Cancel' |\r\n translate}}</button>\r\n </form>\r\n </div>\r\n <div *ngIf=\"!visitForm\">\r\n <button class=\"btn btn-outline-primary rounded-pill\" (click)=\"onAddVisit()\">{{'Add 3D visit' |\r\n translate}}</button>\r\n </div>\r\n </div>\r\n <div id=\"viewer-frame\" style=\"width: 100%; aspect-ratio: 2/1;\"></div>\r\n </div>\r\n <ng-template #content let-modal>\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\" id=\"modal-basic-title\">{{'Importing Data' | translate}}</h4>\r\n <button type=\"button\" class=\"close\" aria-label=\"Close\" (click)=\"modal.dismiss('Cross click')\">\r\n <span aria-hidden=\"true\">×</span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\">\r\n {{'Please do not leave or refresh this page...' | translate}}\r\n <div *ngIf=\"totalImages != 0\">Imported {{imagesProcessed}} out of {{totalImages}} images.</div>\r\n <div class=\"d-flex justify-content-center\">\r\n <div class=\"spinner-border\" role=\"status\">\r\n <span class=\"visually-hidden\">{{'Loading' | translate}}...</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-outline-dark\" [disabled]=\"!canCancelImport\"\r\n (click)=\"modal.close('Cancel click')\">{{'Cancel import of images' | translate}}</button>\r\n </div>\r\n </ng-template>\r\n</div>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\n\n@Component({\n selector: 'lib-carousel',\n templateUrl: './carousel.component.html',\n styleUrls: ['./carousel.component.scss']\n})\nexport class CarouselComponent implements OnInit {\n\n @Input() images;\n\n @Output() currentScan = new EventEmitter<number>();\n\n dataEvent: string;\n\n constructor() { }\n\n ngOnInit(): void {\n this.currentScan.emit(0);\n }\n\n onSlide(event) {\n this.dataEvent = JSON.stringify(event);\n const imageIndex = Number.parseInt(\n event.current.replace(\"slideId_\", \"\"),\n 10,\n );\n this.currentScan.emit(imageIndex);\n }\n\n}\n","<ngb-carousel [interval]=\"5000\" *ngIf=\"images && images.length > 1\" (slide)=\"onSlide($event)\">\n <ng-template *ngFor=\"let image of images; let i = index\" ngbSlide [id]=\"'slideId_' + i\">\n <div class=\"picsum-img-wrapper\">\n <img [src]=\"image.path\" alt=\"Scan\" class=\"d-block w-100\">\n </div>\n <div class=\"carousel-caption\">\n <h3>{{image.title}}</h3>\n <p>{{image.description}}</p>\n </div>\n </ng-template>\n</ngb-carousel>\n\n<img *ngIf=\"images.length === 1\" [src]=\"images[0].path\" alt=\"Scan\" class=\"d-block w-100\">\n","import { Component, EventEmitter, OnInit, Output } from '@angular/core';\nimport { Rectangle } from '../../../../helper.service';\n\n@Component({\n selector: 'lib-selection',\n templateUrl: './selection.component.html',\n styleUrls: ['./selection.component.scss']\n})\nexport class SelectionComponent implements OnInit {\n constructor(){}\n\n /**Emit a new selection */\n @Output() onSelectionChanged = new EventEmitter<Rectangle>();\n\n /**Zone wich you can use a selection inside, must have the class \".selectZone\" */\n selectionableZone : HTMLElement;\n\n /**HtmlElement use to display the selected zone (blue) */\n selectionElement : HTMLElement;\n\n isMousedown : boolean = false;\n\n selection = {startX: 0, startY: 0, endX: 0, endY: 0};\n\n selectionRectangle : Rectangle = {top : 0, left: 0, width: 0, height: 0};\n\n ngOnInit(): void {\n this.selectionableZone = document.querySelector(\".selectZone\");\n\n this.selectionElement = document.querySelector(\"#selection\");\n\n this.selectionableZone.addEventListener(\"mousedown\",this.mousedown.bind(this));\n\n this.selectionableZone.addEventListener(\"mousemove\",this.mousemove.bind(this));\n\n this.selectionableZone.addEventListener(\"mouseup\",this.mouseup.bind(this));\n }\n \n /**\n * Update the current selection\n * Will update the selectionRectangle and Selection HTML element\n * @param shouldEmit if true an event will be emitted through onSelectionChanged (true by default)\n */\n updateSelectionElement(shouldEmit=true){\n this.selectionRectangle.width = Math.abs(this.selection.endX - this.selection.startX);\n this.selectionRectangle.height = Math.abs(this.selection.endY - this.selection.startY);\n this.selectionRectangle.top = Math.min(this.selection.endY, this.selection.startY);\n this.selectionRectangle.left = Math.min(this.selection.endX, this.selection.startX);\n\n this.selectionElement.style.top = `${this.selectionRectangle.top}px`;\n this.selectionElement.style.left = `${this.selectionRectangle.left}px`;\n this.selectionElement.style.width = `${this.selectionRectangle.width}px`;\n this.selectionElement.style.height = `${this.selectionRectangle.height}px`;\n\n if(shouldEmit){\n this.onSelectionChanged.emit(this.selectionRectangle);\n }\n }\n\n /**\n * Trigger when mouse is press down on selectionableZone\n * @param event \n */\n mousedown(event : MouseEvent){\n if(event.button !== 2){ /**Selection with the right click, so ignore all other event */\n return;\n }\n this.isMousedown = true;\n this.selection = {startY : event.clientY, startX : event.clientX, endX:event.clientX, endY:event.clientY};\n this.updateSelectionElement(); \n }\n\n /**\n * Trigger when mouse is release on selectionableZone\n * @param event \n */\n mouseup(event : MouseEvent){\n this.isMousedown = false;\n this.selection = {startX :0, startY : 0, endX:0, endY:0};\n this.updateSelectionElement(false); \n }\n\n /**\n * Trigger when mouse is moving on selectionableZone\n * @param event \n */\n mousemove(event : MouseEvent){\n if(this.isMousedown){\n this.selection.endX = event.clientX;\n this.selection.endY = event.clientY;\n this.updateSelectionElement();\n }\n }\n\n}\n","<ng-content></ng-content>\n\n<div id=\"selection\"></div>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { FormGroup, FormBuilder, Validators, AbstractControl } from '@angular/forms';\r\nimport { Zone, Plan, Layer, Navigation, ZoneService, LayerService, BaseUserService, NavigationService, getMetaForImage, \r\n PlanService, showScanPointsOnPlanInDiv, getCoefficientsForImage } from 'ngx-smarterplan-core';\r\nimport panzoom, { PanZoom } from 'panzoom';\r\nimport { Rectangle } from '../../../helper.service';\r\n\r\n@Component({\r\n selector: 'lib-add-zone',\r\n templateUrl: './add-zone.component.html',\r\n styleUrls: ['./add-zone.component.scss']\r\n})\r\nexport class AddZoneComponent implements OnInit {\r\n\r\n @Input() zoneEdit: Zone;\r\n\r\n @Input() spaceID: string;\r\n\r\n @Input() images360: { path: string, filename: string }[]; \r\n\r\n @Input() navigationIDs: string[];\r\n\r\n @Input() zones: Zone[];\r\n\r\n @Input() newZoneData: any;\r\n\r\n @Output() updatedZone = new EventEmitter<any>();\r\n\r\n @Input() chosenPlan: Plan;\r\n\r\n @Input() isMuseumVisit: boolean = false;\r\n\r\n @Input() defaultZone: Zone;\r\n\r\n parentZones: Zone[] = [];\r\n\r\n carouselIsVisible = false;\r\n\r\n zoneForm: FormGroup;\r\n\r\n isSubmitted = false;\r\n\r\n currentScanShowing: number;\r\n\r\n chosenScans: number[] = [];\r\n\r\n layers: Layer[];\r\n\r\n plans: Plan[];\r\n\r\n fromPlan: boolean = false;\r\n\r\n planCalibrated: boolean = false;\r\n\r\n chosenScansOnPlan: string[] = [];\r\n\r\n navIDsZoneEdit: string[] = [];\r\n\r\n currentOrgId: string;\r\n\r\n zoneInitialNavCount = 0;\r\n\r\n /** panZoom element for adding scans */\r\n panZoom: PanZoom;\r\n\r\n /** divPlan (use By panZoom) */\r\n divPlan: HTMLElement;\r\n\r\n /** all scan buttons Element */\r\n buttonElements: HTMLButtonElement[] = [];\r\n\r\n /** Scan buttons that are in the current selection */\r\n buttonsInSelection: HTMLButtonElement[] = [];\r\n\r\n zoneIsMatterportFloor = false;\r\n\r\n constructor(\r\n private fb: FormBuilder,\r\n private zoneService: ZoneService,\r\n private layerService: LayerService,\r\n private userService: BaseUserService,\r\n private navigationService: NavigationService,\r\n private planService: PlanService,\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.parentZones = this.zones.filter(\r\n (zone) => zone.layer && zone.layer.name === \"FLOOR\",\r\n );\r\n this.parentZones.unshift(this.defaultZone);\r\n this.initZoneForm();\r\n this.updateLayers();\r\n this.getPlans();\r\n }\r\n\r\n ngOnChanges() {\r\n this.initZoneForm();\r\n if (this.newZoneData) this.iniPlanForDraw();\r\n }\r\n\r\n async updateLayers() {\r\n const mission = this.userService.currentMission(this.spaceID);\r\n this.currentOrgId = mission.organisationID;\r\n this.layers = await this.layerService.getLayerForOrganisation(\r\n this.currentOrgId,\r\n );\r\n }\r\n\r\n async initZoneForm() {\r\n if (this.zoneEdit) {\r\n if (this.zoneEdit.metadata) {\r\n const metadata = JSON.parse(this.zoneEdit.metadata);\r\n this.zoneIsMatterportFloor = metadata.hasOwnProperty(\"matterportFloorSequence\");\r\n }\r\n const isVirtual = this.zoneService.zoneIsVirtual(this.zoneEdit);\r\n if (!isVirtual) {\r\n await this.loadNavigations();\r\n }\r\n this.isMuseumVisit = this.zoneEdit.isMuseumVisitZone\r\n ? this.zoneEdit.isMuseumVisitZone\r\n : false;\r\n this.zoneForm = this.fb.group({\r\n id: this.zoneEdit.id,\r\n name: [this.zoneEdit.name, [Validators.required]],\r\n layerID: this.zoneEdit.layer ? this.zoneEdit.layer.id : null,\r\n surface: this.zoneEdit.surface ? this.zoneEdit.surface : 0,\r\n parentID: this.zoneEdit.parentID,\r\n parent: this.zoneEdit.parent,\r\n newLayer: null,\r\n isMuseumVisitZone: this.isMuseumVisit,\r\n });\r\n } else {\r\n const mainZone = this.zones.find((z) => !z.parentID);\r\n this.zoneForm = this.fb.group({\r\n name: [\r\n this.newZoneData ? this.newZoneData.name : \"\",\r\n [Validators.required],\r\n ],\r\n layerID: null,\r\n surface: 0,\r\n parentID: mainZone.id,\r\n newLayer: null,\r\n isMuseumVisitZone: this.isMuseumVisit,\r\n });\r\n }\r\n }\r\n\r\n async getPlans() {\r\n this.plans = await this.planService.getSingedPlansForSpace(\r\n this.spaceID,\r\n );\r\n }\r\n\r\n async onSubmitZone() {\r\n this.isSubmitted = true;\r\n if (!this.zoneForm.valid) {\r\n return;\r\n }\r\n const formValue = this.zoneForm.value;\r\n\r\n if (formValue.newLayer) {\r\n await this.createLayer(formValue.newLayer).then((layer) => {\r\n formValue.layerID = layer.id;\r\n });\r\n }\r\n if (!formValue.layerID && !this.isMuseumVisit) {\r\n // by defaul assign to layer: \"Local\" with uuid: d6138c5d-6938-49fa-a5c3-9cebde97594b\r\n formValue.layerID = \"d6138c5d-6938-49fa-a5c3-9cebde97594b\";\r\n }\r\n\r\n const zoneInput = {\r\n name: formValue.name,\r\n surface: formValue.surface,\r\n spaceID: this.spaceID,\r\n layerID: formValue.layerID,\r\n parentID: formValue.parentID,\r\n isMuseumVisitZone: this.isMuseumVisit,\r\n sweepIDs: [],\r\n } as Zone;\r\n try {\r\n this.zoneForm = null;\r\n this.isSubmitted = false;\r\n if (this.zoneEdit) {\r\n const zoneUpdate = zoneInput;\r\n zoneUpdate.sweepIDs = this.zoneEdit.sweepIDs;\r\n zoneUpdate.id = formValue.id;\r\n await this.setSweepsAndNodeForZoneInput(zoneUpdate);\r\n console.log(zoneUpdate);\r\n await this.zoneService.updateZone(zoneUpdate);\r\n this.zoneEdit = null;\r\n this.updatedZone.emit(zoneUpdate.id);\r\n } else {\r\n await this.setSweepsAndNodeForZoneInput(zoneInput);\r\n // console.log(zoneInput);\r\n await this.zoneService\r\n .create(zoneInput)\r\n .then(zoneCreated => {\r\n this.updatedZone.emit(zoneCreated.id);\r\n });\r\n }\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n }\r\n\r\n onCancel() {\r\n this.isSubmitted = false;\r\n this.zoneForm = null;\r\n this.chosenScansOnPlan = [];\r\n this.chosenScans = [];\r\n this.updatedZone.emit(false);\r\n }\r\n\r\n get name(): AbstractControl {\r\n return this.zoneForm.get(\"name\");\r\n }\r\n\r\n toggleCarousel() {\r\n this.carouselIsVisible = true;\r\n this.chosenScansOnPlan = [];\r\n }\r\n\r\n togglePlan() {\r\n this.fromPlan = true;\r\n this.chosenScans = [];\r\n }\r\n\r\n onAddScan() {\r\n if (!this.chosenScans.includes(this.currentScanShowing)) {\r\n // console.log(\"adding scan\", this.currentScanShowing);\r\n this.chosenScans.push(this.currentScanShowing);\r\n } else {\r\n alert(\"Scan already added!\");\r\n }\r\n }\r\n\r\n onRemoveScanImage(scan: any) {\r\n const index = this.chosenScans.indexOf(scan);\r\n this.chosenScans.splice(index, 1);\r\n }\r\n\r\n onRemoveScanPlan(scan: any) {\r\n const index = this.chosenScansOnPlan.indexOf(scan);\r\n this.chosenScansOnPlan.splice(index, 1);\r\n }\r\n\r\n async setSweepsAndNodeForZoneInput(zoneInput: Zone) {\r\n if (\r\n this.chosenScans.length > 0 &&\r\n this.chosenScans.length !== this.zoneInitialNavCount &&\r\n !this.fromPlan\r\n ) {\r\n // if we chose scans from the carousel\r\n const sweepIDs: string[] = [];\r\n this.chosenScans.map(async (scan) => {\r\n const imageUuid = this.images360[scan].filename.split(\"_\")[0];\r\n const sweepID = this.navigationIDs.find((nav) => {\r\n return nav.includes(imageUuid);\r\n });\r\n if (sweepID) {\r\n sweepIDs.push(sweepID);\r\n }\r\n });\r\n zoneInput.sweepIDs = sweepIDs;\r\n } else {\r\n // we are not coming from gallery choice\r\n if (this.chosenScansOnPlan.length > 0) {\r\n zoneInput.sweepIDs = this.chosenScansOnPlan;\r\n }\r\n }\r\n \r\n if (zoneInput.sweepIDs && zoneInput.sweepIDs.length > 0) {\r\n const navForSweep =\r\n await this.navigationService.getNavigationsForMatterportIDForSpace(\r\n zoneInput.sweepIDs[0],\r\n this.spaceID,\r\n );\r\n zoneInput.nodeIDs = [navForSweep[0].nodeID];\r\n }\r\n }\r\n\r\n async createLayer(name: string): Promise<Layer> {\r\n return this.layerService.createLayerForOrganisation(\r\n name,\r\n this.currentOrgId,\r\n );\r\n }\r\n\r\n async loadNavigations(): Promise<any> {\r\n if (this.zoneEdit.sweepIDs.length > 0) {\r\n this.zoneInitialNavCount = this.zoneEdit.sweepIDs.length;\r\n const navList: number[] = [];\r\n const scansZoneEdit: string[] = [];\r\n await Promise.all(\r\n this.zoneEdit.sweepIDs.map(async (sweepID: string) => {\r\n scansZoneEdit.push(sweepID);\r\n const index = this.images360.findIndex((im) => {\r\n return im.filename.includes(sweepID.slice(0, 8));\r\n });\r\n if (index !== -1) {\r\n navList.push(index);\r\n }\r\n }),\r\n );\r\n this.chosenScans = navList;\r\n this.navIDsZoneEdit = scansZoneEdit;\r\n this.chosenScansOnPlan = scansZoneEdit;\r\n return Promise.resolve();\r\n }\r\n return Promise.resolve();\r\n }\r\n\r\n async onPlanClick(plan = this.chosenPlan) {\r\n this.chosenScansOnPlan = [];\r\n this.chosenPlan = plan;\r\n this.clearDivPlan();\r\n this.addScanPoints();\r\n }\r\n\r\n async addScanPoints() {\r\n this.divPlan = document.querySelector(\"#planDiv\") as HTMLElement;\r\n const zoneOfPlan = await this.zoneService.getZone(\r\n this.chosenPlan.zoneID,\r\n );\r\n const navigations = await this.navigationService.getNavigationsForZone(\r\n zoneOfPlan,\r\n );\r\n if (this.newZoneData) await this.setScanByDraw(navigations);\r\n this.buttonElements = await showScanPointsOnPlanInDiv(\r\n this.chosenPlan,\r\n this.divPlan,\r\n navigations,\r\n );\r\n for (const element of this.buttonElements) {\r\n if (\r\n this.navIDsZoneEdit.length > 0 &&\r\n this.navIDsZoneEdit.includes(element.id) // button id is the navigation(not graph!) ids\r\n ) {\r\n this.styleButton(element, true);\r\n this.chosenScansOnPlan.push(element.id);\r\n } else {\r\n this.styleButton(element);\r\n }\r\n element.addEventListener(\"click\", (event) =>\r\n this.onButtonScanClicked(event.target as HTMLElement),\r\n );\r\n }\r\n this.panZoom = panzoom(this.divPlan, {\r\n bounds: true,\r\n boundsPadding: 0,\r\n maxZoom: 3.5,\r\n beforeMouseDown(e: MouseEvent) {\r\n return (\r\n e.button === 2\r\n ); /** Ignore event for right click (use for selecting) */\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * When a button representing a scan is clicked\r\n * @param button\r\n */\r\n onButtonScanClicked(button: HTMLElement) {\r\n button.style.backgroundImage = this.buttonIsChosen(button)\r\n ? `url(\"https://api.iconify.design/mdi:close-circle-outline.svg?color=red&height=17&width=17\")`\r\n : `url(\"https://api.iconify.design/mdi:adjust.svg?color=green&height=17&width=17\")`;\r\n if (this.buttonIsChosen(button)) {\r\n if (!this.chosenScansOnPlan.includes(button.id)) {\r\n this.chosenScansOnPlan.push(button.id);\r\n }\r\n } else if (this.chosenScansOnPlan.includes(button.id)) {\r\n const index = this.chosenScansOnPlan.indexOf(button.id);\r\n this.chosenScansOnPlan.splice(index, 1);\r\n }\r\n }\r\n\r\n styleButton(button: HTMLButtonElement, isAdded = false) {\r\n button.style.backgroundImage = isAdded\r\n ? `url(\"https://api.iconify.design/mdi:adjust.svg?color=green&height=17&width=17\")`\r\n : `url(\"https://api.iconify.design/mdi:close-circle-outline.svg?color=red&height=17&width=17\")`;\r\n button.style.backgroundColor = \"transparent\";\r\n button.style.position = \"absolute\";\r\n button.style.border = \"none\";\r\n button.style.width = \"17px\";\r\n button.style.height = \"17px\";\r\n button.disabled = false;\r\n button.type = \"button\";\r\n }\r\n\r\n buttonIsChosen(button: HTMLElement) {\r\n return button.style.backgroundImage.includes(\"adjust\");\r\n }\r\n\r\n clearDivPlan() {\r\n if (this.divPlan) this.divPlan.innerHTML = \"\";\r\n }\r\n\r\n iniPlanForDraw() {\r\n this.togglePlan();\r\n setTimeout(() => {\r\n this.onPlanClick();\r\n }, 500);\r\n }\r\n\r\n setScanByDraw(navigations: any[]): Promise<void> {\r\n return new Promise(async (resolve) => {\r\n const rect = {\r\n width: this.newZoneData.width,\r\n height: this.newZoneData.height,\r\n };\r\n const img = await getMetaForImage(this.chosenPlan.filepath);\r\n const { coeffX, coeffY } = getCoefficientsForImage(img, rect);\r\n\r\n const draw = this.newZoneData.elements;\r\n\r\n draw.map(async (element:any) => {\r\n switch (element.nodeName) {\r\n case \"rect\":\r\n await this.setScanInRect(\r\n coeffX,\r\n coeffY,\r\n element,\r\n navigations,\r\n );\r\n break;\r\n\r\n case \"ellipse\":\r\n await this.setScanInCircle(\r\n coeffX,\r\n coeffY,\r\n element,\r\n navigations,\r\n );\r\n break;\r\n\r\n case \"path\":\r\n await this.setScanInPolygon(\r\n coeffX,\r\n coeffY,\r\n element,\r\n navigations,\r\n );\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n\r\n resolve();\r\n });\r\n }\r\n\r\n async setScanInRect(coeffX: number, coeffY: number, \r\n element: { angle: any; cx: any; cy: any; x: number; width: any; y: number; height: any; }, navigations: any[]) {\r\n const calibrage = JSON.parse(this.chosenPlan.calibration);\r\n navigations.map((navigation) => {\r\n const position = JSON.parse(navigation.position);\r\n let navX = (calibrage.offsetX + position.x * calibrage.x) / coeffX;\r\n let navY = (calibrage.offsetY + position.z * calibrage.y) / coeffY;\r\n if (element.angle) {\r\n const rotatePos = this.rotate(\r\n { x: navX, y: navY },\r\n { x: element.cx, y: element.cy },\r\n element.angle,\r\n );\r\n navX = rotatePos.x;\r\n navY = rotatePos.y;\r\n }\r\n /**\r\n * TODO calculer la rotation du rectangle\r\n */\r\n if (\r\n navX > element.x &&\r\n navX < element.x + element.width &&\r\n navY > element.y &&\r\n navY < element.y + element.height &&\r\n !this.navIDsZoneEdit.includes(navigation.id)\r\n ) {\r\n this.navIDsZoneEdit.push(navigation.id);\r\n }\r\n });\r\n } // EO\r\n\r\n async setScanInCircle(coeffX: number, coeffY: number, \r\n element: { angle: any; cx: number; cy: number; rx: number; ry: number; }, navigations: Navigation[]) {\r\n const calibrage = JSON.parse(this.chosenPlan.calibration);\r\n navigations.map(navigation => {\r\n const position = JSON.parse(navigation.position);\r\n let navX = (calibrage.offsetX + position.x * calibrage.x) / coeffX;\r\n let navY = (calibrage.offsetY + position.z * calibrage.y) / coeffY;\r\n if (element.angle) {\r\n const rotatePos = this.rotate(\r\n { x: navX, y: navY },\r\n { x: element.cx, y: element.cy },\r\n element.angle,\r\n );\r\n navX = rotatePos.x;\r\n navY = rotatePos.y;\r\n }\r\n\r\n const valueX =\r\n Math.pow(navX - element.cx, 2) / Math.pow(element.rx, 2);\r\n const valueY =\r\n Math.pow(navY - element.cy, 2) / Math.pow(element.ry, 2);\r\n const result = valueX + valueY;\r\n if (result <= 1 && !this.navIDsZoneEdit.includes(navigation.id)) {\r\n this.navIDsZoneEdit.push(navigation.id);\r\n }\r\n });\r\n } // EO\r\n\r\n async setScanInPolygon(coeffX: number, coeffY: number, element: { segList: any; }, navigations: any[]) {\r\n const calibrage = JSON.parse(this.chosenPlan.calibration);\r\n navigations.map(async (navigation: { position: string; id: string; }) => {\r\n const position = JSON.parse(navigation.position);\r\n const p = {\r\n x: (calibrage.offsetX + position.x * calibrage.x) / coeffX,\r\n y: (calibrage.offsetY + position.z * calibrage.y) / coeffY,\r\n };\r\n // if (element.angle) {\r\n // p = this.rotate(\r\n // p,\r\n // { x: element.cx, y: element.cy },\r\n // element.angle,\r\n // );\r\n // }\r\n if (\r\n (await this.isInPolygon(p, element.segList)) &&\r\n !this.navIDsZoneEdit.includes(navigation.id)\r\n ) {\r\n this.navIDsZoneEdit.push(navigation.id);\r\n }\r\n });\r\n }\r\n\r\n async isInPolygon(p: { x: any; y: any; }, polygon: string | any[]): Promise<boolean> {\r\n return new Promise((resolve) => {\r\n let isInside = false;\r\n let minX = polygon[0].x;\r\n let maxX = polygon[0].x;\r\n let minY = polygon[0].y;\r\n let maxY = polygon[0].y;\r\n for (let n = 1; n < polygon.length; n++) {\r\n const q = polygon[n];\r\n minX = Math.min(q.x, minX);\r\n maxX = Math.max(q.x, maxX);\r\n minY = Math.min(q.y, minY);\r\n maxY = Math.max(q.y, maxY);\r\n }\r\n\r\n if (p.x < minX || p.x > maxX || p.y < minY || p.y > maxY) {\r\n resolve(false);\r\n }\r\n\r\n for (\r\n let index = 0, index_ = polygon.length - 1;\r\n index < polygon.length;\r\n index_ = index++\r\n ) {\r\n if (\r\n polygon[index].y > p.y !== polygon[index_].y > p.y &&\r\n p.x <\r\n ((polygon[index_].x - polygon[index].x) *\r\n (p.y - polygon[index].y)) /\r\n (polygon[index_].y - polygon[index].y) +\r\n polygon[index].x\r\n ) {\r\n isInside = !isInside;\r\n }\r\n }\r\n resolve(isInside);\r\n });\r\n }\r\n\r\n rotate(point: { x: any; y: any; }, center: { x: any; y: any; }, angle: number) {\r\n let xM;\r\n let yM;\r\n let x;\r\n let y;\r\n angle *= Math.PI / 180;\r\n xM = point.x - center.x;\r\n yM = point.y - center.y;\r\n x = xM * Math.cos(angle) + yM * Math.sin(angle) + center.x;\r\n y = -xM * Math.sin(angle) + yM * Math.cos(angle) + center.y;\r\n return { x: Math.round(x), y: Math.round(y) };\r\n }\r\n\r\n /**\r\n * Check if an HtmlElement is inside a selection\r\n * @param button HTMLElement\r\n * @param selection\r\n * @returns true if the element is inside the selection, false otherwise\r\n */\r\n buttonIsInSelection(\r\n button: HTMLButtonElement,\r\n selection: Rectangle,\r\n ): boolean {\r\n const bounds = button.getBoundingClientRect();\r\n return (\r\n bounds.bottom > selection.top &&\r\n bounds.top < selection.top + selection.height &&\r\n bounds.right > selection.left &&\r\n bounds.left < selection.left + selection.width\r\n );\r\n }\r\n\r\n /**\r\n * Trigger each by the selectionComponent when selection change\r\n * Update the current selected scan buttons\r\n * @param selection new selection\r\n */\r\n onSelectionChanged(selection: Rectangle) {\r\n const unselectedButtons: HTMLButtonElement[] = [];\r\n const newSelectedButtons = [];\r\n\r\n /** For each button, decide whether will be add to selected list or unselected list */\r\n for (const button of this.buttonElements) {\r\n const isSelected = this.buttonIsInSelection(button, selection);\r\n if (this.buttonsInSelection.includes(button)) {\r\n /** If the button is already in the selected list, we check if it should be unselect */\r\n if (!isSelected) {\r\n unselectedButtons.push(button);\r\n }\r\n } else if (isSelected) {\r\n newSelectedButtons.push(button);\r\n }\r\n }\r\n\r\n /** Visually Update unselected list */\r\n for (const button of unselectedButtons) {\r\n this.setVisuallySelected(button, false);\r\n }\r\n\r\n /** Visually Update selected list */\r\n for (const button of newSelectedButtons) {\r\n this.setVisuallySelected(button, true);\r\n }\r\n\r\n /** Remove unselected list */\r\n this.buttonsInSelection = this.buttonsInSelection.filter((button) => {\r\n return !unselectedButtons.includes(button);\r\n });\r\n /** Add new selected buttons */\r\n this.buttonsInSelection = [\r\n ...this.buttonsInSelection,\r\n ...newSelectedButtons,\r\n ];\r\n }\r\n\r\n /**\r\n * Visually change the state of a scan button, a selected button is blue\r\n * @param button\r\n * @param selected if true the button will be blue, otherwise it will red or green\r\n */\r\n setVisuallySelected(button: HTMLElement, selected: boolean) {\r\n if (selected) {\r\n /** Color in blue */\r\n button.style.backgroundImage = button.style.backgroundImage\r\n .replace(\"red\", \"blue\")\r\n .replace(\"green\", \"blue\");\r\n } else {\r\n /** Get back in red or green */\r\n const color = this.buttonIsChosen(button) ? \"green\" : \"red\";\r\n button.style.backgroundImage = button.style.backgroundImage.replace(\r\n \"blue\",\r\n color,\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Trigger when the user click to add the selected scans\r\n */\r\n onSelectionAdd() {\r\n for (const button of this.buttonsInSelection) {\r\n if (!this.chosenScansOnPlan.includes(button.id)) {\r\n this.onButtonScanClicked(button);\r\n }\r\n }\r\n\r\n this.onSelectionChanged({ top: 0, left: 0, width: 0, height: 0 });\r\n }\r\n\r\n /**\r\n * Trigger when the user click to remove the selected scans\r\n */\r\n onSelectionRemove() {\r\n for (const button of this.buttonsInSelection) {\r\n if (this.chosenScansOnPlan.includes(button.id)) {\r\n this.onButtonScanClicked(button);\r\n }\r\n }\r\n this.onSelectionChanged({ top: 0, left: 0, width: 0, height: 0 });\r\n }\r\n\r\n /**\r\n * Trigger when the user click to select all scans\r\n */\r\n onSelectAll() {\r\n this.buttonsInSelection = [...this.buttonElements];\r\n for (const button of this.buttonsInSelection) {\r\n this.setVisuallySelected(button, true);\r\n }\r\n }\r\n\r\n /**\r\n * Trigger when the user change the size of the scan points\r\n * @param event\r\n */\r\n onChangeScanSize(event: any) {\r\n const factor = event.target.value;\r\n\r\n for (const button of this.buttonElements) {\r\n button.style.transform = `scale(${factor})`;\r\n }\r\n }\r\n\r\n /**\r\n * Adds all sweeps of the space\r\n */\r\n onAddAll() {\r\n const defaultZone = this.zones.find(\r\n (zone) => zone.layer && zone.layer.name === \"BUILDING\" && zone.sweepIDs,\r\n );\r\n if (defaultZone) {\r\n this.chosenScansOnPlan = defaultZone.sweepIDs;\r\n this.zoneForm.get(\"parentID\").setValue(defaultZone.id);\r\n }\r\n \r\n }\r\n}\r\n\r\n","<div class=\"row\" *ngIf=\"zoneForm\">\r\n <div class=\"col-7\">\r\n <form (ngSubmit)=\"onSubmitZone()\" [formGroup]=\"zoneForm\">\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-2 col-form-label\">{{'Name' | translate}} *</label>\r\n <div class=\"col-sm-10\">\r\n <input type=\"text\" class=\"form-control\" [class.is-invalid]=\"name.invalid && isSubmitted\" required\r\n formControlName=\"name\">\r\n <div class=\"invalid-feedback\">\r\n {{'A name is required' | translate}}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\" *ngIf=\"!isMuseumVisit && !zoneIsMatterportFloor\">\r\n <label class=\"col-sm-2 col-form-label\">{{'Type of zone' | translate}}</label>\r\n <div class=\"col-sm-10\">\r\n <select class=\"form-control\" formControlName=\"layerID\">\r\n <option value=\"null\" selected disabled hidden> {{ zoneEdit && zoneEdit.layer ?\r\n zoneEdit.layer.name : 'Choose type'}}</option>\r\n <option *ngFor=\"let layer of layers\" [value]=\"layer.id\">\r\n {{ layer.name }}\r\n </option>\r\n </select>\r\n <p class=\"mt-1 new-type-text\">{{'or add new type of zone' | translate }}</p>\r\n <input type=\"text\" class=\"form-control new-type-input\" formControlName=\"newLayer\">\r\n </div>\r\n </div>\r\n <!--If Editing Zone possibility to assign it to museum itinerary-->\r\n <div class=\"mb-3 row\" *ngIf=\"zoneEdit && !zoneIsMatterportFloor\">\r\n <label class=\"col-sm-2 col-form-label\">{{ 'Museum Itinerary' | translate }}</label>\r\n <div class=\"col-sm-10\">\r\n <input class=\"checkbox-apply mt-3\" type=\"checkbox\" [(ngModel)]=\"isMuseumVisit\"\r\n [ngModelOptions]=\"{standalone: true}\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-2 col-form-label\">{{'Surface' | translate}}</label>\r\n <div class=\"col-sm-10\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"surface\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\" *ngIf=\"!zoneIsMatterportFloor\">\r\n <label class=\"col-sm-2 col-form-label\">{{'Parent zone' | translate}}</label>\r\n <div class=\"col-sm-10\">\r\n <select class=\"form-control\" formControlName=\"parentID\">\r\n <option *ngFor=\"let zone of parentZones\" [ngValue]=\"zone.id\">\r\n {{ zone.name }}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\" style=\"max-height: 200px; overflow: auto;\" *ngIf=\"!zoneIsMatterportFloor\">\r\n <label class=\"col-sm-2 col-form-label\">{{'Scan Points' | translate}}</label>\r\n <!-- <p class=\"col-sm-2\" *ngIf=\"zoneEdit\">{{ zoneEdit.sweepIDs.length }} scans</p> -->\r\n <p class=\"col\" *ngIf=\"chosenScansOnPlan.length === 0 && chosenScans.length === 0\">\r\n {{'No scan points chosen' | translate}}</p>\r\n <div class=\"col-sm-5\" *ngIf=\"chosenScansOnPlan && chosenScansOnPlan.length > 0\">\r\n <p>{{ chosenScansOnPlan.length }} {{'scan points chosen' | translate}}</p>\r\n <div *ngFor=\"let scan of chosenScansOnPlan\">\r\n <div class=\"row\">\r\n <p class=\"me-2\">{{ scan | slice:0:8 }}</p>\r\n <div (click)=\"onRemoveScanPlan(scan)\" [style.cursor]=\"'pointer'\">\r\n <span class=\"iconify\" data-icon=\"mdi:trash-can-outline\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-sm-5\" *ngIf=\"carouselIsVisible && chosenScans && chosenScans.length > 0\">\r\n <p>{{ chosenScans.length }} {{'scan points chosen' | translate}}</p>\r\n <div *ngFor=\"let scan of chosenScans\">\r\n <div class=\"row\">\r\n <p class=\"me-2\">{{ images360[scan].filename }}</p>\r\n <div (click)=\"onRemoveScanImage(scan)\" [style.cursor]=\"'pointer'\">\r\n <span class=\"iconify\" data-icon=\"mdi:trash-can-outline\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\" *ngIf=\"!zoneIsMatterportFloor\">\r\n <div class=\"col\">\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\" [disabled]=\"!plans\"\r\n (click)=\"togglePlan()\">{{'Choose scan points on plan' |\r\n translate}}</button>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"toggleCarousel()\"\r\n [disabled]=\"fromPlan || !images360 ||images360.length === 0\">\r\n {{'Choose scan points from gallery' | translate}}</button>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onAddAll()\"\r\n [disabled]=\"fromPlan || !images360 ||images360.length === 0\">\r\n {{'Add all scans of this space' | translate}}</button>\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'No visible scan points' | translate}}</label>\r\n <div class=\"col-sm-3\">\r\n <input class=\"checkbox-apply mt-3\" type=\"checkbox\" [(ngModel)]=\"noScanPoints\"\r\n [ngModelOptions]=\"{standalone: true}\">\r\n </div>\r\n </div> -->\r\n\r\n <div *ngIf=\"carouselIsVisible\" class=\"mb-2\">\r\n <lib-carousel *ngIf=\"images360 && images360.length > 0\" [images]=\"images360\"\r\n (currentScan)=\"currentScanShowing=$event\"></lib-carousel>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2 mt-3\"\r\n (click)=\"onAddScan()\">{{'Add to zone' | translate}}</button>\r\n </div>\r\n <div ngbDropdown class=\"row d-inline-block me-3\" *ngIf=\"fromPlan\">\r\n <div class=\"col\">\r\n <button type=\"button\" class=\"btn btn-label-file rounded-pill\" id=\"dropdownBasic1\"\r\n ngbDropdownToggle>{{chosenPlan ?\r\n chosenPlan.name : ('Choose Plan' | translate) }}</button>\r\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\">\r\n <button type=\"button\" ngbDropdownItem *ngFor=\"let plan of plans\" (click)=\"onPlanClick(plan)\"\r\n [disabled]=\"!plan.calibration\">{{ plan.name }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mt-1\" *ngIf=\"fromPlan\">\r\n <lib-selection class=\"col-md-8\" (onSelectionChanged)=\"onSelectionChanged($event)\">\r\n <div class=\"selectZone\" oncontextmenu=\"return false;\">\r\n <div class=\"row\">\r\n <div style=\"overflow: hidden;width:100%;\">\r\n <div style=\"height: 400px; width: 100%;\" id=\"planDiv\">\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </lib-selection>\r\n\r\n <div class=\"col-md-4 scanTool\" *ngIf=\"buttonElements.length > 0\">\r\n <div class=\"row mb-5 d-inline-block\">\r\n <h2>Selection tool</h2>\r\n <div class=\"protip\">Hold right click and move your cursor to select multiple scans.</div>\r\n </div>\r\n\r\n <div class=\"row mb-4\">\r\n <div class=\"col-3\" style=\"padding:0px\">\r\n <label class=\"tool-label\" for=\"scanSize\">Scan size</label>\r\n </div>\r\n <div class=\"col-9\">\r\n <input type=\"range\" class=\"form-range\" min=\"0.001\" max=\"5\" step=\"0.01\" value=\"1\"\r\n id=\"scanSize\" (input)=\"onChangeScanSize($event)\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mb-4\">\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"onSelectAll()\">Select all scans</button>\r\n </div>\r\n\r\n <div *ngIf=\"buttonsInSelection.length > 0\" class=\"row editSelected\">\r\n <span class=\"tool-label\">Edit selected scans : </span>\r\n <button type=\"button\" class=\"btn btn-primary ms-3 me-2\" (click)=\"onSelectionAdd()\">Add</button>\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"onSelectionRemove()\">Remove</button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mt-3\">\r\n <button type=\"submit\" class=\"btn btn-outline-primary rounded-pill me-2\">{{'Save' | translate}}</button>\r\n <button type=\"button\" (click)=\"onCancel()\" class=\"btn btn-outline-primary rounded-pill me-2\">\r\n {{'Cancel' | translate}}</button>\r\n </div>\r\n </form>\r\n </div>\r\n</div>","import { Component, EventEmitter, OnInit, Output } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { Zone, Space, Plan, MenuItem, ZoneService, SpaceService, VisitService, \r\n NavigationService, BaseUserService, PlanService, wait, Navigation, showScanPointsOnPlanInDiv } from 'ngx-smarterplan-core';\r\nimport panzoom from \"panzoom\";\r\n@Component({\r\n selector: 'lib-zones',\r\n templateUrl: './zones.component.html',\r\n styleUrls: ['./zones.component.scss']\r\n})\r\nexport class ZonesComponent implements OnInit {\r\n\r\n lotIndexDetails = -1;\r\n\r\n currentSpace: Space;\r\n\r\n @Output() updatedZone = new EventEmitter<boolean>();\r\n\r\n plans: Plan[];\r\n\r\n zoneForEdit: Zone;\r\n\r\n isEditingZone = false;\r\n\r\n captureDate: number;\r\n\r\n spaceID: string;\r\n\r\n navigations: string[];\r\n\r\n images360: any[];\r\n\r\n carouselIsVisible = false;\r\n\r\n planIsVisible = false;\r\n\r\n currentPlan: Plan;\r\n\r\n currentZone: Zone;\r\n\r\n loadingPlan = false;\r\n\r\n menuItems: MenuItem[] = [];\r\n\r\n isMuseumVisit = false;\r\n\r\n isGuide = false;\r\n\r\n isAdmin = false;\r\n\r\n allZones: Zone[];\r\n\r\n floorZones: Zone[] = [];\r\n\r\n zonesMap: Map<string, Zone[]> = new Map();\r\n\r\n floorDetails: number = -1;\r\n\r\n defaultZone: Zone;\r\n\r\n defaultShowing = false;\r\n\r\n constructor(\r\n private route: ActivatedRoute,\r\n private zoneService: ZoneService,\r\n private spaceService: SpaceService,\r\n private visitService: VisitService,\r\n private navigationService: NavigationService,\r\n private userService: BaseUserService,\r\n private planService: PlanService,\r\n private translate: TranslateService,\r\n ) {}\r\n\r\n async ngOnInit() {\r\n this.spaceID = this.route.snapshot.paramMap.get(\"id\");\r\n this.setUserPermissions();\r\n this.resetZones();\r\n }\r\n\r\n setUserPermissions() {\r\n this.isGuide = this.userService.isGuide();\r\n this.isAdmin = this.userService.isAdmin(this.spaceID);\r\n }\r\n\r\n setupMenuItems() {\r\n this.menuItems = [\r\n { label: \"Locations\", url: \"/localisation\" },\r\n {\r\n label: this.currentSpace.name,\r\n url: `/localisation/${this.spaceID}`,\r\n },\r\n {\r\n label: \"Zones\",\r\n url: `/localisation/${this.currentSpace.id}/zones`,\r\n },\r\n ];\r\n }\r\n\r\n onGoBack() {\r\n this.editCompleted(null);\r\n }\r\n\r\n ngOnChanges() {\r\n this.resetZones();\r\n }\r\n\r\n async resetZones() {\r\n this.isMuseumVisit = false;\r\n this.currentSpace = await this.spaceService.getSpace(this.spaceID);\r\n this.setupMenuItems();\r\n\r\n this.allZones = await this.zoneService.getZonesBySpace(this.spaceID);\r\n this.defaultZone = this.allZones.find(\r\n (zone) => zone.layer && zone.layer.name === \"BUILDING\" && zone.sweepIDs,\r\n );\r\n \r\n this.floorZones = this.allZones.filter(\r\n (zone) => zone.layer && zone.layer.name === \"FLOOR\",\r\n );\r\n // we add only children zones that are not Floors\r\n this.zonesMap.set(this.defaultZone.id, this.allZones.filter((zone) => zone.parentID === this.defaultZone.id && !this.floorZones.includes(zone)))\r\n for (const floor of this.floorZones) {\r\n this.zonesMap.set(\r\n floor.id,\r\n this.allZones.filter((zone) => zone.parentID === floor.id),\r\n );\r\n }\r\n // this.zones = sortAlphabeticallyOnName(this.zones);\r\n this.resetNavigations();\r\n this.images360 = await this.visitService.loadImagesForSpace(\r\n this.currentSpace,\r\n );\r\n this.plans = await this.planService.getPlansWithZonesForSpace(\r\n this.spaceID,\r\n );\r\n this.plans = this.plans.filter((plan) => plan.isCurrentForZone);\r\n this.onPlansLoaded();\r\n }\r\n\r\n resetNavigations() {\r\n this.navigations = [];\r\n const zonesWithSweeps = this.allZones.filter((zone) => zone.sweepIDs);\r\n this.navigations = [\r\n ...new Set(zonesWithSweeps.flatMap((zone) => zone.sweepIDs)),\r\n ];\r\n }\r\n\r\n async onPlansLoaded() {\r\n if (this.planIsVisible && this.currentZone) {\r\n this.preparePlan();\r\n }\r\n }\r\n\r\n /**\r\n * onToggleDetail folds/unfolds details for a zone\r\n * @param i index of the lot to be toggled\r\n */\r\n async onToggleDetail(index: number, zone: Zone) {\r\n this.lotIndexDetails = index === this.lotIndexDetails ? -1 : index;\r\n if (this.lotIndexDetails === -1) {\r\n return;\r\n }\r\n this.currentZone = zone;\r\n this.planIsVisible = true;\r\n if (!this.plans) {\r\n return; // wait until the plans are set\r\n }\r\n if (this.loadingPlan) {\r\n // another plan is already loading\r\n await wait(1000);\r\n }\r\n this.preparePlan();\r\n }\r\n\r\n onToggleDetailFloor(index: number, floor: Zone) {\r\n this.defaultShowing = false;\r\n this.floorDetails = index === this.floorDetails ? -1 : index;\r\n if (this.floorDetails === -1) {\r\n return;\r\n }\r\n this.currentZone = floor;\r\n this.planIsVisible = true;\r\n if (!this.plans) {\r\n console.log(\"plans not ready\");\r\n return; // wait until the plans are set\r\n }\r\n this.preparePlan();\r\n }\r\n\r\n onToggleDefaultZone() {\r\n this.defaultShowing = !this.defaultShowing;\r\n this.currentZone = this.defaultShowing ? this.defaultZone : null;\r\n }\r\n\r\n async preparePlan() {\r\n this.loadingPlan = true;\r\n this.currentPlan = null;\r\n if (this.currentZone.virtual) {\r\n this.currentPlan = null;\r\n this.loadingPlan = false;\r\n return;\r\n }\r\n this.currentPlan = await this.planService.getCalibratedPlanForZone(\r\n this.currentZone,\r\n );\r\n if (this.currentPlan) {\r\n const scans = await this.navigationService.getNavigationsForZone(\r\n this.currentZone,\r\n );\r\n await this.showScanPointsOnPlan(scans);\r\n }\r\n this.loadingPlan = false;\r\n }\r\n\r\n toggleCarousel() {\r\n this.carouselIsVisible = true;\r\n }\r\n\r\n onEdit(zone: Zone) {\r\n this.zoneForEdit = zone;\r\n this.isEditingZone = true;\r\n this.menuItems.push({\r\n label: `${zone.name}`,\r\n });\r\n }\r\n\r\n onAddLot() {\r\n this.isMuseumVisit = false;\r\n this.isEditingZone = true;\r\n this.menuItems.push({\r\n label: \"New\",\r\n });\r\n }\r\n\r\n onAddMuseumZone() {\r\n this.isMuseumVisit = true;\r\n this.isEditingZone = true;\r\n this.menuItems.push({\r\n label: \"New Museum Itinerary\",\r\n });\r\n }\r\n\r\n async onDelete(zone: Zone, floorID: string) {\r\n const message = this.translate.instant(\"confirm.deleteZone\");\r\n // eslint-disable-next-line no-alert\r\n if (window.confirm(message)) {\r\n await this.zoneService.deleteZone(zone.id);\r\n this.allZones.splice(this.allZones.indexOf(zone), 1);\r\n const floorZones = this.zonesMap.get(floorID);\r\n floorZones.splice(floorZones.indexOf(zone), 1);\r\n this.zonesMap.set(floorID, floorZones);\r\n }\r\n }\r\n\r\n editCompleted(event: any) {\r\n this.lotIndexDetails = -1;\r\n if (event) {\r\n this.resetZones();\r\n }\r\n this.isEditingZone = false;\r\n this.zoneForEdit = null;\r\n this.planIsVisible = false;\r\n this.carouselIsVisible = false;\r\n this.setupMenuItems();\r\n }\r\n\r\n async showScanPointsOnPlan(navigations: Navigation[]) {\r\n const divPlan = document.querySelector(\"#planDiv\") as HTMLElement;\r\n await showScanPointsOnPlanInDiv(this.currentPlan, divPlan, navigations);\r\n this.loadingPlan = false;\r\n panzoom(divPlan, {\r\n bounds: true,\r\n boundsPadding: 0,\r\n maxZoom: 3.5,\r\n });\r\n }\r\n\r\n}\r\n","<div class=\"container-fluid\" *ngIf=\"currentSpace\">\r\n <div class=\"m-3\">\r\n <lib-tab-navigation [menuItems]='menuItems' (onGoBack)=\"onGoBack()\"></lib-tab-navigation>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6\">\r\n <ul class=\"list-group list-group-flush\" *ngIf=\"!isEditingZone\">\r\n <li class=\"list-group-item default-zone-line-item\">\r\n <div class=\"d-flex justify-content-between align-items-center zone-name\" *ngIf=\"defaultZone\">\r\n {{defaultZone.name}}\r\n <div class=\"default-zone-label\">{{ \"whole space\" | translate }}</div>\r\n <lib-chevron [conditionShowing]=\"defaultShowing\" (click)=\"onToggleDefaultZone()\"></lib-chevron>\r\n </div>\r\n <div *ngIf=\"defaultShowing\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item bg-transparent\">{{'Type of zone' | translate}}: {{currentZone.layer ?\r\n currentZone.layer.name :\r\n \"No type\" | translate}} </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"currentZone.surface\">{{'Surface' | translate}}, m<sup>2</sup>:\r\n {{currentZone.surface }}\r\n </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!currentZone.virtual\">{{'Scan Points' | translate}}:\r\n {{currentZone.sweepIDs ? currentZone.sweepIDs.length : \"No scan points\" | translate}} </li>\r\n </ul>\r\n <div *ngFor=\"let pair of zonesMap | keyvalue\">\r\n <div *ngIf=\"pair.key == defaultZone.id\">\r\n <h5 style=\"margin: 8px;\" *ngIf=\"pair.value.length > 0\">{{'Children zones'|translate}}</h5>\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item list-group-flush list-group-item-action\"\r\n *ngFor=\"let lot of pair.value; index as zoneIndex\">\r\n <div class=\"d-flex justify-content-between align-items-center zone-name\">\r\n {{lot.name}}\r\n <div class=\"museum-label\" *ngIf=\"lot.isMuseumVisitZone\">{{ \"itinerary\" | translate }}</div>\r\n <lib-chevron [conditionShowing]=\"zoneIndex==lotIndexDetails\" (click)=\"onToggleDetail(zoneIndex, lot)\"></lib-chevron>\r\n \r\n </div>\r\n <div *ngIf=\"zoneIndex==lotIndexDetails\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!lot.isMuseumVisitZone\">{{'Type of zone' |\r\n translate}}: {{lot.layer ? lot.layer.name :\r\n \"No type\" | translate}} </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"lot.surface\">{{'Surface' | translate}},\r\n m<sup>2</sup>:\r\n {{lot.surface }}\r\n </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!lot.virtual\">{{'Scan Points' | translate}}:\r\n {{lot.sweepIDs ? lot.sweepIDs.length : \"No scan points\" | translate}} </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"lot.virtual\">{{'Zone not visible in 3D visit'\r\n |\r\n translate}}</li>\r\n </ul>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\"\r\n (click)=\"onEdit(lot)\">{{'Edit' |\r\n translate}}</button>\r\n <!-- <button type=\"button\" class=\"btn btn-outline-primary rounded-pill\"\r\n (click)=\"onDelete(lot, floor.id)\">{{'Delete'\r\n | translate}}</button> -->\r\n </div>\r\n </li>\r\n </ul>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n </li>\r\n \r\n <li class=\"list-group-item\" *ngFor=\"let floor of floorZones; index as index\">\r\n <div class=\"d-flex justify-content-between align-items-center zone-name\">\r\n {{floor.name}}\r\n <!-- <small>({{ lot.metadata ? ('Calibrated' | translate) : ('Not calibrated' | translate)}})</small> -->\r\n <div class=\"museum-label\" *ngIf=\"floor.isMuseumVisitZone\">{{ \"itinerary\" | translate }}</div>\r\n <lib-chevron [conditionShowing]=\"index==floorDetails\" (click)=\"onToggleDetailFloor(index, floor)\"></lib-chevron>\r\n </div>\r\n <div *ngIf=\"index==floorDetails\"> \r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item bg-transparent\">{{'Type of zone' | translate}}: {{floor.layer ?\r\n floor.layer.name :\r\n \"No type\" | translate}} </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"floor.surface\">{{'Surface' | translate}}, m<sup>2</sup>:\r\n {{floor.surface }}\r\n </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!floor.virtual\">{{'Scan Points' | translate}}:\r\n {{floor.sweepIDs ? floor.sweepIDs.length : \"No scan points\" | translate}} </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"floor.virtual\">{{'Zone not visible in 3D visit' |\r\n translate}}</li>\r\n </ul>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onEdit(floor)\">{{'Edit' |\r\n translate}}</button>\r\n \r\n <!-- List of children zones -->\r\n \r\n <div *ngFor=\"let pair of zonesMap | keyvalue\">\r\n <div *ngIf=\"pair.key == floor.id\">\r\n <h5 style=\"margin: 8px;\" *ngIf=\"pair.value.length > 0\">{{'Children zones'|translate}}</h5>\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item list-group-flush list-group-item-action\"\r\n *ngFor=\"let lot of pair.value; index as zoneIndex\">\r\n <div class=\"d-flex justify-content-between align-items-center zone-name\">\r\n {{lot.name}}\r\n <div class=\"museum-label\" *ngIf=\"lot.isMuseumVisitZone\">{{ \"itinerary\" | translate }}</div>\r\n <lib-chevron [conditionShowing]=\"zoneIndex==lotIndexDetails\" (click)=\"onToggleDetail(zoneIndex, lot)\"></lib-chevron>\r\n \r\n </div>\r\n <div *ngIf=\"zoneIndex==lotIndexDetails\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!lot.isMuseumVisitZone\">{{'Type of zone' |\r\n translate}}: {{lot.layer ? lot.layer.name :\r\n \"No type\" | translate}} </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"lot.surface\">{{'Surface' | translate}},\r\n m<sup>2</sup>:\r\n {{lot.surface }}\r\n </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!lot.virtual\">{{'Scan Points' | translate}}:\r\n {{lot.sweepIDs ? lot.sweepIDs.length : \"No scan points\" | translate}} </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"lot.virtual\">{{'Zone not visible in 3D visit'\r\n |\r\n translate}}</li>\r\n </ul>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\"\r\n (click)=\"onEdit(lot)\">{{'Edit' |\r\n translate}}</button>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill\"\r\n (click)=\"onDelete(lot, floor.id)\">{{'Delete'\r\n | translate}}</button>\r\n </div>\r\n </li>\r\n </ul>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n </li>\r\n </ul>\r\n \r\n <div *ngIf=\"!isEditingZone\">\r\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onAddLot()\">{{'Add zone' |\r\n translate}}</button>\r\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onAddMuseumZone()\"\r\n *ngIf=\"isGuide || isAdmin\">\r\n {{'Add museum itinerary' | translate}}</button>\r\n </div>\r\n </div>\r\n <div class=\"col-md-6\" *ngIf=\"!isEditingZone\">\r\n <div class=\"d-flex justify-content-center\" *ngIf=\"loadingPlan\">\r\n <div class=\"spinner-border\" role=\"status\">\r\n <span class=\"visually-hidden\">Loading...</span>\r\n </div>\r\n </div>\r\n <div class=\"row\" style=\"overflow: hidden;\" *ngIf=\"currentZone\">\r\n <div class=\"mt-3 ms-3\" style=\"height: 500px; width: 100%;\" id=\"planDiv\" *ngIf=\"currentPlan\"></div>\r\n <div class=\"mt-3 ms-3\" id=\"no-plan\" *ngIf=\"!currentPlan && plans && !currentZone.virtual && !loadingPlan\">\r\n {{ 'Plan is not calibrated' | translate}}\r\n </div>\r\n <div class=\"mt-3 ms-3\" id=\"no-plan\" *ngIf=\"currentZone && currentZone.virtual\">\r\n {{ 'No scan points chosen' | translate}}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mb-3\" *ngIf=\"isEditingZone\">\r\n <lib-add-zone [zoneEdit]=\"zoneForEdit\" [spaceID]=\"spaceID\" [images360]=\"images360\" [navigationIDs]=\"navigations\"\r\n [zones]=\"allZones\" [defaultZone]=\"defaultZone\" (updatedZone)=\"editCompleted($event)\" [isMuseumVisit]=\"isMuseumVisit\"></lib-add-zone>\r\n </div>\r\n </div>\r\n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { Space, Visit, MenuItem, SpaceService, VisitService, NodeService, InventoryStatus } from 'ngx-smarterplan-core';\n\n@Component({\n selector: 'lib-images',\n templateUrl: './images.component.html',\n styleUrls: ['./images.component.scss']\n})\nexport class ImagesComponent implements OnInit {\n\n images: Array<any>;\n\n spaceID: string;\n\n currentSpace: Space;\n\n currentVisit: Visit;\n\n currentImages: Array<any>;\n\n loading = false;\n\n currentScanID: string;\n\n menuItems: MenuItem[] = [];\n\n constructor(\n private route: ActivatedRoute,\n private spaceService: SpaceService,\n private visitService: VisitService,\n private nodeService: NodeService,\n ) {}\n\n ngOnInit(): void {\n this.spaceID = this.route.snapshot.paramMap.get(\"id\");\n this.loadImages();\n }\n\n setupMenuItems() {\n this.menuItems = [\n { label: \"Locations\", url: \"/localisation\" },\n {\n label: this.currentSpace.name,\n url: `/localisation/${this.spaceID}`,\n },\n { label: \"360° Images\" },\n ];\n\n if (this.currentVisit) {\n this.menuItems.push({ label: this.currentVisit.name });\n }\n }\n\n onGoBack() {\n this.currentVisit = null;\n this.currentImages = null;\n this.setupMenuItems();\n }\n\n async loadImages() {\n this.loading = true;\n this.currentSpace = await this.spaceService.getSpace(this.spaceID);\n this.setupMenuItems();\n this.images = await this.visitService.loadImagesForSpace(\n this.currentSpace,\n );\n if (this.currentSpace.visits.length === 1) {\n this.setVisit(this.currentSpace.visits[0]);\n }\n this.loading = false;\n }\n\n setVisit(visit) {\n this.currentVisit = visit;\n this.currentImages = this.images.filter((im) => {\n return im.visit === visit;\n });\n this.setupMenuItems();\n }\n\n setCurrentScan(id) {\n this.currentScanID = id;\n }\n\n async onInventoryClick() {\n const { node } = this.currentVisit;\n const { filename } = this.currentImages[this.currentScanID]; // 110ee452_sweep.jpeg\n // check if node has already errors of inventory\n const missingFilesErrors = [\n InventoryStatus.ERROR_FILE_JSON_NOT_EXIST,\n InventoryStatus.ERROR_FILE_MODEL_NOT_EXIST,\n InventoryStatus.ERROR_FILE_OBJ_NOT_EXIST,\n ];\n if (\n node.inventoryStatus &&\n missingFilesErrors.includes(node.inventoryStatus)\n ) {\n alert(\n \"Files missing for this visit's inventory. Contact your administrator.\",\n );\n } else {\n await this.nodeService.updateNode({\n id: node.id,\n inventoryStatus: InventoryStatus.TO_RUN_ONE_IMAGE,\n navigationForInventory: filename.split(\"_\")[0],\n });\n alert(\n \"Automatic AI Inventory started! Detected equipments will appear soon in the visit.\",\n );\n }\n }\n\n}\n","<div class=\"container-fluid dashboard-tab col-sm-10 mb-3\" *ngIf=\"currentSpace\" >\n <div class=\"m-3\">\n <lib-tab-navigation [menuItems]='menuItems' (onGoBack)=\"onGoBack()\"></lib-tab-navigation>\n </div>\n <div class=\"d-flex justify-content-center\" *ngIf=\"loading\">\n <div class=\"spinner-border\" role=\"status\">\n <span class=\"visually-hidden\">{{'Loading' | translate}}...</span>\n </div>\n </div>\n <div ngbDropdown class=\"d-inline-block\" *ngIf=\"currentSpace.visits && currentSpace.visits.length > 0\">\n <button class=\"btn btn-label-file rounded-pill\" id=\"dropdownBasic1\" *ngIf=\"!currentVisit\"\n ngbDropdownToggle>{{'Choose 3D visit' | translate}}</button>\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\">\n <button ngbDropdownItem *ngFor=\"let visit of currentSpace.visits\" (click)=\"setVisit(visit)\"> {{ visit.name }}\n </button>\n </div>\n </div>\n <h3 *ngIf=\"currentVisit\">{{ currentVisit.name }}</h3>\n <div class=\"mt-3\" *ngIf=\"currentVisit && currentImages.length == 0 && !loading\">\n <h4>{{'No imported images' | translate }}</h4>\n <p>{{'For import: go Virtual Visits => Import Images' | translate}}</p>\n </div>\n <button *ngIf=\"currentVisit && currentImages.length > 0 && !loading\"\n class=\"btn btn-outline-primary rounded-pill no-lowercase mb-2\" (click)=\"onInventoryClick()\">\n {{'Run AI inventory on this image' | translate}}</button>\n <lib-carousel [images]=\"currentImages\" *ngIf=\"currentImages\" (currentScan)=\"setCurrentScan($event)\"></lib-carousel>\n </div>","import { Component, HostListener, OnInit, ViewChild } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\nimport { TranslateService } from '@ngx-translate/core';\nimport { getDocument } from \"pdfjs-dist\";\nimport { PDFDocumentProxy } from \"ng2-pdf-viewer\";\nimport { Zone, Plan, Space, MenuItem, PlanService, ZoneService, VisitService, SpaceService, sortAlphabeticallyOnName, downloadFileAsObject } from 'ngx-smarterplan-core';\n\n@Component({\n selector: 'lib-edit-plan',\n templateUrl: './edit-plan.component.html',\n styleUrls: ['./edit-plan.component.scss']\n})\nexport class EditPlanComponent implements OnInit {\n\n @ViewChild(\"dialog\") dialog!: any;\n\n @ViewChild(\"dialogZone\") dialogZone!: any;\n\n @ViewChild(\"preparing\") loadingModal: any;\n\n spaceID: string;\n\n chosenPlan: Plan;\n\n editedPlan: Plan;\n\n loading: boolean = false;\n\n svgEditor;\n\n svgEditorIframe;\n\n navigations: string[];\n\n zones: Zone[];\n\n isNewZone: boolean = false;\n\n newZoneData;\n\n editorUrl;\n\n editedZone: Zone;\n\n images360;\n\n\n /**\n * Options for svgEditor\n */\n private config: any = {\n noStorageOnLoad: true,\n forceStorage: true,\n // imgPath: \"/assets/editor/images/\",\n // extPath: \"/assets/editor/extensions/\",\n // langPath: \"/assets/editor/locale/\",\n // canvgPath: \"/assets/editor/canvg/\",\n // jspdfPath: \"/assets/editor/jspdf/\",\n // jGraduatePath: \"/assets/editor/jgraduate/images/\",\n // extIconsPath: \"/assets/editor/extensions/\",\n // stylesheets: [\n // \"/assets/editor/jgraduate/css/jGraduate.css\",\n // \"/assets/editor/spinbtn/jQuery.SpinButton.css\",\n // \"/assets/editor/jgraduate/css/jPicker.css\",\n // \"/assets/editor/svg-editor.css\",\n // ],\n dimensions: [10000, 10000],\n showlayers: true,\n noDefaultExtensions: true,\n basePath: \"/assets/editor/\",\n customExportImage: true,\n extensions: [\n \"ext-connector\",\n // \"ext-eyedropper\",\n // \"ext-grid\",\n // \"ext-markers\",\n // \"ext-overview_window\",\n // \"ext-spi-library\",\n // \"ext-spi-icon\",\n \"ext-sp-zone\",\n // \"ext-arrows\",\n // \"ext-sp-css\",\n // \"ext-placemark\",\n ],\n };\n\n currentSpace: Space;\n\n menuItems: MenuItem[] = [];\n\n constructor(\n private planService: PlanService,\n private route: ActivatedRoute,\n private router: Router,\n private modalService: NgbModal,\n private zoneService: ZoneService,\n private visitService: VisitService,\n private spaceService: SpaceService,\n private translate: TranslateService,\n ) {\n this.chosenPlan = this.planService.getChosenPlan();\n }\n\n async ngOnInit() {\n this.editorUrl = \"/assets/editor/main.html\";\n this.spaceID = this.route.snapshot.queryParams.spaceID;\n this.currentSpace = await this.spaceService.getSpace(this.spaceID);\n this.setupMenuItems();\n if (this.spaceID && !this.planService.getChosenPlan()) {\n this.router.navigate([\n \"/dashboard/localisation\",\n this.spaceID,\n \"plans\",\n ]);\n } else if (!this.spaceID && !this.planService.getChosenPlan()) {\n this.router.navigate([\"/dashboard/localisation\"]);\n }\n }\n\n setupMenuItems() {\n this.menuItems = [\n { label: \"Locations\", url: \"/localisation\" },\n {\n label: this.currentSpace.name,\n url: `/localisation/${this.spaceID}`,\n },\n {\n label: \"Plans\",\n url: `/localisation/${this.currentSpace.id}/plans`,\n },\n {\n label: \"Edit\",\n url: `/localisation/${this.currentSpace.id}/plan-edit?spaceID=${this.currentSpace.id}`,\n },\n ];\n }\n\n @HostListener(\"window:message\", [\"$event\"])\n async switchAction(event) {\n if (event.origin === window.location.origin) {\n switch (event.data.message) {\n case \"save\":\n this.onSave(event.data.redirect);\n break;\n case \"close\":\n this.onCancel();\n break;\n case \"new-zone\":\n const modalReference = this.modalService.open(\n this.loadingModal,\n );\n const svg = unescape(\n encodeURIComponent(\n this.svgEditor.svgCanvas.getSvgString(),\n ),\n );\n\n const base64 = `data:image/svg+xml;base64,${window.btoa(\n svg,\n )}`;\n const currentSpace = await this.spaceService.getSpace(\n this.spaceID,\n );\n\n this.images360 = await this.visitService.loadImagesForSpace(\n currentSpace,\n );\n\n this.editedPlan = { ...this.chosenPlan };\n this.editedPlan.filepath = base64;\n\n this.newZoneData = event.data.zoneData;\n if (this.newZoneData.elements.length === 0) {\n modalReference.close();\n alert(this.translate.instant(\"edition.no-zone\"));\n break;\n }\n this.zones = await this.zoneService.getZonesBySpace(\n this.spaceID,\n );\n this.zones = sortAlphabeticallyOnName(this.zones);\n this.editedZone = this.zones.find(\n (z) => z.name === this.newZoneData.name,\n );\n this.resetNavigations();\n modalReference.close();\n this.modalService.open(this.dialogZone);\n\n break;\n\n default:\n break;\n }\n }\n }\n\n async resetNavigations() {\n this.navigations = [];\n const defaultZone = this.zones.find((zone) => !zone.parentID);\n if (defaultZone.sweepIDs.length > 0) {\n this.navigations = defaultZone.sweepIDs;\n }\n }\n\n async onLoad(svgEditor) {\n if (svgEditor.contentWindow.SvgEditor) {\n this.svgEditorIframe = svgEditor;\n this.svgEditor = new svgEditor.contentWindow.SvgEditor();\n\n await this.svgEditor.init();\n // await this.svgEditor.pref(key, val);\n // await this.svgEditor.setConfig({ extentions: this.extensions });\n await this.svgEditor.setConfig(this.config, {\n allowInitialUserOverride: true,\n });\n\n if (this.chosenPlan && this.chosenPlan.extension === \"svg\") {\n this.loadSvg();\n }\n if (this.chosenPlan && this.chosenPlan.extension === \"pdf\") {\n this.loadPdf();\n }\n if (!this.chosenPlan.calibration || !this.chosenPlan.isModified) {\n setTimeout(() => {\n this.svgEditorIframe.contentWindow.postMessage(\n { action: \"disable-zone\" },\n \"*\",\n );\n }, 1000);\n }\n }\n }\n\n async onSave(redirect: boolean) {\n const imgBlob = await new Blob(\n [this.svgEditor.svgCanvas.getSvgString()],\n {\n type: \"image/svg+xml\",\n },\n );\n\n const [name] = this.chosenPlan.name.split(\".\");\n\n const imgFile: File = new File([imgBlob], `${name}-edited.svg`, {\n type: \"image/svg+xml\",\n lastModified: Date.now(),\n });\n this.planService.setPlanFileCache(imgFile);\n if (this.chosenPlan.isModified) {\n this.modalService.open(this.dialog);\n } else {\n this.router.navigate([\n \"/dashboard/localisation\",\n this.spaceID,\n \"plans\",\n ]);\n }\n }\n\n async updateSvg() {\n const newUrl = await this.planService.updatePlanFile();\n await this.planService.updatePlan({\n id: this.chosenPlan.id,\n annexe: newUrl,\n });\n this.planService.setPlanFileCache(null);\n this.router.navigate([\n \"/dashboard/localisation\",\n this.spaceID,\n \"plans\",\n ]);\n }\n\n async newSvg() {\n this.router.navigate([\n \"/dashboard/localisation\",\n this.spaceID,\n \"plans\",\n ]);\n }\n\n async onCancel() {\n this.router.navigate([\n \"/dashboard/localisation\",\n this.spaceID,\n \"plans\",\n ]);\n alert(this.translate.instant(\"edition.cancel\"));\n }\n\n async loadSvg() {\n const svgRequest: any = await downloadFileAsObject(\n this.chosenPlan.annexe,\n );\n if (svgRequest) {\n const svgBlob = await svgRequest.Body;\n const reader = new FileReader();\n reader.onloadend = () => {\n this.svgEditor.loadFromDataURI(reader.result);\n };\n reader.readAsDataURL(svgBlob);\n }\n }\n\n async loadPdf() {\n this.svgEditorIframe.contentWindow.postMessage(\n { action: \"disable-zone\" },\n \"*\",\n );\n const canvas = document.querySelector(\n \"#canvas4pdf\",\n ) as HTMLCanvasElement;\n const context = canvas.getContext(\"2d\") as CanvasRenderingContext2D;\n\n const pdfjs = await import(\"pdfjs-dist/build/pdf\");\n const pdfjsWorker = await import(\"pdfjs-dist/build/pdf.worker.entry\");\n\n pdfjs.GlobalWorkerOptions.workerSrc = pdfjsWorker;\n\n const pdf: PDFDocumentProxy = await getDocument(\n this.chosenPlan.filepath,\n ).promise;\n const page = await pdf.getPage(1);\n\n const viewPortParameters = { scale: 1.5 };\n const viewport = page.getViewport(viewPortParameters);\n this.svgEditor.svgCanvas.setResolution(viewport.width, viewport.height);\n\n canvas.height = viewport.height;\n canvas.width = viewport.width;\n const renderContext = {\n canvasContext: context,\n viewport,\n };\n const renderTask = page.render(renderContext).promise;\n renderTask.then(() => {\n const newImage = this.svgEditor.svgCanvas.addSVGElementFromJson({\n element: \"image\",\n attr: {\n x: 0,\n y: 0,\n width: viewport.width,\n height: viewport.height,\n id: this.svgEditor.svgCanvas.getNextId(),\n style: \"pointer-events:inherit\",\n },\n });\n this.svgEditor.svgCanvas.setHref(\n newImage,\n canvas.toDataURL(\"image/png\"),\n );\n });\n }\n\n async onLoadImg(img: any) {\n this.svgEditorIframe.contentWindow.postMessage(\n { action: \"disable-zone\" },\n \"*\",\n );\n const imgRequest: any = await downloadFileAsObject(\n this.chosenPlan.annexe,\n );\n if (imgRequest) {\n const imgBlob = await imgRequest.Body;\n const imgWidth = img.naturalWidth;\n const imgHeight = img.naturalHeight;\n // await this.svgEditor.setConfig({\n // dimensions: [imgWidth, imgHeight],\n // });\n this.svgEditor.svgCanvas.setResolution(imgWidth, imgHeight);\n\n const reader = new FileReader();\n reader.onloadend = () => {\n const newImage = this.svgEditor.svgCanvas.addSVGElementFromJson(\n {\n element: \"image\",\n attr: {\n x: 0,\n y: 0,\n width: imgWidth,\n height: imgHeight,\n id: this.svgEditor.svgCanvas.getNextId(),\n style: \"pointer-events:inherit\",\n },\n },\n );\n this.svgEditor.svgCanvas.setHref(newImage, reader.result);\n };\n reader.readAsDataURL(imgBlob);\n }\n }\n\n onNewZone(event) {\n this.isNewZone = false;\n if (event) {\n this.svgEditorIframe.contentWindow.postMessage(\n { action: \"rename-layer\", name: event },\n \"*\",\n );\n } else {\n this.svgEditorIframe.contentWindow.postMessage(\n { action: \"cancel-layer\" },\n \"*\",\n );\n }\n }\n\n}\n","<div class=\"row mt-3\">\n <div class=\"col\">\n <div class=\"m-3\">\n <lib-tab-navigation [menuItems]='menuItems'></lib-tab-navigation>\n </div>\n </div>\n</div>\n<iframe *ngIf=\"editorUrl\" #svgEditor [src]=\"editorUrl | safeUrl\" frameborder=\"0\"\n style=\"height: 100%;width:100%;min-height:750px\" (load)=\"onLoad(svgEditor)\"></iframe>\n<!-- chosenPlan && -->\n<!-- ./../../../../../../assets/svgeditor/index.html -->\n\n<img #imgPng *ngIf=\"chosenPlan && chosenPlan.extension !== 'svg' && svgEditor\" [src]=\"chosenPlan.filepath\"\n (load)=\"onLoadImg(imgPng)\" style=\"display: none;\">\n\n<canvas id=\"canvas4pdf\" style=\"display: none;\"></canvas>\n\n<lib-add-zone *ngIf=\"isNewZone\" [images360]=\"images360\" [spaceID]=\"spaceID\" [navigationIDs]=\"navigations\"\n [zoneEdit]=\"editedZone\" [zones]=\"zones\" (updatedZone)=\"onNewZone($event)\" [chosenPlan]=\"editedPlan\"\n [newZoneData]=\"newZoneData\"></lib-add-zone>\n\n<ng-template #dialog let-modal>\n\n <div class=\"modal-header\">\n <h4 class=\"modal-title\">{{'Submit' | translate}}</h4>\n <button type=\"button\" class=\"close\" aria-label=\"Close\" (click)=\"modal.dismiss('Cross click')\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n </div>\n <div class=\"modal-body\">\n {{'save plan edited' | translate}}\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-outline-dark\" (click)=\"newSvg();modal.close('Close click')\">{{'Yes' |\n translate}}</button>\n <button type=\"button\" class=\"btn btn-outline-dark\" (click)=\"updateSvg();modal.close('Close click')\">{{'No' |\n translate}}</button>\n </div>\n\n</ng-template>\n\n<ng-template #dialogZone let-modal>\n\n <div class=\"modal-header\">\n <h4 class=\"modal-title\">{{'Submit' | translate}}</h4>\n <button type=\"button\" class=\"close\" aria-label=\"Close\" (click)=\"modal.dismiss('Cross click')\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n </div>\n <div class=\"modal-body\">\n {{'Select zone' | translate}}\n <div ngbDropdown class=\"d-inline-block me-3\">\n <button class=\"btn btn-label-file rounded-pill\" id=\"dropdownBasic1\" ngbDropdownToggle>{{editedZone ?\n editedZone.name: ('New zone' | translate) }}</button>\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\">\n <button ngbDropdownItem (click)=\"editedZone = null\" translate=\"New zone\">\n </button>\n <button ngbDropdownItem *ngFor=\"let zone of zones\" (click)=\"editedZone = zone\">{{zone.name }}\n </button>\n </div>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-outline-dark\"\n (click)=\"isNewZone = true;modal.close('Close click')\">{{'Validate' |\n translate}}</button>\n <button type=\"button\" class=\"btn btn-outline-dark\" (click)=\"modal.close('Close click')\">{{'Cancel' |\n translate}}</button>\n </div>\n\n</ng-template>\n\n<ng-template #preparing let-modal>\n <div class=\"modal-header\">\n <h4 class=\"modal-title\">{{'Processing' | translate}}</h4>\n <button type=\"button\" class=\"close\" aria-label=\"Close\" (click)=\"modal.dismiss('Cross click')\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n </div>\n <div class=\"modal-body\">\n <div class=\"d-flex justify-content-center\">\n <div class=\"spinner-border\" role=\"status\">\n <span class=\"visually-hidden\">Loading...</span>\n </div>\n </div>\n </div>\n\n</ng-template>","import { NgModule } from \"@angular/core\";\r\nimport { Routes, RouterModule } from \"@angular/router\";\r\nimport { CalibrationComponent } from \"./components/plans/calibration/calibration.component\";\r\nimport { DetailLocationComponent } from \"./components/detail-location/detail-location.component\";\r\nimport { EditPlanComponent } from \"./components/plans/edit-plan/edit-plan.component\";\r\nimport { ImagesComponent } from \"./components/images/images.component\";\r\nimport { LocationsComponent } from \"./components/locations/locations.component\";\r\nimport { PlansComponent } from \"./components/plans/plans.component\";\r\nimport { VisitsComponent } from \"./components/visits/visits.component\";\r\nimport { ZonesComponent } from \"./components/zones/zones.component\";\r\n\r\nconst routes: Routes = [\r\n {\r\n path: \"\",\r\n component: LocationsComponent,\r\n },\r\n {\r\n path: \":id\",\r\n children: [\r\n { path: \"\", component: DetailLocationComponent },\r\n { path: \"zones\", component: ZonesComponent },\r\n { path: \"visits\", component: VisitsComponent },\r\n { path: \"plans\", component: PlansComponent },\r\n {\r\n path: \"plan-calibration\",\r\n component: CalibrationComponent,\r\n },\r\n {\r\n path: \"plan-edit\",\r\n component: EditPlanComponent,\r\n },\r\n { path: \"images\", component: ImagesComponent },\r\n ],\r\n },\r\n ];\r\n \r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule],\r\n})\r\nexport class LocationsRoutingModule { }","import { NgModule } from '@angular/core';\nimport { LocationsComponent } from './components/locations/locations.component';\nimport { DetailLocationComponent } from './components/detail-location/detail-location.component';\nimport { CalibrationComponent } from './components/plans/calibration/calibration.component';\nimport { PlansComponent } from './components/plans/plans.component';\nimport { VisitsComponent } from './components/visits/visits.component';\nimport { ZonesComponent } from './components/zones/zones.component';\nimport { ImagesComponent } from './components/images/images.component';\nimport { EditPlanComponent } from './components/plans/edit-plan/edit-plan.component';\nimport { LocationsRoutingModule } from './ngx-smarterplan-location-routing.module';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { TabNavigationComponent } from './components/tab-navigation/tab-navigation.component';\nimport { MapComponent } from './components/locations/map/map.component';\nimport { LeafletModule } from '@asymmetrik/ngx-leaflet';\nimport {TranslateModule} from '@ngx-translate/core';\nimport { MapPopupComponent } from './components/locations/map/map-popup/map-popup.component';\nimport { CommonModule } from '@angular/common';\nimport { FormLocationComponent } from './components/form-location/form-location.component';\nimport { NgbModule } from \"@ng-bootstrap/ng-bootstrap\";\nimport { ClipboardModule } from \"ngx-clipboard\";\nimport { ChevronComponent } from './components/chevron/chevron.component';\nimport { AddZoneComponent } from './components/zones/add-zone/add-zone.component';\nimport { SelectionComponent } from './components/zones/add-zone/selection/selection.component';\nimport { CarouselComponent } from './components/carousel/carousel.component';\nimport { NgxSmarterplanCoreModule} from 'ngx-smarterplan-core';\nimport { PdfViewerModule } from 'ng2-pdf-viewer';\n\n@NgModule({\n declarations: [\n LocationsComponent,\n DetailLocationComponent,\n CalibrationComponent,\n PlansComponent,\n VisitsComponent,\n ZonesComponent,\n ImagesComponent,\n EditPlanComponent,\n TabNavigationComponent,\n MapComponent,\n MapPopupComponent,\n FormLocationComponent,\n ChevronComponent,\n AddZoneComponent,\n SelectionComponent,\n CarouselComponent\n ],\n imports: [\n PdfViewerModule,\n ClipboardModule,\n NgbModule,\n CommonModule,\n TranslateModule.forChild({\n extend: true\n }),\n LeafletModule,\n FormsModule,\n ReactiveFormsModule,\n NgxSmarterplanCoreModule,\n LocationsRoutingModule,\n ],\n exports: []\n})\nexport class NgxSmarterplanLocationsModule { }\n","/*\n * Public API Surface of ngx-smarterplan-locations\n */\n\nexport * from './lib/ngx-smarterplan-locations.service';\nexport * from './lib/ngx-smarterplan-locations.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i1","i3","i4","i3.TabNavigationComponent","i4.MapComponent","i5.FormLocationComponent","i6","i8","i4.TabNavigationComponent","i7","i9","i5.TabNavigationComponent","i6.ChevronComponent","i3.CarouselComponent","i4.SelectionComponent","i5.ChevronComponent","i6.AddZoneComponent","i4.CarouselComponent"],"mappings":"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"}
1
+ {"version":3,"file":"smarterplan-ngx-smarterplan-locations.mjs","sources":["../../../projects/ngx-smarterplan-locations/src/lib/ngx-smarterplan-locations.service.ts","../../../projects/ngx-smarterplan-locations/src/lib/components/tab-navigation/tab-navigation.component.ts","../../../projects/ngx-smarterplan-locations/src/lib/components/tab-navigation/tab-navigation.component.html","../../../projects/ngx-smarterplan-locations/src/lib/components/locations/map/map-popup/map-popup.component.ts","../../../projects/ngx-smarterplan-locations/src/lib/components/locations/map/map-popup/map-popup.component.html","../../../projects/ngx-smarterplan-locations/src/lib/components/locations/map/map.component.ts","../../../projects/ngx-smarterplan-locations/src/lib/components/locations/map/map.component.html","../../../projects/ngx-smarterplan-locations/src/lib/components/form-location/form-location.component.ts","../../../projects/ngx-smarterplan-locations/src/lib/components/form-location/form-location.component.html","../../../projects/ngx-smarterplan-locations/src/lib/components/locations/locations.component.ts","../../../projects/ngx-smarterplan-locations/src/lib/components/locations/locations.component.html","../../../projects/ngx-smarterplan-locations/src/lib/components/detail-location/detail-location.component.ts","../../../projects/ngx-smarterplan-locations/src/lib/components/detail-location/detail-location.component.html","../../../projects/ngx-smarterplan-locations/src/lib/components/plans/calibration/calibration.component.ts","../../../projects/ngx-smarterplan-locations/src/lib/components/plans/calibration/calibration.component.html","../../../projects/ngx-smarterplan-locations/src/lib/components/plans/plans.component.ts","../../../projects/ngx-smarterplan-locations/src/lib/components/plans/plans.component.html","../../../projects/ngx-smarterplan-locations/src/lib/components/chevron/chevron.component.ts","../../../projects/ngx-smarterplan-locations/src/lib/components/chevron/chevron.component.html","../../../projects/ngx-smarterplan-locations/src/lib/components/visits/visits.component.ts","../../../projects/ngx-smarterplan-locations/src/lib/components/visits/visits.component.html","../../../projects/ngx-smarterplan-locations/src/lib/components/carousel/carousel.component.ts","../../../projects/ngx-smarterplan-locations/src/lib/components/carousel/carousel.component.html","../../../projects/ngx-smarterplan-locations/src/lib/components/zones/add-zone/selection/selection.component.ts","../../../projects/ngx-smarterplan-locations/src/lib/components/zones/add-zone/selection/selection.component.html","../../../projects/ngx-smarterplan-locations/src/lib/components/zones/add-zone/add-zone.component.ts","../../../projects/ngx-smarterplan-locations/src/lib/components/zones/add-zone/add-zone.component.html","../../../projects/ngx-smarterplan-locations/src/lib/components/zones/zones.component.ts","../../../projects/ngx-smarterplan-locations/src/lib/components/zones/zones.component.html","../../../projects/ngx-smarterplan-locations/src/lib/components/images/images.component.ts","../../../projects/ngx-smarterplan-locations/src/lib/components/images/images.component.html","../../../projects/ngx-smarterplan-locations/src/lib/components/plans/edit-plan/edit-plan.component.ts","../../../projects/ngx-smarterplan-locations/src/lib/components/plans/edit-plan/edit-plan.component.html","../../../projects/ngx-smarterplan-locations/src/lib/ngx-smarterplan-location-routing.module.ts","../../../projects/ngx-smarterplan-locations/src/lib/ngx-smarterplan-locations.module.ts","../../../projects/ngx-smarterplan-locations/src/public-api.ts","../../../projects/ngx-smarterplan-locations/src/smarterplan-ngx-smarterplan-locations.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NgxSmarterplanLocationsService {\n\n constructor() { }\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { MenuItem } from '@smarterplan/ngx-smarterplan-core';\n\n@Component({\n selector: 'lib-tab-navigation',\n templateUrl: './tab-navigation.component.html',\n styleUrls: ['./tab-navigation.component.scss']\n})\nexport class TabNavigationComponent {\n\n @Output() onGoBack = new EventEmitter<void>();\n\n @Input() menuItems: MenuItem[] = [];\n\n constructor(private router: Router) {}\n\n onClick(url: string, parameter: any, index: number) {\n if (index === this.menuItems.length - 1) {\n return;\n }\n if (url) {\n const newURL = `/dashboard${url}`;\n if (this.router.url !== newURL) {\n this.router.navigate([newURL]);\n } else {\n this.onGoBack.emit(parameter);\n }\n } else {\n this.onGoBack.emit(parameter);\n }\n }\n\n}\n","<span class=\"menu\">\n <span *ngFor=\"let item of menuItems; let index = index;\">\n <span class=\"item\" [ngClass]=\"{'current':index === menuItems.length - 1}\"\n (click)=\"onClick(item.url,item.back, index)\">{{item.label | translate}}</span> <span\n *ngIf=\"index !== menuItems.length - 1\" class=\"separator\">></span>\n </span>\n</span>\n","import { Component, NgZone, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Marker } from 'leaflet';\nimport { Space, Visit } from '@smarterplan/ngx-smarterplan-core';\n\n@Component({\n selector: 'lib-map-popup',\n templateUrl: './map-popup.component.html',\n styleUrls: ['./map-popup.component.scss']\n})\nexport class MapPopupComponent implements OnInit {\n\n space: Space;\n\n marker: Marker;\n\n popuparea: HTMLElement;\n\n isOnPopup = false;\n\n isMuseumUser = true;\n\n constructor(private router: Router, private ngZone: NgZone) { }\n\n ngOnInit() {\n this.marker.on(\"click\", () => this.onClickVisitFirst());\n\n this.marker.on(\"mouseover\", () => {\n this.isOnPopup = true;\n if (!this.marker.isPopupOpen()) {\n this.openPopup();\n }\n });\n }\n\n openPopup() {\n this.marker.openPopup();\n\n this.isOnPopup = false;\n this.popuparea = document.querySelector(\".leaflet-popup\");\n\n this.popuparea.addEventListener(\"mouseleave\", () => {\n this.closePopup();\n });\n this.popuparea.addEventListener(\"mouseover\", () => {\n this.isOnPopup = true;\n });\n this.marker.on(\"mouseout\", () => {\n this.closePopup();\n });\n }\n\n closePopup() {\n this.isOnPopup = false;\n /** We want to wait to avoid glitch */\n setTimeout(() => {\n if (!this.isOnPopup) {\n this.marker.closePopup();\n }\n }, 100);\n }\n\n onClickVisitFirst() {\n if (this.space.visits.length === 0) {\n console.log(\"No space to visit !\");\n } else {\n this.onVisitClick(this.space.visits[0]);\n }\n }\n\n async onVisitClick(visit: Visit) {\n this.ngZone.run(() => {\n this.router.navigate([\"visit\", this.space.id], {\n queryParams: { model3D: visit.model3d },\n });\n });\n }\n\n}\n","<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'\">➤ {{ visit.name ? visit.name : space.name}}</span>\n </div>\n</div>\n","import { Component, ComponentFactoryResolver, Injector, Input, NgZone, OnChanges, SimpleChanges, ViewContainerRef } from '@angular/core';\nimport { Space } from '@smarterplan/ngx-smarterplan-core';\nimport {\n latLng,\n marker,\n tileLayer,\n Map,\n latLngBounds,\n point,\n Marker,\n icon,\n} from \"leaflet\";\nimport { MapPopupComponent } from './map-popup/map-popup.component';\nimport { Router } from '@angular/router';\n\n\nconst iconRetinaUrl = \"assets/marker-icon-2x.png\";\nconst iconUrl = \"assets/marker-icon.png\";\nconst shadowUrl = \"assets/marker-shadow.png\";\nconst iconDefault = icon({\n iconRetinaUrl,\n iconUrl,\n shadowUrl,\n iconSize: [25, 41],\n iconAnchor: [12, 41],\n popupAnchor: [1, -34],\n tooltipAnchor: [16, -28],\n shadowSize: [41, 41],\n});\nMarker.prototype.options.icon = iconDefault;\n@Component({\n selector: 'lib-map',\n templateUrl: './map.component.html',\n styleUrls: ['./map.component.scss']\n})\nexport class MapComponent implements OnChanges {\n\n constructor(private componentFactoryResolver: ComponentFactoryResolver,\n private injector: Injector,) { }\n\n @Input() spaces: Space[];\n\n options = {\n layers: [\n tileLayer(\"http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png\", {\n maxZoom: 18,\n attribution: \"...\",\n }),\n ],\n zoom: 5.5,\n center: latLng(47.06394, 2.77736),\n };\n\n layers: any[] = [];\n\n map: any;\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.spaces) {\n const nm = [];\n const bd = [];\n if (!changes.spaces.currentValue) {\n return;\n }\n // Filtering out spaces without lat/longitudes\n for (const s of changes.spaces.currentValue as Space[]) {\n if (s.latitude === null || s.longitude === null) {\n console.log(\n `${s.name} has not coordinates for ${s.addresses}`,\n );\n continue;\n }\n // We use the popup system from leaflet, as it packs a few improvements\n // on using bootstrap: autoclose other popups, closing option.\n const m = marker([s.latitude, s.longitude]);\n\n m.bindPopup(this.createPopupComponent(s, m));\n\n nm.push(m);\n bd.push(latLng(s.latitude, s.longitude));\n }\n // Note how we set the layers in one assignment, in order to have leaflet\n // detects the change correctly\n // We also set the bounds afterward, for the map to be properly zoomed and\n // centered\n this.layers = nm;\n if (this.map && bd.length > 0) {\n this.map.fitBounds(latLngBounds(bd), {\n padding: point(48, 48),\n maxZoom: 12,\n animate: true,\n });\n }\n }\n }\n\n onMapReady(map: Map) {\n this.map = map;\n }\n\n createPopupComponent(space: Space, marker: Marker) {\n const comp = this.componentFactoryResolver\n .resolveComponentFactory(MapPopupComponent)\n .create(this.injector);\n comp.instance.space = space;\n comp.instance.marker = marker;\n comp.changeDetectorRef.detectChanges();\n return comp.location.nativeElement;\n }\n\n}\n","<div [leafletLayers]=\"layers\" [leafletOptions]=\"options\" (leafletMapReady)=\"onMapReady($event)\" id=\"map\" leaflet\n style=\"height: 500px; margin-top: 30px; z-index: 195\"></div>\n","import { Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { FormGroup, FormBuilder, Validators, AbstractControl } from '@angular/forms';\nimport { Space, LevelStatus, SpaceService, PropertyService, BaseUserService, MissionService, enumToArray, uploadFileToS3, Layer, PropertyType, getSignedImageUrlForSpace, LayerService, deleteFromS3 } from '@smarterplan/ngx-smarterplan-core';\n\n@Component({\n selector: 'lib-form-location',\n templateUrl: './form-location.component.html',\n styleUrls: ['./form-location.component.scss']\n})\nexport class FormLocationComponent implements OnInit {\n\n form: FormGroup;\n\n @ViewChild(\"imageInputContainer\")\n imageInputContainer: ElementRef;\n\n @ViewChild(\"imageInput\")\n imageInput: ElementRef;\n\n @ViewChild(\"imageBasePreview\")\n imageBasePreview: ElementRef;\n\n @Input()\n location: Space;\n\n imageToUpload: any;\n\n isSubmitted = false;\n\n levels: Array<LevelStatus>;\n\n addMissionForNewSpace = true;\n\n imageInputText: string;\n\n currentImage: string;\n\n imageToBeDeleted: boolean = false;\n\n @Output() onChange = new EventEmitter<Space | null>();\n\n constructor(\n private spaceService: SpaceService,\n private propertyService: PropertyService,\n private userService: BaseUserService,\n private fb: FormBuilder,\n private missionService: MissionService,\n private layerService: LayerService,\n ) {\n this.levels = enumToArray(LevelStatus);\n }\n\n ngOnInit(): void {\n if (this.location) {\n this.initEditForm();\n } else {\n this.initForm();\n }\n this.handleInputImageText();\n }\n\n initForm() {\n this.form = this.fb.group({\n name: [null, [Validators.required]],\n addresses: [\"\"],\n latitude: [null],\n longitude: [null],\n level: LevelStatus.LOW,\n classGes: [null],\n classEnergyConsumption: [null],\n constructionYear: [null],\n });\n }\n\n initEditForm() {\n this.form = this.fb.group({\n id: this.location.id,\n name: [this.location.name, [Validators.required]],\n addresses: this.location.addresses,\n latitude: this.location.latitude,\n longitude: this.location.longitude,\n level: this.location.level,\n classGes: this.location.classGes,\n classEnergyConsumption: this.location.classEnergyConsumption,\n constructionYear: this.location.constructionYear,\n });\n }\n\n handleImageInput(target: EventTarget) {\n this.imageToUpload = (target as HTMLInputElement).files[0];\n if (this.imageToUpload) {\n this.imageInputContainer.nativeElement.style.display = \"none\";\n const reader = new FileReader();\n reader.addEventListener(\"load\", () => {\n this.currentImage = reader.result as string;\n });\n reader.readAsDataURL(this.imageToUpload);\n }\n }\n\n async uploadImage(spaceID: string) {\n if (this.imageToUpload) {\n uploadFileToS3(\"locations/\", this.imageToUpload, spaceID).then(\n async (url) => {\n if (url) {\n await this.spaceService.updateSpace({\n id: spaceID,\n annexes: url,\n });\n }\n },\n );\n } else if (this.imageToBeDeleted) {\n await this.spaceService.updateSpace({\n id: spaceID,\n annexes: null,\n });\n await deleteFromS3(this.location.annexes);\n }\n }\n\n clearImageFile() {\n this.imageToUpload = null;\n this.currentImage = null;\n this.imageInputContainer.nativeElement.style.display = \"flex\";\n this.imageInput.nativeElement.value = \"\";\n this.imageInputText = \"Add picture\";\n }\n\n async getLayerByName(name: string): Promise<Layer> {\n const currentOrgId = this.userService.currentOrganisation().id;\n const layers = await this.layerService.getLayerByNameForOrganisation(\n name,\n currentOrgId,\n );\n if (layers) {\n return layers[0];\n }\n // create then\n return this.layerService.createLayerForOrganisation(name, currentOrgId);\n }\n\n async onSubmit() {\n this.isSubmitted = true;\n if (!this.form.valid) {\n return;\n }\n try {\n let space;\n if (this.location) {\n this.changeCommaToDot();\n space = await this.spaceService.updateSpace(this.form.value);\n if (space) {\n await this.uploadImage(space.id);\n this.location = space;\n this.onChange.emit(space);\n }\n } else {\n this.changeCommaToDot();\n let layer = await this.getLayerByName(\"BUILDING\");\n if (!layer) {\n layer = await this.layerService.createLayerForOrganisation(\n \"BUILDING\",\n this.userService.currentOrganisation().id,\n );\n }\n space = await this.spaceService.createSpace(\n this.form.value,\n layer,\n );\n\n const missions = this.userService.getManagerMissions();\n if (space && missions.length > 0) {\n const exampleMission = missions[0];\n await this.uploadImage(space.id);\n await this.propertyService.createProperty({\n type: PropertyType.PROPERTY,\n spaceID: space.id,\n organisationID: exampleMission.organisationID,\n });\n // add directly a mission for this space\n if (this.addMissionForNewSpace) {\n await this.missionService.create({\n spaceID: space.id,\n userID: exampleMission.userID,\n role: exampleMission.role,\n level: exampleMission.level,\n organisationID: exampleMission.organisationID,\n orderedOrganisationID:\n exampleMission.organisationID,\n });\n }\n this.onChange.emit(space);\n } else {\n this.onChange.emit(null);\n }\n }\n } catch (error) {\n console.error(error);\n this.onChange.emit(null);\n }\n }\n\n onCancel() {\n this.form.reset();\n this.onChange.emit(null);\n }\n\n get name(): AbstractControl {\n return this.form.get(\"name\");\n }\n\n changeCommaToDot() {\n const updatedSpace = this.form.value;\n if (\n updatedSpace.latitude &&\n updatedSpace.latitude.toString().includes(\",\")\n ) {\n updatedSpace.latitude = updatedSpace.latitude\n .toString()\n .replace(\",\", \".\");\n Number.parseFloat(updatedSpace.latitude);\n }\n if (\n updatedSpace.longitude &&\n updatedSpace.longitude.toString().includes(\",\")\n ) {\n updatedSpace.longitude = updatedSpace.longitude\n .toString()\n .replace(\",\", \".\");\n Number.parseFloat(updatedSpace.longitude);\n }\n }\n\n handleInputImageText() {\n if (this.location && this.location.annexes) {\n this.imageInputText = \"Change picture\";\n getSignedImageUrlForSpace(this.location).then((url) => {\n if (url) {\n this.currentImage = url;\n }\n });\n } else {\n this.imageInputText = \"Add picture\";\n }\n }\n}\n","<div class=\"col-md-6 form-new-loc\" *ngIf=\"form\">\n <form (ngSubmit)=\"onSubmit()\" [formGroup]=\"form\">\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Name' | translate}} *</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" [class.is-invalid]=\"name.invalid && isSubmitted\" required\n formControlName=\"name\">\n <div class=\"invalid-feedback\">\n {{'Name is mandatory' | translate}}\n </div>\n </div>\n </div>\n \n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Address' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"addresses\">\n </div>\n </div>\n \n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Construction year' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"constructionYear\">\n </div>\n </div>\n \n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Latitude' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"latitude\">\n </div>\n </div>\n \n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Longitude' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"longitude\">\n </div>\n </div>\n \n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Access level' | translate}}</label>\n <div class=\"col-sm-9\">\n <select class=\"d-inline-block custom-select rounded-pill\" formControlName=\"level\">\n <option *ngFor=\"let level of levels\" [value]=\"level\">{{level | translate}}</option>\n </select>\n </div>\n </div>\n \n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Energy Class' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"classEnergyConsumption\">\n </div>\n </div>\n \n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Greenhouse gas emission Class' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"classGes\">\n </div>\n </div>\n \n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Cover picture' | translate}}</label>\n <div class=\"col-sm-9\">\n <img #imageBasePreview *ngIf=\"currentImage\" class=\"image-preview\" [src]=\"currentImage\">\n <label #imageInputContainer for=\"image\"\n class=\"btn btn-label-file btn-outline-primary rounded-pill imageInputContainer\">\n <input #imageInput type=\"file\" id=\"image\" (change)=\"handleImageInput($event.target)\" />\n {{ imageInputText | translate}}</label>\n <button *ngIf=\"currentImage && !imageToUpload\" \n class=\"btn btn-outline-primary rounded-pill\" (click)=\"imageToBeDeleted=true;clearImageFile()\">{{'Delete picture' | translate }}</button>\n <div class=\"image-name\" *ngIf=\"imageToUpload\">\n <p >{{ imageToUpload.name}}</p>\n <div (click)=\"clearImageFile()\" [style.cursor]=\"'pointer'\">\n <span class=\"iconify\" data-icon=\"mdi:trash-can-outline\"></span>\n </div>\n </div>\n \n </div>\n </div>\n <div class=\"mb-3 row\" *ngIf=\"!location\">\n <label class=\"col-sm-3 col-form-label\">{{'Create mission for this space' | translate}}</label>\n <div class=\"col-sm-3\">\n <input type=\"checkbox\" [(ngModel)]=\"addMissionForNewSpace\" [ngModelOptions]=\"{standalone: true}\">\n </div>\n </div>\n \n <button type=\"submit\" class=\"btn btn-outline-primary rounded-pill me-3\">{{'Save' | translate}}</button>\n <button type=\"button\" (click)=\"onCancel()\" class=\"btn btn-outline-primary rounded-pill\">{{'Cancel' |\n translate}}</button>\n </form>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { LevelStatus, Space, SpaceService, BaseUserService, ViewerService, NavigationService, NavigatorService, enumToArray, Visit, MenuItem, SearchObjectType } from '@smarterplan/ngx-smarterplan-core';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'lib-locations',\n templateUrl: './locations.component.html',\n styleUrls: ['./locations.component.scss']\n})\nexport class LocationsComponent implements OnInit {\n\n createForm: FormGroup;\n\n levels: Array<LevelStatus>;\n\n imageToUpload: File;\n\n isAdding = false;\n\n filteredLocations: Space[] = [];\n\n isManager = false;\n\n isMuseumUser = true;\n\n locations: Space[] = [];\n\n menuItems: MenuItem[] = [];\n\n userSubcription: Subscription;\n\n locationIDSubscription: Subscription;\n\n /** Last filtered Locations, used when we go back on all locations from the search bar location */\n lastFiltredLocations: Space[] = [];\n\n constructor(\n private spaceService: SpaceService,\n private router: Router,\n private userService: BaseUserService,\n private viewerService: ViewerService,\n private navigationService: NavigationService,\n private navigatorService: NavigatorService,\n ) {\n this.levels = enumToArray(LevelStatus);\n this.userSubcription = this.userService.isChanged.subscribe((isConnected) => {\n if (isConnected) {\n this.refresh();\n }\n });\n\n this.locationIDSubscription =\n this.navigatorService.locationIDChange.subscribe((id) => {\n this.changeSelectedLocation(id);\n this.setupMenuItems();\n });\n }\n\n async ngOnInit() {\n if (this.userService.cu) {\n this.resetList();\n this.updateUserRights();\n }\n this.setupMenuItems();\n }\n\n\n findSpaceById(id: string): Space {\n return this.locations.find((loc) => loc.id === id);\n }\n\n /**\n * Update when we change the selected location in filter (search bar)\n * @param id for a location, if null display all last filtred location\n */\n changeSelectedLocation(id?: string) {\n const space = id ? this.findSpaceById(id) : null;\n this.filteredLocations = space ? [space] : this.lastFiltredLocations; // New selected space or last filtered location\n }\n\n refresh() {\n this.updateUserRights();\n this.resetList();\n }\n\n \n ngOnDestroy() {\n this.userSubcription.unsubscribe();\n this.locationIDSubscription.unsubscribe();\n }\n\n setupMenuItems() {\n this.menuItems = [{ label: \"All Locations\", url: \"/localisation\" }];\n if (this.isAdding) {\n this.menuItems.push({ label: \"New\" });\n }\n if (this.filteredLocations.length === 1) {\n const selectedLoc = this.filteredLocations[0];\n this.menuItems.push({ label: selectedLoc.name });\n }\n }\n\n updateUserRights() {\n this.isManager = this.userService.hasManagerRoleInAnyMission();\n this.isMuseumUser = this.userService.hasOnlyMuseumRole();\n }\n\n isManagerForSpace(spaceID: string): boolean {\n return (\n this.userService.isManager(spaceID) ||\n this.userService.isGuide(spaceID)\n );\n }\n\n async resetList() {\n this.locations = await this.spaceService.getLocationsForCurrentUser();\n this.filteredLocations = this.locations;\n this.lastFiltredLocations = this.locations;\n this.isAdding = false;\n this.changeSelectedLocation(\n this.navigatorService.currentNavBarLocationID,\n ); // Set for the current selected location\n this.setupMenuItems();\n }\n\n onAddLocation() {\n this.isAdding = true;\n this.setupMenuItems();\n }\n\n handleImageInput(files: FileList) {\n this.imageToUpload = files.item(0);\n }\n\n onFormChange(event: any) {\n this.navigatorService.locationIDChange.next(\n null,\n ); /** Remove selected location */\n this.isAdding = false;\n if (event) {\n this.resetList();\n }\n this.setupMenuItems();\n }\n\n async onVisitClick(loc: Space, visit: Visit) {\n if (!this.userService.userHasAccessToAllZonesInSpace(loc.id)) {\n // get allowed sweep for the user\n const allowedSweeps =\n await this.navigationService.getAllowedSweepsIDsForUserInSpace(\n loc.id,\n );\n const firstSweep = allowedSweeps[0];\n this.viewerService.setSweepToMove(firstSweep);\n }\n if (this.userService.isGuide(loc.id)) {\n this.router.navigate([\"museum\", loc.id]);\n } else {\n this.router.navigate([\"visit\", loc.id], {\n queryParams: { model3D: visit.model3d },\n });\n }\n }\n\n applyResultsSearchBar(results: Space[]) {\n this.filteredLocations = results || this.locations;\n this.lastFiltredLocations = this.filteredLocations;\n this.navigatorService.locationIDChange.next(null); // When we search with keyword, we would like to search on all locations\n }\n\n getSearchType(): SearchObjectType {\n return SearchObjectType.LOCATION;\n }\n\n}\n","<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 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 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 *ngIf=\"isManagerForSpace(loc.id)\" class=\"btn-details\" [routerLink]=\"[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 *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","import { Component, OnInit } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { MenuItem, SpaceService, BaseUserService, NavigatorService, SpaceStatus, Space } from '@smarterplan/ngx-smarterplan-core';\n\n@Component({\n selector: 'lib-detail-location',\n templateUrl: './detail-location.component.html',\n styleUrls: ['./detail-location.component.scss']\n})\nexport class DetailLocationComponent implements OnInit {\n\n space: Space;\n\n editForm: FormGroup;\n\n isEditing = false;\n\n imageToUpload: File;\n\n id: string;\n\n menuItems: MenuItem[] = [];\n\n isValidatingDpe = false;\n\n selectedDpeResult: any;\n\n gettingData = false;\n\n parsedMetadata: {\n geo_adresse: string;\n secteur_activite: string;\n annee_construction: string;\n classe_consommation_energie: string;\n classe_estimation_ges: string;\n selected: boolean;\n }[];\n\n guestLink: string;\n\n canArchive: boolean;\n\n constructor(\n private route: ActivatedRoute,\n private spaceService: SpaceService,\n private router: Router,\n private userService: BaseUserService,\n private translate: TranslateService,\n private navigatorService: NavigatorService,\n ) {}\n\n async ngOnInit() {\n this.id = this.route.snapshot.paramMap.get(\"id\");\n this.navigatorService.locationIDChange.next(this.id); // Send update for the location filter bar\n this.space = await this.spaceService.getSpace(this.id);\n this.setupMenuItems();\n this.setGuestLink();\n this.setCanArchive();\n }\n\n setupMenuItems() {\n this.menuItems = [\n { label: \"Locations\", url: \"/localisation\" },\n {\n label: this.space.name,\n url: `/localisation/${this.space.id}`,\n },\n ];\n\n if (this.isEditing) {\n this.menuItems.push({ label: \"Edit\" });\n } else {\n this.menuItems.push({ label: \"Information\" });\n }\n }\n\n onEdit() {\n this.isEditing = true;\n this.setupMenuItems();\n }\n\n onReturn() {\n // this.locationService.back()\n this.router.navigate([\"dashboard/localisation\"]);\n }\n\n reset() {\n this.isEditing = false;\n this.setupMenuItems();\n }\n\n async onArchive() {\n const message = this.translate.instant(\"confirm.archiveSpace\");\n if (window.confirm(message)) {\n await this.spaceService.softDeleteSpace(this.id);\n this.onReturn();\n }\n }\n\n onFormChange(event: Space) {\n this.isEditing = false;\n if (event) {\n this.space = event;\n }\n this.setupMenuItems();\n }\n\n onDpeValidate() {\n this.isValidatingDpe = true;\n this.parsedMetadata = JSON.parse(this.space.metadata);\n this.parsedMetadata = this.parsedMetadata.filter(\n (result) => result.geo_adresse,\n );\n }\n\n onSelectChange(selectedResult: any) {\n for (const result of this.parsedMetadata) {\n if (result !== selectedResult && result.selected) {\n result.selected = false;\n }\n }\n this.selectedDpeResult = selectedResult;\n }\n\n async onSaveResult() {\n if (this.selectedDpeResult) {\n const input = {\n id: this.space.id,\n constructionYear: this.selectedDpeResult.annee_construction,\n classEnergyConsumption:\n this.selectedDpeResult.classe_consommation_energie,\n classGes: this.selectedDpeResult.classe_estimation_ges,\n status: SpaceStatus.DPE_VALIDATED,\n };\n const updatedLoc = await this.spaceService.updateSpace(input);\n this.space = updatedLoc;\n this.isValidatingDpe = false;\n }\n }\n\n onCancel() {\n this.isValidatingDpe = false;\n }\n\n async onErase() {\n await this.spaceService.updateSpace({\n id: this.space.id,\n status: SpaceStatus.DPE_VALIDATED,\n });\n this.space.status = SpaceStatus.DPE_VALIDATED;\n this.isValidatingDpe = false;\n }\n\n async onGetDpeData() {\n this.gettingData = true;\n await this.spaceService.updateSpace({\n id: this.space.id,\n status: SpaceStatus.DPE_FETCH,\n });\n\n // force update of location\n setTimeout(async () => {\n this.space = await this.spaceService.getSpace(this.space.id);\n this.gettingData = false;\n }, 1500);\n }\n\n setGuestLink() {\n if (this.space.guestLink) {\n const { origin } = document.location;\n this.guestLink = `${origin}/${this.space.guestLink}`;\n setTimeout(() => {\n const hyperlink = document.querySelector(\n \"#linkHref\",\n ) as HTMLLinkElement;\n const message = this.translate.instant(\"confirm.followLink\");\n hyperlink.addEventListener(\"click\", async () => {\n if (window.confirm(message)) {\n window.location.href = this.guestLink;\n await this.userService.logoutCurrentAndSignOutAuth();\n this.router.navigate([\"auth\"]);\n }\n });\n }, 0);\n }\n }\n\n async setCanArchive() {\n this.canArchive = this.userService.isSPAdmin()\n ? true\n : await this.spaceService.canArchiveSpace(this.id);\n }\n\n}\n","<div class=\"container-fluid\">\n <div class=\"m-3\">\n <lib-tab-navigation [menuItems]='menuItems' (onGoBack)=\"reset()\"></lib-tab-navigation>\n </div>\n <button class=\"btn btn-outline-primary rounded-pill me-3\" (click)=\"onReturn()\">{{'Back to locations' |\n translate}}</button>\n <div class=\"row\" *ngIf=\"!isEditing && space\">\n <div class=\"col-md-5\">\n <ul class=\"list-group list-group-flush\">\n <li class=\"list-group-item bg-transparent\">{{'Name' | translate}}: {{space.name}} </li>\n <li class=\"list-group-item bg-transparent\">{{'Address' | translate}}: {{space.addresses}} </li>\n <li class=\"list-group-item bg-transparent\">{{'Construction year' | translate}}:\n {{space.constructionYear ?\n space.constructionYear : \"No data\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\">{{'Latitude' | translate}}:\n {{space.latitude ?\n space.latitude : \"No data\" | translate}}</li>\n <li class=\"list-group-item bg-transparent\">{{'Longitude' | translate}}: {{space.longitude ?\n space.longitude : \"No data\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\">{{'Access level' | translate}}: {{space.level | translate\n }} </li>\n <li class=\"list-group-item bg-transparent\">{{'Energy Class' | translate}}:\n {{space.classEnergyConsumption ?\n space.classEnergyConsumption : \"No data\" | translate}}\n <button *ngIf=\"space.status !== 'DPE_TO_VALIDATE'\"\n class=\"btn btn-outline-primary rounded-pill no-lowercase ms-5\" (click)=\"onGetDpeData()\">\n {{'Get data from API DPE' | translate}}</button>\n <a class=\"bg-transparent ms-5\" *ngIf=\"space.status === 'DPE_TO_VALIDATE'\"\n (click)=\"onDpeValidate()\" style=\"cursor: pointer;\">\n <span class=\"iconify\" data-icon=\"mdi:alert-circle-check\" style=\"color: #f19c80;\" data-width=\"25\"\n data-height=\"25\"></span>\n {{'DPE data found. Click to validate' | translate}}\n </a>\n </li>\n <li class=\"list-group-item bg-transparent\">{{'Greenhouse gas emission Class' | translate}}:\n {{space.classGes ? space.classGes : \"No data\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\">{{'Shareable Guest Link' | translate}}:\n <div style=\"display: inline;\" *ngIf=\"guestLink\">\n <a id=\"linkHref\" target=\"_blank\">{{'Try the link' | translate }}</a>\n <div ngxClipboard [cbContent]=\"guestLink\" [style.cursor]=\"'pointer'\"\n style=\"margin-left: 5px; max-width: 20px; display: inline;\" ngbTooltip=\"Copied!\"\n triggers=\"click:blur\">\n <span class=\"iconify\" data-icon=\"mdi:content-copy\" data-inline=\"false\" data-width=\"20\"\n data-height=\"20\"></span>\n </div>\n </div>\n <p *ngIf=\"!guestLink\" style=\"display: inline;\">{{'No link' | translate }}</p>\n <p *ngIf=\"!guestLink\"><small>({{'Generate link from a VISITOR mission'|translate}})</small>\n </p>\n </li>\n\n </ul>\n <div class=\"d-flex justify-content-center\" *ngIf=\"gettingData\">\n <div class=\"spinner-border\" role=\"status\">\n <span class=\"visually-hidden\">Loading...</span>\n </div>\n </div>\n <hr>\n <div class=\"d-flex\">\n <button class=\"btn btn-outline-primary rounded-pill me-3\" (click)=\"onEdit()\">{{'Edit' |\n translate}}</button>\n <div class=\"tooltip-wrapper\" ngbTooltip=\"{{!canArchive ? ('Contact SmarterPlan' | translate) : ('Archive location and related data' | translate)}}\">\n <button class=\"btn btn-outline-primary rounded-pill\" (click)=\"onArchive()\" [disabled]=\"!canArchive\">\n {{'Archive' | translate}}</button>\n </div>\n </div>\n\n\n </div>\n <div class=\"col-md-7\" *ngIf=\"isValidatingDpe\">\n <h6>{{'Most relevant results for' | translate}} : \n <b>diagnostics de performance énergétique (DPE) des bâtiments tertiaires</b></h6>\n <table class=\"table table-striped\">\n <thead>\n <tr>\n <th scope=\"col\">#</th>\n <th scope=\"col\">{{'Apply to location' | translate}}</th>\n <th scope=\"col\">{{'Address' | translate}}</th>\n <th scope=\"col\">{{'Activity sector' | translate}}</th>\n <th scope=\"col\">{{'Construction year' | translate}}</th>\n <th scope=\"col\">{{'Energy Class' | translate}}</th>\n <th scope=\"col\">{{'Greenhouse gas emission Class' | translate}}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let result of parsedMetadata; index as i\">\n <th scope=\"row\">{{ i + 1 }}</th>\n <td><input class=\"checkbox-apply\" type=\"checkbox\" [(ngModel)]=\"result.selected\"\n (change)=\"onSelectChange(result)\"></td>\n <td>{{result.geo_adresse}}</td>\n <td>{{result.secteur_activite}}</td>\n <td>{{ result.annee_construction }}</td>\n <td>{{ result.classe_consommation_energie }}</td>\n <td>{{ result.classe_estimation_ges }}</td>\n </tr>\n </tbody>\n </table>\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onSaveResult()\"\n [disabled]=\"!selectedDpeResult\">{{'Save selected' |\n translate}}</button>\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onErase()\">\n {{'No match (erase data)' | translate}}</button>\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onCancel()\">\n {{'Cancel' | translate}}</button>\n </div>\n </div>\n <lib-form-location *ngIf=\"isEditing\" [location]=\"space\" (onChange)=\"onFormChange($event)\"></lib-form-location>\n</div>\n","import { Component, ElementRef, OnInit, ViewChild } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { getDocument } from \"pdfjs-dist\";\nimport { PDFDocumentProxy } from \"ng2-pdf-viewer\";\nimport { Zone, MenuItem, Plan, Space, Navigation, PlanService, ZoneService, SpaceService, NavigationService, getMetaForImage, MatterportImportService } from '@smarterplan/ngx-smarterplan-core';\nimport panzoom from 'panzoom';\n\n@Component({\n selector: 'lib-calibration',\n templateUrl: './calibration.component.html',\n styleUrls: ['./calibration.component.scss']\n})\nexport class CalibrationComponent implements OnInit {\n\n /** Item to display for the navbar */\n menuItems: MenuItem[] = [];\n\n /** Canvas (Plan) */\n canvas;\n\n /** CanvasDiv (Div that contain the canvas + matterport iframe) */\n @ViewChild(\"canvasDiv\") canvasDiv: ElementRef;\n\n /** Size of the canvas & matterport iframe */\n canvasSize: { w: number; h: number };\n\n /** Zoom ratio of the canvas/plan */\n canvasZoom = 0;\n\n /** Opacity for matterport iframe */\n opacity: number = 50;\n\n /** Current rotation for matterport, [0-360], matterport rotation is bind to input range */\n rotation: number = 180;\n\n /** Previous rotation, use to calculate the deltaRotation to rotate, when user change rotation value using range input */\n prevRotation: number = 180;\n\n /** Current Camera Pose */\n cameraPose: any;\n\n /** True when the user is currently rotating with the input range, the matterport rotation events will be ignored */\n isRotatingRange: boolean = false;\n\n /** Rotating queue event to send to matterport */\n rotatingQueueEvent: number[] = [];\n\n /** True when Vertical symmetry is enabled */\n reflectV = false;\n\n /** True when Horizontal symmetry is enabled */\n reflectH = false;\n\n chosenPlan: Plan;\n\n spaceID: string;\n\n currentSpace: Space;\n\n currentZone: Zone;\n\n chosenPlanIsPdf = false;\n\n /** First Point in visit, used to determine the calibration */\n firstMarkVisit = { x: 0, y: 0 };\n\n /** Second Point in visit, used to determine the calibration */\n secondMarkVisit = { x: 0.5, y: 0.5 };\n\n /** Equivalent of 'firstMarkVisit' in canvas */\n firstMarkPlan: { x: number; y: number } = { x: 0, y: 0 };\n\n /** Equivalent of 'secondMarkVisit' in canvas */\n secondMarkPlan: { x: number; y: number } = { x: 0, y: 0 };\n\n /** Calibration result, (offsetX, offsetY, x, y) */\n calibrage: any = {};\n\n /** Is in preview mode (see scan result) */\n preview = false;\n\n /** Matterport is loading */\n loading = true;\n\n /* for pan and zoom of canvas */\n panzoom: any;\n\n currentNavigations: Navigation[];\n\n positions: { navID: string; planID: string; x: number; y: number }[] = [];\n\n floors: any[] = [];\n\n currentFloor;\n\n zoomCanBeChanged: boolean = false;\n\n constructor(\n private matterportImportService: MatterportImportService,\n private planService: PlanService,\n private route: ActivatedRoute,\n private router: Router,\n private zoneService: ZoneService,\n private spaceService: SpaceService,\n private navigationService: NavigationService,\n private translate: TranslateService,\n ) {}\n\n ngOnDestroy(): void {\n if (!this.loading) {\n this.matterportImportService.removeFrame();\n }\n }\n\n async ngOnInit(): Promise<void> {\n this.spaceID = this.route.snapshot.queryParams.spaceID;\n this.currentSpace = await this.spaceService.getSpace(this.spaceID);\n\n /** Menu nav bar */\n this.setupMenuItems();\n\n this.chosenPlan = this.planService.getChosenPlan();\n\n if (this.chosenPlan) {\n this.chosenPlanIsPdf = this.chosenPlan.annexe.includes(\"pdf\");\n this.launchViewer();\n setTimeout(() => {\n this.configureCanvas().then(() => {\n this.panzoom = panzoom(this.canvas, {\n bounds: true,\n boundsPadding: 0,\n maxZoom: 2.5,\n minZoom: 0.1,\n initialZoom: 1,\n zoomSpeed: 0.02,\n });\n });\n }, 500);\n } else {\n this.router.navigate([\n \"/dashboard/localisation\",\n this.spaceID,\n \"plans\",\n ]);\n }\n }\n\n /** **********************************************************************************************\n * MENU NAV BAR\n *********************************************************************************************** */\n setupMenuItems() {\n this.menuItems = [\n { label: \"Locations\", url: \"/localisation\" },\n {\n label: this.currentSpace.name,\n url: `/localisation/${this.spaceID}`,\n },\n {\n label: \"Plans\",\n url: `/localisation/${this.currentSpace.id}/plans`,\n },\n {\n label: \"Calibration\",\n url: `/localisation/${this.currentSpace.id}/plan-calibration?spaceID=${this.currentSpace.id}`,\n },\n ];\n }\n\n /** **********************************************************************************************\n * CANVAS\n *********************************************************************************************** */\n\n /** Display the plan */\n async configureCanvas() {\n /** Get canvas */\n if (!this.canvas) {\n const canvas = document.querySelector(\n \"#canvas\",\n ) as HTMLCanvasElement;\n this.canvas = canvas;\n }\n\n if (!this.chosenPlanIsPdf) {\n const image = await getMetaForImage(this.chosenPlan.filepath);\n /** Compute the new size for the canvas/matterport, base on the dimension of the plan, keeping the ratio */\n const size = this.getSizeForCanvas(image.width, image.height);\n\n /** Compute the plan zoom ratio (use for the calibration later) */\n this.canvasZoom = size.w / image.width;\n\n this.resizeView(size);\n\n /** Draw Plan on the canvas */\n this.drawImage(this.chosenPlan.filepath);\n } else {\n // TODO\n this.pdfToCanvas();\n }\n }\n\n /** Update size of the canvas/matterport */\n resizeView(size) {\n this.canvasDiv.nativeElement.style.width = `${size.w}px`;\n this.canvasDiv.nativeElement.style.height = `${size.h}px`;\n this.canvas.style.width = `${size.w}px`;\n this.canvas.style.height = `${size.h}px`;\n this.canvas.width = size.w;\n this.canvas.height = size.h;\n this.canvasSize = size;\n }\n\n /** Draw something on the canvas */\n drawImage(url: string, x = 0, y = 0, icone = false) {\n const image = new Image();\n const size = this.canvasSize;\n const context = this.canvas.getContext(\"2d\");\n\n /** Flip the context, for symmetry */\n // if (this.reflectV) {\n // context.translate(size.w, 0);\n // context.scale(-1, 1);\n // }\n // if (this.reflectH) {\n // context.translate(0, size.h);\n // context.scale(1, -1);\n // }\n\n let imageWidth = size.w;\n let imageHeight = size.h;\n image.addEventListener(\"load\", () => {\n if (icone) {\n imageWidth = image.width;\n imageHeight = image.height;\n }\n context.drawImage(\n image,\n 0,\n 0,\n image.width,\n image.height,\n x,\n y,\n imageWidth,\n imageHeight,\n );\n });\n image.src = url;\n }\n\n /** Get the size for the canvas, based on the plan size, keeping the ratio */\n getSizeForCanvas(w, h) {\n let canvasW = this.canvasDiv.nativeElement.offsetWidth;\n let canvasH = this.canvasDiv.nativeElement.offsetHeight;\n\n const imageRatio = w / h;\n const canvasRatio = canvasW / canvasH;\n\n if (imageRatio > canvasRatio) {\n canvasH = canvasW / imageRatio;\n } else {\n canvasW = canvasH * imageRatio;\n }\n return { w: canvasW, h: canvasH };\n }\n\n /** [TODO] Convert a PDF to a Canvas */\n async pdfToCanvas() {\n const pdfjs = await import(\"pdfjs-dist/build/pdf\");\n const pdfjsWorker = await import(\"pdfjs-dist/build/pdf.worker.entry\");\n\n pdfjs.GlobalWorkerOptions.workerSrc = pdfjsWorker;\n\n const pdf: PDFDocumentProxy = await getDocument(\n this.chosenPlan.filepath,\n ).promise;\n const page = await pdf.getPage(1);\n\n const viewPortParameters = { scale: 1 };\n const viewport = page.getViewport(viewPortParameters);\n\n this.canvas.height = viewport.height;\n this.canvas.width = viewport.width;\n\n const size = this.getSizeForCanvas(viewport.width, viewport.height);\n console.log(size);\n this.canvasSize = size;\n\n this.canvasZoom = size.w / viewport.width;\n\n const context = this.canvas.getContext(\n \"2d\",\n ) as CanvasRenderingContext2D;\n const renderContext = {\n canvasContext: context,\n viewport,\n };\n const renderTask = page.render(renderContext).promise;\n\n renderTask.then(() => console.log(\"Page rendered\"));\n\n // const res = canvas.toDataURL();\n // if (pdf != null) pdf.destroy();\n // return res;\n }\n\n /** User click to user Symmetry Vertical */\n onReflectV() {\n this.reflectV = !this.reflectV;\n this.configureCanvas();\n }\n\n /** User click to user Symmetry Horizontal */\n onReflectH() {\n this.reflectH = !this.reflectH;\n this.configureCanvas();\n }\n\n /** **********************************************************************************************\n * MATTERPORT\n *********************************************************************************************** */\n\n /** Launch matterport */\n async launchViewer() {\n await this.matterportImportService.initSdkForModel(\n this.chosenPlan.model3d,\n );\n\n const { sdk } = this.matterportImportService;\n this.floors = Object.values(this.matterportImportService.floors);\n // console.log(this.floors);\n setTimeout(async () => {\n /** Move Floor mode */\n await sdk.Mode.moveTo(sdk.Mode.Mode.FLOORPLAN);\n /** Display the correct floor for the plan */\n try {\n await this.matterportImportService.moveToFloor(\n this.chosenPlan.name,\n );\n } catch {\n console.log(\"couldnot move to floor\");\n }\n\n /** We can display the matterport view now */\n this.loading = false;\n }, 300);\n\n /** When the user try to change the view mode we set it back to floorpan */\n\n sdk.on(sdk.Mode.Event.CHANGE_END, (oldMode, newMode) => {\n if (newMode !== sdk.Mode.Mode.FLOORPLAN) {\n sdk.Mode.moveTo(sdk.Mode.Mode.FLOORPLAN, {\n transition: \"transition.instant\",\n });\n }\n });\n\n /** Update current camera pose and rotation */\n sdk.Camera.pose.subscribe((event) => {\n /** We update only if the user is not changing the rotation with the <input> range, to not override the <input> value */\n if (!this.isRotatingRange) {\n this.rotation = event.rotation.y + 180;\n this.prevRotation = this.rotation;\n this.cameraPose = event;\n }\n });\n }\n\n /** When the <input> range, for rotation, change */\n async onRotationChange() {\n const rotationDelta = this.rotation - this.prevRotation;\n this.prevRotation = this.rotation;\n\n /** Send the rotationDelta to th queue event in order to be send to matterport */\n this.rotatingQueueEvent.push(rotationDelta);\n\n /** Start to process the queue, if it's the first event */\n if (!this.isRotatingRange) {\n this.isRotatingRange = true;\n this.processRotatingQueueEvent();\n }\n }\n\n /** Process the rotating event queue, send event one by one to matterport */\n async processRotatingQueueEvent() {\n const { sdk } = this.matterportImportService;\n\n /** While the queue is not empty */\n while (this.rotatingQueueEvent.length > 0) {\n /** Rotate matterport by deltaRotation and remove event from queue */\n await sdk.Camera.rotate(this.rotatingQueueEvent.shift(), 0, {\n speed: 360,\n });\n }\n\n /** When the queue is empty, then the user is not rotating with the <input> range anymore */\n this.isRotatingRange = false;\n }\n\n /** **********************************************************************************************\n * USER ACTIONS\n *********************************************************************************************** */\n\n /** Preview calibration */\n async onPreview() {\n this.preview = true;\n /** Place sweeps */\n this.onPlaceSweeps();\n }\n\n async calibrate() {\n const [navigation] = this.currentNavigations;\n const position = JSON.parse(navigation.position);\n this.firstMarkPlan =\n await this.matterportImportService.sdk.Renderer.getScreenPosition({\n x: position.x,\n y: position.y,\n z: position.z,\n });\n this.secondMarkPlan =\n await this.matterportImportService.sdk.Renderer.getScreenPosition({\n x: position.x,\n y: 0,\n z: 0,\n });\n const deltaZVisit = 0 - position.z;\n let deltaXPlan = this.secondMarkPlan.x - this.firstMarkPlan.x;\n if (deltaXPlan === 0) {\n // console.log(\"we moved along Y axis on Plan\");\n const deltaYPlan = this.secondMarkPlan.y - this.firstMarkPlan.y;\n this.calibrage.nameYAxis = \"z\";\n this.calibrage.nameXAxis = \"x\";\n this.calibrage.offsetY = this.secondMarkPlan.y;\n this.calibrage.scaleY = deltaYPlan / deltaZVisit;\n } else {\n // console.log(\" we moved along X axis on Plan\");\n this.calibrage.nameYAxis = \"x\";\n this.calibrage.nameXAxis = \"z\";\n this.calibrage.offsetX = this.secondMarkPlan.x;\n this.calibrage.scaleX = deltaXPlan / deltaZVisit;\n }\n const thirdMarkPlan =\n await this.matterportImportService.sdk.Renderer.getScreenPosition({\n x: 0,\n y: 0,\n z: position.z,\n });\n const deltaXVisit = 0 - position.x;\n if (deltaXPlan === 0) {\n // console.log(\" we moved along X axis on Plan\");\n deltaXPlan = thirdMarkPlan.x - this.firstMarkPlan.x;\n this.calibrage.offsetX = thirdMarkPlan.x;\n this.calibrage.scaleX = deltaXPlan / deltaXVisit;\n } else {\n const deltaYPlan = thirdMarkPlan.y - this.firstMarkPlan.y;\n this.calibrage.offsetY = thirdMarkPlan.y;\n this.calibrage.scaleY = deltaYPlan / deltaXVisit;\n }\n\n /** Take considiration of pan and zoom of plan on canvas */\n const transformInfo = this.panzoom.getTransform();\n const { scale, x, y } = transformInfo;\n // console.log(transformInfo);\n this.calibrage.offsetXPlan = x;\n this.calibrage.offsetYPlan = y;\n this.calibrage.scalePlan = scale;\n console.log(this.calibrage);\n }\n\n /** Place sweeps */\n async onPlaceSweeps() {\n /** Display all scan */\n const zone = await this.zoneService.getZone(this.chosenPlan.zoneID);\n\n if (zone) {\n this.currentZone = zone;\n const navigations =\n await this.navigationService.getNavigationsForZone(\n this.currentZone,\n );\n this.currentNavigations = navigations;\n await this.calibrate();\n if (navigations.length > 0) {\n for (const navigation of navigations) { \n const testPosition = JSON.parse(navigation.position);\n const positionX =\n this.calibrage.nameXAxis === \"x\"\n ? testPosition.x\n : testPosition.z;\n const positionY =\n this.calibrage.nameYAxis === \"x\"\n ? testPosition.x\n : testPosition.z;\n const testX =\n positionX * this.calibrage.scaleX +\n this.calibrage.offsetX;\n const testY =\n positionY * this.calibrage.scaleY +\n this.calibrage.offsetY;\n // console.log(\"test position GREEN\", testX, testY);\n const transformedX =\n (testX - this.calibrage.offsetXPlan) /\n this.calibrage.scalePlan; // we are undoing the pan and zoom\n const transformedY =\n (testY - this.calibrage.offsetYPlan) /\n this.calibrage.scalePlan;\n this.positions.push({\n navID: navigation.id,\n planID: this.chosenPlan.id,\n x: transformedX,\n y: transformedY,\n });\n const iconSize = 30 * this.calibrage.scalePlan;\n const shift = iconSize / 2;\n this.drawImage(\n \"https://api.iconify.design/mdi:adjust.svg?color=green&height=30&width=30\",\n transformedX - shift,\n transformedY - shift,\n true,\n );\n }\n }\n }\n }\n\n /** Save calibration */\n async onSave() {\n if (this.currentZone) {\n /** Normalize with the zoom */\n // this.calibrage.offsetX /= this.canvasZoom;\n // this.calibrage.offsetY /= this.canvasZoom;\n // this.calibrage.x /= this.canvasZoom;\n // this.calibrage.y /= this.canvasZoom;\n this.calibrage.new = true;\n this.calibrage.imgWidth = this.canvasSize.w;\n this.calibrage.imgHeight = this.canvasSize.h;\n\n await this.planService.updatePlan({\n id: this.chosenPlan.id,\n calibration: JSON.stringify(this.calibrage),\n });\n await Promise.all(\n this.positions.map(async (position) => {\n const { navID } = position;\n delete position.navID;\n const nav = this.currentNavigations.find(\n (_nav) => _nav.id === navID,\n );\n let positionsDataToUpdate;\n if (nav.positionOnPlan) {\n const positionOnPlan = nav.positionOnPlan.map((entry) =>\n JSON.parse(entry),\n );\n const positionForCurrentPlan = positionOnPlan.find(\n (entry) => entry.planID === this.chosenPlan.id,\n );\n if (positionForCurrentPlan) {\n positionOnPlan.splice(\n positionOnPlan.indexOf(positionForCurrentPlan),\n 1,\n position,\n );\n } else {\n positionOnPlan.push(position);\n }\n positionsDataToUpdate = [...positionOnPlan];\n } else {\n positionsDataToUpdate = [position];\n }\n // console.log(positionsDataToUpdate);\n await this.navigationService.updateNavigation({\n id: navID,\n positionOnPlan: positionsDataToUpdate.map((entry) =>\n JSON.stringify(entry),\n ),\n });\n }),\n );\n }\n this.matterportImportService.removeFrame();\n\n this.router.navigate([\n \"/dashboard/localisation\",\n this.spaceID,\n \"plans\",\n ]);\n alert(this.translate.instant(\"calibration.success\"));\n }\n\n /** Reset the canvas */\n onReset() {\n this.reflectH = false;\n this.reflectV = false;\n this.preview = false;\n\n this.configureCanvas();\n }\n\n /** Cancel, leave */\n onCancel() {\n this.matterportImportService.removeFrame();\n this.router.navigate([\n \"/dashboard/localisation\",\n this.spaceID,\n \"plans\",\n ]);\n alert(this.translate.instant(\"calibration.canceled\"));\n }\n\n async onFloorClick(floor) {\n this.currentFloor = floor;\n await this.matterportImportService.moveToFloor(floor.id);\n }\n\n onActivateZoomChange() {\n this.zoomCanBeChanged = !this.zoomCanBeChanged;\n const iframe = document.querySelector(\"#viewer-frame\") as HTMLElement;\n if (iframe) {\n iframe.style.zIndex = this.zoomCanBeChanged ? \"1\" : \"0\";\n }\n }\n\n}\n","<div class=\"row mt-3\">\n <div class=\"col\">\n <div class=\"m-3\">\n <lib-tab-navigation [menuItems]='menuItems'></lib-tab-navigation>\n </div>\n </div>\n</div>\n\n<div id=\"rowCanvas\">\n <div #canvasDiv id=\"canvasDiv\">\n\n <div id=\"viewer-frame\" [style.pointer-events]=\"zoomCanBeChanged?'auto':'none'\">\n <!-- <div class=\"blur\"></div> -->\n </div>\n <canvas id=\"canvas\" [ngStyle]=\"{'opacity': (preview||loading) ? '1' : 'calc(' + opacity + '/ 100)'}\"></canvas>\n </div>\n\n <div class=\"calibration-tools container-fluid\" *ngIf=\"!(preview || loading)\">\n <h1>{{'Calibration tool' | translate}}</h1>\n <div class=\"tool\">\n <div class=\"row ms-0 me-0 legend\">\n <div [ngStyle]=\"{'opacity': 'calc(' + (-(opacity-100)+10) + '/ 100)'}\">{{'Less' | translate}}</div>\n <div class=\"legend-title\">{{'Plan Opacity' | translate }}</div>\n <div [ngStyle]=\"{'opacity': 'calc(' + (opacity+10) + '/ 100)'}\">{{'More' | translate}}</div>\n </div>\n <div class=\"row ms-0 me-0 \">\n <input [disabled]=\"false\" [ngModelOptions]=\"{standalone: true}\" [(ngModel)]=\"opacity\" type=\"range\"\n class=\"form-range\" min=\"0\" max=\"100\" value=\"50\" id=\"opacity\">\n </div>\n </div>\n <div class=\"tool\">\n <div class=\"row ms-0 me-0 \">\n <div class=\"label-legend\">{{'Change Visit Floor' | translate}}</div>\n <div ngbDropdown class=\"d-inline-block ms-3\">\n <button class=\"btn btn-label-file rounded-pill\" id=\"dropdownBasic1\" ngbDropdownToggle>\n {{currentFloor ? currentFloor.id : ('Floor' | translate) }}</button>\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\">\n <button ngbDropdownItem *ngFor=\"let floor of floors\" (click)=\"onFloorClick(floor)\">\n {{ floor.name.length > 0 ? floor.name : ('Floor ' + floor.id) }}\n </button>\n </div>\n </div>\n </div>\n\n </div>\n <div class=\"tool\">\n <div class=\"row ms-0 me-0 \">\n <div class=\"label-legend me-3\">{{'Pan/Zoom Visit' | translate}} {{zoomCanBeChanged ? \"ON\" : \"OFF\"}}\n </div>\n <input type=\"checkbox\" (change)=\"onActivateZoomChange()\" style=\"margin-top: 5px;\">\n <div class=\"card border-warning mb-3 mt-3\" *ngIf=\"zoomCanBeChanged\">\n <div class=\"card-body text-warning\">\n <h5 class=\"card-title\">{{\"calibration.wait-message\" | translate}}</h5>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"action\">\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill\" (click)=\"onPreview()\"\n [disabled]=\"zoomCanBeChanged\">{{'Preview' | translate}}</button>\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill\" (click)=\"onCancel()\">{{'Cancel' |\n translate}}</button>\n\n </div>\n\n </div>\n <div class=\"calibration-tools container-fluid\" *ngIf=\"preview\">\n <h1>{{'Validation' | translate}}</h1>\n <div class=\"action\">\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill\" (click)=\"onSave()\">{{'Validate' |\n translate}}</button>\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill\" (click)=\"onReset()\">{{'Reset' |\n translate}}</button>\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill\" (click)=\"onCancel()\">{{'Cancel' |\n translate}}</button>\n\n </div>\n </div>\n\n\n <div class=\"calibration-tools container-fluid\" *ngIf=\"loading\">\n <h3>{{\"Waiting for Matterport\" | translate}}...</h3>\n <div class=\"d-flex justify-content-center\">\n <div class=\"spinner-border\" role=\"status\">\n <span class=\"visually-hidden\">Loading...</span>\n </div>\n </div>\n\n </div>\n</div>","import { Component, OnInit } from '@angular/core';\nimport { FormGroup, FormBuilder, Validators } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Zone, Space, Plan, MenuItem, SpaceService, PlanService, getMetaForImage, getSignedFile, downloadFileAsObject, downloadBlob } from '@smarterplan/ngx-smarterplan-core';\nimport panzoom from 'panzoom';\n\n@Component({\n selector: 'lib-plans',\n templateUrl: './plans.component.html',\n styleUrls: ['./plans.component.scss']\n})\nexport class PlansComponent implements OnInit {\n\n spaceID: string;\n\n currentSpace: Space;\n\n plans: Plan[];\n\n // chosenPlan: Plan;\n\n indexDetails = -1;\n\n loading = false;\n\n uploadingPlan = false;\n\n planForm: FormGroup;\n\n isCurrentPlanForZone = false;\n\n canvas;\n\n scale: number;\n\n panzoom: any;\n\n currentZone: Zone;\n\n fileToUpload: File;\n\n chosenPlanIsPdf = false;\n\n zones: Zone[];\n\n menuItems: MenuItem[] = [];\n\n constructor(\n private route: ActivatedRoute,\n private router: Router,\n private spaceService: SpaceService,\n private planService: PlanService,\n private fb: FormBuilder,\n private translate: TranslateService,\n ) {}\n\n ngOnInit(): void {\n this.spaceID = this.route.snapshot.paramMap.get(\"id\");\n this.getPlans();\n if (\n this.planService.getPlanFileCache() &&\n this.planService.getChosenPlan()\n ) {\n this.addPlanFromCache(\n this.planService.getPlanFileCache(),\n this.planService.getChosenPlan(),\n );\n this.planService.setPlanFileCache(null);\n }\n this.planService.setChosenPlan(null);\n }\n\n setupMenuItems() {\n this.menuItems = [\n { label: \"Locations\", url: \"/localisation\" },\n {\n label: this.currentSpace.name,\n url: `/localisation/${this.currentSpace.id}`,\n },\n {\n label: \"Plans\",\n url: `/localisation/${this.currentSpace.id}/plans`,\n },\n ];\n }\n\n onGoBack() {}\n\n async onPlanClick(plan?: Plan) {\n if (plan) this.planService.setChosenPlan(plan);\n this.chosenPlanIsPdf = plan.annexe.includes(\"pdf\");\n if (!this.chosenPlanIsPdf) {\n setTimeout(() => {\n this.configureCanvas().then(() => {\n this.panzoom = panzoom(this.canvas, {\n bounds: true,\n boundsPadding: 0,\n maxZoom: 3.5,\n minZoom: 0.1,\n initialZoom: 0.5,\n });\n });\n }, 500);\n }\n }\n\n async configureCanvas() {\n this.uploadingPlan = true;\n const canvas = document.querySelector(\"#canvas\") as HTMLCanvasElement;\n const image = await getMetaForImage(this.getChoosenPlan().filepath);\n canvas.width = image.width;\n canvas.height = image.height;\n this.canvas = canvas;\n this.drawImage(this.getChoosenPlan().filepath);\n this.uploadingPlan = false;\n }\n\n drawImage(url: string, x = 0, y = 0) {\n const image = new Image();\n const context = this.canvas.getContext(\"2d\");\n const imageWidth = this.canvas.width;\n const imageHeight = this.canvas.height;\n image.addEventListener(\"load\", () => {\n context.drawImage(\n image,\n 0,\n 0,\n image.width,\n image.height,\n x,\n y,\n imageWidth,\n imageHeight,\n );\n });\n image.src = url;\n // image.crossOrigin = \"*\"; //need to download as png,\n // BUT: https://stackoverflow.com/questions/49503171/the-image-tag-with-crossorigin-anonymous-cant-load-success-from-s3\n }\n\n async getPlans() {\n this.loading = true;\n this.currentSpace = await this.spaceService.getSpace(this.spaceID);\n this.setupMenuItems();\n\n this.zones = this.currentSpace.zones.items;\n this.plans = await this.planService.getSingedPlansForSpace(this.spaceID);\n this.loading = false;\n if (this.plans.length === 1) {\n this.onPlanClick(this.plans[0]);\n }\n }\n\n getChoosenPlan() {\n return this.planService.getChosenPlan();\n }\n\n removeImage() {\n const context = this.canvas.getContext(\"2d\");\n context.clearRect(0, 0, 4096, 4096);\n }\n\n /**\n *\n */\n onCalibrateClick() {\n if (this.getChoosenPlan()) {\n this.router.navigate(\n [\"/dashboard/localisation\", this.spaceID, \"plan-calibration\"],\n { queryParams: { spaceID: this.spaceID } },\n );\n }\n }\n\n /**\n *\n */\n onEditClick() {\n if (this.getChoosenPlan()) {\n this.router.navigate(\n [\"/dashboard/localisation\", this.spaceID, \"plan-edit\"],\n { queryParams: { spaceID: this.spaceID } },\n );\n }\n }\n\n onUploadClick() {\n const inputFile = document.querySelector(\n \"#upload-file\",\n ) as HTMLInputElement;\n inputFile.click();\n }\n\n addPlan(target: EventTarget) {\n this.fileToUpload = (target as HTMLInputElement).files[0];\n this.planForm = this.fb.group({\n name: [this.fileToUpload.name, [Validators.required]],\n zoneID: [null, [Validators.required]],\n spaceID: this.spaceID,\n isModified: false,\n calibration:\"\",\n });\n }\n\n addPlanFromCache(file: File, plan: Plan) {\n this.fileToUpload = file;\n this.planForm = this.fb.group({\n name: [this.fileToUpload.name, [Validators.required]],\n zoneID: [plan ? plan.zoneID : null, [Validators.required]],\n spaceID: this.spaceID,\n isModified: !!plan,\n calibration:\n plan && plan.isModified && plan.calibration\n ? plan.calibration\n : \"\",\n });\n }\n\n async onSavePlan() {\n const formValue = this.planForm.value as Plan;\n formValue.isCurrentForZone = this.isCurrentPlanForZone;\n const createdPlan = await this.planService.createPlanWithAnnexe(\n formValue,\n this.fileToUpload,\n );\n const filepath = await getSignedFile(createdPlan.annexe);\n if (filepath) {\n createdPlan.filepath = filepath;\n }\n if (formValue.isCurrentForZone) {\n // set all other plans to not current\n this.planService.setAllPlansForZoneNotCurrent(\n createdPlan.zoneID,\n createdPlan.id,\n );\n }\n this.plans.push(createdPlan);\n this.planForm = null;\n this.fileToUpload = null;\n }\n\n onCancelUpload() {\n this.fileToUpload = null;\n this.planForm = null;\n }\n\n async onCurrentPlanClick() {\n await this.planService.updatePlan({\n id: this.getChoosenPlan().id,\n isCurrentForZone: this.getChoosenPlan().isCurrentForZone,\n });\n if (this.getChoosenPlan().isCurrentForZone) {\n this.planService.setAllPlansForZoneNotCurrent(\n this.getChoosenPlan().zoneID,\n this.getChoosenPlan().id,\n );\n }\n }\n\n async onDownloadClick() {\n const signedFile = await downloadFileAsObject(\n this.getChoosenPlan().annexe,\n );\n if (signedFile) {\n // @ts-ignore\n downloadBlob(signedFile.Body, this.getChoosenPlan().name);\n }\n }\n\n async onDownloadAsPng() {\n const canvas = document.querySelector(\"#canvas\") as HTMLCanvasElement;\n canvas.toBlob(function (blob) {\n downloadBlob(blob, \"plan-as-png.png\");\n });\n }\n\n async onRemoveClick() {\n const message = this.translate.instant(\"confirm.deletePlan\");\n if (window.confirm(message)) {\n await this.planService.deletePlan(this.getChoosenPlan());\n this.removeImage();\n this.planService.setChosenPlan(null);\n this.getPlans();\n }\n }\n}\n","<div class=\"container-fluid\" *ngIf=\"currentSpace\" class=\"dashboard-tab\">\n <div class=\"m-3\">\n <lib-tab-navigation [menuItems]='menuItems' (onGoBack)=\"onGoBack()\"></lib-tab-navigation>\n </div>\n <div class=\"d-flex justify-content-center\" *ngIf=\"loading\">\n <div class=\"spinner-border\" role=\"status\">\n <span class=\"visually-hidden\">Loading...</span>\n </div>\n </div>\n <div class=\"mt-3\" *ngIf=\"!plans && !loading\">\n <h4 style=\"font-weight: bold;\">{{'No imported plans' | translate }}</h4>\n <p>{{'For import from 3D visit: go Virtual Visits => Import Images' | translate}}</p>\n </div>\n <div class=\"row ms-1\">\n <div ngbDropdown class=\"d-inline-block me-3\">\n <button class=\"btn btn-label-file rounded-pill\" id=\"dropdownBasic1\" ngbDropdownToggle>{{getChoosenPlan() ?\n getChoosenPlan().name: ('Choose Plan' | translate) }}</button>\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\">\n <button ngbDropdownItem *ngFor=\"let plan of plans\" (click)=\"onPlanClick(plan)\">{{plan.name }}\n </button>\n </div>\n </div>\n <div class=\"d-inline-block\" ngbDropdown #myDrop=\"ngbDropdown\">\n <button class=\"btn btn-label-file rounded-pill\" id=\"dropdownManual\" ngbDropdownToggle>{{'Choose action' |\n translate}}</button>\n <div ngbDropdownMenu aria-labelledby=\"dropdownManual\">\n <button (click)=\"onCalibrateClick()\" ngbDropdownItem [disabled]=\"!getChoosenPlan()\">{{'Calibrate' |\n translate}}</button>\n <button (click)=\"onEditClick()\" ngbDropdownItem [disabled]=\"!getChoosenPlan()\">{{'Edit plan' |\n translate}}\n </button>\n <button (click)=\"onUploadClick()\" ngbDropdownItem>{{'Upload new plan' | translate}}</button>\n <button (click)=\"onDownloadClick()\" ngbDropdownItem [disabled]=\"!getChoosenPlan()\">{{'Download plan' |\n translate}}</button>\n <button (click)=\"onRemoveClick()\" ngbDropdownItem\n [disabled]=\"!getChoosenPlan() || getChoosenPlan().isImportedMatterport\">{{'Delete plan' |\n translate}}</button>\n <!-- <button (click)=\"onDownloadAsPng()\" ngbDropdownItem [disabled]=\"!getChoosenPlan()\">\n {{'Download plan as PNG' | translate}}</button> -->\n </div>\n </div>\n </div>\n <div class=\"row mt-3 ms-0\">\n <h4 *ngIf=\"fileToUpload\">{{'New plan' | translate }}</h4>\n <input class=\"hidden\" type=\"file\" id=\"upload-file\" name=\"upload-file\" accept=\"image/png, image/jpeg, .pdf, .svg\"\n ngf-max-size=\"6MB\" (change)=\"addPlan($event.target)\">\n </div>\n <div class=\"col-md-6 mt-3\" *ngIf=\"planForm\">\n <form (ngSubmit)=\"onSavePlan()\" [formGroup]=\"planForm\">\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3\">{{'Name' | translate}} </label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"name\">\n </div>\n </div>\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3\">{{'Zone' | translate}} </label>\n <div class=\"col-sm-9\">\n <select class=\"form-control\" formControlName=\"zoneID\">\n <option *ngFor=\"let zone of zones\" [ngValue]=\"zone.id\">\n {{ zone.name }}\n </option>\n </select>\n </div>\n </div>\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3\">{{'Set as current plan for zone' | translate}}</label>\n <div class=\"col-sm-3\">\n <input type=\"checkbox\" [(ngModel)]=\"isCurrentPlanForZone\" [ngModelOptions]=\"{standalone: true}\">\n </div>\n </div>\n <button [disabled]=\"planForm.invalid\" type='submit' class=\"btn btn-label-file rounded-pill\">{{'Save' |\n translate}}</button>\n <button class=\"btn btn-label-file rounded-pill ms-3\" type=\"button\" (click)=\"onCancelUpload()\">{{'Cancel' |\n translate}}</button>\n </form>\n </div>\n <ul class=\"col-md-6 list-group list-group-flush\" *ngIf=\"getChoosenPlan()\">\n <li class=\"list-group-item bg-transparent\">{{'Name' | translate }} : {{getChoosenPlan().name}} </li>\n <li class=\"list-group-item bg-transparent\"> {{'Plan is ' | translate }} :\n {{getChoosenPlan().calibration ? ('Calibrated' | translate) : ('Not calibrated' | translate)}}</li>\n <li class=\"list-group-item bg-transparent\">{{'Attributed to zone ' | translate }} :\n {{getChoosenPlan().zone ? getChoosenPlan().zone.name : 'None'}}</li>\n <li class=\"list-group-item bg-transparent\">{{'Is current plan for zone ' | translate }} :\n <input type=\"checkbox\" [(ngModel)]=\"getChoosenPlan().isCurrentForZone\" (change)=\"onCurrentPlanClick()\">\n </li>\n\n </ul>\n\n <div class=\"row mt-4\">\n <div class=\"col-md-10\">\n <embed *ngIf=\"getChoosenPlan() && chosenPlanIsPdf\" [src]=\"getChoosenPlan().filepath | safeUrl\"\n type=\"application/pdf\" frameBorder=\"0\" scrolling=\"auto\" height=\"650px;\" width=\"100%\" />\n <div *ngIf=\"!chosenPlanIsPdf\" class=\"row\" style=\"height: 500px; overflow: hidden;\" id=\"canvasDiv\">\n <canvas id=\"canvas\" width=\"4096px\" height=\"4096px\">\n <!-- <img *ngIf=\"chosenPlan\" id=\"plan-image\" [src]=\"chosenPlan.filepath\" style=\"width: 100%;\"> -->\n </canvas>\n\n </div>\n </div>\n </div>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'lib-chevron',\n templateUrl: './chevron.component.html',\n styleUrls: ['./chevron.component.scss']\n})\nexport class ChevronComponent implements OnInit {\n\n @Input() conditionShowing = false;\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","<div style=\"height: 30px; width: 30px;\">\n <span class=\"icon-container\" >\n <div [class]=\"conditionShowing ? 'icon-img-up' : 'icon-img-down'\"></div>\n </span>\n</div>\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { FormGroup, FormBuilder, Validators, AbstractControl } from '@angular/forms';\nimport { ActivatedRoute } from '@angular/router';\nimport { NgbModal, ModalDismissReasons } from '@ng-bootstrap/ng-bootstrap';\nimport { Node, Visit, MenuItem, MatterportImportService, CaptureService, NodeService, SpaceService, VisitService, CaptureViewer, Capture } from '@smarterplan/ngx-smarterplan-core';\n\n@Component({\n selector: 'lib-visits',\n templateUrl: './visits.component.html',\n styleUrls: ['./visits.component.scss']\n})\nexport class VisitsComponent implements OnInit {\n spaceId: string;\n\n visitIndexDetails = -1;\n\n visitForm: FormGroup;\n\n isEditing: boolean = false;\n\n visitSubmitted: boolean = false;\n\n captureDate: number;\n\n currentSpace = { zones: [] } as any;\n\n visits: Visit[] = [];\n\n closeResult: string;\n\n @ViewChild(\"content\", { static: false }) private content;\n\n modalReference: any;\n\n canCancelImport = false;\n\n imagesProcessed: number = 0;\n\n totalImages: number = 0;\n\n menuItems: MenuItem[] = [];\n\n constructor(\n private fb: FormBuilder,\n private matterportImportService: MatterportImportService,\n private captureService: CaptureService,\n private nodeService: NodeService,\n private spaceService: SpaceService,\n private route: ActivatedRoute,\n private modalService: NgbModal,\n private visitService: VisitService,\n ) {\n this.matterportImportService.importingImages.subscribe(() => {\n this.canCancelImport = true;\n });\n this.matterportImportService.sweepProcessedCount.subscribe((count) => {\n this.imagesProcessed = count + 1;\n });\n this.matterportImportService.totalSweepsCount.subscribe((count) => {\n this.totalImages = count;\n });\n }\n\n ngOnInit(): void {\n this.spaceId = this.route.snapshot.paramMap.get(\"id\");\n this.resetVisits();\n }\n\n /*\n Visit = {\n captureID: string,\n model3d: string,\n takenAt: number,\n spaceID: string,\n viewer: CaptureViewer,\n surface: number,\n node: Node,\n name?: string | null\n }\n */\n setupMenuItems() {\n this.menuItems = [\n { label: \"Locations\", url: \"/localisation\" },\n {\n label: this.currentSpace.name,\n url: `/localisation/${this.currentSpace.id}`,\n },\n {\n label: \"Virtual visits\",\n url: `/localisation/${this.currentSpace.id}/visits`,\n },\n ];\n }\n\n onGoBack() {\n this.onCancel();\n }\n\n async resetVisits() {\n this.visits = [];\n this.currentSpace = await this.spaceService.getSpace(this.spaceId);\n this.setupMenuItems();\n await this.visitService\n .getVisitsForSpaceForUser(this.spaceId)\n .then((visits) => {\n if (visits) {\n this.visits = visits;\n }\n });\n }\n\n initVisitForm(input: Visit = null) {\n if (input) {\n this.visitForm = this.fb.group({\n captureID: input.captureID,\n nodeID: input.node.id,\n name: [input.name, [Validators.required]],\n model3D: [input.model3d, [Validators.required]],\n viewer: input.viewer ? input.viewer : CaptureViewer.MATTERPORT,\n surface: input.surface ? input.surface : null,\n });\n this.captureDate = input.takenAt;\n } else {\n this.visitForm = this.fb.group({\n model3D: [null, [Validators.required]],\n viewer: CaptureViewer.MATTERPORT,\n surface: null,\n name: [null, [Validators.required]],\n });\n }\n }\n\n onToggleDetail(index) {\n this.visitIndexDetails = index === this.visitIndexDetails ? -1 : index;\n }\n\n onAddVisit() {\n this.initVisitForm();\n this.menuItems.push({ label: \"New\" });\n }\n\n onEdit(visit) {\n this.initVisitForm(visit);\n this.isEditing = true;\n this.menuItems.push({ label: visit.name });\n }\n\n async onSubmitVisit() {\n this.visitSubmitted = true;\n if (!this.visitForm.valid) {\n return;\n }\n const formValue = this.visitForm.value;\n const capture = {\n viewer: formValue.viewer,\n takenAt: this.captureDate,\n surface: formValue.surface,\n spaceID: this.currentSpace.id,\n } as Capture;\n\n if (this.isEditing) {\n capture.id = formValue.captureID;\n await this.captureService.updateCapture(capture);\n const node = {\n id: formValue.nodeID,\n model3D: formValue.model3D,\n metadata: formValue.name,\n } as Node;\n await this.nodeService.updateNode(node);\n } else {\n let createdNode;\n await this.captureService.createCapture(capture).then(async (res) => {\n if (res) {\n const node = {\n model3D: formValue.model3D,\n captureID: res.id,\n metadata: formValue.name,\n } as Node;\n createdNode = await this.nodeService.createNode(node);\n }\n });\n // let newMetadata = this.currentSpace.metadata + \",\" + formValue.model3D;\n // this.spaceService.update({ id: this.spaceId, metadata: newMetadata});\n await this.launchImport(\n formValue.model3D,\n formValue.surface,\n createdNode,\n false,\n );\n this.modalReference.close();\n }\n await this.resetVisits();\n this.onCancel();\n }\n\n get model3D(): AbstractControl {\n return this.visitForm.get(\"model3D\");\n }\n\n get name(): AbstractControl {\n return this.visitForm.get(\"name\");\n }\n\n onCancel() {\n this.visitSubmitted = false;\n this.visitForm = null;\n this.isEditing = false;\n this.canCancelImport = false;\n this.totalImages = 0;\n this.imagesProcessed = 0;\n this.setupMenuItems();\n }\n\n async onDelete(visit: Visit, index) {\n await this.visitService.deleteVisit(visit, this.spaceId);\n this.resetVisits();\n }\n\n private getDismissReason(reason: any): string {\n if (reason === ModalDismissReasons.ESC) {\n return \"by pressing ESC\";\n }\n if (reason === ModalDismissReasons.BACKDROP_CLICK) {\n return \"by clicking on a backdrop\";\n }\n return `with: ${reason}`;\n }\n\n async launchImport(\n model3D,\n surface,\n node,\n imagesOnly = false,\n ): Promise<void> {\n this.modalReference = this.modalService.open(this.content, {\n ariaLabelledBy: \"modal-basic-title\",\n });\n this.modalReference.result.then(\n (result) => {\n this.closeResult = `Closed with: ${result}`;\n console.log(this.closeResult);\n this.cancelImport();\n },\n (error) => {\n this.closeResult = `Dismissed ${this.getDismissReason(error)}`;\n console.log(this.closeResult);\n this.cancelImport();\n },\n );\n const sdkStarted = await this.matterportImportService.initSdkForModel(\n model3D,\n );\n await (imagesOnly\n ? this.matterportImportService.importData(\n this.spaceId,\n surface,\n true,\n node,\n )\n : this.matterportImportService.importData(\n this.spaceId,\n surface,\n false,\n node,\n ));\n return Promise.resolve();\n }\n\n private cancelImport() {\n this.matterportImportService.abandon();\n this.onCancel();\n this.resetVisits();\n }\n\n onImport(visit: Visit) {\n this.launchImport(visit.model3d, null, visit.node.id, true);\n }\n}\n","<div class=\"container-fluid\" class=\"dashboard-tab\">\r\n <div class=\"m-3\">\r\n <lib-tab-navigation [menuItems]='menuItems' (onGoBack)=\"onGoBack()\"></lib-tab-navigation>\r\n </div>\r\n\r\n <div class=\"row main-form-container\">\r\n <div class=\"col-md-6 form-container\">\r\n <ul class=\"list-group list-group-flush\" *ngIf=\"!visitForm\">\r\n <li class=\"list-group-item list-group-item-action\" *ngFor=\"let visit of visits; index as index\"\r\n (click)=\"onToggleDetail(index)\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n {{visit.name ? visit.name : visit.model3d }}\r\n <lib-chevron [conditionShowing]=\"index==visitIndexDetails\"></lib-chevron>\r\n </div>\r\n <div *ngIf=\"index==visitIndexDetails\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item bg-transparent\">{{'Name' | translate}} : {{ visit.name ?\r\n visit.name : \"Not provided\" | translate}}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'3D Model' | translate}} : {{ visit.model3d }}\r\n </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Surface' | translate}}, m<sup>2</sup>: {{\r\n visit.surface ?\r\n visit.surface : 'Not provided' | translate}}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Viewer' | translate}} : {{ visit.viewer }}\r\n </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Date of capture' | translate}} : {{\r\n visit.takenAt | timeDateString | async}}\r\n <li class=\"list-group-item bg-transparent\">{{'Images are imported' | translate}} : {{\r\n visit.imagesImported }}\r\n </li>\r\n </ul>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\"\r\n *ngIf=\"!visit.imagesImported\" (click)=\"onImport(visit)\">{{'Import images' |\r\n translate}}</button>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\"\r\n (click)=\"onEdit(visit)\">{{'Edit' | translate}}</button>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill\"\r\n (click)=\"onDelete(visit, index)\">{{'Delete' | translate}}</button>\r\n </div>\r\n </li>\r\n </ul>\r\n <div *ngIf=\"visitForm\">\r\n <form (ngSubmit)=\"onSubmitVisit()\" [formGroup]=\"visitForm\">\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-2 col-form-label\">{{'Name' | translate}}</label>\r\n <div class=\"col-sm-10\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"name\">\r\n </div>\r\n </div>\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-2 col-form-label\">{{'Reference 3D model' | translate}} *</label>\r\n <div class=\"col-sm-10\">\r\n <input type=\"text\" class=\"form-control\" [readonly]=\"isEditing\"\r\n [class.is-invalid]=\"model3D.invalid && visitSubmitted\" required\r\n formControlName=\"model3D\">\r\n <div class=\"invalid-feedback\">\r\n {{'Please provide the 3D model reference' | translate}}\r\n </div>\r\n <div *ngIf=\"isEditing\" class=\"text-danger\">\r\n {{'Cannot change 3D model reference. Please add new model.' | translate}}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-2 col-form-label\">{{'Viewer' | translate}}</label>\r\n <div class=\"col-sm-10\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"viewer\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-2 col-form-label\">{{'Surface' | translate}}</label>\r\n <div class=\"col-sm-10\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"surface\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-2 col-form-label\">{{'Capture Date' | translate}}</label>\r\n <div class=\"input-group\">\r\n <input class=\"form-control\" placeholder=\"dd/mm/yyyy\" [(ngModel)]=\"captureDate\" ngbDatepicker\r\n #d1=\"ngbDatepicker\" [ngModelOptions]=\"{standalone: true}\">\r\n <div class=\"input-group-append\">\r\n <button class=\"btn btn-outline-secondary calendar\" (click)=\"d1.toggle()\"\r\n type=\"button\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n <button type=\"submit\" class=\"btn btn-outline-primary rounded-pill me-2\">{{'Save' |\r\n translate}}</button>\r\n <button type=\"button\" (click)=\"onCancel()\" class=\"btn btn-outline-primary rounded-pill\">{{'Cancel' |\r\n translate}}</button>\r\n </form>\r\n </div>\r\n <div *ngIf=\"!visitForm\">\r\n <button class=\"btn btn-outline-primary rounded-pill\" (click)=\"onAddVisit()\">{{'Add 3D visit' |\r\n translate}}</button>\r\n </div>\r\n </div>\r\n <div id=\"viewer-frame\" style=\"width: 100%; aspect-ratio: 2/1;\"></div>\r\n </div>\r\n <ng-template #content let-modal>\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\" id=\"modal-basic-title\">{{'Importing Data' | translate}}</h4>\r\n <button type=\"button\" class=\"close\" aria-label=\"Close\" (click)=\"modal.dismiss('Cross click')\">\r\n <span aria-hidden=\"true\">×</span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\">\r\n {{'Please do not leave or refresh this page...' | translate}}\r\n <div *ngIf=\"totalImages != 0\">Imported {{imagesProcessed}} out of {{totalImages}} images.</div>\r\n <div class=\"d-flex justify-content-center\">\r\n <div class=\"spinner-border\" role=\"status\">\r\n <span class=\"visually-hidden\">{{'Loading' | translate}}...</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-outline-dark\" [disabled]=\"!canCancelImport\"\r\n (click)=\"modal.close('Cancel click')\">{{'Cancel import of images' | translate}}</button>\r\n </div>\r\n </ng-template>\r\n</div>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\n\n@Component({\n selector: 'lib-carousel',\n templateUrl: './carousel.component.html',\n styleUrls: ['./carousel.component.scss']\n})\nexport class CarouselComponent implements OnInit {\n\n @Input() images;\n\n @Output() currentScan = new EventEmitter<number>();\n\n dataEvent: string;\n\n constructor() { }\n\n ngOnInit(): void {\n this.currentScan.emit(0);\n }\n\n onSlide(event) {\n this.dataEvent = JSON.stringify(event);\n const imageIndex = Number.parseInt(\n event.current.replace(\"slideId_\", \"\"),\n 10,\n );\n this.currentScan.emit(imageIndex);\n }\n\n}\n","<ngb-carousel [interval]=\"5000\" *ngIf=\"images && images.length > 1\" (slide)=\"onSlide($event)\">\n <ng-template *ngFor=\"let image of images; let i = index\" ngbSlide [id]=\"'slideId_' + i\">\n <div class=\"picsum-img-wrapper\">\n <img [src]=\"image.path\" alt=\"Scan\" class=\"d-block w-100\">\n </div>\n <div class=\"carousel-caption\">\n <h3>{{image.title}}</h3>\n <p>{{image.description}}</p>\n </div>\n </ng-template>\n</ngb-carousel>\n\n<img *ngIf=\"images.length === 1\" [src]=\"images[0].path\" alt=\"Scan\" class=\"d-block w-100\">\n","import { Component, EventEmitter, OnInit, Output } from '@angular/core';\nimport { Rectangle } from '../../../../helper.service';\n\n@Component({\n selector: 'lib-selection',\n templateUrl: './selection.component.html',\n styleUrls: ['./selection.component.scss']\n})\nexport class SelectionComponent implements OnInit {\n constructor(){}\n\n /**Emit a new selection */\n @Output() onSelectionChanged = new EventEmitter<Rectangle>();\n\n /**Zone wich you can use a selection inside, must have the class \".selectZone\" */\n selectionableZone : HTMLElement;\n\n /**HtmlElement use to display the selected zone (blue) */\n selectionElement : HTMLElement;\n\n isMousedown : boolean = false;\n\n selection = {startX: 0, startY: 0, endX: 0, endY: 0};\n\n selectionRectangle : Rectangle = {top : 0, left: 0, width: 0, height: 0};\n\n ngOnInit(): void {\n this.selectionableZone = document.querySelector(\".selectZone\");\n\n this.selectionElement = document.querySelector(\"#selection\");\n\n this.selectionableZone.addEventListener(\"mousedown\",this.mousedown.bind(this));\n\n this.selectionableZone.addEventListener(\"mousemove\",this.mousemove.bind(this));\n\n this.selectionableZone.addEventListener(\"mouseup\",this.mouseup.bind(this));\n }\n \n /**\n * Update the current selection\n * Will update the selectionRectangle and Selection HTML element\n * @param shouldEmit if true an event will be emitted through onSelectionChanged (true by default)\n */\n updateSelectionElement(shouldEmit=true){\n this.selectionRectangle.width = Math.abs(this.selection.endX - this.selection.startX);\n this.selectionRectangle.height = Math.abs(this.selection.endY - this.selection.startY);\n this.selectionRectangle.top = Math.min(this.selection.endY, this.selection.startY);\n this.selectionRectangle.left = Math.min(this.selection.endX, this.selection.startX);\n\n this.selectionElement.style.top = `${this.selectionRectangle.top}px`;\n this.selectionElement.style.left = `${this.selectionRectangle.left}px`;\n this.selectionElement.style.width = `${this.selectionRectangle.width}px`;\n this.selectionElement.style.height = `${this.selectionRectangle.height}px`;\n\n if(shouldEmit){\n this.onSelectionChanged.emit(this.selectionRectangle);\n }\n }\n\n /**\n * Trigger when mouse is press down on selectionableZone\n * @param event \n */\n mousedown(event : MouseEvent){\n if(event.button !== 2){ /**Selection with the right click, so ignore all other event */\n return;\n }\n this.isMousedown = true;\n this.selection = {startY : event.clientY, startX : event.clientX, endX:event.clientX, endY:event.clientY};\n this.updateSelectionElement(); \n }\n\n /**\n * Trigger when mouse is release on selectionableZone\n * @param event \n */\n mouseup(event : MouseEvent){\n this.isMousedown = false;\n this.selection = {startX :0, startY : 0, endX:0, endY:0};\n this.updateSelectionElement(false); \n }\n\n /**\n * Trigger when mouse is moving on selectionableZone\n * @param event \n */\n mousemove(event : MouseEvent){\n if(this.isMousedown){\n this.selection.endX = event.clientX;\n this.selection.endY = event.clientY;\n this.updateSelectionElement();\n }\n }\n\n}\n","<ng-content></ng-content>\n\n<div id=\"selection\"></div>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { FormGroup, FormBuilder, Validators, AbstractControl } from '@angular/forms';\r\nimport { Zone, Plan, Layer, Navigation, ZoneService, LayerService, BaseUserService, NavigationService, getMetaForImage, \r\n PlanService, showScanPointsOnPlanInDiv, getCoefficientsForImage } from '@smarterplan/ngx-smarterplan-core';\r\nimport panzoom, { PanZoom } from 'panzoom';\r\nimport { Rectangle } from '../../../helper.service';\r\n\r\n@Component({\r\n selector: 'lib-add-zone',\r\n templateUrl: './add-zone.component.html',\r\n styleUrls: ['./add-zone.component.scss']\r\n})\r\nexport class AddZoneComponent implements OnInit {\r\n\r\n @Input() zoneEdit: Zone;\r\n\r\n @Input() spaceID: string;\r\n\r\n @Input() images360: { path: string, filename: string }[]; \r\n\r\n @Input() navigationIDs: string[];\r\n\r\n @Input() zones: Zone[];\r\n\r\n @Input() newZoneData: any;\r\n\r\n @Output() updatedZone = new EventEmitter<any>();\r\n\r\n @Input() chosenPlan: Plan;\r\n\r\n @Input() isMuseumVisit: boolean = false;\r\n\r\n @Input() defaultZone: Zone;\r\n\r\n parentZones: Zone[] = [];\r\n\r\n carouselIsVisible = false;\r\n\r\n zoneForm: FormGroup;\r\n\r\n isSubmitted = false;\r\n\r\n currentScanShowing: number;\r\n\r\n chosenScans: number[] = [];\r\n\r\n layers: Layer[];\r\n\r\n plans: Plan[];\r\n\r\n fromPlan: boolean = false;\r\n\r\n planCalibrated: boolean = false;\r\n\r\n chosenScansOnPlan: string[] = [];\r\n\r\n navIDsZoneEdit: string[] = [];\r\n\r\n currentOrgId: string;\r\n\r\n zoneInitialNavCount = 0;\r\n\r\n /** panZoom element for adding scans */\r\n panZoom: PanZoom;\r\n\r\n /** divPlan (use By panZoom) */\r\n divPlan: HTMLElement;\r\n\r\n /** all scan buttons Element */\r\n buttonElements: HTMLButtonElement[] = [];\r\n\r\n /** Scan buttons that are in the current selection */\r\n buttonsInSelection: HTMLButtonElement[] = [];\r\n\r\n zoneIsMatterportFloor = false;\r\n\r\n constructor(\r\n private fb: FormBuilder,\r\n private zoneService: ZoneService,\r\n private layerService: LayerService,\r\n private userService: BaseUserService,\r\n private navigationService: NavigationService,\r\n private planService: PlanService,\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.parentZones = this.zones.filter(\r\n (zone) => zone.layer && zone.layer.name === \"FLOOR\",\r\n );\r\n this.parentZones.unshift(this.defaultZone);\r\n this.initZoneForm();\r\n this.updateLayers();\r\n this.getPlans();\r\n }\r\n\r\n ngOnChanges() {\r\n this.initZoneForm();\r\n if (this.newZoneData) this.iniPlanForDraw();\r\n }\r\n\r\n async updateLayers() {\r\n const mission = this.userService.currentMission(this.spaceID);\r\n this.currentOrgId = mission.organisationID;\r\n this.layers = await this.layerService.getLayerForOrganisation(\r\n this.currentOrgId,\r\n );\r\n }\r\n\r\n async initZoneForm() {\r\n if (this.zoneEdit) {\r\n if (this.zoneEdit.metadata) {\r\n const metadata = JSON.parse(this.zoneEdit.metadata);\r\n this.zoneIsMatterportFloor = metadata.hasOwnProperty(\"matterportFloorSequence\");\r\n }\r\n const isVirtual = this.zoneService.zoneIsVirtual(this.zoneEdit);\r\n if (!isVirtual) {\r\n await this.loadNavigations();\r\n }\r\n this.isMuseumVisit = this.zoneEdit.isMuseumVisitZone\r\n ? this.zoneEdit.isMuseumVisitZone\r\n : false;\r\n this.zoneForm = this.fb.group({\r\n id: this.zoneEdit.id,\r\n name: [this.zoneEdit.name, [Validators.required]],\r\n layerID: this.zoneEdit.layer ? this.zoneEdit.layer.id : null,\r\n surface: this.zoneEdit.surface ? this.zoneEdit.surface : 0,\r\n parentID: this.zoneEdit.parentID,\r\n parent: this.zoneEdit.parent,\r\n newLayer: null,\r\n isMuseumVisitZone: this.isMuseumVisit,\r\n });\r\n } else {\r\n const mainZone = this.zones.find((z) => !z.parentID);\r\n this.zoneForm = this.fb.group({\r\n name: [\r\n this.newZoneData ? this.newZoneData.name : \"\",\r\n [Validators.required],\r\n ],\r\n layerID: null,\r\n surface: 0,\r\n parentID: mainZone.id,\r\n newLayer: null,\r\n isMuseumVisitZone: this.isMuseumVisit,\r\n });\r\n }\r\n }\r\n\r\n async getPlans() {\r\n this.plans = await this.planService.getSingedPlansForSpace(\r\n this.spaceID,\r\n );\r\n }\r\n\r\n async onSubmitZone() {\r\n this.isSubmitted = true;\r\n if (!this.zoneForm.valid) {\r\n return;\r\n }\r\n const formValue = this.zoneForm.value;\r\n\r\n if (formValue.newLayer) {\r\n await this.createLayer(formValue.newLayer).then((layer) => {\r\n formValue.layerID = layer.id;\r\n });\r\n }\r\n if (!formValue.layerID && !this.isMuseumVisit) {\r\n // by defaul assign to layer: \"Local\" with uuid: d6138c5d-6938-49fa-a5c3-9cebde97594b\r\n formValue.layerID = \"d6138c5d-6938-49fa-a5c3-9cebde97594b\";\r\n }\r\n\r\n const zoneInput = {\r\n name: formValue.name,\r\n surface: formValue.surface,\r\n spaceID: this.spaceID,\r\n layerID: formValue.layerID,\r\n parentID: formValue.parentID,\r\n isMuseumVisitZone: this.isMuseumVisit,\r\n sweepIDs: [],\r\n } as Zone;\r\n try {\r\n this.zoneForm = null;\r\n this.isSubmitted = false;\r\n if (this.zoneEdit) {\r\n const zoneUpdate = zoneInput;\r\n zoneUpdate.sweepIDs = this.zoneEdit.sweepIDs;\r\n zoneUpdate.id = formValue.id;\r\n await this.setSweepsAndNodeForZoneInput(zoneUpdate);\r\n console.log(zoneUpdate);\r\n await this.zoneService.updateZone(zoneUpdate);\r\n this.zoneEdit = null;\r\n this.updatedZone.emit(zoneUpdate.id);\r\n } else {\r\n await this.setSweepsAndNodeForZoneInput(zoneInput);\r\n // console.log(zoneInput);\r\n await this.zoneService\r\n .create(zoneInput)\r\n .then(zoneCreated => {\r\n this.updatedZone.emit(zoneCreated.id);\r\n });\r\n }\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n }\r\n\r\n onCancel() {\r\n this.isSubmitted = false;\r\n this.zoneForm = null;\r\n this.chosenScansOnPlan = [];\r\n this.chosenScans = [];\r\n this.updatedZone.emit(false);\r\n }\r\n\r\n get name(): AbstractControl {\r\n return this.zoneForm.get(\"name\");\r\n }\r\n\r\n toggleCarousel() {\r\n this.carouselIsVisible = true;\r\n this.chosenScansOnPlan = [];\r\n }\r\n\r\n togglePlan() {\r\n this.fromPlan = true;\r\n this.chosenScans = [];\r\n }\r\n\r\n onAddScan() {\r\n if (!this.chosenScans.includes(this.currentScanShowing)) {\r\n // console.log(\"adding scan\", this.currentScanShowing);\r\n this.chosenScans.push(this.currentScanShowing);\r\n } else {\r\n alert(\"Scan already added!\");\r\n }\r\n }\r\n\r\n onRemoveScanImage(scan: any) {\r\n const index = this.chosenScans.indexOf(scan);\r\n this.chosenScans.splice(index, 1);\r\n }\r\n\r\n onRemoveScanPlan(scan: any) {\r\n const index = this.chosenScansOnPlan.indexOf(scan);\r\n this.chosenScansOnPlan.splice(index, 1);\r\n }\r\n\r\n async setSweepsAndNodeForZoneInput(zoneInput: Zone) {\r\n if (\r\n this.chosenScans.length > 0 &&\r\n this.chosenScans.length !== this.zoneInitialNavCount &&\r\n !this.fromPlan\r\n ) {\r\n // if we chose scans from the carousel\r\n const sweepIDs: string[] = [];\r\n this.chosenScans.map(async (scan) => {\r\n const imageUuid = this.images360[scan].filename.split(\"_\")[0];\r\n const sweepID = this.navigationIDs.find((nav) => {\r\n return nav.includes(imageUuid);\r\n });\r\n if (sweepID) {\r\n sweepIDs.push(sweepID);\r\n }\r\n });\r\n zoneInput.sweepIDs = sweepIDs;\r\n } else {\r\n // we are not coming from gallery choice\r\n if (this.chosenScansOnPlan.length > 0) {\r\n zoneInput.sweepIDs = this.chosenScansOnPlan;\r\n }\r\n }\r\n \r\n if (zoneInput.sweepIDs && zoneInput.sweepIDs.length > 0) {\r\n const navForSweep =\r\n await this.navigationService.getNavigationsForMatterportIDForSpace(\r\n zoneInput.sweepIDs[0],\r\n this.spaceID,\r\n );\r\n zoneInput.nodeIDs = [navForSweep[0].nodeID];\r\n }\r\n }\r\n\r\n async createLayer(name: string): Promise<Layer> {\r\n return this.layerService.createLayerForOrganisation(\r\n name,\r\n this.currentOrgId,\r\n );\r\n }\r\n\r\n async loadNavigations(): Promise<any> {\r\n if (this.zoneEdit.sweepIDs.length > 0) {\r\n this.zoneInitialNavCount = this.zoneEdit.sweepIDs.length;\r\n const navList: number[] = [];\r\n const scansZoneEdit: string[] = [];\r\n await Promise.all(\r\n this.zoneEdit.sweepIDs.map(async (sweepID: string) => {\r\n scansZoneEdit.push(sweepID);\r\n const index = this.images360.findIndex((im) => {\r\n return im.filename.includes(sweepID.slice(0, 8));\r\n });\r\n if (index !== -1) {\r\n navList.push(index);\r\n }\r\n }),\r\n );\r\n this.chosenScans = navList;\r\n this.navIDsZoneEdit = scansZoneEdit;\r\n this.chosenScansOnPlan = scansZoneEdit;\r\n return Promise.resolve();\r\n }\r\n return Promise.resolve();\r\n }\r\n\r\n async onPlanClick(plan = this.chosenPlan) {\r\n this.chosenScansOnPlan = [];\r\n this.chosenPlan = plan;\r\n this.clearDivPlan();\r\n this.addScanPoints();\r\n }\r\n\r\n async addScanPoints() {\r\n this.divPlan = document.querySelector(\"#planDiv\") as HTMLElement;\r\n const zoneOfPlan = await this.zoneService.getZone(\r\n this.chosenPlan.zoneID,\r\n );\r\n const navigations = await this.navigationService.getNavigationsForZone(\r\n zoneOfPlan,\r\n );\r\n if (this.newZoneData) await this.setScanByDraw(navigations);\r\n this.buttonElements = await showScanPointsOnPlanInDiv(\r\n this.chosenPlan,\r\n this.divPlan,\r\n navigations,\r\n );\r\n for (const element of this.buttonElements) {\r\n if (\r\n this.navIDsZoneEdit.length > 0 &&\r\n this.navIDsZoneEdit.includes(element.id) // button id is the navigation(not graph!) ids\r\n ) {\r\n this.styleButton(element, true);\r\n this.chosenScansOnPlan.push(element.id);\r\n } else {\r\n this.styleButton(element);\r\n }\r\n element.addEventListener(\"click\", (event) =>\r\n this.onButtonScanClicked(event.target as HTMLElement),\r\n );\r\n }\r\n this.panZoom = panzoom(this.divPlan, {\r\n bounds: true,\r\n boundsPadding: 0,\r\n maxZoom: 3.5,\r\n beforeMouseDown(e: MouseEvent) {\r\n return (\r\n e.button === 2\r\n ); /** Ignore event for right click (use for selecting) */\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * When a button representing a scan is clicked\r\n * @param button\r\n */\r\n onButtonScanClicked(button: HTMLElement) {\r\n button.style.backgroundImage = this.buttonIsChosen(button)\r\n ? `url(\"https://api.iconify.design/mdi:close-circle-outline.svg?color=red&height=17&width=17\")`\r\n : `url(\"https://api.iconify.design/mdi:adjust.svg?color=green&height=17&width=17\")`;\r\n if (this.buttonIsChosen(button)) {\r\n if (!this.chosenScansOnPlan.includes(button.id)) {\r\n this.chosenScansOnPlan.push(button.id);\r\n }\r\n } else if (this.chosenScansOnPlan.includes(button.id)) {\r\n const index = this.chosenScansOnPlan.indexOf(button.id);\r\n this.chosenScansOnPlan.splice(index, 1);\r\n }\r\n }\r\n\r\n styleButton(button: HTMLButtonElement, isAdded = false) {\r\n button.style.backgroundImage = isAdded\r\n ? `url(\"https://api.iconify.design/mdi:adjust.svg?color=green&height=17&width=17\")`\r\n : `url(\"https://api.iconify.design/mdi:close-circle-outline.svg?color=red&height=17&width=17\")`;\r\n button.style.backgroundColor = \"transparent\";\r\n button.style.position = \"absolute\";\r\n button.style.border = \"none\";\r\n button.style.width = \"17px\";\r\n button.style.height = \"17px\";\r\n button.disabled = false;\r\n button.type = \"button\";\r\n }\r\n\r\n buttonIsChosen(button: HTMLElement) {\r\n return button.style.backgroundImage.includes(\"adjust\");\r\n }\r\n\r\n clearDivPlan() {\r\n if (this.divPlan) this.divPlan.innerHTML = \"\";\r\n }\r\n\r\n iniPlanForDraw() {\r\n this.togglePlan();\r\n setTimeout(() => {\r\n this.onPlanClick();\r\n }, 500);\r\n }\r\n\r\n setScanByDraw(navigations: any[]): Promise<void> {\r\n return new Promise(async (resolve) => {\r\n const rect = {\r\n width: this.newZoneData.width,\r\n height: this.newZoneData.height,\r\n };\r\n const img = await getMetaForImage(this.chosenPlan.filepath);\r\n const { coeffX, coeffY } = getCoefficientsForImage(img, rect);\r\n\r\n const draw = this.newZoneData.elements;\r\n\r\n draw.map(async (element:any) => {\r\n switch (element.nodeName) {\r\n case \"rect\":\r\n await this.setScanInRect(\r\n coeffX,\r\n coeffY,\r\n element,\r\n navigations,\r\n );\r\n break;\r\n\r\n case \"ellipse\":\r\n await this.setScanInCircle(\r\n coeffX,\r\n coeffY,\r\n element,\r\n navigations,\r\n );\r\n break;\r\n\r\n case \"path\":\r\n await this.setScanInPolygon(\r\n coeffX,\r\n coeffY,\r\n element,\r\n navigations,\r\n );\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n\r\n resolve();\r\n });\r\n }\r\n\r\n async setScanInRect(coeffX: number, coeffY: number, \r\n element: { angle: any; cx: any; cy: any; x: number; width: any; y: number; height: any; }, navigations: any[]) {\r\n const calibrage = JSON.parse(this.chosenPlan.calibration);\r\n navigations.map((navigation) => {\r\n const position = JSON.parse(navigation.position);\r\n let navX = (calibrage.offsetX + position.x * calibrage.x) / coeffX;\r\n let navY = (calibrage.offsetY + position.z * calibrage.y) / coeffY;\r\n if (element.angle) {\r\n const rotatePos = this.rotate(\r\n { x: navX, y: navY },\r\n { x: element.cx, y: element.cy },\r\n element.angle,\r\n );\r\n navX = rotatePos.x;\r\n navY = rotatePos.y;\r\n }\r\n /**\r\n * TODO calculer la rotation du rectangle\r\n */\r\n if (\r\n navX > element.x &&\r\n navX < element.x + element.width &&\r\n navY > element.y &&\r\n navY < element.y + element.height &&\r\n !this.navIDsZoneEdit.includes(navigation.id)\r\n ) {\r\n this.navIDsZoneEdit.push(navigation.id);\r\n }\r\n });\r\n } // EO\r\n\r\n async setScanInCircle(coeffX: number, coeffY: number, \r\n element: { angle: any; cx: number; cy: number; rx: number; ry: number; }, navigations: Navigation[]) {\r\n const calibrage = JSON.parse(this.chosenPlan.calibration);\r\n navigations.map(navigation => {\r\n const position = JSON.parse(navigation.position);\r\n let navX = (calibrage.offsetX + position.x * calibrage.x) / coeffX;\r\n let navY = (calibrage.offsetY + position.z * calibrage.y) / coeffY;\r\n if (element.angle) {\r\n const rotatePos = this.rotate(\r\n { x: navX, y: navY },\r\n { x: element.cx, y: element.cy },\r\n element.angle,\r\n );\r\n navX = rotatePos.x;\r\n navY = rotatePos.y;\r\n }\r\n\r\n const valueX =\r\n Math.pow(navX - element.cx, 2) / Math.pow(element.rx, 2);\r\n const valueY =\r\n Math.pow(navY - element.cy, 2) / Math.pow(element.ry, 2);\r\n const result = valueX + valueY;\r\n if (result <= 1 && !this.navIDsZoneEdit.includes(navigation.id)) {\r\n this.navIDsZoneEdit.push(navigation.id);\r\n }\r\n });\r\n } // EO\r\n\r\n async setScanInPolygon(coeffX: number, coeffY: number, element: { segList: any; }, navigations: any[]) {\r\n const calibrage = JSON.parse(this.chosenPlan.calibration);\r\n navigations.map(async (navigation: { position: string; id: string; }) => {\r\n const position = JSON.parse(navigation.position);\r\n const p = {\r\n x: (calibrage.offsetX + position.x * calibrage.x) / coeffX,\r\n y: (calibrage.offsetY + position.z * calibrage.y) / coeffY,\r\n };\r\n // if (element.angle) {\r\n // p = this.rotate(\r\n // p,\r\n // { x: element.cx, y: element.cy },\r\n // element.angle,\r\n // );\r\n // }\r\n if (\r\n (await this.isInPolygon(p, element.segList)) &&\r\n !this.navIDsZoneEdit.includes(navigation.id)\r\n ) {\r\n this.navIDsZoneEdit.push(navigation.id);\r\n }\r\n });\r\n }\r\n\r\n async isInPolygon(p: { x: any; y: any; }, polygon: string | any[]): Promise<boolean> {\r\n return new Promise((resolve) => {\r\n let isInside = false;\r\n let minX = polygon[0].x;\r\n let maxX = polygon[0].x;\r\n let minY = polygon[0].y;\r\n let maxY = polygon[0].y;\r\n for (let n = 1; n < polygon.length; n++) {\r\n const q = polygon[n];\r\n minX = Math.min(q.x, minX);\r\n maxX = Math.max(q.x, maxX);\r\n minY = Math.min(q.y, minY);\r\n maxY = Math.max(q.y, maxY);\r\n }\r\n\r\n if (p.x < minX || p.x > maxX || p.y < minY || p.y > maxY) {\r\n resolve(false);\r\n }\r\n\r\n for (\r\n let index = 0, index_ = polygon.length - 1;\r\n index < polygon.length;\r\n index_ = index++\r\n ) {\r\n if (\r\n polygon[index].y > p.y !== polygon[index_].y > p.y &&\r\n p.x <\r\n ((polygon[index_].x - polygon[index].x) *\r\n (p.y - polygon[index].y)) /\r\n (polygon[index_].y - polygon[index].y) +\r\n polygon[index].x\r\n ) {\r\n isInside = !isInside;\r\n }\r\n }\r\n resolve(isInside);\r\n });\r\n }\r\n\r\n rotate(point: { x: any; y: any; }, center: { x: any; y: any; }, angle: number) {\r\n let xM;\r\n let yM;\r\n let x;\r\n let y;\r\n angle *= Math.PI / 180;\r\n xM = point.x - center.x;\r\n yM = point.y - center.y;\r\n x = xM * Math.cos(angle) + yM * Math.sin(angle) + center.x;\r\n y = -xM * Math.sin(angle) + yM * Math.cos(angle) + center.y;\r\n return { x: Math.round(x), y: Math.round(y) };\r\n }\r\n\r\n /**\r\n * Check if an HtmlElement is inside a selection\r\n * @param button HTMLElement\r\n * @param selection\r\n * @returns true if the element is inside the selection, false otherwise\r\n */\r\n buttonIsInSelection(\r\n button: HTMLButtonElement,\r\n selection: Rectangle,\r\n ): boolean {\r\n const bounds = button.getBoundingClientRect();\r\n return (\r\n bounds.bottom > selection.top &&\r\n bounds.top < selection.top + selection.height &&\r\n bounds.right > selection.left &&\r\n bounds.left < selection.left + selection.width\r\n );\r\n }\r\n\r\n /**\r\n * Trigger each by the selectionComponent when selection change\r\n * Update the current selected scan buttons\r\n * @param selection new selection\r\n */\r\n onSelectionChanged(selection: Rectangle) {\r\n const unselectedButtons: HTMLButtonElement[] = [];\r\n const newSelectedButtons = [];\r\n\r\n /** For each button, decide whether will be add to selected list or unselected list */\r\n for (const button of this.buttonElements) {\r\n const isSelected = this.buttonIsInSelection(button, selection);\r\n if (this.buttonsInSelection.includes(button)) {\r\n /** If the button is already in the selected list, we check if it should be unselect */\r\n if (!isSelected) {\r\n unselectedButtons.push(button);\r\n }\r\n } else if (isSelected) {\r\n newSelectedButtons.push(button);\r\n }\r\n }\r\n\r\n /** Visually Update unselected list */\r\n for (const button of unselectedButtons) {\r\n this.setVisuallySelected(button, false);\r\n }\r\n\r\n /** Visually Update selected list */\r\n for (const button of newSelectedButtons) {\r\n this.setVisuallySelected(button, true);\r\n }\r\n\r\n /** Remove unselected list */\r\n this.buttonsInSelection = this.buttonsInSelection.filter((button) => {\r\n return !unselectedButtons.includes(button);\r\n });\r\n /** Add new selected buttons */\r\n this.buttonsInSelection = [\r\n ...this.buttonsInSelection,\r\n ...newSelectedButtons,\r\n ];\r\n }\r\n\r\n /**\r\n * Visually change the state of a scan button, a selected button is blue\r\n * @param button\r\n * @param selected if true the button will be blue, otherwise it will red or green\r\n */\r\n setVisuallySelected(button: HTMLElement, selected: boolean) {\r\n if (selected) {\r\n /** Color in blue */\r\n button.style.backgroundImage = button.style.backgroundImage\r\n .replace(\"red\", \"blue\")\r\n .replace(\"green\", \"blue\");\r\n } else {\r\n /** Get back in red or green */\r\n const color = this.buttonIsChosen(button) ? \"green\" : \"red\";\r\n button.style.backgroundImage = button.style.backgroundImage.replace(\r\n \"blue\",\r\n color,\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Trigger when the user click to add the selected scans\r\n */\r\n onSelectionAdd() {\r\n for (const button of this.buttonsInSelection) {\r\n if (!this.chosenScansOnPlan.includes(button.id)) {\r\n this.onButtonScanClicked(button);\r\n }\r\n }\r\n\r\n this.onSelectionChanged({ top: 0, left: 0, width: 0, height: 0 });\r\n }\r\n\r\n /**\r\n * Trigger when the user click to remove the selected scans\r\n */\r\n onSelectionRemove() {\r\n for (const button of this.buttonsInSelection) {\r\n if (this.chosenScansOnPlan.includes(button.id)) {\r\n this.onButtonScanClicked(button);\r\n }\r\n }\r\n this.onSelectionChanged({ top: 0, left: 0, width: 0, height: 0 });\r\n }\r\n\r\n /**\r\n * Trigger when the user click to select all scans\r\n */\r\n onSelectAll() {\r\n this.buttonsInSelection = [...this.buttonElements];\r\n for (const button of this.buttonsInSelection) {\r\n this.setVisuallySelected(button, true);\r\n }\r\n }\r\n\r\n /**\r\n * Trigger when the user change the size of the scan points\r\n * @param event\r\n */\r\n onChangeScanSize(event: any) {\r\n const factor = event.target.value;\r\n\r\n for (const button of this.buttonElements) {\r\n button.style.transform = `scale(${factor})`;\r\n }\r\n }\r\n\r\n /**\r\n * Adds all sweeps of the space\r\n */\r\n onAddAll() {\r\n const defaultZone = this.zones.find(\r\n (zone) => zone.layer && zone.layer.name === \"BUILDING\" && zone.sweepIDs,\r\n );\r\n if (defaultZone) {\r\n this.chosenScansOnPlan = defaultZone.sweepIDs;\r\n this.zoneForm.get(\"parentID\").setValue(defaultZone.id);\r\n }\r\n \r\n }\r\n}\r\n\r\n","<div class=\"row\" *ngIf=\"zoneForm\">\r\n <div class=\"col-7\">\r\n <form (ngSubmit)=\"onSubmitZone()\" [formGroup]=\"zoneForm\">\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-2 col-form-label\">{{'Name' | translate}} *</label>\r\n <div class=\"col-sm-10\">\r\n <input type=\"text\" class=\"form-control\" [class.is-invalid]=\"name.invalid && isSubmitted\" required\r\n formControlName=\"name\">\r\n <div class=\"invalid-feedback\">\r\n {{'A name is required' | translate}}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\" *ngIf=\"!isMuseumVisit && !zoneIsMatterportFloor\">\r\n <label class=\"col-sm-2 col-form-label\">{{'Type of zone' | translate}}</label>\r\n <div class=\"col-sm-10\">\r\n <select class=\"form-control\" formControlName=\"layerID\">\r\n <option value=\"null\" selected disabled hidden> {{ zoneEdit && zoneEdit.layer ?\r\n zoneEdit.layer.name : 'Choose type'}}</option>\r\n <option *ngFor=\"let layer of layers\" [value]=\"layer.id\">\r\n {{ layer.name }}\r\n </option>\r\n </select>\r\n <p class=\"mt-1 new-type-text\">{{'or add new type of zone' | translate }}</p>\r\n <input type=\"text\" class=\"form-control new-type-input\" formControlName=\"newLayer\">\r\n </div>\r\n </div>\r\n <!--If Editing Zone possibility to assign it to museum itinerary-->\r\n <div class=\"mb-3 row\" *ngIf=\"zoneEdit && !zoneIsMatterportFloor\">\r\n <label class=\"col-sm-2 col-form-label\">{{ 'Museum Itinerary' | translate }}</label>\r\n <div class=\"col-sm-10\">\r\n <input class=\"checkbox-apply mt-3\" type=\"checkbox\" [(ngModel)]=\"isMuseumVisit\"\r\n [ngModelOptions]=\"{standalone: true}\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-2 col-form-label\">{{'Surface' | translate}}</label>\r\n <div class=\"col-sm-10\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"surface\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\" *ngIf=\"!zoneIsMatterportFloor\">\r\n <label class=\"col-sm-2 col-form-label\">{{'Parent zone' | translate}}</label>\r\n <div class=\"col-sm-10\">\r\n <select class=\"form-control\" formControlName=\"parentID\">\r\n <option *ngFor=\"let zone of parentZones\" [ngValue]=\"zone.id\">\r\n {{ zone.name }}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\" style=\"max-height: 200px; overflow: auto;\" *ngIf=\"!zoneIsMatterportFloor\">\r\n <label class=\"col-sm-2 col-form-label\">{{'Scan Points' | translate}}</label>\r\n <!-- <p class=\"col-sm-2\" *ngIf=\"zoneEdit\">{{ zoneEdit.sweepIDs.length }} scans</p> -->\r\n <p class=\"col\" *ngIf=\"chosenScansOnPlan.length === 0 && chosenScans.length === 0\">\r\n {{'No scan points chosen' | translate}}</p>\r\n <div class=\"col-sm-5\" *ngIf=\"chosenScansOnPlan && chosenScansOnPlan.length > 0\">\r\n <p>{{ chosenScansOnPlan.length }} {{'scan points chosen' | translate}}</p>\r\n <div *ngFor=\"let scan of chosenScansOnPlan\">\r\n <div class=\"row\">\r\n <p class=\"me-2\">{{ scan | slice:0:8 }}</p>\r\n <div (click)=\"onRemoveScanPlan(scan)\" [style.cursor]=\"'pointer'\">\r\n <span class=\"iconify\" data-icon=\"mdi:trash-can-outline\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-sm-5\" *ngIf=\"carouselIsVisible && chosenScans && chosenScans.length > 0\">\r\n <p>{{ chosenScans.length }} {{'scan points chosen' | translate}}</p>\r\n <div *ngFor=\"let scan of chosenScans\">\r\n <div class=\"row\">\r\n <p class=\"me-2\">{{ images360[scan].filename }}</p>\r\n <div (click)=\"onRemoveScanImage(scan)\" [style.cursor]=\"'pointer'\">\r\n <span class=\"iconify\" data-icon=\"mdi:trash-can-outline\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\" *ngIf=\"!zoneIsMatterportFloor\">\r\n <div class=\"col\">\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\" [disabled]=\"!plans\"\r\n (click)=\"togglePlan()\">{{'Choose scan points on plan' |\r\n translate}}</button>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"toggleCarousel()\"\r\n [disabled]=\"fromPlan || !images360 ||images360.length === 0\">\r\n {{'Choose scan points from gallery' | translate}}</button>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onAddAll()\"\r\n [disabled]=\"fromPlan || !images360 ||images360.length === 0\">\r\n {{'Add all scans of this space' | translate}}</button>\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'No visible scan points' | translate}}</label>\r\n <div class=\"col-sm-3\">\r\n <input class=\"checkbox-apply mt-3\" type=\"checkbox\" [(ngModel)]=\"noScanPoints\"\r\n [ngModelOptions]=\"{standalone: true}\">\r\n </div>\r\n </div> -->\r\n\r\n <div *ngIf=\"carouselIsVisible\" class=\"mb-2\">\r\n <lib-carousel *ngIf=\"images360 && images360.length > 0\" [images]=\"images360\"\r\n (currentScan)=\"currentScanShowing=$event\"></lib-carousel>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2 mt-3\"\r\n (click)=\"onAddScan()\">{{'Add to zone' | translate}}</button>\r\n </div>\r\n <div ngbDropdown class=\"row d-inline-block me-3\" *ngIf=\"fromPlan\">\r\n <div class=\"col\">\r\n <button type=\"button\" class=\"btn btn-label-file rounded-pill\" id=\"dropdownBasic1\"\r\n ngbDropdownToggle>{{chosenPlan ?\r\n chosenPlan.name : ('Choose Plan' | translate) }}</button>\r\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\">\r\n <button type=\"button\" ngbDropdownItem *ngFor=\"let plan of plans\" (click)=\"onPlanClick(plan)\"\r\n [disabled]=\"!plan.calibration\">{{ plan.name }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mt-1\" *ngIf=\"fromPlan\">\r\n <lib-selection class=\"col-md-8\" (onSelectionChanged)=\"onSelectionChanged($event)\">\r\n <div class=\"selectZone\" oncontextmenu=\"return false;\">\r\n <div class=\"row\">\r\n <div style=\"overflow: hidden;width:100%;\">\r\n <div style=\"height: 400px; width: 100%;\" id=\"planDiv\">\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </lib-selection>\r\n\r\n <div class=\"col-md-4 scanTool\" *ngIf=\"buttonElements.length > 0\">\r\n <div class=\"row mb-5 d-inline-block\">\r\n <h2>Selection tool</h2>\r\n <div class=\"protip\">Hold right click and move your cursor to select multiple scans.</div>\r\n </div>\r\n\r\n <div class=\"row mb-4\">\r\n <div class=\"col-3\" style=\"padding:0px\">\r\n <label class=\"tool-label\" for=\"scanSize\">Scan size</label>\r\n </div>\r\n <div class=\"col-9\">\r\n <input type=\"range\" class=\"form-range\" min=\"0.001\" max=\"5\" step=\"0.01\" value=\"1\"\r\n id=\"scanSize\" (input)=\"onChangeScanSize($event)\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mb-4\">\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"onSelectAll()\">Select all scans</button>\r\n </div>\r\n\r\n <div *ngIf=\"buttonsInSelection.length > 0\" class=\"row editSelected\">\r\n <span class=\"tool-label\">Edit selected scans : </span>\r\n <button type=\"button\" class=\"btn btn-primary ms-3 me-2\" (click)=\"onSelectionAdd()\">Add</button>\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"onSelectionRemove()\">Remove</button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mt-3\">\r\n <button type=\"submit\" class=\"btn btn-outline-primary rounded-pill me-2\">{{'Save' | translate}}</button>\r\n <button type=\"button\" (click)=\"onCancel()\" class=\"btn btn-outline-primary rounded-pill me-2\">\r\n {{'Cancel' | translate}}</button>\r\n </div>\r\n </form>\r\n </div>\r\n</div>","import { Component, EventEmitter, OnInit, Output } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { Zone, Space, Plan, MenuItem, ZoneService, SpaceService, VisitService, \r\n NavigationService, BaseUserService, PlanService, wait, Navigation, showScanPointsOnPlanInDiv } from '@smarterplan/ngx-smarterplan-core';\r\nimport panzoom from \"panzoom\";\r\n@Component({\r\n selector: 'lib-zones',\r\n templateUrl: './zones.component.html',\r\n styleUrls: ['./zones.component.scss']\r\n})\r\nexport class ZonesComponent implements OnInit {\r\n\r\n lotIndexDetails = -1;\r\n\r\n currentSpace: Space;\r\n\r\n @Output() updatedZone = new EventEmitter<boolean>();\r\n\r\n plans: Plan[];\r\n\r\n zoneForEdit: Zone;\r\n\r\n isEditingZone = false;\r\n\r\n captureDate: number;\r\n\r\n spaceID: string;\r\n\r\n navigations: string[];\r\n\r\n images360: any[];\r\n\r\n carouselIsVisible = false;\r\n\r\n planIsVisible = false;\r\n\r\n currentPlan: Plan;\r\n\r\n currentZone: Zone;\r\n\r\n loadingPlan = false;\r\n\r\n menuItems: MenuItem[] = [];\r\n\r\n isMuseumVisit = false;\r\n\r\n isGuide = false;\r\n\r\n isAdmin = false;\r\n\r\n allZones: Zone[];\r\n\r\n floorZones: Zone[] = [];\r\n\r\n zonesMap: Map<string, Zone[]> = new Map();\r\n\r\n floorDetails: number = -1;\r\n\r\n defaultZone: Zone;\r\n\r\n defaultShowing = false;\r\n\r\n constructor(\r\n private route: ActivatedRoute,\r\n private zoneService: ZoneService,\r\n private spaceService: SpaceService,\r\n private visitService: VisitService,\r\n private navigationService: NavigationService,\r\n private userService: BaseUserService,\r\n private planService: PlanService,\r\n private translate: TranslateService,\r\n ) {}\r\n\r\n async ngOnInit() {\r\n this.spaceID = this.route.snapshot.paramMap.get(\"id\");\r\n this.setUserPermissions();\r\n this.resetZones();\r\n }\r\n\r\n setUserPermissions() {\r\n this.isGuide = this.userService.isGuide();\r\n this.isAdmin = this.userService.isAdmin(this.spaceID);\r\n }\r\n\r\n setupMenuItems() {\r\n this.menuItems = [\r\n { label: \"Locations\", url: \"/localisation\" },\r\n {\r\n label: this.currentSpace.name,\r\n url: `/localisation/${this.spaceID}`,\r\n },\r\n {\r\n label: \"Zones\",\r\n url: `/localisation/${this.currentSpace.id}/zones`,\r\n },\r\n ];\r\n }\r\n\r\n onGoBack() {\r\n this.editCompleted(null);\r\n }\r\n\r\n ngOnChanges() {\r\n this.resetZones();\r\n }\r\n\r\n async resetZones() {\r\n this.isMuseumVisit = false;\r\n this.currentSpace = await this.spaceService.getSpace(this.spaceID);\r\n this.setupMenuItems();\r\n\r\n this.allZones = await this.zoneService.getZonesBySpace(this.spaceID);\r\n this.defaultZone = this.allZones.find(\r\n (zone) => zone.layer && zone.layer.name === \"BUILDING\" && zone.sweepIDs,\r\n );\r\n \r\n this.floorZones = this.allZones.filter(\r\n (zone) => zone.layer && zone.layer.name === \"FLOOR\",\r\n );\r\n // we add only children zones that are not Floors\r\n this.zonesMap.set(this.defaultZone.id, this.allZones.filter((zone) => zone.parentID === this.defaultZone.id && !this.floorZones.includes(zone)))\r\n for (const floor of this.floorZones) {\r\n this.zonesMap.set(\r\n floor.id,\r\n this.allZones.filter((zone) => zone.parentID === floor.id),\r\n );\r\n }\r\n // this.zones = sortAlphabeticallyOnName(this.zones);\r\n this.resetNavigations();\r\n this.images360 = await this.visitService.loadImagesForSpace(\r\n this.currentSpace,\r\n );\r\n this.plans = await this.planService.getPlansWithZonesForSpace(\r\n this.spaceID,\r\n );\r\n this.plans = this.plans.filter((plan) => plan.isCurrentForZone);\r\n this.onPlansLoaded();\r\n }\r\n\r\n resetNavigations() {\r\n this.navigations = [];\r\n const zonesWithSweeps = this.allZones.filter((zone) => zone.sweepIDs);\r\n this.navigations = [\r\n ...new Set(zonesWithSweeps.flatMap((zone) => zone.sweepIDs)),\r\n ];\r\n }\r\n\r\n async onPlansLoaded() {\r\n if (this.planIsVisible && this.currentZone) {\r\n this.preparePlan();\r\n }\r\n }\r\n\r\n /**\r\n * onToggleDetail folds/unfolds details for a zone\r\n * @param i index of the lot to be toggled\r\n */\r\n async onToggleDetail(index: number, zone: Zone) {\r\n this.lotIndexDetails = index === this.lotIndexDetails ? -1 : index;\r\n if (this.lotIndexDetails === -1) {\r\n return;\r\n }\r\n this.currentZone = zone;\r\n this.planIsVisible = true;\r\n if (!this.plans) {\r\n return; // wait until the plans are set\r\n }\r\n if (this.loadingPlan) {\r\n // another plan is already loading\r\n await wait(1000);\r\n }\r\n this.preparePlan();\r\n }\r\n\r\n onToggleDetailFloor(index: number, floor: Zone) {\r\n this.defaultShowing = false;\r\n this.floorDetails = index === this.floorDetails ? -1 : index;\r\n if (this.floorDetails === -1) {\r\n return;\r\n }\r\n this.currentZone = floor;\r\n this.planIsVisible = true;\r\n if (!this.plans) {\r\n console.log(\"plans not ready\");\r\n return; // wait until the plans are set\r\n }\r\n this.preparePlan();\r\n }\r\n\r\n onToggleDefaultZone() {\r\n this.defaultShowing = !this.defaultShowing;\r\n this.currentZone = this.defaultShowing ? this.defaultZone : null;\r\n }\r\n\r\n async preparePlan() {\r\n this.loadingPlan = true;\r\n this.currentPlan = null;\r\n if (this.currentZone.virtual) {\r\n this.currentPlan = null;\r\n this.loadingPlan = false;\r\n return;\r\n }\r\n this.currentPlan = await this.planService.getCalibratedPlanForZone(\r\n this.currentZone,\r\n );\r\n if (this.currentPlan) {\r\n const scans = await this.navigationService.getNavigationsForZone(\r\n this.currentZone,\r\n );\r\n await this.showScanPointsOnPlan(scans);\r\n }\r\n this.loadingPlan = false;\r\n }\r\n\r\n toggleCarousel() {\r\n this.carouselIsVisible = true;\r\n }\r\n\r\n onEdit(zone: Zone) {\r\n this.zoneForEdit = zone;\r\n this.isEditingZone = true;\r\n this.menuItems.push({\r\n label: `${zone.name}`,\r\n });\r\n }\r\n\r\n onAddLot() {\r\n this.isMuseumVisit = false;\r\n this.isEditingZone = true;\r\n this.menuItems.push({\r\n label: \"New\",\r\n });\r\n }\r\n\r\n onAddMuseumZone() {\r\n this.isMuseumVisit = true;\r\n this.isEditingZone = true;\r\n this.menuItems.push({\r\n label: \"New Museum Itinerary\",\r\n });\r\n }\r\n\r\n async onDelete(zone: Zone, floorID: string) {\r\n const message = this.translate.instant(\"confirm.deleteZone\");\r\n // eslint-disable-next-line no-alert\r\n if (window.confirm(message)) {\r\n await this.zoneService.deleteZone(zone.id);\r\n this.allZones.splice(this.allZones.indexOf(zone), 1);\r\n const floorZones = this.zonesMap.get(floorID);\r\n floorZones.splice(floorZones.indexOf(zone), 1);\r\n this.zonesMap.set(floorID, floorZones);\r\n }\r\n }\r\n\r\n editCompleted(event: any) {\r\n this.lotIndexDetails = -1;\r\n if (event) {\r\n this.resetZones();\r\n }\r\n this.isEditingZone = false;\r\n this.zoneForEdit = null;\r\n this.planIsVisible = false;\r\n this.carouselIsVisible = false;\r\n this.setupMenuItems();\r\n }\r\n\r\n async showScanPointsOnPlan(navigations: Navigation[]) {\r\n const divPlan = document.querySelector(\"#planDiv\") as HTMLElement;\r\n await showScanPointsOnPlanInDiv(this.currentPlan, divPlan, navigations);\r\n this.loadingPlan = false;\r\n panzoom(divPlan, {\r\n bounds: true,\r\n boundsPadding: 0,\r\n maxZoom: 3.5,\r\n });\r\n }\r\n\r\n}\r\n","<div class=\"container-fluid\" *ngIf=\"currentSpace\">\r\n <div class=\"m-3\">\r\n <lib-tab-navigation [menuItems]='menuItems' (onGoBack)=\"onGoBack()\"></lib-tab-navigation>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6\">\r\n <ul class=\"list-group list-group-flush\" *ngIf=\"!isEditingZone\">\r\n <li class=\"list-group-item default-zone-line-item\">\r\n <div class=\"d-flex justify-content-between align-items-center zone-name\" *ngIf=\"defaultZone\">\r\n {{defaultZone.name}}\r\n <div class=\"default-zone-label\">{{ \"whole space\" | translate }}</div>\r\n <lib-chevron [conditionShowing]=\"defaultShowing\" (click)=\"onToggleDefaultZone()\"></lib-chevron>\r\n </div>\r\n <div *ngIf=\"defaultShowing\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item bg-transparent\">{{'Type of zone' | translate}}: {{currentZone.layer ?\r\n currentZone.layer.name :\r\n \"No type\" | translate}} </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"currentZone.surface\">{{'Surface' | translate}}, m<sup>2</sup>:\r\n {{currentZone.surface }}\r\n </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!currentZone.virtual\">{{'Scan Points' | translate}}:\r\n {{currentZone.sweepIDs ? currentZone.sweepIDs.length : \"No scan points\" | translate}} </li>\r\n </ul>\r\n <div *ngFor=\"let pair of zonesMap | keyvalue\">\r\n <div *ngIf=\"pair.key == defaultZone.id\">\r\n <h5 style=\"margin: 8px;\" *ngIf=\"pair.value.length > 0\">{{'Children zones'|translate}}</h5>\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item list-group-flush list-group-item-action\"\r\n *ngFor=\"let lot of pair.value; index as zoneIndex\">\r\n <div class=\"d-flex justify-content-between align-items-center zone-name\">\r\n {{lot.name}}\r\n <div class=\"museum-label\" *ngIf=\"lot.isMuseumVisitZone\">{{ \"itinerary\" | translate }}</div>\r\n <lib-chevron [conditionShowing]=\"zoneIndex==lotIndexDetails\" (click)=\"onToggleDetail(zoneIndex, lot)\"></lib-chevron>\r\n \r\n </div>\r\n <div *ngIf=\"zoneIndex==lotIndexDetails\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!lot.isMuseumVisitZone\">{{'Type of zone' |\r\n translate}}: {{lot.layer ? lot.layer.name :\r\n \"No type\" | translate}} </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"lot.surface\">{{'Surface' | translate}},\r\n m<sup>2</sup>:\r\n {{lot.surface }}\r\n </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!lot.virtual\">{{'Scan Points' | translate}}:\r\n {{lot.sweepIDs ? lot.sweepIDs.length : \"No scan points\" | translate}} </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"lot.virtual\">{{'Zone not visible in 3D visit'\r\n |\r\n translate}}</li>\r\n </ul>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\"\r\n (click)=\"onEdit(lot)\">{{'Edit' |\r\n translate}}</button>\r\n <!-- <button type=\"button\" class=\"btn btn-outline-primary rounded-pill\"\r\n (click)=\"onDelete(lot, floor.id)\">{{'Delete'\r\n | translate}}</button> -->\r\n </div>\r\n </li>\r\n </ul>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n </li>\r\n \r\n <li class=\"list-group-item\" *ngFor=\"let floor of floorZones; index as index\">\r\n <div class=\"d-flex justify-content-between align-items-center zone-name\">\r\n {{floor.name}}\r\n <!-- <small>({{ lot.metadata ? ('Calibrated' | translate) : ('Not calibrated' | translate)}})</small> -->\r\n <div class=\"museum-label\" *ngIf=\"floor.isMuseumVisitZone\">{{ \"itinerary\" | translate }}</div>\r\n <lib-chevron [conditionShowing]=\"index==floorDetails\" (click)=\"onToggleDetailFloor(index, floor)\"></lib-chevron>\r\n </div>\r\n <div *ngIf=\"index==floorDetails\"> \r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item bg-transparent\">{{'Type of zone' | translate}}: {{floor.layer ?\r\n floor.layer.name :\r\n \"No type\" | translate}} </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"floor.surface\">{{'Surface' | translate}}, m<sup>2</sup>:\r\n {{floor.surface }}\r\n </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!floor.virtual\">{{'Scan Points' | translate}}:\r\n {{floor.sweepIDs ? floor.sweepIDs.length : \"No scan points\" | translate}} </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"floor.virtual\">{{'Zone not visible in 3D visit' |\r\n translate}}</li>\r\n </ul>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onEdit(floor)\">{{'Edit' |\r\n translate}}</button>\r\n \r\n <!-- List of children zones -->\r\n \r\n <div *ngFor=\"let pair of zonesMap | keyvalue\">\r\n <div *ngIf=\"pair.key == floor.id\">\r\n <h5 style=\"margin: 8px;\" *ngIf=\"pair.value.length > 0\">{{'Children zones'|translate}}</h5>\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item list-group-flush list-group-item-action\"\r\n *ngFor=\"let lot of pair.value; index as zoneIndex\">\r\n <div class=\"d-flex justify-content-between align-items-center zone-name\">\r\n {{lot.name}}\r\n <div class=\"museum-label\" *ngIf=\"lot.isMuseumVisitZone\">{{ \"itinerary\" | translate }}</div>\r\n <lib-chevron [conditionShowing]=\"zoneIndex==lotIndexDetails\" (click)=\"onToggleDetail(zoneIndex, lot)\"></lib-chevron>\r\n \r\n </div>\r\n <div *ngIf=\"zoneIndex==lotIndexDetails\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!lot.isMuseumVisitZone\">{{'Type of zone' |\r\n translate}}: {{lot.layer ? lot.layer.name :\r\n \"No type\" | translate}} </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"lot.surface\">{{'Surface' | translate}},\r\n m<sup>2</sup>:\r\n {{lot.surface }}\r\n </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!lot.virtual\">{{'Scan Points' | translate}}:\r\n {{lot.sweepIDs ? lot.sweepIDs.length : \"No scan points\" | translate}} </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"lot.virtual\">{{'Zone not visible in 3D visit'\r\n |\r\n translate}}</li>\r\n </ul>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\"\r\n (click)=\"onEdit(lot)\">{{'Edit' |\r\n translate}}</button>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill\"\r\n (click)=\"onDelete(lot, floor.id)\">{{'Delete'\r\n | translate}}</button>\r\n </div>\r\n </li>\r\n </ul>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n </li>\r\n </ul>\r\n \r\n <div *ngIf=\"!isEditingZone\">\r\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onAddLot()\">{{'Add zone' |\r\n translate}}</button>\r\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onAddMuseumZone()\"\r\n *ngIf=\"isGuide || isAdmin\">\r\n {{'Add museum itinerary' | translate}}</button>\r\n </div>\r\n </div>\r\n <div class=\"col-md-6\" *ngIf=\"!isEditingZone\">\r\n <div class=\"d-flex justify-content-center\" *ngIf=\"loadingPlan\">\r\n <div class=\"spinner-border\" role=\"status\">\r\n <span class=\"visually-hidden\">Loading...</span>\r\n </div>\r\n </div>\r\n <div class=\"row\" style=\"overflow: hidden;\" *ngIf=\"currentZone\">\r\n <div class=\"mt-3 ms-3\" style=\"height: 500px; width: 100%;\" id=\"planDiv\" *ngIf=\"currentPlan\"></div>\r\n <div class=\"mt-3 ms-3\" id=\"no-plan\" *ngIf=\"!currentPlan && plans && !currentZone.virtual && !loadingPlan\">\r\n {{ 'Plan is not calibrated' | translate}}\r\n </div>\r\n <div class=\"mt-3 ms-3\" id=\"no-plan\" *ngIf=\"currentZone && currentZone.virtual\">\r\n {{ 'No scan points chosen' | translate}}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mb-3\" *ngIf=\"isEditingZone\">\r\n <lib-add-zone [zoneEdit]=\"zoneForEdit\" [spaceID]=\"spaceID\" [images360]=\"images360\" [navigationIDs]=\"navigations\"\r\n [zones]=\"allZones\" [defaultZone]=\"defaultZone\" (updatedZone)=\"editCompleted($event)\" [isMuseumVisit]=\"isMuseumVisit\"></lib-add-zone>\r\n </div>\r\n </div>\r\n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { Space, Visit, MenuItem, SpaceService, VisitService, NodeService, InventoryStatus } from '@smarterplan/ngx-smarterplan-core';\n\n@Component({\n selector: 'lib-images',\n templateUrl: './images.component.html',\n styleUrls: ['./images.component.scss']\n})\nexport class ImagesComponent implements OnInit {\n\n images: Array<any>;\n\n spaceID: string;\n\n currentSpace: Space;\n\n currentVisit: Visit;\n\n currentImages: Array<any>;\n\n loading = false;\n\n currentScanID: string;\n\n menuItems: MenuItem[] = [];\n\n constructor(\n private route: ActivatedRoute,\n private spaceService: SpaceService,\n private visitService: VisitService,\n private nodeService: NodeService,\n ) {}\n\n ngOnInit(): void {\n this.spaceID = this.route.snapshot.paramMap.get(\"id\");\n this.loadImages();\n }\n\n setupMenuItems() {\n this.menuItems = [\n { label: \"Locations\", url: \"/localisation\" },\n {\n label: this.currentSpace.name,\n url: `/localisation/${this.spaceID}`,\n },\n { label: \"360° Images\" },\n ];\n\n if (this.currentVisit) {\n this.menuItems.push({ label: this.currentVisit.name });\n }\n }\n\n onGoBack() {\n this.currentVisit = null;\n this.currentImages = null;\n this.setupMenuItems();\n }\n\n async loadImages() {\n this.loading = true;\n this.currentSpace = await this.spaceService.getSpace(this.spaceID);\n this.setupMenuItems();\n this.images = await this.visitService.loadImagesForSpace(\n this.currentSpace,\n );\n if (this.currentSpace.visits.length === 1) {\n this.setVisit(this.currentSpace.visits[0]);\n }\n this.loading = false;\n }\n\n setVisit(visit) {\n this.currentVisit = visit;\n this.currentImages = this.images.filter((im) => {\n return im.visit === visit;\n });\n this.setupMenuItems();\n }\n\n setCurrentScan(id) {\n this.currentScanID = id;\n }\n\n async onInventoryClick() {\n const { node } = this.currentVisit;\n const { filename } = this.currentImages[this.currentScanID]; // 110ee452_sweep.jpeg\n // check if node has already errors of inventory\n const missingFilesErrors = [\n InventoryStatus.ERROR_FILE_JSON_NOT_EXIST,\n InventoryStatus.ERROR_FILE_MODEL_NOT_EXIST,\n InventoryStatus.ERROR_FILE_OBJ_NOT_EXIST,\n ];\n if (\n node.inventoryStatus &&\n missingFilesErrors.includes(node.inventoryStatus)\n ) {\n alert(\n \"Files missing for this visit's inventory. Contact your administrator.\",\n );\n } else {\n await this.nodeService.updateNode({\n id: node.id,\n inventoryStatus: InventoryStatus.TO_RUN_ONE_IMAGE,\n navigationForInventory: filename.split(\"_\")[0],\n });\n alert(\n \"Automatic AI Inventory started! Detected equipments will appear soon in the visit.\",\n );\n }\n }\n\n}\n","<div class=\"container-fluid dashboard-tab col-sm-10 mb-3\" *ngIf=\"currentSpace\" >\n <div class=\"m-3\">\n <lib-tab-navigation [menuItems]='menuItems' (onGoBack)=\"onGoBack()\"></lib-tab-navigation>\n </div>\n <div class=\"d-flex justify-content-center\" *ngIf=\"loading\">\n <div class=\"spinner-border\" role=\"status\">\n <span class=\"visually-hidden\">{{'Loading' | translate}}...</span>\n </div>\n </div>\n <div ngbDropdown class=\"d-inline-block\" *ngIf=\"currentSpace.visits && currentSpace.visits.length > 0\">\n <button class=\"btn btn-label-file rounded-pill\" id=\"dropdownBasic1\" *ngIf=\"!currentVisit\"\n ngbDropdownToggle>{{'Choose 3D visit' | translate}}</button>\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\">\n <button ngbDropdownItem *ngFor=\"let visit of currentSpace.visits\" (click)=\"setVisit(visit)\"> {{ visit.name }}\n </button>\n </div>\n </div>\n <h3 *ngIf=\"currentVisit\">{{ currentVisit.name }}</h3>\n <div class=\"mt-3\" *ngIf=\"currentVisit && currentImages.length == 0 && !loading\">\n <h4>{{'No imported images' | translate }}</h4>\n <p>{{'For import: go Virtual Visits => Import Images' | translate}}</p>\n </div>\n <button *ngIf=\"currentVisit && currentImages.length > 0 && !loading\"\n class=\"btn btn-outline-primary rounded-pill no-lowercase mb-2\" (click)=\"onInventoryClick()\">\n {{'Run AI inventory on this image' | translate}}</button>\n <lib-carousel [images]=\"currentImages\" *ngIf=\"currentImages\" (currentScan)=\"setCurrentScan($event)\"></lib-carousel>\n </div>","import { Component, HostListener, OnInit, ViewChild } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\nimport { TranslateService } from '@ngx-translate/core';\nimport { getDocument } from \"pdfjs-dist\";\nimport { PDFDocumentProxy } from \"ng2-pdf-viewer\";\nimport { Zone, Plan, Space, MenuItem, PlanService, ZoneService, VisitService, SpaceService, sortAlphabeticallyOnName, downloadFileAsObject } from '@smarterplan/ngx-smarterplan-core';\n\n@Component({\n selector: 'lib-edit-plan',\n templateUrl: './edit-plan.component.html',\n styleUrls: ['./edit-plan.component.scss']\n})\nexport class EditPlanComponent implements OnInit {\n\n @ViewChild(\"dialog\") dialog!: any;\n\n @ViewChild(\"dialogZone\") dialogZone!: any;\n\n @ViewChild(\"preparing\") loadingModal: any;\n\n spaceID: string;\n\n chosenPlan: Plan;\n\n editedPlan: Plan;\n\n loading: boolean = false;\n\n svgEditor;\n\n svgEditorIframe;\n\n navigations: string[];\n\n zones: Zone[];\n\n isNewZone: boolean = false;\n\n newZoneData;\n\n editorUrl;\n\n editedZone: Zone;\n\n images360;\n\n\n /**\n * Options for svgEditor\n */\n private config: any = {\n noStorageOnLoad: true,\n forceStorage: true,\n // imgPath: \"/assets/editor/images/\",\n // extPath: \"/assets/editor/extensions/\",\n // langPath: \"/assets/editor/locale/\",\n // canvgPath: \"/assets/editor/canvg/\",\n // jspdfPath: \"/assets/editor/jspdf/\",\n // jGraduatePath: \"/assets/editor/jgraduate/images/\",\n // extIconsPath: \"/assets/editor/extensions/\",\n // stylesheets: [\n // \"/assets/editor/jgraduate/css/jGraduate.css\",\n // \"/assets/editor/spinbtn/jQuery.SpinButton.css\",\n // \"/assets/editor/jgraduate/css/jPicker.css\",\n // \"/assets/editor/svg-editor.css\",\n // ],\n dimensions: [10000, 10000],\n showlayers: true,\n noDefaultExtensions: true,\n basePath: \"/assets/editor/\",\n customExportImage: true,\n extensions: [\n \"ext-connector\",\n // \"ext-eyedropper\",\n // \"ext-grid\",\n // \"ext-markers\",\n // \"ext-overview_window\",\n // \"ext-spi-library\",\n // \"ext-spi-icon\",\n \"ext-sp-zone\",\n // \"ext-arrows\",\n // \"ext-sp-css\",\n // \"ext-placemark\",\n ],\n };\n\n currentSpace: Space;\n\n menuItems: MenuItem[] = [];\n\n constructor(\n private planService: PlanService,\n private route: ActivatedRoute,\n private router: Router,\n private modalService: NgbModal,\n private zoneService: ZoneService,\n private visitService: VisitService,\n private spaceService: SpaceService,\n private translate: TranslateService,\n ) {\n this.chosenPlan = this.planService.getChosenPlan();\n }\n\n async ngOnInit() {\n this.editorUrl = \"/assets/editor/main.html\";\n this.spaceID = this.route.snapshot.queryParams.spaceID;\n this.currentSpace = await this.spaceService.getSpace(this.spaceID);\n this.setupMenuItems();\n if (this.spaceID && !this.planService.getChosenPlan()) {\n this.router.navigate([\n \"/dashboard/localisation\",\n this.spaceID,\n \"plans\",\n ]);\n } else if (!this.spaceID && !this.planService.getChosenPlan()) {\n this.router.navigate([\"/dashboard/localisation\"]);\n }\n }\n\n setupMenuItems() {\n this.menuItems = [\n { label: \"Locations\", url: \"/localisation\" },\n {\n label: this.currentSpace.name,\n url: `/localisation/${this.spaceID}`,\n },\n {\n label: \"Plans\",\n url: `/localisation/${this.currentSpace.id}/plans`,\n },\n {\n label: \"Edit\",\n url: `/localisation/${this.currentSpace.id}/plan-edit?spaceID=${this.currentSpace.id}`,\n },\n ];\n }\n\n @HostListener(\"window:message\", [\"$event\"])\n async switchAction(event) {\n if (event.origin === window.location.origin) {\n switch (event.data.message) {\n case \"save\":\n this.onSave(event.data.redirect);\n break;\n case \"close\":\n this.onCancel();\n break;\n case \"new-zone\":\n const modalReference = this.modalService.open(\n this.loadingModal,\n );\n const svg = unescape(\n encodeURIComponent(\n this.svgEditor.svgCanvas.getSvgString(),\n ),\n );\n\n const base64 = `data:image/svg+xml;base64,${window.btoa(\n svg,\n )}`;\n const currentSpace = await this.spaceService.getSpace(\n this.spaceID,\n );\n\n this.images360 = await this.visitService.loadImagesForSpace(\n currentSpace,\n );\n\n this.editedPlan = { ...this.chosenPlan };\n this.editedPlan.filepath = base64;\n\n this.newZoneData = event.data.zoneData;\n if (this.newZoneData.elements.length === 0) {\n modalReference.close();\n alert(this.translate.instant(\"edition.no-zone\"));\n break;\n }\n this.zones = await this.zoneService.getZonesBySpace(\n this.spaceID,\n );\n this.zones = sortAlphabeticallyOnName(this.zones);\n this.editedZone = this.zones.find(\n (z) => z.name === this.newZoneData.name,\n );\n this.resetNavigations();\n modalReference.close();\n this.modalService.open(this.dialogZone);\n\n break;\n\n default:\n break;\n }\n }\n }\n\n async resetNavigations() {\n this.navigations = [];\n const defaultZone = this.zones.find((zone) => !zone.parentID);\n if (defaultZone.sweepIDs.length > 0) {\n this.navigations = defaultZone.sweepIDs;\n }\n }\n\n async onLoad(svgEditor) {\n if (svgEditor.contentWindow.SvgEditor) {\n this.svgEditorIframe = svgEditor;\n this.svgEditor = new svgEditor.contentWindow.SvgEditor();\n\n await this.svgEditor.init();\n // await this.svgEditor.pref(key, val);\n // await this.svgEditor.setConfig({ extentions: this.extensions });\n await this.svgEditor.setConfig(this.config, {\n allowInitialUserOverride: true,\n });\n\n if (this.chosenPlan && this.chosenPlan.extension === \"svg\") {\n this.loadSvg();\n }\n if (this.chosenPlan && this.chosenPlan.extension === \"pdf\") {\n this.loadPdf();\n }\n if (!this.chosenPlan.calibration || !this.chosenPlan.isModified) {\n setTimeout(() => {\n this.svgEditorIframe.contentWindow.postMessage(\n { action: \"disable-zone\" },\n \"*\",\n );\n }, 1000);\n }\n }\n }\n\n async onSave(redirect: boolean) {\n const imgBlob = await new Blob(\n [this.svgEditor.svgCanvas.getSvgString()],\n {\n type: \"image/svg+xml\",\n },\n );\n\n const [name] = this.chosenPlan.name.split(\".\");\n\n const imgFile: File = new File([imgBlob], `${name}-edited.svg`, {\n type: \"image/svg+xml\",\n lastModified: Date.now(),\n });\n this.planService.setPlanFileCache(imgFile);\n if (this.chosenPlan.isModified) {\n this.modalService.open(this.dialog);\n } else {\n this.router.navigate([\n \"/dashboard/localisation\",\n this.spaceID,\n \"plans\",\n ]);\n }\n }\n\n async updateSvg() {\n const newUrl = await this.planService.updatePlanFile();\n await this.planService.updatePlan({\n id: this.chosenPlan.id,\n annexe: newUrl,\n });\n this.planService.setPlanFileCache(null);\n this.router.navigate([\n \"/dashboard/localisation\",\n this.spaceID,\n \"plans\",\n ]);\n }\n\n async newSvg() {\n this.router.navigate([\n \"/dashboard/localisation\",\n this.spaceID,\n \"plans\",\n ]);\n }\n\n async onCancel() {\n this.router.navigate([\n \"/dashboard/localisation\",\n this.spaceID,\n \"plans\",\n ]);\n alert(this.translate.instant(\"edition.cancel\"));\n }\n\n async loadSvg() {\n const svgRequest: any = await downloadFileAsObject(\n this.chosenPlan.annexe,\n );\n if (svgRequest) {\n const svgBlob = await svgRequest.Body;\n const reader = new FileReader();\n reader.onloadend = () => {\n this.svgEditor.loadFromDataURI(reader.result);\n };\n reader.readAsDataURL(svgBlob);\n }\n }\n\n async loadPdf() {\n this.svgEditorIframe.contentWindow.postMessage(\n { action: \"disable-zone\" },\n \"*\",\n );\n const canvas = document.querySelector(\n \"#canvas4pdf\",\n ) as HTMLCanvasElement;\n const context = canvas.getContext(\"2d\") as CanvasRenderingContext2D;\n\n const pdfjs = await import(\"pdfjs-dist/build/pdf\");\n const pdfjsWorker = await import(\"pdfjs-dist/build/pdf.worker.entry\");\n\n pdfjs.GlobalWorkerOptions.workerSrc = pdfjsWorker;\n\n const pdf: PDFDocumentProxy = await getDocument(\n this.chosenPlan.filepath,\n ).promise;\n const page = await pdf.getPage(1);\n\n const viewPortParameters = { scale: 1.5 };\n const viewport = page.getViewport(viewPortParameters);\n this.svgEditor.svgCanvas.setResolution(viewport.width, viewport.height);\n\n canvas.height = viewport.height;\n canvas.width = viewport.width;\n const renderContext = {\n canvasContext: context,\n viewport,\n };\n const renderTask = page.render(renderContext).promise;\n renderTask.then(() => {\n const newImage = this.svgEditor.svgCanvas.addSVGElementFromJson({\n element: \"image\",\n attr: {\n x: 0,\n y: 0,\n width: viewport.width,\n height: viewport.height,\n id: this.svgEditor.svgCanvas.getNextId(),\n style: \"pointer-events:inherit\",\n },\n });\n this.svgEditor.svgCanvas.setHref(\n newImage,\n canvas.toDataURL(\"image/png\"),\n );\n });\n }\n\n async onLoadImg(img: any) {\n this.svgEditorIframe.contentWindow.postMessage(\n { action: \"disable-zone\" },\n \"*\",\n );\n const imgRequest: any = await downloadFileAsObject(\n this.chosenPlan.annexe,\n );\n if (imgRequest) {\n const imgBlob = await imgRequest.Body;\n const imgWidth = img.naturalWidth;\n const imgHeight = img.naturalHeight;\n // await this.svgEditor.setConfig({\n // dimensions: [imgWidth, imgHeight],\n // });\n this.svgEditor.svgCanvas.setResolution(imgWidth, imgHeight);\n\n const reader = new FileReader();\n reader.onloadend = () => {\n const newImage = this.svgEditor.svgCanvas.addSVGElementFromJson(\n {\n element: \"image\",\n attr: {\n x: 0,\n y: 0,\n width: imgWidth,\n height: imgHeight,\n id: this.svgEditor.svgCanvas.getNextId(),\n style: \"pointer-events:inherit\",\n },\n },\n );\n this.svgEditor.svgCanvas.setHref(newImage, reader.result);\n };\n reader.readAsDataURL(imgBlob);\n }\n }\n\n onNewZone(event) {\n this.isNewZone = false;\n if (event) {\n this.svgEditorIframe.contentWindow.postMessage(\n { action: \"rename-layer\", name: event },\n \"*\",\n );\n } else {\n this.svgEditorIframe.contentWindow.postMessage(\n { action: \"cancel-layer\" },\n \"*\",\n );\n }\n }\n\n}\n","<div class=\"row mt-3\">\n <div class=\"col\">\n <div class=\"m-3\">\n <lib-tab-navigation [menuItems]='menuItems'></lib-tab-navigation>\n </div>\n </div>\n</div>\n<iframe *ngIf=\"editorUrl\" #svgEditor [src]=\"editorUrl | safeUrl\" frameborder=\"0\"\n style=\"height: 100%;width:100%;min-height:750px\" (load)=\"onLoad(svgEditor)\"></iframe>\n<!-- chosenPlan && -->\n<!-- ./../../../../../../assets/svgeditor/index.html -->\n\n<img #imgPng *ngIf=\"chosenPlan && chosenPlan.extension !== 'svg' && svgEditor\" [src]=\"chosenPlan.filepath\"\n (load)=\"onLoadImg(imgPng)\" style=\"display: none;\">\n\n<canvas id=\"canvas4pdf\" style=\"display: none;\"></canvas>\n\n<lib-add-zone *ngIf=\"isNewZone\" [images360]=\"images360\" [spaceID]=\"spaceID\" [navigationIDs]=\"navigations\"\n [zoneEdit]=\"editedZone\" [zones]=\"zones\" (updatedZone)=\"onNewZone($event)\" [chosenPlan]=\"editedPlan\"\n [newZoneData]=\"newZoneData\"></lib-add-zone>\n\n<ng-template #dialog let-modal>\n\n <div class=\"modal-header\">\n <h4 class=\"modal-title\">{{'Submit' | translate}}</h4>\n <button type=\"button\" class=\"close\" aria-label=\"Close\" (click)=\"modal.dismiss('Cross click')\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n </div>\n <div class=\"modal-body\">\n {{'save plan edited' | translate}}\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-outline-dark\" (click)=\"newSvg();modal.close('Close click')\">{{'Yes' |\n translate}}</button>\n <button type=\"button\" class=\"btn btn-outline-dark\" (click)=\"updateSvg();modal.close('Close click')\">{{'No' |\n translate}}</button>\n </div>\n\n</ng-template>\n\n<ng-template #dialogZone let-modal>\n\n <div class=\"modal-header\">\n <h4 class=\"modal-title\">{{'Submit' | translate}}</h4>\n <button type=\"button\" class=\"close\" aria-label=\"Close\" (click)=\"modal.dismiss('Cross click')\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n </div>\n <div class=\"modal-body\">\n {{'Select zone' | translate}}\n <div ngbDropdown class=\"d-inline-block me-3\">\n <button class=\"btn btn-label-file rounded-pill\" id=\"dropdownBasic1\" ngbDropdownToggle>{{editedZone ?\n editedZone.name: ('New zone' | translate) }}</button>\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\">\n <button ngbDropdownItem (click)=\"editedZone = null\" translate=\"New zone\">\n </button>\n <button ngbDropdownItem *ngFor=\"let zone of zones\" (click)=\"editedZone = zone\">{{zone.name }}\n </button>\n </div>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-outline-dark\"\n (click)=\"isNewZone = true;modal.close('Close click')\">{{'Validate' |\n translate}}</button>\n <button type=\"button\" class=\"btn btn-outline-dark\" (click)=\"modal.close('Close click')\">{{'Cancel' |\n translate}}</button>\n </div>\n\n</ng-template>\n\n<ng-template #preparing let-modal>\n <div class=\"modal-header\">\n <h4 class=\"modal-title\">{{'Processing' | translate}}</h4>\n <button type=\"button\" class=\"close\" aria-label=\"Close\" (click)=\"modal.dismiss('Cross click')\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n </div>\n <div class=\"modal-body\">\n <div class=\"d-flex justify-content-center\">\n <div class=\"spinner-border\" role=\"status\">\n <span class=\"visually-hidden\">Loading...</span>\n </div>\n </div>\n </div>\n\n</ng-template>","import { NgModule } from \"@angular/core\";\r\nimport { Routes, RouterModule } from \"@angular/router\";\r\nimport { CalibrationComponent } from \"./components/plans/calibration/calibration.component\";\r\nimport { DetailLocationComponent } from \"./components/detail-location/detail-location.component\";\r\nimport { EditPlanComponent } from \"./components/plans/edit-plan/edit-plan.component\";\r\nimport { ImagesComponent } from \"./components/images/images.component\";\r\nimport { LocationsComponent } from \"./components/locations/locations.component\";\r\nimport { PlansComponent } from \"./components/plans/plans.component\";\r\nimport { VisitsComponent } from \"./components/visits/visits.component\";\r\nimport { ZonesComponent } from \"./components/zones/zones.component\";\r\n\r\nconst routes: Routes = [\r\n {\r\n path: \"\",\r\n component: LocationsComponent,\r\n },\r\n {\r\n path: \":id\",\r\n children: [\r\n { path: \"\", component: DetailLocationComponent },\r\n { path: \"zones\", component: ZonesComponent },\r\n { path: \"visits\", component: VisitsComponent },\r\n { path: \"plans\", component: PlansComponent },\r\n {\r\n path: \"plan-calibration\",\r\n component: CalibrationComponent,\r\n },\r\n {\r\n path: \"plan-edit\",\r\n component: EditPlanComponent,\r\n },\r\n { path: \"images\", component: ImagesComponent },\r\n ],\r\n },\r\n ];\r\n \r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule],\r\n})\r\nexport class LocationsRoutingModule { }","import { NgModule } from '@angular/core';\nimport { LocationsComponent } from './components/locations/locations.component';\nimport { DetailLocationComponent } from './components/detail-location/detail-location.component';\nimport { CalibrationComponent } from './components/plans/calibration/calibration.component';\nimport { PlansComponent } from './components/plans/plans.component';\nimport { VisitsComponent } from './components/visits/visits.component';\nimport { ZonesComponent } from './components/zones/zones.component';\nimport { ImagesComponent } from './components/images/images.component';\nimport { EditPlanComponent } from './components/plans/edit-plan/edit-plan.component';\nimport { LocationsRoutingModule } from './ngx-smarterplan-location-routing.module';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { TabNavigationComponent } from './components/tab-navigation/tab-navigation.component';\nimport { MapComponent } from './components/locations/map/map.component';\nimport { LeafletModule } from '@asymmetrik/ngx-leaflet';\nimport {TranslateModule} from '@ngx-translate/core';\nimport { MapPopupComponent } from './components/locations/map/map-popup/map-popup.component';\nimport { CommonModule } from '@angular/common';\nimport { FormLocationComponent } from './components/form-location/form-location.component';\nimport { NgbModule } from \"@ng-bootstrap/ng-bootstrap\";\nimport { ClipboardModule } from \"ngx-clipboard\";\nimport { ChevronComponent } from './components/chevron/chevron.component';\nimport { AddZoneComponent } from './components/zones/add-zone/add-zone.component';\nimport { SelectionComponent } from './components/zones/add-zone/selection/selection.component';\nimport { CarouselComponent } from './components/carousel/carousel.component';\nimport { NgxSmarterplanCoreModule} from '@smarterplan/ngx-smarterplan-core';\nimport { PdfViewerModule } from 'ng2-pdf-viewer';\n\n@NgModule({\n declarations: [\n LocationsComponent,\n DetailLocationComponent,\n CalibrationComponent,\n PlansComponent,\n VisitsComponent,\n ZonesComponent,\n ImagesComponent,\n EditPlanComponent,\n TabNavigationComponent,\n MapComponent,\n MapPopupComponent,\n FormLocationComponent,\n ChevronComponent,\n AddZoneComponent,\n SelectionComponent,\n CarouselComponent\n ],\n imports: [\n PdfViewerModule,\n ClipboardModule,\n NgbModule,\n CommonModule,\n TranslateModule.forChild({\n extend: true\n }),\n LeafletModule,\n FormsModule,\n ReactiveFormsModule,\n NgxSmarterplanCoreModule,\n LocationsRoutingModule,\n ],\n exports: []\n})\nexport class NgxSmarterplanLocationsModule { }\n","/*\n * Public API Surface of ngx-smarterplan-locations\n */\n\nexport * from './lib/ngx-smarterplan-locations.service';\nexport * from './lib/ngx-smarterplan-locations.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i1","i3","i4","i3.TabNavigationComponent","i4.MapComponent","i5.FormLocationComponent","i6","i8","i4.TabNavigationComponent","i7","i9","i5.TabNavigationComponent","i6.ChevronComponent","i3.CarouselComponent","i4.SelectionComponent","i5.ChevronComponent","i6.AddZoneComponent","i4.CarouselComponent"],"mappings":"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"}