shineout
Version:
Shein 前端组件库
75 lines (57 loc) • 1.82 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.destroy = destroy;
exports.getComponent = getComponent;
var _react = _interopRequireDefault(require("react"));
var _reactDom = _interopRequireDefault(require("react-dom"));
var _styles = require("./styles");
var _Container = _interopRequireDefault(require("./Container"));
var _is = require("../utils/is");
var _config = require("../config");
var elements = {};
var components = {};
function getElement(type, container) {
var defaultContainer = (0, _config.getDefaultContainer)();
var div = document.createElement('div');
div.className = (0, _styles.messageClass)('_', type);
var target = defaultContainer;
if (container && (0, _is.isFunc)(container)) {
target = container();
}
if (container && container instanceof HTMLElement) {
target = container;
}
target.appendChild(div);
elements[type] = div;
return div;
}
function destroy(type) {
if (elements[type]) {
_reactDom.default.unmountComponentAtNode(elements[type]);
var el = elements[type];
if (el && el.parentNode) el.parentNode.removeChild(el);
delete elements[type];
}
if (components[type]) {
delete components[type];
}
}
function getComponent(_ref) {
var position = _ref.position,
container = _ref.container;
return new Promise(function (resolve) {
var component = components[position];
if (component) {
resolve(component);
} else {
_reactDom.default.render(_react.default.createElement(_Container.default, {
ref: function ref(comp) {
components[position] = comp;
resolve(comp);
},
onDestory: destroy.bind(null, position)
}), getElement(position, container));
}
});
}