Skip to content

Commit 072bf41

Browse files
authored
Merge pull request sagalbot#171 from fidgetwidget/non-multiple-improvements
Added features to non multiple selects
2 parents aabc43c + 1f8b301 commit 072bf41

File tree

3 files changed

+81
-0
lines changed

3 files changed

+81
-0
lines changed

dev.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131

3232
<body>
3333
<div id="app">
34+
<v-select placeholder="default" :options="options"></v-select>
3435
<v-select placeholder="multiple" multiple :options="options"></v-select>
3536
<v-select placeholder="multiple, taggable" multiple taggable :options="options" no-drop></v-select>
3637
<v-select placeholder="multiple, taggable, push-tags" multiple push-tags taggable :options="[{label: 'Foo', value: 'foo'}]"></v-select>

src/components/Select.vue

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,18 @@
115115
float: left;
116116
line-height: 24px;
117117
}
118+
.v-select.single .selected-tag {
119+
background-color: transparent;
120+
border-color: transparent;
121+
}
122+
.v-select.single.open .selected-tag {
123+
position: absolute;
124+
opacity: .5;
125+
}
126+
.v-select.single.open.searching .selected-tag,
127+
.v-select.single.loading .selected-tag {
128+
display: none;
129+
}
118130
.v-select .selected-tag .close {
119131
float: none;
120132
margin-right: 0;
@@ -131,6 +143,9 @@
131143
filter: alpha(opacity=20);
132144
opacity: .2;
133145
}
146+
.v-select.single.searching:not(.open):not(.loading) input[type="search"] {
147+
opacity: .2;
148+
}
134149
/* Search Input */
135150
.v-select input[type="search"]::-webkit-search-decoration,
136151
.v-select input[type="search"]::-webkit-search-cancel-button,
@@ -704,6 +719,9 @@
704719
* @return {void}
705720
*/
706721
onSearchBlur() {
722+
if (this.clearSearchOnBlur) {
723+
this.search = ''
724+
}
707725
this.open = false
708726
this.$emit('search:blur')
709727
},
@@ -773,12 +791,31 @@
773791
dropdownClasses() {
774792
return {
775793
open: this.dropdownOpen,
794+
single: !this.multiple,
795+
searching: this.searching,
776796
searchable: this.searchable,
777797
unsearchable: !this.searchable,
778798
loading: this.mutableLoading
779799
}
780800
},
781801
802+
/**
803+
* If search text should clear on blur
804+
* @return {Boolean} True when single and clearSearchOnSelect
805+
*/
806+
clearSearchOnBlur() {
807+
return this.clearSearchOnSelect && !this.multiple
808+
},
809+
810+
/**
811+
* Return the current state of the
812+
* search input
813+
* @return {Boolean} True if non empty value
814+
*/
815+
searching() {
816+
return !!this.search
817+
},
818+
782819
/**
783820
* Return the current state of the
784821
* dropdown menu.

test/unit/specs/Select.spec.js

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1144,4 +1144,47 @@ describe('Select.vue', () => {
11441144
})
11451145
})
11461146
})
1147+
1148+
describe('Single value options', () => {
1149+
it('should reset the search input on focus lost', (done) => {
1150+
const vm = new Vue({
1151+
template: '<div><v-select ref="select" :options="options" :value="value"></v-select></div>',
1152+
data: {
1153+
value: 'one',
1154+
options: ['one', 'two', 'three']
1155+
}
1156+
}).$mount()
1157+
1158+
vm.$children[0].open = true
1159+
vm.$refs.select.search = "t"
1160+
expect(vm.$refs.select.search).toEqual('t')
1161+
1162+
vm.$children[0].onSearchBlur()
1163+
Vue.nextTick(() => {
1164+
expect(vm.$refs.select.search).toEqual('')
1165+
done()
1166+
})
1167+
})
1168+
1169+
it ('should not reset the search input on focus lost when clearSearchOnSelect is false', (done) => {
1170+
const vm = new Vue({
1171+
template: '<div><v-select ref="select" :options="options" :value="value" :clear-search-on-select="false"></v-select></div>',
1172+
data: {
1173+
value: 'one',
1174+
options: ['one', 'two', 'three']
1175+
}
1176+
}).$mount()
1177+
expect(vm.$refs.select.clearSearchOnSelect).toEqual(false)
1178+
1179+
vm.$children[0].open = true
1180+
vm.$refs.select.search = "t"
1181+
expect(vm.$refs.select.search).toEqual('t')
1182+
1183+
vm.$children[0].onSearchBlur()
1184+
Vue.nextTick(() => {
1185+
expect(vm.$refs.select.search).toEqual('t')
1186+
done()
1187+
})
1188+
})
1189+
})
11471190
})

0 commit comments

Comments
 (0)