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, displaySetService } = servicesManager.services; const { segmentationsWithRepresentations, disabled } = useActiveViewportSegmentationRepresentations({ servicesManager, }); const handlers = { 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 segmentationTableMode = customizationService.getCustomization( 'panelSegmentation.tableMode' ); // custom onSegmentationAdd if provided const onSegmentationAdd = customizationService.getCustomization( 'panelSegmentation.onSegmentationAdd' ); const disableEditing = customizationService.getCustomization('panelSegmentation.disableEditing'); const showAddSegment = customizationService.getCustomization('panelSegmentation.showAddSegment'); const CustomDropdownMenuContent = customizationService.getCustomization( 'panelSegmentation.customDropdownMenuContent' ); 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); if (!instance) { return { segmentationId, isExportable: false, }; } const SOPInstanceUID = instance.SOPInstanceUID || instance.SopInstanceUID; const SeriesInstanceUID = instance.SeriesInstanceUID; const displaySet = displaySetService.getDisplaySetForSOPInstanceUID( SOPInstanceUID, SeriesInstanceUID ); const isExportable = displaySet?.isReconstructable; return { segmentationId, isExportable, }; }); return ( <> {children} {segmentationTableMode === 'collapsed' ? ( ) : ( {/* */} )} ); }