import React, { useMemo } from 'react'; import { Modal, ModalOverlay, ModalContent, ModalCloseButton, type ModalContentProps, Box, type ImageProps, Flex } from '@chakra-ui/react'; import MyBox from '../../../common/MyBox'; import { useSystem } from '../../../../hooks/useSystem'; import Avatar from '../../../common/Avatar'; export interface MyModalProps extends ModalContentProps { iconSrc?: string; iconColor?: ImageProps['color']; title?: any; contentPx?: ModalContentProps['px']; contentPy?: ModalContentProps['py']; headerPx?: ModalContentProps['px']; isCentered?: boolean; isLoading?: boolean; isOpen?: boolean; onClose?: () => void; closeOnOverlayClick?: boolean; size?: 'sm' | 'md' | 'lg'; showCloseButton?: boolean; } const MyModal = ({ isOpen = true, onClose, iconSrc, title, children, isCentered, isLoading, closeOnOverlayClick = true, iconColor, size = 'sm', showCloseButton = true, contentPx = '8', contentPy = '8', headerPx = 0, ...props }: MyModalProps) => { const { isPc } = useSystem(); const sizeData = useMemo(() => { const map = { sm: { w: '400px' }, md: { w: '560px' }, lg: { w: '800px' } }; return map[size]; }, [size]); return ( onClose?.()} size={size} autoFocus={false} isCentered={isPc ? isCentered : true} blockScrollOnMount={false} allowPinchZoom scrollBehavior={'inside'} closeOnOverlayClick={closeOnOverlayClick} returnFocusOnClose={false} > {onClose && } {!!title && ( {iconSrc && ( <> )} {title} )} {children} ); }; export default React.memo(MyModal);