import React from 'react'; import PropTypes from 'prop-types'; import { useDrag } from 'react-dnd'; import ImageThumbnail from './ImageThumbnail'; import classNames from 'classnames'; import './Thumbnail.styl'; function ThumbnailFooter({ seriesDescription, seriesNumber, instanceNumber, numImageFrames, }) { const infoOnly = !seriesDescription; const getInfo = (value, icon, className = '') => { return (
{icon}
{value}
); }; const getSeriesInformation = ( seriesNumber, instanceNumber, numImageFrames ) => { if (!seriesNumber && !instanceNumber && !numImageFrames) { return; } return (
{getInfo(seriesNumber, 'S:')} {getInfo(instanceNumber, 'I:')} {getInfo(numImageFrames, '', 'image-frames')}
); }; return (
{seriesDescription}
{getSeriesInformation(seriesNumber, instanceNumber, numImageFrames)}
); } function Thumbnail(props) { const { active, altImageText, error, displaySetInstanceUid, imageId, imageSrc, instanceNumber, numImageFrames, seriesDescription, seriesNumber, stackPercentComplete, studyInstanceUid, onClick, onDoubleClick, onMouseDown, supportsDrag, } = props; const [collectedProps, drag, dragPreview] = useDrag({ // `droppedItem` in `dropTarget` // The only data it will have access to item: { studyInstanceUid, displaySetInstanceUid, type: 'thumbnail', // Has to match `dropTarget`'s type }, canDrag: function(monitor) { return supportsDrag; }, }); const hasImage = imageSrc || imageId; const hasAltText = altImageText !== undefined; return (
{/* SHOW IMAGE */} {hasImage && ( )} {/* SHOW TEXT ALTERNATIVE */} {!hasImage && hasAltText && (

{altImageText}

)} {ThumbnailFooter(props)}
); } const noop = () => {}; Thumbnail.propTypes = { supportsDrag: PropTypes.bool, id: PropTypes.string.isRequired, displaySetInstanceUid: PropTypes.string.isRequired, studyInstanceUid: PropTypes.string.isRequired, imageSrc: PropTypes.string, imageId: PropTypes.string, error: PropTypes.bool, active: PropTypes.bool, stackPercentComplete: PropTypes.number, /** altImageText will be used when no imageId or imageSrc is provided. It will be displayed inside the
. This is useful when it is difficult to make a preview for a type of DICOM series (e.g. DICOM-SR) */ altImageText: PropTypes.string, seriesDescription: PropTypes.string, seriesNumber: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), instanceNumber: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), numImageFrames: PropTypes.number, onDoubleClick: PropTypes.func, onClick: PropTypes.func, onMouseDown: PropTypes.func, }; Thumbnail.defaultProps = { supportsDrag: false, active: false, error: false, stackPercentComplete: 0, onDoubleClick: noop, onClick: noop, onMouseDown: noop, }; export { Thumbnail };