import React from 'react'; import { SegmentationTable } from '@ohif/ui-next'; import { useActiveViewportSegmentationRepresentations } from '../hooks/useActiveViewportSegmentationRepresentations'; import { metaData } from '@cornerstonejs/core'; export default function PanelSegmentation({ servicesManager, commandsManager, children, }: withAppTypes) { const { customizationService, viewportGridService, displaySetService } = servicesManager.services; const { segmentationsWithRepresentations, disabled } = useActiveViewportSegmentationRepresentations({ servicesManager, }); const handlers = { onSegmentationAdd: async () => { const viewportId = viewportGridService.getState().activeViewportId; commandsManager.run('createLabelmapForViewport', { viewportId }); }, onSegmentationClick: (segmentationId: string) => { commandsManager.run('setActiveSegmentation', { segmentationId }); }, onSegmentAdd: segmentationId => { commandsManager.run('addSegment', { segmentationId }); }, onSegmentClick: (segmentationId, segmentIndex) => { commandsManager.run('setActiveSegmentAndCenter', { segmentationId, segmentIndex }); }, onSegmentEdit: (segmentationId, segmentIndex) => { commandsManager.run('editSegmentLabel', { segmentationId, segmentIndex }); }, onSegmentationEdit: segmentationId => { commandsManager.run('editSegmentationLabel', { segmentationId }); }, onSegmentColorClick: (segmentationId, segmentIndex) => { commandsManager.run('editSegmentColor', { segmentationId, segmentIndex }); }, onSegmentDelete: (segmentationId, segmentIndex) => { commandsManager.run('deleteSegment', { segmentationId, segmentIndex }); }, onToggleSegmentVisibility: (segmentationId, segmentIndex, type) => { commandsManager.run('toggleSegmentVisibility', { segmentationId, segmentIndex, type }); }, onToggleSegmentLock: (segmentationId, segmentIndex) => { commandsManager.run('toggleSegmentLock', { segmentationId, segmentIndex }); }, onToggleSegmentationRepresentationVisibility: (segmentationId, type) => { commandsManager.run('toggleSegmentationVisibility', { segmentationId, type }); }, onSegmentationDownload: segmentationId => { commandsManager.run('downloadSegmentation', { segmentationId }); }, storeSegmentation: async segmentationId => { commandsManager.run('storeSegmentation', { segmentationId }); }, onSegmentationDownloadRTSS: segmentationId => { commandsManager.run('downloadRTSS', { segmentationId }); }, setStyle: (segmentationId, type, key, value) => { commandsManager.run('setSegmentationStyle', { segmentationId, type, key, value }); }, toggleRenderInactiveSegmentations: () => { commandsManager.run('toggleRenderInactiveSegmentations'); }, onSegmentationRemoveFromViewport: segmentationId => { commandsManager.run('removeSegmentationFromViewport', { segmentationId }); }, onSegmentationDelete: segmentationId => { commandsManager.run('deleteSegmentation', { segmentationId }); }, setFillAlpha: ({ type }, value) => { commandsManager.run('setFillAlpha', { type, value }); }, setOutlineWidth: ({ type }, value) => { commandsManager.run('setOutlineWidth', { type, value }); }, setRenderFill: ({ type }, value) => { commandsManager.run('setRenderFill', { type, value }); }, setRenderOutline: ({ type }, value) => { commandsManager.run('setRenderOutline', { type, value }); }, setFillAlphaInactive: ({ type }, value) => { commandsManager.run('setFillAlphaInactive', { type, value }); }, getRenderInactiveSegmentations: () => { return commandsManager.run('getRenderInactiveSegmentations'); }, }; const { mode: SegmentationTableMode } = customizationService.getCustomization( 'PanelSegmentation.tableMode', { id: 'default.segmentationTable.mode', mode: 'collapsed', } ); // custom onSegmentationAdd if provided const { onSegmentationAdd } = customizationService.getCustomization( 'PanelSegmentation.onSegmentationAdd', { id: 'segmentation.onSegmentationAdd', onSegmentationAdd: handlers.onSegmentationAdd, } ); const { disableEditing } = customizationService.getCustomization( 'PanelSegmentation.disableEditing', { id: 'default.disableEditing', disableEditing: false, } ); const { showAddSegment } = customizationService.getCustomization( 'PanelSegmentation.showAddSegment', { id: 'default.showAddSegment', showAddSegment: true, } ); const exportOptions = segmentationsWithRepresentations.map(({ segmentation }) => { const { representationData, segmentationId } = segmentation; const { Labelmap } = representationData; if (!Labelmap) { return { segmentationId, isExportable: true, }; } const referencedImageIds = Labelmap.referencedImageIds; const firstImageId = referencedImageIds[0]; const instance = metaData.get('instance', firstImageId); const { SOPInstanceUID, SeriesInstanceUID } = instance; const displaySet = displaySetService.getDisplaySetForSOPInstanceUID( SOPInstanceUID, SeriesInstanceUID ); const isExportable = displaySet.isReconstructable; return { segmentationId, isExportable, }; }); return ( <> {children} {SegmentationTableMode === 'collapsed' ? ( ) : ( {/* */} )} ); }