import { ConfigProvider, message as oriMessage } from 'antd';
import {
ArgsProps,
ConfigOnClose,
ConfigOptions,
MessageApi,
} from 'antd/lib/message';
import { Icon } from '../Icon';
import React from 'react';
import './index.less';
import classNames from 'classnames';
import { getUuid } from '@btri-ui/utils';
type Props = {
type: string;
};
const IconComponent = (props: Props) => {
const { getPrefixCls } = React.useContext(ConfigProvider.ConfigContext);
const prefixCls = getPrefixCls('btri-message-icon');
const { type } = props;
const iconNames = {
info: 'AttentionRectangle',
success: 'CheckOnSquare',
warning: 'Caution',
error: 'ErrorDiamond',
normal: '',
loading: 'Loading',
close: 'CloseSmall',
};
return iconNames[type] ? (
) : (
<>>
);
};
type ExtraProps = {
closeIcon?: React.ReactNode;
};
type ConfigContent = React.ReactNode;
type ConfigDuration = number | (() => void);
type JointContent = ConfigContent | (ArgsProps & ExtraProps);
let message: MessageApi & {
normal: (
content: JointContent,
duration?: ConfigDuration,
onClose?: ConfigOnClose,
) => any;
} = { ...oriMessage, normal: () => {} };
message.config({ prefixCls: `btri-message ant-message` });
const config = (props: ConfigOptions) => {
const { prefixCls } = props;
oriMessage.config({
...props,
prefixCls: `btri-message ${prefixCls}`,
});
};
const getMsgFn = (type: string) => {
let showMethodType = type;
if (type === 'normal') {
showMethodType = 'info';
}
return (
content: JointContent,
duration?: ConfigDuration,
onClose?: ConfigOnClose,
) => {
if (typeof content === 'object') {
const newContent = content as ArgsProps & ExtraProps;
const key = newContent.key || getUuid();
return oriMessage[showMethodType]?.({
icon: ,
onClose,
duration,
...content,
content: (
{newContent.content}
{newContent.closeIcon && (
{
oriMessage.destroy(key);
}}
>
{newContent.closeIcon}
)}
),
key,
});
} else {
return oriMessage[showMethodType]?.({
icon: ,
content,
onClose,
duration,
});
}
};
};
message = {
...oriMessage,
info: getMsgFn('info'),
success: getMsgFn('success'),
warning: getMsgFn('warning'),
error: getMsgFn('error'),
normal: getMsgFn('normal'),
loading: getMsgFn('loading'),
config,
};
export { message };