@defra/forms-engine-plugin 5.0.0-alpha.11 → 5.0.0-alpha.12
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/plugins/engine/components/CheckboxesField.d.ts +20 -2
- package/.server/server/plugins/engine/components/CheckboxesField.js +24 -12
- package/.server/server/plugins/engine/components/CheckboxesField.js.map +1 -1
- package/.server/server/plugins/engine/components/EastingNorthingField.d.ts +2 -0
- package/.server/server/plugins/engine/components/EastingNorthingField.js +1 -1
- package/.server/server/plugins/engine/components/EastingNorthingField.js.map +1 -1
- package/.server/server/plugins/engine/components/FileUploadField.d.ts +10 -1
- package/.server/server/plugins/engine/components/FileUploadField.js +18 -6
- package/.server/server/plugins/engine/components/FileUploadField.js.map +1 -1
- package/.server/server/plugins/engine/components/GeospatialField.d.ts +21 -0
- package/.server/server/plugins/engine/components/GeospatialField.js +32 -9
- package/.server/server/plugins/engine/components/GeospatialField.js.map +1 -1
- package/.server/server/plugins/engine/components/LatLongField.d.ts +2 -0
- package/.server/server/plugins/engine/components/LocationFieldBase.js +4 -1
- package/.server/server/plugins/engine/components/LocationFieldBase.js.map +1 -1
- package/.server/server/plugins/engine/components/LocationFieldHelpers.d.ts +2 -0
- package/.server/server/plugins/engine/components/LocationFieldHelpers.js +7 -1
- package/.server/server/plugins/engine/components/LocationFieldHelpers.js.map +1 -1
- package/.server/server/plugins/engine/components/helpers/geospatial.d.ts +5 -0
- package/.server/server/plugins/engine/components/helpers/geospatial.js +25 -16
- package/.server/server/plugins/engine/components/helpers/geospatial.js.map +1 -1
- package/.server/server/plugins/engine/form-availability.d.ts +3 -2
- package/.server/server/plugins/engine/form-availability.js +3 -2
- package/.server/server/plugins/engine/form-availability.js.map +1 -1
- package/.server/server/plugins/engine/form-context.js +2 -2
- package/.server/server/plugins/engine/form-context.js.map +1 -1
- package/.server/server/plugins/engine/i18n/buildValidationMessages.d.ts +1 -1
- package/.server/server/plugins/engine/i18n/buildValidationMessages.js +30 -9
- package/.server/server/plugins/engine/i18n/buildValidationMessages.js.map +1 -1
- package/.server/server/plugins/engine/i18n/translations/cy.json +66 -10
- package/.server/server/plugins/engine/i18n/translations/en-GB.json +29 -10
- package/.server/server/plugins/engine/i18n/types.d.ts +1 -0
- package/.server/server/plugins/engine/i18n/types.js.map +1 -1
- package/.server/server/plugins/engine/models/unavailable-view-model.d.ts +11 -2
- package/.server/server/plugins/engine/models/unavailable-view-model.js +23 -4
- package/.server/server/plugins/engine/models/unavailable-view-model.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/validationOptions.d.ts +1 -1
- package/.server/server/plugins/engine/pageControllers/validationOptions.js +1 -1
- package/.server/server/plugins/engine/pageControllers/validationOptions.js.map +1 -1
- package/.server/server/plugins/engine/unavailable-response.js +5 -2
- package/.server/server/plugins/engine/unavailable-response.js.map +1 -1
- package/.server/server/plugins/engine/views/components/_location-field-base.html +1 -1
- package/.server/server/plugins/engine/views/unavailable.html +14 -11
- package/package.json +1 -1
- package/src/server/plugins/engine/components/CheckboxesField.ts +34 -13
- package/src/server/plugins/engine/components/EastingNorthingField.ts +1 -1
- package/src/server/plugins/engine/components/FileUploadField.ts +26 -6
- package/src/server/plugins/engine/components/GeospatialField.ts +43 -11
- package/src/server/plugins/engine/components/LocationFieldBase.ts +3 -1
- package/src/server/plugins/engine/components/LocationFieldHelpers.ts +7 -1
- package/src/server/plugins/engine/components/helpers/geospatial.ts +32 -22
- package/src/server/plugins/engine/form-availability.ts +8 -2
- package/src/server/plugins/engine/form-context.ts +4 -2
- package/src/server/plugins/engine/i18n/buildValidationMessages.ts +15 -10
- package/src/server/plugins/engine/i18n/translations/cy.json +66 -10
- package/src/server/plugins/engine/i18n/translations/en-GB.json +29 -10
- package/src/server/plugins/engine/i18n/types.ts +1 -0
- package/src/server/plugins/engine/models/unavailable-view-model.ts +26 -5
- package/src/server/plugins/engine/pageControllers/validationOptions.ts +2 -2
- package/src/server/plugins/engine/unavailable-response.ts +6 -2
- package/src/server/plugins/engine/views/components/_location-field-base.html +1 -1
- package/src/server/plugins/engine/views/unavailable.html +14 -11
|
@@ -16,15 +16,24 @@
|
|
|
16
16
|
"numberMax": "{{#label}} must be {{#limit}} or lower",
|
|
17
17
|
"maxWords": "{{#label}} must be {{#limit}} words or fewer",
|
|
18
18
|
"unicode": "{{#label}} includes invalid characters, for example, long dashes",
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"
|
|
19
|
+
"arrayMin_one": "Select at least {{#limit}} option from the list",
|
|
20
|
+
"arrayMin_other": "Select at least {{#limit}} options from the list",
|
|
21
|
+
"arrayMax_one": "Only {{#limit}} option can be selected from the list",
|
|
22
|
+
"arrayMax_other": "Only {{#limit}} options can be selected from the list",
|
|
23
|
+
"arrayLength_one": "Select only {{#limit}} option from the list",
|
|
24
|
+
"arrayLength_other": "Select only {{#limit}} options from the list",
|
|
25
|
+
"featuresMin_one": "Define at least {{#limit}} feature",
|
|
26
|
+
"featuresMin_other": "Define at least {{#limit}} features",
|
|
27
|
+
"featuresMax_one": "Only {{#limit}} feature can be defined",
|
|
28
|
+
"featuresMax_other": "Only {{#limit}} features can be defined",
|
|
29
|
+
"featuresLength_one": "Define exactly {{#limit}} feature",
|
|
30
|
+
"featuresLength_other": "Define exactly {{#limit}} features",
|
|
31
|
+
"filesMin_one": "You must upload {{#limit}} file or more",
|
|
32
|
+
"filesMin_other": "You must upload {{#limit}} files or more",
|
|
33
|
+
"filesMax_one": "You can only upload {{#limit}} file or less",
|
|
34
|
+
"filesMax_other": "You can only upload {{#limit}} files or less",
|
|
35
|
+
"filesLength_one": "You must upload exactly {{#limit}} file",
|
|
36
|
+
"filesLength_other": "You must upload exactly {{#limit}} files"
|
|
28
37
|
},
|
|
29
38
|
|
|
30
39
|
"errors": {
|
|
@@ -44,7 +53,7 @@
|
|
|
44
53
|
"and": "and",
|
|
45
54
|
"england": "England",
|
|
46
55
|
"wales": "Wales",
|
|
47
|
-
"
|
|
56
|
+
"northern-ireland": "Northern Ireland",
|
|
48
57
|
"scotland": "Scotland",
|
|
49
58
|
"sendFeedback": "Send feedback"
|
|
50
59
|
},
|
|
@@ -145,6 +154,16 @@
|
|
|
145
154
|
"bannerForce": "This is a preview of a [[previewMode]] form. Do not enter personal information.",
|
|
146
155
|
"bannerText": "This is a preview of a [[previewMode]] form page you are editing.",
|
|
147
156
|
"previousPages": "It depends on answers from earlier pages in the form. In the live version, users will need to complete those questions first."
|
|
157
|
+
},
|
|
158
|
+
|
|
159
|
+
"formUnavailable": {
|
|
160
|
+
"title": "Sorry, this form is unavailable",
|
|
161
|
+
"subHeading": "'[[formTitle]]' is no longer available.",
|
|
162
|
+
"contactDetailsHeading": "Contact details for [[organisationName]]",
|
|
163
|
+
"telephone": "Telephone",
|
|
164
|
+
"callCharges": "Find out about call charges",
|
|
165
|
+
"email": "Email",
|
|
166
|
+
"onlineContactForm": "Online contact form"
|
|
148
167
|
}
|
|
149
168
|
},
|
|
150
169
|
|
|
@@ -1,19 +1,40 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
type FormDefinition,
|
|
3
|
+
type FormMetadata,
|
|
4
|
+
type FormMetadataContact
|
|
5
|
+
} from '@defra/forms-model'
|
|
6
|
+
|
|
7
|
+
import { createFormTranslator } from '../i18n/createFormTranslator.js'
|
|
8
|
+
import { getAvailableLanguages } from '../i18n/languages.js'
|
|
9
|
+
import { type Translator } from '../types/index.js'
|
|
2
10
|
|
|
3
11
|
export interface UnavailableViewModel {
|
|
4
12
|
pageTitle: string
|
|
5
13
|
formTitle: string
|
|
6
14
|
organisationName: string
|
|
7
15
|
contact?: FormMetadataContact
|
|
16
|
+
context: { translator: Translator }
|
|
17
|
+
language: string
|
|
18
|
+
languages: { code: string; name: string }[]
|
|
8
19
|
}
|
|
9
20
|
|
|
10
21
|
export function unavailableViewModel(
|
|
11
|
-
metadata: FormMetadata
|
|
22
|
+
metadata: FormMetadata,
|
|
23
|
+
definition: FormDefinition | undefined,
|
|
24
|
+
language: string
|
|
12
25
|
): UnavailableViewModel {
|
|
26
|
+
const translator = createFormTranslator(metadata, definition, language)
|
|
27
|
+
const { t, tForm } = translator
|
|
13
28
|
return {
|
|
14
|
-
pageTitle: '
|
|
15
|
-
formTitle: metadata.title,
|
|
29
|
+
pageTitle: t('pages.formUnavailable.title'),
|
|
30
|
+
formTitle: tForm('title') || metadata.title,
|
|
16
31
|
organisationName: metadata.organisation,
|
|
17
|
-
contact: metadata.contact
|
|
32
|
+
contact: metadata.contact,
|
|
33
|
+
context: { translator },
|
|
34
|
+
language,
|
|
35
|
+
// Always get Welsh and English
|
|
36
|
+
languages: getAvailableLanguages({
|
|
37
|
+
metadata: { translations: { cy: {} } }
|
|
38
|
+
} as unknown as FormDefinition)
|
|
18
39
|
}
|
|
19
40
|
}
|
|
@@ -26,7 +26,7 @@ export const opts = {
|
|
|
26
26
|
* import messageTemplate directly and get the English version.
|
|
27
27
|
*/
|
|
28
28
|
export const messageTemplate: ValidationMessages = buildValidationMessages(
|
|
29
|
-
(key) => t(key, 'en-GB')
|
|
29
|
+
(key, options) => t(key, 'en-GB', options)
|
|
30
30
|
)
|
|
31
31
|
|
|
32
32
|
export const messages: LanguageMessagesExt = {
|
|
@@ -79,7 +79,7 @@ export const messagesPre: LanguageMessages =
|
|
|
79
79
|
messages as unknown as LanguageMessages
|
|
80
80
|
|
|
81
81
|
export function buildLanguageMessages(
|
|
82
|
-
t: (key: string) => string
|
|
82
|
+
t: (key: string, options?: Record<string, unknown>) => string
|
|
83
83
|
): LanguageMessages {
|
|
84
84
|
const vm = buildValidationMessages(t)
|
|
85
85
|
return {
|
|
@@ -2,6 +2,8 @@ import { type Request, type ResponseToolkit, type Server } from '@hapi/hapi'
|
|
|
2
2
|
|
|
3
3
|
import { isOfflineBoom } from './form-availability.js'
|
|
4
4
|
import { unavailableViewModel } from './models/unavailable-view-model.js'
|
|
5
|
+
import { type AnyFormRequest } from './types.js'
|
|
6
|
+
import { resolveLanguage } from '../../utils/utils.js'
|
|
5
7
|
|
|
6
8
|
/**
|
|
7
9
|
* Registers a server-wide onPreResponse extension that intercepts the offline
|
|
@@ -17,10 +19,12 @@ export function registerUnavailableResponse(server: Server) {
|
|
|
17
19
|
return h.continue
|
|
18
20
|
}
|
|
19
21
|
|
|
20
|
-
const { metadata } = response.data
|
|
22
|
+
const { metadata, definition } = response.data
|
|
23
|
+
|
|
24
|
+
const language = resolveLanguage(request as unknown as AnyFormRequest)
|
|
21
25
|
|
|
22
26
|
return h
|
|
23
|
-
.view('unavailable', unavailableViewModel(metadata))
|
|
27
|
+
.view('unavailable', unavailableViewModel(metadata, definition, language))
|
|
24
28
|
.header('Cache-Control', 'no-store, no-cache, must-revalidate')
|
|
25
29
|
.header('X-Robots-Tag', 'noindex, nofollow')
|
|
26
30
|
.code(200)
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
{% set detailsHtml %}
|
|
62
62
|
{% if component.model.instructionText %}
|
|
63
63
|
{{ govukDetails({
|
|
64
|
-
summaryText:
|
|
64
|
+
summaryText: component.model.instructionSummary,
|
|
65
65
|
html: component.model.instructionText | markdown | safe,
|
|
66
66
|
classes: "govuk-!-margin-top-3"
|
|
67
67
|
}) }}
|
|
@@ -1,32 +1,35 @@
|
|
|
1
1
|
{% extends baseLayoutPath %}
|
|
2
2
|
|
|
3
|
+
{% set t = context.translator.t %}
|
|
4
|
+
{% set tForm = context.translator.tForm %}
|
|
5
|
+
|
|
3
6
|
{% block content %}
|
|
4
7
|
<div class="govuk-grid-row">
|
|
5
8
|
<div class="govuk-grid-column-two-thirds">
|
|
6
|
-
<h1 class="govuk-heading-l">
|
|
7
|
-
<p class="govuk-body">
|
|
8
|
-
<h2 class="govuk-heading-m">
|
|
9
|
+
<h1 class="govuk-heading-l">{{ t('pages.formUnavailable.title') }}</h1>
|
|
10
|
+
<p class="govuk-body">{{ t('pages.formUnavailable.subHeading', { formTitle: formTitle }) }}</p>
|
|
11
|
+
<h2 class="govuk-heading-m">{{ t('pages.formUnavailable.contactDetailsHeading', { organisationName: organisationName }) }}</h2>
|
|
9
12
|
|
|
10
13
|
{% if contact.phone %}
|
|
11
|
-
<h3 class="govuk-heading-s">
|
|
14
|
+
<h3 class="govuk-heading-s">{{ t('pages.formUnavailable.telephone') }}</h3>
|
|
12
15
|
<div class="app-prose-scope">
|
|
13
|
-
{{ contact.phone | markdown(3) | safe }}
|
|
16
|
+
{{ tForm('contact.phone') | markdown(3) | safe }}
|
|
14
17
|
</div>
|
|
15
|
-
<p class="govuk-body"><a href="https://www.gov.uk/call-charges" class="govuk-link govuk-link--no-visited-state">
|
|
18
|
+
<p class="govuk-body"><a href="https://www.gov.uk/call-charges" class="govuk-link govuk-link--no-visited-state">{{ t('pages.formUnavailable.callCharges') }}</a></p>
|
|
16
19
|
{% endif %}
|
|
17
20
|
|
|
18
21
|
{% if contact.email %}
|
|
19
|
-
<h3 class="govuk-heading-s">
|
|
22
|
+
<h3 class="govuk-heading-s">{{ t('pages.formUnavailable.email') }}</h3>
|
|
20
23
|
<ul class="govuk-list">
|
|
21
|
-
<li><a class="govuk-link govuk-link--no-visited-state" href="mailto:{{ contact.email.address }}">{{ contact.email.address }}</a></li>
|
|
22
|
-
<li>{{ contact.email.responseTime }}</li>
|
|
24
|
+
<li><a class="govuk-link govuk-link--no-visited-state" href="mailto:{{ tForm('contact.email.address') }}">{{ tForm('contact.email.address') }}</a></li>
|
|
25
|
+
<li>{{ tForm('contact.email.responseTime') }}</li>
|
|
23
26
|
</ul>
|
|
24
27
|
{% endif %}
|
|
25
28
|
|
|
26
29
|
{% if contact.online %}
|
|
27
|
-
<h3 class="govuk-heading-s">
|
|
30
|
+
<h3 class="govuk-heading-s">{{ t('pages.formUnavailable.onlineContactForm') }}</h3>
|
|
28
31
|
<ul class="govuk-list">
|
|
29
|
-
<li><a class="govuk-link govuk-link--no-visited-state" href="{{ contact.online.url }}">{{ contact.online.text }}</a></li>
|
|
32
|
+
<li><a class="govuk-link govuk-link--no-visited-state" href="{{ tForm('contact.online.url') }}">{{ tForm('contact.online.text') }}</a></li>
|
|
30
33
|
</ul>
|
|
31
34
|
{% endif %}
|
|
32
35
|
</div>
|