feat(actions): simplify action corner api through the toolbarService (#5033)

This commit is contained in:
Alireza authored and GitHub committed 2025-05-15 12:08:12 -04:00
1 parent f71b88e639
commit 7c15bb8901
246 files changed
+7930 -4270

No files matched your search

@@ -35,7 +35,12 @@ function TrackedMeasurementsContextProvider(
const [viewportGrid, viewportGridService] = useViewportGrid();
const { activeViewportId, viewports } = viewportGrid;
const { measurementService, displaySetService, customizationService } = servicesManager.services;
const {
measurementService,
displaySetService,
customizationService,
trackedMeasurementsService,
} = servicesManager.services as AppTypes.Services;
const machineOptions = Object.assign({}, defaultOptions);
machineOptions.actions = Object.assign({}, machineOptions.actions, {
@@ -272,6 +277,13 @@ function TrackedMeasurementsContextProvider(
measurementTrackingMachine
);
// Update TrackedMeasurementsService when trackedSeries changes in context
useEffect(() => {
if (trackedMeasurements?.context?.trackedSeries && trackedMeasurementsService) {
trackedMeasurementsService.updateTrackedSeries(trackedMeasurements.context.trackedSeries);
}
}, [trackedMeasurements?.context?.trackedSeries, trackedMeasurementsService]);
useEffect(() => {
// Update the state machine with the active viewport ID
sendTrackedMeasurementsEvent('UPDATE_ACTIVE_VIEWPORT_ID', {
@@ -1,97 +0,0 @@
import { hydrateStructuredReport } from '@ohif/extension-cornerstone-dicom-sr';
import { measurementTrackingMode } from './promptBeginTracking';
const RESPONSE = {
NO_NEVER: -1,
CANCEL: 0,
CREATE_REPORT: 1,
ADD_SERIES: 2,
SET_STUDY_AND_SERIES: 3,
NO_NOT_FOR_SERIES: 4,
HYDRATE_REPORT: 5,
};
function promptHydrateStructuredReport(
{ servicesManager, extensionManager, commandsManager, appConfig },
ctx,
evt
) {
const { uiViewportDialogService, displaySetService, customizationService } =
servicesManager.services;
const { viewportId, displaySetInstanceUID } = evt;
const srDisplaySet = displaySetService.getDisplaySetByUID(displaySetInstanceUID);
return new Promise(async function (resolve, reject) {
const standardMode = appConfig?.measurementTrackingMode === measurementTrackingMode.STANDARD;
const promptResult = standardMode
? await _askTrackMeasurements(uiViewportDialogService, customizationService, viewportId)
: RESPONSE.HYDRATE_REPORT;
// Need to do action here... So we can set state...
let StudyInstanceUID, SeriesInstanceUIDs;
if (promptResult === RESPONSE.HYDRATE_REPORT) {
console.warn('!! HYDRATING STRUCTURED REPORT');
const hydrationResult = hydrateStructuredReport(
{ servicesManager, extensionManager, commandsManager, appConfig },
displaySetInstanceUID
);
StudyInstanceUID = hydrationResult.StudyInstanceUID;
SeriesInstanceUIDs = hydrationResult.SeriesInstanceUIDs;
}
resolve({
userResponse: promptResult,
displaySetInstanceUID: evt.displaySetInstanceUID,
srSeriesInstanceUID: srDisplaySet.SeriesInstanceUID,
viewportId,
StudyInstanceUID,
SeriesInstanceUIDs,
});
});
}
function _askTrackMeasurements(uiViewportDialogService, customizationService, viewportId) {
return new Promise(function (resolve, reject) {
const message = customizationService.getCustomization('viewportNotification.hydrateSRMessage');
const actions = [
{
id: 'no-hydrate',
type: 'secondary',
text: 'No',
value: RESPONSE.CANCEL,
},
{
id: 'yes-hydrate',
type: 'primary',
text: 'Yes',
value: RESPONSE.HYDRATE_REPORT,
},
];
const onSubmit = result => {
uiViewportDialogService.hide();
resolve(result);
};
uiViewportDialogService.show({
viewportId,
type: 'info',
message,
actions,
onSubmit,
onOutsideClick: () => {
uiViewportDialogService.hide();
resolve(RESPONSE.CANCEL);
},
onKeyPress: event => {
if (event.key === 'Enter') {
const action = actions.find(action => action.value === RESPONSE.HYDRATE_REPORT);
onSubmit(action.value);
}
},
});
});
}
export default promptHydrateStructuredReport;
@@ -0,0 +1,30 @@
import { utils } from '@ohif/extension-cornerstone';
function promptHydrateStructuredReport({ servicesManager, commandsManager }, ctx, evt) {
const { displaySetService } = servicesManager.services;
const { viewportId, displaySetInstanceUID } = evt;
const srDisplaySet = displaySetService.getDisplaySetByUID(displaySetInstanceUID);
const hydrateCallback = async () => {
return commandsManager.runCommand('hydrateSecondaryDisplaySet', {
displaySet: srDisplaySet,
viewportId,
});
};
// For SR we need to use the whole context
const enhancedSrDisplaySet = {
...srDisplaySet,
displaySetInstanceUID,
};
return utils.promptHydrationDialog({
servicesManager,
viewportId,
displaySet: enhancedSrDisplaySet,
hydrateCallback,
type: 'SR',
});
}
export default promptHydrateStructuredReport;