diff --git a/src/renderer/extensions/vueNodes/widgets/components/WidgetSelectDropdown.test.ts b/src/renderer/extensions/vueNodes/widgets/components/WidgetSelectDropdown.test.ts index 128ffaa3d..38f154b96 100644 --- a/src/renderer/extensions/vueNodes/widgets/components/WidgetSelectDropdown.test.ts +++ b/src/renderer/extensions/vueNodes/widgets/components/WidgetSelectDropdown.test.ts @@ -152,6 +152,30 @@ describe('WidgetSelectDropdown custom label mapping', () => { expect(consoleErrorSpy).toHaveBeenCalled() consoleErrorSpy.mockRestore() }) + + it('falls back to original value when label mapping returns empty string or undefined', () => { + // Simulate runtime scenario where getOptionLabel might return undefined + // despite the type definition + const getOptionLabel = vi.fn((value: string | null) => { + if (value === 'photo_abc.jpg') { + return '' + } + return `Labeled: ${value}` + }) + + const widget = createMockWidget('img_001.png', { + getOptionLabel + }) + const wrapper = mountComponent(widget, 'img_001.png') + + const inputItems = wrapper.vm.inputItems + expect(inputItems[0].name).toBe('img_001.png') + expect(inputItems[0].label).toBe('Labeled: img_001.png') + expect(inputItems[1].name).toBe('photo_abc.jpg') + expect(inputItems[1].label).toBe('photo_abc.jpg') + expect(inputItems[2].name).toBe('hash789.png') + expect(inputItems[2].label).toBe('Labeled: hash789.png') + }) }) describe('output items with custom label mapping', () => { diff --git a/src/renderer/extensions/vueNodes/widgets/components/WidgetSelectDropdown.vue b/src/renderer/extensions/vueNodes/widgets/components/WidgetSelectDropdown.vue index ad8b57e32..86ea6e78e 100644 --- a/src/renderer/extensions/vueNodes/widgets/components/WidgetSelectDropdown.vue +++ b/src/renderer/extensions/vueNodes/widgets/components/WidgetSelectDropdown.vue @@ -85,14 +85,15 @@ const selectedSet = ref>(new Set()) /** * Transforms a value using getOptionLabel if available. - * Falls back to the original value if getOptionLabel is not provided or throws an error. + * Falls back to the original value if getOptionLabel is not provided, + * returns undefined/null, or throws an error. */ function getDisplayLabel(value: string): string { const getOptionLabel = props.widget.options?.getOptionLabel if (!getOptionLabel) return value try { - return getOptionLabel(value) + return getOptionLabel(value) || value } catch (e) { console.error('Failed to map value:', e) return value