@ohu-mobile/core
Version:
73 lines (72 loc) • 2.25 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.portalRenderProps = exports.default = void 0;
var _vue = _interopRequireDefault(require("vue"));
var _defineComponent = require("./defineComponent");
var _env = require("../_config/env");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var portalRenderProps = exports.portalRenderProps = {
container: _defineComponent.props.ofType().required,
children: _defineComponent.props.ofType().required,
visible: (0, _defineComponent.props)(Boolean).default(false)
};
var _default = exports.default = (0, _defineComponent.defineComponent)('portal-render').create({
props: portalRenderProps,
watch: {
visible: function visible() {
this.renderChildren();
}
},
mounted: function mounted() {
this.renderChildren();
},
updated: function updated() {
if (this.visible) {
this.renderChildren();
}
},
beforeDestroy: function beforeDestroy() {
this.remove();
},
methods: {
remove: function remove() {
if (this._component) {
this._component.$destroy();
this._component = null;
if (this._wrapper && this._wrapper.parentNode) {
this._wrapper.parentNode.removeChild(this._wrapper);
this._wrapper = null;
}
}
},
renderChildren: function renderChildren() {
if (!this.visible) return;
var self = this;
var container = this.container;
if (!this._wrapper) {
var wrapper = document.createElement('div');
_env.env.NODE_ENV === 'test' && (wrapper.title = 'TEST');
this._wrapper = wrapper;
container.appendChild(wrapper);
}
if (!this._component && self._wrapper) {
var _self$$parent;
this._component = new _vue.default({
el: self._wrapper,
parent: (_self$$parent = self.$parent) !== null && _self$$parent !== void 0 ? _self$$parent : self,
mounted: function mounted() {
self._wrapper = this.$el;
},
render: function render() {
return self.children();
}
});
}
}
},
render: function render(h) {
return h();
}
});