From bf43fdaa356f08fbc3aa5f65fe8514ac98fde15b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e?= <tpoussard@neogeo.fr> Date: Fri, 29 Apr 2022 17:35:56 +0200 Subject: [PATCH] use router in popup links to avoid website reload --- src/services/map-service.js | 85 +++++++++++++++++++++---------------- 1 file changed, 49 insertions(+), 36 deletions(-) diff --git a/src/services/map-service.js b/src/services/map-service.js index e88fceab..6c37c0b2 100644 --- a/src/services/map-service.js +++ b/src/services/map-service.js @@ -20,6 +20,8 @@ import VectorLayer from 'ol/layer/Vector'; import { fromLonLat } from 'ol/proj.js'; import OverlayPositioning from 'ol/OverlayPositioning'; +import router from '@/router'; + let dictLayersToLeaflet = {}; let statusList = [ @@ -124,18 +126,40 @@ const mapService = { return this.map; }, + + addRouterToPopup(featureTypeSlug, featureId) { + function goToFeatureDetail() { + console.log(featureTypeSlug, featureId); + router.push({ + name: 'details-signalement', + params: { + slug_type_signal: featureTypeSlug, //'1-polygones' + slug_signal: featureId, //'d267c6fa-d676-45c9-8e34-ec3d1bcc7c25' + }, + }); + } + + function goToFeatureTypeDetail() { + router.push({ + name: 'details-type-signalement', + params: { + feature_type_slug: featureTypeSlug, //'1-polygones' + }, + }); + } + document.getElementById('goToFeatureTypeDetail').onclick = goToFeatureTypeDetail; + document.getElementById('goToFeatureDetail').onclick = goToFeatureDetail; + }, + onMapClick(event) { - let self = this; const features = this.map.getFeaturesAtPixel(event.pixel, { - layerFilter(l) { - return l === self.mvtLayer; - }, + layerFilter: (l) => l === this.mvtLayer }); if (features && features.length > 0) { - const popupContent = this._createContentPopup(features[0], - this.mvtLayer.featureTypes, this.mvtLayer.project_slug); - this.content.innerHTML = popupContent; + const popupContent = this._createContentPopup(features[0], this.mvtLayer.featureTypes); + this.content.innerHTML = popupContent.html; this.overlay.setPosition(event.coordinate); + this.addRouterToPopup(popupContent.feature_type.slug, popupContent.featureId); } //const queryableLayerSelected = document.getElementById(`queryable-layers-selector-${this.wmsParams.basemapId}`).getElementsByClassName('selected')[0].textContent; if (this.layers) { @@ -476,7 +500,7 @@ const mapService = { this.map.on(eventName, callback); }, - _createContentPopup: function (feature, featureTypes, project_slug) { + _createContentPopup: function (feature, featureTypes) { const formatDate = (current_datetime) => { let formatted_date = current_datetime.getFullYear() + '-' + ('0' + (current_datetime.getMonth() + 1)).slice(-2) + '-' + ('0' + current_datetime.getDate()).slice(-2) + ' ' + ('0' + current_datetime.getHours()).slice(-2) + ':' + ('0' + current_datetime.getMinutes()).slice(-2); @@ -485,37 +509,24 @@ const mapService = { let feature_type; let status; let date_maj; - let feature_type_url; - let feature_url; if (feature.getProperties) { status = feature.getProperties().status; date_maj = feature.getProperties().updated_on; - feature_type_url = feature.getProperties().feature_type_url; - feature_url = feature.getProperties().feature_url; } else { status = feature.status; date_maj = feature.updated_on; - feature_type_url = feature.feature_type_url; - feature_url = feature.feature_url; } if (featureTypes) { // => VectorTile feature_type = featureTypes.find((x) => x.slug.split('-')[0] === '' + feature.getProperties().feature_type_id); status = statusList.find((x) => x.value === feature.getProperties().status).name; date_maj = formatDate(new Date(feature.getProperties().updated_on)); - feature_type_url = '/geocontrib/projet/' + project_slug + '/type-signalement/' + feature_type.slug + '/'; - feature_url = feature_type_url + 'signalement/' + feature.getProperties().feature_id + '/'; } else { feature_type = feature.getProperties ? feature.getProperties().feature_type : feature.feature_type; status = feature.getProperties ? feature.getProperties().status.label : feature.status.label; } - //* adapt link url for shared-project restricted navigation - if (window.location.pathname.includes('projet-partage')) { - feature_url = feature_url.replace('projet', 'projet-partage'); - feature_type_url = feature_type_url.replace('projet', 'projet-partage'); - } let author = ''; const creator = feature.getProperties ? feature.getProperties().creator : feature.creator; if (creator) { @@ -527,21 +538,23 @@ const mapService = { } const title = feature.getProperties ? feature.getProperties().title : feature.title; - return ` - <h4> - <a href="${feature_url}">${title}</a> - </h4> - <div> - Statut : ${status} - </div> - <div> - Type : <a href="${feature_type_url}"> ${feature_type.title} </a> - </div> - <div> - Dernière mise à jour : ${date_maj} - </div> - ${author} - `; + const html = ` + <h4> + <a id="goToFeatureDetail" class="pointer">${title}</a> + </h4> + <div> + Statut : ${status} + </div> + <div> + Type : <a id="goToFeatureTypeDetail" class="pointer"> ${feature_type.title} </a> + </div> + <div> + Dernière mise à jour : ${date_maj} + </div> + ${author} + `; + const featureId = feature.getProperties ? feature.getProperties().feature_id : feature.id; + return { html, feature_type, featureId }; }, zoomTo(location, zoomlevel, lon, lat) { if (lon && lat) { -- GitLab