Enable non-thumbnail entries in thumbnail list.

This commit is contained in:
James A. Petts 2020-06-10 14:10:00 +01:00
parent 6f6fea973d
commit 2fc171e297
4 changed files with 70 additions and 15 deletions

View File

@ -18,7 +18,9 @@ function PanelStudyBrowser({
// Tabs --> Studies --> DisplaySets --> Thumbnails // Tabs --> Studies --> DisplaySets --> Thumbnails
const [{ StudyInstanceUIDs }, dispatch] = useImageViewer(); const [{ StudyInstanceUIDs }, dispatch] = useImageViewer();
const [activeTabName, setActiveTabName] = useState('primary'); const [activeTabName, setActiveTabName] = useState('primary');
const [expandedStudyInstanceUIDs, setExpandedStudyInstanceUIDs] = useState([]); const [expandedStudyInstanceUIDs, setExpandedStudyInstanceUIDs] = useState(
[]
);
const [studyDisplayList, setStudyDisplayList] = useState([]); const [studyDisplayList, setStudyDisplayList] = useState([]);
const [displaySets, setDisplaySets] = useState([]); const [displaySets, setDisplaySets] = useState([]);
const [thumbnailImageSrcMap, setThumbnailImageSrcMap] = useState({}); const [thumbnailImageSrcMap, setThumbnailImageSrcMap] = useState({});
@ -137,8 +139,12 @@ function PanelStudyBrowser({
StudyInstanceUID StudyInstanceUID
); );
const updatedExpandedStudyInstanceUIDs = shouldCollapseStudy const updatedExpandedStudyInstanceUIDs = shouldCollapseStudy
// eslint-disable-next-line prettier/prettier ? // eslint-disable-next-line prettier/prettier
? [...expandedStudyInstanceUIDs.filter(stdyUid => stdyUid !== StudyInstanceUID)] [
...expandedStudyInstanceUIDs.filter(
stdyUid => stdyUid !== StudyInstanceUID
),
]
: [...expandedStudyInstanceUIDs, StudyInstanceUID]; : [...expandedStudyInstanceUIDs, StudyInstanceUID];
setExpandedStudyInstanceUIDs(updatedExpandedStudyInstanceUIDs); setExpandedStudyInstanceUIDs(updatedExpandedStudyInstanceUIDs);
@ -202,27 +208,55 @@ function _mapDataSourceStudies(studies) {
} }
function _mapDisplaySets(displaySets, thumbnailImageSrcMap) { function _mapDisplaySets(displaySets, thumbnailImageSrcMap) {
return displaySets.map(ds => { const thumbnailDisplaySets = [];
const thumbnailNoImageDisplaySets = [];
displaySets.forEach(ds => {
const imageSrc = thumbnailImageSrcMap[ds.displaySetInstanceUID]; const imageSrc = thumbnailImageSrcMap[ds.displaySetInstanceUID];
return { const componentType = _getComponentType(ds.Modality);
const array =
componentType === 'thumbnail'
? thumbnailDisplaySets
: thumbnailNoImageDisplaySets;
array.push({
displaySetInstanceUID: ds.displaySetInstanceUID, displaySetInstanceUID: ds.displaySetInstanceUID,
description: ds.SeriesDescription, description: ds.SeriesDescription,
seriesNumber: ds.SeriesNumber, seriesNumber: ds.SeriesNumber,
modality: ds.Modality, modality: ds.Modality,
date: ds.SeriesDate, seriesDate: ds.SeriesDate,
numInstances: ds.numImageFrames, numInstances: ds.numImageFrames,
StudyInstanceUID: ds.StudyInstanceUID, StudyInstanceUID: ds.StudyInstanceUID,
componentType: 'thumbnail', // 'thumbnailNoImage' || 'thumbnailTracked' // TODO: PUT THIS SOMEWHERE ELSE componentType,
imageSrc, imageSrc,
dragData: { dragData: {
type: 'displayset', type: 'displayset',
displaySetInstanceUID: ds.displaySetInstanceUID, displaySetInstanceUID: ds.displaySetInstanceUID,
// .. Any other data to pass // .. Any other data to pass
}, },
}; });
}); });
return [...thumbnailDisplaySets, ...thumbnailNoImageDisplaySets];
} }
const thumbnailNoImageModalities = [
'SR',
'SEG',
'RTSTRUCT',
'RTPLAN',
'RTDOSE',
];
function _getComponentType(Modality) {
if (thumbnailNoImageModalities.includes(Modality)) {
// TODO probably others.
return 'thumbnailNoImage';
}
return 'thumbnail';
}
/** /**
* *

View File

@ -55,7 +55,14 @@ function _getDisplaySetsFromSeries(
const instance = instances[0]; const instance = instances[0];
const { StudyInstanceUID, SeriesInstanceUID, SOPInstanceUID } = instance; const {
StudyInstanceUID,
SeriesInstanceUID,
SOPInstanceUID,
SeriesDescription,
SeriesNumber,
SeriesDate,
} = instance;
const { ConceptNameCodeSequence, ContentSequence } = instance; const { ConceptNameCodeSequence, ContentSequence } = instance;
if ( if (
@ -72,6 +79,9 @@ function _getDisplaySetsFromSeries(
plugin: id, plugin: id,
Modality: 'SR', Modality: 'SR',
displaySetInstanceUID: utils.guid(), displaySetInstanceUID: utils.guid(),
SeriesDescription,
SeriesNumber,
SeriesDate,
SOPInstanceUID, SOPInstanceUID,
SeriesInstanceUID, SeriesInstanceUID,
StudyInstanceUID, StudyInstanceUID,

View File

@ -3,11 +3,7 @@ import PropTypes from 'prop-types';
import { Thumbnail, ThumbnailNoImage, ThumbnailTracked } from '@ohif/ui'; import { Thumbnail, ThumbnailNoImage, ThumbnailTracked } from '@ohif/ui';
const ThumbnailList = ({ const ThumbnailList = ({ thumbnails, thumbnailActive, onThumbnailClick }) => {
thumbnails,
thumbnailActive,
onThumbnailClick,
}) => {
return ( return (
<div className="py-3 bg-black"> <div className="py-3 bg-black">
{thumbnails.map( {thumbnails.map(

View File

@ -1,11 +1,26 @@
import React from 'react'; import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { useDrag } from 'react-dnd';
import { Icon } from '@ohif/ui'; import { Icon } from '@ohif/ui';
const ThumbnailNoImage = ({ description, seriesDate, modality, onClick }) => { const ThumbnailNoImage = ({
description,
seriesDate,
modality,
onClick,
dragData,
}) => {
const [collectedProps, drag, dragPreview] = useDrag({
item: { ...dragData },
canDrag: function(monitor) {
return Object.keys(dragData).length !== 0;
},
});
return ( return (
<div <div
ref={drag}
className="flex flex-row flex-1 px-4 py-3 cursor-pointer" className="flex flex-row flex-1 px-4 py-3 cursor-pointer"
onClick={onClick} onClick={onClick}
onKeyDown={onClick} onKeyDown={onClick}