import React, { memo, useMemo } from 'react'; import classNames from 'classnames'; import ClearIcon from '@material-ui/icons/Clear'; import ButtonBase from '@material-ui/core/ButtonBase'; import Dialog from '@material-ui/core/Dialog'; import Button from '@material-ui/core/Button'; import Loading from '@Components/Base/Loading'; import Styles from './index.module.css'; import { ModalProps } from './types'; function Modal(props: ModalProps): React.ReactElement { /* Global & Local States */ const { open, onClose, onConfirm, typeSize, typeIsLoading, disableEscapeKeyDown, disableBackdropClick, disableCancelButton, disableConfirmButton, confirmButtonText, cancelButtonText, tipsText, children, className, mainName, titleClassName, actionClassName, title, closeIcon = true, disabledConfirm, } = props; /* Views */ const RenderSize = useMemo(() => { switch (typeSize) { case 'xs': return 'xs'; case 'sm': return 'sm'; case 'md': return 'md'; case 'lg': return 'lg'; case 'xl': return 'xl'; default: return 'sm'; } }, [typeSize]); const RenderCloseIcon = useMemo(() => { if (closeIcon) { return ( ); } return <>; }, [open, closeIcon, onClose]); const RenderTitle = useMemo(() => { if (title) { return
{title}
; } return <>; }, [title]); const RenderIsLoading = useMemo( () => , [typeIsLoading], ); const RenderCancelButton = useMemo(() => { if (!disableCancelButton) { return ( ); } return <>; }, [disableCancelButton, cancelButtonText, onClose]); const RenderConfirmButton = useMemo(() => { if (!disableConfirmButton) { return ( ); } return <>; }, [disableConfirmButton, confirmButtonText, onConfirm]); const RenderTipsText = useMemo(() => { if (tipsText) { return tipsText; } return <>; }, [tipsText]); /* Main */ return (
{RenderCloseIcon} {RenderTitle}
{children}
{RenderTipsText} {RenderCancelButton} {RenderConfirmButton}
{RenderIsLoading}
); } export default memo(Modal);