import { ConfigProvider, ModalProps, Modal as OldModal } from 'antd'; import React, { useContext, useMemo, useRef } from 'react'; import { Icon } from '../Icon'; import { Button } from '../Button'; import Confirm, { ModalStaticFunctions, modalGlobalConfig } from './confirm'; import classNames from 'classnames'; import './index.less'; import { translate } from '../utils/index'; export interface ModalExtraProps { type?: 'default' | 'biggest'; noContent?: boolean; } const OriginModal = ({ className = '', type = 'default', width, closeIcon = null, footer = undefined, cancelText = null, cancelButtonProps = null, confirmLoading = false, okButtonProps = null, okText = null, okType = 'primary', noContent = false, style, ...props }: ModalExtraProps & ModalProps) => { // 为了与 antd 的生态保持兼容性,我们要求必须要使用 `.@{ant-prefix}` 变量来生成类名 const { getPrefixCls } = useContext(ConfigProvider.ConfigContext); const prefixCls = getPrefixCls('btri-modal'); const closeIconRef = useRef( closeIcon || ( ), ); const { locale } = useContext(ConfigProvider.ConfigContext); const DefaultFooter = useMemo(() => { return footer === undefined ? (
) : ( footer ); }, [footer, cancelText, okText, props.onCancel, props.onOk, confirmLoading]); const getStyle = () => { return props.centered ? {} : style || { top: '20%' }; }; const defaultStyle = useMemo(() => { if (width) { return { width, }; } const widths = { default: '480px', biggest: '960px', }; return { maxWidth: widths[type], minWidth: '320px' }; }, [type, width]); return ( ); }; type ModalType = typeof OriginModal & ModalStaticFunctions & { useModal: typeof OldModal.useModal; destroyAll: () => void; config: typeof modalGlobalConfig; }; const Modal = OriginModal as ModalType; Modal.info = Confirm.info; Modal.warning = Confirm.warning; Modal.warn = Confirm.warn; Modal.success = Confirm.success; Modal.error = Confirm.error; Modal.confirm = Confirm.confirm; Modal.useModal = OldModal.useModal; export { Modal };