@defra/forms-model 3.0.713 → 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/dist/module/form/form-definition/constants.js +1 -0
- package/dist/module/form/form-definition/constants.js.map +1 -1
- package/dist/module/form/form-definition/helpers.js +30 -0
- package/dist/module/form/form-definition/helpers.js.map +1 -1
- package/dist/module/form/form-definition/index.js +2 -2
- package/dist/module/form/form-definition/index.js.map +1 -1
- package/dist/module/form/form-editor/index.js +1 -1
- package/dist/module/form/form-editor/index.js.map +1 -1
- package/dist/module/form/form-submission/index.js +2 -1
- package/dist/module/form/form-submission/index.js.map +1 -1
- package/dist/module/form/form-submission/types.js.map +1 -1
- package/dist/types/common/search/index.d.ts +4 -4
- package/dist/types/form/form-definition/constants.d.ts +1 -0
- package/dist/types/form/form-definition/constants.d.ts.map +1 -1
- package/dist/types/form/form-definition/helpers.d.ts +23 -0
- package/dist/types/form/form-definition/helpers.d.ts.map +1 -1
- package/dist/types/form/form-definition/index.d.ts +3 -3
- package/dist/types/form/form-definition/index.d.ts.map +1 -1
- package/dist/types/form/form-editor/index.d.ts +16 -22
- package/dist/types/form/form-editor/index.d.ts.map +1 -1
- package/dist/types/form/form-submission/index.d.ts.map +1 -1
- package/dist/types/form/form-submission/types.d.ts +2 -0
- package/dist/types/form/form-submission/types.d.ts.map +1 -1
- package/package.json +5 -5
- package/src/form/form-definition/constants.ts +2 -0
- package/src/form/form-definition/helpers.ts +49 -0
- package/src/form/form-definition/index.ts +2 -1
- package/src/form/form-editor/index.ts +1 -1
- package/src/form/form-submission/index.ts +2 -1
- package/src/form/form-submission/types.ts +2 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/form/form-submission/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,qBAAqB,EAC1B,KAAK,8BAA8B,EACnC,KAAK,mCAAmC,EACxC,KAAK,4BAA4B,EACjC,KAAK,0BAA0B,EAChC,MAAM,qCAAqC,CAAA;AAS5C;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IAEZ;;OAEG;IACH,KAAK,EAAE,MAAM,CAAA;IAEb;;OAEG;IACH,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IAEZ;;OAEG;IACH,KAAK,EAAE,MAAM,CAAA;IAEb;;OAEG;IACH,KAAK,EAAE,YAAY,EAAE,EAAE,CAAA;CACxB;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;IAEnB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAA;IAErB;;OAEG;IACH,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,yBAAyB;IACxC;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;IAEnB;;OAEG;IACH,OAAO,EAAE,0BAA0B,CAAA;IAEnC;;;OAGG;IACH,UAAU,EAAE,wBAAwB,EAAE,CAAA;CACvC;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,YAAY,EAAE,MAAM,CAAA;IAEpB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAA;IAEjB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;OAEG;IACH,IAAI,EAAE,YAAY,EAAE,CAAA;IAEpB;;OAEG;IACH,SAAS,EAAE,eAAe,EAAE,CAAA;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE;QACN,KAAK,EAAE;YACL,IAAI,EAAE,MAAM,CAAA;YACZ,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;SAClC,CAAA;KACF,CAAA;CACF;AAED,MAAM,WAAW,sBAAsB;IACrC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,CAAA;QACV,KAAK,EAAE,MAAM,CAAA;QACb,MAAM,EAAE,UAAU,CAAA;QAClB,SAAS,EAAE,OAAO,CAAA;QAClB,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE;QACR,QAAQ,EAAE,qBAAqB,CAAA;QAC/B,MAAM,EAAE,MAAM,CAAA;KACf,CAAA;IACD,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,UAAU;IACzB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACnB;AAED,MAAM,WAAW,wBAAwB;IACvC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,CAAA;QACV,KAAK,EAAE,MAAM,CAAA;QACb,MAAM,EAAE,UAAU,CAAA;QAClB,SAAS,EAAE,OAAO,CAAA;QAClB,OAAO,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/form/form-submission/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,qBAAqB,EAC1B,KAAK,8BAA8B,EACnC,KAAK,mCAAmC,EACxC,KAAK,4BAA4B,EACjC,KAAK,0BAA0B,EAChC,MAAM,qCAAqC,CAAA;AAS5C;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IAEZ;;OAEG;IACH,KAAK,EAAE,MAAM,CAAA;IAEb;;OAEG;IACH,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IAEZ;;OAEG;IACH,KAAK,EAAE,MAAM,CAAA;IAEb;;OAEG;IACH,KAAK,EAAE,YAAY,EAAE,EAAE,CAAA;CACxB;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;IAEnB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAA;IAErB;;OAEG;IACH,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,yBAAyB;IACxC;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;IAEnB;;OAEG;IACH,OAAO,EAAE,0BAA0B,CAAA;IAEnC;;;OAGG;IACH,UAAU,EAAE,wBAAwB,EAAE,CAAA;CACvC;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,YAAY,EAAE,MAAM,CAAA;IAEpB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAA;IAEjB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;OAEG;IACH,IAAI,EAAE,YAAY,EAAE,CAAA;IAEpB;;OAEG;IACH,SAAS,EAAE,eAAe,EAAE,CAAA;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE;QACN,KAAK,EAAE;YACL,IAAI,EAAE,MAAM,CAAA;YACZ,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;SAClC,CAAA;KACF,CAAA;CACF;AAED,MAAM,WAAW,sBAAsB;IACrC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,CAAA;QACV,KAAK,EAAE,MAAM,CAAA;QACb,MAAM,EAAE,UAAU,CAAA;QAClB,SAAS,EAAE,OAAO,CAAA;QAClB,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE;QACR,QAAQ,EAAE,qBAAqB,CAAA;QAC/B,MAAM,EAAE,MAAM,CAAA;KACf,CAAA;IACD,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,UAAU;IACzB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACnB;AAED,MAAM,WAAW,wBAAwB;IACvC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,CAAA;QACV,KAAK,EAAE,MAAM,CAAA;QACb,MAAM,EAAE,UAAU,CAAA;QAClB,SAAS,EAAE,OAAO,CAAA;QAClB,OAAO,EAAE,MAAM,CAAA;QACf,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,CAAA;IACD,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE;QACJ,GAAG,EAAE,MAAM,CAAA;QACX,MAAM,EAAE,MAAM,CAAA;KACf,CAAA;IACD,KAAK,EAAE,UAAU,CAAA;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,mCAAmC,CAAA;IAClD,MAAM,EAAE,4BAA4B,CAAA;IACpC,SAAS,EAAE,IAAI,CAAA;IACf,gBAAgB,EAAE,IAAI,CAAA;IACtB,QAAQ,EAAE,8BAA8B,CAAC,MAAM,CAAA;IAC/C,IAAI,EACA,0BAA0B,CAAC,oBAAoB,GAC/C,0BAA0B,CAAC,uBAAuB,CAAA;IACtD,IAAI,EAAE,sBAAsB,CAAA;CAC7B;AAED,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,mCAAmC,CAAA;IAClD,MAAM,EAAE,4BAA4B,CAAA;IACpC,SAAS,EAAE,IAAI,CAAA;IACf,gBAAgB,EAAE,IAAI,CAAA;IACtB,QAAQ,EAAE,8BAA8B,CAAC,MAAM,CAAA;IAC/C,IAAI,EAAE,0BAA0B,CAAC,uBAAuB,CAAA;IACxD,IAAI,EAAE,wBAAwB,CAAA;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,CAAA;QACV,MAAM,EAAE,UAAU,CAAA;QAClB,SAAS,EAAE,OAAO,CAAA;QAClB,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE;QACR,QAAQ,EAAE,qBAAqB,CAAA;QAC/B,MAAM,EAAE,MAAM,CAAA;KACf,CAAA;IACD,KAAK,EAAE,MAAM,CAAA;IACb,uBAAuB,EAAE,MAAM,CAAA;IAC/B,SAAS,EAAE,IAAI,CAAA;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,CAAA;QACV,MAAM,EAAE,UAAU,CAAA;QAClB,SAAS,EAAE,OAAO,CAAA;QAClB,OAAO,EAAE,MAAM,CAAA;QACf,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,CAAA;IACD,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE;QACJ,GAAG,EAAE,MAAM,CAAA;QACX,MAAM,EAAE,MAAM,CAAA;KACf,CAAA;IACD,KAAK,EAAE,UAAU,CAAA;IACjB,SAAS,EAAE,IAAI,CAAA;CAChB;AAED,MAAM,MAAM,aAAa,GAAG,kBAAkB,CAAA;AAE9C,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,IAAI,CAAA;CACtB;AAED,MAAM,WAAW,qBAAsB,SAAQ,gBAAgB;IAC7D,EAAE,EAAE,MAAM,CAAA;CACX;AAED,MAAM,MAAM,iBAAiB,GAAG,aAAa,GAAG,gBAAgB,CAAA;AAEhE,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,qBAAqB,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@defra/forms-model",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.2",
|
|
4
4
|
"description": "A hapi plugin providing the model for Defra forms",
|
|
5
5
|
"homepage": "https://github.com/DEFRA/forms-model#readme",
|
|
6
6
|
"types": "dist/types/index.d.ts",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"test:watch": "jest --color --watch"
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@joi/date": "^
|
|
45
|
+
"@joi/date": "^3.0.0",
|
|
46
46
|
"marked": "^15.0.12",
|
|
47
47
|
"nanoid": "^5.0.7",
|
|
48
48
|
"slug": "^11.0.0",
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"@babel/preset-env": "^7.29.7",
|
|
55
55
|
"@babel/preset-typescript": "^7.29.7",
|
|
56
56
|
"@types/jest": "^29.5.14",
|
|
57
|
-
"@types/node": "^
|
|
57
|
+
"@types/node": "^24.19.2",
|
|
58
58
|
"@types/slug": "^5.0.9",
|
|
59
59
|
"@typescript-eslint/eslint-plugin": "^8.34.0",
|
|
60
60
|
"@typescript-eslint/parser": "^8.27.0",
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
"globals": "^17.6.0",
|
|
70
70
|
"husky": "^9.1.7",
|
|
71
71
|
"jest": "^29.7.0",
|
|
72
|
-
"joi": "^
|
|
72
|
+
"joi": "^18.2.9",
|
|
73
73
|
"joi-to-json": "^4.3.2",
|
|
74
74
|
"lint-staged": "^17.0.7",
|
|
75
75
|
"neostandard": "^0.12.2",
|
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
"typescript-eslint": "^8.56.1"
|
|
80
80
|
},
|
|
81
81
|
"peerDependencies": {
|
|
82
|
-
"joi": "^
|
|
82
|
+
"joi": "^18.0.0"
|
|
83
83
|
},
|
|
84
84
|
"engines": {
|
|
85
85
|
"node": "^24.19.0",
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ComponentType } from '~/src/components/enums.js'
|
|
2
2
|
import { type ComponentDef } from '~/src/components/types.js'
|
|
3
3
|
import { type ConditionListItemRefValueDataV2 } from '~/src/conditions/types.js'
|
|
4
|
+
import { FORM_ACTION_COPY } from '~/src/form/form-definition/constants.js'
|
|
4
5
|
import {
|
|
5
6
|
type FormDefinition,
|
|
6
7
|
type Output
|
|
@@ -122,3 +123,51 @@ export function isFeedbackForm(definition: FormDefinition | undefined) {
|
|
|
122
123
|
? definition.pages.some((p) => p.controller === feedback)
|
|
123
124
|
: false
|
|
124
125
|
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Checks whether the form allows answers to be reused from a previous
|
|
129
|
+
* submission, as set by the metadata.options.allowCopy flag. forms-model does
|
|
130
|
+
* not define metadata.options, so its type is checked here
|
|
131
|
+
* @param {FormDefinition} formDefinition
|
|
132
|
+
* @returns {boolean}
|
|
133
|
+
*/
|
|
134
|
+
export function isAllowCopyEnabled(formDefinition: FormDefinition): boolean {
|
|
135
|
+
const options = formDefinition.metadata?.options
|
|
136
|
+
|
|
137
|
+
return (
|
|
138
|
+
typeof options === 'object' &&
|
|
139
|
+
options !== null &&
|
|
140
|
+
'allowCopy' in options &&
|
|
141
|
+
options.allowCopy === true
|
|
142
|
+
)
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Retrieves the action details of the form submission, if any.
|
|
147
|
+
* @param {{ custom?: { actionName?: string, actionReferenceNumber?: string } }} messageMeta
|
|
148
|
+
* @param {FormDefinition} formDefinition
|
|
149
|
+
* @returns
|
|
150
|
+
*/
|
|
151
|
+
export function getFormAction(
|
|
152
|
+
messageMeta:
|
|
153
|
+
| {
|
|
154
|
+
custom?: { actionName?: string; actionReferenceNumber?: string }
|
|
155
|
+
}
|
|
156
|
+
| undefined,
|
|
157
|
+
formDefinition: FormDefinition
|
|
158
|
+
) {
|
|
159
|
+
// 'Copy' action
|
|
160
|
+
if (
|
|
161
|
+
isAllowCopyEnabled(formDefinition) &&
|
|
162
|
+
messageMeta?.custom?.actionName === FORM_ACTION_COPY &&
|
|
163
|
+
messageMeta.custom.actionReferenceNumber
|
|
164
|
+
) {
|
|
165
|
+
return {
|
|
166
|
+
name: FORM_ACTION_COPY,
|
|
167
|
+
referenceNumber:
|
|
168
|
+
/** @type {string} */ messageMeta.custom.actionReferenceNumber
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
return undefined
|
|
173
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import JoiDate from '@joi/date'
|
|
1
|
+
import { JoiDate } from '@joi/date'
|
|
2
2
|
import JoiBase, { type CustomHelpers, type LanguageMessages } from 'joi'
|
|
3
3
|
import { v4 as uuidV4 } from 'uuid'
|
|
4
4
|
|
|
@@ -1403,6 +1403,7 @@ export const formDefinitionV2Schema = formDefinitionSchema
|
|
|
1403
1403
|
.description('Form definition schema for V2')
|
|
1404
1404
|
|
|
1405
1405
|
export {
|
|
1406
|
+
FORM_ACTION_COPY,
|
|
1406
1407
|
MAX_NUMBER_OF_REPEAT_ITEMS,
|
|
1407
1408
|
MIN_NUMBER_OF_REPEAT_ITEMS
|
|
1408
1409
|
} from '~/src/form/form-definition/constants.js'
|
|
@@ -176,7 +176,8 @@ export const saveAndExitV2MessageData = Joi.object<SaveAndExitV2MessageData>()
|
|
|
176
176
|
title: Joi.string().required(),
|
|
177
177
|
status: Joi.string().valid(FormStatus.Draft, FormStatus.Live).required(),
|
|
178
178
|
isPreview: Joi.boolean().required(),
|
|
179
|
-
baseUrl: Joi.string().required()
|
|
179
|
+
baseUrl: Joi.string().required(),
|
|
180
|
+
language: Joi.string().optional()
|
|
180
181
|
}).label('SaveAndExitForm'),
|
|
181
182
|
email: Joi.string().required(),
|
|
182
183
|
auth: Joi.object({
|
|
@@ -187,6 +187,7 @@ export interface SaveAndExitV2MessageData {
|
|
|
187
187
|
status: FormStatus
|
|
188
188
|
isPreview: boolean
|
|
189
189
|
baseUrl: string
|
|
190
|
+
language?: string
|
|
190
191
|
}
|
|
191
192
|
email: string
|
|
192
193
|
auth: {
|
|
@@ -245,6 +246,7 @@ export interface SaveAndExitV2Record {
|
|
|
245
246
|
status: FormStatus
|
|
246
247
|
isPreview: boolean
|
|
247
248
|
baseUrl: string
|
|
249
|
+
language?: string
|
|
248
250
|
}
|
|
249
251
|
email: string
|
|
250
252
|
auth: {
|