import truncate from 'lodash/truncate'; 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 { Popup } from '../../lib/custom-ui'; import Paths from '../../constants/Paths'; import { ActivityTypes } from '../../constants/Enums'; import User from '../User'; import styles from './NotificationsStep.module.scss'; const NotificationsStep = React.memo(({ items, onDelete, onClose }) => { const [t] = useTranslation(); const handleDelete = useCallback( (id) => { onDelete(id); }, [onDelete], ); const renderItemContent = useCallback( ({ activity, card }) => { switch (activity.type) { case ActivityTypes.MOVE_CARD: return ( {activity.user.name} {' moved '} {card.name} {' from '} {activity.data.fromList.name} {' to '} {activity.data.toList.name} ); case ActivityTypes.COMMENT_CARD: { const commentText = truncate(activity.data.text); return ( {activity.user.name} {` left a new comment «${commentText}» to `} {card.name} ); } default: } return null; }, [onClose], ); return ( <> {t('common.notifications', { context: 'title', })} {items.length > 0 ? ( {items.map((item) => ( {item.card && item.activity ? ( <> {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 NotificationsStep;