diff --git a/src/server/plugins/engine/components/UkAddressField.ts b/src/server/plugins/engine/components/UkAddressField.ts index 66eb2aebf..c7a65169d 100644 --- a/src/server/plugins/engine/components/UkAddressField.ts +++ b/src/server/plugins/engine/components/UkAddressField.ts @@ -297,7 +297,11 @@ export class UkAddressField extends FormComponent { componentHint: component.hint, componentTitle: component.title || controller.title, step: args.actionArgs.step, - sourceUrl: args.sourceUrl + sourceUrl: args.sourceUrl, + inputSearchParams: { + postcode: request.payload.postcodeQueryField as string, + buildingName: request.payload.buildingNameQueryField as string + } }) } } diff --git a/src/server/plugins/engine/views/components/ukaddressfield.html b/src/server/plugins/engine/views/components/ukaddressfield.html index aef9cddbf..591918fe7 100644 --- a/src/server/plugins/engine/views/components/ukaddressfield.html +++ b/src/server/plugins/engine/views/components/ukaddressfield.html @@ -3,6 +3,7 @@ {% from "govuk/components/hint/macro.njk" import govukHint %} {% from "govuk/components/button/macro.njk" import govukButton %} {% from "govuk/components/inset-text/macro.njk" import govukInsetText %} +{% from "govuk/components/input/macro.njk" import govukInput %} {% macro UkAddressField(component) %} {% set fieldset = component.model.fieldset %} @@ -52,7 +53,31 @@ classes: "govuk-!-margin-top-2" }) }} {% else %} + + + {{ govukInput({ + id: "postcodeQueryField", + name: "postcodeQueryField", + label: { + text: 'Postcode' + }, + hint: { + text: 'For example, AA3 1AB' + } + }) }} + + {{ govukInput({ + id: "buildingNameQueryField", + name: "buildingNameQueryField", + label: { + text: 'Building name or number (optional)' + }, + hint: { + text: 'For example, 15 or Prospect Cottage' + } + }) }}
+ {{ govukButton({ text: "Find an address", attributes: { diff --git a/src/server/plugins/postcode-lookup/routes/index.js b/src/server/plugins/postcode-lookup/routes/index.js index 7252e5fec..f491c669a 100644 --- a/src/server/plugins/postcode-lookup/routes/index.js +++ b/src/server/plugins/postcode-lookup/routes/index.js @@ -74,7 +74,10 @@ export function dispatch(request, h, initial) { */ const data = { initial, - details: { postcodeQuery: '', buildingNameQuery: '' } + details: { + postcodeQuery: initial.inputSearchParams.postcode, + buildingNameQuery: initial.inputSearchParams.buildingName ?? '' + } } request.yar.set(JOURNEY_BASE_URL, data) @@ -89,13 +92,14 @@ export function dispatch(request, h, initial) { * @param {PostcodeLookupConfiguration} options - ordnance survey api key */ export function getRoutes(options) { - return [getRoute(), postRoute(options)] + return [getRoute(options), postRoute(options)] } /** + * @param {PostcodeLookupConfiguration} options * @returns {ServerRoute} */ -function getRoute() { +function getRoute(options) { return { method: 'GET', path: JOURNEY_BASE_URL, @@ -104,6 +108,11 @@ function getRoute() { const { step } = query const session = getSessionState(request) + if (session.details.postcodeQuery) { + // @ts-expect-error testioptudfiogfhfdkghfdkljghdfkljghnfd + return detailsPostHandler(request, h, options) + } + const model = step === steps.manual ? manualViewModel(session) @@ -171,7 +180,12 @@ async function detailsPostHandler(request, h, options) { const { payload } = request const session = getSessionState(request) const { ordnanceSurveyApiKey: apiKey } = options - const { value: details, error } = detailsPayloadSchema.validate(payload) + + const { value: details, error } = detailsPayloadSchema.validate( + session.details.postcodeQuery + ? { ...session.details, step: 'details' } + : payload + ) let model diff --git a/src/server/plugins/postcode-lookup/types.js b/src/server/plugins/postcode-lookup/types.js index 49ca24a11..e9fcde151 100644 --- a/src/server/plugins/postcode-lookup/types.js +++ b/src/server/plugins/postcode-lookup/types.js @@ -18,7 +18,11 @@ * componentName: string * componentTitle: string, * componentHint?: string - * step?: string + * step?: string, + * inputSearchParams: { + * postcode: string, + * buildingName?: string + * } * }} PostcodeLookupDispatchData */