ohif-viewer/extensions/measurement-tracking/src/panels/PanelMeasurementTableTracking.tsx

117 lines
3.3 KiB
TypeScript
Raw Normal View History

import React from 'react';
import { useSystem, utils } from '@ohif/core';
import { AccordionTrigger, MeasurementTable, ScrollArea, useViewportGrid } from '@ohif/ui-next';
import {
PanelMeasurement,
StudyMeasurements,
StudySummaryFromMetadata,
AccordionGroup,
StudyMeasurementsActions,
MeasurementsOrAdditionalFindings,
} from '@ohif/extension-cornerstone';
2024-11-06 13:15:27 +01:00
import { useTrackedMeasurements } from '../getContextModule';
import { UntrackSeriesModal } from './PanelStudyBrowserTracking/untrackSeriesModal';
2024-11-06 13:15:27 +01:00
const { filterMeasurementsBySeriesUID, filterAny } =
utils.MeasurementFilters;
2024-11-06 13:15:27 +01:00
function PanelMeasurementTableTracking(props) {
2024-11-06 13:15:27 +01:00
const [viewportGrid] = useViewportGrid();
const { servicesManager } = useSystem();
const { measurementService, uiModalService } = servicesManager.services;
2024-11-06 13:15:27 +01:00
const [trackedMeasurements, sendTrackedMeasurementsEvent] = useTrackedMeasurements();
const { trackedStudy, trackedSeries } = trackedMeasurements.context;
const measurementFilter = trackedStudy
? filterMeasurementsBySeriesUID(trackedSeries)
: filterAny;
2024-11-06 13:15:27 +01:00
const onUntrackConfirm = () => {
sendTrackedMeasurementsEvent('UNTRACK_ALL', {});
};
const onDelete = () => {
const hasDirtyMeasurements = measurementService
.getMeasurements()
.some(measurement => measurement.isDirty);
hasDirtyMeasurements
? uiModalService.show({
title: 'Untrack Study',
content: UntrackSeriesModal,
contentProps: {
onConfirm: onUntrackConfirm,
message: 'Are you sure you want to untrack study and delete all measurements?',
},
})
: onUntrackConfirm();
};
const EmptyComponent = () => (
<div data-cy="trackedMeasurements-panel">
<MeasurementTable
title="Measurements"
isExpanded={false}
>
<MeasurementTable.Body />
</MeasurementTable>
</div>
);
2024-11-06 13:15:27 +01:00
const actions = {
createSR: ({ StudyInstanceUID }) => {
sendTrackedMeasurementsEvent('SAVE_REPORT', {
viewportId: viewportGrid.activeViewportId,
isBackupSave: true,
StudyInstanceUID,
measurementFilter,
});
},
onDelete,
};
2024-11-06 13:15:27 +01:00
const Header = props => (
<AccordionTrigger
asChild={true}
className="px-0"
>
<div data-cy="TrackingHeader">
<StudySummaryFromMetadata
{...props}
actions={actions}
/>
</div>
</AccordionTrigger>
);
2024-11-06 13:15:27 +01:00
return (
<ScrollArea>
<div data-cy="trackedMeasurements-panel">
<PanelMeasurement
measurementFilter={measurementFilter}
emptyComponent={EmptyComponent}
sourceChildren={props.children}
>
<StudyMeasurements grouping={props.grouping}>
<AccordionGroup.Trigger
key="trackingMeasurementsHeader"
asChild={true}
>
<Header key="trackingHeadChild" />
</AccordionGroup.Trigger>
<MeasurementsOrAdditionalFindings
key="measurementsOrAdditionalFindings"
activeStudyUID={trackedStudy}
customHeader={StudyMeasurementsActions}
measurementFilter={measurementFilter}
actions={actions}
/>
</StudyMeasurements>
</PanelMeasurement>
</div>
</ScrollArea>
2024-11-06 13:15:27 +01:00
);
}
export default PanelMeasurementTableTracking;