fix(microscopy): rename measurement in microscopy mode (#5866)
This commit is contained in:
parent
df22109013
commit
2358a73c3c
@ -1,6 +1,7 @@
|
|||||||
import { CommandsManager, ExtensionManager } from '@ohif/core';
|
import { CommandsManager, ExtensionManager } from '@ohif/core';
|
||||||
import { callInputDialog } from '@ohif/extension-default';
|
import { callInputDialog } from '@ohif/extension-default';
|
||||||
import styles from './utils/styles';
|
import styles from './utils/styles';
|
||||||
|
import i18n from '@ohif/i18n';
|
||||||
|
|
||||||
export default function getCommandsModule({
|
export default function getCommandsModule({
|
||||||
servicesManager,
|
servicesManager,
|
||||||
@ -24,16 +25,22 @@ export default function getCommandsModule({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
setLabel: ({ uid }) => {
|
setLabel: async ({ uid }) => {
|
||||||
const roiAnnotation = microscopyService.getAnnotation(uid);
|
const roiAnnotation = microscopyService.getAnnotation(uid);
|
||||||
callInputDialog({
|
if (!roiAnnotation) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const value = await callInputDialog({
|
||||||
uiDialogService,
|
uiDialogService,
|
||||||
defaultValue: '',
|
title: i18n.t('Tools:Edit Measurement Label'),
|
||||||
onSave: (value: string) => {
|
placeholder: roiAnnotation.label || i18n.t('Tools:Enter new label'),
|
||||||
roiAnnotation.setLabel(value);
|
defaultValue: roiAnnotation.label,
|
||||||
microscopyService.triggerRelabel(roiAnnotation);
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (value != null) {
|
||||||
|
roiAnnotation.setLabel(value);
|
||||||
|
microscopyService.triggerRelabel(roiAnnotation);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
setToolActive: ({ toolName, toolGroupId = 'MICROSCOPY' }) => {
|
setToolActive: ({ toolName, toolGroupId = 'MICROSCOPY' }) => {
|
||||||
|
|||||||
@ -280,6 +280,7 @@ const DataRowComponent = React.forwardRef<HTMLDivElement, DataRowProps>(
|
|||||||
<Tooltip>
|
<Tooltip>
|
||||||
<TooltipTrigger asChild>
|
<TooltipTrigger asChild>
|
||||||
<span
|
<span
|
||||||
|
data-cy="data-row-title"
|
||||||
className={`cursor-default text-base ${
|
className={`cursor-default text-base ${
|
||||||
isSelected ? 'text-highlight' : 'text-muted-foreground'
|
isSelected ? 'text-highlight' : 'text-muted-foreground'
|
||||||
} [overflow:hidden] [display:-webkit-box] [-webkit-line-clamp:2] [-webkit-box-orient:vertical]`}
|
} [overflow:hidden] [display:-webkit-box] [-webkit-line-clamp:2] [-webkit-box-orient:vertical]`}
|
||||||
@ -296,6 +297,7 @@ const DataRowComponent = React.forwardRef<HTMLDivElement, DataRowProps>(
|
|||||||
</Tooltip>
|
</Tooltip>
|
||||||
) : (
|
) : (
|
||||||
<span
|
<span
|
||||||
|
data-cy="data-row-title"
|
||||||
className={`text-base ${
|
className={`text-base ${
|
||||||
isSelected ? 'text-highlight' : 'text-muted-foreground'
|
isSelected ? 'text-highlight' : 'text-muted-foreground'
|
||||||
} [overflow:hidden] [display:-webkit-box] [-webkit-line-clamp:2] [-webkit-box-orient:vertical]`}
|
} [overflow:hidden] [display:-webkit-box] [-webkit-line-clamp:2] [-webkit-box-orient:vertical]`}
|
||||||
|
|||||||
33
tests/MicroscopyPanel.spec.ts
Normal file
33
tests/MicroscopyPanel.spec.ts
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
import { test, visitStudy, expect } from './utils';
|
||||||
|
|
||||||
|
test.beforeEach(async ({ page }) => {
|
||||||
|
const studyInstanceUID = '1.2.276.0.7230010.3.1.2.296485376.1.1665793212.499772';
|
||||||
|
const mode = 'microscopy';
|
||||||
|
await visitStudy(page, studyInstanceUID, mode, 5000);
|
||||||
|
});
|
||||||
|
test('should rename a microscopy measurement label', async ({
|
||||||
|
page,
|
||||||
|
mainToolbarPageObject,
|
||||||
|
DOMOverlayPageObject,
|
||||||
|
rightPanelPageObject,
|
||||||
|
viewportPageObject,
|
||||||
|
}) => {
|
||||||
|
const newLabel = 'Renamed Measurement';
|
||||||
|
|
||||||
|
await mainToolbarPageObject.measurementTools.line.click();
|
||||||
|
|
||||||
|
await viewportPageObject.active.clickAt([{ x: 400, y: 200 }]);
|
||||||
|
await page.waitForTimeout(200);
|
||||||
|
await viewportPageObject.active.clickAt([{ x: 550, y: 250 }]);
|
||||||
|
|
||||||
|
const measurementRow = rightPanelPageObject.microscopyPanel.nthMeasurement(0);
|
||||||
|
await expect(measurementRow.locator).toBeVisible();
|
||||||
|
|
||||||
|
await expect(measurementRow.title).toHaveText('(empty)');
|
||||||
|
|
||||||
|
await measurementRow.actions.rename(newLabel);
|
||||||
|
|
||||||
|
await expect(DOMOverlayPageObject.dialog.input.locator).toBeHidden();
|
||||||
|
|
||||||
|
await expect(measurementRow.title).toHaveText(newLabel);
|
||||||
|
});
|
||||||
@ -194,7 +194,6 @@ export class MainToolbarPageObject {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
get freehandROI() {
|
get freehandROI() {
|
||||||
const button = page.getByTestId('PlanarFreehandROI');
|
const button = page.getByTestId('PlanarFreehandROI');
|
||||||
return {
|
return {
|
||||||
@ -205,6 +204,21 @@ export class MainToolbarPageObject {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
/* microscopy specific tools */
|
||||||
|
// `.last()` targets the menu item inside the dropdown, not the active-tool
|
||||||
|
// indicator inside the split-button primary
|
||||||
|
// because both share the same data-cy value (e.g. "line")
|
||||||
|
// Other microscopy tools might follow the same pattern
|
||||||
|
get line() {
|
||||||
|
const button = page.getByTestId('line').last();
|
||||||
|
return {
|
||||||
|
button,
|
||||||
|
async click() {
|
||||||
|
await measurementTools.click();
|
||||||
|
await button.click();
|
||||||
|
},
|
||||||
|
};
|
||||||
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -46,6 +46,9 @@ export class RightPanelPageObject {
|
|||||||
get actions() {
|
get actions() {
|
||||||
return getActionsMenu(row);
|
return getActionsMenu(row);
|
||||||
},
|
},
|
||||||
|
get title() {
|
||||||
|
return row.getByTestId('data-row-title');
|
||||||
|
},
|
||||||
click: async () => {
|
click: async () => {
|
||||||
await row.click();
|
await row.click();
|
||||||
},
|
},
|
||||||
@ -323,4 +326,23 @@ export class RightPanelPageObject {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get microscopyPanel() {
|
||||||
|
const page = this.page;
|
||||||
|
const getMeasurementByIdx = (index: number) => this.getPanelRowByIdx(index);
|
||||||
|
const getMeasurementByText = (text: string) => this.getPanelRowByText(text);
|
||||||
|
|
||||||
|
return {
|
||||||
|
locator: page.getByTestId('measurements-panel'),
|
||||||
|
getMeasurementCount: async () => {
|
||||||
|
return await page.getByTestId('data-row').count();
|
||||||
|
},
|
||||||
|
nthMeasurement(index: number) {
|
||||||
|
return getMeasurementByIdx(index);
|
||||||
|
},
|
||||||
|
measurementByText(text: string) {
|
||||||
|
return getMeasurementByText(text);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user