From 7a4cc01a611cd326140b91678572de47124cb1a7 Mon Sep 17 00:00:00 2001 From: David Stone Date: Thu, 23 Oct 2025 15:27:08 +0100 Subject: [PATCH 1/3] Support repeaters for mini-journey appended data --- src/server/plugins/engine/routes/index.ts | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/server/plugins/engine/routes/index.ts b/src/server/plugins/engine/routes/index.ts index e4e765706..eee3a266c 100644 --- a/src/server/plugins/engine/routes/index.ts +++ b/src/server/plugins/engine/routes/index.ts @@ -150,13 +150,28 @@ async function importExternalComponentState( : { [componentName]: stateAppendage } // Save the external component state immediately - const updatedState = await page.mergeState(request, state, componentState) + const pageState = page.getStateFromValidForm( + request, + state, + componentState as FormPayload + ) + const savedState = await page.mergeState(request, state, pageState) + + // Get any flashed/stashed payload + const payload = request.yar.flash(EXTERNAL_STATE_PAYLOAD) + + // Return the newly saved state if there is no stashed payload + if (Array.isArray(payload)) { + return savedState + } // Merge the stashed payload into the local state - const payload = request.yar.flash(EXTERNAL_STATE_PAYLOAD) - const stashedPayload = Array.isArray(payload) ? {} : (payload as FormPayload) + const localState = page.getStateFromValidForm(request, savedState, { + ...(payload as FormPayload), + ...componentState + } as FormPayload) - return { ...stashedPayload, ...updatedState } + return { ...savedState, ...localState } } export function makeLoadFormPreHandler(server: Server, options: PluginOptions) { From 9e52cc2ad8606cc152e8cf9b8d6dcef0c9cbad17 Mon Sep 17 00:00:00 2001 From: David Stone Date: Thu, 23 Oct 2025 16:11:52 +0100 Subject: [PATCH 2/3] Include a line break if the UKAddressField postcode lookup field is the last component --- .../plugins/engine/views/components/ukaddressfield.html | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/server/plugins/engine/views/components/ukaddressfield.html b/src/server/plugins/engine/views/components/ukaddressfield.html index e2aabbe7e..aef9cddbf 100644 --- a/src/server/plugins/engine/views/components/ukaddressfield.html +++ b/src/server/plugins/engine/views/components/ukaddressfield.html @@ -63,6 +63,10 @@ }) }}

or

+ {# Include a line break if this is the last component #} + {% if components[components.length - 1] == component %} +
+ {% endif %} {% endif %} {% endif %} From e55c5759de2943bca02d38f41c91ffe2573e2e87 Mon Sep 17 00:00:00 2001 From: David Stone Date: Thu, 23 Oct 2025 16:31:45 +0100 Subject: [PATCH 3/3] Change how flashed payload is applied to local state --- src/server/plugins/engine/routes/index.ts | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/server/plugins/engine/routes/index.ts b/src/server/plugins/engine/routes/index.ts index eee3a266c..9cb681c2c 100644 --- a/src/server/plugins/engine/routes/index.ts +++ b/src/server/plugins/engine/routes/index.ts @@ -157,17 +157,12 @@ async function importExternalComponentState( ) const savedState = await page.mergeState(request, state, pageState) - // Get any flashed/stashed payload + // Merge any stashed payload into the local state const payload = request.yar.flash(EXTERNAL_STATE_PAYLOAD) + const stashedPayload = Array.isArray(payload) ? {} : (payload as FormPayload) - // Return the newly saved state if there is no stashed payload - if (Array.isArray(payload)) { - return savedState - } - - // Merge the stashed payload into the local state const localState = page.getStateFromValidForm(request, savedState, { - ...(payload as FormPayload), + ...stashedPayload, ...componentState } as FormPayload)