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.
84 lines
1.8 KiB
84 lines
1.8 KiB
"use strict";
|
|
|
|
exports.__esModule = true;
|
|
exports.ChildrenMixin = ChildrenMixin;
|
|
exports.ParentMixin = ParentMixin;
|
|
|
|
var _vnodes = require("../utils/vnodes");
|
|
|
|
function ChildrenMixin(_parent, options) {
|
|
var _inject, _computed;
|
|
|
|
if (options === void 0) {
|
|
options = {};
|
|
}
|
|
|
|
var indexKey = options.indexKey || 'index';
|
|
return {
|
|
inject: (_inject = {}, _inject[_parent] = {
|
|
default: null
|
|
}, _inject),
|
|
computed: (_computed = {
|
|
parent: function parent() {
|
|
if (this.disableBindRelation) {
|
|
return null;
|
|
}
|
|
|
|
return this[_parent];
|
|
}
|
|
}, _computed[indexKey] = function () {
|
|
this.bindRelation();
|
|
|
|
if (this.parent) {
|
|
return this.parent.children.indexOf(this);
|
|
}
|
|
|
|
return null;
|
|
}, _computed),
|
|
watch: {
|
|
disableBindRelation: function disableBindRelation(val) {
|
|
if (!val) {
|
|
this.bindRelation();
|
|
}
|
|
}
|
|
},
|
|
mounted: function mounted() {
|
|
this.bindRelation();
|
|
},
|
|
beforeDestroy: function beforeDestroy() {
|
|
var _this = this;
|
|
|
|
if (this.parent) {
|
|
this.parent.children = this.parent.children.filter(function (item) {
|
|
return item !== _this;
|
|
});
|
|
}
|
|
},
|
|
methods: {
|
|
bindRelation: function bindRelation() {
|
|
if (!this.parent || this.parent.children.indexOf(this) !== -1) {
|
|
return;
|
|
}
|
|
|
|
var children = [].concat(this.parent.children, [this]);
|
|
(0, _vnodes.sortChildren)(children, this.parent);
|
|
this.parent.children = children;
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
function ParentMixin(parent) {
|
|
return {
|
|
provide: function provide() {
|
|
var _ref;
|
|
|
|
return _ref = {}, _ref[parent] = this, _ref;
|
|
},
|
|
data: function data() {
|
|
return {
|
|
children: []
|
|
};
|
|
}
|
|
};
|
|
} |