Commit 7f63e58ced806a28e730483ab8dfa26ebce0057b

Authored by Sergio Crisostomo
1 parent cf753854

Make possible for v-model to wait for async options

Showing 1 changed file with 13 additions and 2 deletions   Show diff stats
src/components/select/select.vue
@@ -179,9 +179,13 @@ @@ -179,9 +179,13 @@
179 this.$on('on-select-selected', this.onOptionClick); 179 this.$on('on-select-selected', this.onOptionClick);
180 180
181 // set the initial values if there are any 181 // set the initial values if there are any
182 - if (this.values.length > 0 && !this.remote){ 182 + if (this.values.length > 0 && !this.remote && this.selectOptions.length > 0){
183 this.values = this.values.map(this.getOptionData); 183 this.values = this.values.map(this.getOptionData);
184 } 184 }
  185 +
  186 + if (this.values.length > 0 && this.selectOptions.length === 0){
  187 + this.hasExpectedValue = this.values;
  188 + }
185 }, 189 },
186 data () { 190 data () {
187 191
@@ -198,6 +202,7 @@ @@ -198,6 +202,7 @@
198 slotOptions: this.$slots.default, 202 slotOptions: this.$slots.default,
199 caretPosition: -1, 203 caretPosition: -1,
200 lastRemoteQuery: '', 204 lastRemoteQuery: '',
  205 + hasExpectedValue: false,
201 }; 206 };
202 }, 207 },
203 computed: { 208 computed: {
@@ -337,7 +342,7 @@ @@ -337,7 +342,7 @@
337 }, 342 },
338 getOptionData(value){ 343 getOptionData(value){
339 const option = this.flatOptions.find(({componentOptions}) => componentOptions.propsData.value === value); 344 const option = this.flatOptions.find(({componentOptions}) => componentOptions.propsData.value === value);
340 - if (!option) return {}; 345 + if (!option) return null;
341 const textContent = option.componentOptions.children.reduce((str, child) => str + (child.text || ''), ''); 346 const textContent = option.componentOptions.children.reduce((str, child) => str + (child.text || ''), '');
342 const label = option.componentOptions.propsData.label || textContent || ''; 347 const label = option.componentOptions.propsData.label || textContent || '';
343 return { 348 return {
@@ -603,6 +608,12 @@ @@ -603,6 +608,12 @@
603 }, 608 },
604 dropVisible(open){ 609 dropVisible(open){
605 this.broadcast('Drop', open ? 'on-update-popper' : 'on-destroy-popper'); 610 this.broadcast('Drop', open ? 'on-update-popper' : 'on-destroy-popper');
  611 + },
  612 + selectOptions(){
  613 + if (this.hasExpectedValue){
  614 + this.values = this.values.map(this.getOptionData);
  615 + this.hasExpectedValue = false;
  616 + }
606 } 617 }
607 } 618 }
608 }; 619 };