feat: Automate tracking prompts for a less disruptive annotation workflow (#4822)
Co-authored-by: Devu Jayalekshmi <devu.jayalekshmi@trenser.com>
This commit is contained in:
1 parent
c0391cea1b
commit
54fded554e
42 files changed
+948
-70
No files matched your search
@@ -34,8 +34,9 @@ function PanelStudyBrowser({
|
||||
dataSource,
|
||||
customMapDisplaySets,
|
||||
onClickUntrack,
|
||||
onDoubleClickThumbnailHandlerCallBack,
|
||||
}) {
|
||||
const { servicesManager, commandsManager } = useSystem();
|
||||
const { servicesManager, commandsManager, extensionManager } = useSystem();
|
||||
const { displaySetService, customizationService } = servicesManager.services;
|
||||
const navigate = useNavigate();
|
||||
const studyMode = customizationService.getCustomization('studyBrowser.studyMode') || 'all';
|
||||
@@ -93,6 +94,7 @@ function PanelStudyBrowser({
|
||||
commandsManager,
|
||||
servicesManager,
|
||||
isHangingProtocolLayout,
|
||||
appConfig: extensionManager._appConfig,
|
||||
};
|
||||
|
||||
const handlers = customHandler?.callbacks.map(callback => callback(setupArgs));
|
||||
@@ -100,6 +102,7 @@ function PanelStudyBrowser({
|
||||
for (const handler of handlers) {
|
||||
await handler(displaySetInstanceUID);
|
||||
}
|
||||
onDoubleClickThumbnailHandlerCallBack?.(displaySetInstanceUID);
|
||||
},
|
||||
[
|
||||
activeViewportId,
|
||||
|
||||
@@ -1,5 +1,29 @@
|
||||
import i18n from '@ohif/i18n';
|
||||
import { Notification } from '@ohif/ui';
|
||||
|
||||
const beginTrackingMessage = i18n.t('MeasurementTable:Track measurements for this series?');
|
||||
const trackNewSeriesMessage = i18n.t('Do you want to add this measurement to the existing report?');
|
||||
const discardSeriesMessage = i18n.t(
|
||||
'You have existing tracked measurements. What would you like to do with your existing tracked measurements?'
|
||||
);
|
||||
const trackNewStudyMessage = i18n.t('MeasurementTable:Track measurements for this series?');
|
||||
const discardStudyMessage = i18n.t(
|
||||
'Measurements cannot span across multiple studies. Do you want to save your tracked measurements?'
|
||||
);
|
||||
const hydrateSRMessage = i18n.t('Do you want to continue tracking measurements for this study?');
|
||||
const hydrateRTMessage = i18n.t('Do you want to open this Segmentation?');
|
||||
const hydrateSEGMessage = i18n.t('Do you want to open this Segmentation?');
|
||||
const discardDirtyMessage = i18n.t('There are unsaved measurements. Do you want to save it?');
|
||||
|
||||
export default {
|
||||
'ui.notificationComponent': Notification,
|
||||
'viewportNotification.beginTrackingMessage': beginTrackingMessage,
|
||||
'viewportNotification.trackNewSeriesMessage': trackNewSeriesMessage,
|
||||
'viewportNotification.discardSeriesMessage': discardSeriesMessage,
|
||||
'viewportNotification.trackNewStudyMessage': trackNewStudyMessage,
|
||||
'viewportNotification.discardStudyMessage': discardStudyMessage,
|
||||
'viewportNotification.hydrateSRMessage': hydrateSRMessage,
|
||||
'viewportNotification.hydrateRTMessage': hydrateRTMessage,
|
||||
'viewportNotification.hydrateSEGMessage': hydrateSEGMessage,
|
||||
'viewportNotification.discardDirtyMessage': discardDirtyMessage,
|
||||
};
|
||||
@@ -1,4 +1,6 @@
|
||||
import React from 'react';
|
||||
import { setAnnotationLabel } from '@cornerstonejs/tools/utilities';
|
||||
import { annotation } from '@cornerstonejs/tools';
|
||||
import { LabellingFlow } from '@ohif/ui';
|
||||
import { InputDialog } from '@ohif/ui-next';
|
||||
|
||||
@@ -89,6 +91,7 @@ export async function callInputDialogAutoComplete({
|
||||
uiDialogService,
|
||||
labelConfig,
|
||||
renderContent = LabellingFlow,
|
||||
element,
|
||||
}) {
|
||||
const exclusive = labelConfig ? labelConfig.exclusive : false;
|
||||
const dropDownItems = labelConfig ? labelConfig.items : [];
|
||||
@@ -97,7 +100,8 @@ export async function callInputDialogAutoComplete({
|
||||
const labellingDoneCallback = newValue => {
|
||||
uiDialogService.hide('select-annotation');
|
||||
if (measurement && typeof newValue === 'string') {
|
||||
measurement.label = newValue;
|
||||
const sourceAnnotation = annotation.state.getAnnotation(measurement.uid);
|
||||
setAnnotationLabel(sourceAnnotation, element, newValue);
|
||||
}
|
||||
resolve(newValue);
|
||||
};
|
||||
|
||||
@@ -18,6 +18,7 @@ async function promptSaveReport({ servicesManager, commandsManager, extensionMan
|
||||
const isBackupSave = evt.isBackupSave === undefined ? evt.data.isBackupSave : evt.isBackupSave;
|
||||
const StudyInstanceUID = evt?.data?.StudyInstanceUID || ctx.trackedStudy;
|
||||
const SeriesInstanceUID = evt?.data?.SeriesInstanceUID;
|
||||
const { displaySetInstanceUID } = evt.data ?? evt;
|
||||
|
||||
const {
|
||||
trackedSeries,
|
||||
@@ -76,6 +77,7 @@ async function promptSaveReport({ servicesManager, commandsManager, extensionMan
|
||||
SeriesInstanceUID,
|
||||
viewportId,
|
||||
isBackupSave,
|
||||
displaySetInstanceUID,
|
||||
};
|
||||
} catch (error) {
|
||||
console.warn('Unable to save report', error);
|
||||
|
||||
Reference in new issue
Block a user