From bf33bb558439ce64a41ed090bd2f1815bd7bf42e Mon Sep 17 00:00:00 2001 From: "joel.clement" Date: Tue, 15 Jun 2021 11:48:19 +0200 Subject: [PATCH] map layer + restitution fix max --- TODO.md | 1 + data/patchs/patch_chasse.sql | 3 +- frontend/package-lock.json | 5 +++ frontend/package.json | 2 +- frontend/src/components/admin.vue | 1 - .../chasse/config/store-attribution.js | 2 +- .../modules/chasse/config/store-lieu-tir.js | 2 +- .../chasse/config/store-realisation.js | 6 ++-- .../config/restitution-declaration.js | 12 +++++-- .../src/modules/map/map-elements/map-layer.js | 32 +++++++++++++------ .../src/modules/restitution/restitution.js | 17 +++++++--- 11 files changed, 57 insertions(+), 26 deletions(-) diff --git a/TODO.md b/TODO.md index 2f7fb81f..9d02144f 100644 --- a/TODO.md +++ b/TODO.md @@ -2,6 +2,7 @@ TODO - restitution - bug (en cours) + - max - cartes, ne charger qu'une seule fois les layers - in diff --git a/data/patchs/patch_chasse.sql b/data/patchs/patch_chasse.sql index 084bfafd..dedc8a31 100644 --- a/data/patchs/patch_chasse.sql +++ b/data/patchs/patch_chasse.sql @@ -1,3 +1,2 @@ -- passer especes de in à oeasc -ALTER TABLE oeasc_in.t_especes SET SCHEMA oeasc_commons; -CREATE EXTENSION unaccent; \ No newline at end of file +CREATE EXTENSION unaccent; \ No newline at end of file diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 9b6c5fed..51f5dc06 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -7357,6 +7357,11 @@ "omggif": "1.0.7", "promise-polyfill": "8.1.0", "stackblur-canvas": "2.2.0" + }, + "dependencies": { + "file-saver": { + "version": "github:eligrey/FileSaver.js#e865e37af9f9947ddcced76b549e27dc45c1cb2e" + } } }, "jsprim": { diff --git a/frontend/package.json b/frontend/package.json index 70604a46..c2d69430 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -3,7 +3,7 @@ "version": "0.1.0", "private": true, "scripts": { - "serve": "vue-cli-service serve --host localhost", + "serve": "vue-cli-service serve", "build": "vue-cli-service build", "lint": "vue-cli-service lint" }, diff --git a/frontend/src/components/admin.vue b/frontend/src/components/admin.vue index e98edd1e..c774b0bb 100644 --- a/frontend/src/components/admin.vue +++ b/frontend/src/components/admin.vue @@ -42,7 +42,6 @@ export default { $route(to, from) { to; from; - console.log("route", to, from); this.init(); }, }, diff --git a/frontend/src/modules/chasse/config/store-attribution.js b/frontend/src/modules/chasse/config/store-attribution.js index b726cc7a..9c9884ae 100644 --- a/frontend/src/modules/chasse/config/store-attribution.js +++ b/frontend/src/modules/chasse/config/store-attribution.js @@ -37,7 +37,7 @@ export default { returnObject: true, }, zone_indicative_affectee: { - label: 'Zone intérêt affectée', + label: 'Zone indicative affectée', storeName: 'chasseZoneIndicative', type: 'list_form', list_type: 'autocomplete', diff --git a/frontend/src/modules/chasse/config/store-lieu-tir.js b/frontend/src/modules/chasse/config/store-lieu-tir.js index e867e1a9..04ce4007 100644 --- a/frontend/src/modules/chasse/config/store-lieu-tir.js +++ b/frontend/src/modules/chasse/config/store-lieu-tir.js @@ -20,7 +20,7 @@ export default { required: true }, zone_indicative: { - label: "Zone d'intérêt", + label: "Zone indicative", type: 'list_form', list_type: "autocomplete", dataReloadOnSearch: true, diff --git a/frontend/src/modules/chasse/config/store-realisation.js b/frontend/src/modules/chasse/config/store-realisation.js index 8cef51e5..488ec88d 100644 --- a/frontend/src/modules/chasse/config/store-realisation.js +++ b/frontend/src/modules/chasse/config/store-realisation.js @@ -42,7 +42,7 @@ export default { ] }, { - title: "Zone d'intérêt", + title: "Zone indicative", forms: ["zone_indicative_affectee", "zone_indicative_realisee"] }, { @@ -251,7 +251,7 @@ export default { returnObject: true }, zone_indicative_affectee: { - label: "Zone d'intérêt affectée", + label: "Zone indicative affectée", storeName: "chasseZoneIndicative", type: "list_form", list_type: "autocomplete", @@ -260,7 +260,7 @@ export default { disabled: true }, zone_indicative_realisee: { - label: "Zone d'intérêt réalisée", + label: "Zone indicative réalisée", storeName: "chasseZoneIndicative", type: "list_form", list_type: "autocomplete", diff --git a/frontend/src/modules/declaration/config/restitution-declaration.js b/frontend/src/modules/declaration/config/restitution-declaration.js index 993bdef8..bda2f2be 100644 --- a/frontend/src/modules/declaration/config/restitution-declaration.js +++ b/frontend/src/modules/declaration/config/restitution-declaration.js @@ -15,7 +15,7 @@ export default { }, degat_gravite_label: { text: "Dégâts - gravité", - order: ["Faibles", "Modérés", "Importants", "Indéfini"], + order: ["Indéfini", "Faibles", "Modérés", "Importants"], colors: { Importants: "red", Modérés: "orange", @@ -24,7 +24,7 @@ export default { }, degat_etendue_label: { text: "Dégâts - étendue", - order: ["Généralisés", "Localisés"], + order: ['Indéfini', "Localisés", "Généralisés"], colors: { "Généralisés": "red", "Localisés": "yellow" @@ -32,7 +32,13 @@ export default { }, degat_anteriorite_label: { text: "Dégâts - anteriorité", - order: ["Récents (année en cours)", "Récurrents", "Anciens (années antérieures)", "Ne sais pas", 'Indéfini'], + order: [ + 'Indéfini', + "Ne sais pas", + "Anciens (années antérieures)", + "Récurrents", + "Récents (année en cours)", + ], colors: { "Récents (année en cours)": "red", "Récurrents": "orange", diff --git a/frontend/src/modules/map/map-elements/map-layer.js b/frontend/src/modules/map/map-elements/map-layer.js index cf25623c..164bd3e1 100644 --- a/frontend/src/modules/map/map-elements/map-layer.js +++ b/frontend/src/modules/map/map-elements/map-layer.js @@ -6,7 +6,13 @@ import { apiRequest } from "@/core/js/data/api.js"; const L = window.L; + const mapLayer = { +/** + * Pour garder en mémoire les layers déjà charger et ne pas faire plusieurs appels aux api + */ + _layersData: {}, + /** * pour pouvoir gérer les url de façon dynamique: * @@ -15,13 +21,13 @@ const mapLayer = { * - url est une fonction qui sera appelée avec le parametre urlParams * * */ - getUrl: function(layerConfig) { return typeof layerConfig.url == "function" ? layerConfig.url(layerConfig.urlParams) : layerConfig.url; }, + /** * Ajoute un layer à partir de sa configuration */ @@ -30,14 +36,22 @@ const mapLayer = { const url = this.getUrl(layerConfig); // requete - apiRequest("GET", url).then( - layerData => { - this.processLayer(layerConfig, layerData); - }, - error => { - console.error(`MapLayer Error : ${error}`) - } - ); + if(this._layersData[url]) { + const layerData = this._layersData[url]; + setTimeout(()=> { + this.processLayer(layerConfig, layerData) + }); + } else { + apiRequest("GET", url).then( + layerData => { + this._layersData[url] = layerData; + this.processLayer(layerConfig, layerData); + }, + error => { + console.error(`MapLayer Error : ${error}`) + } + ); + } }, /** diff --git a/frontend/src/modules/restitution/restitution.js b/frontend/src/modules/restitution/restitution.js index 7453289c..bc637f17 100644 --- a/frontend/src/modules/restitution/restitution.js +++ b/frontend/src/modules/restitution/restitution.js @@ -105,7 +105,6 @@ class Restitution { dataList(key, filters = null) { let dataList = []; const item = this.item(key); - const dataToProcess = this.groupBy( this.filteredData(filters), this._options.groupByKey, @@ -142,7 +141,7 @@ class Restitution { data.color = "grey"; } } else { - dataList = dataList.sort((a, b) => b.count - a.count); + dataList = item.order ? dataList.sort((a, b) => item.order.indexOf(b.text) - item.order.indexOf(a.text)) : dataList.sort((a, b) => b.count - a.count); dataList = this.cutDataList(dataList); for (const data of dataList) { @@ -179,7 +178,7 @@ class Restitution { keep[r[key_item_patch]] = r; } } else { - keep[r.degat_type_label] = r; + keep[r[key_item_patch]] = r; } } d.res = Object.keys(keep).map(key => keep[key]); @@ -190,6 +189,7 @@ class Restitution { * out: [...{ groupByKey: grouByValue, res: process(dataGroup, processArgs) }...] */ groupBy(data, groupByKey = null, keys = [], action = null) { + // si pas de groupByKey on renvoie data if (!groupByKey) { return data; @@ -203,12 +203,14 @@ class Restitution { } } + // out: [...{ groupByKey: grouByValue, res: process(dataGroup, processArgs) }...] const out = Object.entries(dataDict).map(([groupByValue, dataGroup]) => { const d = {}; d[groupByKey] = groupByValue; + if (!keys.length) { return d; } @@ -216,6 +218,10 @@ class Restitution { const listGroup = this._options.markersGroupByReduceKeys || []; for (const key of keys.filter(key => !listGroup.includes(key) && !!key)) { + const order = this.item(key).order; + if(order) { + dataGroup = dataGroup.sort((a, b) => order.indexOf(a[key]) - order.indexOf(b[key])); + } d[key] = dataGroup[0][key]; } @@ -229,6 +235,7 @@ class Restitution { } return res; }); + if (action == "concat") { for (const r of d.res) { for (const key of Object.keys(r).filter(key => @@ -239,13 +246,13 @@ class Restitution { } } + if (action == "max") { this.patchMaxDegat(d); } return d; }); - return out; } @@ -372,10 +379,10 @@ class Restitution { } data() { - if (this._data && this._data.length) { return this._data; } + this._data = this._rawData && this._rawData.length ? this.filterData(