ultra-design
Version:
82 lines (67 loc) • 2.9 kB
JavaScript
import _defineProperty from '@babel/runtime/helpers/defineProperty';
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
import ReactDOM from 'react-dom';
import Loading from './loading.js';
import { ConfigContext } from '../config-provider/config-provider.js';
import { mergeProps } from '../utils/mergeProps.js';
import { useContext, useState, useEffect } from 'react';
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-loading');
if (root) {
ReactDOM.unmountComponentAtNode(root);
return root;
}
};
var createRoot = function createRoot() {
var root = document.createElement('div');
root.id = 'ultra-loading';
document.body.appendChild(root);
return root;
};
function loadingFn(options) {
var root = unmountRoot() || createRoot();
var LoadingWrapper = function LoadingWrapper(props) {
var options = props.options;
var context = useContext(ConfigContext);
var config = mergeProps(context, newConfig, options);
var _useState = useState(config),
_useState2 = _slicedToArray(_useState, 2),
loadingOptions = _useState2[0],
setLoadingOptions = _useState2[1];
useEffect(function () {
emitter.on('loading-config', function (e) {
setLoadingOptions(function (o) {
return mergeProps(o, e);
});
});
return function () {
emitter.all.clear();
};
}, []);
return jsx(Loading, _objectSpread({}, loadingOptions));
};
LoadingWrapper.defaultProps = {
options: {
fullScreen: true
}
};
ReactDOM.render(jsx(LoadingWrapper, {
options: options
}), root);
}
/**
* loading api function
*/
var loading = loadingFn;
loading.clear = unmountRoot;
loading.config = function (config) {
newConfig = config;
emitter.emit('loading-config', config);
};
var loading$1 = loading;
export { loading$1 as default };