UNPKG

vuetify

Version:

Vue.js 2 Semantic Component Framework

143 lines (140 loc) 5.31 kB
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; }; function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } // Components import VIcon from '../../components/VIcon'; // Mixins import Bootable from '../../mixins/bootable'; import Toggleable from '../../mixins/toggleable'; import { inject as RegistrableInject } from '../../mixins/registrable'; // Transitions import { VExpandTransition } from '../transitions'; /* @vue/component */ export default { name: 'v-list-group', mixins: [Bootable, RegistrableInject('list', 'v-list-group', 'v-list'), Toggleable], inject: ['listClick'], props: { activeClass: { type: String, default: 'primary--text' }, appendIcon: { type: String, default: '$vuetify.icons.expand' }, disabled: Boolean, group: String, noAction: Boolean, prependIcon: String, subGroup: Boolean }, data: function data() { return { groups: [] }; }, computed: { groupClasses: function groupClasses() { return { 'v-list__group--active': this.isActive, 'v-list__group--disabled': this.disabled }; }, headerClasses: function headerClasses() { return { 'v-list__group__header--active': this.isActive, 'v-list__group__header--sub-group': this.subGroup }; }, itemsClasses: function itemsClasses() { return { 'v-list__group__items--no-action': this.noAction }; } }, watch: { isActive: function isActive(val) { if (!this.subGroup && val) { this.listClick(this._uid); } }, $route: function $route(to) { var isActive = this.matchRoute(to.path); if (this.group) { if (isActive && this.isActive !== isActive) { this.listClick(this._uid); } this.isActive = isActive; } } }, mounted: function mounted() { this.list.register(this._uid, this.toggle); if (this.group && this.$route && this.value == null) { this.isActive = this.matchRoute(this.$route.path); } }, beforeDestroy: function beforeDestroy() { this.list.unregister(this._uid); }, methods: { click: function click(e) { if (this.disabled) return; this.$emit('click', e); this.isActive = !this.isActive; }, genIcon: function genIcon(icon) { return this.$createElement(VIcon, icon); }, genAppendIcon: function genAppendIcon() { var icon = !this.subGroup ? this.appendIcon : false; if (!icon && !this.$slots.appendIcon) return null; return this.$createElement('div', { staticClass: 'v-list__group__header__append-icon' }, [this.$slots.appendIcon || this.genIcon(icon)]); }, genGroup: function genGroup() { return this.$createElement('div', { staticClass: 'v-list__group__header', 'class': this.headerClasses, on: _extends({}, this.$listeners, { click: this.click }), ref: 'item' }, [this.genPrependIcon(), this.$slots.activator, this.genAppendIcon()]); }, genItems: function genItems() { return this.$createElement('div', { staticClass: 'v-list__group__items', 'class': this.itemsClasses, directives: [{ name: 'show', value: this.isActive }], ref: 'group' }, this.showLazyContent(this.$slots.default)); }, genPrependIcon: function genPrependIcon() { var icon = this.prependIcon ? this.prependIcon : this.subGroup ? '$vuetify.icons.subgroup' : false; if (!icon && !this.$slots.prependIcon) return null; return this.$createElement('div', { staticClass: 'v-list__group__header__prepend-icon', 'class': _defineProperty({}, this.activeClass, this.isActive) }, [this.$slots.prependIcon || this.genIcon(icon)]); }, toggle: function toggle(uid) { this.isActive = this._uid === uid; }, matchRoute: function matchRoute(to) { if (!this.group) return false; return to.match(this.group) !== null; } }, render: function render(h) { return h('div', { staticClass: 'v-list__group', 'class': this.groupClasses }, [this.genGroup(), h(VExpandTransition, [this.genItems()])]); } }; //# sourceMappingURL=VListGroup.js.map