39 lines
1.2 KiB
TypeScript
39 lines
1.2 KiB
TypeScript
import type { Key } from 'react';
|
|
import type {
|
|
ArgsProps,
|
|
JointContent,
|
|
MessageInstance,
|
|
MessageType,
|
|
TypeOpen,
|
|
} from 'antd/es/message/interface';
|
|
|
|
let messageApi: MessageInstance | null = null;
|
|
|
|
const noopMessage = Object.assign(() => undefined, {
|
|
then: (
|
|
onfulfilled?: ((value: boolean) => unknown) | null,
|
|
onrejected?: ((reason: unknown) => unknown) | null,
|
|
) => Promise.resolve(true).then(onfulfilled ?? undefined, onrejected ?? undefined),
|
|
}) as MessageType;
|
|
|
|
function createTypeOpen(type: 'info' | 'success' | 'error' | 'warning' | 'loading'): TypeOpen {
|
|
return (content: JointContent, duration?: number | VoidFunction, onClose?: VoidFunction) => {
|
|
if (!messageApi) return noopMessage;
|
|
return messageApi[type](content, duration, onClose);
|
|
};
|
|
}
|
|
|
|
export function setAntdMessageApi(api: MessageInstance | null) {
|
|
messageApi = api;
|
|
}
|
|
|
|
export const message = {
|
|
info: createTypeOpen('info'),
|
|
success: createTypeOpen('success'),
|
|
error: createTypeOpen('error'),
|
|
warning: createTypeOpen('warning'),
|
|
loading: createTypeOpen('loading'),
|
|
open: (args: ArgsProps) => messageApi?.open(args) ?? noopMessage,
|
|
destroy: (key?: Key) => messageApi?.destroy(key),
|
|
} satisfies MessageInstance;
|