mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-12 21:34:25 +00:00
vue Address: listen to adresssSelector to automatically fill street/number fields
This commit is contained in:
parent
34df295801
commit
90faa27461
@ -4,6 +4,8 @@
|
|||||||
<VueMultiselect
|
<VueMultiselect
|
||||||
id="addressSelector"
|
id="addressSelector"
|
||||||
v-model="value"
|
v-model="value"
|
||||||
|
@search-change="listenInputSearch"
|
||||||
|
ref="addressSelector"
|
||||||
@select="selectAddress"
|
@select="selectAddress"
|
||||||
name="field"
|
name="field"
|
||||||
track-by="id"
|
track-by="id"
|
||||||
@ -17,7 +19,8 @@
|
|||||||
:options="addresses">
|
:options="addresses">
|
||||||
</VueMultiselect>
|
</VueMultiselect>
|
||||||
</div>
|
</div>
|
||||||
<div class="custom-address row g-1" v-if="writeNewAddress || writeNewPostalCode">
|
|
||||||
|
<div class="custom-address row g-1" v-if="writeNewAddress || writeNewPostalCode || (isEnteredCustomAddress && !isAddressSelectorOpen)">
|
||||||
<div class="col-10">
|
<div class="col-10">
|
||||||
<div class="form-floating">
|
<div class="form-floating">
|
||||||
<input class="form-control"
|
<input class="form-control"
|
||||||
@ -60,6 +63,12 @@ export default {
|
|||||||
writeNewPostalCode() {
|
writeNewPostalCode() {
|
||||||
return this.entity.selected.writeNew.postCode;
|
return this.entity.selected.writeNew.postCode;
|
||||||
},
|
},
|
||||||
|
isAddressSelectorOpen() {
|
||||||
|
return this.$refs.addressSelector.$data.isOpen;
|
||||||
|
},
|
||||||
|
isEnteredCustomAddress() {
|
||||||
|
return this.$data.value !== null && typeof this.$data.value.text !== 'undefined';
|
||||||
|
},
|
||||||
addresses() {
|
addresses() {
|
||||||
return this.entity.loaded.addresses;
|
return this.entity.loaded.addresses;
|
||||||
},
|
},
|
||||||
@ -90,6 +99,36 @@ export default {
|
|||||||
this.entity.selected.address.streetNumber = value.streetNumber;
|
this.entity.selected.address.streetNumber = value.streetNumber;
|
||||||
this.updateMapCenter(value.point);
|
this.updateMapCenter(value.point);
|
||||||
},
|
},
|
||||||
|
listenInputSearch(query) {
|
||||||
|
//console.log('listenInputSearch', query, this.isAddressSelectorOpen);
|
||||||
|
if (this.isAddressSelectorOpen) {
|
||||||
|
this.$data.value = { text: query };
|
||||||
|
} else if (this.isEnteredCustomAddress) {
|
||||||
|
let addr = this.splitAddress(this.$data.value.text);
|
||||||
|
this.entity.selected.address.street = addr.street;
|
||||||
|
this.entity.selected.address.streetNumber = addr.number;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
splitAddress(address) {
|
||||||
|
let substr = address
|
||||||
|
.split(',')
|
||||||
|
.map(s => s.trim());
|
||||||
|
if (substr.length === 1) {
|
||||||
|
substr = address.split(' ');
|
||||||
|
}
|
||||||
|
let decimal = [];
|
||||||
|
substr.forEach((s, i) => { decimal[i] = /^\d+$/.test(s) });
|
||||||
|
if (decimal[0] === true) {
|
||||||
|
return { number: substr.shift(),
|
||||||
|
street: substr.join(' ') }
|
||||||
|
}
|
||||||
|
else if (decimal[decimal.length - 1] === true) {
|
||||||
|
return { number: substr.pop(),
|
||||||
|
street: substr.join(' ') }
|
||||||
|
}
|
||||||
|
return { number: '',
|
||||||
|
street: substr.join(' ') }
|
||||||
|
},
|
||||||
addAddress() {
|
addAddress() {
|
||||||
this.entity.selected.writeNew.address = true;
|
this.entity.selected.writeNew.address = true;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user