import React, { useEffect } from 'react'; import PropTypes from 'prop-types'; import classnames from 'classnames'; import { useDispatch, useSelector } from 'react-redux'; import { useHistory } from 'react-router-dom'; import { formatDate } from '../../helpers/utils/util'; import { getNotifications, getSnapsRouteObjects, getUnreadNotifications, } from '../../selectors'; import { DEFAULT_ROUTE } from '../../helpers/constants/routes'; import { deleteExpiredNotifications, markNotificationsAsRead, } from '../../store/actions'; import Button from '../../components/ui/button'; import { useI18nContext } from '../../hooks/useI18nContext'; import { ButtonIcon, ICON_SIZES, ICON_NAMES, } from '../../components/component-library'; import { Color } from '../../helpers/constants/design-system'; export function NotificationItem({ notification, snaps, onItemClick }) { const { message, origin, createdDate, readDate } = notification; const history = useHistory(); const t = useI18nContext(); const snap = snaps.find(({ id: snapId }) => { return snapId === origin; }); const handleNameClick = (e) => { e.stopPropagation(); history.push(snap.route); }; const handleItemClick = () => onItemClick(notification); return (

{message}

{t('notificationsInfos', [ formatDate(createdDate, "LLLL d',' yyyy 'at' t"), , ])}

); } export default function Notifications() { const history = useHistory(); const dispatch = useDispatch(); const t = useI18nContext(); const notifications = useSelector(getNotifications); const snapsRouteObject = useSelector(getSnapsRouteObjects); const unreadNotifications = useSelector(getUnreadNotifications); const markAllAsRead = () => { const unreadNotificationIds = unreadNotifications.map(({ id }) => id); dispatch(markNotificationsAsRead(unreadNotificationIds)); }; const markAsRead = (notificationToMark) => { if (!notificationToMark.readDate) { dispatch(markNotificationsAsRead([notificationToMark.id])); } }; useEffect(() => { return () => dispatch(deleteExpiredNotifications()); }, [dispatch]); return (
history.push(DEFAULT_ROUTE)} />
{t('notificationsHeader')}
{notifications.length > 0 ? ( notifications.map((notification, id) => ( )) ) : (
{t('notificationsEmptyText')}
)}
); } NotificationItem.propTypes = { notification: PropTypes.exact({ id: PropTypes.string.isRequired, message: PropTypes.string.isRequired, origin: PropTypes.string.isRequired, createdDate: PropTypes.number.isRequired, readDate: PropTypes.number, }), snaps: PropTypes.array.isRequired, onItemClick: PropTypes.func.isRequired, };