/// import { useState } from 'react' import { confirmToast, notify } from '../lib/notify' const toastOptions = [ 'message', 'success', 'info', 'warning', 'error', 'custom', ] as const type ToastType = (typeof toastOptions)[number] const customRenderer = () => (

Sonner 自定义通知

这是一个通过 `notify.custom` 渲染的测试 Toast

) export function DevToastController() { const [type, setType] = useState('success') const [message, setMessage] = useState('来自 Dev 控制器的测试通知') const [duration, setDuration] = useState(2200) if (!import.meta.env.DEV) { return null } const triggerToast = async () => { switch (type) { case 'message': notify.message(message, { duration }) break case 'success': notify.success(message, { duration }) break case 'info': notify.info(message, { duration }) break case 'warning': notify.warning(message, { duration }) break case 'error': notify.error(message, { duration }) break case 'custom': notify.custom(() => customRenderer(), { duration }) break } } const triggerConfirm = async () => { const confirmed = await confirmToast(message, { okText: '继续', cancelText: '取消', }) if (confirmed) { notify.success('确认按钮已点击', { duration: 2000 }) } else { notify.message('已取消确认逻辑', { duration: 2000 }) } } return (
Dev Sonner 控制器 仅在 dev 模式可见
) } export default DevToastController