import React from "react"; // next import Image from "next/image"; import { useRouter } from "next/router"; // hooks import useToast from "hooks/use-toast"; // icons import { Icon } from "components/ui"; // helper import { stripHTML, replaceUnderscoreIfSnakeCase } from "helpers/string.helper"; import { formatDateDistance, renderShortDateWithYearFormat } from "helpers/date-time.helper"; // type import type { IUserNotification } from "types"; type NotificationCardProps = { notification: IUserNotification; markNotificationReadStatus: (notificationId: string) => Promise; markNotificationArchivedStatus: (notificationId: string) => Promise; setSelectedNotificationForSnooze: (notificationId: string) => void; markSnoozeNotification: (notificationId: string, dateTime?: Date | undefined) => Promise; }; export const NotificationCard: React.FC = (props) => { const { notification, markNotificationReadStatus, markNotificationArchivedStatus, setSelectedNotificationForSnooze, markSnoozeNotification, } = props; const router = useRouter(); const { workspaceSlug } = router.query; const { setToastAlert } = useToast(); return (
{ markNotificationReadStatus(notification.id); router.push( `/${workspaceSlug}/projects/${notification.project}/issues/${notification.data.issue.id}` ); }} className={`px-4 ${ notification.read_at === null ? "bg-custom-primary-70/10" : "hover:bg-custom-background-200" }`} >
{notification.read_at === null && ( )}
{notification.triggered_by_details.avatar && notification.triggered_by_details.avatar !== "" ? ( profile image ) : (
{notification.triggered_by_details.first_name[0].toUpperCase()}
)}

{notification.triggered_by_details.first_name}{" "} {notification.triggered_by_details.last_name}{" "} {notification.data.issue_activity.field !== "comment" && notification.data.issue_activity.verb}{" "} {notification.data.issue_activity.field === "comment" ? "commented" : notification.data.issue_activity.field === "None" ? null : replaceUnderscoreIfSnakeCase(notification.data.issue_activity.field)}{" "} {notification.data.issue_activity.field !== "comment" && notification.data.issue_activity.field !== "None" ? "to" : ""} {" "} {notification.data.issue_activity.field !== "None" ? ( notification.data.issue_activity.field !== "comment" ? ( notification.data.issue_activity.field === "target_date" ? ( renderShortDateWithYearFormat(notification.data.issue_activity.new_value) ) : notification.data.issue_activity.field === "attachment" ? ( "the issue" ) : stripHTML(notification.data.issue_activity.new_value).length > 55 ? ( stripHTML(notification.data.issue_activity.new_value).slice(0, 50) + "..." ) : ( stripHTML(notification.data.issue_activity.new_value) ) ) : ( {`"`} {notification.data.issue_activity.new_value.length > 55 ? notification?.data?.issue_activity?.issue_comment?.slice(0, 50) + "..." : notification.data.issue_activity.issue_comment} {`"`} ) ) : ( "the issue and assigned it to you." )}

{notification.data.issue.identifier}-{notification.data.issue.sequence_id}{" "} {notification.data.issue.name}

{formatDateDistance(notification.created_at)}

{[ { id: 1, name: notification.read_at ? "Mark as Unread" : "Mark as Read", icon: "chat_bubble", onClick: () => { markNotificationReadStatus(notification.id).then(() => { setToastAlert({ title: notification.read_at ? "Notification marked as unread" : "Notification marked as read", type: "success", }); }); }, }, { id: 2, name: notification.archived_at ? "Unarchive Notification" : "Archive Notification", icon: "archive", onClick: () => { markNotificationArchivedStatus(notification.id).then(() => { setToastAlert({ title: notification.archived_at ? "Notification un-archived" : "Notification archived", type: "success", }); }); }, }, { id: 3, name: notification.snoozed_till ? "Unsnooze Notification" : "Snooze Notification", icon: "schedule", onClick: () => { if (notification.snoozed_till) markSnoozeNotification(notification.id).then(() => { setToastAlert({ title: "Notification un-snoozed", type: "success" }); }); else setSelectedNotificationForSnooze(notification.id); }, }, ].map((item) => ( ))}
); };