@defra/forms-engine-plugin 4.0.6 → 4.0.8
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 +1 -1
- package/.public/stylesheets/application.min.css.map +1 -1
- package/.server/client/stylesheets/_location-input.scss +60 -0
- package/.server/client/stylesheets/application.scss +1 -0
- package/.server/client/stylesheets/shared.scss +1 -0
- package/.server/server/forms/components.json +7 -0
- package/.server/server/forms/register-as-a-unicorn-breeder.yaml +40 -1
- package/.server/server/plugins/engine/components/ComponentBase.d.ts +2 -2
- package/.server/server/plugins/engine/components/ComponentBase.js.map +1 -1
- package/.server/server/plugins/engine/components/ComponentCollection.js.map +1 -1
- package/.server/server/plugins/engine/components/DeclarationField.d.ts +81 -0
- package/.server/server/plugins/engine/components/DeclarationField.js +123 -0
- package/.server/server/plugins/engine/components/DeclarationField.js.map +1 -0
- package/.server/server/plugins/engine/components/EastingNorthingField.d.ts +121 -0
- package/.server/server/plugins/engine/components/EastingNorthingField.js +166 -0
- package/.server/server/plugins/engine/components/EastingNorthingField.js.map +1 -0
- package/.server/server/plugins/engine/components/LatLongField.d.ts +121 -0
- package/.server/server/plugins/engine/components/LatLongField.js +164 -0
- package/.server/server/plugins/engine/components/LatLongField.js.map +1 -0
- package/.server/server/plugins/engine/components/LocationFieldBase.d.ts +134 -0
- package/.server/server/plugins/engine/components/LocationFieldBase.js +85 -0
- package/.server/server/plugins/engine/components/LocationFieldBase.js.map +1 -0
- package/.server/server/plugins/engine/components/LocationFieldHelpers.d.ts +108 -0
- package/.server/server/plugins/engine/components/LocationFieldHelpers.js +96 -0
- package/.server/server/plugins/engine/components/LocationFieldHelpers.js.map +1 -0
- package/.server/server/plugins/engine/components/NationalGridFieldNumberField.d.ts +19 -0
- package/.server/server/plugins/engine/components/NationalGridFieldNumberField.js +40 -0
- package/.server/server/plugins/engine/components/NationalGridFieldNumberField.js.map +1 -0
- package/.server/server/plugins/engine/components/OsGridRefField.d.ts +19 -0
- package/.server/server/plugins/engine/components/OsGridRefField.js +56 -0
- package/.server/server/plugins/engine/components/OsGridRefField.js.map +1 -0
- package/.server/server/plugins/engine/components/helpers/components.d.ts +3 -4
- package/.server/server/plugins/engine/components/helpers/components.js +24 -29
- package/.server/server/plugins/engine/components/helpers/components.js.map +1 -1
- package/.server/server/plugins/engine/components/index.d.ts +5 -0
- package/.server/server/plugins/engine/components/index.js +5 -0
- package/.server/server/plugins/engine/components/index.js.map +1 -1
- package/.server/server/plugins/engine/components/markdownParser.d.ts +2 -0
- package/.server/server/plugins/engine/components/markdownParser.js +28 -0
- package/.server/server/plugins/engine/components/markdownParser.js.map +1 -0
- package/.server/server/plugins/engine/components/types.d.ts +10 -0
- package/.server/server/plugins/engine/components/types.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/helpers/pages.js +7 -0
- package/.server/server/plugins/engine/pageControllers/helpers/pages.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/validationOptions.js +1 -0
- package/.server/server/plugins/engine/pageControllers/validationOptions.js.map +1 -1
- package/.server/server/plugins/engine/types/index.d.ts +1 -1
- package/.server/server/plugins/engine/types/index.js.map +1 -1
- package/.server/server/plugins/engine/types.d.ts +2 -2
- package/.server/server/plugins/engine/types.js.map +1 -1
- package/.server/server/plugins/engine/views/components/_location-field-base.html +53 -0
- package/.server/server/plugins/engine/views/components/declarationfield.html +14 -0
- package/.server/server/plugins/engine/views/components/eastingnorthingfield.html +5 -0
- package/.server/server/plugins/engine/views/components/latlongfield.html +5 -0
- package/.server/server/plugins/engine/views/components/nationalgridfieldnumberfield.html +13 -0
- package/.server/server/plugins/engine/views/components/osgridreffield.html +13 -0
- package/.server/server/plugins/nunjucks/filters/field.d.ts +1 -1
- package/.server/server/plugins/nunjucks/filters/index.d.ts +1 -0
- package/.server/server/plugins/nunjucks/filters/index.js +1 -0
- package/.server/server/plugins/nunjucks/filters/index.js.map +1 -1
- package/.server/server/plugins/nunjucks/filters/merge.d.ts +7 -0
- package/.server/server/plugins/nunjucks/filters/merge.js +16 -0
- package/.server/server/plugins/nunjucks/filters/merge.js.map +1 -0
- package/.server/server/plugins/nunjucks/filters/merge.test.js +19 -0
- package/.server/server/plugins/nunjucks/filters/merge.test.js.map +1 -0
- package/package.json +3 -3
- package/src/client/stylesheets/_location-input.scss +60 -0
- package/src/client/stylesheets/application.scss +1 -0
- package/src/client/stylesheets/shared.scss +1 -0
- package/src/server/forms/components.json +7 -0
- package/src/server/forms/page-events.yaml +1 -1
- package/src/server/forms/register-as-a-unicorn-breeder.yaml +40 -1
- package/src/server/index.test.ts +1 -0
- package/src/server/plugins/engine/components/ComponentBase.ts +2 -1
- package/src/server/plugins/engine/components/ComponentCollection.ts +1 -0
- package/src/server/plugins/engine/components/DeclarationField.test.ts +426 -0
- package/src/server/plugins/engine/components/DeclarationField.ts +167 -0
- package/src/server/plugins/engine/components/EastingNorthingField.test.ts +665 -0
- package/src/server/plugins/engine/components/EastingNorthingField.ts +224 -0
- package/src/server/plugins/engine/components/LatLongField.test.ts +700 -0
- package/src/server/plugins/engine/components/LatLongField.ts +213 -0
- package/src/server/plugins/engine/components/LocationFieldBase.test.ts +253 -0
- package/src/server/plugins/engine/components/LocationFieldBase.ts +152 -0
- package/src/server/plugins/engine/components/LocationFieldHelpers.test.ts +338 -0
- package/src/server/plugins/engine/components/LocationFieldHelpers.ts +123 -0
- package/src/server/plugins/engine/components/NationalGridFieldNumberField.test.ts +438 -0
- package/src/server/plugins/engine/components/NationalGridFieldNumberField.ts +52 -0
- package/src/server/plugins/engine/components/OsGridRefField.test.ts +469 -0
- package/src/server/plugins/engine/components/OsGridRefField.ts +71 -0
- package/src/server/plugins/engine/components/helpers/components.test.ts +270 -0
- package/src/server/plugins/engine/components/helpers/components.ts +44 -47
- package/src/server/plugins/engine/components/helpers/helpers.test.ts +71 -1
- package/src/server/plugins/engine/components/index.ts +5 -0
- package/src/server/plugins/engine/components/markdownParser.ts +40 -0
- package/src/server/plugins/engine/components/types.ts +14 -0
- package/src/server/plugins/engine/models/SummaryViewModel.test.ts +76 -3
- package/src/server/plugins/engine/models/SummaryViewModel.ts +5 -1
- package/src/server/plugins/engine/outputFormatters/adapter/v1.location.test.ts +356 -0
- package/src/server/plugins/engine/pageControllers/helpers/helpers.test.ts +4 -0
- package/src/server/plugins/engine/pageControllers/helpers/pages.ts +8 -0
- package/src/server/plugins/engine/pageControllers/validationOptions.ts +4 -0
- package/src/server/plugins/engine/types/index.ts +2 -0
- package/src/server/plugins/engine/types.ts +4 -0
- package/src/server/plugins/engine/views/components/_location-field-base.html +53 -0
- package/src/server/plugins/engine/views/components/declarationfield.html +14 -0
- package/src/server/plugins/engine/views/components/eastingnorthingfield.html +5 -0
- package/src/server/plugins/engine/views/components/latlongfield.html +5 -0
- package/src/server/plugins/engine/views/components/nationalgridfieldnumberfield.html +13 -0
- package/src/server/plugins/engine/views/components/osgridreffield.html +13 -0
- package/src/server/plugins/nunjucks/filters/index.js +1 -0
- package/src/server/plugins/nunjucks/filters/merge.js +16 -0
- package/src/server/plugins/nunjucks/filters/merge.test.js +15 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Nunjucks filter to get the page for a given path
|
|
3
|
+
* @param {Record<string, any>} targetDictionary - Object to extend
|
|
4
|
+
* @param {Record<string, any> | string} sourceDictionary - Object to merge into target
|
|
5
|
+
* @returns {Record<string, any>}
|
|
6
|
+
*/
|
|
7
|
+
export function merge(targetDictionary: Record<string, any>, sourceDictionary: Record<string, any> | string): Record<string, any>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Nunjucks filter to get the page for a given path
|
|
3
|
+
* @param {Record<string, any>} targetDictionary - Object to extend
|
|
4
|
+
* @param {Record<string, any> | string} sourceDictionary - Object to merge into target
|
|
5
|
+
* @returns {Record<string, any>}
|
|
6
|
+
*/
|
|
7
|
+
export function merge(targetDictionary, sourceDictionary) {
|
|
8
|
+
if (typeof sourceDictionary !== 'object') {
|
|
9
|
+
return targetDictionary;
|
|
10
|
+
}
|
|
11
|
+
return {
|
|
12
|
+
...targetDictionary,
|
|
13
|
+
...sourceDictionary
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=merge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.js","names":["merge","targetDictionary","sourceDictionary"],"sources":["../../../../../src/server/plugins/nunjucks/filters/merge.js"],"sourcesContent":["/**\n * Nunjucks filter to get the page for a given path\n * @param {Record<string, any>} targetDictionary - Object to extend\n * @param {Record<string, any> | string} sourceDictionary - Object to merge into target\n * @returns {Record<string, any>}\n */\nexport function merge(targetDictionary, sourceDictionary) {\n if (typeof sourceDictionary !== 'object') {\n return targetDictionary\n }\n\n return {\n ...targetDictionary,\n ...sourceDictionary\n }\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,KAAKA,CAACC,gBAAgB,EAAEC,gBAAgB,EAAE;EACxD,IAAI,OAAOA,gBAAgB,KAAK,QAAQ,EAAE;IACxC,OAAOD,gBAAgB;EACzB;EAEA,OAAO;IACL,GAAGA,gBAAgB;IACnB,GAAGC;EACL,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { merge } from "./merge.js";
|
|
2
|
+
describe('merge', () => {
|
|
3
|
+
const propertyToMerge = {
|
|
4
|
+
lorem: 'ipsum'
|
|
5
|
+
};
|
|
6
|
+
it('should return the target if source is not an object', () => {
|
|
7
|
+
expect(merge(propertyToMerge, 'dolar')).toBe(propertyToMerge);
|
|
8
|
+
});
|
|
9
|
+
it('should merge the properties if they are valid', () => {
|
|
10
|
+
expect(merge({
|
|
11
|
+
lorem: 'dolar',
|
|
12
|
+
dolar: 'sit'
|
|
13
|
+
}, propertyToMerge)).toEqual({
|
|
14
|
+
lorem: 'ipsum',
|
|
15
|
+
dolar: 'sit'
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
//# sourceMappingURL=merge.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.test.js","names":["merge","describe","propertyToMerge","lorem","it","expect","toBe","dolar","toEqual"],"sources":["../../../../../src/server/plugins/nunjucks/filters/merge.test.js"],"sourcesContent":["import { merge } from '~/src/server/plugins/nunjucks/filters/merge.js'\n\ndescribe('merge', () => {\n const propertyToMerge = { lorem: 'ipsum' }\n it('should return the target if source is not an object', () => {\n expect(merge(propertyToMerge, 'dolar')).toBe(propertyToMerge)\n })\n\n it('should merge the properties if they are valid', () => {\n expect(merge({ lorem: 'dolar', dolar: 'sit' }, propertyToMerge)).toEqual({\n lorem: 'ipsum',\n dolar: 'sit'\n })\n })\n})\n"],"mappings":"AAAA,SAASA,KAAK;AAEdC,QAAQ,CAAC,OAAO,EAAE,MAAM;EACtB,MAAMC,eAAe,GAAG;IAAEC,KAAK,EAAE;EAAQ,CAAC;EAC1CC,EAAE,CAAC,qDAAqD,EAAE,MAAM;IAC9DC,MAAM,CAACL,KAAK,CAACE,eAAe,EAAE,OAAO,CAAC,CAAC,CAACI,IAAI,CAACJ,eAAe,CAAC;EAC/D,CAAC,CAAC;EAEFE,EAAE,CAAC,+CAA+C,EAAE,MAAM;IACxDC,MAAM,CAACL,KAAK,CAAC;MAAEG,KAAK,EAAE,OAAO;MAAEI,KAAK,EAAE;IAAM,CAAC,EAAEL,eAAe,CAAC,CAAC,CAACM,OAAO,CAAC;MACvEL,KAAK,EAAE,OAAO;MACdI,KAAK,EAAE;IACT,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC","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.8",
|
|
4
4
|
"description": "Defra forms engine",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"./components": "./.server/server/plugins/engine/components/index.js",
|
|
28
28
|
"./services/*": "./.server/server/plugins/engine/services/*",
|
|
29
29
|
"./engine/*": "./.server/server/plugins/engine/*",
|
|
30
|
-
"./helpers.js": "./.server/server/plugins/engine/components/helpers.js",
|
|
30
|
+
"./helpers.js": "./.server/server/plugins/engine/components/helpers/index.js",
|
|
31
31
|
"./schema.js": "./.server/server/schemas/index.js",
|
|
32
32
|
"./templates/*": "./.server/server/plugins/engine/views/*",
|
|
33
33
|
"./cache-service.js": "./.server/server/services/cacheService.js",
|
|
@@ -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.574",
|
|
74
74
|
"@defra/hapi-tracing": "^1.26.0",
|
|
75
75
|
"@elastic/ecs-pino-format": "^1.5.0",
|
|
76
76
|
"@hapi/boom": "^10.0.1",
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
@use "govuk-frontend" as *;
|
|
2
|
+
|
|
3
|
+
.app-location-input {
|
|
4
|
+
@include govuk-clearfix;
|
|
5
|
+
font-size: 0; // removes whitespace caused by inline-block
|
|
6
|
+
margin-bottom: govuk-spacing(6);
|
|
7
|
+
|
|
8
|
+
&:has(.govuk-input--error) {
|
|
9
|
+
border-left: $govuk-border-width-form-group-error solid $govuk-error-colour;
|
|
10
|
+
padding-left: govuk-spacing(3);
|
|
11
|
+
margin-top: 0;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.govuk-hint:has(+ .app-location-input .govuk-input--error) {
|
|
16
|
+
border-left: $govuk-border-width-form-group-error solid $govuk-error-colour;
|
|
17
|
+
padding-left: govuk-spacing(3);
|
|
18
|
+
margin-bottom: 0;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.govuk-fieldset:has(.app-location-input .govuk-input--error) {
|
|
22
|
+
.govuk-fieldset__legend {
|
|
23
|
+
border-left: $govuk-border-width-form-group-error solid $govuk-error-colour;
|
|
24
|
+
padding-left: govuk-spacing(3);
|
|
25
|
+
margin-bottom: 0;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.govuk-fieldset__legend + .govuk-hint {
|
|
29
|
+
margin-top: 0;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.app-location-input__item {
|
|
34
|
+
display: inline-block;
|
|
35
|
+
margin-right: govuk-spacing(4);
|
|
36
|
+
margin-bottom: govuk-spacing(4);
|
|
37
|
+
|
|
38
|
+
&:last-child {
|
|
39
|
+
margin-right: 0;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
@include govuk-media-query($from: tablet) {
|
|
43
|
+
margin-bottom: 0;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.govuk-form-group {
|
|
47
|
+
margin-bottom: 0;
|
|
48
|
+
display: inline-block;
|
|
49
|
+
width: auto;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.govuk-label {
|
|
53
|
+
display: block;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.govuk-input {
|
|
57
|
+
margin-bottom: 0;
|
|
58
|
+
width: auto;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -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
|
+
"type": "DeclarationField",
|
|
126
|
+
"name": "declaration",
|
|
127
|
+
"title": "Declaration",
|
|
128
|
+
"content": "By submitting this form, I agree to:\n\n- Provide accurate and complete information\n- Comply with all applicable regulations\n- Accept responsibility for any false statements",
|
|
129
|
+
"hint": "Please read and confirm the following terms"
|
|
123
130
|
}
|
|
124
131
|
]
|
|
125
132
|
},
|
|
@@ -163,6 +163,34 @@ pages:
|
|
|
163
163
|
next:
|
|
164
164
|
- path: '/how-many-members-of-staff-will-look-after-the-unicorns'
|
|
165
165
|
components:
|
|
166
|
+
- name: dfGYuk
|
|
167
|
+
options: {}
|
|
168
|
+
schema: {}
|
|
169
|
+
type: EastingNorthingField
|
|
170
|
+
title: Easting and northing
|
|
171
|
+
hint:
|
|
172
|
+
This is an Easting and Northing component
|
|
173
|
+
- name: seTThb
|
|
174
|
+
options: {}
|
|
175
|
+
schema: {}
|
|
176
|
+
type: LatLongField
|
|
177
|
+
title: Latitute and longitude
|
|
178
|
+
hint:
|
|
179
|
+
This is an Latitute and Longitude component
|
|
180
|
+
- name: bhjloS
|
|
181
|
+
options: {}
|
|
182
|
+
schema: {}
|
|
183
|
+
type: NationalGridFieldNumberField
|
|
184
|
+
title: National grid field number
|
|
185
|
+
hint:
|
|
186
|
+
This is an National Grid Field Number component
|
|
187
|
+
- name: dfQQws
|
|
188
|
+
options: {}
|
|
189
|
+
schema: {}
|
|
190
|
+
type: OsGridRefField
|
|
191
|
+
title: Ordnance survey grid reference
|
|
192
|
+
hint:
|
|
193
|
+
This is an Ordnance survey Grid Reference component
|
|
166
194
|
- name: bClCvo
|
|
167
195
|
options: {}
|
|
168
196
|
schema: {}
|
|
@@ -191,7 +219,7 @@ pages:
|
|
|
191
219
|
controller: FileUploadPageController
|
|
192
220
|
section: Regnsa
|
|
193
221
|
next:
|
|
194
|
-
- path: '/
|
|
222
|
+
- path: '/declaration'
|
|
195
223
|
components:
|
|
196
224
|
- name: dLzALM
|
|
197
225
|
title: Documents
|
|
@@ -202,6 +230,17 @@ pages:
|
|
|
202
230
|
schema:
|
|
203
231
|
min: 1
|
|
204
232
|
max: 3
|
|
233
|
+
- title: Declaration
|
|
234
|
+
path: '/declaration'
|
|
235
|
+
section: section
|
|
236
|
+
components:
|
|
237
|
+
- name: diLmal
|
|
238
|
+
title: Declaration
|
|
239
|
+
type: DeclarationField
|
|
240
|
+
content: 'Fill in this field'
|
|
241
|
+
options: {}
|
|
242
|
+
next:
|
|
243
|
+
- path: '/summary'
|
|
205
244
|
conditions:
|
|
206
245
|
- displayName: Address is different
|
|
207
246
|
name: IrVmYz
|
package/src/server/index.test.ts
CHANGED
|
@@ -22,7 +22,7 @@ export class ComponentBase {
|
|
|
22
22
|
type: ComponentDef['type']
|
|
23
23
|
name: ComponentDef['name']
|
|
24
24
|
title: ComponentDef['title']
|
|
25
|
-
schema?: Extract<ComponentDef, { schema
|
|
25
|
+
schema?: Extract<ComponentDef, { schema?: object }>['schema']
|
|
26
26
|
options?: Extract<ComponentDef, { options: object }>['options']
|
|
27
27
|
|
|
28
28
|
isFormComponent = false
|
|
@@ -90,6 +90,7 @@ export type ComponentSchema =
|
|
|
90
90
|
| ArraySchema<boolean>
|
|
91
91
|
| ArraySchema<object>
|
|
92
92
|
| BooleanSchema<string>
|
|
93
|
+
| BooleanSchema
|
|
93
94
|
| DateSchema
|
|
94
95
|
| NumberSchema<string>
|
|
95
96
|
| NumberSchema
|