import React, { useEffect, useState } from 'react'; import PropTypes from 'prop-types'; import { StudySummary, MeasurementTable } from '@ohif/ui'; import { DicomMetadataStore } from '@ohif/core'; import ActionButtons from './ActionButtons'; import { useTrackedMeasurements } from '../../getContextModule'; const DISPLAY_STUDY_SUMMARY_INITIAL_VALUE = { key: undefined, // date: undefined, // '07-Sep-2010', modality: undefined, // 'CT', description: undefined, // 'CHEST/ABD/PELVIS W CONTRAST', }; function PanelMeasurementTableTracking({ servicesManager, commandsManager }) { const { MeasurementService } = servicesManager.services; const [ trackedMeasurements, sendTrackedMeasurementsEvent, ] = useTrackedMeasurements(); const { trackedStudy, trackedSeries } = trackedMeasurements.context; const [displayStudySummary, setDisplayStudySummary] = useState( DISPLAY_STUDY_SUMMARY_INITIAL_VALUE ); const [displayMeasurements, setDisplayMeasurements] = useState([]); // TODO: measurements subscribtion // Initial? useEffect(() => { const measurements = MeasurementService.getMeasurements(); const filteredMeasurements = measurements.filter( m => trackedStudy === m.referenceStudyUID && trackedSeries.includes(m.referenceSeriesUID) ); const mappedMeasurements = filteredMeasurements.map((m, index) => _mapMeasurementToDisplay(m, index) ); setDisplayMeasurements(mappedMeasurements); // eslint-ignore-next-line }, [MeasurementService, trackedStudy, trackedSeries]); // ~~ DisplayStudySummary useEffect(() => { if (trackedMeasurements.matches('tracking')) { const StudyInstanceUID = trackedStudy; const studyMeta = DicomMetadataStore.getStudy(StudyInstanceUID); const instanceMeta = studyMeta.series[0].instances[0]; const { Modality, StudyDate, StudyDescription } = instanceMeta; if (displayStudySummary.key !== StudyInstanceUID) { setDisplayStudySummary({ key: StudyInstanceUID, date: StudyDate, // TODO: Format: '07-Sep-2010' modality: Modality, description: StudyDescription, }); } } else if (trackedMeasurements.matches('notTracking')) { setDisplayStudySummary(DISPLAY_STUDY_SUMMARY_INITIAL_VALUE); } }, [displayStudySummary.key, trackedMeasurements, trackedStudy]); // TODO: Listen for measurement service "adds" and updates useEffect(() => { // const { unsubscribe } = MeasurementService.subscribe( // MeasurementService.EVENTS.MEASUREMENT_ADDED, // ({ source, measurement }) => { // const { // referenceSeriesUID: SeriesInstanceUID, // referenceStudyUID: StudyInstanceUID, // } = measurement; // sendTrackedMeasurementsEvent('TRACK_SERIES', { // StudyInstanceUID, // SeriesInstanceUID, // }); // console.log('PANEL:', measurement); // // console.log('Mapped:', annotation); // } // ); // return unsubscribe; }, [MeasurementService, sendTrackedMeasurementsEvent]); const activeMeasurementItem = 0; return ( <>