hoist state for expanded studies; allow multiple open

This commit is contained in:
dannyrb 2020-05-22 15:47:38 -04:00
parent 7c1dcb53c2
commit 40a62b1329
2 changed files with 21 additions and 11 deletions

View File

@ -18,6 +18,7 @@ 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 [studyDisplayList, setStudyDisplayList] = useState([]); const [studyDisplayList, setStudyDisplayList] = useState([]);
const [displaySets, setDisplaySets] = useState([]); const [displaySets, setDisplaySets] = useState([]);
const [thumbnailImageSrcMap, setThumbnailImageSrcMap] = useState({}); const [thumbnailImageSrcMap, setThumbnailImageSrcMap] = useState({});
@ -130,16 +131,28 @@ function PanelStudyBrowser({
displaySets displaySets
); );
// TODO: Should "expand" appropriate study (already handled by component?)
// TODO: Should not fire this on "close" // TODO: Should not fire this on "close"
function _handleStudyClick(StudyInstanceUID) { function _handleStudyClick(StudyInstanceUID) {
requestDisplaySetCreationForStudy(DisplaySetService, StudyInstanceUID); const shouldCollapseStudy = expandedStudyInstanceUIDs.includes(
StudyInstanceUID
);
const updatedExpandedStudyInstanceUIDs = shouldCollapseStudy
// eslint-disable-next-line prettier/prettier
? [...expandedStudyInstanceUIDs.filter(stdyUid => stdyUid !== StudyInstanceUID)]
: [...expandedStudyInstanceUIDs, StudyInstanceUID];
setExpandedStudyInstanceUIDs(updatedExpandedStudyInstanceUIDs);
if (!shouldCollapseStudy) {
requestDisplaySetCreationForStudy(DisplaySetService, StudyInstanceUID);
}
} }
return ( return (
<StudyBrowser <StudyBrowser
tabs={tabs} tabs={tabs}
activeTabName={activeTabName} activeTabName={activeTabName}
expandedStudyInstanceUIDs={expandedStudyInstanceUIDs}
onClickStudy={_handleStudyClick} onClickStudy={_handleStudyClick}
onClickTab={clickedTabName => { onClickTab={clickedTabName => {
setActiveTabName(clickedTabName); setActiveTabName(clickedTabName);

View File

@ -21,11 +21,11 @@ const getTrackedSeries = displaySets => {
const StudyBrowser = ({ const StudyBrowser = ({
tabs, tabs,
activeTabName, activeTabName,
expandedStudyInstanceUIDs,
onClickTab, onClickTab,
onClickStudy, onClickStudy,
onClickThumbnail, onClickThumbnail,
}) => { }) => {
const [studyActive, setStudyActive] = useState(null);
const [thumbnailActive, setThumbnailActive] = useState(null); const [thumbnailActive, setThumbnailActive] = useState(null);
const getTabContent = () => { const getTabContent = () => {
@ -44,7 +44,7 @@ const StudyBrowser = ({
modalities, modalities,
displaySets, displaySets,
}) => { }) => {
const isActive = studyActive === studyInstanceUid; const isExpanded = expandedStudyInstanceUIDs.includes(studyInstanceUid);
return ( return (
<React.Fragment key={studyInstanceUid}> <React.Fragment key={studyInstanceUid}>
<StudyItem <StudyItem
@ -53,16 +53,12 @@ const StudyBrowser = ({
numInstances={numInstances} numInstances={numInstances}
modalities={modalities} modalities={modalities}
trackedSeries={getTrackedSeries(displaySets)} trackedSeries={getTrackedSeries(displaySets)}
isActive={isActive} isActive={isExpanded}
onClick={() => { onClick={() => {
setStudyActive(isActive ? null : studyInstanceUid); onClickStudy(studyInstanceUid);
if (onClickStudy) {
onClickStudy(studyInstanceUid);
}
}} }}
/> />
{isActive && displaySets && ( {isExpanded && displaySets && (
<ThumbnailList <ThumbnailList
thumbnails={displaySets} thumbnails={displaySets}
thumbnailActive={thumbnailActive} thumbnailActive={thumbnailActive}
@ -125,6 +121,7 @@ StudyBrowser.propTypes = {
onClickStudy: PropTypes.func, onClickStudy: PropTypes.func,
onClickThumbnail: PropTypes.func, onClickThumbnail: PropTypes.func,
activeTabName: PropTypes.string.isRequired, activeTabName: PropTypes.string.isRequired,
expandedStudyInstanceUIDs: PropTypes.arrayOf(PropTypes.string).isRequired,
tabs: PropTypes.arrayOf( tabs: PropTypes.arrayOf(
PropTypes.shape({ PropTypes.shape({
name: PropTypes.string.isRequired, name: PropTypes.string.isRequired,