feat: Start using group filtering to define measurements table layout (#4501)
This commit is contained in:
1 parent
bc73de9710
commit
82440e88d5
16 files changed
+357
-210
No files matched your search
@@ -1,20 +1,12 @@
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import { PanelMeasurement } from '@ohif/extension-cornerstone';
|
||||
import { useViewportGrid } from '@ohif/ui-next';
|
||||
import { StudySummary } from '@ohif/ui-next';
|
||||
import { Button, Icons } from '@ohif/ui-next';
|
||||
import { DicomMetadataStore, utils } from '@ohif/core';
|
||||
import { useViewportGrid } from '@ohif/ui-next';
|
||||
import { Button, Icons } from '@ohif/ui-next';
|
||||
import { PanelMeasurement, StudySummaryFromMetadata } from '@ohif/extension-cornerstone';
|
||||
import { useTrackedMeasurements } from '../getContextModule';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
|
||||
const { downloadCSVReport, formatDate } = utils;
|
||||
|
||||
const DISPLAY_STUDY_SUMMARY_INITIAL_VALUE = {
|
||||
key: undefined, //
|
||||
date: '', // '07-Sep-2010',
|
||||
modality: '', // 'CT',
|
||||
description: '', // 'CHEST/ABD/PELVIS W CONTRAST',
|
||||
};
|
||||
const { filterAnd, filterPlanarMeasurement, filterAny, filterMeasurementsBySeriesUID } =
|
||||
utils.MeasurementFilters;
|
||||
|
||||
function PanelMeasurementTableTracking({
|
||||
servicesManager,
|
||||
@@ -22,52 +14,12 @@ function PanelMeasurementTableTracking({
|
||||
commandsManager,
|
||||
}: withAppTypes) {
|
||||
const [viewportGrid] = useViewportGrid();
|
||||
const { t } = useTranslation('MeasurementTable');
|
||||
const { measurementService, customizationService } = servicesManager.services;
|
||||
const { customizationService } = servicesManager.services;
|
||||
const [trackedMeasurements, sendTrackedMeasurementsEvent] = useTrackedMeasurements();
|
||||
const { trackedStudy, trackedSeries } = trackedMeasurements.context;
|
||||
const [displayStudySummary, setDisplayStudySummary] = useState(
|
||||
DISPLAY_STUDY_SUMMARY_INITIAL_VALUE
|
||||
);
|
||||
|
||||
useEffect(() => {
|
||||
const updateDisplayStudySummary = async () => {
|
||||
if (trackedMeasurements.matches('tracking') && trackedStudy) {
|
||||
const studyMeta = DicomMetadataStore.getStudy(trackedStudy);
|
||||
if (!studyMeta || !studyMeta.series || studyMeta.series.length === 0) {
|
||||
console.debug('Study metadata not available');
|
||||
return;
|
||||
}
|
||||
|
||||
const instanceMeta = studyMeta.series[0].instances[0];
|
||||
const { StudyDate, StudyDescription } = instanceMeta;
|
||||
|
||||
const modalities = new Set();
|
||||
studyMeta.series.forEach(series => {
|
||||
if (trackedSeries.includes(series.SeriesInstanceUID)) {
|
||||
modalities.add(series.instances[0].Modality);
|
||||
}
|
||||
});
|
||||
const modality = Array.from(modalities).join('/');
|
||||
|
||||
setDisplayStudySummary(prevSummary => {
|
||||
if (prevSummary.key !== trackedStudy) {
|
||||
return {
|
||||
key: trackedStudy,
|
||||
date: StudyDate,
|
||||
modality,
|
||||
description: StudyDescription,
|
||||
};
|
||||
}
|
||||
return prevSummary;
|
||||
});
|
||||
} else if (!trackedStudy) {
|
||||
setDisplayStudySummary(DISPLAY_STUDY_SUMMARY_INITIAL_VALUE);
|
||||
}
|
||||
};
|
||||
|
||||
updateDisplayStudySummary();
|
||||
}, [trackedMeasurements, trackedStudy, trackedSeries]);
|
||||
const measurementFilter = trackedStudy
|
||||
? filterAnd(filterPlanarMeasurement, filterMeasurementsBySeriesUID(trackedSeries))
|
||||
: filterPlanarMeasurement;
|
||||
|
||||
const { disableEditing } = customizationService.getCustomization(
|
||||
'PanelMeasurement.disableEditing',
|
||||
@@ -79,20 +31,12 @@ function PanelMeasurementTableTracking({
|
||||
|
||||
return (
|
||||
<>
|
||||
{displayStudySummary.key && (
|
||||
<StudySummary
|
||||
date={formatDate(displayStudySummary.date)}
|
||||
description={displayStudySummary.description}
|
||||
/>
|
||||
)}
|
||||
<StudySummaryFromMetadata StudyInstanceUID={trackedStudy} />
|
||||
<PanelMeasurement
|
||||
servicesManager={servicesManager}
|
||||
extensionManager={extensionManager}
|
||||
commandsManager={commandsManager}
|
||||
measurementFilter={measurement =>
|
||||
trackedStudy === measurement.referenceStudyUID &&
|
||||
trackedSeries.includes(measurement.referenceSeriesUID)
|
||||
}
|
||||
measurementFilter={measurementFilter}
|
||||
customHeader={({ additionalFindings, measurements }) => {
|
||||
const disabled = additionalFindings.length === 0 && measurements.length === 0;
|
||||
|
||||
@@ -108,14 +52,9 @@ function PanelMeasurementTableTracking({
|
||||
variant="ghost"
|
||||
className="pl-1.5"
|
||||
onClick={() => {
|
||||
const measurements = measurementService.getMeasurements();
|
||||
const trackedMeasurements = measurements.filter(
|
||||
m =>
|
||||
trackedStudy === m.referenceStudyUID &&
|
||||
trackedSeries.includes(m.referenceSeriesUID)
|
||||
);
|
||||
|
||||
downloadCSVReport(trackedMeasurements);
|
||||
commandsManager.runCommand('downloadCSVMeasurementsReport', {
|
||||
measurementFilter,
|
||||
});
|
||||
}}
|
||||
>
|
||||
<Icons.Download className="h-5 w-5" />
|
||||
@@ -140,7 +79,7 @@ function PanelMeasurementTableTracking({
|
||||
variant="ghost"
|
||||
className="pl-0.5"
|
||||
onClick={() => {
|
||||
measurementService.clearMeasurements();
|
||||
commandsManager.runCommand('clearMeasurements', { measurementFilter });
|
||||
}}
|
||||
>
|
||||
<Icons.Delete />
|
||||
|
||||
Reference in new issue
Block a user