hoist state for expanded studies; allow multiple open
This commit is contained in:
parent
7c1dcb53c2
commit
40a62b1329
@ -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);
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user