@defra/forms-engine-plugin 4.0.23 → 4.0.25
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/.server/server/forms/components.json +2 -2
- package/.server/server/plugins/engine/components/DeclarationField.d.ts +2 -0
- package/.server/server/plugins/engine/components/DeclarationField.js +8 -1
- package/.server/server/plugins/engine/components/DeclarationField.js.map +1 -1
- package/.server/server/plugins/engine/components/EastingNorthingField.js +7 -6
- package/.server/server/plugins/engine/components/EastingNorthingField.js.map +1 -1
- package/.server/server/plugins/engine/components/LatLongField.js +7 -6
- package/.server/server/plugins/engine/components/LatLongField.js.map +1 -1
- package/.server/server/plugins/engine/components/LocationFieldBase.d.ts +4 -4
- package/.server/server/plugins/engine/components/LocationFieldBase.js +3 -2
- package/.server/server/plugins/engine/components/LocationFieldBase.js.map +1 -1
- package/.server/server/plugins/engine/components/Markdown.d.ts +2 -0
- package/.server/server/plugins/engine/components/Markdown.js +4 -1
- package/.server/server/plugins/engine/components/Markdown.js.map +1 -1
- package/.server/server/plugins/engine/components/NationalGridFieldNumberField.d.ts +3 -3
- package/.server/server/plugins/engine/components/NationalGridFieldNumberField.js +5 -3
- package/.server/server/plugins/engine/components/NationalGridFieldNumberField.js.map +1 -1
- package/.server/server/plugins/engine/components/OsGridRefField.d.ts +3 -3
- package/.server/server/plugins/engine/components/OsGridRefField.js +5 -3
- package/.server/server/plugins/engine/components/OsGridRefField.js.map +1 -1
- package/.server/server/plugins/engine/components/helpers/index.d.ts +10 -0
- package/.server/server/plugins/engine/components/helpers/index.js +18 -0
- package/.server/server/plugins/engine/components/helpers/index.js.map +1 -1
- package/.server/server/plugins/engine/index.js +4 -1
- package/.server/server/plugins/engine/index.js.map +1 -1
- package/.server/server/plugins/engine/views/components/declarationfield.html +1 -1
- package/.server/server/plugins/engine/views/components/markdown.html +1 -1
- package/.server/server/plugins/engine/views/confirmation.html +1 -1
- package/package.json +3 -2
- package/src/server/forms/components.json +2 -2
- package/src/server/plugins/engine/components/DeclarationField.test.ts +24 -0
- package/src/server/plugins/engine/components/DeclarationField.ts +20 -2
- package/src/server/plugins/engine/components/EastingNorthingField.test.ts +30 -1
- package/src/server/plugins/engine/components/EastingNorthingField.ts +19 -6
- package/src/server/plugins/engine/components/LatLongField.test.ts +30 -1
- package/src/server/plugins/engine/components/LatLongField.ts +19 -6
- package/src/server/plugins/engine/components/LocationFieldBase.ts +11 -6
- package/src/server/plugins/engine/components/Markdown.ts +4 -1
- package/src/server/plugins/engine/components/NationalGridFieldNumberField.test.ts +4 -4
- package/src/server/plugins/engine/components/NationalGridFieldNumberField.ts +11 -4
- package/src/server/plugins/engine/components/OsGridRefField.test.ts +4 -4
- package/src/server/plugins/engine/components/OsGridRefField.ts +11 -3
- package/src/server/plugins/engine/components/helpers/helpers.test.ts +40 -0
- package/src/server/plugins/engine/components/helpers/index.ts +18 -0
- package/src/server/plugins/engine/index.ts +5 -2
- package/src/server/plugins/engine/views/components/declarationfield.html +1 -1
- package/src/server/plugins/engine/views/components/markdown.html +1 -1
- package/src/server/plugins/engine/views/confirmation.html +1 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type OsGridRefFieldComponent } from '@defra/forms-model'
|
|
2
2
|
|
|
3
3
|
import { LocationFieldBase } from '~/src/server/plugins/engine/components/LocationFieldBase.js'
|
|
4
|
+
import { createLowerFirstExpression } from '~/src/server/plugins/engine/components/helpers/index.js'
|
|
4
5
|
|
|
5
6
|
export class OsGridRefField extends LocationFieldBase {
|
|
6
7
|
declare options: OsGridRefFieldComponent['options']
|
|
@@ -15,10 +16,15 @@ export class OsGridRefField extends LocationFieldBase {
|
|
|
15
16
|
const pattern =
|
|
16
17
|
/^((([sS]|[nN])[a-hA-Hj-zJ-Z])|(([tT]|[oO])[abfglmqrvwABFGLMQRVW])|([hH][l-zL-Z])|([jJ][lmqrvwLMQRVW]))\s?(([0-9]{3})\s?([0-9]{3})|([0-9]{4})\s?([0-9]{4})|([0-9]{5})\s?([0-9]{5}))$/
|
|
17
18
|
|
|
19
|
+
const patternTemplate =
|
|
20
|
+
'Enter a valid OS grid reference for {{lowerFirst(#title)}} like TQ123456'
|
|
21
|
+
|
|
18
22
|
return {
|
|
19
23
|
pattern,
|
|
20
|
-
patternErrorMessage:
|
|
21
|
-
requiredMessage:
|
|
24
|
+
patternErrorMessage: createLowerFirstExpression(patternTemplate),
|
|
25
|
+
requiredMessage: createLowerFirstExpression(
|
|
26
|
+
'Enter {{lowerFirst(#title)}}'
|
|
27
|
+
)
|
|
22
28
|
}
|
|
23
29
|
}
|
|
24
30
|
|
|
@@ -26,7 +32,9 @@ export class OsGridRefField extends LocationFieldBase {
|
|
|
26
32
|
return [
|
|
27
33
|
{
|
|
28
34
|
type: 'pattern',
|
|
29
|
-
template:
|
|
35
|
+
template: createLowerFirstExpression(
|
|
36
|
+
'Enter a valid OS grid reference for {{lowerFirst(#title)}} like TQ123456'
|
|
37
|
+
)
|
|
30
38
|
}
|
|
31
39
|
]
|
|
32
40
|
}
|
|
@@ -6,6 +6,10 @@ import { LatLongField } from '~/src/server/plugins/engine/components/LatLongFiel
|
|
|
6
6
|
import { NationalGridFieldNumberField } from '~/src/server/plugins/engine/components/NationalGridFieldNumberField.js'
|
|
7
7
|
import { OsGridRefField } from '~/src/server/plugins/engine/components/OsGridRefField.js'
|
|
8
8
|
import { createComponent } from '~/src/server/plugins/engine/components/helpers/components.js'
|
|
9
|
+
import {
|
|
10
|
+
createLowerFirstExpression,
|
|
11
|
+
lowerFirstExpressionOptions
|
|
12
|
+
} from '~/src/server/plugins/engine/components/helpers/index.js'
|
|
9
13
|
import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
|
|
10
14
|
import definition from '~/test/form/definitions/basic.js'
|
|
11
15
|
|
|
@@ -123,3 +127,39 @@ describe('ComponentBase tests', () => {
|
|
|
123
127
|
expect(component.title).toBe('Context Field')
|
|
124
128
|
})
|
|
125
129
|
})
|
|
130
|
+
|
|
131
|
+
describe('lowerFirst expression helpers', () => {
|
|
132
|
+
test('lowerFirstExpressionOptions should have lowerFirst function', () => {
|
|
133
|
+
expect(lowerFirstExpressionOptions).toHaveProperty('functions')
|
|
134
|
+
expect(lowerFirstExpressionOptions).toHaveProperty(
|
|
135
|
+
'functions.lowerFirst',
|
|
136
|
+
expect.any(Function)
|
|
137
|
+
)
|
|
138
|
+
})
|
|
139
|
+
|
|
140
|
+
test('createLowerFirstExpression should create a Joi expression', () => {
|
|
141
|
+
const template = 'Enter {{lowerFirst(#title)}}'
|
|
142
|
+
const expression = createLowerFirstExpression(template)
|
|
143
|
+
|
|
144
|
+
expect(expression).toBeDefined()
|
|
145
|
+
expect(typeof expression).toBe('object')
|
|
146
|
+
expect(expression).toHaveProperty('_template')
|
|
147
|
+
})
|
|
148
|
+
|
|
149
|
+
test('createLowerFirstExpression should render template with lowerFirst', () => {
|
|
150
|
+
const template = 'Enter {{lowerFirst(#title)}}'
|
|
151
|
+
const expression = createLowerFirstExpression(template)
|
|
152
|
+
|
|
153
|
+
// Check the rendered template is stored
|
|
154
|
+
expect(expression).toHaveProperty('rendered', template)
|
|
155
|
+
})
|
|
156
|
+
|
|
157
|
+
test('createLowerFirstExpression should support multiple interpolations', () => {
|
|
158
|
+
const template =
|
|
159
|
+
'Easting for {{lowerFirst(#title)}} must be between {{#min}} and {{#max}}'
|
|
160
|
+
const expression = createLowerFirstExpression(template)
|
|
161
|
+
|
|
162
|
+
expect(expression).toBeDefined()
|
|
163
|
+
expect(expression).toHaveProperty('rendered', template)
|
|
164
|
+
})
|
|
165
|
+
})
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { type ComponentDef } from '@defra/forms-model'
|
|
2
|
+
import joi, { type JoiExpression, type ReferenceOptions } from 'joi'
|
|
3
|
+
import lowerFirst from 'lodash/lowerFirst.js'
|
|
2
4
|
|
|
3
5
|
/**
|
|
4
6
|
* Prevent Markdown formatting
|
|
@@ -36,3 +38,19 @@ export const addClassOptionIfNone = (
|
|
|
36
38
|
) => {
|
|
37
39
|
options.classes ??= className
|
|
38
40
|
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Configuration for Joi expressions that use lowerFirst function
|
|
44
|
+
*/
|
|
45
|
+
export const lowerFirstExpressionOptions = {
|
|
46
|
+
functions: {
|
|
47
|
+
lowerFirst
|
|
48
|
+
}
|
|
49
|
+
} as ReferenceOptions
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Creates a Joi expression with lowerFirst function support
|
|
53
|
+
* Used for error messages in location field components
|
|
54
|
+
*/
|
|
55
|
+
export const createLowerFirstExpression = (template: string): JoiExpression =>
|
|
56
|
+
joi.expression(template, lowerFirstExpressionOptions) as JoiExpression
|
|
@@ -33,8 +33,11 @@ export const prepareNunjucksEnvironment = function (
|
|
|
33
33
|
env.addFilter(name, nunjucksFilter)
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
env.addFilter('markdown', (text: string) =>
|
|
37
|
-
markdownToHtml(text,
|
|
36
|
+
env.addFilter('markdown', (text: string, startingHeaderLevel?: number) =>
|
|
37
|
+
markdownToHtml(text, {
|
|
38
|
+
baseUrl: pluginOptions.baseUrl,
|
|
39
|
+
startingHeaderLevel
|
|
40
|
+
})
|
|
38
41
|
)
|
|
39
42
|
|
|
40
43
|
for (const [name, nunjucksGlobal] of Object.entries(globals)) {
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
{% macro DeclarationField(component) %}
|
|
6
6
|
{% set content %}
|
|
7
7
|
<div class="app-prose-scope">
|
|
8
|
-
{{ component.model.content | markdown
|
|
8
|
+
{{ component.model.content | markdown(component.model.headerStartLevel) | safe }}
|
|
9
9
|
</div>
|
|
10
10
|
{% endset %}
|
|
11
11
|
{% set checkboxes = component.model | merge({ formGroup: { beforeInputs: { html: content } } }) %}
|