import { FC, useCallback, useEffect } from 'react'; import classNames from 'classnames'; import { isAfter, parseISO } from 'date-fns'; import { LoaderScreen } from '~/components/common/LoaderScreen'; import { Button } from '~/components/input/Button'; import { InputRow } from '~/components/input/InputRow'; import { NotificationComment } from '~/components/notifications/NotificationComment'; import { NotificationNode } from '~/components/notifications/NotificationNode'; import { useNotificationsList } from '~/hooks/notifications/useNotificationsList'; import { NotificationItem, NotificationType } from '~/types/notifications'; import { useNotifications } from '~/utils/providers/NotificationProvider'; import styles from './styles.module.scss'; interface NotificationListProps {} const NotificationList: FC = () => { const { isLoading, items } = useNotificationsList(); const { enabled, toggleEnabled, lastSeen } = useNotifications(); const { markAsRead } = useNotifications(); useEffect(() => { return () => markAsRead(); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); const renderItem = useCallback( (item: NotificationItem) => { const isNew = !lastSeen || !item.created_at || isAfter(parseISO(item.created_at), lastSeen); switch (item.type) { case NotificationType.Comment: case NotificationType.Boris: return ; case NotificationType.Node: return ; default: return null; } }, [lastSeen], ); if (isLoading) { return ; } return (
{!enabled && (
Включить } > Уведомления выключены
)}
{items?.map((item) => (
{renderItem(item)}
))}
); }; export { NotificationList };