import React, { memo, useMemo } from 'react'; import PropTypes from 'prop-types'; import classNames from 'classnames'; import LinearProgress from '@material-ui/core/LinearProgress'; import CircularProgress from '@material-ui/core/CircularProgress'; import { LoadingProps } from './types'; import Styles from './index.module.css'; function Loading(props: LoadingProps): React.ReactElement { /* Global & Local States */ const { typePosition, typeBackground, typeZIndex, typeIcon, isLoading, isHideText, text, } = props; /* Views */ const RenderPosition = useMemo(() => { switch (typePosition) { case 'relative': return Styles.relateScreenLoadingContainer; case 'absolute': return Styles.fullScreenLoadingContainer; default: return Styles.fullScreenLoadingContainer; } }, [typePosition]); const RenderBackground = useMemo(() => { switch (typeBackground) { case 'white': return Styles.backgroundWhite; case 'black': return Styles.backgroundBlack; default: return ''; } }, [typeBackground]); const RenderTextColor = useMemo(() => { switch (typeBackground) { case 'white': return Styles.loadingTextWhite; case 'black': return Styles.loadingTextBlack; default: return Styles.loadingTextWhite; } }, [typeBackground]); const RenderText = useMemo(() => { if (isHideText) { return ; } return
{text}
; }, [isHideText, text, typeBackground]); const RenderAnimation = useMemo(() => { switch (typeIcon) { case 'basic': return (
{RenderText}
); case 'text': return
{RenderText}
; case 'icon': return (
); case 'line:fix': return ; case 'line:relative': return ; default: return ; } }, [typeIcon, isHideText, text]); return ( <> {isLoading && (
{RenderAnimation}
)} ); } Loading.propTypes = { typePosition: PropTypes.string, typeBackground: PropTypes.string, typeZIndex: PropTypes.number, typeIcon: PropTypes.string, isLoading: PropTypes.bool, isHideText: PropTypes.bool, text: PropTypes.string, }; Loading.defaultProps = { typePosition: 'relative', typeBackground: '', typeZIndex: 10000, typeIcon: 'line:relative', isLoading: false, isHideText: false, text: '', }; export default memo(Loading);