import { toast } from 'sonner' import type { ReactNode } from 'react' export interface ConfirmOptions { title?: string message?: string okText?: string cancelText?: string } // 全局 confirm 函数的引用,将在 ConfirmDialogProvider 中设置 let globalConfirm: | ((options: ConfirmOptions & { message: string }) => Promise) | null = null export function setGlobalConfirm( confirmFn: (options: ConfirmOptions & { message: string }) => Promise ) { globalConfirm = confirmFn } // 确认对话框函数,使用 shadcn AlertDialog export function confirmToast( message: string, options: ConfirmOptions = {} ): Promise { if (!globalConfirm) { console.error('ConfirmDialogProvider not initialized') return Promise.resolve(false) } return globalConfirm({ message, ...options, }) } // 统一通知封装,避免组件直接依赖 sonner type Message = string | ReactNode function message(msg: Message, options?: Parameters[1]) { return toast(msg as any, options) } function success(msg: Message, options?: Parameters[1]) { return toast.success(msg as any, options) } function error(msg: Message, options?: Parameters[1]) { return toast.error(msg as any, options) } function info(msg: Message, options?: Parameters[1]) { return toast.info?.(msg as any, options) ?? toast(msg as any, options) } function warning(msg: Message, options?: Parameters[1]) { return toast.warning?.(msg as any, options) ?? toast(msg as any, options) } function custom( renderer: Parameters[0], options?: Parameters[1] ) { return toast.custom(renderer, options) } function dismiss(id?: string | number) { return toast.dismiss(id as any) } function promise(p: Promise | (() => Promise), msgs: any) { return toast.promise(p as any, msgs as any) } export const notify = { message, success, error, info, warning, custom, dismiss, promise, } export default { confirmToast, notify }