Viewport grid load default as 1x1 and load first image of series by default (#1817)

This commit is contained in:
Igor Octaviano 2020-06-26 10:40:03 -03:00 committed by GitHub
parent 8f05cf73c7
commit 1d8f5cfc42
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 59 additions and 24 deletions

View File

@ -127,7 +127,6 @@ function PanelStudyBrowser({
changedDisplaySets, changedDisplaySets,
thumbnailImageSrcMap thumbnailImageSrcMap
); );
setDisplaySets(mappedDisplaySets); setDisplaySets(mappedDisplaySets);
} }
); );
@ -152,11 +151,11 @@ function PanelStudyBrowser({
); );
const updatedExpandedStudyInstanceUIDs = shouldCollapseStudy const updatedExpandedStudyInstanceUIDs = shouldCollapseStudy
? // eslint-disable-next-line prettier/prettier ? // eslint-disable-next-line prettier/prettier
[ [
...expandedStudyInstanceUIDs.filter( ...expandedStudyInstanceUIDs.filter(
stdyUid => stdyUid !== StudyInstanceUID stdyUid => stdyUid !== StudyInstanceUID
), ),
] ]
: [...expandedStudyInstanceUIDs, StudyInstanceUID]; : [...expandedStudyInstanceUIDs, StudyInstanceUID];
setExpandedStudyInstanceUIDs(updatedExpandedStudyInstanceUIDs); setExpandedStudyInstanceUIDs(updatedExpandedStudyInstanceUIDs);

View File

@ -5,22 +5,40 @@ import {
useViewportGrid, useViewportGrid,
} from '@ohif/ui'; } from '@ohif/ui';
const DEFAULT_LAYOUT = {
type: 'SET_LAYOUT',
payload: {
numCols: 1,
numRows: 1,
},
};
function LayoutSelector() { function LayoutSelector() {
const [isOpen, setIsOpen] = useState(false); const [isOpen, setIsOpen] = useState(false);
const [viewportGridState, dispatch] = useViewportGrid(); const [viewportGridState, dispatch] = useViewportGrid();
useEffect(() => { const closeOnOutsideClick = () => {
function closeOnOutsideClick() { if (isOpen) {
if (isOpen) { setIsOpen(false);
setIsOpen(false);
}
} }
};
useEffect(() => {
window.addEventListener('click', closeOnOutsideClick); window.addEventListener('click', closeOnOutsideClick);
return () => { return () => {
window.removeEventListener('click', closeOnOutsideClick); window.removeEventListener('click', closeOnOutsideClick);
}; };
}, [isOpen]); }, [isOpen]);
useEffect(() => {
/* Reset to default layout when component unmounts */
return () => {
dispatch(DEFAULT_LAYOUT);
};
}, []);
const onClickHandler = () => setIsOpen(!isOpen);
const DropdownContent = isOpen ? OHIFLayoutSelector : null; const DropdownContent = isOpen ? OHIFLayoutSelector : null;
return ( return (
@ -28,9 +46,7 @@ function LayoutSelector() {
id="Layout" id="Layout"
label="Grid Layout" label="Grid Layout"
icon="tool-layout" icon="tool-layout"
onClick={() => { onClick={onClickHandler}
setIsOpen(!isOpen);
}}
dropdownContent={ dropdownContent={
DropdownContent !== null && ( DropdownContent !== null && (
<DropdownContent <DropdownContent

View File

@ -201,10 +201,10 @@ function PanelStudyBrowserTracking({
); );
const updatedExpandedStudyInstanceUIDs = shouldCollapseStudy const updatedExpandedStudyInstanceUIDs = shouldCollapseStudy
? [ ? [
...expandedStudyInstanceUIDs.filter( ...expandedStudyInstanceUIDs.filter(
stdyUid => stdyUid !== StudyInstanceUID stdyUid => stdyUid !== StudyInstanceUID
), ),
] ]
: [...expandedStudyInstanceUIDs, StudyInstanceUID]; : [...expandedStudyInstanceUIDs, StudyInstanceUID];
setExpandedStudyInstanceUIDs(updatedExpandedStudyInstanceUIDs); setExpandedStudyInstanceUIDs(updatedExpandedStudyInstanceUIDs);
@ -285,7 +285,6 @@ function _mapDisplaySets(
) { ) {
const thumbnailDisplaySets = []; const thumbnailDisplaySets = [];
const thumbnailNoImageDisplaySets = []; const thumbnailNoImageDisplaySets = [];
displaySets.forEach(ds => { displaySets.forEach(ds => {
const imageSrc = thumbnailImageSrcMap[ds.displaySetInstanceUID]; const imageSrc = thumbnailImageSrcMap[ds.displaySetInstanceUID];
const componentType = _getComponentType(ds.Modality); const componentType = _getComponentType(ds.Modality);

View File

@ -10,8 +10,6 @@ import {
useViewportGrid, useViewportGrid,
useViewportDialog, useViewportDialog,
} from '@ohif/ui'; } from '@ohif/ui';
import debounce from 'lodash.debounce';
import throttle from 'lodash.throttle';
import { useTrackedMeasurements } from './../getContextModule'; import { useTrackedMeasurements } from './../getContextModule';
// TODO -> Get this list from the list of tracked measurements. // TODO -> Get this list from the list of tracked measurements.
@ -43,7 +41,6 @@ function TrackedCornerstoneViewport({
const [ const [
{ activeViewportIndex, viewports }, { activeViewportIndex, viewports },
dispatchViewportGrid,
] = useViewportGrid(); ] = useViewportGrid();
// viewportIndex, onSubmit // viewportIndex, onSubmit
const [viewportDialogState, viewportDialogApi] = useViewportDialog(); const [viewportDialogState, viewportDialogApi] = useViewportDialog();
@ -217,7 +214,6 @@ function TrackedCornerstoneViewport({
SliceThickness, SliceThickness,
} = displaySet.images[0]; } = displaySet.images[0];
if (trackedSeries.includes(SeriesInstanceUID) !== isTracked) { if (trackedSeries.includes(SeriesInstanceUID) !== isTracked) {
setIsTracked(!isTracked); setIsTracked(!isTracked);
} }

View File

@ -1,10 +1,12 @@
/** /**
* CSS Grid Reference: http://grid.malven.co/ * CSS Grid Reference: http://grid.malven.co/
*/ */
import React from 'react'; import React, { useEffect } from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { ViewportGrid, ViewportPane, useViewportGrid } from '@ohif/ui'; import { ViewportGrid, ViewportPane, useViewportGrid } from '@ohif/ui';
import EmptyViewport from './EmptyViewport'; import EmptyViewport from './EmptyViewport';
import { classes } from '@ohif/core';
const { ImageSet } = classes;
function ViewerViewportGrid(props) { function ViewerViewportGrid(props) {
const { servicesManager, viewportComponents, dataSource } = props; const { servicesManager, viewportComponents, dataSource } = props;
@ -20,6 +22,29 @@ function ViewerViewportGrid(props) {
// TODO -> Need some way of selecting which displaySets hit the viewports. // TODO -> Need some way of selecting which displaySets hit the viewports.
const { DisplaySetService } = servicesManager.services; const { DisplaySetService } = servicesManager.services;
useEffect(() => {
const { unsubscribe } = DisplaySetService.subscribe(
DisplaySetService.EVENTS.DISPLAY_SETS_CHANGED,
displaySets => {
displaySets.sort((a, b) => {
const isImageSet = x => x instanceof ImageSet;
return (isImageSet(a) === isImageSet(b)) ? 0 : isImageSet(a) ? -1 : 1;
});
dispatch({
type: 'SET_DISPLAYSET_FOR_VIEWPORT',
payload: {
viewportIndex: 0,
displaySetInstanceUID: displaySets[0].displaySetInstanceUID,
},
});
},
);
return () => {
unsubscribe();
};
}, []);
// TODO -> Make a HangingProtocolService // TODO -> Make a HangingProtocolService
const HangingProtocolService = displaySets => { const HangingProtocolService = displaySets => {
let displaySetInstanceUID; let displaySetInstanceUID;