import React, { useState, useCallback, useEffect, useRef, } from 'react'; import { NotificationsNone, Settings } from '@edx/paragon/icons'; import { Badge, Form, Icon, IconButton, OverlayTrigger, Popover, } from '@edx/paragon'; import { useSelector, useDispatch } from 'react-redux'; import { useIntl } from '@edx/frontend-platform/i18n'; import NotificationTabs from './NotificationTabs'; import { getNotificationTotalUnseenCounts, getNotificationStatus } from './data/selectors'; import { fetchNotificationsCountsList } from './data/thunks'; import { messages } from './messages'; const Notifications = () => { const [showNotificationTray, setShowNotificationTray] = useState(false); const intl = useIntl(); const popoverRef = useRef(null); const buttonRef = useRef(null); const dispatch = useDispatch(); const notificationStatus = useSelector(getNotificationStatus()); const notificationCounts = useSelector(getNotificationTotalUnseenCounts()); useEffect(() => { if (notificationStatus === 'idle') { dispatch(fetchNotificationsCountsList()); } }, [dispatch, notificationStatus]); const handleNotificationTray = useCallback((value) => { setShowNotificationTray(value); }, []); useEffect(() => { const handleClickOutside = (event) => { if ( popoverRef.current && buttonRef.current && !popoverRef.current.contains(event.target) && !buttonRef.current.contains(event.target) ) { setShowNotificationTray(false); } }; document.addEventListener('mousedown', handleClickOutside); return () => { document.removeEventListener('mousedown', handleClickOutside); }; }, []); return (

{intl.formatMessage(messages.notificationTitle)}

)} > <> {notificationCounts?.Total > 0 && ( {notificationCounts?.Total} )}
{ handleNotificationTray(!showNotificationTray); }} src={NotificationsNone} iconAs={Icon} className="d-inline-block align-bottom ml-1 ml-n1 shadow-none bg-transparent text-primary-500" />
); }; export default Notifications;