ultra-design
Version:
123 lines (102 loc) • 3.61 kB
JavaScript
import _defineProperty from '@babel/runtime/helpers/defineProperty';
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
import 'prop-types';
import { useContext, useState, useEffect } from 'react';
import ReactDOM from 'react-dom';
import { Info, Success, Error } from '@icon-park/react';
import ToastInternal from './toast-internal.js';
import { ConfigContext } from '../config-provider/config-provider.js';
import { mergeProps } from '../utils/mergeProps.js';
import { emitter } from '../utils/mitt.js';
import { jsx } from '@emotion/react/jsx-runtime';
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
var newConfig = {};
var unmountRoot = function unmountRoot() {
var root = document.getElementById('ultra-toast');
if (root) {
ReactDOM.unmountComponentAtNode(root);
return root;
}
};
var createRoot = function createRoot() {
var root = document.createElement('div');
root.id = 'ultra-toast';
document.body.appendChild(root);
return root;
};
function toast(data, duration, onClose) {
var root = unmountRoot() || createRoot();
var options = {};
if (typeof data === 'string') {
options.content = data;
options.onClose = onClose;
if (duration) {
options.duration = duration;
}
} else {
Object.assign(options, data);
}
var ToastWrapper = function ToastWrapper(props) {
var options = props.options;
var context = useContext(ConfigContext);
var config = mergeProps(context, newConfig, options);
var _useState = useState(config),
_useState2 = _slicedToArray(_useState, 2),
toastOptions = _useState2[0],
setToastOptions = _useState2[1];
useEffect(function () {
emitter.on('toast-config', function (e) {
setToastOptions(function (o) {
return mergeProps(o, e);
});
});
return function () {
emitter.all.clear();
};
}, []);
return jsx(ToastInternal, _objectSpread({}, toastOptions));
};
ReactDOM.render(jsx(ToastWrapper, {
options: options
}), root);
}
var iconMap = {
info: jsx(Info, {
fill: "#13c2c2"
}),
success: jsx(Success, {
fill: "#00B42A"
}),
warning: jsx(Info, {
fill: "#FF7D00"
}),
error: jsx(Error, {
fill: "#F53F3F"
})
};
/**
* toast mesaage component
*/
var Toast = toast;
Toast.clear = unmountRoot;
Toast.config = function (config) {
newConfig = config;
emitter.emit('toast-config', config);
};
var _loop = function _loop(key) {
var k = key;
Toast[k] = function (content, duration, onClose) {
toast({
content: content,
duration: duration,
onClose: onClose,
icon: iconMap[k]
});
};
};
for (var key in iconMap) {
_loop(key);
}
var Toast$1 = Toast;
export { Toast$1 as default };