@gouvfr-anct/mediation-numerique
Version:
📚 Bibliothèque pour la cartographie de l’offre de médiation numérique.
304 lines • 74.2 kB
JavaScript
import { Component, EventEmitter, HostListener, Inject, Input, Output } from '@angular/core';
import L, { geoJSON, latLng, layerGroup, tileLayer } from 'leaflet';
import * as _ from 'lodash';
import { GEOMETRY_POLYGON_TOKEN } from '../../configurations/geometry-polygon.configuration';
import { INITIAL_POSITION_TOKEN } from '../../configurations/initial-position.configuration';
import { MARKER_TYPE_TOKEN } from '../../configurations/marker-type.configuration';
import { ZOOM_LEVEL_TOKEN } from '../../configurations/zoom-level.configuration';
import { GEO_JSON_TOKEN } from '../repositories/geo-json.repository';
import { MapService } from './map.service';
import * as i0 from "@angular/core";
import * as i1 from "./map.service";
import * as i2 from "@angular/common";
import * as i3 from "@asymmetrik/ngx-leaflet";
export class MapComponent {
constructor(metropole, markerType, zoomLevel, initialPosition, geoJsonService, mapService) {
this.metropole = metropole;
this.markerType = markerType;
this.zoomLevel = zoomLevel;
this.initialPosition = initialPosition;
this.geoJsonService = geoJsonService;
this.mapService = mapService;
this.isOrientationForm = false;
this.structures = [];
this.structuresToPrint = [];
this.selectedStructure = new EventEmitter();
this.orientationButtonClick = new EventEmitter();
this.zoomOptions = { animate: true, duration: 0.5 };
this.initializeMapOptions();
}
// Add listener on the popup button to show details of structure
clickout(event) {
if (event.target.classList.contains('btnShowDetails')) {
this.selectedStructure.emit(this.currentStructure);
}
if (event.target.classList.contains('add')) {
this.orientationButtonClick.emit(this.currentStructure);
this.getStructuresPositions(this.structures);
}
}
ngOnChanges(changes) {
if (changes.searchedValue && !changes.searchedValue.firstChange) {
if (changes.searchedValue.currentValue) {
this.processTownCoordinate(changes.searchedValue.currentValue);
}
else {
this.map.setView(this.mapOptions.center, this.mapOptions.zoom);
}
}
if (changes.isMapPhone) {
if (this.isMapPhone) {
setTimeout(() => {
this.map.invalidateSize();
}, 0);
}
}
if (changes.structures && this.map) {
this.handleStructurePosition(changes.structures.previousValue);
}
// Handle map marker tooltip
if (changes.toogleToolTipId && changes.toogleToolTipId.currentValue !== changes.toogleToolTipId.previousValue) {
if (changes.toogleToolTipId.previousValue !== undefined) {
if (this.isToPrint(changes.toogleToolTipId.previousValue)) {
this.mapService.setAddedToListMarker(changes.toogleToolTipId.previousValue, this.getMarkerTypeByStructureId(changes.toogleToolTipId.previousValue));
}
else {
this.mapService.setUnactiveMarker(changes.toogleToolTipId.previousValue, this.getMarkerTypeByStructureId(changes.toogleToolTipId.previousValue));
}
}
if (changes.toogleToolTipId.currentValue !== undefined) {
this.mapService.setActiveMarker(changes.toogleToolTipId.currentValue, this.getMarkerTypeByStructureId(changes.toogleToolTipId.currentValue));
}
}
// Handle map marker if none selected
if (changes.selectedMarkerId && this.map) {
this.map.closePopup();
if (changes.selectedMarkerId.currentValue === undefined) {
this.mapService.setDefaultMarker(changes.selectedMarkerId.previousValue, this.getMarkerTypeByStructureId(changes.selectedMarkerId.previousValue));
this.map.setView(this.mapOptions.center, this.mapOptions.zoom);
}
}
// Handle map marker if one is set with url or selected
if (this.mapService.getMarker(this.selectedMarkerId)) {
this.mapService.setSelectedMarker(this.selectedMarkerId, this.getMarkerTypeByStructureId(this.selectedMarkerId));
this.centerLeafletMapOnMarker(this.selectedMarkerId);
}
this.closePreviousMarker(changes);
if (changes.structuresToPrint) {
if (changes.structuresToPrint.currentValue < changes.structuresToPrint.previousValue) {
this.mapService?.setUnactiveMarker(this.toogleToolTipId, this.getMarkerTypeByStructureId(changes.structuresToPrint.previousValue));
}
this.structuresToPrint.forEach((structure) => {
this.mapService.setAddedToListMarker(structure._id, this.getMarkerTypeByStructureId(structure._id));
});
}
}
processTownCoordinate(queryString) {
this.geoJsonService.getTownshipCoord(queryString).subscribe((townData) => {
if (townData.length > 0) {
const bounds = new L.LatLngBounds(townData.map((dataArray) => dataArray.reverse()));
this.map.fitBounds(bounds);
}
}, (err) => {
this.map.flyTo(this.mapOptions.center, this.mapOptions.zoom, this.zoomOptions);
});
}
/**
* Create a user position marcker and center the map on it with a zoom level defined in ZoomLevel
* @param coords {[number, number]} Map center position
*/
centerOnCoordinates(coords) {
this.mapService.createMarker(coords[1], coords[0], this.markerType.user, 'userLocation').addTo(this.map);
this.map.flyTo(new L.LatLng(coords[1], coords[0]), this.zoomLevel.userPosition, this.zoomOptions);
}
/**
* Get structures positions and add marker corresponding to those positons on the map
*/
handleStructurePosition(previousStructuresValue) {
// If there is more structure than before, append them
if (previousStructuresValue &&
previousStructuresValue.length > 0 &&
previousStructuresValue.length < this.structures.length) {
this.getStructuresPositions(_.differenceWith(this.structures, previousStructuresValue, _.isEqual));
}
else if (this.structures) {
this.map = this.mapService.cleanMap(this.map);
this.getStructuresPositions(this.structures);
this.structuresToPrint.forEach((structure) => {
this.mapService.setAddedToListMarker(structure._id, this.getMarkerTypeByStructureId(structure._id));
});
}
}
isToPrint(id) {
return this.structuresToPrint.findIndex((elem) => elem._id == id) > -1 ? true : false;
}
/**
* Returns according marker type base on {MarkerType}
* @param {Structure} structure
* @returns {number}
*/
getMarkerType(structure) {
return structure?.labelsQualifications?.includes('conseillerNumFranceServices')
? this.markerType.conseillerFrance
: this.markerType.structure;
}
/**
* Return the map marker type given a structure id
* @param {string} id - Structure id
* @returns {number}
*/
getMarkerTypeByStructureId(id) {
return this.getMarkerType(this.structures.find((structure) => structure._id === id));
}
getStructuresPositions(structureList) {
for (const structure of structureList) {
this.mapService
.createMarker(structure.getLat(), structure.getLon(), this.getMarkerType(structure), structure._id, this.buildToolTip(structure))
.addTo(this.map)
// store structure before user click on button
.on('popupopen', () => {
this.currentStructure = structure;
});
}
}
/**
* Create tooltip for display
* @param structure Structure
*/
buildToolTip(structure) {
let cssAvailabilityClass = structure.isOpen ? 'available' : null;
if (cssAvailabilityClass === null) {
if (structure.openedOn.day) {
cssAvailabilityClass = 'unavailable';
}
else {
cssAvailabilityClass = 'unknown';
}
}
return ('<h1>' +
structure.structureName +
'</h1>' +
'<p>' +
structure.getLabelTypeStructure() +
'</p>' +
(this.isOrientationForm
? '<div class="pop-up orientation"><button type="button" class="orientationButton btnShowDetails"><span class="ico-gg-eye-alt eye"></span>Voir</button></div>'
: '<div class="pop-up"><button type="button" class="btnShowDetails">Voir</button></div>'));
}
buildMdmPopUp(mdmProperties) {
return `<h1>${mdmProperties.nom}</h1><p>${mdmProperties.adresse}</p>`;
}
/**
* Add marker when map is ready to be showned
* @param map map
*/
onMapReady(map) {
this.map = map;
if (this.searchedValue) {
if (Array.isArray(this.searchedValue)) {
this.centerOnCoordinates(this.searchedValue);
}
}
}
/**
* Init map options :
* - Metropole bounds based on a WMS service hosted by data.grandlyon.com
* - Map Layer based on open street maps
*/
initializeMapOptions() {
// Init mdm
this.initMDMLayer();
// Init WMS service with param from data.grandlyon.com
layerGroup();
const carteLayer = tileLayer('https://{s}.basemaps.cartocdn.com/rastertiles/voyager/{z}/{x}/{y}{r}.png', {
attribution: '© <a href="https://carto.com/attributions">CARTO</a>',
maxZoom: this.zoomLevel.max
});
// Center is set on townhall
// Zoom is blocked on 11 to prevent people to zoom out from metropole
this.mapOptions = {
center: latLng(this.initialPosition.latitude, this.initialPosition.longitude),
maxZoom: this.zoomLevel.max,
zoom: this.zoomLevel.regular,
minZoom: this.zoomLevel.min,
layers: [carteLayer]
};
}
initMDMLayer() {
this.geoJsonService.getMDMGeoJson().subscribe((res) => {
res.forEach((mdm) => {
this.mapService
.createMarker(mdm.geometry.getLat(), mdm.geometry.getLon(), this.markerType.mdm, null, this.buildMdmPopUp(mdm.properties))
.addTo(this.map);
});
this.initMetropoleLayer();
});
}
centerLeafletMapOnMarker(markerId) {
if (this.mapService.getMarker(markerId)) {
const marker = this.mapService.getMarker(markerId);
const latLngs = marker.getLatLng();
this.map.flyTo(new L.LatLng(latLngs.lat, latLngs.lng), this.zoomLevel.max, this.zoomOptions);
}
}
initMetropoleLayer() {
this.map.addLayer(geoJSON({
type: this.metropole.features[0].geometry.type,
coordinates: this.metropole.features[0].geometry.coordinates
}, { style: () => ({ color: '#a00000', fillOpacity: 0, weight: 1 }) }));
}
/**
* Close previous markers
* - if strucure is closed
* - if a new marker is selected
*/
closePreviousMarker(changes) {
if ((changes.selectedMarkerId?.currentValue === undefined && changes.selectedMarkerId?.previousValue) ||
changes.selectedMarkerId?.currentValue !== changes.selectedMarkerId?.previousValue) {
this.mapService.setUnactiveMarker(changes.selectedMarkerId.previousValue, this.getMarkerTypeByStructureId(changes.selectedMarkerId.previousValue));
}
}
}
MapComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MapComponent, deps: [{ token: GEOMETRY_POLYGON_TOKEN }, { token: MARKER_TYPE_TOKEN }, { token: ZOOM_LEVEL_TOKEN }, { token: INITIAL_POSITION_TOKEN }, { token: GEO_JSON_TOKEN }, { token: i1.MapService }], target: i0.ɵɵFactoryTarget.Component });
MapComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: MapComponent, selector: "app-map", inputs: { isOrientationForm: "isOrientationForm", structures: "structures", structuresToPrint: "structuresToPrint", toogleToolTipId: "toogleToolTipId", selectedMarkerId: "selectedMarkerId", isMapPhone: "isMapPhone", searchedValue: "searchedValue" }, outputs: { selectedStructure: "selectedStructure", orientationButtonClick: "orientationButtonClick" }, host: { listeners: { "document:click": "clickout($event)" } }, providers: [MapService], usesOnChanges: true, ngImport: i0, template: "<div\n id=\"map\"\n class=\"body-wrap\"\n [ngClass]=\"{ orientation: isOrientationForm }\"\n leaflet\n [leafletOptions]=\"mapOptions\"\n (leafletMapReady)=\"onMapReady($event)\"></div>\n", styles: [".ico-mglass{position:relative;display:inline-block;background:transparent;border-radius:30px;border:2px solid #333333;height:12px;width:12px;min-width:12px;max-width:12px}.ico-mglass:after{content:\"\";height:2px;width:8px;background:#333333;position:absolute;top:14px;left:10px;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg)}.ico-pin{width:20px;height:20px;max-width:20px;max-height:20px;border-radius:50% 50% 50% 0;background:transparent;transform:rotate(-45deg);left:50%;top:50%;margin:-4px 0 0}.ico-pin.after{content:\"\";width:14px;height:14px;margin:8px 0 0 8px;background:transparent;border-radius:50%}.ico-pin-search{width:18px;height:18px;border-radius:50% 50% 50% 0;transform:rotate(-45deg);background-color:#696969}.ico-pin-search:before{content:\"\";position:absolute;left:5px;top:6px;width:7px;height:7px;border-radius:4px;background-color:#fff}.ico-dot-available{height:12px;width:12px;background-color:#41c29c;border-radius:50%;margin-right:8px}.ico-dot-unavailable{height:12px;width:12px;background-color:#da3635;border-radius:50%;margin-right:8px}.ico-dot-unknown{height:12px;width:12px;background-color:#bdbdbd;border-radius:50%;margin-right:8px}.ico-marker-pin{width:30px;height:30px;border-radius:50% 50% 50% 0;background:#da3635;position:absolute;transform:rotate(-45deg);left:50%;top:50%;margin:-15px 0 0 -15px}.ico-marker-pin.selected{background:#da3635}.ico-marker-pin:after{content:\"\";width:10px;height:10px;margin:10px 0 0 10px;background:#fff;position:absolute;border-radius:50%}.ico-marker-pin-sm{width:18px;height:18px;border-radius:50% 50% 50% 0;background:#696969;transform:rotate(-45deg);margin:0 4px}.ico-marker-pin-sm.absolute{position:absolute;margin:0}.ico-marker-pin-sm:after{content:\"\";width:7px;height:7px;margin:6px 0 0 5px;background:#f8f8f8;position:absolute;border-radius:50%}.ico-profile .head{width:12px;height:12px;border-radius:25px;border:2px solid #333333}.ico-profile .body{width:28px;height:10px;border-radius:20px 20px 0 0;border-top:2px solid #333333;border-right:2px solid #333333;border-left:2px solid #333333}.ico-close .mdiv{height:10px;width:2px;margin-left:5px;background-color:#696969;transform:rotate(45deg);z-index:1}.ico-close .md{height:10px;width:2px;background-color:#696969;transform:rotate(90deg);z-index:2}.ico-close-search{width:16px;height:16px;display:inline-block;vertical-align:middle}.ico-close-search:before{transform:rotate(45deg)}.ico-close-search:after{transform:rotate(-45deg)}.ico-close-search:before,.ico-close-search:after{position:absolute;content:\"\";height:16px;width:2px;background-color:#bdbdbd}.ic-arrow-left{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs, 1));width:22px;height:22px}.ic-arrow-left:after,.ic-arrow-left:before{content:\"\";display:block;box-sizing:border-box;position:absolute;left:3px}.ic-arrow-left:after{width:8px;height:8px;border-bottom:2px solid;border-left:2px solid;transform:rotate(45deg);bottom:7px}.ic-arrow-left:before{width:16px;height:2px;bottom:10px;background:currentColor}.ic-print{width:.68em;height:1em;border-style:solid;border-color:currentcolor;background-color:transparent;border-width:.07em;border-radius:.05em;margin:0 .16em}.ic-print:before{width:1em;height:.4em;border-width:.07em .21em 0;border-style:solid;border-color:currentColor currentcolor transparent;border-radius:.05em .05em 0 0;top:.25em;left:50%;transform:translate(-50%);background-image:linear-gradient(transparent 20%,currentcolor 20%,currentcolor 60%,transparent 60%)}.ic-print:after{width:.45em;height:.065em;background-color:currentColor;left:50%;transform:translate(-50%);top:.6em;box-shadow:0 .12em,-.1em -.28em 0 .05em}.ic-mail,.ic-mail:after{display:block;box-sizing:border-box;height:14px;border:2px solid}.ic-mail{color:#4f4f4f;overflow:hidden;transform:scale(var(--ggs, 1));position:absolute;width:18px;border-radius:2px}.ic-mail:after{content:\"\";position:absolute;border-radius:3px;width:14px;transform:rotate(-45deg);bottom:3px;left:0}.ic-phone{color:#4f4f4f;box-sizing:border-box;position:absolute;display:block;width:22px;height:22px;transform:scale(var(--ggs, 1))}.ic-phone:after,.ic-phone:before{content:\"\";display:block;box-sizing:border-box;position:absolute}.ic-phone:after{width:18px;height:18px;border-top-left-radius:1px;border-bottom-right-radius:1px;border-bottom-left-radius:12px;border-left:4px solid;border-bottom:4px solid;left:2px;bottom:2px;background:linear-gradient(to left,currentColor 10px,transparent 0) no-repeat right 11px/6px 4px,linear-gradient(to left,currentColor 10px,transparent 0) no-repeat -1px 0/4px 6px}.ic-phone:before{width:20px;height:20px;border:6px double;border-top-color:transparent;border-bottom-color:transparent;border-left-color:transparent;border-radius:50%;transform:rotate(-45deg);bottom:2px;left:2px}.ic-mouse{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs, 1));width:16px;height:24px;border:2px solid;border-radius:10px}.ic-mouse:after{content:\"\";display:block;box-sizing:border-box;position:absolute;border-radius:3px;width:2px;height:6px;background:currentColor;top:3px;left:5px}.ic-wifi{color:#000;position:absolute;margin-left:7px;margin-top:13px;width:6px;height:6px;border-radius:50%;border-top:solid 1px currentColor;border-right:solid 1px transparent;border-bottom:solid 1px transparent;border-left:solid 1px transparent}.ic-wifi:before{content:\"\";position:absolute;left:-5px;top:-5px;width:14px;height:14px;border-radius:50%;border-top:solid 1px currentColor;border-right:solid 1px transparent;border-bottom:solid 1px transparent;border-left:solid 1px transparent}.ic-wifi:after{content:\"\";position:absolute;left:-9px;top:-9px;width:22px;height:22px;border-radius:50%;border-top:solid 1px currentColor;border-right:solid 1px transparent;border-bottom:solid 1px transparent;border-left:solid 1px transparent}.ic-screen{box-sizing:border-box;position:absolute;display:block;transform:scale(var(--ggs, 1));width:22px;height:14px;border:2px solid;border-radius:3px;margin-top:-4px}.ic-screen:after,.ic-screen:before{content:\"\";display:block;box-sizing:border-box;position:absolute;border-radius:3px;width:10px;height:2px;background:currentColor;top:14px;left:4px}.ic-screen:before{width:2px;height:6px;top:10px;left:8px}.ic-globe-alt,.ic-globe-alt:after,.ic-globe-alt:before{color:#4f4f4f;display:block;box-sizing:border-box;height:18px;border:2px solid}.ic-globe-alt{position:absolute;transform:scale(var(--ggs, 1));width:18px;border-radius:22px}.ic-globe-alt:after,.ic-globe-alt:before{content:\"\";position:absolute;width:8px;border-radius:100%;top:-2px;left:3px}.ic-globe-alt:after{width:24px;height:20px;border:2px solid transparent;border-bottom:2px solid;top:-11px;left:-5px}.ic-camera{box-sizing:border-box;position:absolute;display:block;transform:scale(var(--ggs, 1));border:2px solid;border-radius:3px;width:18px;height:12px;perspective:24px}.ic-camera:after,.ic-camera:before{content:\"\";display:block;box-sizing:border-box;position:absolute}.ic-camera:before{border:2px solid;border-left-color:transparent;transform:rotateY(-70deg);width:8px;height:8px;right:-7px;top:0}.ic-camera:after{width:10px;height:5px;border-top:2px solid;border-right:2px solid;top:-5px;right:2px;border-top-right-radius:2px}.ic-calendar-today{box-sizing:border-box;position:absolute;display:block;transform:scale(var(--ggs, 1));width:18px;height:18px;border:2px solid;border-top:4px solid;border-radius:3px}.ic-calendar-today:before{content:\"\";display:block;box-sizing:border-box;position:absolute;background:currentColor;height:4px;width:4px;border-radius:2px;right:2px;bottom:2px}.ic-user{display:block;position:absolute;transform:scale(var(--ggs, 1));box-sizing:border-box;width:12px;height:18px}.ic-user:after,.ic-user:before{content:\"\";display:block;box-sizing:border-box;position:absolute;border:2px solid}.ic-user:before{width:8px;height:8px;border-radius:30px;top:0;left:2px}.ic-user:after{width:12px;height:9px;border-bottom:0;border-top-left-radius:3px;border-top-right-radius:3px;top:9px}.ico-close-details{width:44px;height:44px;border-radius:44px;display:flex;justify-content:center;align-items:center;opacity:.8;cursor:pointer}.ico-close-details:before,.ico-close-details:after{content:\"\";width:24px;height:2px;background-color:#333;position:absolute;border-radius:1px}.ico-close-details:hover{background-color:#f4f4f4}.ico-close-details:before{transform:rotate(45deg)}.ico-close-details:after{transform:rotate(-45deg)}.ico-menu,.ico-menu:before,.ico-menu:after{cursor:pointer;border-radius:1px;height:2px;width:23px;background:#000000;position:absolute;display:block;content:\"\"}.ico-menu:before{top:-6px}.ico-menu:after{bottom:-6px}.ico-gg-eye-alt{position:relative;display:block;transform:scale(var(--ggs, 1));width:24px;height:18px;border-bottom-right-radius:100px;border-bottom-left-radius:100px;overflow:hidden;box-sizing:border-box}.ico-gg-eye-alt:after,.ico-gg-eye-alt:before{content:\"\";display:block;border-radius:100px;position:absolute;box-sizing:border-box}.ico-gg-eye-alt:after{top:2px;box-shadow:inset 0 -8px 0 2px #696969,inset 0 0 0 2px #696969;width:24px;height:24px}.ico-gg-eye-alt:before{width:8px;height:8px;border:2px solid #696969;bottom:4px;left:8px;background-color:#696969}.ico-gg-add{box-sizing:border-box;position:relative;display:block;color:#47c562;width:32px;height:32px}.ico-gg-add:after,.ico-gg-add:before{content:\"\";display:block;box-sizing:border-box;position:absolute;width:14px;height:2px;background:currentColor;border-radius:5px;top:8px;left:0px}.ico-gg-add:after{width:2px;height:14px;top:2px;left:6px}.gg-eye-alt{position:relative;display:block;width:18px;height:12px;border-bottom-right-radius:100px;border-bottom-left-radius:100px;overflow:hidden;box-sizing:border-box}.gg-eye-alt:after,.gg-eye-alt:before{content:\"\";display:block;border-radius:100px;position:absolute;box-sizing:border-box}.gg-eye-alt:after{top:2px;box-shadow:inset 0 -8px 0 2px,inset 0 0 0 2px;width:18px;height:18px}.gg-eye-alt:before{width:2px;height:2px;border:2px solid black;bottom:3px;left:7px;background-color:#000}.ico-gg-check{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs, 1));width:22px;height:22px;border:1px solid transparent;border-radius:100px;color:#fff}.ico-gg-check:after{content:\"\";display:block;box-sizing:border-box;position:absolute;left:5px;top:-3px;width:7px;height:12px;border-width:0 2px 2px 0;border-style:solid;transform-origin:bottom left;transform:rotate(45deg);color:#fff}html,body,p,span,label,h1,h2,h3,h4,h5,h6,.card-header-text,.welcome-message,.user-name,.profile-user-name,.project-name,.annuaire-label,.event_title,.objective_title{font-family:Lato,Helvetica,sans-serif}.btn-primary{background:#da3635;border-radius:4px;outline:none;cursor:pointer;color:#fff;height:40px;width:192px;font-family:Lato,Helvetica,sans-serif;font-style:normal;font-weight:700;font-size:1em;line-height:18px;stroke:#fff;border:1px solid #333333}.btn-primary.small{width:149px}.btn-primary.invalid{opacity:.4}.btn-primary:focus{background:white;color:#da3635;border:1px solid #da3635;stroke:#da3635}.btn-grid{display:inline-flex;flex-wrap:wrap;gap:8px}.tags-cloud{font-style:normal;justify-content:center;align-items:center;height:28px;border-radius:20px;padding:5px 15px;color:#fff;border-style:none;margin-top:5px;background:#333333}.tags-cloud.unchecked{background:#bdbdbd}#map{height:100%}::ng-deep .leaflet-popup-close-button{display:none}::ng-deep .leaflet-left{right:0;left:unset}::ng-deep .leaflet-left .leaflet-control{margin-left:0;margin-right:10px;border:none;box-shadow:0 2px 8px #00000040}::ng-deep .leaflet-left .leaflet-control.leaflet-bar a:first-child{border-top-left-radius:8px;border-top-right-radius:8px}::ng-deep .leaflet-left .leaflet-control.leaflet-bar a:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}::ng-deep .leaflet-control-zoom a{color:#333;opacity:.55}::ng-deep .leaflet-control-zoom a:hover{opacity:1}::ng-deep .leaflet-marker-icon:hover{z-index:599!important}::ng-deep .leaflet-marker-icon:hover svg{fill:#b85959}::ng-deep .leaflet-marker-icon:hover svg.mdm{fill:#bd9e6a}::ng-deep .leaflet-marker-icon:hover svg.france-service{fill:#da3635}::ng-deep .leaflet-popup{border-radius:6px;bottom:-15px!important}::ng-deep .leaflet-popup h1{color:#333;font-family:Lato,Helvetica,sans-serif;font-style:normal;font-weight:700;font-size:1.25em;font-size:18px;margin:0}::ng-deep .leaflet-popup p{color:#696969;font-family:Lato,Helvetica,sans-serif;font-style:normal;font-weight:400;font-size:1em;font-size:16px;margin:0 0 13px;font-style:italic}::ng-deep .leaflet-popup .pop-up{text-align:center;padding-top:20px}::ng-deep .leaflet-popup .pop-up.orientation{padding:0;text-align:-webkit-center}::ng-deep .leaflet-popup .pop-up button{background:#da3635;height:36px;color:#fff;padding:4px 37px;border-radius:4px;outline:none;border:1px solid transparent;cursor:pointer;font-weight:400;font-size:.813em;line-break:18px;font-family:Lato,Helvetica,sans-serif;font-style:normal;font-weight:700;font-size:.875em;font-size:16px}::ng-deep .leaflet-popup .pop-up .orientationButton{display:flex;padding:10px 20px;border-radius:20px;margin:0 4px;color:#000;background-color:#fff;border:solid 1px #696969;min-width:120px}::ng-deep .leaflet-popup span{margin-right:4px}::ng-deep .leaflet-popup span.eye{margin-right:11px}::ng-deep .leaflet-popup-content-wrapper{border-radius:6px}::ng-deep .leaflet-popup-content{width:240px}::ng-deep .leaflet-popup-tip-container{display:none}@media print{.map-wrapper{display:none}}.body-wrap{height:400px}::ng-deep .on-top-marker{z-index:600!important}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.LeafletDirective, selector: "[leaflet]", inputs: ["leafletFitBoundsOptions", "leafletPanOptions", "leafletZoomOptions", "leafletZoomPanOptions", "leafletOptions", "leafletZoom", "leafletCenter", "leafletFitBounds", "leafletMaxBounds", "leafletMinZoom", "leafletMaxZoom"], outputs: ["leafletMapReady", "leafletZoomChange", "leafletCenterChange", "leafletClick", "leafletDoubleClick", "leafletMouseDown", "leafletMouseUp", "leafletMouseMove", "leafletMouseOver", "leafletMouseOut", "leafletMapMove", "leafletMapMoveStart", "leafletMapMoveEnd", "leafletMapZoom", "leafletMapZoomStart", "leafletMapZoomEnd"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MapComponent, decorators: [{
type: Component,
args: [{ selector: 'app-map', providers: [MapService], template: "<div\n id=\"map\"\n class=\"body-wrap\"\n [ngClass]=\"{ orientation: isOrientationForm }\"\n leaflet\n [leafletOptions]=\"mapOptions\"\n (leafletMapReady)=\"onMapReady($event)\"></div>\n", styles: [".ico-mglass{position:relative;display:inline-block;background:transparent;border-radius:30px;border:2px solid #333333;height:12px;width:12px;min-width:12px;max-width:12px}.ico-mglass:after{content:\"\";height:2px;width:8px;background:#333333;position:absolute;top:14px;left:10px;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg)}.ico-pin{width:20px;height:20px;max-width:20px;max-height:20px;border-radius:50% 50% 50% 0;background:transparent;transform:rotate(-45deg);left:50%;top:50%;margin:-4px 0 0}.ico-pin.after{content:\"\";width:14px;height:14px;margin:8px 0 0 8px;background:transparent;border-radius:50%}.ico-pin-search{width:18px;height:18px;border-radius:50% 50% 50% 0;transform:rotate(-45deg);background-color:#696969}.ico-pin-search:before{content:\"\";position:absolute;left:5px;top:6px;width:7px;height:7px;border-radius:4px;background-color:#fff}.ico-dot-available{height:12px;width:12px;background-color:#41c29c;border-radius:50%;margin-right:8px}.ico-dot-unavailable{height:12px;width:12px;background-color:#da3635;border-radius:50%;margin-right:8px}.ico-dot-unknown{height:12px;width:12px;background-color:#bdbdbd;border-radius:50%;margin-right:8px}.ico-marker-pin{width:30px;height:30px;border-radius:50% 50% 50% 0;background:#da3635;position:absolute;transform:rotate(-45deg);left:50%;top:50%;margin:-15px 0 0 -15px}.ico-marker-pin.selected{background:#da3635}.ico-marker-pin:after{content:\"\";width:10px;height:10px;margin:10px 0 0 10px;background:#fff;position:absolute;border-radius:50%}.ico-marker-pin-sm{width:18px;height:18px;border-radius:50% 50% 50% 0;background:#696969;transform:rotate(-45deg);margin:0 4px}.ico-marker-pin-sm.absolute{position:absolute;margin:0}.ico-marker-pin-sm:after{content:\"\";width:7px;height:7px;margin:6px 0 0 5px;background:#f8f8f8;position:absolute;border-radius:50%}.ico-profile .head{width:12px;height:12px;border-radius:25px;border:2px solid #333333}.ico-profile .body{width:28px;height:10px;border-radius:20px 20px 0 0;border-top:2px solid #333333;border-right:2px solid #333333;border-left:2px solid #333333}.ico-close .mdiv{height:10px;width:2px;margin-left:5px;background-color:#696969;transform:rotate(45deg);z-index:1}.ico-close .md{height:10px;width:2px;background-color:#696969;transform:rotate(90deg);z-index:2}.ico-close-search{width:16px;height:16px;display:inline-block;vertical-align:middle}.ico-close-search:before{transform:rotate(45deg)}.ico-close-search:after{transform:rotate(-45deg)}.ico-close-search:before,.ico-close-search:after{position:absolute;content:\"\";height:16px;width:2px;background-color:#bdbdbd}.ic-arrow-left{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs, 1));width:22px;height:22px}.ic-arrow-left:after,.ic-arrow-left:before{content:\"\";display:block;box-sizing:border-box;position:absolute;left:3px}.ic-arrow-left:after{width:8px;height:8px;border-bottom:2px solid;border-left:2px solid;transform:rotate(45deg);bottom:7px}.ic-arrow-left:before{width:16px;height:2px;bottom:10px;background:currentColor}.ic-print{width:.68em;height:1em;border-style:solid;border-color:currentcolor;background-color:transparent;border-width:.07em;border-radius:.05em;margin:0 .16em}.ic-print:before{width:1em;height:.4em;border-width:.07em .21em 0;border-style:solid;border-color:currentColor currentcolor transparent;border-radius:.05em .05em 0 0;top:.25em;left:50%;transform:translate(-50%);background-image:linear-gradient(transparent 20%,currentcolor 20%,currentcolor 60%,transparent 60%)}.ic-print:after{width:.45em;height:.065em;background-color:currentColor;left:50%;transform:translate(-50%);top:.6em;box-shadow:0 .12em,-.1em -.28em 0 .05em}.ic-mail,.ic-mail:after{display:block;box-sizing:border-box;height:14px;border:2px solid}.ic-mail{color:#4f4f4f;overflow:hidden;transform:scale(var(--ggs, 1));position:absolute;width:18px;border-radius:2px}.ic-mail:after{content:\"\";position:absolute;border-radius:3px;width:14px;transform:rotate(-45deg);bottom:3px;left:0}.ic-phone{color:#4f4f4f;box-sizing:border-box;position:absolute;display:block;width:22px;height:22px;transform:scale(var(--ggs, 1))}.ic-phone:after,.ic-phone:before{content:\"\";display:block;box-sizing:border-box;position:absolute}.ic-phone:after{width:18px;height:18px;border-top-left-radius:1px;border-bottom-right-radius:1px;border-bottom-left-radius:12px;border-left:4px solid;border-bottom:4px solid;left:2px;bottom:2px;background:linear-gradient(to left,currentColor 10px,transparent 0) no-repeat right 11px/6px 4px,linear-gradient(to left,currentColor 10px,transparent 0) no-repeat -1px 0/4px 6px}.ic-phone:before{width:20px;height:20px;border:6px double;border-top-color:transparent;border-bottom-color:transparent;border-left-color:transparent;border-radius:50%;transform:rotate(-45deg);bottom:2px;left:2px}.ic-mouse{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs, 1));width:16px;height:24px;border:2px solid;border-radius:10px}.ic-mouse:after{content:\"\";display:block;box-sizing:border-box;position:absolute;border-radius:3px;width:2px;height:6px;background:currentColor;top:3px;left:5px}.ic-wifi{color:#000;position:absolute;margin-left:7px;margin-top:13px;width:6px;height:6px;border-radius:50%;border-top:solid 1px currentColor;border-right:solid 1px transparent;border-bottom:solid 1px transparent;border-left:solid 1px transparent}.ic-wifi:before{content:\"\";position:absolute;left:-5px;top:-5px;width:14px;height:14px;border-radius:50%;border-top:solid 1px currentColor;border-right:solid 1px transparent;border-bottom:solid 1px transparent;border-left:solid 1px transparent}.ic-wifi:after{content:\"\";position:absolute;left:-9px;top:-9px;width:22px;height:22px;border-radius:50%;border-top:solid 1px currentColor;border-right:solid 1px transparent;border-bottom:solid 1px transparent;border-left:solid 1px transparent}.ic-screen{box-sizing:border-box;position:absolute;display:block;transform:scale(var(--ggs, 1));width:22px;height:14px;border:2px solid;border-radius:3px;margin-top:-4px}.ic-screen:after,.ic-screen:before{content:\"\";display:block;box-sizing:border-box;position:absolute;border-radius:3px;width:10px;height:2px;background:currentColor;top:14px;left:4px}.ic-screen:before{width:2px;height:6px;top:10px;left:8px}.ic-globe-alt,.ic-globe-alt:after,.ic-globe-alt:before{color:#4f4f4f;display:block;box-sizing:border-box;height:18px;border:2px solid}.ic-globe-alt{position:absolute;transform:scale(var(--ggs, 1));width:18px;border-radius:22px}.ic-globe-alt:after,.ic-globe-alt:before{content:\"\";position:absolute;width:8px;border-radius:100%;top:-2px;left:3px}.ic-globe-alt:after{width:24px;height:20px;border:2px solid transparent;border-bottom:2px solid;top:-11px;left:-5px}.ic-camera{box-sizing:border-box;position:absolute;display:block;transform:scale(var(--ggs, 1));border:2px solid;border-radius:3px;width:18px;height:12px;perspective:24px}.ic-camera:after,.ic-camera:before{content:\"\";display:block;box-sizing:border-box;position:absolute}.ic-camera:before{border:2px solid;border-left-color:transparent;transform:rotateY(-70deg);width:8px;height:8px;right:-7px;top:0}.ic-camera:after{width:10px;height:5px;border-top:2px solid;border-right:2px solid;top:-5px;right:2px;border-top-right-radius:2px}.ic-calendar-today{box-sizing:border-box;position:absolute;display:block;transform:scale(var(--ggs, 1));width:18px;height:18px;border:2px solid;border-top:4px solid;border-radius:3px}.ic-calendar-today:before{content:\"\";display:block;box-sizing:border-box;position:absolute;background:currentColor;height:4px;width:4px;border-radius:2px;right:2px;bottom:2px}.ic-user{display:block;position:absolute;transform:scale(var(--ggs, 1));box-sizing:border-box;width:12px;height:18px}.ic-user:after,.ic-user:before{content:\"\";display:block;box-sizing:border-box;position:absolute;border:2px solid}.ic-user:before{width:8px;height:8px;border-radius:30px;top:0;left:2px}.ic-user:after{width:12px;height:9px;border-bottom:0;border-top-left-radius:3px;border-top-right-radius:3px;top:9px}.ico-close-details{width:44px;height:44px;border-radius:44px;display:flex;justify-content:center;align-items:center;opacity:.8;cursor:pointer}.ico-close-details:before,.ico-close-details:after{content:\"\";width:24px;height:2px;background-color:#333;position:absolute;border-radius:1px}.ico-close-details:hover{background-color:#f4f4f4}.ico-close-details:before{transform:rotate(45deg)}.ico-close-details:after{transform:rotate(-45deg)}.ico-menu,.ico-menu:before,.ico-menu:after{cursor:pointer;border-radius:1px;height:2px;width:23px;background:#000000;position:absolute;display:block;content:\"\"}.ico-menu:before{top:-6px}.ico-menu:after{bottom:-6px}.ico-gg-eye-alt{position:relative;display:block;transform:scale(var(--ggs, 1));width:24px;height:18px;border-bottom-right-radius:100px;border-bottom-left-radius:100px;overflow:hidden;box-sizing:border-box}.ico-gg-eye-alt:after,.ico-gg-eye-alt:before{content:\"\";display:block;border-radius:100px;position:absolute;box-sizing:border-box}.ico-gg-eye-alt:after{top:2px;box-shadow:inset 0 -8px 0 2px #696969,inset 0 0 0 2px #696969;width:24px;height:24px}.ico-gg-eye-alt:before{width:8px;height:8px;border:2px solid #696969;bottom:4px;left:8px;background-color:#696969}.ico-gg-add{box-sizing:border-box;position:relative;display:block;color:#47c562;width:32px;height:32px}.ico-gg-add:after,.ico-gg-add:before{content:\"\";display:block;box-sizing:border-box;position:absolute;width:14px;height:2px;background:currentColor;border-radius:5px;top:8px;left:0px}.ico-gg-add:after{width:2px;height:14px;top:2px;left:6px}.gg-eye-alt{position:relative;display:block;width:18px;height:12px;border-bottom-right-radius:100px;border-bottom-left-radius:100px;overflow:hidden;box-sizing:border-box}.gg-eye-alt:after,.gg-eye-alt:before{content:\"\";display:block;border-radius:100px;position:absolute;box-sizing:border-box}.gg-eye-alt:after{top:2px;box-shadow:inset 0 -8px 0 2px,inset 0 0 0 2px;width:18px;height:18px}.gg-eye-alt:before{width:2px;height:2px;border:2px solid black;bottom:3px;left:7px;background-color:#000}.ico-gg-check{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs, 1));width:22px;height:22px;border:1px solid transparent;border-radius:100px;color:#fff}.ico-gg-check:after{content:\"\";display:block;box-sizing:border-box;position:absolute;left:5px;top:-3px;width:7px;height:12px;border-width:0 2px 2px 0;border-style:solid;transform-origin:bottom left;transform:rotate(45deg);color:#fff}html,body,p,span,label,h1,h2,h3,h4,h5,h6,.card-header-text,.welcome-message,.user-name,.profile-user-name,.project-name,.annuaire-label,.event_title,.objective_title{font-family:Lato,Helvetica,sans-serif}.btn-primary{background:#da3635;border-radius:4px;outline:none;cursor:pointer;color:#fff;height:40px;width:192px;font-family:Lato,Helvetica,sans-serif;font-style:normal;font-weight:700;font-size:1em;line-height:18px;stroke:#fff;border:1px solid #333333}.btn-primary.small{width:149px}.btn-primary.invalid{opacity:.4}.btn-primary:focus{background:white;color:#da3635;border:1px solid #da3635;stroke:#da3635}.btn-grid{display:inline-flex;flex-wrap:wrap;gap:8px}.tags-cloud{font-style:normal;justify-content:center;align-items:center;height:28px;border-radius:20px;padding:5px 15px;color:#fff;border-style:none;margin-top:5px;background:#333333}.tags-cloud.unchecked{background:#bdbdbd}#map{height:100%}::ng-deep .leaflet-popup-close-button{display:none}::ng-deep .leaflet-left{right:0;left:unset}::ng-deep .leaflet-left .leaflet-control{margin-left:0;margin-right:10px;border:none;box-shadow:0 2px 8px #00000040}::ng-deep .leaflet-left .leaflet-control.leaflet-bar a:first-child{border-top-left-radius:8px;border-top-right-radius:8px}::ng-deep .leaflet-left .leaflet-control.leaflet-bar a:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}::ng-deep .leaflet-control-zoom a{color:#333;opacity:.55}::ng-deep .leaflet-control-zoom a:hover{opacity:1}::ng-deep .leaflet-marker-icon:hover{z-index:599!important}::ng-deep .leaflet-marker-icon:hover svg{fill:#b85959}::ng-deep .leaflet-marker-icon:hover svg.mdm{fill:#bd9e6a}::ng-deep .leaflet-marker-icon:hover svg.france-service{fill:#da3635}::ng-deep .leaflet-popup{border-radius:6px;bottom:-15px!important}::ng-deep .leaflet-popup h1{color:#333;font-family:Lato,Helvetica,sans-serif;font-style:normal;font-weight:700;font-size:1.25em;font-size:18px;margin:0}::ng-deep .leaflet-popup p{color:#696969;font-family:Lato,Helvetica,sans-serif;font-style:normal;font-weight:400;font-size:1em;font-size:16px;margin:0 0 13px;font-style:italic}::ng-deep .leaflet-popup .pop-up{text-align:center;padding-top:20px}::ng-deep .leaflet-popup .pop-up.orientation{padding:0;text-align:-webkit-center}::ng-deep .leaflet-popup .pop-up button{background:#da3635;height:36px;color:#fff;padding:4px 37px;border-radius:4px;outline:none;border:1px solid transparent;cursor:pointer;font-weight:400;font-size:.813em;line-break:18px;font-family:Lato,Helvetica,sans-serif;font-style:normal;font-weight:700;font-size:.875em;font-size:16px}::ng-deep .leaflet-popup .pop-up .orientationButton{display:flex;padding:10px 20px;border-radius:20px;margin:0 4px;color:#000;background-color:#fff;border:solid 1px #696969;min-width:120px}::ng-deep .leaflet-popup span{margin-right:4px}::ng-deep .leaflet-popup span.eye{margin-right:11px}::ng-deep .leaflet-popup-content-wrapper{border-radius:6px}::ng-deep .leaflet-popup-content{width:240px}::ng-deep .leaflet-popup-tip-container{display:none}@media print{.map-wrapper{display:none}}.body-wrap{height:400px}::ng-deep .on-top-marker{z-index:600!important}\n"] }]
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
type: Inject,
args: [GEOMETRY_POLYGON_TOKEN]
}] }, { type: undefined, decorators: [{
type: Inject,
args: [MARKER_TYPE_TOKEN]
}] }, { type: undefined, decorators: [{
type: Inject,
args: [ZOOM_LEVEL_TOKEN]
}] }, { type: undefined, decorators: [{
type: Inject,
args: [INITIAL_POSITION_TOKEN]
}] }, { type: undefined, decorators: [{
type: Inject,
args: [GEO_JSON_TOKEN]
}] }, { type: i1.MapService }]; }, propDecorators: { isOrientationForm: [{
type: Input
}], structures: [{
type: Input
}], structuresToPrint: [{
type: Input
}], toogleToolTipId: [{
type: Input
}], selectedMarkerId: [{
type: Input
}], isMapPhone: [{
type: Input
}], searchedValue: [{
type: Input
}], selectedStructure: [{
type: Output
}], orientationButtonClick: [{
type: Output
}], clickout: [{
type: HostListener,
args: ['document:click', ['$event']]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL0Bnb3V2ZnItYW5jdC9tZWRpYXRpb24tbnVtZXJpcXVlL3NyYy9saWIvbWFwL2NvbXBvbmVudHMvbWFwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL0Bnb3V2ZnItYW5jdC9tZWRpYXRpb24tbnVtZXJpcXVlL3NyYy9saWIvbWFwL2NvbXBvbmVudHMvbWFwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDdkgsT0FBTyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBbUIsU0FBUyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3JGLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBZ0Msc0JBQXNCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUMzSCxPQUFPLEVBQWdDLHNCQUFzQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDM0gsT0FBTyxFQUEyQixpQkFBaUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQzVHLE9BQU8sRUFBMEIsZ0JBQWdCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUd6RyxPQUFPLEVBQXFCLGNBQWMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7O0FBUTNDLE1BQU0sT0FBTyxZQUFZO0lBNEJ2QixZQUVtQixTQUF1QyxFQUV2QyxVQUFtQyxFQUVuQyxTQUFpQyxFQUVqQyxlQUE2QyxFQUNyQixjQUFpQyxFQUN6RCxVQUFzQjtRQVJ0QixjQUFTLEdBQVQs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