From c4bbb5c4463b224958e5a151268ae3a137fda8eb Mon Sep 17 00:00:00 2001 From: David Middleton Date: Wed, 3 Sep 2025 15:19:10 +0100 Subject: [PATCH 1/2] TGC-842: Fix multilineTextField render issue --- src/server/plugins/engine/components/helpers/components.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/plugins/engine/components/helpers/components.ts b/src/server/plugins/engine/components/helpers/components.ts index 82fd6d210..8fa55556d 100644 --- a/src/server/plugins/engine/components/helpers/components.ts +++ b/src/server/plugins/engine/components/helpers/components.ts @@ -315,7 +315,7 @@ export function getAnswerMarkdown( } else if (field instanceof Components.MultilineTextField) { // Preserve Multiline text new lines answerEscaped = answer - .split(/\r?\n/) + .split(/(?:\r?\n)+/) .map(escapeMarkdown) .join('\n') .concat('\n') From f89f88c64a51d1391a316f3e1b1c75a33c165fce Mon Sep 17 00:00:00 2001 From: David Middleton Date: Thu, 4 Sep 2025 15:27:56 +0100 Subject: [PATCH 2/2] Add test for multiple newlines --- .../engine/components/MultilineTextField.test.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/server/plugins/engine/components/MultilineTextField.test.ts b/src/server/plugins/engine/components/MultilineTextField.test.ts index f76358fc5..d903e404d 100644 --- a/src/server/plugins/engine/components/MultilineTextField.test.ts +++ b/src/server/plugins/engine/components/MultilineTextField.test.ts @@ -161,6 +161,17 @@ describe('MultilineTextField', () => { expect(answer2).toBe('') }) + it('returns multiline text from state, collapsing multiple newlines into one', () => { + const state1 = getFormState('Line 1\r\nLine 2\r\nLine 3') + const state2 = getFormState('Line 1\r\n\r\nLine 2\r\n\r\n\r\nLine 3') + + const answer1 = getAnswer(field, state1) + const answer2 = getAnswer(field, state2) + + expect(answer1).toBe('Line 1
Line 2
Line 3
') + expect(answer2).toBe('Line 1
Line 2
Line 3
') + }) + it('returns payload from state', () => { const state1 = getFormState('Textarea') const state2 = getFormState(null)