@ttk/component
Version:
ttk组件库
66 lines (60 loc) • 1.58 kB
JavaScript
import React from 'react'
import ReactDOM from 'react-dom'
import Modal from './DialogComponent'
// import {Modal} from 'antd' // './ModalComponent'
export const destroyFns = []
export default function open(config) {
let currentConfig = { ...config, close, visible: true }
const div = document.createElement('div')
document.body.appendChild(div);
const destroy = (...args) => {
const unmountResult = ReactDOM.unmountComponentAtNode(div);
if (unmountResult && div.parentNode) {
div.parentNode.removeChild(div);
}
const triggerCancel = args.some(param => param && param.triggerCancel);
if (config.onCancel && triggerCancel) {
config.onCancel(...args);
}
for (let i = 0; i < destroyFns.length; i++) {
const fn = destroyFns[i];
// eslint-disable-next-line no-use-before-define
if (fn === close) {
destroyFns.splice(i, 1);
break;
}
}
}
const close = (...args) => {
currentConfig = {
...currentConfig,
visible: false,
afterClose: destroy.bind(this, ...args),
};
render(currentConfig);
}
const update = (newConfig) => {
currentConfig = {
...currentConfig,
...newConfig,
};
render(currentConfig);
}
function render({ content, ...props }) {
ReactDOM.render(
<Modal
{...props}
>
{content}
</Modal>
,
div
)
}
render(currentConfig)
destroyFns.push(close)
return {
destroy: close,
update
}
}