AutoLoop / components /notification-toast.tsx
shubhjn's picture
feat: Introduce a comprehensive automation and content management system with workflow management, social media integration, and email capabilities.
b8dc207
"use client";
import { X, CheckCircle, AlertCircle, Info, AlertTriangle } from "lucide-react";
import { cn } from "@/lib/utils";
import { useNotificationStore } from "@/store/notifications";
const typeConfig = {
success: {
icon: CheckCircle,
className: "border-green-500 bg-green-50 dark:bg-green-950/20",
iconColor: "text-green-600 dark:text-green-400",
},
error: {
icon: AlertCircle,
className: "border-red-500 bg-red-50 dark:bg-red-950/20",
iconColor: "text-red-600 dark:text-red-400",
},
warning: {
icon: AlertTriangle,
className: "border-yellow-500 bg-yellow-50 dark:bg-yellow-950/20",
iconColor: "text-yellow-600 dark:text-yellow-400",
},
info: {
icon: Info,
className: "border-blue-500 bg-blue-50 dark:bg-blue-950/20",
iconColor: "text-blue-600 dark:text-blue-400",
},
};
export function NotificationToast() {
const { notifications, removeNotification } = useNotificationStore();
// Only show toasts that should auto-close
const visibleToasts = notifications
.filter((n) => n.autoClose)
.slice(0, 3); // Limit to 3 visible toasts
return (
<div className="fixed bottom-4 right-4 z-50 flex flex-col gap-2 w-80">
{visibleToasts.map((notification) => {
const config = typeConfig[notification.type];
const Icon = config.icon;
return (
<div
key={notification.id}
className={cn(
"flex items-start gap-3 p-4 rounded-lg border-l-4 shadow-lg backdrop-blur-sm animate-in slide-in-from-right",
config.className
)}
>
<Icon className={cn("h-5 w-5 mt-0.5 flex-shrink-0", config.iconColor)} />
<div className="flex-1 min-w-0">
<p className="font-medium text-sm">{notification.title}</p>
{notification.message && (
<p className="text-sm text-muted-foreground mt-1">
{notification.message}
</p>
)}
</div>
<button
onClick={() => removeNotification(notification.id)}
className="flex-shrink-0 rounded-full p-1 hover:bg-black/10 dark:hover:bg-white/10 transition-colors cursor-pointer"
>
<X className="h-4 w-4" />
</button>
</div>
);
})}
</div>
);
}