import React from 'react' import ReactDOM from 'react-dom' import './index.scss' import classnames from 'classnames' const re = /(https?|ftp):\/\/[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]/ function ClosablePopup({ title, content, className, closable = true, close = function () { }, clickMaskClose = true, closeIcon = 'iconiconfront-2', afterClose = function () { }, remove = function () { } } = {}) { function unmountComponent() { ReactDOM.unmountComponentAtNode(div) if (div && div.parentNode) { div.parentNode.removeChild(div) } } function _close() { let _c = close() if (_c && _c.then) { _c.then(() => { unmountComponent() afterClose() }) } else { unmountComponent() afterClose() } } function clickMask() { if (closable) { return } if (!clickMaskClose) { return } _close() } const closablePopup = ( <div className={'closable-popup-mask'} onClick={clickMask}> <div className={classnames(['popup-container', className])}> <div className="title">{title}</div> <div className="content"> {content} </div> { closable && (re.test(closeIcon) ? <img src={closeIcon} alt="" className={'close-icon'} onClick={_close}/> : <i className={`close iconfont ${closeIcon}`} onClick={_close}/>) } </div> </div> ) const div = document.createElement('div') document.body.appendChild(div) ReactDOM.render(closablePopup, div) return { close: _close, remove: unmountComponent } } export default ClosablePopup