vuetify
Version:
Vue.js 2 Semantic Component Framework
146 lines (126 loc) • 4.89 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
/**
* Select computed properties
*
* @mixin
*
* Computed properties for
* the v-select component
*/
exports.default = {
computed: {
classes: function classes() {
var classes = _extends({}, this.genSoloClasses(), {
'input-group--text-field input-group--select': true,
'input-group--auto': this.auto,
'input-group--overflow': this.overflow,
'input-group--segmented': this.segmented,
'input-group--editable': this.editable,
'input-group--autocomplete': this.isAutocomplete,
'input-group--single-line': this.singleLine || this.isDropdown,
'input-group--multi-line': this.multiLine,
'input-group--chips': this.chips,
'input-group--multiple': this.multiple,
'input-group--open': this.menuIsVisible
});
if (this.hasError) {
classes['error--text'] = true;
} else {
return this.addTextColorClassChecks(classes);
}
return classes;
},
computedContentClass: function computedContentClass() {
var children = ['menu__content--select', this.auto ? 'menu__content--auto' : '', this.isDropdown ? 'menu__content--dropdown' : '', this.isAutocomplete ? 'menu__content--autocomplete' : '', this.contentClass || ''];
return children.join(' ');
},
computedItems: function computedItems() {
return this.filterDuplicates(this.cachedItems.concat(this.items));
},
/**
* The range of the current input text
*
* @return {Number}
*/
currentRange: function currentRange() {
if (this.selectedItem == null) return 0;
return this.getText(this.selectedItem).toString().length;
},
filteredItems: function filteredItems() {
// If we are not actively filtering
// Show all available items
var items = this.isNotFiltering ? this.computedItems : this.filterSearch();
return !this.auto ? items.slice(0, this.lastItem) : items;
},
hideSelections: function hideSelections() {
return this.isAutocomplete && !this.isMultiple && this.isFocused && !this.chips && !this.$scopedSlots.selection;
},
isNotFiltering: function isNotFiltering() {
return this.isAutocomplete && this.isDirty && this.searchValue === this.getText(this.selectedItem);
},
isHidingSelected: function isHidingSelected() {
return this.hideSelected && this.isAutocomplete && this.isMultiple;
},
isAutocomplete: function isAutocomplete() {
return this.autocomplete || this.editable || this.tags || this.combobox;
},
isDirty: function isDirty() {
return this.selectedItems.length > 0 || this.isAutocomplete && this.searchValue;
},
isDropdown: function isDropdown() {
return this.segmented || this.overflow || this.editable || this.isSolo;
},
isMultiple: function isMultiple() {
return this.multiple || this.tags;
},
isAnyValueAllowed: function isAnyValueAllowed() {
return this.tags || this.combobox;
},
menuIsVisible: function menuIsVisible() {
return this.menuIsActive && this.computedItems.length > 0 && (!this.isAnyValueAllowed || this.filteredItems.length > 0);
},
menuItems: function menuItems() {
var _this = this;
return this.isHidingSelected ? this.filteredItems.filter(function (o) {
return (_this.selectedItems || []).indexOf(o) === -1;
}) : this.filteredItems;
},
nudgeTop: function nudgeTop() {
var nudgeTop = -18;
if (this.isSolo) nudgeTop = 0;else if (this.shouldOffset) {
nudgeTop += 44;
nudgeTop += this.hideDetails ? -24 : 0;
nudgeTop += this.isAutocomplete && !this.isDropdown ? -2 : 0;
}
return nudgeTop;
},
searchValue: {
get: function get() {
return this.lazySearch;
},
set: function set(val) {
var _this2 = this;
if (!this.isAutocomplete || this.selectedIndex > -1) return;
this.lazySearch = val;
clearTimeout(this.searchTimeout);
this.searchTimeout = setTimeout(function () {
_this2.$emit('update:searchInput', val);
}, this.debounceSearch);
}
},
selectedItem: function selectedItem() {
var _this3 = this;
if (this.isMultiple) return null;
return this.selectedItems.find(function (i) {
return _this3.getValue(i) === _this3.getValue(_this3.inputValue);
});
},
shouldOffset: function shouldOffset() {
return this.isAutocomplete || this.isDropdown;
}
}
};