@alifd/meet-react
Version:
Fusion Mobile React UI System Component
65 lines (64 loc) • 1.83 kB
JavaScript
;
exports.__esModule = true;
exports.onProviderMount = onProviderMount;
exports.onProviderUnMount = onProviderUnMount;
exports.renderToRoot = renderToRoot;
var _react = _interopRequireDefault(require("react"));
var _reactDom = require("react-dom");
var _driverUniversal = _interopRequireDefault(require("driver-universal"));
var _env = require("./env");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var shared = {
Host: {
driver: {}
}
};
var provider = null;
function onProviderMount(p) {
provider = p;
}
function onProviderUnMount() {
provider = null;
}
function renderWithProvider(element, onHide) {
return provider.addPortal({
element: element,
onHide: onHide
});
}
function renderWithDriver(element, onHide) {
var _a;
if (!shared || !shared.Host || !shared.Host.driver) {
console.warn('shared.Host.driver is invalid, using DriverUniversal instead.');
}
((_a = shared === null || shared === void 0 ? void 0 : shared.Host) === null || _a === void 0 ? void 0 : _a.driver) || _driverUniversal.default;
var root = document.createElement('div');
var hid = false;
if (_env.isStrictWechatMiniProgram || _env.isStrictByteDanceMicroApp) {
(0, _reactDom.render)(element, root);
} else {
document.body.appendChild(root);
(0, _reactDom.render)(element, root);
}
return function hide() {
if (hid) {
return;
}
try {
hid = true;
(0, _reactDom.unmountComponentAtNode)(root);
document.body.removeChild(root);
if (onHide) {
onHide();
}
} catch (e) {
throw new Error('remove element error');
}
};
}
function renderToRoot(element, onHide) {
if (provider) {
return renderWithProvider(element, onHide);
}
return renderWithDriver(element, onHide);
}