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

"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: []
};
}
};
}