Newer
Older
Sébastien DA ROCHA
committed
<template>
<div class="fourteen wide column">
<div
id="message_info"
class="fullwidth"
>
<div v-if="infoMessage.length > 0">
<div
v-for="(message, index) of infoMessage"
:key="index"
:class="['ui message', message.success ? 'positive' : 'negative']"
style="text-align: left"
>
<div class="header">
<i class="info circle icon" /> Informations
Sébastien DA ROCHA
committed
</div>
<h1 class="ui header">
Administration des fonds cartographiques
</h1>
Sébastien DA ROCHA
committed
<form
id="form-layers"
action="."
method="post"
enctype="multipart/form-data"
class="ui form"
>
<!-- {{ formset.management_form }} -->
<div class="ui buttons">
<a
class="ui compact small icon left floated button green"
data-variation="mini"
@click="addBasemap"
>
</a>
</div>
<ProjectMappingBasemap
v-for="basemap in basemaps"
:key="basemap.id"
:basemap="basemap"
/>
</div>
<div class="margin-top">
<button
type="button"
class="ui teal icon floated button"
@click="saveChanges"
>
<i class="white save icon" /> Enregistrer les changements
</button>
</div>
</form>
</div>
Sébastien DA ROCHA
committed
</template>
<script>
import Project_mapping_basemap from '@/components/project/project_mapping_basemap.vue';
import { mapState, mapGetters } from 'vuex';
Sébastien DA ROCHA
committed
export default {
Sébastien DA ROCHA
committed
components: {
ProjectMappingBasemap: Project_mapping_basemap,
},
data() {
return {
Sébastien DA ROCHA
committed
newBasemapIds: [],
};
},
computed: {
...mapState('map', ['basemaps']),
...mapGetters('map', ['basemapMaxId']),
},
created() {
if (!this.$store.getters.project) {
this.$store.dispatch('GET_PROJECT_INFO', this.$route.params.slug);
}
Sébastien DA ROCHA
committed
},
methods: {
addBasemap() {
this.newBasemapIds.push(this.basemapMaxId + 1); //* register new basemaps to seperate post and put
this.$store.commit('map/CREATE_BASEMAP', this.basemapMaxId + 1);
Sébastien DA ROCHA
committed
},
checkTitles() {
this.basemaps.forEach((basemap) => {
if (basemap.title === null || basemap.title === '') { //* check title when saving basemaps
basemap.errors = 'Veuillez compléter ce champ.';
isValid = false;
} else if (basemap.layers.length === 0) {
basemap.errors = 'Veuillez ajouter au moins un layer.';
Sébastien DA ROCHA
committed
saveChanges() {
if (this.checkTitles()) {
this.$store
.dispatch('map/SAVE_BASEMAPS', this.newBasemapIds)
.then((response) => {
const errors = response.filter(
(res) =>
res.status === 200 && res.status === 201 && res.status === 204
);
if (errors.length === 0) {
this.newBasemapIds = [];
} else {
this.infoMessage.push({
success: false,
comment: "L'édition des fonds cartographiques a échoué. ",
});
.getElementById('message_info')
.scrollIntoView({ block: 'end', inline: 'nearest' });
setTimeout(
function () {
this.infoMessage = [];
}.bind(this),
5000
);
})
.catch((error) => {
Sébastien DA ROCHA
committed
},
};
</script>