import React, { useCallback } from 'react'; import PropTypes from 'prop-types'; import { useTranslation, Trans } from 'react-i18next'; import { Link } from 'react-router-dom'; import { Button } from 'semantic-ui-react'; import { withPopup } from '../../lib/popup'; import { Popup } from '../../lib/custom-ui'; import Paths from '../../constants/Paths'; import { ActionTypes } from '../../constants/Enums'; import User from '../User'; import styles from './NotificationsPopup.module.css'; const NotificationsStep = React.memo(({ items, onDelete, onClose }) => { const [t] = useTranslation(); const handleDelete = useCallback( id => { onDelete(id); }, [onDelete], ); const renderItemContent = useCallback( ({ action, card }) => { switch (action.type) { case ActionTypes.MOVE_CARD: return ( {action.user.name} {' moved '} {card.name} {' from '} {action.data.fromList.name} {' to '} {action.data.toList.name} ); case ActionTypes.COMMENT_CARD: return ( {action.user.name} {` left a new comment «${action.data.text}» to `} {card.name} ); default: } return null; }, [onClose], ); return ( <> {t('common.notifications')} {items.length > 0 ? items.map(item => ( {item.card && item.action ? ( <> {renderItemContent(item)} > ) : ( {t('common.cardOrActionAreDeleted')} )} handleDelete(item.id)} /> )) : t('common.noUnreadNotifications')} > ); }); NotificationsStep.propTypes = { items: PropTypes.array.isRequired, // eslint-disable-line react/forbid-prop-types onDelete: PropTypes.func.isRequired, onClose: PropTypes.func.isRequired, }; export default withPopup(NotificationsStep);