UNPKG

yqcloud-ui

Version:

An enterprise-class UI design language and React-based implementation

101 lines (86 loc) 3.07 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports['default'] = getContainerRenderMixin; var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); var _reactDom = require('react-dom'); var _reactDom2 = _interopRequireDefault(_reactDom); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } function defaultGetContainer() { var container = document.createElement('div'); document.body.appendChild(container); return container; } function getContainerRenderMixin(config) { var _config$autoMount = config.autoMount, autoMount = _config$autoMount === undefined ? true : _config$autoMount, _config$autoDestroy = config.autoDestroy, autoDestroy = _config$autoDestroy === undefined ? true : _config$autoDestroy, isVisible = config.isVisible, isForceRender = config.isForceRender, getComponent = config.getComponent, _config$getContainer = config.getContainer, getContainer = _config$getContainer === undefined ? defaultGetContainer : _config$getContainer; var mixin = void 0; function _renderComponent(instance, componentArg, ready) { if (!isVisible || instance._component || isVisible(instance) || isForceRender && isForceRender(instance)) { if (!instance._container) { instance._container = getContainer(instance); } var component = void 0; if (instance.getComponent) { component = instance.getComponent(componentArg); } else { component = getComponent(instance, componentArg); } _reactDom2['default'].unstable_renderSubtreeIntoContainer(instance, component, instance._container, function callback() { instance._component = this; if (ready) { ready.call(this); } }); } } if (autoMount) { mixin = (0, _extends3['default'])({}, mixin, { componentDidMount: function componentDidMount() { _renderComponent(this); }, componentDidUpdate: function componentDidUpdate() { _renderComponent(this); } }); } if (!autoMount || !autoDestroy) { mixin = (0, _extends3['default'])({}, mixin, { renderComponent: function renderComponent(componentArg, ready) { _renderComponent(this, componentArg, ready); } }); } function _removeContainer(instance) { if (instance._container) { var container = instance._container; _reactDom2['default'].unmountComponentAtNode(container); container.parentNode.removeChild(container); instance._container = null; } } if (autoDestroy) { mixin = (0, _extends3['default'])({}, mixin, { componentWillUnmount: function componentWillUnmount() { _removeContainer(this); } }); } else { mixin = (0, _extends3['default'])({}, mixin, { removeContainer: function removeContainer() { _removeContainer(this); } }); } return mixin; } module.exports = exports['default'];