import React, { useMemo } from 'react' import withDefaults from '../utils/with-defaults' import useTheme from '../use-theme' import { NormalSizes } from '../utils/prop-types' import { HuiThemes } from '../themes' interface Props { size?: NormalSizes className?: string } const defaultProps = { size: 'medium' as NormalSizes, className: '' } type NativeAttrs = Omit, keyof Props> export type SpinnerProps = Props & typeof defaultProps & NativeAttrs const getSpans = (theme: HuiThemes) => { return [...new Array(12)].map((_, index) => ( )) } const getWidth = (size: NormalSizes) => { const widths: { [key in NormalSizes]: string } = { mini: '.75rem', small: '1rem', medium: '1.25rem', large: '1.875rem' } return widths[size] } const Spinner: React.FC = ({ size, className, ...props }) => { const theme = useTheme() const width = useMemo(() => getWidth(size), [size]) return (
{getSpans(theme)}
) } const MemoSpinner = React.memo(Spinner) export default withDefaults(MemoSpinner, defaultProps)