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)
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')