basic drop to set displaySet

This commit is contained in:
dannyrb 2020-05-20 01:26:44 -04:00
parent 6baeaa9619
commit 6bbe206a45
4 changed files with 57 additions and 47 deletions

View File

@ -178,7 +178,7 @@ export default class ExtensionManager {
try { try {
const extensionModule = getModuleFn({ const extensionModule = getModuleFn({
getDataSources: this.getDataSources, getDataSources: this.getDataSources, // Why pass this in if we're passing in `extensionManager`?
servicesManager: this._servicesManager, servicesManager: this._servicesManager,
commandsManager: this._commandsManager, commandsManager: this._commandsManager,
appConfig: this._appConfig, appConfig: this._appConfig,

View File

@ -46,12 +46,13 @@ export default class DisplaySetService {
); );
}; };
getDisplaySetByUID = displaySetInstanceUid => { /**
// TODO: Why is this searching active, not just displaySets? * @param {string} displaySetInstanceUID
return displaySetCache.find( * @returns {object} displaySet
*/
getDisplaySetByUID = displaySetInstanceUid => displaySetCache.find(
displaySet => displaySet.displaySetInstanceUID === displaySetInstanceUid displaySet => displaySet.displaySetInstanceUID === displaySetInstanceUid
); );
};
/** /**
* Broadcasts displaySetService changes. * Broadcasts displaySetService changes.

View File

@ -20,8 +20,16 @@ function ViewerViewportGrid(props) {
// TODO -> Make a HangingProtocolService // TODO -> Make a HangingProtocolService
const HangingProtocolService = displaySets => { const HangingProtocolService = displaySets => {
let displaySetInstanceUID;
// Fallback
if(!displaySets || !displaySets.length) {
const displaySet = DisplaySetService.activeDisplaySets[0] const displaySet = DisplaySetService.activeDisplaySets[0]
const displaySetInstanceUID = displaySet.displaySetInstanceUID; displaySetInstanceUID = displaySet.displaySetInstanceUID;
} else {
const displaySet = displaySets[0];
displaySetInstanceUID = displaySet.displaySetInstanceUID;
}
return { return {
numRows: 1, numRows: 1,
@ -35,19 +43,6 @@ function ViewerViewportGrid(props) {
}; };
}; };
const handleDisplaySetSubscription = useCallback(displaySets => {
setViewportGrid(HangingProtocolService(displaySets));
});
useEffect(() => {
const { unsubscribe } = DisplaySetService.subscribe(
DisplaySetService.EVENTS.DISPLAY_SETS_ADDED,
handleDisplaySetSubscription
);
return unsubscribe;
}, []);
// From ViewportGridService and/or ContextProvider // From ViewportGridService and/or ContextProvider
const [viewportGrid, setViewportGrid] = useState({ const [viewportGrid, setViewportGrid] = useState({
numCols: 1, numCols: 1,
@ -55,6 +50,32 @@ function ViewerViewportGrid(props) {
viewports: [] viewports: []
}); });
useEffect(() => {
const { unsubscribe } = DisplaySetService.subscribe(
DisplaySetService.EVENTS.DISPLAY_SETS_ADDED,
displaySets => {
setViewportGrid(HangingProtocolService(displaySets));
},
);
return unsubscribe;
}, []);
// TODO: either need hover to change "active viewport"
// so we can use it as our target for setting the displaySet,
// or the dropHandler needs to know which viewport was dropped on
// in event data
const onDropHandler = ({displaySetInstanceUID}) => {
const droppedDisplaySet = DisplaySetService.getDisplaySetByUID(displaySetInstanceUID);
const updatedViewportGridState = HangingProtocolService([droppedDisplaySet]);
console.warn('DROPPED: ', displaySetInstanceUID, droppedDisplaySet, updatedViewportGridState);
// This is not updating the displayed DisplaySet
setViewportGrid(updatedViewportGridState);
}
// viewportData --> displaySets // viewportData --> displaySets
const getViewportPanes = () => const getViewportPanes = () =>
viewportGrid.viewports.map((viewport, viewportIndex) => { viewportGrid.viewports.map((viewport, viewportIndex) => {
@ -65,6 +86,7 @@ function ViewerViewportGrid(props) {
const displaySet = DisplaySetService.getDisplaySetByUID(displaySetInstanceUID); const displaySet = DisplaySetService.getDisplaySetByUID(displaySetInstanceUID);
// TODO: Better Empty Viewport
if (!displaySet) { if (!displaySet) {
return ( return (
<ViewportPane <ViewportPane
@ -72,24 +94,12 @@ function ViewerViewportGrid(props) {
className="m-1" className="m-1"
// Pass in as prop? // Pass in as prop?
acceptDropsFor="displayset" acceptDropsFor="displayset"
onDrop={droppedItem => { onDrop={onDropHandler}
console.warn('DROPPED ITEM:', droppedItem);
}}
isActive={activeViewportIndex === viewportIndex} 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. // TODO -> Need way for other viewport e.g. vtk to be used.
const ViewportComponent = _getViewportComponent( const ViewportComponent = _getViewportComponent(
@ -102,9 +112,7 @@ function ViewerViewportGrid(props) {
key={viewportIndex} key={viewportIndex}
className="m-1" className="m-1"
acceptDropsFor="displayset" acceptDropsFor="displayset"
onDrop={droppedItem => { onDrop={onDropHandler}
console.warn('DROPPED ITEM:', droppedItem);
}}
isActive={activeViewportIndex === viewportIndex} isActive={activeViewportIndex === viewportIndex}
> >
<ViewportComponent <ViewportComponent
@ -116,15 +124,16 @@ function ViewerViewportGrid(props) {
); );
}); });
const ViewportPanes = React.useMemo(getViewportPanes, [ // const ViewportPanes = React.useMemo(getViewportPanes, [
viewportComponents, // viewportComp'onents,
activeViewportIndex, // activeViewportIndex,
viewportGrid // viewportGrid,
]); // ]);
return ( return (
<ViewportGrid numRows={viewportGrid.numRows} numCols={viewportGrid.numCols}> <ViewportGrid numRows={viewportGrid.numRows} numCols={viewportGrid.numCols}>
{ViewportPanes} {/* {ViewportPanes} */}
{getViewportPanes()}
</ViewportGrid> </ViewportGrid>
); );
} }

View File

@ -1,4 +1,5 @@
import React, { useEffect, useCallback } from 'react'; import React, { useEffect, useCallback } from 'react';
import { useParams } from 'react-router';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
// //
import { ToolBarManager } from '@ohif/core'; import { ToolBarManager } from '@ohif/core';
@ -73,21 +74,19 @@ export default function ModeRoute({
route.init({ toolBarManager }); route.init({ toolBarManager });
}, [mode, dataSourceName, location]); }, [mode, dataSourceName, location]);
const createDisplaySets = useCallback(() => { // This queries for series, but... What does it do with them?
useEffect(() => {
// Add SOPClassHandlers to a new SOPClassManager. // Add SOPClassHandlers to a new SOPClassManager.
DisplaySetService.init(extensionManager, sopClassHandlers); DisplaySetService.init(extensionManager, sopClassHandlers);
const queryParams = location.search; const queryParams = location.search;
console.log('queryParams: ', queryParams);
// Call the data source to start building the view model? // Call the data source to start building the view model?
dataSource.retrieve.series.metadata( dataSource.retrieve.series.metadata(
queryParams, queryParams,
DisplaySetService.makeDisplaySets DisplaySetService.makeDisplaySets
); );
}, [location]);
useEffect(() => {
createDisplaySets();
}, [mode, dataSourceName, location]); }, [mode, dataSourceName, location]);
return ( return (
@ -98,6 +97,7 @@ export default function ModeRoute({
<DragAndDropProvider> <DragAndDropProvider>
<LayoutComponent <LayoutComponent
{...layoutTemplateData.props} {...layoutTemplateData.props}
StudyInstanceUIDs={StudyInstanceUIDs}
ViewportGridComp={ViewportGridWithDataSource} ViewportGridComp={ViewportGridWithDataSource}
/> />
</DragAndDropProvider> </DragAndDropProvider>