From 4bc9de98156f03f8a5398f70130c08aad7da4dd4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timoth=C3=A9e=20Poussard?= <tpoussard@neogeo.fr>
Date: Wed, 8 Dec 2021 09:28:50 +0100
Subject: [PATCH] WIP

---
 src/views/feature/Feature_list.vue | 111 +++++++++++++++++++++++------
 1 file changed, 90 insertions(+), 21 deletions(-)

diff --git a/src/views/feature/Feature_list.vue b/src/views/feature/Feature_list.vue
index fb21c3df..f8b6d5f6 100644
--- a/src/views/feature/Feature_list.vue
+++ b/src/views/feature/Feature_list.vue
@@ -234,10 +234,11 @@ export default {
         },
         title: null,
       },
-/*       filters: {
+      filters: {
         type: "",
         value: "",
-      }, */
+      },
+      filtersBis: {},
       paginatedFeatures: [],
       baseUrl: this.$store.state.configuration.BASE_URL,
       map: null,
@@ -247,13 +248,15 @@ export default {
       featuresCount: 0,
       next: null,
       previous: null,
+      paginateUrl: null,
       pagination: {
         currentPage: 1,
         pagesize: 15,
         start: 0,
         end: 15,
       },
-      showMap: true,
+      //showMap: true,
+      showMap: false,
       showAddFeature: false,
     };
   },
@@ -393,10 +396,11 @@ export default {
       return featureType ? featureType.slug : null;
     },
 
-    buildFilterParams() {
-      const { filterType, filterValue } = this.filters;
-      let params = "";
+    buildFilterParams(params) {
+      const { filterType, filterValue } = params;
+      let urlParams = "";
       let typeFilter, statusFilter;
+      console.log(filterType, filterValue);
       //*** feature type ***//
       if (filterType === "featureType") {
         if (filterValue === "" && !this.form.type.selected) {
@@ -408,6 +412,62 @@ export default {
         } //* sinon il n'y a pas de param ajouté, ce qui supprime la query
 
         //*** status ***//
+      } else if (filterType === "status") {
+        if (filterValue === "" && !this.form.status.selected.value) {
+          return "abort";
+        } else if (filterValue !== undefined && filterValue !== null) {
+          statusFilter = filterValue;
+          //statusFilter = filterValue.value;
+        }
+      }
+
+      //* after possibilities of aborting features fetch, empty geojson to make sure even no result would update
+
+      if (
+        (filterType === undefined || filterType === "status") &&
+        this.form.type.selected
+      ) {
+        //* s'il y a déjà un filtre sélectionné, maintenir le params
+        typeFilter = this.getFeatureTypeSlug(this.form.type.selected);
+      }
+      if (
+        (filterType === undefined || filterType === "featureType") &&
+        this.form.status.selected.value
+      ) {
+        statusFilter = this.form.status.selected.value;
+      }
+
+      if (typeFilter) {
+        let typeParams = `&feature_type_slug=${typeFilter}`;
+        urlParams += typeParams;
+      }
+      if (statusFilter) {
+        let statusParams = `&status__value=${statusFilter}`;
+        urlParams += statusParams;
+      }
+
+      //*** title ***//
+      if (this.form.title) {
+        urlParams += `&title=${this.form.title}`;
+      }
+      this.getBbox2FIt(urlParams);
+      return urlParams;
+    },
+
+    /*     buildFilterParamsBis() {
+      let params = "";
+      let typeFilter, statusFilter;
+
+      if ("featureType") {
+        if (filterValue === "" && !this.form.type.selected) {
+          //* s'il y n'avait pas de filtre et qu'il a été supprimé --> ne pas mettre à jour les features
+          return "abort";
+        } else if (filterValue !== undefined && filterValue !== null) {
+          //* s'il y a un nouveau filtre --> ajouter une params
+          typeFilter = this.getFeatureTypeSlug(filterValue);
+        } //* sinon il n'y a pas de param ajouté, ce qui supprime la query
+
+
       } else if (filterType === "status") {
         if (filterValue === "" && !this.form.status.selected.value) {
           return "abort";
@@ -441,40 +501,48 @@ export default {
         params += statusParams;
       }
 
-      //*** title ***//
+
       if (this.form.title) {
         params += `&title=${this.form.title}`;
       }
       this.getBbox2FIt(params);
       return params;
-    },
+    }, */
 
-    updateTypeFeatures(value) {
+    updateTypeFeatures(filterValue) {
       //* only update:selection custom event can trigger the filter update,
       //* but it happens before the value is updated, thus using selected value from event to update query
-      //this.fetchPagedFeatures({ filterType: "featureType", filterValue });
-      this.filters = { type: "featureType", value };
-      this.fetchPagedFeatures();
+      this.fetchPagedFeatures({ filterType: "featureType", filterValue });
+      //this.filters = { type: "featureType", value };
+      //this.filtersBis["featureType"] = value;
+      //this.fetchPagedFeatures();
     },
 
-    updateStatusFeatures(value) {
-      //this.fetchPagedFeatures({ filterType: "status", filterValue });
-      this.filters = { type: "status", value };
-      this.fetchPagedFeatures();
+    updateStatusFeatures(filterValue) {
+      this.fetchPagedFeatures({
+        filterType: "status",
+        filterValue: filterValue.value,
+      });
+      //this.filtersBis["status"] = value;
+      //this.filters = { type: "status", value };
+      //this.fetchPagedFeatures();
     },
 
     fetchPagedFeatures(params) {
       this.onFilterChange(); //* temporary, use paginated event to watch change in filters, to modify geojson on map
       let url = `${this.API_BASE_URL}projects/${this.$route.params.slug}/feature-paginated/?output=geojson&limit=${this.pagination.pagesize}&offset=${this.pagination.start}`;
-
-      const filterParams = this.buildFilterParams(params);
-      if (filterParams === "abort") return; // ? to adapt ???
-      url += filterParams;
-      if (params) {
+        //console.log(this.buildFilterParamsBis(params))
+      if (typeof params === "string") { //* for receiving next & previous url
         //console.error("ONLY FOR DEV !!!!!!!!!!!!!");
         //params = params.replace("8000", "8010"); //* for dev uncomment to use proxy link
         url = params;
+      } else if (typeof params === "object") {
+        const filterParams = this.buildFilterParams(params);
+        if (filterParams === "abort") return; // ? to adapt ???
+        url += filterParams;
+        console.log("filterParams", filterParams);
       }
+     // this.paginateUrl = url; //* store to reuse with sorting
 
       this.$store.commit(
         "DISPLAY_LOADER",
@@ -506,6 +574,7 @@ export default {
 
     handleSortChange(ordering) {
       console.log("ORDERING", ordering);
+      this.fetchPagedFeatures({filterType: undefined, filterValue: undefined})
     },
 
     toPage(pageNumber) {
-- 
GitLab