From 9c793a45c562631ec331f65ca871334f5a8a8e2f Mon Sep 17 00:00:00 2001 From: Elias Meire Date: Fri, 25 Jul 2025 16:04:38 +0200 Subject: [PATCH] fix(editor): Make inline text edit component reactive to prop changes (#17557) --- .../N8nInlineTextEdit/InlineTextEdit.test.ts | 19 ++++- .../N8nInlineTextEdit/InlineTextEdit.vue | 76 +++++++++---------- .../src/components/NodeDetailsViewV2.vue | 10 ++- packages/frontend/editor-ui/src/constants.ts | 1 + 4 files changed, 62 insertions(+), 44 deletions(-) diff --git a/packages/frontend/@n8n/design-system/src/components/N8nInlineTextEdit/InlineTextEdit.test.ts b/packages/frontend/@n8n/design-system/src/components/N8nInlineTextEdit/InlineTextEdit.test.ts index cc178f81ecc..83c1eb0e2a6 100644 --- a/packages/frontend/@n8n/design-system/src/components/N8nInlineTextEdit/InlineTextEdit.test.ts +++ b/packages/frontend/@n8n/design-system/src/components/N8nInlineTextEdit/InlineTextEdit.test.ts @@ -40,7 +40,7 @@ describe('N8nInlineTextEdit', () => { expect(emittedEvents?.[0]).toEqual(['Updated Value']); }); - it('should not update value on blur if input is empty', async () => { + it('should not update value on enter if input is empty', async () => { const wrapper = renderComponent({ props: { modelValue: 'Test Value', @@ -52,11 +52,26 @@ describe('N8nInlineTextEdit', () => { const input = wrapper.getByTestId('inline-edit-input'); await userEvent.clear(input); - await userEvent.tab(); // Simulate blur + await userEvent.keyboard('{Enter}'); expect(preview).toHaveTextContent('Test Value'); }); + it('should display changes to props.modelValue', async () => { + const wrapper = renderComponent({ + props: { + modelValue: 'Test Value', + }, + }); + const preview = wrapper.getByTestId('inline-edit-preview'); + + expect(preview).toHaveTextContent('Test Value'); + + await wrapper.rerender({ modelValue: 'New Value!' }); + + expect(preview).toHaveTextContent('New Value!'); + }); + it('should not update on escape key press', async () => { const wrapper = renderComponent({ props: { diff --git a/packages/frontend/@n8n/design-system/src/components/N8nInlineTextEdit/InlineTextEdit.vue b/packages/frontend/@n8n/design-system/src/components/N8nInlineTextEdit/InlineTextEdit.vue index 7b33d50b0af..21cb894e861 100644 --- a/packages/frontend/@n8n/design-system/src/components/N8nInlineTextEdit/InlineTextEdit.vue +++ b/packages/frontend/@n8n/design-system/src/components/N8nInlineTextEdit/InlineTextEdit.vue @@ -1,7 +1,7 @@ @@ -92,10 +92,10 @@ defineExpose({ forceFocus, forceCancel }); - {{ temp }} + {{ displayContent }} @@ -185,7 +185,7 @@ defineExpose({ forceFocus, forceCancel }); position: absolute; top: 0; visibility: hidden; - white-space: nowrap; + white-space: pre; font-family: inherit; font-size: inherit; font-weight: inherit; diff --git a/packages/frontend/editor-ui/src/components/NodeDetailsViewV2.vue b/packages/frontend/editor-ui/src/components/NodeDetailsViewV2.vue index bc5c168efd4..94c86df9c1d 100644 --- a/packages/frontend/editor-ui/src/components/NodeDetailsViewV2.vue +++ b/packages/frontend/editor-ui/src/components/NodeDetailsViewV2.vue @@ -866,7 +866,8 @@ onBeforeUnmount(() => {