address: use multiselect for country selection

This commit is contained in:
nobohan 2021-05-27 14:49:41 +02:00
parent 64d28106c8
commit bcf2b9d834

View File

@ -1,29 +1,47 @@
<template> <template>
<div class="container"> <div class="container">
<select <VueMultiselect
v-model="selected"> v-model="value"
<option :value="{}" selected disabled>{{ $t('select_country') }}</option> name="field"
<option track-by="id"
v-for="item in this.countries" label="name"
v-bind:item="item" :custom-label="transName"
v-bind:key="item.id" :placeholder="$t('select_country')"
v-bind:value="item" :options="countries"
v-bind:selected="item.countryCode === 'FR'"> @update:model-value="selectCountry"
{{ item.name.fr }} :model-value="value">
</option> </VueMultiselect>
</select>
</div> </div>
</template> </template>
<script> <script>
import VueMultiselect from 'vue-multiselect';
export default { export default {
name: 'CountrySelection', name: 'CountrySelection',
components: { VueMultiselect },
props: ['address', 'getCities'], props: ['address', 'getCities'],
// data: () => { data() {
// selected: this.address.loaded.countries.filter(c => c.countryCode === 'FR')[0] return {
// }, //value: this.address.loaded.countries.filter(c => c.countryCode === 'FR')[0],
value: null,
options: []
}
},
methods: {
transName ({ name }) {
return name.fr //TODO multilang
},
selectCountry(value) {
this.address.selected.country = value;
this.getCities(value);
},
},
computed: { computed: {
// defaultCountry() {
// const countries = this.address.loaded.countries;
// return countries.filter(c => c.countryCode === 'FR')[0];
// },
countries() { countries() {
const countries = this.address.loaded.countries; const countries = this.address.loaded.countries;
let orderedCountries = []; let orderedCountries = [];
@ -31,17 +49,9 @@ export default {
orderedCountries.push(...countries.filter(c => c.countryCode === 'BE')) orderedCountries.push(...countries.filter(c => c.countryCode === 'BE'))
orderedCountries.push(...countries.filter(c => c.countryCode !== 'FR').filter(c => c.countryCode !== 'BE')) orderedCountries.push(...countries.filter(c => c.countryCode !== 'FR').filter(c => c.countryCode !== 'BE'))
return orderedCountries; return orderedCountries;
},
selected: {
set(value) {
console.log('selected value', value.name);
this.address.selected.country = value;
this.getCities(value);
},
get() {
return this.address.selected.country;
}
} }
} }
}; };
</script> </script>
<style src="vue-multiselect/dist/vue-multiselect.css"></style>