@defra/forms-engine-plugin 4.0.0 → 4.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.public/stylesheets/application.min.css +2 -2
- package/.public/stylesheets/application.min.css.map +1 -1
- package/.server/client/stylesheets/shared.scss +15 -0
- package/.server/config/index.d.ts +1 -0
- package/.server/config/index.js +7 -0
- package/.server/config/index.js.map +1 -1
- package/.server/index.js +6 -2
- package/.server/index.js.map +1 -1
- package/.server/server/constants.d.ts +2 -0
- package/.server/server/constants.js +2 -0
- package/.server/server/constants.js.map +1 -1
- package/.server/server/forms/components.json +7 -0
- package/.server/server/forms/register-as-a-unicorn-breeder.yaml +18 -2
- package/.server/server/plugins/engine/components/UkAddressField.d.ts +15 -9
- package/.server/server/plugins/engine/components/UkAddressField.js +67 -6
- package/.server/server/plugins/engine/components/UkAddressField.js.map +1 -1
- package/.server/server/plugins/engine/configureEnginePlugin.d.ts +1 -1
- package/.server/server/plugins/engine/configureEnginePlugin.js +6 -3
- package/.server/server/plugins/engine/configureEnginePlugin.js.map +1 -1
- package/.server/server/plugins/engine/models/FormModel.d.ts +2 -0
- package/.server/server/plugins/engine/models/FormModel.js +3 -1
- package/.server/server/plugins/engine/models/FormModel.js.map +1 -1
- package/.server/server/plugins/engine/options.js +2 -1
- package/.server/server/plugins/engine/options.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/QuestionPageController.d.ts +1 -0
- package/.server/server/plugins/engine/pageControllers/QuestionPageController.js +46 -3
- package/.server/server/plugins/engine/pageControllers/QuestionPageController.js.map +1 -1
- package/.server/server/plugins/engine/plugin.js +13 -1
- package/.server/server/plugins/engine/plugin.js.map +1 -1
- package/.server/server/plugins/engine/routes/index.js +41 -3
- package/.server/server/plugins/engine/routes/index.js.map +1 -1
- package/.server/server/plugins/engine/types.d.ts +19 -1
- package/.server/server/plugins/engine/types.js.map +1 -1
- package/.server/server/plugins/engine/validationHelpers.d.ts +15 -0
- package/.server/server/plugins/engine/validationHelpers.js +29 -0
- package/.server/server/plugins/engine/validationHelpers.js.map +1 -0
- package/.server/server/plugins/engine/views/components/ukaddressfield.html +50 -6
- package/.server/server/plugins/engine/vision.js +3 -1
- package/.server/server/plugins/engine/vision.js.map +1 -1
- package/.server/server/plugins/postcode-lookup/index.d.ts +8 -0
- package/.server/server/plugins/postcode-lookup/index.js +21 -0
- package/.server/server/plugins/postcode-lookup/index.js.map +1 -0
- package/.server/server/plugins/postcode-lookup/models/index.d.ts +255 -0
- package/.server/server/plugins/postcode-lookup/models/index.js +517 -0
- package/.server/server/plugins/postcode-lookup/models/index.js.map +1 -0
- package/.server/server/plugins/postcode-lookup/routes/index.d.ts +19 -0
- package/.server/server/plugins/postcode-lookup/routes/index.js +267 -0
- package/.server/server/plugins/postcode-lookup/routes/index.js.map +1 -0
- package/.server/server/plugins/postcode-lookup/service.d.ts +26 -0
- package/.server/server/plugins/postcode-lookup/service.js +148 -0
- package/.server/server/plugins/postcode-lookup/service.js.map +1 -0
- package/.server/server/plugins/postcode-lookup/service.test.js +144 -0
- package/.server/server/plugins/postcode-lookup/service.test.js.map +1 -0
- package/.server/server/plugins/postcode-lookup/test/__stubs__/postcode.d.ts +282 -0
- package/.server/server/plugins/postcode-lookup/test/__stubs__/postcode.js +370 -0
- package/.server/server/plugins/postcode-lookup/test/__stubs__/postcode.js.map +1 -0
- package/.server/server/plugins/postcode-lookup/test/__stubs__/query.d.ts +131 -0
- package/.server/server/plugins/postcode-lookup/test/__stubs__/query.js +195 -0
- package/.server/server/plugins/postcode-lookup/test/__stubs__/query.js.map +1 -0
- package/.server/server/plugins/postcode-lookup/test/__stubs__/uprn.d.ts +51 -0
- package/.server/server/plugins/postcode-lookup/test/__stubs__/uprn.js +52 -0
- package/.server/server/plugins/postcode-lookup/test/__stubs__/uprn.js.map +1 -0
- package/.server/server/plugins/postcode-lookup/types.d.ts +204 -0
- package/.server/server/plugins/postcode-lookup/types.js +144 -0
- package/.server/server/plugins/postcode-lookup/types.js.map +1 -0
- package/.server/server/plugins/postcode-lookup/views/postcode-lookup-details.html +83 -0
- package/.server/server/routes/types.d.ts +6 -1
- package/.server/server/routes/types.js +6 -0
- package/.server/server/routes/types.js.map +1 -1
- package/.server/server/schemas/index.js +1 -1
- package/.server/server/schemas/index.js.map +1 -1
- package/.server/server/types.d.ts +1 -0
- package/.server/server/types.js.map +1 -1
- package/package.json +2 -2
- package/src/client/stylesheets/shared.scss +15 -0
- package/src/config/index.ts +9 -1
- package/src/index.ts +5 -4
- package/src/server/constants.js +2 -0
- package/src/server/forms/components.json +7 -0
- package/src/server/forms/register-as-a-unicorn-breeder.yaml +18 -2
- package/src/server/plugins/engine/components/UkAddressField.test.ts +50 -27
- package/src/server/plugins/engine/components/UkAddressField.ts +91 -8
- package/src/server/plugins/engine/configureEnginePlugin.ts +5 -3
- package/src/server/plugins/engine/models/FormModel.ts +10 -2
- package/src/server/plugins/engine/options.js +2 -1
- package/src/server/plugins/engine/pageControllers/QuestionPageController.test.ts +1 -0
- package/src/server/plugins/engine/pageControllers/QuestionPageController.ts +69 -1
- package/src/server/plugins/engine/plugin.ts +13 -1
- package/src/server/plugins/engine/routes/index.test.ts +1 -0
- package/src/server/plugins/engine/routes/index.ts +71 -3
- package/src/server/plugins/engine/types.ts +21 -1
- package/src/server/plugins/engine/validationHelpers.ts +48 -0
- package/src/server/plugins/engine/views/components/ukaddressfield.html +50 -6
- package/src/server/plugins/engine/vision.ts +6 -0
- package/src/server/plugins/postcode-lookup/index.js +21 -0
- package/src/server/plugins/postcode-lookup/models/index.js +549 -0
- package/src/server/plugins/postcode-lookup/routes/index.js +258 -0
- package/src/server/plugins/postcode-lookup/service.js +188 -0
- package/src/server/plugins/postcode-lookup/service.test.js +177 -0
- package/src/server/plugins/postcode-lookup/test/__stubs__/postcode.js +382 -0
- package/src/server/plugins/postcode-lookup/test/__stubs__/query.js +200 -0
- package/src/server/plugins/postcode-lookup/test/__stubs__/uprn.js +53 -0
- package/src/server/plugins/postcode-lookup/types.js +143 -0
- package/src/server/plugins/postcode-lookup/views/postcode-lookup-details.html +83 -0
- package/src/server/postcode-lookup.test.ts +64 -0
- package/src/server/routes/types.ts +7 -1
- package/src/server/schemas/index.ts +5 -7
- package/src/server/types.ts +1 -0
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
export type PostcodeLookupConfiguration = {
|
|
2
|
+
ordnanceSurveyApiKey: string;
|
|
3
|
+
};
|
|
4
|
+
export type PostcodeLookupDispatchArgs = {
|
|
5
|
+
name: string;
|
|
6
|
+
step?: string;
|
|
7
|
+
};
|
|
8
|
+
export type PostcodeLookupDispatchData = {
|
|
9
|
+
sourceUrl: string;
|
|
10
|
+
formName: string;
|
|
11
|
+
componentName: string;
|
|
12
|
+
componentTitle: string;
|
|
13
|
+
componentHint?: string;
|
|
14
|
+
step?: string;
|
|
15
|
+
};
|
|
16
|
+
export type PostcodeLookupSessionData = {
|
|
17
|
+
initial: PostcodeLookupDispatchData;
|
|
18
|
+
details: PostcodeLookupDetailsData;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* The postcode lookup details form view model data
|
|
22
|
+
*/
|
|
23
|
+
export type PostcodeLookupDetailsData = {
|
|
24
|
+
/**
|
|
25
|
+
* - postcode query
|
|
26
|
+
*/
|
|
27
|
+
postcodeQuery: string;
|
|
28
|
+
/**
|
|
29
|
+
* - Building name or number query
|
|
30
|
+
*/
|
|
31
|
+
buildingNameQuery: string;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Postcode lookup query params
|
|
35
|
+
*/
|
|
36
|
+
export type PostcodeLookupQuery = {
|
|
37
|
+
/**
|
|
38
|
+
* - step
|
|
39
|
+
*/
|
|
40
|
+
step?: string | undefined;
|
|
41
|
+
};
|
|
42
|
+
export type PostcodeLookupDetailsPayloadProperties = {
|
|
43
|
+
/**
|
|
44
|
+
* - step
|
|
45
|
+
*/
|
|
46
|
+
step: string;
|
|
47
|
+
};
|
|
48
|
+
export type PostcodeLookupDetailsPayload = PostcodeLookupDetailsData & PostcodeLookupDetailsPayloadProperties;
|
|
49
|
+
export type PostcodeLookupSelectPayload = {
|
|
50
|
+
/**
|
|
51
|
+
* - step
|
|
52
|
+
*/
|
|
53
|
+
step: string;
|
|
54
|
+
/**
|
|
55
|
+
* - postcode
|
|
56
|
+
*/
|
|
57
|
+
uprn: string;
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Postcode lookup get request
|
|
61
|
+
*/
|
|
62
|
+
export type PostcodeLookupGetRequestRefs = {
|
|
63
|
+
/**
|
|
64
|
+
* - Request query
|
|
65
|
+
*/
|
|
66
|
+
Query: PostcodeLookupQuery;
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Postcode lookup post request
|
|
70
|
+
*/
|
|
71
|
+
export type PostcodeLookupPostRequestRefs = {
|
|
72
|
+
/**
|
|
73
|
+
* - Request payload
|
|
74
|
+
*/
|
|
75
|
+
Payload: PostcodeLookupDetailsPayload | PostcodeLookupSelectPayload;
|
|
76
|
+
};
|
|
77
|
+
export type PostcodeLookupRequestRefs = PostcodeLookupGetRequestRefs | PostcodeLookupPostRequestRefs;
|
|
78
|
+
export type PostcodeLookupGetRequest = Request<PostcodeLookupGetRequestRefs>;
|
|
79
|
+
export type PostcodeLookupPostRequest = Request<PostcodeLookupPostRequestRefs>;
|
|
80
|
+
export type PostcodeLookupRequest = PostcodeLookupGetRequest | PostcodeLookupPostRequest;
|
|
81
|
+
export type PostcodeLookupManualPayload = {
|
|
82
|
+
/**
|
|
83
|
+
* - The address line 1
|
|
84
|
+
*/
|
|
85
|
+
addressLine1: string;
|
|
86
|
+
/**
|
|
87
|
+
* - The address line 2
|
|
88
|
+
*/
|
|
89
|
+
addressLine2: string;
|
|
90
|
+
/**
|
|
91
|
+
* - The address town or city
|
|
92
|
+
*/
|
|
93
|
+
town: string;
|
|
94
|
+
/**
|
|
95
|
+
* - The address county
|
|
96
|
+
*/
|
|
97
|
+
county: string;
|
|
98
|
+
/**
|
|
99
|
+
* - The address postcode
|
|
100
|
+
*/
|
|
101
|
+
postcode: string;
|
|
102
|
+
};
|
|
103
|
+
export type Address = {
|
|
104
|
+
/**
|
|
105
|
+
* - The unique property reference
|
|
106
|
+
*/
|
|
107
|
+
uprn: string;
|
|
108
|
+
/**
|
|
109
|
+
* - The full address
|
|
110
|
+
*/
|
|
111
|
+
address: string;
|
|
112
|
+
/**
|
|
113
|
+
* - Address line 1
|
|
114
|
+
*/
|
|
115
|
+
addressLine1: string;
|
|
116
|
+
/**
|
|
117
|
+
* - Address line 2
|
|
118
|
+
*/
|
|
119
|
+
addressLine2: string;
|
|
120
|
+
/**
|
|
121
|
+
* - Address town
|
|
122
|
+
*/
|
|
123
|
+
town: string;
|
|
124
|
+
/**
|
|
125
|
+
* - Address county
|
|
126
|
+
*/
|
|
127
|
+
county: string;
|
|
128
|
+
/**
|
|
129
|
+
* - Address postcode
|
|
130
|
+
*/
|
|
131
|
+
postcode: string;
|
|
132
|
+
/**
|
|
133
|
+
* - The full formatted address
|
|
134
|
+
*/
|
|
135
|
+
formatted: string;
|
|
136
|
+
};
|
|
137
|
+
/**
|
|
138
|
+
* OS places address response
|
|
139
|
+
*/
|
|
140
|
+
export type DeliveryPointAddress = {
|
|
141
|
+
/**
|
|
142
|
+
* - Unique property reference number
|
|
143
|
+
*/
|
|
144
|
+
UPRN: string;
|
|
145
|
+
/**
|
|
146
|
+
* - Unique delivery point Reference Number
|
|
147
|
+
*/
|
|
148
|
+
UDPRN: string;
|
|
149
|
+
/**
|
|
150
|
+
* - Address
|
|
151
|
+
*/
|
|
152
|
+
ADDRESS: string;
|
|
153
|
+
/**
|
|
154
|
+
* - Organisation name
|
|
155
|
+
*/
|
|
156
|
+
ORGANISATION_NAME: string;
|
|
157
|
+
/**
|
|
158
|
+
* - Sub building name
|
|
159
|
+
*/
|
|
160
|
+
SUB_BUILDING_NAME: string;
|
|
161
|
+
/**
|
|
162
|
+
* - Building name
|
|
163
|
+
*/
|
|
164
|
+
BUILDING_NAME: string;
|
|
165
|
+
/**
|
|
166
|
+
* - Building number
|
|
167
|
+
*/
|
|
168
|
+
BUILDING_NUMBER: string;
|
|
169
|
+
/**
|
|
170
|
+
* - Throughfare name
|
|
171
|
+
*/
|
|
172
|
+
THOROUGHFARE_NAME: string;
|
|
173
|
+
/**
|
|
174
|
+
* - Dependent locality
|
|
175
|
+
*/
|
|
176
|
+
DEPENDENT_LOCALITY: string;
|
|
177
|
+
/**
|
|
178
|
+
* - Post town
|
|
179
|
+
*/
|
|
180
|
+
POST_TOWN: string;
|
|
181
|
+
/**
|
|
182
|
+
* - Postcode
|
|
183
|
+
*/
|
|
184
|
+
POSTCODE: string;
|
|
185
|
+
};
|
|
186
|
+
/**
|
|
187
|
+
* OS places DPA response
|
|
188
|
+
*/
|
|
189
|
+
export type DeliveryPointAddressItem = {
|
|
190
|
+
/**
|
|
191
|
+
* - Delivery point address
|
|
192
|
+
*/
|
|
193
|
+
DPA: DeliveryPointAddress;
|
|
194
|
+
};
|
|
195
|
+
/**
|
|
196
|
+
* OS places DPA response
|
|
197
|
+
*/
|
|
198
|
+
export type DeliveryPointAddressResult = {
|
|
199
|
+
/**
|
|
200
|
+
* - Delivery point address results
|
|
201
|
+
*/
|
|
202
|
+
results?: DeliveryPointAddressItem[] | undefined;
|
|
203
|
+
};
|
|
204
|
+
import type { Request } from '@hapi/hapi';
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @typedef {{
|
|
3
|
+
* ordnanceSurveyApiKey: string
|
|
4
|
+
* }} PostcodeLookupConfiguration
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @typedef {{
|
|
9
|
+
* name: string
|
|
10
|
+
* step?: string
|
|
11
|
+
* }} PostcodeLookupDispatchArgs
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @typedef {{
|
|
16
|
+
* sourceUrl: string,
|
|
17
|
+
* formName: string
|
|
18
|
+
* componentName: string
|
|
19
|
+
* componentTitle: string,
|
|
20
|
+
* componentHint?: string
|
|
21
|
+
* step?: string
|
|
22
|
+
* }} PostcodeLookupDispatchData
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* @typedef {{
|
|
27
|
+
* initial: PostcodeLookupDispatchData
|
|
28
|
+
* details: PostcodeLookupDetailsData
|
|
29
|
+
* }} PostcodeLookupSessionData
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
//
|
|
33
|
+
// Model types
|
|
34
|
+
//
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* The postcode lookup details form view model data
|
|
38
|
+
* @typedef {object} PostcodeLookupDetailsData
|
|
39
|
+
* @property {string} postcodeQuery - postcode query
|
|
40
|
+
* @property {string} buildingNameQuery - Building name or number query
|
|
41
|
+
*/
|
|
42
|
+
|
|
43
|
+
//
|
|
44
|
+
// Route types
|
|
45
|
+
//
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Postcode lookup query params
|
|
49
|
+
* @typedef {object} PostcodeLookupQuery
|
|
50
|
+
* @property {string} [step] - step
|
|
51
|
+
*/
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* @typedef {object} PostcodeLookupDetailsPayloadProperties
|
|
55
|
+
* @property {string} step - step
|
|
56
|
+
*/
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* @typedef {PostcodeLookupDetailsData & PostcodeLookupDetailsPayloadProperties} PostcodeLookupDetailsPayload
|
|
60
|
+
*/
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* @typedef {object} PostcodeLookupSelectPayload
|
|
64
|
+
* @property {string} step - step
|
|
65
|
+
* @property {string} uprn - postcode
|
|
66
|
+
*/
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Postcode lookup get request
|
|
70
|
+
* @typedef {object} PostcodeLookupGetRequestRefs
|
|
71
|
+
* @property {PostcodeLookupQuery} Query - Request query
|
|
72
|
+
*/
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Postcode lookup post request
|
|
76
|
+
* @typedef {object} PostcodeLookupPostRequestRefs
|
|
77
|
+
* @property {PostcodeLookupDetailsPayload | PostcodeLookupSelectPayload} Payload - Request payload
|
|
78
|
+
*/
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* @typedef {PostcodeLookupGetRequestRefs | PostcodeLookupPostRequestRefs} PostcodeLookupRequestRefs
|
|
82
|
+
* @typedef {Request<PostcodeLookupGetRequestRefs>} PostcodeLookupGetRequest
|
|
83
|
+
* @typedef {Request<PostcodeLookupPostRequestRefs>} PostcodeLookupPostRequest
|
|
84
|
+
* @typedef {PostcodeLookupGetRequest | PostcodeLookupPostRequest} PostcodeLookupRequest
|
|
85
|
+
*/
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* @typedef {object} PostcodeLookupManualPayload
|
|
89
|
+
* @property {string} addressLine1 - The address line 1
|
|
90
|
+
* @property {string} addressLine2 - The address line 2
|
|
91
|
+
* @property {string} town - The address town or city
|
|
92
|
+
* @property {string} county - The address county
|
|
93
|
+
* @property {string} postcode - The address postcode
|
|
94
|
+
*/
|
|
95
|
+
|
|
96
|
+
//
|
|
97
|
+
// Service types
|
|
98
|
+
//
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* @typedef {object} Address
|
|
102
|
+
* @property {string} uprn - The unique property reference
|
|
103
|
+
* @property {string} address - The full address
|
|
104
|
+
* @property {string} addressLine1 - Address line 1
|
|
105
|
+
* @property {string} addressLine2 - Address line 2
|
|
106
|
+
* @property {string} town - Address town
|
|
107
|
+
* @property {string} county - Address county
|
|
108
|
+
* @property {string} postcode - Address postcode
|
|
109
|
+
* @property {string} formatted - The full formatted address
|
|
110
|
+
*/
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* OS places address response
|
|
114
|
+
* @typedef {object} DeliveryPointAddress
|
|
115
|
+
* @property {string} UPRN - Unique property reference number
|
|
116
|
+
* @property {string} UDPRN - Unique delivery point Reference Number
|
|
117
|
+
* @property {string} ADDRESS - Address
|
|
118
|
+
* @property {string} ORGANISATION_NAME - Organisation name
|
|
119
|
+
* @property {string} SUB_BUILDING_NAME - Sub building name
|
|
120
|
+
* @property {string} BUILDING_NAME - Building name
|
|
121
|
+
* @property {string} BUILDING_NUMBER - Building number
|
|
122
|
+
* @property {string} THOROUGHFARE_NAME - Throughfare name
|
|
123
|
+
* @property {string} DEPENDENT_LOCALITY - Dependent locality
|
|
124
|
+
* @property {string} POST_TOWN - Post town
|
|
125
|
+
* @property {string} POSTCODE - Postcode
|
|
126
|
+
*/
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* OS places DPA response
|
|
130
|
+
* @typedef {object} DeliveryPointAddressItem
|
|
131
|
+
* @property {DeliveryPointAddress} DPA - Delivery point address
|
|
132
|
+
*/
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* OS places DPA response
|
|
136
|
+
* @typedef {object} DeliveryPointAddressResult
|
|
137
|
+
* @property {DeliveryPointAddressItem[]} [results] - Delivery point address results
|
|
138
|
+
*/
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* @import { Request } from '@hapi/hapi'
|
|
142
|
+
* @import { FormPayload } from '~/src/server/plugins/engine/types.js'
|
|
143
|
+
*/
|
|
144
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../../../src/server/plugins/postcode-lookup/types.js"],"sourcesContent":["/**\n * @typedef {{\n * ordnanceSurveyApiKey: string\n * }} PostcodeLookupConfiguration\n */\n\n/**\n * @typedef {{\n * name: string\n * step?: string\n * }} PostcodeLookupDispatchArgs\n */\n\n/**\n * @typedef {{\n * sourceUrl: string,\n * formName: string\n * componentName: string\n * componentTitle: string,\n * componentHint?: string\n * step?: string\n * }} PostcodeLookupDispatchData\n */\n\n/**\n * @typedef {{\n * initial: PostcodeLookupDispatchData\n * details: PostcodeLookupDetailsData\n * }} PostcodeLookupSessionData\n */\n\n//\n// Model types\n//\n\n/**\n * The postcode lookup details form view model data\n * @typedef {object} PostcodeLookupDetailsData\n * @property {string} postcodeQuery - postcode query\n * @property {string} buildingNameQuery - Building name or number query\n */\n\n//\n// Route types\n//\n\n/**\n * Postcode lookup query params\n * @typedef {object} PostcodeLookupQuery\n * @property {string} [step] - step\n */\n\n/**\n * @typedef {object} PostcodeLookupDetailsPayloadProperties\n * @property {string} step - step\n */\n\n/**\n * @typedef {PostcodeLookupDetailsData & PostcodeLookupDetailsPayloadProperties} PostcodeLookupDetailsPayload\n */\n\n/**\n * @typedef {object} PostcodeLookupSelectPayload\n * @property {string} step - step\n * @property {string} uprn - postcode\n */\n\n/**\n * Postcode lookup get request\n * @typedef {object} PostcodeLookupGetRequestRefs\n * @property {PostcodeLookupQuery} Query - Request query\n */\n\n/**\n * Postcode lookup post request\n * @typedef {object} PostcodeLookupPostRequestRefs\n * @property {PostcodeLookupDetailsPayload | PostcodeLookupSelectPayload} Payload - Request payload\n */\n\n/**\n * @typedef {PostcodeLookupGetRequestRefs | PostcodeLookupPostRequestRefs} PostcodeLookupRequestRefs\n * @typedef {Request<PostcodeLookupGetRequestRefs>} PostcodeLookupGetRequest\n * @typedef {Request<PostcodeLookupPostRequestRefs>} PostcodeLookupPostRequest\n * @typedef {PostcodeLookupGetRequest | PostcodeLookupPostRequest} PostcodeLookupRequest\n */\n\n/**\n * @typedef {object} PostcodeLookupManualPayload\n * @property {string} addressLine1 - The address line 1\n * @property {string} addressLine2 - The address line 2\n * @property {string} town - The address town or city\n * @property {string} county - The address county\n * @property {string} postcode - The address postcode\n */\n\n//\n// Service types\n//\n\n/**\n * @typedef {object} Address\n * @property {string} uprn - The unique property reference\n * @property {string} address - The full address\n * @property {string} addressLine1 - Address line 1\n * @property {string} addressLine2 - Address line 2\n * @property {string} town - Address town\n * @property {string} county - Address county\n * @property {string} postcode - Address postcode\n * @property {string} formatted - The full formatted address\n */\n\n/**\n * OS places address response\n * @typedef {object} DeliveryPointAddress\n * @property {string} UPRN - Unique property reference number\n * @property {string} UDPRN - Unique delivery point Reference Number\n * @property {string} ADDRESS - Address\n * @property {string} ORGANISATION_NAME - Organisation name\n * @property {string} SUB_BUILDING_NAME - Sub building name\n * @property {string} BUILDING_NAME - Building name\n * @property {string} BUILDING_NUMBER - Building number\n * @property {string} THOROUGHFARE_NAME - Throughfare name\n * @property {string} DEPENDENT_LOCALITY - Dependent locality\n * @property {string} POST_TOWN - Post town\n * @property {string} POSTCODE - Postcode\n */\n\n/**\n * OS places DPA response\n * @typedef {object} DeliveryPointAddressItem\n * @property {DeliveryPointAddress} DPA - Delivery point address\n */\n\n/**\n * OS places DPA response\n * @typedef {object} DeliveryPointAddressResult\n * @property {DeliveryPointAddressItem[]} [results] - Delivery point address results\n */\n\n/**\n * @import { Request } from '@hapi/hapi'\n * @import { FormPayload } from '~/src/server/plugins/engine/types.js'\n */\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA","ignoreList":[]}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
{% extends baseLayoutPath %}
|
|
2
|
+
|
|
3
|
+
{% from "govuk/components/error-summary/macro.njk" import govukErrorSummary %}
|
|
4
|
+
{% from "govuk/components/input/macro.njk" import govukInput %}
|
|
5
|
+
{% from "govuk/components/select/macro.njk" import govukSelect %}
|
|
6
|
+
{% from "govuk/components/button/macro.njk" import govukButton %}
|
|
7
|
+
{% from "govuk/components/inset-text/macro.njk" import govukInsetText %}
|
|
8
|
+
{% from "govuk/components/hint/macro.njk" import govukHint %}
|
|
9
|
+
{% from "govuk/components/fieldset/macro.njk" import govukFieldset %}
|
|
10
|
+
|
|
11
|
+
{% block content %}
|
|
12
|
+
<div class="govuk-grid-row">
|
|
13
|
+
<div class="govuk-grid-column-two-thirds">
|
|
14
|
+
{% if errors %}
|
|
15
|
+
{{ govukErrorSummary({
|
|
16
|
+
titleText: "There is a problem",
|
|
17
|
+
errorList: errors
|
|
18
|
+
}) }}
|
|
19
|
+
{% endif %}
|
|
20
|
+
|
|
21
|
+
{% include "partials/heading.html" %}
|
|
22
|
+
|
|
23
|
+
<form method="post">
|
|
24
|
+
<input type="hidden" name="crumb" value="{{ crumb }}">
|
|
25
|
+
<input type="hidden" name="step" value="{{ step }}">
|
|
26
|
+
|
|
27
|
+
{% switch step %}
|
|
28
|
+
{% case "details" %}
|
|
29
|
+
<!-- Postcode lookup details -->
|
|
30
|
+
{{ govukInput(fields.postcodeQuery) }}
|
|
31
|
+
{{ govukInput(fields.buildingNameQuery) }}
|
|
32
|
+
{% case "select" %}
|
|
33
|
+
<!-- Postcode lookup select -->
|
|
34
|
+
<!-- Postcode lookup details display -->
|
|
35
|
+
{%- set detailsHtml -%}
|
|
36
|
+
<strong>{{ details.postcodeQuery }}</strong>{% if details.buildingNameQuery %} and <strong>{{ details.buildingNameQuery }}</strong>{% endif %}
|
|
37
|
+
{%- endset -%}
|
|
38
|
+
|
|
39
|
+
{% if hasAddresses %}
|
|
40
|
+
<p class="govuk-body">
|
|
41
|
+
{{addressCount}} address{{ "es" if hasMultipleAddresses }} found for {{ detailsHtml | safe }}. <a href="{{ searchAgainLink.href }}" class="govuk-link govuk-link--no-visited-state">{{ searchAgainLink.text }}</a>
|
|
42
|
+
</p>
|
|
43
|
+
{% endif %}
|
|
44
|
+
|
|
45
|
+
{% if hasMultipleAddresses %}
|
|
46
|
+
<!-- Multiple address found - show drop down select -->
|
|
47
|
+
{{ govukSelect(fields.uprn) }}
|
|
48
|
+
{% elif singleAddress %}
|
|
49
|
+
<!-- Single address found - show single item -->
|
|
50
|
+
{{ govukInput(fields.uprn) }}
|
|
51
|
+
{{ govukInsetText({
|
|
52
|
+
text: singleAddress.formatted
|
|
53
|
+
}) }}
|
|
54
|
+
{% else %}
|
|
55
|
+
<!-- No addresses found - show try again -->
|
|
56
|
+
<p class="govuk-body">We could not find an address that matches {{ detailsHtml | safe }}.</p>
|
|
57
|
+
{% endif %}
|
|
58
|
+
{% case "manual" %}
|
|
59
|
+
<!-- Postcode lookup manual entry -->
|
|
60
|
+
{% if hint %}
|
|
61
|
+
{{ govukHint(hint) }}
|
|
62
|
+
{% endif %}
|
|
63
|
+
|
|
64
|
+
{{ govukInput(fields.addressLine1) }}
|
|
65
|
+
{{ govukInput(fields.addressLine2) }}
|
|
66
|
+
{{ govukInput(fields.town) }}
|
|
67
|
+
{{ govukInput(fields.county) }}
|
|
68
|
+
{{ govukInput(fields.postcode) }}
|
|
69
|
+
{% endswitch %}
|
|
70
|
+
|
|
71
|
+
<div class="govuk-button-group">
|
|
72
|
+
{{ govukButton(buttons.continueButton) }}
|
|
73
|
+
|
|
74
|
+
{% if buttons.manualLink %}
|
|
75
|
+
<p class="govuk-body">or <a class="govuk-link govuk-link--no-visited-state" href="{{ buttons.manualLink.href }}">{{buttons.manualLink.text}}</a></p>
|
|
76
|
+
{% elif buttons.detailsLink %}
|
|
77
|
+
<p class="govuk-body">or <a class="govuk-link govuk-link--no-visited-state" href="{{ buttons.detailsLink.href }}">{{buttons.detailsLink.text}}</a></p>
|
|
78
|
+
{% endif %}
|
|
79
|
+
</div>
|
|
80
|
+
</form>
|
|
81
|
+
</div>
|
|
82
|
+
</div>
|
|
83
|
+
{% endblock %}
|
|
@@ -32,9 +32,14 @@ export declare enum FormAction {
|
|
|
32
32
|
Delete = "delete",
|
|
33
33
|
AddAnother = "add-another",
|
|
34
34
|
Send = "send",
|
|
35
|
-
SaveAndExit = "save-and-exit"
|
|
35
|
+
SaveAndExit = "save-and-exit",
|
|
36
|
+
External = "external"
|
|
36
37
|
}
|
|
37
38
|
export declare enum FormStatus {
|
|
38
39
|
Draft = "draft",
|
|
39
40
|
Live = "live"
|
|
40
41
|
}
|
|
42
|
+
export declare enum ExternalActions {
|
|
43
|
+
PostcodeLookup = "postcode-lookup",
|
|
44
|
+
AnotherExternalAction = "another-external-action"
|
|
45
|
+
}
|
|
@@ -5,6 +5,7 @@ export let FormAction = /*#__PURE__*/function (FormAction) {
|
|
|
5
5
|
FormAction["AddAnother"] = "add-another";
|
|
6
6
|
FormAction["Send"] = "send";
|
|
7
7
|
FormAction["SaveAndExit"] = "save-and-exit";
|
|
8
|
+
FormAction["External"] = "external";
|
|
8
9
|
return FormAction;
|
|
9
10
|
}({});
|
|
10
11
|
export let FormStatus = /*#__PURE__*/function (FormStatus) {
|
|
@@ -12,4 +13,9 @@ export let FormStatus = /*#__PURE__*/function (FormStatus) {
|
|
|
12
13
|
FormStatus["Live"] = "live";
|
|
13
14
|
return FormStatus;
|
|
14
15
|
}({});
|
|
16
|
+
export let ExternalActions = /*#__PURE__*/function (ExternalActions) {
|
|
17
|
+
ExternalActions["PostcodeLookup"] = "postcode-lookup";
|
|
18
|
+
ExternalActions["AnotherExternalAction"] = "another-external-action";
|
|
19
|
+
return ExternalActions;
|
|
20
|
+
}({});
|
|
15
21
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":["FormAction","FormStatus"],"sources":["../../../src/server/routes/types.ts"],"sourcesContent":["import {\n type ReqRefDefaults,\n type Request,\n type ResponseToolkit\n} from '@hapi/hapi'\n\nimport { type FormPayload } from '~/src/server/plugins/engine/types.js'\n\nexport interface FormQuery extends Partial<Record<string, string>> {\n /**\n * Allow preview URL direct access without relevant page checks\n */\n force?: string\n\n /**\n * Redirect location after 'continue' form action\n */\n returnUrl?: string\n}\n\nexport interface FormParams extends Partial<Record<string, string>> {\n path: string\n slug: string\n state?: FormStatus\n}\n\nexport interface FormRequestRefs\n extends Omit<ReqRefDefaults, 'Params' | 'Payload' | 'Query'> {\n Params: FormParams\n Payload: object | undefined\n Query: FormQuery\n}\n\nexport interface FormRequestPayloadRefs extends FormRequestRefs {\n Payload: FormPayload\n}\n\nexport type FormRequest = Request<FormRequestRefs>\nexport type FormRequestPayload = Request<FormRequestPayloadRefs>\nexport type FormResponseToolkit = Pick<\n ResponseToolkit,\n 'redirect' | 'view' | 'continue'\n>\n\nexport enum FormAction {\n Continue = 'continue',\n Validate = 'validate',\n Delete = 'delete',\n AddAnother = 'add-another',\n Send = 'send',\n SaveAndExit = 'save-and-exit'\n}\n\nexport enum FormStatus {\n Draft = 'draft',\n Live = 'live'\n}\n"],"mappings":"AA4CA,WAAYA,UAAU,0BAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAA,OAAVA,UAAU;AAAA;
|
|
1
|
+
{"version":3,"file":"types.js","names":["FormAction","FormStatus","ExternalActions"],"sources":["../../../src/server/routes/types.ts"],"sourcesContent":["import {\n type ReqRefDefaults,\n type Request,\n type ResponseToolkit\n} from '@hapi/hapi'\n\nimport { type FormPayload } from '~/src/server/plugins/engine/types.js'\n\nexport interface FormQuery extends Partial<Record<string, string>> {\n /**\n * Allow preview URL direct access without relevant page checks\n */\n force?: string\n\n /**\n * Redirect location after 'continue' form action\n */\n returnUrl?: string\n}\n\nexport interface FormParams extends Partial<Record<string, string>> {\n path: string\n slug: string\n state?: FormStatus\n}\n\nexport interface FormRequestRefs\n extends Omit<ReqRefDefaults, 'Params' | 'Payload' | 'Query'> {\n Params: FormParams\n Payload: object | undefined\n Query: FormQuery\n}\n\nexport interface FormRequestPayloadRefs extends FormRequestRefs {\n Payload: FormPayload\n}\n\nexport type FormRequest = Request<FormRequestRefs>\nexport type FormRequestPayload = Request<FormRequestPayloadRefs>\nexport type FormResponseToolkit = Pick<\n ResponseToolkit,\n 'redirect' | 'view' | 'continue'\n>\n\nexport enum FormAction {\n Continue = 'continue',\n Validate = 'validate',\n Delete = 'delete',\n AddAnother = 'add-another',\n Send = 'send',\n SaveAndExit = 'save-and-exit',\n External = 'external'\n}\n\nexport enum FormStatus {\n Draft = 'draft',\n Live = 'live'\n}\n\nexport enum ExternalActions {\n PostcodeLookup = 'postcode-lookup',\n AnotherExternalAction = 'another-external-action'\n}\n"],"mappings":"AA4CA,WAAYA,UAAU,0BAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAA,OAAVA,UAAU;AAAA;AAUtB,WAAYC,UAAU,0BAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAA,OAAVA,UAAU;AAAA;AAKtB,WAAYC,eAAe,0BAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAA,OAAfA,eAAe;AAAA","ignoreList":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import Joi from 'joi';
|
|
2
2
|
import { FormAction, FormStatus } from "../routes/types.js";
|
|
3
3
|
export const stateSchema = Joi.string().valid(FormStatus.Draft, FormStatus.Live).required();
|
|
4
|
-
export const actionSchema = Joi.string().
|
|
4
|
+
export const actionSchema = Joi.string().pattern(new RegExp(`^${FormAction.External}-[a-zA-Z-:]*$`)).allow(...Object.values(FormAction).filter(value => value !== FormAction.External)).default(FormAction.Validate).optional();
|
|
5
5
|
export const pathSchema = Joi.string().required();
|
|
6
6
|
export const itemIdSchema = Joi.string().uuid().required();
|
|
7
7
|
export const crumbSchema = Joi.string().optional().allow('');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["Joi","FormAction","FormStatus","stateSchema","string","valid","Draft","Live","required","actionSchema","
|
|
1
|
+
{"version":3,"file":"index.js","names":["Joi","FormAction","FormStatus","stateSchema","string","valid","Draft","Live","required","actionSchema","pattern","RegExp","External","allow","Object","values","filter","value","default","Validate","optional","pathSchema","itemIdSchema","uuid","crumbSchema","confirmSchema","boolean","empty","paramsSchema","object","keys","action","confirm","crumb","itemId"],"sources":["../../../src/server/schemas/index.ts"],"sourcesContent":["import Joi from 'joi'\n\nimport { type FormPayloadParams } from '~/src/server/plugins/engine/types.js'\nimport { FormAction, FormStatus } from '~/src/server/routes/types.js'\n\nexport const stateSchema = Joi.string<FormStatus>()\n .valid(FormStatus.Draft, FormStatus.Live)\n .required()\n\nexport const actionSchema = Joi.string<FormAction>()\n .pattern(new RegExp(`^${FormAction.External}-[a-zA-Z-:]*$`))\n .allow(\n ...Object.values(FormAction).filter(\n (value) => value !== FormAction.External\n )\n )\n .default(FormAction.Validate)\n .optional()\n\nexport const pathSchema = Joi.string().required()\nexport const itemIdSchema = Joi.string().uuid().required()\nexport const crumbSchema = Joi.string().optional().allow('')\nexport const confirmSchema = Joi.boolean().empty(false)\n\nexport const paramsSchema = Joi.object<FormPayloadParams>()\n .keys({\n action: actionSchema,\n confirm: confirmSchema,\n crumb: crumbSchema,\n itemId: itemIdSchema.optional()\n })\n .default({})\n .optional()\n"],"mappings":"AAAA,OAAOA,GAAG,MAAM,KAAK;AAGrB,SAASC,UAAU,EAAEC,UAAU;AAE/B,OAAO,MAAMC,WAAW,GAAGH,GAAG,CAACI,MAAM,CAAa,CAAC,CAChDC,KAAK,CAACH,UAAU,CAACI,KAAK,EAAEJ,UAAU,CAACK,IAAI,CAAC,CACxCC,QAAQ,CAAC,CAAC;AAEb,OAAO,MAAMC,YAAY,GAAGT,GAAG,CAACI,MAAM,CAAa,CAAC,CACjDM,OAAO,CAAC,IAAIC,MAAM,CAAC,IAAIV,UAAU,CAACW,QAAQ,eAAe,CAAC,CAAC,CAC3DC,KAAK,CACJ,GAAGC,MAAM,CAACC,MAAM,CAACd,UAAU,CAAC,CAACe,MAAM,CAChCC,KAAK,IAAKA,KAAK,KAAKhB,UAAU,CAACW,QAClC,CACF,CAAC,CACAM,OAAO,CAACjB,UAAU,CAACkB,QAAQ,CAAC,CAC5BC,QAAQ,CAAC,CAAC;AAEb,OAAO,MAAMC,UAAU,GAAGrB,GAAG,CAACI,MAAM,CAAC,CAAC,CAACI,QAAQ,CAAC,CAAC;AACjD,OAAO,MAAMc,YAAY,GAAGtB,GAAG,CAACI,MAAM,CAAC,CAAC,CAACmB,IAAI,CAAC,CAAC,CAACf,QAAQ,CAAC,CAAC;AAC1D,OAAO,MAAMgB,WAAW,GAAGxB,GAAG,CAACI,MAAM,CAAC,CAAC,CAACgB,QAAQ,CAAC,CAAC,CAACP,KAAK,CAAC,EAAE,CAAC;AAC5D,OAAO,MAAMY,aAAa,GAAGzB,GAAG,CAAC0B,OAAO,CAAC,CAAC,CAACC,KAAK,CAAC,KAAK,CAAC;AAEvD,OAAO,MAAMC,YAAY,GAAG5B,GAAG,CAAC6B,MAAM,CAAoB,CAAC,CACxDC,IAAI,CAAC;EACJC,MAAM,EAAEtB,YAAY;EACpBuB,OAAO,EAAEP,aAAa;EACtBQ,KAAK,EAAET,WAAW;EAClBU,MAAM,EAAEZ,YAAY,CAACF,QAAQ,CAAC;AAChC,CAAC,CAAC,CACDF,OAAO,CAAC,CAAC,CAAC,CAAC,CACXE,QAAQ,CAAC,CAAC","ignoreList":[]}
|
|
@@ -32,6 +32,7 @@ export interface RouteConfig {
|
|
|
32
32
|
onRequest?: OnRequestCallback;
|
|
33
33
|
saveAndExit?: PluginOptions['saveAndExit'];
|
|
34
34
|
cacheServiceCreator?: (server: Server) => CacheService;
|
|
35
|
+
ordnanceSurveyApiKey?: string;
|
|
35
36
|
}
|
|
36
37
|
export interface OutputService {
|
|
37
38
|
submit: (context: FormContext, request: FormRequestPayload, model: FormModel, emailAddress: string, items: DetailItem[], submitResponse: SubmitResponsePayload, formMetadata?: FormMetadata) => Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../src/server/types.ts"],"sourcesContent":["import {\n type FormDefinition,\n type FormMetadata,\n type SubmitPayload,\n type SubmitResponsePayload\n} from '@defra/forms-model'\nimport { type Server } from '@hapi/hapi'\n\nimport { type FormModel } from '~/src/server/plugins/engine/models/index.js'\nimport { type DetailItem } from '~/src/server/plugins/engine/models/types.js'\nimport { type PageController } from '~/src/server/plugins/engine/pageControllers/PageController.js'\nimport {\n type FormContext,\n type OnRequestCallback,\n type PluginOptions,\n type PreparePageEventRequestOptions\n} from '~/src/server/plugins/engine/types.js'\nimport {\n type FormRequestPayload,\n type FormStatus\n} from '~/src/server/routes/types.js'\nimport { type CacheService } from '~/src/server/services/cacheService.js'\n\nexport interface FormsService {\n getFormMetadata: (slug: string) => Promise<FormMetadata>\n getFormDefinition: (\n id: string,\n state: FormStatus\n ) => Promise<FormDefinition | undefined>\n}\n\nexport interface FormSubmissionService {\n persistFiles: (\n files: { fileId: string; initiatedRetrievalKey: string }[],\n persistedRetrievalKey: string\n ) => Promise<object>\n submit: (data: SubmitPayload) => Promise<SubmitResponsePayload | undefined>\n}\n\nexport interface Services {\n formsService: FormsService\n formSubmissionService: FormSubmissionService\n outputService: OutputService\n}\n\nexport interface RouteConfig {\n formFileName?: string\n formFilePath?: string\n enforceCsrf?: boolean\n services?: Services\n controllers?: Record<string, typeof PageController>\n preparePageEventRequestOptions?: PreparePageEventRequestOptions\n onRequest?: OnRequestCallback\n saveAndExit?: PluginOptions['saveAndExit']\n cacheServiceCreator?: (server: Server) => CacheService\n}\n\nexport interface OutputService {\n submit: (\n context: FormContext,\n request: FormRequestPayload,\n model: FormModel,\n emailAddress: string,\n items: DetailItem[],\n submitResponse: SubmitResponsePayload,\n formMetadata?: FormMetadata\n ) => Promise<void>\n}\n"],"mappings":"","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../src/server/types.ts"],"sourcesContent":["import {\n type FormDefinition,\n type FormMetadata,\n type SubmitPayload,\n type SubmitResponsePayload\n} from '@defra/forms-model'\nimport { type Server } from '@hapi/hapi'\n\nimport { type FormModel } from '~/src/server/plugins/engine/models/index.js'\nimport { type DetailItem } from '~/src/server/plugins/engine/models/types.js'\nimport { type PageController } from '~/src/server/plugins/engine/pageControllers/PageController.js'\nimport {\n type FormContext,\n type OnRequestCallback,\n type PluginOptions,\n type PreparePageEventRequestOptions\n} from '~/src/server/plugins/engine/types.js'\nimport {\n type FormRequestPayload,\n type FormStatus\n} from '~/src/server/routes/types.js'\nimport { type CacheService } from '~/src/server/services/cacheService.js'\n\nexport interface FormsService {\n getFormMetadata: (slug: string) => Promise<FormMetadata>\n getFormDefinition: (\n id: string,\n state: FormStatus\n ) => Promise<FormDefinition | undefined>\n}\n\nexport interface FormSubmissionService {\n persistFiles: (\n files: { fileId: string; initiatedRetrievalKey: string }[],\n persistedRetrievalKey: string\n ) => Promise<object>\n submit: (data: SubmitPayload) => Promise<SubmitResponsePayload | undefined>\n}\n\nexport interface Services {\n formsService: FormsService\n formSubmissionService: FormSubmissionService\n outputService: OutputService\n}\n\nexport interface RouteConfig {\n formFileName?: string\n formFilePath?: string\n enforceCsrf?: boolean\n services?: Services\n controllers?: Record<string, typeof PageController>\n preparePageEventRequestOptions?: PreparePageEventRequestOptions\n onRequest?: OnRequestCallback\n saveAndExit?: PluginOptions['saveAndExit']\n cacheServiceCreator?: (server: Server) => CacheService\n ordnanceSurveyApiKey?: string\n}\n\nexport interface OutputService {\n submit: (\n context: FormContext,\n request: FormRequestPayload,\n model: FormModel,\n emailAddress: string,\n items: DetailItem[],\n submitResponse: SubmitResponsePayload,\n formMetadata?: FormMetadata\n ) => Promise<void>\n}\n"],"mappings":"","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@defra/forms-engine-plugin",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.2",
|
|
4
4
|
"description": "Defra forms engine",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
},
|
|
71
71
|
"license": "SEE LICENSE IN LICENSE",
|
|
72
72
|
"dependencies": {
|
|
73
|
-
"@defra/forms-model": "^3.0.
|
|
73
|
+
"@defra/forms-model": "^3.0.560",
|
|
74
74
|
"@defra/hapi-tracing": "^1.26.0",
|
|
75
75
|
"@elastic/ecs-pino-format": "^1.5.0",
|
|
76
76
|
"@hapi/boom": "^10.0.1",
|
|
@@ -9,3 +9,18 @@
|
|
|
9
9
|
.autocomplete__option {
|
|
10
10
|
@include govuk-typography-common;
|
|
11
11
|
}
|
|
12
|
+
|
|
13
|
+
.app-hidden {
|
|
14
|
+
display: none;
|
|
15
|
+
visibility: hidden;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// Used in postcode lookup
|
|
19
|
+
.govuk-button--link {
|
|
20
|
+
@extend %govuk-link;
|
|
21
|
+
color: $govuk-link-colour;
|
|
22
|
+
border: none;
|
|
23
|
+
cursor: pointer;
|
|
24
|
+
background-color: transparent;
|
|
25
|
+
@include govuk-font($size: 19);
|
|
26
|
+
}
|
package/src/config/index.ts
CHANGED
|
@@ -252,7 +252,15 @@ export const config = convict({
|
|
|
252
252
|
format: String,
|
|
253
253
|
default: '',
|
|
254
254
|
env: 'SUBMISSION_EMAIL_ADDRESS'
|
|
255
|
-
} as SchemaObj<string
|
|
255
|
+
} as SchemaObj<string>,
|
|
256
|
+
|
|
257
|
+
ordnanceSurveyApiKey: {
|
|
258
|
+
doc: 'The ordnance survey api key use by the postcode lookup plugin',
|
|
259
|
+
format: String,
|
|
260
|
+
nullable: true,
|
|
261
|
+
default: undefined,
|
|
262
|
+
env: 'ORDNANCE_SURVEY_API_KEY'
|
|
263
|
+
} as SchemaObj<string | undefined>
|
|
256
264
|
})
|
|
257
265
|
|
|
258
266
|
config.validate({ allowed: 'strict' })
|
package/src/index.ts
CHANGED
|
@@ -13,19 +13,20 @@ process.on('unhandledRejection', (error) => {
|
|
|
13
13
|
throw error
|
|
14
14
|
})
|
|
15
15
|
|
|
16
|
+
const port = config.get('port')
|
|
17
|
+
const ordnanceSurveyApiKey = config.get('ordnanceSurveyApiKey')
|
|
18
|
+
|
|
16
19
|
/**
|
|
17
20
|
* Main entrypoint to the application.
|
|
18
21
|
*/
|
|
19
22
|
async function startServer() {
|
|
20
|
-
const server = await createServer()
|
|
23
|
+
const server = await createServer({ ordnanceSurveyApiKey })
|
|
21
24
|
await server.start()
|
|
22
25
|
|
|
23
26
|
process.send?.('online')
|
|
24
27
|
|
|
25
28
|
server.logger.info('Server started successfully')
|
|
26
|
-
server.logger.info(
|
|
27
|
-
`Access your frontend on http://localhost:${config.get('port')}`
|
|
28
|
-
)
|
|
29
|
+
server.logger.info(`Access your frontend on http://localhost:${port}`)
|
|
29
30
|
}
|
|
30
31
|
|
|
31
32
|
startServer().catch((error: unknown) => {
|
package/src/server/constants.js
CHANGED
|
@@ -120,6 +120,13 @@
|
|
|
120
120
|
"content": "### This is a H3 in markdown\n\n[An internal link](http://localhost:3009/fictional-page)\n\n[An external link](https://defra.gov.uk/fictional-page)",
|
|
121
121
|
"options": {},
|
|
122
122
|
"schema": {}
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"title": "Summary",
|
|
126
|
+
"path": "/summary",
|
|
127
|
+
"controller": "SummaryPageController",
|
|
128
|
+
"components": [],
|
|
129
|
+
"next": []
|
|
123
130
|
}
|
|
124
131
|
]
|
|
125
132
|
}
|