import { createElement } from "react"; import type { LucideIcon } from "lucide-react"; import { AlertTriangle, Bell, CircleDollarSign, Clock, Inbox, MessageSquare, ShieldAlert, UserPlus, Wrench, X, } from "lucide-react"; import { Text } from "@/components/ui/text"; import type { NotificationItem } from "@/domain/notifications/types/notification-feed"; import { isDismissable } from "@/domain/notifications/utils/visible-notification-sections"; const REASON_ICONS: Record = { "severity-critical": AlertTriangle, sla: AlertTriangle, mentions: MessageSquare, unassigned: Inbox, "due-soon": Clock, "no-vendor": Wrench, "aveta-missing": ShieldAlert, activity: MessageSquare, "vendor-conflict": Wrench, }; const ICON_PROPS = { size: 15, "aria-hidden": true, className: "shrink-0", style: { color: "var(--color-text-muted)", marginTop: 2 }, } as const; // Recent activity mixes comments, assignments and uplift decisions; where the row leads tells them apart. function ItemIcon({ item }: { item: NotificationItem }) { if (item.reason === "activity" && item.target.tab === "uplifts") { return ; } if (item.reason === "activity" && item.target.tab !== "comments") { return ; } return createElement(REASON_ICONS[item.reason] ?? Bell, ICON_PROPS); } type NotificationRowProps = { item: NotificationItem; unread: boolean; onOpen: (item: NotificationItem) => void; onDismiss: (item: NotificationItem) => void; }; export function NotificationRow({ item, unread, onOpen, onDismiss }: NotificationRowProps) { return (
  • {isDismissable(item) && ( )}
  • ); }