AccompanyingCourse: check if conditions of confirmation are met, or display alert

This commit is contained in:
Mathieu Jaumotte 2021-08-18 13:43:56 +02:00
parent 41fe95c80f
commit 53fe90adc3
3 changed files with 90 additions and 28 deletions

View File

@ -3,24 +3,43 @@
<h2><a name="section-90"></a> <h2><a name="section-90"></a>
{{ $t('confirm.title') }} {{ $t('confirm.title') }}
</h2> </h2>
<div> <div>
<p> <p v-html="$t('confirm.text_draft', [$t('course.step.draft')])"></p>
{{ $t('confirm.text_draft') }}
<span class="badge bg-secondary">{{ $t('course.step.draft') }}</span> <div v-if="!isValidToBeConfirmed">
</p> <div class="alert alert-warning">
<p> {{ $t('confirm.alert_validation') }}
{{ $t('confirm.text_active') }} <ul class="mt-2">
<span class="badge bg-primary">{{ $t('course.step.active') }}</span> <li v-for="k in validationKeys">
</p> {{ $t(notValidMessages[k].msg) }}
<a :href="notValidMessages[k].anchor">
<i class="fa fa-level-up fa-fw"></i>
</a>
</li>
</ul>
</div>
<ul class="record_actions">
<li>
<button class="btn btn-save" disabled>
{{ $t('confirm.ok') }}
</button>
</li>
</ul>
</div>
<div v-else>
<p v-html="$t('confirm.text_active', [$t('course.step.active')])"></p>
<ul class="record_actions">
<li>
<button
class="btn btn-save"
@click="modal.showModal = true">
{{ $t('confirm.ok') }}
</button>
</li>
</ul>
</div>
<ul class="record_actions">
<li>
<button class="btn btn-save" @click="modal.showModal = true">
{{ $t('confirm.ok') }}
</button>
</li>
</ul>
</div> </div>
<teleport to="body"> <teleport to="body">
@ -43,6 +62,7 @@
</template> </template>
<script> <script>
import {mapGetters, mapState} from "vuex";
import Modal from 'ChillMainAssets/vuejs/_components/Modal'; import Modal from 'ChillMainAssets/vuejs/_components/Modal';
export default { export default {
@ -55,13 +75,34 @@ export default {
modal: { modal: {
showModal: false, showModal: false,
modalDialogClass: "modal-dialog-centered modal-md" modalDialogClass: "modal-dialog-centered modal-md"
},
notValidMessages: {
participation: {
msg: 'confirm.participation_not_valid',
anchor: '#section-10'
},
socialIssue: {
msg: 'confirm.socialIssue_not_valid',
anchor: '#section-40'
},
location: {
msg: 'confirm.location_not_valid',
anchor: '#section-50'
}
} }
} }
}, },
computed: { computed: {
accompanyingCourse() { ...mapState([
return this.$store.state.accompanyingCourse 'accompanyingCourse'
} ]),
...mapGetters([
'isParticipationValid',
'isSocialIssueValid',
'isLocationValid',
'validationKeys',
'isValidToBeConfirmed'
])
}, },
methods: { methods: {
confirmCourse() { confirmCourse() {
@ -72,9 +113,3 @@ export default {
} }
} }
</script> </script>
<style lang="scss" scoped>
div.vue-component > div {
//margin: 1em;
}
</style>

View File

@ -97,10 +97,14 @@ const appMessages = {
}, },
confirm: { confirm: {
title: "Confirmation", title: "Confirmation",
text_draft: "Le parcours est actuellement à l'état de ", text_draft: "Le parcours est actuellement à l'état de <b>{0}</b>.",
text_active: "En validant cette étape, vous lui donnez le statut ", text_active: "En validant cette étape, vous lui donnez le statut <b>{0}</b>.",
alert_validation: "Certaines conditions ne sont pas remplies pour pouvoir confirmer le parcours :",
participation_not_valid: "sélectionnez au minimum 1 usager",
socialIssue_not_valid: "sélectionnez au minimum une problématique sociale",
location_not_valid: "indiquez au minimum une localisation temporaire du parcours",
sure: "Êtes-vous sûr ?", sure: "Êtes-vous sûr ?",
sure_description: "Une fois le changement confirmé, il n'est plus possible de le remettre à l'état de brouillon !", sure_description: "Une fois le changement confirmé, il ne sera plus possible de le remettre à l'état de brouillon !",
ok: "Confirmer le parcours" ok: "Confirmer le parcours"
}, },
// catch errors // catch errors

View File

@ -25,6 +25,29 @@ let initPromise = getAccompanyingCourse(id)
errorMsg: [] errorMsg: []
}, },
getters: { getters: {
isParticipationValid(state) {
return state.accompanyingCourse.participations.length > 0;
},
isSocialIssueValid(state) {
return state.accompanyingCourse.socialIssues.length > 0;
},
isLocationValid(state) {
return state.accompanyingCourse.location !== null;
},
validationKeys(state, getters) {
let keys = [];
if (!getters.isParticipationValid) { keys.push('participation'); }
if (!getters.isSocialIssueValid) { keys.push('socialIssue'); }
if (!getters.isLocationValid) { keys.push('location'); }
//console.log('getter keys', keys);
return keys;
},
isValidToBeConfirmed(state, getters) {
if (getters.validationKeys.length === 0) {
return true;
}
return false;
}
}, },
mutations: { mutations: {
catchError(state, error) { catchError(state, error) {