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;