Working, needs optimisation.

This commit is contained in:
James A. Petts 2020-05-19 18:22:38 +01:00
parent 940e745d8d
commit d83c868cdd

View File

@ -20,6 +20,7 @@ function PanelStudyBrowser({
const [activeTabName, setActiveTabName] = useState('primary'); const [activeTabName, setActiveTabName] = useState('primary');
const [studyData, setStudyData] = useState([]); const [studyData, setStudyData] = useState([]);
const [studiesForPatient, setStudiesForPatient] = useState([]); const [studiesForPatient, setStudiesForPatient] = useState([]);
const [thumbnailImageSrcMap, setThumbnailImageSrcMap] = useState(new Map());
useEffect(() => { useEffect(() => {
const mappedStudiesFromDataSource = _mapDataSourceStudies( const mappedStudiesFromDataSource = _mapDataSourceStudies(
@ -32,18 +33,20 @@ function PanelStudyBrowser({
displaySets displaySets
); );
addDisplaySetsToStudyData(newStudyData, displaySets); addDisplaySetsToStudyData(newStudyData, displaySets, thumbnailImageSrcMap);
setStudyData(newStudyData); setStudyData(newStudyData);
}, [studiesForPatient]); }, [studiesForPatient, thumbnailImageSrcMap]);
const [thumbnailImageSrcMap, setThumbnailImageSrcMap] = useState(new Map()); const updateThumbnailMap = (displaySetInstanceUID, imageSrc) => {
const updateThumbnailMap = (k, v) => { setThumbnailImageSrcMap(
setThumbnailImageSrcMap(thumbnailImageSrcMap.set(k, v)); thumbnailImageSrcMap.set(displaySetInstanceUID, imageSrc)
);
}; };
function setLocalDisplaySetsState(displaySets) { function setLocalDisplaySetsState(displaySets) {
const displaySetsUI = displaySets.map(ds => { const displaySetsUI = displaySets.map(ds => {
const imageSrc = thumbnailImageSrcMap.get(ds.displaySetInstanceUID);
return { return {
displaySetInstanceUID: ds.displaySetInstanceUID, displaySetInstanceUID: ds.displaySetInstanceUID,
description: ds.SeriesDescription, description: ds.SeriesDescription,
@ -53,19 +56,27 @@ function PanelStudyBrowser({
numInstances: ds.numImageFrames, numInstances: ds.numImageFrames,
StudyInstanceUID: ds.StudyInstanceUID, StudyInstanceUID: ds.StudyInstanceUID,
componentType: 'thumbnailTracked', // TODO: PUT THIS SOMEWHERE ELSE componentType: 'thumbnailTracked', // TODO: PUT THIS SOMEWHERE ELSE
imageSrc: thumbnailImageSrcMap.get(ds.displaySetInstanceUID), imageSrc,
}; };
}); });
setDisplaySets(displaySetsUI); setDisplaySets(displaySetsUI);
} }
function addDisplaySetsToStudyData(studies, displaySets) { function addDisplaySetsToStudyData(
studies,
displaySets,
thumbnailImageSrcMap
) {
displaySets.forEach(displaySet => { displaySets.forEach(displaySet => {
const study = studies.find( const study = studies.find(
s => s.studyInstanceUid === displaySet.StudyInstanceUID s => s.studyInstanceUid === displaySet.StudyInstanceUID
); );
displaySet.imageSrc = thumbnailImageSrcMap.get(
displaySet.displaySetInstanceUID
);
study.displaySets.push(displaySet); study.displaySets.push(displaySet);
}); });
} }
@ -82,7 +93,6 @@ function PanelStudyBrowser({
updateThumbnailMap(uid, imageSrc); updateThumbnailMap(uid, imageSrc);
}); });
// If
const firstDisplaySet = newDisplaySets[0]; const firstDisplaySet = newDisplaySets[0];
if (!studiesForPatient.length && firstDisplaySet) { if (!studiesForPatient.length && firstDisplaySet) {
async function doAsyncStuff() { async function doAsyncStuff() {
@ -92,7 +102,6 @@ function PanelStudyBrowser({
); );
setStudiesForPatient(qidoStuff); setStudiesForPatient(qidoStuff);
debugger;
setPrimaryStudyInstanceUID(firstDisplaySet.StudyInstanceUID); setPrimaryStudyInstanceUID(firstDisplaySet.StudyInstanceUID);
} }
@ -161,7 +170,6 @@ function PanelStudyBrowser({
]; ];
function onClickStudy(StudyInstanceUID) { function onClickStudy(StudyInstanceUID) {
debugger;
const study = studyData.find(a => a.studyInstanceUid === StudyInstanceUID); const study = studyData.find(a => a.studyInstanceUid === StudyInstanceUID);
if (study && study.displaySets && study.displaySets.length) { if (study && study.displaySets && study.displaySets.length) {
return; return;
@ -210,9 +218,6 @@ async function _getStudiesByPatientId(displaySet, getStudiesByPatientId) {
const instance = study.series[0].instances[0]; const instance = study.series[0].instances[0];
const PatientID = instance.PatientID; const PatientID = instance.PatientID;
const studiesByPatientId = await getStudiesByPatientId(PatientID); const studiesByPatientId = await getStudiesByPatientId(PatientID);
// const mappedStudiesFromInstances = _getMappedStudiesFromDisplaySets(
// displaySets
// );
return studiesByPatientId; return studiesByPatientId;
} }
@ -239,47 +244,6 @@ function _mapDataSourceStudies(studies) {
}); });
} }
/**
* Iterates over displaysets and creates mapped studies from
* instance metadata.
*
* @param {*} displaySets
*/
function _getMappedStudiesFromDisplaySets(displaySets) {
if (!displaySets) {
return [];
}
const studiesFromInstanceData = {};
displaySets.forEach(ds => {
const displaySet = {
displaySetInstanceUID: ds.displaySetInstanceUID,
description: ds.SeriesDescription,
seriesNumber: ds.SeriesNumber,
modality: ds.Modality,
date: ds.SeriesDate,
numInstances: ds.numImageFrames,
componentType: 'thumbnailTracked', // TODO: PUT THIS SOMEWHERE ELSE
};
studiesFromInstanceData[ds.StudyInstanceUID] =
studiesFromInstanceData[ds.StudyInstanceUID] ||
_mapStudyFromInstance(ds.StudyInstanceUID);
const mappedStudy = studiesFromInstanceData[ds.StudyInstanceUID];
mappedStudy.displaySets.push(displaySet);
mappedStudy.numInstances += displaySet.numInstances;
mappedStudy.modalitiesSet.add(displaySet.modality);
const modalitiesSet = mappedStudy.modalitiesSet;
mappedStudy.modalities = Array.from(modalitiesSet).join(', ');
});
return Object.values(studiesFromInstanceData);
}
function _mergeStudyDataAndDataSourceStudies(studyData, mappedQidoStudies) { function _mergeStudyDataAndDataSourceStudies(studyData, mappedQidoStudies) {
return mappedQidoStudies.map(qidoStudy => { return mappedQidoStudies.map(qidoStudy => {
const { StudyInstanceUID } = qidoStudy; const { StudyInstanceUID } = qidoStudy;