import React, { useCallback } from 'react'; import PropTypes from 'prop-types'; import classNames from 'classnames'; import { useTranslation } from 'react-i18next'; import { Button, Icon, Label, Loader } from 'semantic-ui-react'; import EditPopup from './EditPopup'; import styles from './Item.module.css'; const Item = React.memo( ({ name, url, coverUrl, createdAt, isCover, isPersisted, onCoverSelect, onCoverDeselect, onUpdate, onDelete, }) => { const [t] = useTranslation(); const handleClick = useCallback(() => { window.open(url, '_blank'); }, [url]); const handleToggleCoverClick = useCallback( (event) => { event.stopPropagation(); if (isCover) { onCoverDeselect(); } else { onCoverSelect(); } }, [isCover, onCoverSelect, onCoverDeselect], ); if (!isPersisted) { return (
); } const filename = url.split('/').pop(); const extension = filename.slice((Math.max(0, filename.lastIndexOf('.')) || Infinity) + 1); return ( /* eslint-disable jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions */
{/* eslint-enable jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions */}
{coverUrl ? ( isCover && (
{name} {t('format:longDateTime', { postProcess: 'formatDate', value: createdAt, })} {coverUrl && ( )}
); }, ); Item.propTypes = { name: PropTypes.string.isRequired, url: PropTypes.string, coverUrl: PropTypes.string, createdAt: PropTypes.instanceOf(Date), isCover: PropTypes.bool.isRequired, isPersisted: PropTypes.bool.isRequired, onCoverSelect: PropTypes.func.isRequired, onCoverDeselect: PropTypes.func.isRequired, onUpdate: PropTypes.func.isRequired, onDelete: PropTypes.func.isRequired, }; Item.defaultProps = { url: undefined, coverUrl: undefined, createdAt: undefined, }; export default Item;