diff --git a/src/components/feature/FeatureListTable.vue b/src/components/feature/FeatureListTable.vue index ed7f0dac060041a1badf0b1f4137cf458d8ba7b6..c7ebb5c23e78db573e2df94005f12a000d1f2a3b 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 974ee922ebc6016d1a10d1841575d1ae13adb989..67079e83ac176f0bbc48a085eb788aef6630ef37 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_detail.vue b/src/views/feature/Feature_detail.vue index 62203ff90acf0230451cf02f0f3e22c85579c717..42a6d487f1f1eb874b01ae4d62d4f0a0d451bc98 100644 --- a/src/views/feature/Feature_detail.vue +++ b/src/views/feature/Feature_detail.vue @@ -37,8 +37,9 @@ > <i class="inverted grey pencil alternate icon"></i> </router-link> + <!-- (permissions && permissions.can_delete_feature) || --> <a - v-if="permissions && permissions.can_delete_feature" + v-if="isFeatureCreator" @click="isCanceling = true" id="feature-delete" class="ui button button-hover-red" @@ -101,7 +102,7 @@ v-if="feature.status" :class="getIconLabelStatus(feature.status, 'icon')" ></i> - {{ getIconLabelStatus(feature.status, 'label') }} + {{ getIconLabelStatus(feature.status, "label") }} </td> </tr> <tr> @@ -417,7 +418,6 @@ export default { const result = this.$store.state.feature.features.find( (el) => el.feature_id === this.$route.params.slug_signal ); - console.log("result", result); return result; }, @@ -438,23 +438,19 @@ export default { }, methods: { - getIconLabelStatus(status, type){ - if (status === 'archived') - if (type == 'icon') - return "grey archive icon"; - else return 'Archivé'; - else if (status === 'pending') - if (type == 'icon') - return "teal hourglass outline icon"; - else return 'En attente de publication'; - else if (status === 'published') - if (type == 'icon') - return "olive check icon"; - else return 'Publié'; - else if (status === 'draft') - if (type == 'icon') - return "orange pencil alternate icon"; - else return 'Brouillon'; + getIconLabelStatus(status, type) { + if (status === "archived") + if (type == "icon") return "grey archive icon"; + else return "Archivé"; + else if (status === "pending") + if (type == "icon") return "teal hourglass outline icon"; + else return "En attente de publication"; + else if (status === "published") + if (type == "icon") return "olive check icon"; + else return "Publié"; + else if (status === "draft") + if (type == "icon") return "orange pencil alternate icon"; + else return "Brouillon"; }, pushNgo(link) { this.$router.push({ @@ -533,7 +529,10 @@ export default { .dispatch("feature/DELETE_FEATURE", this.feature.feature_id) .then((response) => { if (response.status === 204) { - this.$store.dispatch("feature/GET_PROJECT_FEATURES", this.$route.params.slug); + this.$store.dispatch( + "feature/GET_PROJECT_FEATURES", + this.$route.params.slug + ); this.goBackToProject(); } }); @@ -599,7 +598,9 @@ export default { if (feature) { const currentFeature = [feature]; const featureGroup = mapUtil.addFeatures(currentFeature); - mapUtil.getMap().fitBounds(featureGroup.getBounds(), { padding: [25, 25] }); + mapUtil + .getMap() + .fitBounds(featureGroup.getBounds(), { padding: [25, 25] }); } }) .catch((error) => { diff --git a/src/views/feature/Feature_list.vue b/src/views/feature/Feature_list.vue index 79b7f1342d4563e29850e5e7793f52d0eaa0c0b7..597ec1c56f5c1fe2a22bab1a896c1d64c66ccb29 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() {