UNPKG

th-vue-material

Version:
42 lines (35 loc) 895 B
// Theme mixin // Grab the closest ancestor component's `md-theme` attribute OR grab the // `md-name` attribute from an `<md-theme>` component. function getAncestorThemeName(component) { if (!component) { return null; } let name = component.mdTheme; if (!name && component.$options._componentTag === 'md-theme') { name = component.mdName; } return name || getAncestorThemeName(component.$parent); } export default { props: { mdTheme: String }, computed: { mdEffectiveTheme() { return getAncestorThemeName(this) || this.$material.currentTheme; }, themeClass() { return this.$material.prefix + this.mdEffectiveTheme; } }, watch: { mdTheme(value) { this.$material.useTheme(value); } }, beforeMount() { const localTheme = this.mdTheme; this.$material.useTheme(localTheme ? localTheme : 'default'); } };