From b590acbefbfb8d52920fcce2496f0b717b9edfa3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Poussard?= <tpoussard@neogeo.fr> Date: Wed, 25 Aug 2021 14:56:31 +0200 Subject: [PATCH] fix changes in feature_type_edit with form in store to import from geojson --- src/App.vue | 2 +- src/views/Index.vue | 10 ++- src/views/My_account.vue | 20 +++-- src/views/feature/Feature_edit.vue | 14 +++- .../feature_type/Feature_type_detail.vue | 83 +++++++++++-------- src/views/feature_type/Feature_type_edit.vue | 16 ++-- src/views/project/Project_detail.vue | 4 +- src/views/project/Project_edit.vue | 27 +++++- 8 files changed, 111 insertions(+), 65 deletions(-) diff --git a/src/App.vue b/src/App.vue index fea08926..35969d3a 100644 --- a/src/App.vue +++ b/src/App.vue @@ -75,7 +75,7 @@ v-if="user && user.is_administrator" class="item ui label vertical" > - <span v-if="project"> + <span v-if="USER_LEVEL_PROJECTS && project"> {{ USER_LEVEL_PROJECTS[project.slug] }}</span > <br /> diff --git a/src/views/Index.vue b/src/views/Index.vue index a8038847..f7cd1ed8 100644 --- a/src/views/Index.vue +++ b/src/views/Index.vue @@ -68,10 +68,12 @@ ><br /> <span> Mon niveau d'autorisation : - <!-- //todo: get this value --> - <!-- {{ USER_LEVEL_PROJECTS|lookup:project.slug }} --> - {{ USER_LEVEL_PROJECTS[project.slug] }} - {{ user && user.is_administrator ? "+ Gestionnaire métier" : "" }} + <span v-if="USER_LEVEL_PROJECTS && project">{{ + USER_LEVEL_PROJECTS[project.slug] + }}</span> + <span v-if="user && user.is_administrator">{{ + "+ Gestionnaire métier" + }}</span> </span> </div> <div class="meta"> diff --git a/src/views/My_account.vue b/src/views/My_account.vue index f8fefe3a..e679b7d5 100644 --- a/src/views/My_account.vue +++ b/src/views/My_account.vue @@ -62,9 +62,14 @@ /> </div> <div class="middle aligned content"> - <a class="header" href="'geocontrib:project' slug=project.slug"> - {{ project.title }} - </a> + <router-link + :to="{ + name: 'project_detail', + params: { slug: project.slug }, + }" + class="header" + >{{ project.title }}</router-link + > <div class="description"> <p>{{ project.description }}</p> </div> @@ -78,9 +83,12 @@ ><br /> <span> Mon niveau d'autorisation : - {{ USER_LEVEL_PROJECTS }} - <!-- |lookup:project.slug --> - {{ user.is_administrator ? "+ Gestionnaire métier" : "" }} + <span v-if="USER_LEVEL_PROJECTS && project">{{ + USER_LEVEL_PROJECTS[project.slug] + }}</span> + <span v-if="user && user.is_administrator">{{ + "+ Gestionnaire métier" + }}</span> </span> </div> <div class="meta"> diff --git a/src/views/feature/Feature_edit.vue b/src/views/feature/Feature_edit.vue index cbec88b1..a3e304e6 100644 --- a/src/views/feature/Feature_edit.vue +++ b/src/views/feature/Feature_edit.vue @@ -1,10 +1,16 @@ <template> <div v-frag> <div class="fourteen wide column"> - <h1 v-if="$router.history.current.name === 'editer-signalement'"> + <h1 + v-if="feature && $router.history.current.name === 'editer-signalement'" + > Mise à jour du signalement "{{ feature.title }}" </h1> - <h1 v-else-if="$router.history.current.name === 'ajouter-signalement'"> + <h1 + v-else-if=" + feature_type && $router.history.current.name === 'ajouter-signalement' + " + > Création d'un signalement <small>[{{ feature_type.title }}]</small> </h1> @@ -61,7 +67,7 @@ <label :for="form.geom.id_for_label">{{ form.geom.label }}</label> <!-- Import GeoImage --> - <div v-frag v-if="feature_type.geom_type === 'point'"> + <div v-frag v-if="feature_type && feature_type.geom_type === 'point'"> <p> <button id="add-geo-image" @@ -290,7 +296,7 @@ export default { feature: function () { return this.$store.state.feature.features.find( - (el) => el.title === this.$route.params.slug_signal + (el) => el.feature_id === this.$route.params.slug_signal ); }, diff --git a/src/views/feature_type/Feature_type_detail.vue b/src/views/feature_type/Feature_type_detail.vue index 8efb0803..b0944ced 100644 --- a/src/views/feature_type/Feature_type_detail.vue +++ b/src/views/feature_type/Feature_type_detail.vue @@ -64,17 +64,11 @@ Importer des signalements </div> <div :class="['content', { active: showImport }]"> - <div - id="form-import-features" - class="ui form" - > + <div id="form-import-features" class="ui form"> <div class="field"> - <label - class="ui icon button" - for="json_file" - > + <label class="ui icon button" for="json_file"> <i class="file icon"></i> - <span class="label">{{filenameToImport.name}}</span> + <span class="label">{{ filenameToImport.name }}</span> </label> <input type="file" @@ -87,10 +81,12 @@ </div> <button :disabled="filenameToImport.size == 0" - @click="importGeoJson" class="ui fluid teal icon button"> + @click="importGeoJson" + class="ui fluid teal icon button" + > <i class="upload icon"></i> Lancer l'import </button> - <ImportTask v-if="dataImport.length" :data="dataImport"/> + <ImportTask v-if="dataImport.length" :data="dataImport" /> </div> </div> <div @@ -179,14 +175,14 @@ </template> <script> -import axios from 'axios'; +import axios from "axios"; import { mapGetters, mapState } from "vuex"; -import ImportTask from '@/components/ImportTask'; +import ImportTask from "@/components/ImportTask"; export default { name: "Feature_type_detail", components: { - "ImportTask": ImportTask + ImportTask: ImportTask, }, computed: { ...mapGetters(["project"]), @@ -202,7 +198,10 @@ export default { data() { return { - filenameToImport: {name: 'Sélectionner un fichier GeoJSON ...', size: 0}, + filenameToImport: { + name: "Sélectionner un fichier GeoJSON ...", + size: 0, + }, fileToImport: {}, showImport: false, showExport: true, @@ -216,51 +215,65 @@ export default { // }, onFileChange(e) { var files = e.target.files || e.dataTransfer.files; - if (!files.length) - return; - this.filenameToImport = files[0] + if (!files.length) return; + this.filenameToImport = files[0]; }, toggleImport() { console.log("toggleImport"); - }, importGeoJson() { - if (this.filenameToImport.size > 0){ + if (this.filenameToImport.size > 0) { var formData = new FormData(); formData.append("json_file", this.filenameToImport); - let url = process.env.VUE_APP_URL_BASE + 'projet/' + this.$route.params.slug + '/type-signalement/'+this.$route.params.feature_type_slug + '/importer-geojson/' ; - axios.post(url, formData, { headers: { - 'Content-Type': 'multipart/form-data' - } + let url = + process.env.VUE_APP_URL_BASE + + "projet/" + + this.$route.params.slug + + "/type-signalement/" + + this.$route.params.feature_type_slug + + "/importer-geojson/"; + axios + .post(url, formData, { + headers: { + "Content-Type": "multipart/form-data", + }, }) .then((response) => { - if (response.status == 200){ - this.getImports() + if (response.status == 200) { + this.getImports(); // TODO : RELOAD DERNIER SIGNALEMENTS } }) - .catch(err => { + .catch((err) => { // TODO : HANDLER ERROR - console.log(err) + console.log(err); }); } }, - getImports(){ - let url = process.env.VUE_APP_DJANGO_API_BASE + 'import-tasks?feature_type_id=' + this.structure.feature_type; - axios.get(url) + getImports() { + let url = + process.env.VUE_APP_DJANGO_API_BASE + + "import-tasks?feature_type_id=" + + this.structure.feature_type; + axios + .get(url) .then((response) => { - this.dataImport = response.data + this.dataImport = response.data; }) - .catch(err => { - console.log(err) + .catch((err) => { + console.log(err); }); - } + }, }, created() { if (!this.project) { this.$store.dispatch("GET_PROJECT_INFO", this.$route.params.slug); } + this.$store.commit( + "feature_type/SET_CURRENT_FEATURE_TYPE_SLUG", + this.$route.params.slug_type_signal + ); this.getImports(); }, }; diff --git a/src/views/feature_type/Feature_type_edit.vue b/src/views/feature_type/Feature_type_edit.vue index cee921da..2a355eae 100644 --- a/src/views/feature_type/Feature_type_edit.vue +++ b/src/views/feature_type/Feature_type_edit.vue @@ -13,7 +13,7 @@ project.title }}" </h1> - <h1 v-if="action === 'edit'"> + <h1 v-if="feature_type && action === 'edit'"> Éditer le type de signalement "{{ feature_type.title }}" pour le projet "{{ project.title }}" </h1> @@ -88,9 +88,7 @@ </div> </div> - <span v-if="action === 'duplicate' || action === 'edit'"> - // todo : Fetch customForm associated to this feature_type // - </span> + <span v-if="action === 'duplicate' || action === 'edit'"> </span> <div id="formsets"> <FeatureTypeCustomForm @@ -186,7 +184,6 @@ export default { }, methods: { definePageType() { - console.log(this.$router.history.current.name); if (this.$router.history.current.name === "ajouter-type-signalement") { this.action = "create"; } else if ( @@ -231,9 +228,9 @@ export default { updateStore() { this.$store.commit("feature_type/UPDATE_FORM", { - color: this.form.color.value, - title: this.form.title.value, - geom_type: this.form.geom_type.value, + color: this.form.color, + title: this.form.title, + geom_type: this.form.geom_type, colors_style: this.form.colors_style, }); }, @@ -256,14 +253,15 @@ export default { // * find feature_type and fill form values if (this.form[el]) this.form[el].value = this.feature_type[el]; } + if (this.action === "duplicate") { //* replace original name with new default title this.form.title.value += ` (Copie ${new Date() .toLocaleString() .slice(0, -3) .replace(",", "")} )`; + this.updateStore(); // * initialize form in store in case this.form would not be modified } - this.updateStore(); // * initialize form in store in case this.form would not be modified } }, /* checkform() { diff --git a/src/views/project/Project_detail.vue b/src/views/project/Project_detail.vue index 80d862a4..d5740585 100644 --- a/src/views/project/Project_detail.vue +++ b/src/views/project/Project_detail.vue @@ -249,7 +249,7 @@ name: 'details-signalement', params: { slug: project.slug, - slug_type_signal: item.feature_type.title, + slug_type_signal: item.feature_type.slug, slug_signal: item.feature_id, }, }" @@ -496,7 +496,7 @@ export default { ...mapState("feature_type", ["form", "customForms", "feature_types"]), ...mapState(["last_comments", "user"]), BASE_URL: () => process.env.VUE_APP_BASE_URL, - last_features: function () { + last_features: function () { // TODO : Filter les dernières return this.$store.state.feature.features; }, }, diff --git a/src/views/project/Project_edit.vue b/src/views/project/Project_edit.vue index 8ef6fab1..c09c7002 100644 --- a/src/views/project/Project_edit.vue +++ b/src/views/project/Project_edit.vue @@ -2,7 +2,7 @@ <div class="fourteen wide column"> <form id="form-project-edit" class="ui form"> <h1> - <span v-if="action === 'update'" + <span v-if="action === 'edit'" >Édition du projet "{{ form.title }}"</span ><!-- // todo : [pour UPDATE] récupérer project à éditer --> <span v-else-if="action === 'create'">Création d'un projet</span> @@ -151,7 +151,7 @@ <div class="ui divider"></div> - <button @click.prevent="postForm" class="ui teal icon button"> + <button @click="postForm" type="button" class="ui teal icon button"> <i class="white save icon"></i> Enregistrer les changements </button> </form> @@ -160,6 +160,7 @@ <script> import Dropdown from "@/components/Dropdown.vue"; +import { mapGetters } from "vuex"; export default { name: "Project_edit", @@ -206,6 +207,19 @@ export default { }; }, + computed: { + ...mapGetters(["project"]), + }, +/* + watch: { + project(newValue, oldValue) { + console.log("watch", newValue); + if (oldValue !== newValue) { + this.form = newValue; + } + }, + }, */ + methods: { definePageType() { if (this.$router.history.current.name === "project_create") { @@ -258,8 +272,13 @@ export default { }, created() { this.definePageType(); - if (!this.project && this.action !== "create") { - this.$store.dispatch("GET_PROJECT_INFO", this.$route.params.slug); + if (this.action === "edit") { + if (!this.project) { + this.$store.dispatch("GET_PROJECT_INFO", this.$route.params.slug); + this.form = this.project; + } else { + this.form = this.project; + } } }, }; -- GitLab