Files
live-hub-py/web/frontend/src/utils/antdMessage.ts
T
2026-07-24 12:48:02 +08:00

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;