import {useEffect,useRef} from 'react'; import {Bell,CheckCircle2,Info,Trash2,TriangleAlert,XCircle} from 'lucide-react'; import {Badge,IconButton,Popover} from '../../components/ui'; export interface WorkbenchNotification{id:number;title:string;detail?:string;tone:'success'|'warning'|'danger'|'info';at:number;} const icons={success:CheckCircle2,warning:TriangleAlert,danger:XCircle,info:Info}; export function NotificationCenter({items,onDismiss,onClear,onOpenLog}:{items:WorkbenchNotification[];onDismiss:(id:number)=>void;onClear:()=>void;onOpenLog?:()=>void}){return {items.length>0&&}}>{({close})=>

通知

{onOpenLog&&}{items.length>0&&}
{items.length?items.map(item=>{const Icon=icons[item.tone];return

{item.title}

{new Date(item.at).toLocaleTimeString('zh-CN',{hour:'2-digit',minute:'2-digit'})}
{item.detail&&

{item.detail}

}
onDismiss(item.id)}>
}):

当前没有通知

}
}
;} export function ToastViewport({item,onDismiss}:{item?:WorkbenchNotification;onDismiss:(id:number)=>void}){const dismissRef=useRef(onDismiss);useEffect(()=>{dismissRef.current=onDismiss;},[onDismiss]);useEffect(()=>{if(!item)return;const timer=window.setTimeout(()=>dismissRef.current(item.id),4000);return()=>window.clearTimeout(timer);},[item]);if(!item)return null;const Icon=icons[item.tone];return

{item.title}

{item.detail&&

{item.detail}

}
;}