From d11d6d401bc92a3870ec1089d97235b01a6b27c3 Mon Sep 17 00:00:00 2001 From: Ghadeer Albattarni <165973963+GhadeerAlbattarni@users.noreply.github.com> Date: Tue, 24 Feb 2026 08:53:05 -0500 Subject: [PATCH] fix: prevent viewer crash when opening DICOM Tag Browser from empty viewport (#5827) --- extensions/default/src/commandsModule.ts | 4 +- tests/DicomTagBrowser.spec.ts | 53 ++++++++++++++++++++++++ tests/pages/DicomTagBrowserPageObject.ts | 9 ++-- 3 files changed, 62 insertions(+), 4 deletions(-) diff --git a/extensions/default/src/commandsModule.ts b/extensions/default/src/commandsModule.ts index b9569f37d..9f18269f5 100644 --- a/extensions/default/src/commandsModule.ts +++ b/extensions/default/src/commandsModule.ts @@ -656,7 +656,9 @@ const commandsModule = ({ const displaySets = displaySetService.activeDisplaySets; const { UIModalService } = servicesManager.services; - const defaultDisplaySetInstanceUID = displaySetInstanceUID || displaySetInstanceUIDs[0]; + const defaultDisplaySetInstanceUID = + displaySetInstanceUID || displaySetInstanceUIDs[0] || displaySets[0]?.displaySetInstanceUID; + UIModalService.show({ content: DicomTagBrowser, contentProps: { diff --git a/tests/DicomTagBrowser.spec.ts b/tests/DicomTagBrowser.spec.ts index f1cc09fde..49b5460e6 100644 --- a/tests/DicomTagBrowser.spec.ts +++ b/tests/DicomTagBrowser.spec.ts @@ -60,3 +60,56 @@ test('should display the long series name properly within the series select butt outerBoxLabel: 'trigger', }); }); + +test('should open DICOM Tag Browser from empty viewport and show default series', async ({ + page, + mainToolbarPageObject, + viewportPageObject, + DOMOverlayPageObject, +}) => { + const studyInstanceUID = '1.3.6.1.4.1.25403.345050719074.3824.20170125095258.1'; + const mode = 'viewer'; + await visitStudy(page, studyInstanceUID, mode, 2000); + + // Switch to 3x3 layout + await mainToolbarPageObject.layoutSelection.click(); + await page.getByTestId('Layout-2-2').click(); + + await viewportPageObject.getNth(6).pane.click(); + + await mainToolbarPageObject.moreTools.tagBrowser.click(); + + const dicomTagBrowser = DOMOverlayPageObject.dialog.dicomTagBrowser; + await dicomTagBrowser.waitVisible(); + + const seriesSelect = dicomTagBrowser.seriesSelect; + const optionText = await seriesSelect.getOptionText(0); + + await expect(seriesSelect.value).toContainText(optionText); +}); + +test('should open DICOM Tag Browser with active viewport series when viewport has display set', async ({ + page, + mainToolbarPageObject, + viewportPageObject, + DOMOverlayPageObject, +}) => { + const studyInstanceUID = '1.3.6.1.4.1.25403.345050719074.3824.20170125095258.1'; + const mode = 'viewer'; + await visitStudy(page, studyInstanceUID, mode, 2000); + + await mainToolbarPageObject.layoutSelection.click(); + await page.getByTestId('Layout-2-2').click(); + + await viewportPageObject.getNth(2).pane.click(); + + await mainToolbarPageObject.moreTools.tagBrowser.click(); + + const dicomTagBrowser = DOMOverlayPageObject.dialog.dicomTagBrowser; + await dicomTagBrowser.waitVisible(); + + const seriesSelect = dicomTagBrowser.seriesSelect; + const optionText = await seriesSelect.getOptionText(2); + + await expect(seriesSelect.value).toContainText(optionText); +}); diff --git a/tests/pages/DicomTagBrowserPageObject.ts b/tests/pages/DicomTagBrowserPageObject.ts index ff94ba0d1..24b0883c1 100644 --- a/tests/pages/DicomTagBrowserPageObject.ts +++ b/tests/pages/DicomTagBrowserPageObject.ts @@ -29,13 +29,16 @@ export class DicomTagBrowserPageObject { await trigger.click(); }, - async selectOption(index) { + async getOptionText(index) { await this.click(); const optionText = await options.nth(index).innerText(); - const selectedText = optionText.split('\n')[0].trim(); + const trimmedOptionText = optionText.split('\n')[0].trim(); + return trimmedOptionText; + }, + async selectOption(index) { + const selectedText = await this.getOptionText(index); await options.nth(index).click(); - return selectedText; }, };