/** * CSS Grid Reference: http://grid.malven.co/ */ import React, { useState } from 'react'; import PropTypes from 'prop-types'; import { ViewportGrid, ViewportPane } from '@ohif/ui'; // import DefaultViewport from './DefaultViewport.js'; // import EmptyViewport from './EmptyViewport.js'; function ViewerViewportGrid(props) { const { activeViewportIndex, servicesManager, viewportComponents, dataSource, } = props; debugger; // TODO -> Need some way of selecting which displaySets hit the viewports. const { DisplaySetService } = servicesManager.services; // TODO -> Make a HangingProtocolService const HangingProtocolService = displaySets => { return { numRows: 1, numCols: 1, activeViewportIndex: 0, viewports: [ { displaySetInstanceUid: Object.keys(displaySets)[0][0] .displaySetInstanceUid, }, ], }; }; const handleDisplaySetSubscription = useCallback(displaySets => { setViewportGrid(HangingProtocolService(displaySets)); }); useEffect(() => { debugger; const { unsubscribe } = DisplaySetService.subscribe( DisplaySetService.EVENTS.DISPLAY_SET_ADDED, handleDisplaySetSubscription ); return unsubscribe; }, []); // From ViewportGridService and/or ContextProvider const [viewportGrid, setViewportGrid] = useState({}); // viewportData --> displaySets const getViewportPanes = () => viewportGrid.viewports.map((viewport, viewportIndex) => { const displaySet = viewportData[viewportIndex]; if (!displaySet) { return ( { console.warn('DROPPED ITEM:', droppedItem); }} isActive={activeViewportIndex === viewportIndex} > ); } // if (!displaySet) { // // TODO: Empty Viewport // return null; // } // const pluginName = // !layout.plugin && displaySet && displaySet.plugin // ? displaySet.plugin // : layout.plugin; // TODO -> Need way for other viewport e.g. vtk to be used. const ViewportComponent = _getViewportComponent( displaySet, viewportComponents ); return ( { /* setDisplaySet for Viewport */ }} isActive={activeViewportIndex === viewportIndex} > ); }); const ViewportPanes = React.useMemo(getViewportPanes, [ viewportComponents, activeViewportIndex, ]); return ( {ViewportPanes} ); } ViewerViewportGrid.propTypes = { // viewports: PropTypes.array.isRequired, activeViewportIndex: PropTypes.number.isRequired, viewportComponents: PropTypes.array.isRequired, // numRows: PropTypes.number.isRequired, // numColumns: PropTypes.number.isRequired, }; ViewerViewportGrid.defaultProps = { // numRows: 1, // numColumns: 1, viewportData: [], viewportComponents: [], activeViewportIndex: 0, }; function _getViewportComponent(displaySet, viewportComponents) { const { SOPClassHandlerId } = displaySet; for (let i = 0; i < viewportComponents.length; i++) { if ( viewportComponents[i].displaySetsToDisplay.includes(SOPClassHandlerId) ) { const { component } = viewportComponents[i]; return component; } } } export default ViewerViewportGrid;