import { useCallback } from 'react'; import PropTypes from 'prop-types'; import { Container, Row } from 'react-bootstrap'; import moment from 'moment'; import { toast } from 'react-toastify'; // components import ConfigurableIcon from '../common/display/ConfigurableIcon'; // functions import apiLoader from '../../services/utilities/apiLoader'; // constants const errorNumber = 656; export default function ShowNotices({ announcements, handleError, refreshAnnouncements, userId, }) { const dismissAnnouncement = useCallback( async (announcementId) => { const context = 'ShowNotices.dismissAnnouncement'; if (!announcementId) return; try { const { data } = await apiLoader({ api: 'utilities/announcements/clear', global: true, // Use the Simplexable API to get the announcements. handleError, payload: { announcementId, masterKey: process.env.REACT_APP_SIMPLEXABLE_API_TOKEN, userId }, }); const { failure = 'no failure message was returned', success, } = data; if (!success) { handleError(new Error(`failure: ${failure}`), context, errorNumber); return; } refreshAnnouncements(); toast.success('The announcement notice has been dismissed'); } catch (e) { handleError(e, context, errorNumber); } }, [ handleError, refreshAnnouncements, userId, ] ); if (!Array.isArray(announcements) || announcements.length === 0) return null; return ( {announcements.map(({ announcementContent, announcementId, created }) => (
dismissAnnouncement(announcementId)} size={20} toolTipTitle="dismiss this notice" />
Notice from Simplexable, {moment.unix(created).fromNow()}
))} ); } ShowNotices.propTypes = { announcements: PropTypes.arrayOf( PropTypes.shape({ announcementId: PropTypes.string.isRequired, announcementContent: PropTypes.string.isRequired, created: PropTypes.number.isRequired }) ) };