import type { ButtonProps } from '@/app/components/base/button' import Button from '@/app/components/base/button' import { PortalToFollowElem, PortalToFollowElemContent, } from '@/app/components/base/portal-to-follow-elem' import cn from '@/utils/classnames' import { RiCloseLine } from '@remixicon/react' import { noop } from 'lodash-es' import { memo } from 'react' import { useTranslation } from 'react-i18next' type ModalProps = { onClose?: () => void size?: 'sm' | 'md' title: string subTitle?: string children?: React.ReactNode confirmButtonText?: string onConfirm?: () => void cancelButtonText?: string onCancel?: () => void showExtraButton?: boolean extraButtonText?: string extraButtonVariant?: ButtonProps['variant'] onExtraButtonClick?: () => void footerSlot?: React.ReactNode bottomSlot?: React.ReactNode disabled?: boolean containerClassName?: string wrapperClassName?: string clickOutsideNotClose?: boolean } const Modal = ({ onClose, size = 'sm', title, subTitle, children, confirmButtonText, onConfirm, cancelButtonText, onCancel, showExtraButton, extraButtonVariant = 'warning', extraButtonText, onExtraButtonClick, footerSlot, bottomSlot, disabled, containerClassName, wrapperClassName, clickOutsideNotClose = false, }: ModalProps) => { const { t } = useTranslation() return (
e.stopPropagation()} >
{title} { subTitle && (
{subTitle}
) }
{ children && (
{children}
) }
{footerSlot}
{ showExtraButton && ( <>
) }
{bottomSlot && (
{bottomSlot}
)}
) } export default memo(Modal)