UNPKG

@ohu-mobile/core

Version:
73 lines (72 loc) 2.25 kB
"use strict"; 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(); } });