You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
112 lines
2.6 KiB
112 lines
2.6 KiB
"use strict";
|
|
|
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
|
|
exports.__esModule = true;
|
|
exports.default = void 0;
|
|
|
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
|
|
var _utils = require("../utils");
|
|
|
|
var _relation = require("../mixins/relation");
|
|
|
|
var _router = require("../utils/router");
|
|
|
|
var _createNamespace = (0, _utils.createNamespace)('tab'),
|
|
createComponent = _createNamespace[0],
|
|
bem = _createNamespace[1];
|
|
|
|
var _default = createComponent({
|
|
mixins: [(0, _relation.ChildrenMixin)('vanTabs')],
|
|
props: (0, _extends2.default)({}, _router.routeProps, {
|
|
dot: Boolean,
|
|
name: [Number, String],
|
|
// @deprecated
|
|
info: [Number, String],
|
|
badge: [Number, String],
|
|
title: String,
|
|
titleStyle: null,
|
|
disabled: Boolean
|
|
}),
|
|
data: function data() {
|
|
return {
|
|
inited: false
|
|
};
|
|
},
|
|
computed: {
|
|
computedName: function computedName() {
|
|
var _this$name;
|
|
|
|
return (_this$name = this.name) != null ? _this$name : this.index;
|
|
},
|
|
isActive: function isActive() {
|
|
var active = this.computedName === this.parent.currentName;
|
|
|
|
if (active) {
|
|
this.inited = true;
|
|
}
|
|
|
|
return active;
|
|
}
|
|
},
|
|
watch: {
|
|
title: function title() {
|
|
this.parent.setLine();
|
|
},
|
|
inited: function inited(val) {
|
|
var _this = this;
|
|
|
|
if (this.parent.lazyRender && val) {
|
|
this.$nextTick(function () {
|
|
_this.parent.$emit('rendered', _this.computedName, _this.title);
|
|
});
|
|
}
|
|
}
|
|
},
|
|
render: function render(h) {
|
|
var slots = this.slots,
|
|
parent = this.parent,
|
|
isActive = this.isActive;
|
|
var slotContent = slots();
|
|
|
|
if (process.env.NODE_ENV === 'development' && this.info) {
|
|
console.warn('[Vant] Tab: "info" prop is deprecated, use "badge" prop instead.');
|
|
}
|
|
|
|
if (!slotContent && !parent.animated) {
|
|
return;
|
|
}
|
|
|
|
var show = parent.scrollspy || isActive;
|
|
var shouldRender = this.inited || parent.scrollspy || !parent.lazyRender;
|
|
var Content = shouldRender ? slotContent : h();
|
|
|
|
if (parent.animated) {
|
|
return h("div", {
|
|
"attrs": {
|
|
"role": "tabpanel",
|
|
"aria-hidden": !isActive
|
|
},
|
|
"class": bem('pane-wrapper', {
|
|
inactive: !isActive
|
|
})
|
|
}, [h("div", {
|
|
"class": bem('pane')
|
|
}, [Content])]);
|
|
}
|
|
|
|
return h("div", {
|
|
"directives": [{
|
|
name: "show",
|
|
value: show
|
|
}],
|
|
"attrs": {
|
|
"role": "tabpanel"
|
|
},
|
|
"class": bem('pane')
|
|
}, [Content]);
|
|
}
|
|
});
|
|
|
|
exports.default = _default; |