"use client"; import { ArchiveIcon } from "lucide-react"; import { useTranslations } from "next-intl"; import { Modules } from "../../../../core"; import { DataListRetriever, useDataListRetriever, usePageUrlGenerator } from "../../../../hooks"; import { Button, Card, CardContent, Link, Skeleton, Tooltip, TooltipContent, TooltipTrigger, } from "../../../../shadcnui"; import { UserAvatar } from "../../../user/components"; import { NotificationInterface } from "../../data"; import { NotificationService } from "../../data/notification.service"; import { generateNotificationData } from "../notifications/Notification"; type NotificationsListProps = { archived: boolean; }; export function NotificationsList({ archived }: NotificationsListProps) { const t = useTranslations(); const generateUrl = usePageUrlGenerator(); const data: DataListRetriever = useDataListRetriever({ retriever: (params) => NotificationService.findMany(params), retrieverParams: { isArchived: archived }, module: Modules.Notification, }); const archiveNotification = async (notification: NotificationInterface) => { await NotificationService.archive({ id: notification.id }); data.removeElement(notification); }; const LoadingSkeleton = () => (
{Array.from({ length: 3 }).map((_, i) => (
))}
); return (
{data.isLoaded ? ( (data.data as NotificationInterface[])?.map((notification: NotificationInterface) => { const notificationData = generateNotificationData({ notification: notification, generateUrl: generateUrl }); return (
{notificationData.actor ? (
) : (
)}

{t.rich(`notification.${notification.notificationType}.description` as any, { strong: (chunks: any) => {chunks}, actor: notificationData.actor?.name ?? "", title: notificationData.title, })}

{new Date(notification.createdAt).toLocaleString()}
{notificationData.url ? ( ) : ( <> )} {!archived && ( {t(`notification.buttons.archive`)} )}
); }) ) : ( )}
); }