export default { data() { return { hoverOption: -1 }; }, computed: { optionsAllDisabled() { return this.options.filter(option => option.visible).every(option => option.disabled); } }, watch: { hoverIndex(val) { if (typeof val === 'number' && val > -1) { this.hoverOption = this.options[val] || {}; } this.options.forEach(option => { option.hover = this.hoverOption === option; }); } }, methods: { navigateOptions(direction) { if (!this.visible) { this.visible = true; return; } if (this.options.length === 0 || this.filteredOptionsCount === 0) return; if (!this.optionsAllDisabled) { if (direction === 'next') { this.hoverIndex++; if (this.hoverIndex === this.options.length) { this.hoverIndex = 0; } } else if (direction === 'prev') { this.hoverIndex--; if (this.hoverIndex < 0) { this.hoverIndex = this.options.length - 1; } } const option = this.options[this.hoverIndex]; if (option.disabled === true || option.groupDisabled === true || !option.visible) { this.navigateOptions(direction); } this.$nextTick(() => this.scrollToOption(this.hoverOption)); } } } };