From 2466bff42ae28a862f1b27ec361666daae3999f9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timoth=C3=A9e=20Poussard?= <tpoussard@neogeo.fr>
Date: Wed, 19 Jan 2022 18:27:11 +0100
Subject: [PATCH] remove project getter and project_slug var, fix feature_edit
 & basemaps

---
 src/store/modules/feature.store.js                | 10 +++++-----
 src/store/modules/map.store.js                    |  2 +-
 src/store/modules/projects.store.js               | 11 ++---------
 src/views/feature/Feature_detail.vue              |  2 +-
 src/views/feature/Feature_edit.vue                |  6 ++++--
 src/views/feature/Feature_list.vue                |  2 +-
 src/views/feature_type/Feature_type_symbology.vue |  2 +-
 src/views/project/Project_members.vue             |  5 +++--
 8 files changed, 18 insertions(+), 22 deletions(-)

diff --git a/src/store/modules/feature.store.js b/src/store/modules/feature.store.js
index 29d1dcb5..3039126b 100644
--- a/src/store/modules/feature.store.js
+++ b/src/store/modules/feature.store.js
@@ -183,7 +183,7 @@ const feature = {
         dispatch(
           'GET_PROJECT_FEATURE',
           {
-            project_slug: rootState.project.project_slug,
+            project_slug: rootState.projects.project.slug,
             feature_id: featureId
           }
         )
@@ -220,7 +220,7 @@ const feature = {
             title: state.form.title,
             description: state.form.description.value,
             status: state.form.status.value,
-            project: rootState.project_slug,
+            project: rootState.projects.project.slug,
             feature_type: rootState.feature_type.current_feature_type_slug,
             ...extraFormObject
           }
@@ -232,7 +232,7 @@ const feature = {
       if (routeName === 'editer-signalement') {
         url += `${state.form.feature_id}/?
         feature_type__slug=${rootState.feature_type.current_feature_type_slug} 
-        &project__slug=${rootState.project_slug}`;
+        &project__slug=${rootState.projects.project.slug}`;
       }
 
       return axios({
@@ -259,7 +259,7 @@ const feature = {
               arraysOffline = JSON.parse(localStorageArray);
             }
             let updateMsg = {
-              project: rootState.project_slug,
+              project: rootState.projects.project.slug,
               type: routeName === 'editer-signalement' ? 'put' : 'post',
               featureId: state.form.feature_id,
               geojson: geojson
@@ -375,7 +375,7 @@ const feature = {
     DELETE_FEATURE({ rootState }, feature_id) {
       const url = `${rootState.configuration.VUE_APP_DJANGO_API_BASE}features/${feature_id}/?` +
         `feature_type__slug=${rootState.feature_type.current_feature_type_slug}` +
-        `&project__slug=${rootState.project_slug}`;
+        `&project__slug=${rootState.projects.project.slug}`;
       return axios
         .delete(url)
         .then((response) => response)
diff --git a/src/store/modules/map.store.js b/src/store/modules/map.store.js
index 302ea3cf..ea0b884b 100644
--- a/src/store/modules/map.store.js
+++ b/src/store/modules/map.store.js
@@ -157,7 +157,7 @@ const map = {
     async SAVE_BASEMAPS({ state, rootState, dispatch }, newBasemapIds) {
       const DJANGO_API_BASE = this.state.configuration.VUE_APP_DJANGO_API_BASE;
       function postOrPut(basemap) {
-        basemap['project'] = rootState.project_slug;
+        basemap['project'] = rootState.projects.project.slug;
         if (newBasemapIds.includes(basemap.id)) {
           return axios
             .post(`${DJANGO_API_BASE}base-maps/`, basemap)
diff --git a/src/store/modules/projects.store.js b/src/store/modules/projects.store.js
index aef6f6c6..1679664f 100644
--- a/src/store/modules/projects.store.js
+++ b/src/store/modules/projects.store.js
@@ -23,7 +23,6 @@ const projects = {
   },
 
   getters: {
-    project: state => state.projects.find((project) => project.slug === state.project_slug), // todo : delete it
     project_types: state => state.projects.filter(projet => projet.is_project_type),
     project_user: state => state.projects.filter(projet => projet.creator === state.user.id),
   },
@@ -51,10 +50,6 @@ const projects = {
       state.project = project;
     },
 
-    SET_PROJECT_SLUG(state, slug) { // todo : delete it 
-      state.project_slug = slug;
-    },
-
     SET_PROJECTS_FILTER(state, payload) {
       state.filters[payload.filter] = payload.value;
     },
@@ -110,14 +105,12 @@ const projects = {
       commit('SET_PROJECT', project);
     },
 
-    async GET_PROJECT_INFO({ state, commit, dispatch }, slug) {
-      commit('SET_PROJECT_SLUG', slug);
+    async GET_PROJECT_INFO({ rootState, dispatch }, slug) {
       let promises = [
         dispatch('GET_PROJECT_LAST_MESSAGES', slug).then(response => response),
         dispatch('feature_type/GET_PROJECT_FEATURE_TYPES', slug, { root: true }).then(response => response),
-        // dispatch("feature/GET_PROJECT_FEATURES", slug).then(response => response),
       ];
-      if (state.user) promises.push(dispatch('map/GET_BASEMAPS', slug).then(response => response));
+      if (rootState.user) promises.push(dispatch('map/GET_BASEMAPS', slug, { root: true }).then(response => response));
 
       const promiseResult = await Promise.all(promises);
       return promiseResult;
diff --git a/src/views/feature/Feature_detail.vue b/src/views/feature/Feature_detail.vue
index 1567f090..4f7d1f00 100644
--- a/src/views/feature/Feature_detail.vue
+++ b/src/views/feature/Feature_detail.vue
@@ -649,7 +649,7 @@ export default {
       this.$router.push({
         name: 'project_detail',
         params: {
-          slug: this.$store.state.project_slug,
+          slug: this.$route.params.slug,
           message,
         },
       });
diff --git a/src/views/feature/Feature_edit.vue b/src/views/feature/Feature_edit.vue
index 7fc6e51a..64f81a92 100644
--- a/src/views/feature/Feature_edit.vue
+++ b/src/views/feature/Feature_edit.vue
@@ -370,9 +370,10 @@ export default {
   },
 
   computed: {
-    ...mapGetters(['project', 'permissions']),
+    ...mapGetters(['permissions']),
     ...mapGetters('feature_type', ['feature_type']),
     ...mapState(['user', 'USER_LEVEL_PROJECTS']),
+    ...mapState('projects', ['project']),
     ...mapState('map', ['basemaps']),
     ...mapState('feature', [
       'attachmentFormset',
@@ -486,7 +487,8 @@ export default {
 
   mounted() {
     let promises = [
-      this.$store.dispatch('GET_PROJECT_INFO', this.$route.params.slug),
+      this.$store.dispatch('projects/GET_PROJECT_INFO', this.$route.params.slug),
+      this.$store.dispatch('projects/GET_PROJECT', this.$route.params.slug),
     ];
     if (this.$route.params.slug_signal) {
       promises.push(
diff --git a/src/views/feature/Feature_list.vue b/src/views/feature/Feature_list.vue
index 094e4aa9..9d394e7e 100644
--- a/src/views/feature/Feature_list.vue
+++ b/src/views/feature/Feature_list.vue
@@ -533,7 +533,7 @@ export default {
         .then(() => {
           if (!this.modalAllDeleteOpen) {
             this.GET_PROJECT_FEATURES({
-              project_slug: this.project.slug,
+              project_slug: this.$route.params.slug,
             })
               .then(() => {
                 this.fetchPagedFeatures();
diff --git a/src/views/feature_type/Feature_type_symbology.vue b/src/views/feature_type/Feature_type_symbology.vue
index ca88dcd6..d2b101ce 100644
--- a/src/views/feature_type/Feature_type_symbology.vue
+++ b/src/views/feature_type/Feature_type_symbology.vue
@@ -272,7 +272,7 @@ export default {
                 this.$router.push({
                   name: 'project_detail',
                   params: {
-                    slug: this.$store.state.project_slug,
+                    slug: this.$route.params.slug,
                   },
                 });
               }, 1500);
diff --git a/src/views/project/Project_members.vue b/src/views/project/Project_members.vue
index e811df99..b4ac9598 100644
--- a/src/views/project/Project_members.vue
+++ b/src/views/project/Project_members.vue
@@ -128,7 +128,7 @@
 <script>
 import axios from '@/axios-client.js';
 import frag from 'vue-frag';
-import { mapGetters } from 'vuex';
+import { mapState } from 'vuex';
 import Dropdown from '@/components/Dropdown.vue';
 
 export default {
@@ -170,7 +170,7 @@ export default {
   },
 
   computed: {
-    ...mapGetters(['project']),
+    ...mapState('projects', ['project']),
 
     userOptions: function () {
       return this.projectUsers
@@ -226,6 +226,7 @@ export default {
 
   created() {
     if (!this.project) {
+      this.$store.dispatch('GET_PROJECT', this.$route.params.slug);
       this.$store.dispatch('GET_PROJECT_INFO', this.$route.params.slug);
     }
     this.populateMembers();
-- 
GitLab