mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-07 18:44:08 +00:00
address: use multiselect for country selection
This commit is contained in:
parent
64d28106c8
commit
bcf2b9d834
@ -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>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user