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 };