UNPKG

@i-novus/ui-core

Version:

Базовые UI компоненты

27 lines (26 loc) 1.41 kB
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import { useEffect, useState, forwardRef } from 'react'; import { debounce } from 'throttle-debounce'; import classNames from 'classnames'; import { useConfigProvider } from '../core'; import { SpinnerIcon } from '../core/icons'; import { Icon } from '../data-display/Icon'; export const Spin = forwardRef((props, ref) => { const { className, iconClassName, prefix, indicator = _jsx(SpinnerIcon, {}), spinning = true, delay = 500, variant = 'transparent', children, ...restProps } = props; const { getPrefix } = useConfigProvider(); const prefixCls = getPrefix(prefix); const [spinningInternal, setSpinningInternal] = useState(false); useEffect(() => { if (spinning) { const showSpinner = debounce(delay, () => { setSpinningInternal(true); }); showSpinner(); return () => { showSpinner?.cancel(); }; } return () => { }; }, [delay, spinning]); return (_jsxs("div", { ref: ref, className: classNames(`${prefixCls}-spin`, `${prefixCls}-spin_${variant}`, { [`${prefixCls}-spin_spinning`]: spinning, }, className), ...restProps, children: [children, spinningInternal && (_jsx("div", { className: `${prefixCls}-spin__container`, children: _jsx(Icon, { icon: indicator, className: iconClassName }) }))] })); });