import Vue from 'vue' import './tab_switcher.scss' export default Vue.component('tab-switcher', { name: 'TabSwitcher', props: { renderOnlyFocused: { required: false, type: Boolean, default: false }, onSwitch: { required: false, type: Function }, customActive: { required: false, type: String }, scrollableTabs: { required: false, type: Boolean, default: false } }, data () { return { active: this.$slots.default.findIndex(_ => _.tag) } }, beforeUpdate () { const currentSlot = this.$slots.default[this.active] if (!currentSlot.tag) { this.active = this.$slots.default.findIndex(_ => _.tag) } }, methods: { activateTab (index, dataset) { return (e) => { e.preventDefault() if (typeof this.onSwitch === 'function') { this.onSwitch.call(null, index, this.$slots.default[index].elm.dataset) } this.active = index } }, isActiveTab (index) { const customActiveIndex = this.$slots.default.findIndex(slot => { const dataFilter = slot.data && slot.data.attrs && slot.data.attrs['data-filter'] return this.customActive && this.customActive === dataFilter }) return customActiveIndex > -1 ? customActiveIndex === index : index === this.active } }, render (h) { const tabs = this.$slots.default .map((slot, index) => { if (!slot.tag) return const classesTab = ['tab'] const classesWrapper = ['tab-wrapper'] if (this.isActiveTab(index)) { classesTab.push('active') classesWrapper.push('active') } if (slot.data.attrs.image) { return (