Update Viewer to use UI components instead of local

This commit is contained in:
dannyrb 2020-05-14 22:27:55 -04:00 committed by James A. Petts
parent 6fdf35b370
commit c5033768f2
3 changed files with 37 additions and 92 deletions

View File

@ -3,32 +3,34 @@
*/ */
import React, { useState } from 'react'; import React, { useState } from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
// import { ViewportGrid, ViewportPane } from '@ohif/ui';
import ViewportPane from './ViewportPane.jsx';
// import DefaultViewport from './DefaultViewport.js'; // import DefaultViewport from './DefaultViewport.js';
// import EmptyViewport from './EmptyViewport.js'; // import EmptyViewport from './EmptyViewport.js';
function ViewportGrid(props) { function ViewerViewportGrid(props) {
const { const { activeViewportIndex, displaySets, children } = props;
activeViewportIndex,
displaySets,
numRows,
numColumns,
children,
} = props;
// From ViewportGridService and/or ContextProvider // From ViewportGridService and/or ContextProvider
const [viewportGrid, setViewportGrid] = useState({ const [viewportGrid, setViewportGrid] = useState({
numRows: 2,
numCols: 2,
activeViewportIndex: 0,
viewports: [ viewports: [
{ {
displaySetUid: undefined, displaySetUid: undefined,
}, },
{
displaySetUid: undefined,
},
{
displaySetUid: undefined,
},
{
displaySetUid: undefined,
},
], ],
}); });
const rowSize = 100 / numRows;
const colSize = 100 / numColumns;
// viewportData --> displaySets // viewportData --> displaySets
const getViewportPanes = () => const getViewportPanes = () =>
@ -58,10 +60,10 @@ function ViewportGrid(props) {
return ( return (
<ViewportPane <ViewportPane
key={viewportIndex} key={viewportIndex}
className="m-1"
onDrop={() => { onDrop={() => {
/* setDisplaySet for Viewport */ /* setDisplaySet for Viewport */
}} }}
viewportIndex={viewportIndex}
isActive={activeViewportIndex === viewportIndex} isActive={activeViewportIndex === viewportIndex}
> >
{/* {ViewportComponent} */} {/* {ViewportComponent} */}
@ -75,34 +77,25 @@ function ViewportGrid(props) {
]); ]);
return ( return (
<div <ViewportGrid numRows={viewportGrid.numRows} numCols={viewportGrid.numCols}>
data-cy="viewport-grid"
style={{
display: 'grid',
gridTemplateRows: `repeat(${numRows}, ${rowSize}%)`,
gridTemplateColumns: `repeat(${numColumns}, ${colSize}%)`,
height: '100%',
width: '100%',
}}
>
{ViewportPanes} {ViewportPanes}
</div> </ViewportGrid>
); );
} }
ViewportGrid.propTypes = { ViewerViewportGrid.propTypes = {
// viewports: PropTypes.array.isRequired, // viewports: PropTypes.array.isRequired,
activeViewportIndex: PropTypes.number.isRequired, activeViewportIndex: PropTypes.number.isRequired,
children: PropTypes.node, children: PropTypes.node,
numRows: PropTypes.number.isRequired, // numRows: PropTypes.number.isRequired,
numColumns: PropTypes.number.isRequired, // numColumns: PropTypes.number.isRequired,
}; };
ViewportGrid.defaultProps = { ViewerViewportGrid.defaultProps = {
// viewports: [], // viewports: [],
numRows: 1, // numRows: 1,
numColumns: 1, // numColumns: 1,
activeViewportIndex: 0, activeViewportIndex: 0,
}; };
export default ViewportGrid; export default ViewerViewportGrid;

View File

@ -1,50 +0,0 @@
import React from 'react';
// import { useDrop } from 'react-dnd';
import PropTypes from 'prop-types';
import classNames from 'classnames';
const ViewportPane = function(props) {
const { children, onDrop, viewportIndex } = props;
// const [{ isHovered, isHighlighted }, drop] = useDrop({
// accept: 'displayset',
// drop: (displaySet, monitor) => {
// const canDrop = monitor.canDrop();
// const isOver = monitor.isOver();
// if (canDrop && isOver && onDrop) {
// const { StudyInstanceUID, displaySetInstanceUID } = displaySet;
// onDrop({ viewportIndex, StudyInstanceUID, displaySetInstanceUID });
// }
// },
// // Monitor, and collect props; returned as values by `useDrop`
// collect: monitor => ({
// isHighlighted: monitor.canDrop(),
// isHovered: monitor.isOver(),
// }),
// });
const isHovered = false;
const isHighlighted = false;
return (
<div
// ref={drop}
className={classNames({ hovered: isHovered, highlighted: isHighlighted })}
data-cy={`viewport-pane-${viewportIndex}`}
>
{children}
</div>
);
};
ViewportPane.propTypes = {
/** The ViewportComp */
children: PropTypes.node.isRequired,
/** Function that handles drop events */
onDrop: PropTypes.func.isRequired,
/** The "index" of the viewport in the current ViewportGrid */
viewportIndex: PropTypes.number.isRequired,
};
export default ViewportPane;

View File

@ -1,8 +1,8 @@
import React, { useContext, useEffect, useCallback } from 'react'; import React, { useContext, useEffect, useCallback } from 'react';
import { displaySetManager, ToolBarManager } from '@ohif/core'; import { displaySetManager, ToolBarManager, useViewModel } from '@ohif/core';
import { useViewModel } from '@ohif/core'; import { DragAndDropProvider } from '@ohif/ui';
import Compose from './Compose'; import Compose from './Compose';
import ViewportGrid from './../components/ViewportGrid.jsx'; import ViewportGrid from './../components/ViewportGrid';
export default function ModeRoute({ export default function ModeRoute({
location, location,
@ -89,13 +89,15 @@ export default function ModeRoute({
{/* TODO: extensionManager is already provided to the extension module. {/* TODO: extensionManager is already provided to the extension module.
* Use it from there instead of passing as a prop here. * Use it from there instead of passing as a prop here.
*/} */}
<LayoutComponent <DragAndDropProvider>
extensionManager={extensionManager} <LayoutComponent
displaySetInstanceUids={displaySetInstanceUids} extensionManager={extensionManager}
toolBarLayout={toolBarLayout} displaySetInstanceUids={displaySetInstanceUids}
ViewportGrid={ViewportGrid} toolBarLayout={toolBarLayout}
{...layoutTemplateData.props} ViewportGrid={ViewportGrid}
/> {...layoutTemplateData.props}
/>
</DragAndDropProvider>
</CombinedContextProvider> </CombinedContextProvider>
); );
} }