From 0e92850fea2b805c686646ef72659b4b4ebf8914 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timoth=C3=A9e=20Poussard?= <tpoussard@neogeo.fr>
Date: Mon, 11 Oct 2021 12:04:33 +0200
Subject: [PATCH] fix props mutation warning in featureListTable

---
 src/components/feature/FeatureListTable.vue | 12 ++++++++--
 src/store/modules/feature.js                | 26 ++++++++++++---------
 src/views/feature/Feature_list.vue          |  3 +--
 3 files changed, 26 insertions(+), 15 deletions(-)

diff --git a/src/components/feature/FeatureListTable.vue b/src/components/feature/FeatureListTable.vue
index ed7f0dac..c7ebb5c2 100644
--- a/src/components/feature/FeatureListTable.vue
+++ b/src/components/feature/FeatureListTable.vue
@@ -71,8 +71,7 @@
                 type="checkbox"
                 :id="feature.id"
                 :value="feature.id"
-                v-model="checkedFeatures"
-                :checked="checkedFeatures[feature.id]"
+                v-model="checked"
               />
               <label></label>
             </div>
@@ -280,6 +279,15 @@ export default {
       return arr;
     },
 
+    checked: {
+      get() {
+        return this.checkedFeatures;
+      },
+      set(newChecked) {
+        this.$store.commit("feature/UPDATE_CHECKED_FEATURES", newChecked);
+      },
+    },
+
     displayedPageEnd() {
       return this.filteredFeatures.length <= this.pagination.end
         ? this.filteredFeatures.length
diff --git a/src/store/modules/feature.js b/src/store/modules/feature.js
index 974ee922..67079e83 100644
--- a/src/store/modules/feature.js
+++ b/src/store/modules/feature.js
@@ -14,10 +14,11 @@ const feature = {
     attachmentFormset: [],
     attachmentsToDelete: [],
     attachmentsToPut: [],
-    linkedFormset: [],
+    checkedFeatures: [],
+    extra_form: [],
     features: [],
     form: null,
-    extra_form: [],
+    linkedFormset: [],
     linked_features: [],
   },
   mutations: {
@@ -79,6 +80,9 @@ const feature = {
     REMOVE_ATTACHMENTS_ID_TO_DELETE(state, attachementId) {
       state.attachmentsToDelete = state.attachmentsToDelete.filter(el => el !== attachementId);
     },
+    UPDATE_CHECKED_FEATURES(state, checkedFeatures) {
+      state.checkedFeatures = checkedFeatures;
+    }
   },
   getters: {
   },
@@ -137,9 +141,9 @@ const feature = {
       if (routeName === "editer-signalement") {
         axios
           .put(`${rootState.configuration.VUE_APP_DJANGO_API_BASE}features/${state.form.feature_id}/?` +
-            `feature_type__slug=${rootState.feature_type.current_feature_type_slug}` + 
-            `&project__slug=${rootState.project_slug}` 
-          , geojson)
+            `feature_type__slug=${rootState.feature_type.current_feature_type_slug}` +
+            `&project__slug=${rootState.project_slug}`
+            , geojson)
           .then((response) => {
             if (response.status === 200 && response.data) {
               if (state.attachmentFormset.length > 0 || state.linkedFormset.length > 0) {
@@ -189,7 +193,7 @@ const feature = {
               console.error(error);
               return error
             });
-            
+
         }
       }
 
@@ -203,7 +207,7 @@ const feature = {
         if (attachment.title)
           data['info'] = attachment.info
         formdataToUpdate.append("data", JSON.stringify(data));
-        let payload ={
+        let payload = {
           'attachmentsId': attachment.id,
           'featureId': featureId,
           'formdataToUpdate': formdataToUpdate
@@ -213,7 +217,7 @@ const feature = {
       }
 
       function deleteAttachement(attachmentsId, featureId) {
-        let payload ={
+        let payload = {
           'attachmentsId': attachmentsId,
           'featureId': featureId
         }
@@ -224,7 +228,7 @@ const feature = {
         ...state.attachmentFormset.map((attachment) => postAttachement(attachment)),
         ...state.attachmentsToPut.map((attachments) => putAttachement(attachments, featureId)),
         ...state.attachmentsToDelete.map((attachmentsId) => deleteAttachement(attachmentsId, featureId))
-        ]
+      ]
       );
       state.attachmentsToDelete = []
       state.attachmentsToPut = []
@@ -280,8 +284,8 @@ const feature = {
     DELETE_FEATURE({ state, rootState }, feature_id) {
       console.log("Deleting feature:", feature_id, state)
       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}`;
+        `feature_type__slug=${rootState.feature_type.current_feature_type_slug}` +
+        `&project__slug=${rootState.project_slug}`;
       return axios
         .delete(url)
         .then((response) => response)
diff --git a/src/views/feature/Feature_list.vue b/src/views/feature/Feature_list.vue
index 79b7f134..597ec1c5 100644
--- a/src/views/feature/Feature_list.vue
+++ b/src/views/feature/Feature_list.vue
@@ -199,7 +199,6 @@ export default {
   data() {
     return {
       modalAllDeleteOpen: false,
-      checkedFeatures: [],
       form: {
         type: {
           selected: null,
@@ -249,7 +248,7 @@ export default {
   computed: {
     ...mapGetters(["project", "permissions"]),
     ...mapState(["user"]),
-    ...mapState("feature", ["features"]),
+    ...mapState("feature", ["features", "checkedFeatures"]),
     ...mapState("feature_type", ["feature_types"]),
 
     baseMaps() {
-- 
GitLab