Commit 31788df30b739d279c9b994fad97ecf52f68b5dd

Authored by Sergio Crisostomo
1 parent 7dbde804

Normalise behaviour when opening select with selected option present in options

Showing 1 changed file with 12 additions and 0 deletions   Show diff stats
src/components/select/select.vue
... ... @@ -122,6 +122,8 @@
122 122 };
123 123 };
124 124  
  125 + const ANIMATION_TIMEOUT = 300;
  126 +
125 127 export default {
126 128 name: 'iSelect',
127 129 mixins: [ Emitter, Locale ],
... ... @@ -230,6 +232,7 @@
230 232 slotOptions: this.$slots.default,
231 233 caretPosition: -1,
232 234 lastRemoteQuery: '',
  235 + unchangedQuery: true,
233 236 hasExpectedValue: false,
234 237 preventRemoteCall: false,
235 238 };
... ... @@ -261,6 +264,10 @@
261 264 [`${prefixCls}-selection-focused`]: this.isFocused
262 265 };
263 266 },
  267 + queryStringMatchesSelectedOption(){
  268 + const selectedOptions = this.values[0];
  269 + return selectedOptions && !this.multiple && this.unchangedQuery && this.query === selectedOptions.value;
  270 + },
264 271 localeNotFoundText () {
265 272 if (typeof this.notFoundText === 'undefined') {
266 273 return this.t('i.select.noMatch');
... ... @@ -425,6 +432,7 @@
425 432 },
426 433  
427 434 validateOption({elm, propsData}){
  435 + if (this.queryStringMatchesSelectedOption) return true;
428 436 const value = propsData.value;
429 437 const label = propsData.label || '';
430 438 const textContent = elm && elm.textContent || '';
... ... @@ -446,6 +454,7 @@
446 454 },
447 455 hideMenu () {
448 456 this.toggleMenu(null, false);
  457 + setTimeout(() => this.unchangedQuery = true, ANIMATION_TIMEOUT);
449 458 },
450 459 onClickOutside(event){
451 460 if (this.visible) {
... ... @@ -469,6 +478,7 @@
469 478 }
470 479 },
471 480 reset(){
  481 + this.unchangedQuery = true;
472 482 this.values = [];
473 483 },
474 484 handleKeydown (e) {
... ... @@ -553,6 +563,7 @@
553 563  
554 564 this.isFocused = true; // so we put back focus after clicking with mouse on option elements
555 565 } else {
  566 + this.query = option.value;
556 567 this.values = [option];
557 568 this.lastRemoteQuery = '';
558 569 this.hideMenu();
... ... @@ -565,6 +576,7 @@
565 576 this.broadcast('Drop', 'on-update-popper');
566 577 },
567 578 onQueryChange(query) {
  579 + this.unchangedQuery = false;
568 580 this.query = query;
569 581 if (this.query.length > 0) this.visible = true;
570 582 },
... ...