114 lines
2.6 KiB
JavaScript
114 lines
2.6 KiB
JavaScript
|
// Styles
|
||
|
import "../../../src/components/VStepper/VStepper.sass"; // Mixins
|
||
|
|
||
|
import { provide as RegistrableProvide } from '../../mixins/registrable';
|
||
|
import Proxyable from '../../mixins/proxyable';
|
||
|
import Themeable from '../../mixins/themeable'; // Utilities
|
||
|
|
||
|
import mixins from '../../util/mixins';
|
||
|
import { breaking } from '../../util/console';
|
||
|
const baseMixins = mixins(RegistrableProvide('stepper'), Proxyable, Themeable);
|
||
|
/* @vue/component */
|
||
|
|
||
|
export default baseMixins.extend({
|
||
|
name: 'v-stepper',
|
||
|
|
||
|
provide() {
|
||
|
return {
|
||
|
stepClick: this.stepClick,
|
||
|
isVertical: this.vertical
|
||
|
};
|
||
|
},
|
||
|
|
||
|
props: {
|
||
|
altLabels: Boolean,
|
||
|
nonLinear: Boolean,
|
||
|
vertical: Boolean
|
||
|
},
|
||
|
|
||
|
data() {
|
||
|
return {
|
||
|
isBooted: false,
|
||
|
steps: [],
|
||
|
content: [],
|
||
|
isReverse: false
|
||
|
};
|
||
|
},
|
||
|
|
||
|
computed: {
|
||
|
classes() {
|
||
|
return {
|
||
|
'v-stepper--is-booted': this.isBooted,
|
||
|
'v-stepper--vertical': this.vertical,
|
||
|
'v-stepper--alt-labels': this.altLabels,
|
||
|
'v-stepper--non-linear': this.nonLinear,
|
||
|
...this.themeClasses
|
||
|
};
|
||
|
}
|
||
|
|
||
|
},
|
||
|
watch: {
|
||
|
internalValue(val, oldVal) {
|
||
|
this.isReverse = Number(val) < Number(oldVal);
|
||
|
oldVal && (this.isBooted = true);
|
||
|
this.updateView();
|
||
|
}
|
||
|
|
||
|
},
|
||
|
|
||
|
created() {
|
||
|
/* istanbul ignore next */
|
||
|
if (this.$listeners.input) {
|
||
|
breaking('@input', '@change', this);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
mounted() {
|
||
|
this.internalLazyValue = this.value || (this.steps[0] || {}).step || 1;
|
||
|
this.updateView();
|
||
|
},
|
||
|
|
||
|
methods: {
|
||
|
register(item) {
|
||
|
if (item.$options.name === 'v-stepper-step') {
|
||
|
this.steps.push(item);
|
||
|
} else if (item.$options.name === 'v-stepper-content') {
|
||
|
item.isVertical = this.vertical;
|
||
|
this.content.push(item);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
unregister(item) {
|
||
|
if (item.$options.name === 'v-stepper-step') {
|
||
|
this.steps = this.steps.filter(i => i !== item);
|
||
|
} else if (item.$options.name === 'v-stepper-content') {
|
||
|
item.isVertical = this.vertical;
|
||
|
this.content = this.content.filter(i => i !== item);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
stepClick(step) {
|
||
|
this.$nextTick(() => this.internalValue = step);
|
||
|
},
|
||
|
|
||
|
updateView() {
|
||
|
for (let index = this.steps.length; --index >= 0;) {
|
||
|
this.steps[index].toggle(this.internalValue);
|
||
|
}
|
||
|
|
||
|
for (let index = this.content.length; --index >= 0;) {
|
||
|
this.content[index].toggle(this.internalValue, this.isReverse);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
},
|
||
|
|
||
|
render(h) {
|
||
|
return h('div', {
|
||
|
staticClass: 'v-stepper',
|
||
|
class: this.classes
|
||
|
}, this.$slots.default);
|
||
|
}
|
||
|
|
||
|
});
|
||
|
//# sourceMappingURL=VStepper.js.map
|