@defra/forms-model 3.0.608 → 3.0.612
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/dist/module/__stubs__/components.js +17 -0
- package/dist/module/__stubs__/components.js.map +1 -1
- package/dist/module/components/component-types.js +4 -1
- package/dist/module/components/component-types.js.map +1 -1
- package/dist/module/components/types.js.map +1 -1
- package/dist/module/form/form-editor/__stubs__/preview.js +30 -1
- package/dist/module/form/form-editor/__stubs__/preview.js.map +1 -1
- package/dist/module/form/form-editor/index.js +7 -3
- package/dist/module/form/form-editor/index.js.map +1 -1
- package/dist/module/form/form-editor/macros/types.js.map +1 -1
- package/dist/module/form/form-editor/preview/controller/page-controller.js +5 -1
- package/dist/module/form/form-editor/preview/controller/page-controller.js.map +1 -1
- package/dist/module/form/form-editor/preview/controller/summary-page-controller.js +14 -1
- package/dist/module/form/form-editor/preview/controller/summary-page-controller.js.map +1 -1
- package/dist/module/form/form-editor/preview/helpers.js +8 -2
- package/dist/module/form/form-editor/preview/helpers.js.map +1 -1
- package/dist/module/form/form-editor/preview/index.js +1 -0
- package/dist/module/form/form-editor/preview/index.js.map +1 -1
- package/dist/module/form/form-editor/preview/payment.js +117 -0
- package/dist/module/form/form-editor/preview/payment.js.map +1 -0
- package/dist/module/form/form-editor/preview/types.js.map +1 -1
- package/dist/module/form/form-editor/types.js.map +1 -1
- package/dist/module/pages/helpers.js +27 -0
- package/dist/module/pages/helpers.js.map +1 -1
- package/dist/module/pages/index.js +1 -1
- package/dist/module/pages/index.js.map +1 -1
- package/dist/types/__stubs__/components.d.ts +6 -1
- package/dist/types/__stubs__/components.d.ts.map +1 -1
- package/dist/types/components/component-types.d.ts.map +1 -1
- package/dist/types/components/types.d.ts +2 -2
- package/dist/types/components/types.d.ts.map +1 -1
- package/dist/types/form/form-editor/__stubs__/preview.d.ts +20 -0
- package/dist/types/form/form-editor/__stubs__/preview.d.ts.map +1 -1
- package/dist/types/form/form-editor/index.d.ts +4 -0
- package/dist/types/form/form-editor/index.d.ts.map +1 -1
- package/dist/types/form/form-editor/macros/types.d.ts +5 -0
- package/dist/types/form/form-editor/macros/types.d.ts.map +1 -1
- package/dist/types/form/form-editor/preview/controller/page-controller.d.ts.map +1 -1
- package/dist/types/form/form-editor/preview/controller/summary-page-controller.d.ts +10 -0
- package/dist/types/form/form-editor/preview/controller/summary-page-controller.d.ts.map +1 -1
- package/dist/types/form/form-editor/preview/helpers.d.ts.map +1 -1
- package/dist/types/form/form-editor/preview/index.d.ts +1 -0
- package/dist/types/form/form-editor/preview/payment.d.ts +63 -0
- package/dist/types/form/form-editor/preview/payment.d.ts.map +1 -0
- package/dist/types/form/form-editor/preview/types.d.ts +14 -0
- package/dist/types/form/form-editor/preview/types.d.ts.map +1 -1
- package/dist/types/form/form-editor/types.d.ts +14 -1
- package/dist/types/form/form-editor/types.d.ts.map +1 -1
- package/dist/types/pages/helpers.d.ts +13 -0
- package/dist/types/pages/helpers.d.ts.map +1 -1
- package/dist/types/pages/index.d.ts +1 -1
- package/dist/types/pages/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/schemas/form-editor-input-page-schema.json +2 -1
- package/schemas/question-type-full-schema.json +2 -1
- package/schemas/question-type-schema.json +2 -1
- package/src/__stubs__/components.ts +20 -0
- package/src/components/component-types.ts +9 -3
- package/src/components/types.ts +2 -2
- package/src/form/form-editor/__stubs__/preview.js +26 -1
- package/src/form/form-editor/index.ts +21 -3
- package/src/form/form-editor/macros/types.ts +6 -0
- package/src/form/form-editor/preview/controller/page-controller.js +7 -1
- package/src/form/form-editor/preview/controller/summary-page-controller.js +14 -1
- package/src/form/form-editor/preview/helpers.js +11 -2
- package/src/form/form-editor/preview/index.js +1 -0
- package/src/form/form-editor/preview/payment.js +126 -0
- package/src/form/form-editor/preview/types.ts +17 -0
- package/src/form/form-editor/types.ts +17 -0
- package/src/pages/helpers.ts +32 -0
- package/src/pages/index.ts +3 -0
|
@@ -47,6 +47,10 @@ import {
|
|
|
47
47
|
OsGridRefComponentPreviewElements,
|
|
48
48
|
OsGridRefQuestion
|
|
49
49
|
} from '~/src/form/form-editor/preview/os-grid-ref.js'
|
|
50
|
+
import {
|
|
51
|
+
PaymentComponentPreviewElements,
|
|
52
|
+
PaymentQuestion
|
|
53
|
+
} from '~/src/form/form-editor/preview/payment.js'
|
|
50
54
|
import { PhoneNumberQuestion } from '~/src/form/form-editor/preview/phone-number.js'
|
|
51
55
|
import { QuestionComponentElements } from '~/src/form/form-editor/preview/question.js'
|
|
52
56
|
import { RadioQuestion } from '~/src/form/form-editor/preview/radio.js'
|
|
@@ -93,7 +97,8 @@ const InputFieldComponentDictionary = {
|
|
|
93
97
|
[ComponentType.OsGridRefField]: OsGridRefQuestion,
|
|
94
98
|
[ComponentType.NationalGridFieldNumberField]: NationalGridQuestion,
|
|
95
99
|
[ComponentType.LatLongField]: LatLongQuestion,
|
|
96
|
-
[ComponentType.HiddenField]: HiddenQuestion
|
|
100
|
+
[ComponentType.HiddenField]: HiddenQuestion,
|
|
101
|
+
[ComponentType.PaymentField]: PaymentQuestion
|
|
97
102
|
}
|
|
98
103
|
|
|
99
104
|
/**
|
|
@@ -154,6 +159,10 @@ const ComponentToPreviewQuestion = {
|
|
|
154
159
|
[ComponentType.LatLongField]: (component, _definition) => {
|
|
155
160
|
const componentCoerced = /** @type {LatLongFieldComponent} */ (component)
|
|
156
161
|
return new LatLongComponentPreviewElements(componentCoerced)
|
|
162
|
+
},
|
|
163
|
+
[ComponentType.PaymentField]: (component, _definition) => {
|
|
164
|
+
const componentCoerced = /** @type {PaymentFieldComponent} */ (component)
|
|
165
|
+
return new PaymentComponentPreviewElements(componentCoerced)
|
|
157
166
|
}
|
|
158
167
|
}
|
|
159
168
|
|
|
@@ -202,5 +211,5 @@ export function mapComponentToPreviewQuestion(questionRenderer, definition) {
|
|
|
202
211
|
* @import { Question } from '~/src/form/form-editor/preview/question.js'
|
|
203
212
|
* @import { PreviewComponent } from '~/src/form/form-editor/preview/preview.js'
|
|
204
213
|
* @import { FormDefinition } from '~/src/form/form-definition/types.js'
|
|
205
|
-
* @import { AutocompleteFieldComponent, ComponentDef, DeclarationFieldComponent, EastingNorthingFieldComponent, LatLongFieldComponent, MultilineTextFieldComponent, NationalGridFieldNumberFieldComponent, NumberFieldComponent, OsGridRefFieldComponent, SelectFieldComponent, UkAddressFieldComponent, YesNoFieldComponent } from '~/src/components/types.js'
|
|
214
|
+
* @import { AutocompleteFieldComponent, ComponentDef, DeclarationFieldComponent, EastingNorthingFieldComponent, LatLongFieldComponent, MultilineTextFieldComponent, NationalGridFieldNumberFieldComponent, NumberFieldComponent, OsGridRefFieldComponent, PaymentFieldComponent, SelectFieldComponent, UkAddressFieldComponent, YesNoFieldComponent } from '~/src/components/types.js'
|
|
206
215
|
*/
|
|
@@ -27,6 +27,7 @@ export * from '~/src/form/form-editor/preview/uk-address.js'
|
|
|
27
27
|
export * from '~/src/form/form-editor/preview/unsupported-question.js'
|
|
28
28
|
export * from '~/src/form/form-editor/preview/yes-no.js'
|
|
29
29
|
export * from '~/src/form/form-editor/preview/hidden.js'
|
|
30
|
+
export * from '~/src/form/form-editor/preview/payment.js'
|
|
30
31
|
export * from '~/src/form/form-editor/preview/controller/page-controller-base.js'
|
|
31
32
|
export * from '~/src/form/form-editor/preview/controller/page-controller.js'
|
|
32
33
|
export * from '~/src/form/form-editor/preview/controller/guidance-page-controller.js'
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { ComponentType } from '~/src/components/enums.js'
|
|
2
|
+
import { PreviewComponent } from '~/src/form/form-editor/preview/preview.js'
|
|
3
|
+
import {
|
|
4
|
+
Question,
|
|
5
|
+
QuestionComponentElements
|
|
6
|
+
} from '~/src/form/form-editor/preview/question.js'
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @implements {PaymentElements}
|
|
10
|
+
*/
|
|
11
|
+
export class PaymentComponentPreviewElements extends QuestionComponentElements {
|
|
12
|
+
/**
|
|
13
|
+
* @type {number}
|
|
14
|
+
* @protected
|
|
15
|
+
*/
|
|
16
|
+
_paymentAmount = 0
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* @type {string}
|
|
20
|
+
* @protected
|
|
21
|
+
*/
|
|
22
|
+
_paymentDescription = ''
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* @param {PaymentFieldComponent} component
|
|
26
|
+
*/
|
|
27
|
+
constructor(component) {
|
|
28
|
+
super(component)
|
|
29
|
+
this._paymentAmount = component.options.amount
|
|
30
|
+
this._paymentDescription = component.options.description
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* @returns {PaymentSettings}
|
|
35
|
+
*/
|
|
36
|
+
get values() {
|
|
37
|
+
return {
|
|
38
|
+
...super.values,
|
|
39
|
+
paymentAmount: this._paymentAmount,
|
|
40
|
+
paymentDescription: this._paymentDescription
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export class PaymentQuestion extends Question {
|
|
46
|
+
/**
|
|
47
|
+
* @type {ComponentType}
|
|
48
|
+
*/
|
|
49
|
+
componentType = ComponentType.PaymentField
|
|
50
|
+
/**
|
|
51
|
+
* @type {string}
|
|
52
|
+
* @protected
|
|
53
|
+
*/
|
|
54
|
+
_questionTemplate = PreviewComponent.PATH + 'paymentfield.njk'
|
|
55
|
+
_fieldName = 'PaymentField'
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* @type {number}
|
|
59
|
+
* @protected
|
|
60
|
+
*/
|
|
61
|
+
_paymentAmount = 0
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* @type {string}
|
|
65
|
+
* @protected
|
|
66
|
+
*/
|
|
67
|
+
_paymentDescription = ''
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* @param {PaymentElements} htmlElements
|
|
71
|
+
* @param {QuestionRenderer} questionRenderer
|
|
72
|
+
*/
|
|
73
|
+
constructor(htmlElements, questionRenderer) {
|
|
74
|
+
super(htmlElements, questionRenderer)
|
|
75
|
+
this._paymentAmount = htmlElements.values.paymentAmount
|
|
76
|
+
this._paymentDescription = htmlElements.values.paymentDescription
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
get paymentAmount() {
|
|
80
|
+
return this._paymentAmount
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* @param {number} val
|
|
85
|
+
*/
|
|
86
|
+
set paymentAmount(val) {
|
|
87
|
+
this._paymentAmount = val
|
|
88
|
+
this.render()
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
get paymentDescription() {
|
|
92
|
+
return this._paymentDescription
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* @param {string} val
|
|
97
|
+
*/
|
|
98
|
+
set paymentDescription(val) {
|
|
99
|
+
this._paymentDescription = val
|
|
100
|
+
this.render()
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* @protected
|
|
105
|
+
* @returns {PaymentModel}
|
|
106
|
+
*/
|
|
107
|
+
_renderInput() {
|
|
108
|
+
const amount =
|
|
109
|
+
typeof this._paymentAmount === 'number'
|
|
110
|
+
? this._paymentAmount.toFixed(2)
|
|
111
|
+
: '0.00'
|
|
112
|
+
|
|
113
|
+
return {
|
|
114
|
+
...super._renderInput(),
|
|
115
|
+
amount,
|
|
116
|
+
description: this._paymentDescription || 'Payment description',
|
|
117
|
+
headingClasses: 'govuk-heading-m'
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* @import { PaymentSettings, PaymentElements, QuestionRenderer } from '~/src/form/form-editor/preview/types.js'
|
|
124
|
+
* @import { PaymentModel } from '~/src/form/form-editor/macros/types.js'
|
|
125
|
+
* @import { PaymentFieldComponent } from '~/src/components/types.js'
|
|
126
|
+
*/
|
|
@@ -100,6 +100,15 @@ export interface LocationElements extends DomElementsBase {
|
|
|
100
100
|
readonly values: LocationSettings
|
|
101
101
|
}
|
|
102
102
|
|
|
103
|
+
export interface PaymentSettings extends BaseSettings {
|
|
104
|
+
paymentAmount: number
|
|
105
|
+
paymentDescription: string
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export interface PaymentElements extends DomElementsBase {
|
|
109
|
+
readonly values: PaymentSettings
|
|
110
|
+
}
|
|
111
|
+
|
|
103
112
|
export interface LocationFieldModel extends QuestionBaseModel {
|
|
104
113
|
userClasses: string
|
|
105
114
|
fieldset: {
|
|
@@ -169,12 +178,19 @@ export interface SectionForPreview {
|
|
|
169
178
|
pages: { title: string }[]
|
|
170
179
|
}
|
|
171
180
|
|
|
181
|
+
export interface PaymentPreviewInfo {
|
|
182
|
+
hasPayment: boolean
|
|
183
|
+
description: string
|
|
184
|
+
amount: string
|
|
185
|
+
}
|
|
186
|
+
|
|
172
187
|
export interface SummaryPageElements extends PagePreviewBaseElements {
|
|
173
188
|
declaration: boolean
|
|
174
189
|
showConfirmationEmail: boolean
|
|
175
190
|
isConfirmationEmailSettingsPanel: boolean
|
|
176
191
|
sections?: SectionForPreview[]
|
|
177
192
|
unassignedPages?: { title: string }[]
|
|
193
|
+
payment?: PaymentPreviewInfo
|
|
178
194
|
}
|
|
179
195
|
|
|
180
196
|
export interface SummaryPageInitialState {
|
|
@@ -184,6 +200,7 @@ export interface SummaryPageInitialState {
|
|
|
184
200
|
isConfirmationEmailSettingsPanel: boolean
|
|
185
201
|
sections?: SectionForPreview[]
|
|
186
202
|
unassignedPages?: { title: string }[]
|
|
203
|
+
payment?: PaymentPreviewInfo
|
|
187
204
|
}
|
|
188
205
|
|
|
189
206
|
export type PreviewQuestion =
|
|
@@ -304,6 +304,16 @@ export interface FormEditor {
|
|
|
304
304
|
* Denotes if the UK address question supports postcode lookup
|
|
305
305
|
*/
|
|
306
306
|
usePostcodeLookup: string
|
|
307
|
+
|
|
308
|
+
/**
|
|
309
|
+
* Amount of payment in pounds
|
|
310
|
+
*/
|
|
311
|
+
paymentAmount: string
|
|
312
|
+
|
|
313
|
+
/**
|
|
314
|
+
* Description of the payment (will appear in the payment provider's pages)
|
|
315
|
+
*/
|
|
316
|
+
paymentDescription: string
|
|
307
317
|
}
|
|
308
318
|
|
|
309
319
|
export type FormEditorInputPage = Pick<
|
|
@@ -371,6 +381,8 @@ export type FormEditorInputQuestion = Pick<
|
|
|
371
381
|
| 'usePostcodeLookup'
|
|
372
382
|
| 'giveInstructions'
|
|
373
383
|
| 'instructionText'
|
|
384
|
+
| 'paymentAmount'
|
|
385
|
+
| 'paymentDescription'
|
|
374
386
|
>
|
|
375
387
|
|
|
376
388
|
export type FormEditorInputPageSettings = Pick<
|
|
@@ -539,6 +551,9 @@ export interface GovukField {
|
|
|
539
551
|
formGroup?: {
|
|
540
552
|
classes?: string
|
|
541
553
|
}
|
|
554
|
+
prefix?: {
|
|
555
|
+
text?: string
|
|
556
|
+
}
|
|
542
557
|
preContent?: {
|
|
543
558
|
path?: string
|
|
544
559
|
}
|
|
@@ -585,6 +600,8 @@ export interface FormEditorGovukField {
|
|
|
585
600
|
autoCompleteOptions?: GovukField
|
|
586
601
|
usePostcodeLookup?: GovukField
|
|
587
602
|
declarationText?: GovukField
|
|
603
|
+
paymentAmount?: GovukField
|
|
604
|
+
paymentDescription?: GovukField
|
|
588
605
|
errorMessage?: { text: string }
|
|
589
606
|
}
|
|
590
607
|
|
package/src/pages/helpers.ts
CHANGED
|
@@ -129,6 +129,12 @@ export function onlyDeclarationComponents(components: ComponentDef[]): boolean {
|
|
|
129
129
|
.every((component) => component.type === ComponentType.DeclarationField)
|
|
130
130
|
}
|
|
131
131
|
|
|
132
|
+
export function includesPaymentField(components: ComponentDef[]): boolean {
|
|
133
|
+
return components.some(
|
|
134
|
+
(component) => component.type === ComponentType.PaymentField
|
|
135
|
+
)
|
|
136
|
+
}
|
|
137
|
+
|
|
132
138
|
const SHOW_REPEATER_CONTROLLERS = [ControllerType.Page, ControllerType.Repeat]
|
|
133
139
|
|
|
134
140
|
export function showRepeaterSettings(page: Page): boolean {
|
|
@@ -142,6 +148,9 @@ export function showRepeaterSettings(page: Page): boolean {
|
|
|
142
148
|
if (onlyDeclarationComponents(page.components)) {
|
|
143
149
|
return false
|
|
144
150
|
}
|
|
151
|
+
if (includesPaymentField(page.components)) {
|
|
152
|
+
return false
|
|
153
|
+
}
|
|
145
154
|
}
|
|
146
155
|
return true
|
|
147
156
|
}
|
|
@@ -218,3 +227,26 @@ export function replaceCustomControllers(definition: FormDefinition) {
|
|
|
218
227
|
})
|
|
219
228
|
} as FormDefinition
|
|
220
229
|
}
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* Helper function to determine if the current page contains a payment question
|
|
233
|
+
* @param page - the page of the form
|
|
234
|
+
* @returns {boolean}
|
|
235
|
+
*/
|
|
236
|
+
export function isPaymentPage(page: Page | undefined) {
|
|
237
|
+
if (hasComponentsEvenIfNoNext(page)) {
|
|
238
|
+
return page.components.some(
|
|
239
|
+
(comp) => comp.type === ComponentType.PaymentField
|
|
240
|
+
)
|
|
241
|
+
}
|
|
242
|
+
return false
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* Helper function to determine if the current page is an end page i.e. summary page or payment page
|
|
247
|
+
* @param page - the page of the form
|
|
248
|
+
* @returns {boolean}
|
|
249
|
+
*/
|
|
250
|
+
export function isEndPage(page: Page | undefined) {
|
|
251
|
+
return isSummaryPage(page) || isPaymentPage(page)
|
|
252
|
+
}
|