@s-ui/react-atom-spinner
Version:
> An animated loop used for giving users feedback while the content of a page or section is being loaded.
58 lines • 2.41 kB
JavaScript
import { forwardRef, useEffect, useRef, useState } from 'react';
import PropTypes from 'prop-types';
import Injector from '@s-ui/react-primitive-injector';
import SUILoader from './SUILoader/index.js';
import DefaultSpinner from './DefaultSpinner.js';
import { addParentClass, DELAY, getParentClassName, OVERLAY_TYPES, removeParentClass, SIZES, TYPES } from './settings.js';
import { jsx as _jsx } from "react/jsx-runtime";
var AtomSpinner = /*#__PURE__*/forwardRef(function (_ref, forwardedRef) {
var _ref$children = _ref.children,
children = _ref$children === void 0 ? /*#__PURE__*/_jsx(DefaultSpinner, {}) : _ref$children,
_ref$isDelayed = _ref.isDelayed,
isDelayedFromProps = _ref$isDelayed === void 0 ? false : _ref$isDelayed,
_ref$loader = _ref.loader,
loader = _ref$loader === void 0 ? /*#__PURE__*/_jsx(SUILoader, {}) : _ref$loader,
_ref$overlayType = _ref.overlayType,
overlayType = _ref$overlayType === void 0 ? OVERLAY_TYPES.LIGHT : _ref$overlayType,
_ref$size = _ref.size,
size = _ref$size === void 0 ? SIZES.MEDIUM : _ref$size,
_ref$type = _ref.type,
type = _ref$type === void 0 ? TYPES.SECTION : _ref$type;
var _useState = useState(isDelayedFromProps),
isDelayed = _useState[0],
setIsDelayed = _useState[1];
var refSpinner = useRef();
useEffect(function () {
var parentClassName = getParentClassName({
overlayType: overlayType,
size: size,
type: type
});
var parentNodeClassList = refSpinner.current.parentNode.classList;
if (!isDelayed) addParentClass(parentNodeClassList)(parentClassName);
var timer = setTimeout(function () {
setIsDelayed(false);
addParentClass(parentNodeClassList)(parentClassName);
}, DELAY);
return function () {
clearTimeout(timer);
removeParentClass(parentNodeClassList)(parentClassName);
};
}, [isDelayed, overlayType, size, type]);
return /*#__PURE__*/_jsx("div", {
ref: refSpinner,
className: "sui-AtomSpinner-content",
children: /*#__PURE__*/_jsx(Injector, {
isDelayed: isDelayed,
loader: loader,
overlayType: overlayType,
ref: forwardedRef,
size: size,
type: type,
children: children
})
});
});
AtomSpinner.displayName = 'AtomSpinner';
export { OVERLAY_TYPES as atomSpinnerOverlayTypes, TYPES as atomSpinnerTypes, SIZES as atomSpinnerSizes };
export default AtomSpinner;