"use client"; import { useState, useEffect, ReactNode } from 'react'; import { X, LucideIcon } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { useRouter } from 'next/navigation'; export interface OutlookNotificationAction { label: string; onClick: () => void; variant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link'; className?: string; icon?: LucideIcon; } export interface OutlookNotificationData { id: string; source: 'email' | 'rocketchat' | 'call' | 'leantime' | 'calendar'; title: string; subtitle?: string; message: string; icon: LucideIcon; iconColor?: string; iconBgColor?: string; borderColor?: string; link?: string; timestamp?: Date; actions?: OutlookNotificationAction[]; autoDismiss?: number; // milliseconds, default 30s } interface OutlookNotificationProps { notification: OutlookNotificationData | null; onDismiss: () => void; } export function OutlookNotification({ notification, onDismiss, }: OutlookNotificationProps) { const router = useRouter(); const [isVisible, setIsVisible] = useState(false); useEffect(() => { if (notification) { console.log('[OutlookNotification] 📬 Showing notification', { source: notification.source, title: notification.title, }); setIsVisible(true); // Auto-dismiss after specified time (default 30 seconds) const autoDismissTime = notification.autoDismiss || 30000; const autoDismissTimer = setTimeout(() => { console.log('[OutlookNotification] ⏰ Auto-dismissing after', autoDismissTime, 'ms'); setIsVisible(false); onDismiss(); }, autoDismissTime); return () => { clearTimeout(autoDismissTimer); }; } else { setIsVisible(false); } }, [notification, onDismiss]); if (!notification || !isVisible) { return null; } const handleDismiss = () => { onDismiss(); setIsVisible(false); }; const handleLinkClick = () => { if (notification.link) { router.push(notification.link); setIsVisible(false); onDismiss(); } }; const Icon = notification.icon; const borderColor = notification.borderColor || 'border-blue-500'; const iconBgColor = notification.iconBgColor || 'bg-blue-100'; const iconColor = notification.iconColor || 'text-blue-600'; return (
{notification.subtitle}
)}{notification.message}
{notification.timestamp && ({new Date(notification.timestamp).toLocaleTimeString('fr-FR', { hour: '2-digit', minute: '2-digit' })}
)}