Skip to content

Commit b8b5e59

Browse files
authored
Merge pull request sagalbot#118 from evanslify/master
Add option to disable the entire component
2 parents 276bc86 + 76fe00f commit b8b5e59

File tree

4 files changed

+45
-8
lines changed

4 files changed

+45
-8
lines changed

dist/vue-select.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/vue-select.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/components/Select.vue

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,19 @@
33
position: relative;
44
font-family: sans-serif;
55
}
6+
7+
.v-select .disabled {
8+
cursor: not-allowed !important;
9+
background-color: rgb(248, 248, 248) !important;
10+
}
11+
612
.v-select,
713
.v-select * {
814
-webkit-box-sizing: border-box;
915
-moz-box-sizing: border-box;
1016
box-sizing: border-box;
1117
}
18+
1219
/* Open Indicator */
1320
.v-select .open-indicator {
1421
position: absolute;
@@ -267,7 +274,7 @@
267274

268275
<template>
269276
<div class="dropdown v-select" :class="dropdownClasses">
270-
<div ref="toggle" @mousedown.prevent="toggleDropdown" class="dropdown-toggle">
277+
<div ref="toggle" @mousedown.prevent="toggleDropdown" :class="['dropdown-toggle', 'clearfix', {'disabled': disabled}]" type="button">
271278

272279
<span class="selected-tag" v-for="option in valueAsArray" v-bind:key="option.index">
273280
<slot name="selected-option" v-bind="option">
@@ -289,15 +296,15 @@
289296
@blur="onSearchBlur"
290297
@focus="onSearchFocus"
291298
type="search"
292-
class="form-control"
299+
:class="[{'disabled': disabled}, 'form-control']"
293300
:placeholder="searchPlaceholder"
294301
:readonly="!searchable"
295302
:style="{ width: isValueEmpty ? '100%' : 'auto' }"
296303
:id="inputId"
297304
aria-label="Search for option"
298305
>
299306

300-
<i v-if="!noDrop" ref="openIndicator" role="presentation" class="open-indicator"></i>
307+
<i v-if="!noDrop" ref="openIndicator" role="presentation" :class="[{'disabled': disabled}, 'open-indicator']"></i>
301308

302309
<slot name="spinner">
303310
<div class="spinner" v-show="mutableLoading">Loading...</div>
@@ -354,6 +361,15 @@
354361
},
355362
},
356363
364+
/**
365+
* Disable the entire component.
366+
* @type {Boolean}
367+
*/
368+
disabled: {
369+
type: Boolean,
370+
default: false
371+
},
372+
357373
/**
358374
* Sets the max-height property on the dropdown list.
359375
* @deprecated
@@ -675,8 +691,10 @@
675691
if (this.open) {
676692
this.$refs.search.blur() // dropdown will close on blur
677693
} else {
678-
this.open = true
679-
this.$refs.search.focus()
694+
if (!this.disabled) {
695+
this.open = true
696+
this.$refs.search.focus()
697+
}
680698
}
681699
}
682700
},

test/unit/specs/Select.spec.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,25 @@ describe('Select.vue', () => {
315315
})
316316

317317
describe('Toggling Dropdown', () => {
318+
it('should not open the dropdown when the el is clicked but the component is disabled', (done) => {
319+
const vm = new Vue({
320+
template: '<div><v-select :options="options" :value="value" disabled></v-select></div>',
321+
components: {vSelect},
322+
data: {
323+
value: [{label: 'one'}],
324+
options: [{label: 'one'}]
325+
}
326+
}).$mount()
327+
328+
vm.$children[0].toggleDropdown({target: vm.$children[0].$refs.search})
329+
Vue.nextTick(() => {
330+
Vue.nextTick(() => {
331+
expect(vm.$children[0].open).toEqual(false)
332+
done()
333+
})
334+
})
335+
})
336+
318337
it('should open the dropdown when the el is clicked', (done) => {
319338
const vm = new Vue({
320339
template: '<div><v-select :options="options" :value="value"></v-select></div>',

0 commit comments

Comments
 (0)