2019-10-11 18:03:59 +02:00
|
|
|
import React from 'react';
|
|
|
|
|
import { useDrop } from 'react-dnd';
|
|
|
|
|
import PropTypes from 'prop-types';
|
|
|
|
|
import classNames from 'classnames';
|
|
|
|
|
import './ViewportPane.css';
|
|
|
|
|
|
|
|
|
|
const ViewportPane = function(props) {
|
|
|
|
|
const { children, onDrop, viewportIndex, className: propClassName } = props;
|
|
|
|
|
const [{ hovered, highlighted }, drop] = useDrop({
|
|
|
|
|
accept: 'thumbnail',
|
|
|
|
|
drop: (droppedItem, monitor) => {
|
|
|
|
|
const canDrop = monitor.canDrop();
|
|
|
|
|
const isOver = monitor.isOver();
|
|
|
|
|
|
|
|
|
|
if (canDrop && isOver && onDrop) {
|
2020-03-09 20:03:23 +01:00
|
|
|
const { StudyInstanceUID, displaySetInstanceUID } = droppedItem;
|
2019-10-11 18:03:59 +02:00
|
|
|
|
2020-03-09 20:03:23 +01:00
|
|
|
onDrop({ viewportIndex, StudyInstanceUID, displaySetInstanceUID });
|
2019-10-11 18:03:59 +02:00
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
// Monitor, and collect props.
|
|
|
|
|
// Returned as values by `useDrop`
|
|
|
|
|
collect: monitor => ({
|
|
|
|
|
highlighted: monitor.canDrop(),
|
|
|
|
|
hovered: monitor.isOver(),
|
|
|
|
|
}),
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<div
|
|
|
|
|
className={classNames(
|
|
|
|
|
'viewport-drop-target',
|
|
|
|
|
{ hovered: hovered },
|
|
|
|
|
{ highlighted: highlighted },
|
|
|
|
|
propClassName
|
|
|
|
|
)}
|
|
|
|
|
ref={drop}
|
2019-11-02 12:26:24 +01:00
|
|
|
data-cy={`viewport-container-${viewportIndex}`}
|
2019-10-11 18:03:59 +02:00
|
|
|
>
|
|
|
|
|
{children}
|
|
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
ViewportPane.propTypes = {
|
|
|
|
|
children: PropTypes.node.isRequired,
|
|
|
|
|
viewportIndex: PropTypes.number.isRequired,
|
|
|
|
|
onDrop: PropTypes.func.isRequired,
|
|
|
|
|
className: PropTypes.string,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export default ViewportPane;
|