import React, { useRef } from 'react'; import PropTypes from 'prop-types'; import classnames from 'classnames'; import { useDrag } from 'react-dnd'; import { Icon } from '@ohif/ui'; import blurHandlerListener from '../../utils/blurHandlerListener'; /** * */ const Thumbnail = ({ displaySetInstanceUID, className, imageSrc, imageAltText, description, seriesNumber, numInstances, dragData, isActive, onClick, onDoubleClick, }) => { // TODO: We should wrap our thumbnail to create a "DraggableThumbnail", as // this will still allow for "drag", even if there is no drop target for the // specified item. const [collectedProps, drag, dragPreview] = useDrag({ item: { ...dragData }, canDrag: function(monitor) { return Object.keys(dragData).length !== 0; }, }); const thumbnailElement = useRef(null); return (
blurHandlerListener(thumbnailElement)} ref={thumbnailElement} className={classnames( className, 'flex flex-col flex-1 px-3 mb-8 cursor-pointer outline-none select-none group' )} id={`thumbnail-${displaySetInstanceUID}`} onClick={onClick} onDoubleClick={onDoubleClick} role="button" tabIndex="0" >
{imageSrc ? ( {imageAltText} ) : (
{imageAltText}
)}
{'S: '} {seriesNumber}
{numInstances}
{description}
); }; Thumbnail.propTypes = { displaySetInstanceUID: PropTypes.string.isRequired, className: PropTypes.string, imageSrc: PropTypes.string, /** * Data the thumbnail should expose to a receiving drop target. Use a matching * `dragData.type` to identify which targets can receive this draggable item. * If this is not set, drag-n-drop will be disabled for this thumbnail. * * Ref: https://react-dnd.github.io/react-dnd/docs/api/use-drag#specification-object-members */ dragData: PropTypes.shape({ /** Must match the "type" a dropTarget expects */ type: PropTypes.string.isRequired, }), imageAltText: PropTypes.string, description: PropTypes.string.isRequired, seriesNumber: PropTypes.number.isRequired, numInstances: PropTypes.number.isRequired, isActive: PropTypes.bool.isRequired, onClick: PropTypes.func.isRequired, onDoubleClick: PropTypes.func.isRequired, }; Thumbnail.defaultProps = { dragData: {}, }; export default Thumbnail;