diff --git a/src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress.vue b/src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress.vue index c1ef174ab..76979b7aa 100644 --- a/src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress.vue +++ b/src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress.vue @@ -537,11 +537,18 @@ export default { checkErrors() { this.errors = []; - if (this.entity.selected.country === null) { - this.errors.push("Un pays doit être sélectionné."); - } - if (this.entity.selected.city === null) { - this.errors.push("Une ville doit être sélectionnée."); + if (this.flag.dirty) { + if (this.entity.selected.country === null) { + this.errors.push("Un pays doit être sélectionné."); + } + if (Object.keys(this.entity.selected.city).length === 0) { + this.errors.push("Une ville doit être sélectionnée."); + } + if (!this.entity.selected.isNoAddress) { + if (this.entity.selected.address.street === null || this.entity.selected.address.streetNumber === null) { + this.errors.push("Une adresse doit être sélectionnée."); + } + } } }, diff --git a/src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue b/src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue index 6d9c32524..12e45d0b7 100644 --- a/src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue +++ b/src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue @@ -12,6 +12,7 @@ @search-change="listenInputSearch" ref="addressSelector" @select="selectAddress" + @remove="remove" name="field" track-by="id" label="value" @@ -56,7 +57,7 @@ import { searchReferenceAddresses, fetchReferenceAddresses } from '../../api.js' export default { name: 'AddressSelection', components: { VueMultiselect }, - props: ['entity', 'context', 'updateMapCenter'], + props: ['entity', 'context', 'updateMapCenter', 'flag', 'checkErrors'], data() { return { value: this.context.edit ? this.entity.address.addressReference : null, @@ -109,6 +110,13 @@ export default { this.entity.selected.address.streetNumber = value.streetNumber; this.entity.selected.writeNew.address = false; this.updateMapCenter(value.point); + this.flag.dirty = true; + this.checkErrors(); + }, + remove() { + this.flag.dirty = true; + this.entity.selected.address = {}; + this.checkErrors(); }, listenInputSearch(query) { //console.log('listenInputSearch', query, this.isAddressSelectorOpen); @@ -149,6 +157,8 @@ export default { this.entity.selected.address.street = addr.street; this.entity.selected.address.streetNumber = addr.number; this.entity.selected.writeNew.address = true; + this.flag.dirty = true; + this.checkErrors(); } }, splitAddress(address) { diff --git a/src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue b/src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue index 6c102ee99..4883957bb 100644 --- a/src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue +++ b/src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue @@ -128,7 +128,8 @@ export default { this.checkErrors(); }, remove() { - this.entity.selected.city = null; + this.flag.dirty = true; + this.entity.selected.city = {}; this.checkErrors(); }, listenInputSearch(query) { diff --git a/src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CountrySelection.vue b/src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CountrySelection.vue index fd5fb682b..09ba8421d 100644 --- a/src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CountrySelection.vue +++ b/src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CountrySelection.vue @@ -51,6 +51,7 @@ export default { init() { if (this.value !== undefined) { this.selectCountry(this.value); + this.flag.dirty = false; } }, selectCountryByCode(countryCode) { @@ -63,10 +64,10 @@ export default { //console.log('select country', value); this.entity.selected.country = value; this.$emit('getCities', value); - this.flag.dirty = true; this.checkErrors(); }, remove() { + this.flag.dirty = true; this.entity.selected.country = null; this.checkErrors(); }, diff --git a/src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/EditPane.vue b/src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/EditPane.vue index e6bb72883..486d28e73 100644 --- a/src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/EditPane.vue +++ b/src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/EditPane.vue @@ -49,7 +49,9 @@ + v-bind:updateMapCenter="updateMapCenter" + v-bind:flag="flag" + v-bind:checkErrors="checkErrors">