Address selection: add selectCountry and selectCity components

This commit is contained in:
nobohan 2021-05-10 15:21:38 +02:00
parent efb9bc938a
commit fe5745831c
6 changed files with 110 additions and 18 deletions

View File

@ -1,8 +1,10 @@
// import { mainMessages } from 'ChillMainAssets/vuejs/_js/i18n' // import { mainMessages } from 'ChillMainAssets/vuejs/_js/i18n' //TODO
const addressMessages = { const addressMessages = {
fr: { fr: {
add_an_address: 'Ajouter une adresse' add_an_address: 'Ajouter une adresse',
select_country: 'Choisir le pays',
select_city: 'Choisir une localité'
} }
}; };

View File

@ -14,20 +14,40 @@ const getDataPromise = getReferenceAddress()
strict: debug, strict: debug,
state: { state: {
referenceAddresses: referenceAddresses.results, referenceAddresses: referenceAddresses.results,
countries: ['france', 'belgium'] //TODO fetch countries from CHILL API countries: [
// add_persons: { {id: 1, name: 'France', countryCode: 'FR'},
// query: "", {id: 2, name: 'Belgium', countryCode: 'BE'}
// suggested: [], ], //TODO fetch countries from CHILL API
// selected: [] cities: [
// }, {id: 1, name: 'Bruxelles', code: '1000', country: 'BE'},
// errorMsg: [] {id: 2, name: 'Aisne', code: '85045', country: 'FR'},
{id: 3, name: 'Saint-Gervais', code: '85230', country: 'FR'}
], //TODO fetch postal codes from CHILL API
selectedCountry: {id: 1, name: 'France', countryCode: 'FR'}, // TODO how to specify a default value?
selectedCity: null,
}, },
getters: { getters: {
getCountries: state => state.countries, getCountries: state => state.countries,
getSelectedCountry: state => state.selectedCountry,
getCities: state => {
console.log(state.cities)
console.log(state)
console.log(state.selectedCountry.countryCode)
console.log(state.cities.filter(c => c.country == state.selectedCountry.countryCode))
return state.selectedCountry.countryCode === undefined ?
state.cities :
state.cities.filter(c => c.country == state.selectedCountry.countryCode);
}
,
getReferenceAddresses: state => state.referenceAddresses, getReferenceAddresses: state => state.referenceAddresses,
// getReferenceAddressesCities: state => {}, //TODO get unique cities from addressReference
}, },
mutations: { mutations: {
setSelectedCountry(state, value) {
state.selectedCountry = value;
},
setSelectedCity(state, value) {
state.selectedCity = value;
}
// removeParticipation(state, item) { // removeParticipation(state, item) {
// //console.log('mutation: remove item', item.id); // //console.log('mutation: remove item', item.id);
// state.accompanying_course.participations = state.accompanying_course.participations.filter(participation => participation !== item); // state.accompanying_course.participations = state.accompanying_course.participations.filter(participation => participation !== item);

View File

@ -30,7 +30,7 @@
<template v-slot:body> <template v-slot:body>
<!--span class="discret">Selection: {{ selected }}</span--> <!--span class="discret">Selection: {{ selected }}</span-->
<div class="results"> <div class="results">
<div class="count"> <!-- <div class="count">
<span> <span>
<a v-if="suggestedCounter > 0" href="#"> <a v-if="suggestedCounter > 0" href="#">
{{ $t('action.check_all')}}</a> {{ $t('action.check_all')}}</a>
@ -40,13 +40,19 @@
<span v-if="selectedCounter > 0"> <span v-if="selectedCounter > 0">
{{ $tc('add_persons.selected_counter', selectedCounter) }} {{ $tc('add_persons.selected_counter', selectedCounter) }}
</span> </span>
</div> </div> -->
<address-suggestion <country-selection>
</country-selection>
<city-selection>
</city-selection>
<address-selection
v-for="item in this.referenceAddresses.slice().reverse()" v-for="item in this.referenceAddresses.slice().reverse()"
v-bind:item="item" v-bind:item="item"
v-bind:key="item.id"> v-bind:key="item.id">
</address-suggestion> </address-selection>
<!-- <button v-if="query.length >= 3" class="sc-button bt-create ml-5 mt-2" name="createPerson"> <!-- <button v-if="query.length >= 3" class="sc-button bt-create ml-5 mt-2" name="createPerson">
{{ $t('action.create') }} "{{ query }}" {{ $t('action.create') }} "{{ query }}"
@ -67,13 +73,17 @@
<script> <script>
import { mapState } from 'vuex'; import { mapState } from 'vuex';
import Modal from './Modal'; import Modal from './Modal';
import AddressSuggestion from './AddressSuggestion'; import CountrySelection from './CountrySelection';
import CitySelection from './CitySelection';
import AddressSelection from './AddressSelection';
export default { export default {
name: 'AddAddresses', name: 'AddAddresses',
components: { components: {
Modal, Modal,
AddressSuggestion, CountrySelection,
CitySelection,
AddressSelection,
}, },
data() { data() {
return { return {
@ -85,7 +95,7 @@ export default {
}, },
computed: { computed: {
...mapState(['add_addresses']), ...mapState(['add_addresses']),
referenceAddresses() {return this.$store.getters.getReferenceAddresses;} referenceAddresses() { return this.$store.getters.getReferenceAddresses; }
// query: { // query: {
// set(query) { // set(query) {
// this.$store.dispatch('setQuery', { query }); // this.$store.dispatch('setQuery', { query });

View File

@ -26,7 +26,7 @@
<script> <script>
export default { export default {
name: 'AddressSuggestion', name: 'AddressSelection',
props: ['item'], props: ['item'],
data() { data() {
}, },

View File

@ -0,0 +1,30 @@
<template>
<div class="container">
<select v-model="selected" :placeholder="$t('select_city')">
<option v-for="item in this.cities" v-bind:item="item" v-bind:key="item.id" v-bind:value="item">
{{ item.name }}
</option>
</select>
</div>
</template>
<script>
export default {
name: 'CitySelection',
props: ['item'], //TODO useful?
data() {
},//TODO useful?
computed: {
cities() { return this.$store.getters.getCities; },
selected: {
set(value) {
this.$store.commit('setSelectedCity', value);
},
get() {
return this.$store.state.selectedCity;
}
},
}
};
</script>

View File

@ -0,0 +1,30 @@
<template>
<div class="container">
<select v-model="selected" :placeholder="$t('select_country')">
<option v-for="item in this.countries" v-bind:item="item" v-bind:key="item.id" v-bind:value="item">
{{ item.name }}
</option>
</select>
</div>
</template>
<script>
export default {
name: 'CountrySelection',
props: ['item'],//TODO useful?
data() {
},//TODO useful?
computed: {
countries() { return this.$store.getters.getCountries; },
selected: {
set(value) {
this.$store.commit('setSelectedCountry', value);
},
get() {
return this.$store.state.selectedCountry;
}
},
}
};
</script>