From 820a2e258670125294001a26922f83ca1a43aaf4 Mon Sep 17 00:00:00 2001
From: DESPRES Damien <ddespres@neogeo.fr>
Date: Mon, 29 Nov 2021 17:50:13 +0100
Subject: [PATCH] fix #12552

---
 src/components/map-layers/SidebarLayers.vue | 21 ++++++++++++-------
 src/views/feature/Feature_detail.vue        | 10 ++++++---
 src/views/feature/Feature_list.vue          | 23 +++++++++++++++------
 src/views/project/Project_detail.vue        |  6 ++++--
 src/views/project/Project_members.vue       |  2 +-
 5 files changed, 43 insertions(+), 19 deletions(-)

diff --git a/src/components/map-layers/SidebarLayers.vue b/src/components/map-layers/SidebarLayers.vue
index dace42ef..950f41b9 100644
--- a/src/components/map-layers/SidebarLayers.vue
+++ b/src/components/map-layers/SidebarLayers.vue
@@ -220,13 +220,20 @@ export default {
 
     initSortable() {
       this.baseMaps.forEach((basemap) => {
-        new Sortable(document.getElementById(`list-${basemap.id}`), {
-          animation: 150,
-          handle: ".layer-handle-sort", // The element that is active to drag
-          ghostClass: "blue-background-class",
-          dragClass: "white-opacity-background-class",
-          onEnd: this.onlayerMove.bind(this),
-        });
+        let element=document.getElementById(`list-${basemap.id}`);
+        if(element) {
+          new Sortable(element, {
+            animation: 150,
+            handle: ".layer-handle-sort", // The element that is active to drag
+            ghostClass: "blue-background-class",
+            dragClass: "white-opacity-background-class",
+            onEnd: this.onlayerMove.bind(this),
+          });
+        }
+        else{
+          console.error(`list-${basemap.id} not found in dom`)
+        }
+
       });
     },
     // Check if there are changes in the basemaps settings. Changes are detected if:
diff --git a/src/views/feature/Feature_detail.vue b/src/views/feature/Feature_detail.vue
index 62c585a0..a3fbb4e1 100644
--- a/src/views/feature/Feature_detail.vue
+++ b/src/views/feature/Feature_detail.vue
@@ -445,7 +445,6 @@ export default {
       return status ? status.name : "";
     },
   },
-
   filters: {
     formatDate(value) {
       let date = new Date(value);
@@ -685,8 +684,13 @@ export default {
   mounted() {
     this.$store.commit("DISPLAY_LOADER", "Recherche du signalement");
     if (!this.project) {
-      this.$store
-        .dispatch("GET_PROJECT_INFO", this.$route.params.slug)
+      // Chargements des features et infos projet en cas d'arrivée directe sur la page ou de refresh
+      axios.all([
+        this.$store
+        .dispatch("GET_PROJECT_INFO", this.$route.params.slug),
+        this.$store.dispatch('feature/GET_PROJECT_FEATURES', {
+          project_slug: this.$route.params.slug
+        })])
         .then(() => {
           this.$store.commit("DISCARD_LOADER");
           this.initMap();
diff --git a/src/views/feature/Feature_list.vue b/src/views/feature/Feature_list.vue
index 37a7eda3..81110a2b 100644
--- a/src/views/feature/Feature_list.vue
+++ b/src/views/feature/Feature_list.vue
@@ -375,11 +375,13 @@ export default {
       this.zoom = this.$route.query.zoom || "";
       this.lat = this.$route.query.lat || "";
       this.lng = this.$route.query.lng || "";
+      
       var mapDefaultViewCenter =
         this.$store.state.configuration.DEFAULT_MAP_VIEW.center;
       var mapDefaultViewZoom =
         this.$store.state.configuration.DEFAULT_MAP_VIEW.zoom;
 
+      
       this.map = mapUtil.createMap(this.$refs.map, {
         zoom: this.zoom,
         lat: this.lat,
@@ -467,14 +469,23 @@ export default {
     },
   },
 
-  created() {
-    if (!this.project) {
-      this.$store.dispatch("GET_PROJECT_INFO", this.$route.params.slug);
-    }
-  },
 
   mounted() {
-    this.initMap();
+    if (!this.project) {
+      // Chargements des features et infos projet en cas d'arrivée directe sur la page ou de refresh
+      axios.all([
+        this.$store.dispatch("GET_PROJECT_INFO", this.$route.params.slug),
+        this.$store.dispatch('feature/GET_PROJECT_FEATURES', {
+          project_slug: this.$route.params.slug
+        })])
+        .then(() => {
+          this.initMap();
+        });
+    }
+    else {
+      this.initMap();
+    }
+    
   },
 
   destroyed() {
diff --git a/src/views/project/Project_detail.vue b/src/views/project/Project_detail.vue
index a25fec89..2e7066dd 100644
--- a/src/views/project/Project_detail.vue
+++ b/src/views/project/Project_detail.vue
@@ -395,7 +395,7 @@
                     >
                       <div class="content">
                         <div>
-                          <router-link :to="item.related_feature.feature_url"
+                          <router-link :to="getRouteUrl(item.related_feature.feature_url)"
                             >"{{ item.comment }}"</router-link
                           >
                         </div>
@@ -605,7 +605,9 @@ export default {
     refreshId() {
       return "?ver=" + Math.random();
     },
-
+    getRouteUrl(url){
+      return '/'+url.replace(this.$store.state.configuration.BASE_URL,''); // remove duplicate /geocontrib
+    },
     isOffline() {
       return navigator.onLine === false;
     },
diff --git a/src/views/project/Project_members.vue b/src/views/project/Project_members.vue
index 9745e867..aea8f4b1 100644
--- a/src/views/project/Project_members.vue
+++ b/src/views/project/Project_members.vue
@@ -290,7 +290,7 @@ export default {
       // todo: move function to a service
       return axios
         .get(
-          `${this.$store.state.configuration.VUE_APP_DJANGO_API_BASE}projects/${this.$route.params.slug}/utilisateurs`
+          `${this.$store.state.configuration.VUE_APP_DJANGO_API_BASE}projects/${this.$route.params.slug}/utilisateurs/`
         )
         .then((response) => response.data)
         .catch((error) => {
-- 
GitLab