diff --git a/src/app/components/leaflet-map/leaflet-map.component.ts b/src/app/components/leaflet-map/leaflet-map.component.ts index 44e95c6..eee1f37 100644 --- a/src/app/components/leaflet-map/leaflet-map.component.ts +++ b/src/app/components/leaflet-map/leaflet-map.component.ts @@ -1,9 +1,11 @@ import { Component, OnInit, ViewContainerRef } from '@angular/core'; import * as L from 'leaflet'; import 'leaflet/dist/leaflet.css'; -import { Monument } from '../../model/Monument'; +import { Pin } from '../../model/Pin'; import { PinService } from '../../services/pin.service'; -import { MonumentMarkerComponent } from '../monument-marker/monument-marker.component'; +import { PinMarkerComponent } from '../pin-marker/pin-marker.component'; +import { ActivatedRoute } from '@angular/router'; +import { Router } from '@angular/router'; @Component({ selector: 'app-leaflet-map', @@ -11,10 +13,13 @@ import { MonumentMarkerComponent } from '../monument-marker/monument-marker.comp }) export class LeafletMapComponent implements OnInit { private map!: L.Map; + private markersMap: { [key: string]: L.Marker } = {}; constructor( private viewContainerRef: ViewContainerRef, - private pinsService: PinService + private pinsService: PinService, + private route: ActivatedRoute, + private router: Router ) {} ngOnInit(): void { @@ -51,27 +56,47 @@ export class LeafletMapComponent implements OnInit { `); - this.pinsService.getPins().subscribe((monuments: Monument[]) => { - console.log(monuments); + this.pinsService.getPins().subscribe((pins: Pin[]) => { + console.log(pins); // Add markers - monuments.forEach((monument: Monument) => { - //const icon = monument.visited ? visitedIcon : notVisitedIcon; + pins.forEach((pin: Pin) => { + //const icon = pin.visited ? visitedIcon : notVisitedIcon; const icon = visitedIcon; - const marker = L.marker(monument.location as [number, number], { + const marker = L.marker(pin.location as [number, number], { icon, }).addTo(this.map); + marker.on('popupclose', () => { + this.router.navigate(['/map']); + }); + + marker.on('popupopen', () => { + this.router.navigate(['/map'], { queryParams: { pin: pin.id } }); + }); + // Dynamically create Angular component and attach it to popup const popupDiv = document.createElement('div'); - const componentRef = this.viewContainerRef.createComponent( - MonumentMarkerComponent - ); + const componentRef = + this.viewContainerRef.createComponent(PinMarkerComponent); - componentRef.instance.monument = monument; + componentRef.instance.pin = pin; popupDiv.appendChild(componentRef.location.nativeElement); marker.bindPopup(popupDiv); + + // Stocker les marqueurs par ID + this.markersMap[pin.id] = marker; + }); + + // Ouvrir automatiquement la pop-up si un ID est passé dans l'URL + this.route.queryParams.subscribe((params) => { + const pinId = params['pin']; // Récupérer l'ID du Pin depuis les paramètres de requête + if (pinId && this.markersMap[pinId]) { + this.markersMap[pinId].openPopup(); // Ouvrir la pop-up du marqueur correspondant + console.log('Coords du pin : ', this.markersMap[pinId].getLatLng()); + this.map.setView(this.markersMap[pinId].getLatLng(), 6); // Centrer la carte sur le marqueur + } }); }); } diff --git a/src/app/components/navbar/navbar.component.html b/src/app/components/navbar/navbar.component.html index e9ea494..c30df0d 100644 --- a/src/app/components/navbar/navbar.component.html +++ b/src/app/components/navbar/navbar.component.html @@ -55,12 +55,30 @@ Search icon - +
+ +
+ +