@antv/s2-react
Version:
use S2 with react
60 lines • 1.94 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.invokeComponent = void 0;
const tslib_1 = require("tslib");
const react_1 = tslib_1.__importDefault(require("react"));
const SpreadSheetContext_1 = require("../context/SpreadSheetContext");
const reactRender_1 = require("./reactRender");
/**
* 挂载组件
*/
function invokeComponent(options) {
const { id, s2, params, onCleanup, component: Component } = options;
if (id) {
const container = document.querySelector(`#${id}`);
if (container) {
const result = (0, reactRender_1.reactUnmount)(container);
if (result && container.parentNode) {
container.parentNode.removeChild(container);
return;
}
}
}
const container = document.createElement('div');
if (id) {
container.id = id;
}
document.body.appendChild(container);
let resolveCb;
let rejectCb;
function destroy() {
(0, reactRender_1.reactUnmount)(container);
if (container.parentNode) {
container.parentNode.removeChild(container);
if (onCleanup) {
onCleanup();
}
}
}
function onClose() {
destroy();
rejectCb();
}
const handler = new Promise((resolve, reject) => {
resolveCb = resolve;
rejectCb = reject;
}).then((val) => {
onClose();
return val;
});
function render() {
setTimeout(() => {
(0, reactRender_1.reactRender)(react_1.default.createElement(SpreadSheetContext_1.SpreadSheetContext.Provider, { value: s2 },
react_1.default.createElement(Component, { onCancel: onClose, resolver: resolveCb, params: params })), container);
});
}
render();
return handler;
}
exports.invokeComponent = invokeComponent;
//# sourceMappingURL=invokeComponent.js.map
;