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