@defra/forms-model 3.0.479 → 3.0.480
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/conditions/index.js +1 -1
- package/dist/module/conditions/index.js.map +1 -1
- package/dist/module/conditions/migration.js +50 -35
- package/dist/module/conditions/migration.js.map +1 -1
- package/dist/module/conditions/types.js.map +1 -1
- package/dist/module/form/form-definition/index.js +29 -20
- package/dist/module/form/form-definition/index.js.map +1 -1
- package/dist/types/conditions/index.d.ts +1 -1
- package/dist/types/conditions/index.d.ts.map +1 -1
- package/dist/types/conditions/migration.d.ts +7 -6
- package/dist/types/conditions/migration.d.ts.map +1 -1
- package/dist/types/conditions/types.d.ts +9 -20
- package/dist/types/conditions/types.d.ts.map +1 -1
- package/dist/types/form/form-definition/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/schemas/form-definition-schema.json +0 -12
- package/schemas/form-definition-v2-schema.json +43 -5
- package/src/conditions/index.ts +1 -0
- package/src/conditions/migration.ts +56 -50
- package/src/conditions/types.ts +12 -27
- package/src/form/form-definition/index.ts +47 -81
@@ -4,17 +4,14 @@ import {
|
|
4
4
|
} from '~/src/components/types.js'
|
5
5
|
import { ConditionType, type Coordinator } from '~/src/conditions/enums.js'
|
6
6
|
import {
|
7
|
-
type ConditionBooleanValueDataV2,
|
8
7
|
type ConditionData,
|
9
8
|
type ConditionDataV2,
|
10
|
-
type ConditionDateValueDataV2,
|
11
9
|
type ConditionListItemRefValueDataV2,
|
12
|
-
type ConditionNumberValueDataV2,
|
13
10
|
type ConditionRefData,
|
14
11
|
type ConditionRefDataV2,
|
15
|
-
type ConditionStringValueDataV2,
|
16
12
|
type ConditionValueData,
|
17
|
-
type
|
13
|
+
type RelativeDateValueData,
|
14
|
+
type RelativeDateValueDataV2
|
18
15
|
} from '~/src/conditions/types.js'
|
19
16
|
import {
|
20
17
|
type ConditionWrapper,
|
@@ -22,34 +19,28 @@ import {
|
|
22
19
|
type List
|
23
20
|
} from '~/src/form/form-definition/types.js'
|
24
21
|
|
25
|
-
export function isConditionListItemRefValueDataV2(
|
26
|
-
|
27
|
-
): value is ConditionListItemRefValueDataV2 {
|
28
|
-
return value.type === ConditionType.ListItemRef
|
22
|
+
export function isConditionListItemRefValueDataV2(condition: ConditionDataV2) {
|
23
|
+
return condition.type === ConditionType.ListItemRef
|
29
24
|
}
|
30
25
|
|
31
|
-
export function isConditionStringValueDataV2(
|
32
|
-
|
33
|
-
): value is ConditionStringValueDataV2 {
|
34
|
-
return value.type === ConditionType.StringValue
|
26
|
+
export function isConditionStringValueDataV2(condition: ConditionDataV2) {
|
27
|
+
return condition.type === ConditionType.StringValue
|
35
28
|
}
|
36
29
|
|
37
|
-
export function isConditionBooleanValueDataV2(
|
38
|
-
|
39
|
-
): value is ConditionBooleanValueDataV2 {
|
40
|
-
return value.type === ConditionType.BooleanValue
|
30
|
+
export function isConditionBooleanValueDataV2(condition: ConditionDataV2) {
|
31
|
+
return condition.type === ConditionType.BooleanValue
|
41
32
|
}
|
42
33
|
|
43
|
-
export function isConditionNumberValueDataV2(
|
44
|
-
|
45
|
-
): value is ConditionNumberValueDataV2 {
|
46
|
-
return value.type === ConditionType.NumberValue
|
34
|
+
export function isConditionNumberValueDataV2(condition: ConditionDataV2) {
|
35
|
+
return condition.type === ConditionType.NumberValue
|
47
36
|
}
|
48
37
|
|
49
|
-
export function isConditionDateValueDataV2(
|
50
|
-
|
51
|
-
|
52
|
-
|
38
|
+
export function isConditionDateValueDataV2(condition: ConditionDataV2) {
|
39
|
+
return condition.type === ConditionType.DateValue
|
40
|
+
}
|
41
|
+
|
42
|
+
export function isConditionRelativeDateValueDataV2(condition: ConditionDataV2) {
|
43
|
+
return condition.type === ConditionType.RelativeDate
|
53
44
|
}
|
54
45
|
|
55
46
|
function getListItem(model: RuntimeFormModel, listId: string, itemId: string) {
|
@@ -69,9 +60,10 @@ function getListItem(model: RuntimeFormModel, listId: string, itemId: string) {
|
|
69
60
|
}
|
70
61
|
|
71
62
|
function createConditionValueDataFromListItemRefV2(
|
72
|
-
|
63
|
+
condition: ConditionDataV2,
|
73
64
|
model: RuntimeFormModel
|
74
65
|
): ConditionValueData {
|
66
|
+
const value = condition.value as ConditionListItemRefValueDataV2
|
75
67
|
const refValue = getListItem(model, value.listId, value.itemId)
|
76
68
|
|
77
69
|
return {
|
@@ -82,44 +74,56 @@ function createConditionValueDataFromListItemRefV2(
|
|
82
74
|
}
|
83
75
|
|
84
76
|
function createConditionValueDataFromStringOrDateValueDataV2(
|
85
|
-
|
77
|
+
condition: ConditionDataV2
|
86
78
|
): ConditionValueData {
|
87
79
|
return {
|
88
80
|
type: ConditionType.Value,
|
89
|
-
value:
|
90
|
-
display:
|
81
|
+
value: condition.value as string,
|
82
|
+
display: condition.value as string
|
91
83
|
}
|
92
84
|
}
|
93
85
|
|
94
86
|
function createConditionValueDataFromStringValueDataV2(
|
95
|
-
|
87
|
+
condition: ConditionDataV2
|
96
88
|
): ConditionValueData {
|
97
|
-
return createConditionValueDataFromStringOrDateValueDataV2(
|
89
|
+
return createConditionValueDataFromStringOrDateValueDataV2(condition)
|
98
90
|
}
|
99
91
|
|
100
92
|
function createConditionValueDataFromDateValueDataV2(
|
101
|
-
|
93
|
+
condition: ConditionDataV2
|
102
94
|
): ConditionValueData {
|
103
|
-
return createConditionValueDataFromStringOrDateValueDataV2(
|
95
|
+
return createConditionValueDataFromStringOrDateValueDataV2(condition)
|
96
|
+
}
|
97
|
+
|
98
|
+
function createConditionValueDataFromRelativeDateValueDataV2(
|
99
|
+
condition: ConditionDataV2
|
100
|
+
): RelativeDateValueData {
|
101
|
+
const value = condition.value as RelativeDateValueDataV2
|
102
|
+
return {
|
103
|
+
type: ConditionType.RelativeDate,
|
104
|
+
period: value.period.toString(),
|
105
|
+
unit: value.unit,
|
106
|
+
direction: value.direction
|
107
|
+
}
|
104
108
|
}
|
105
109
|
|
106
110
|
function createConditionValueDataFromNumberValueDataV2(
|
107
|
-
|
111
|
+
condition: ConditionDataV2
|
108
112
|
): ConditionValueData {
|
109
113
|
return {
|
110
114
|
type: ConditionType.Value,
|
111
|
-
value:
|
112
|
-
display:
|
115
|
+
value: (condition.value as number).toString(),
|
116
|
+
display: (condition.value as number).toString()
|
113
117
|
}
|
114
118
|
}
|
115
119
|
|
116
120
|
function createConditionValueDataFromBooleanValueDataV2(
|
117
|
-
|
121
|
+
condition: ConditionDataV2
|
118
122
|
): ConditionValueData {
|
119
123
|
return {
|
120
124
|
type: ConditionType.Value,
|
121
|
-
value:
|
122
|
-
display:
|
125
|
+
value: (condition.value as boolean).toString(),
|
126
|
+
display: (condition.value as boolean) ? 'Yes' : 'No'
|
123
127
|
}
|
124
128
|
}
|
125
129
|
|
@@ -141,18 +145,20 @@ function convertConditionDataV2(
|
|
141
145
|
}
|
142
146
|
|
143
147
|
let newValue
|
144
|
-
if (isConditionListItemRefValueDataV2(condition
|
145
|
-
newValue = createConditionValueDataFromListItemRefV2(condition
|
146
|
-
} else if (isConditionStringValueDataV2(condition
|
147
|
-
newValue = createConditionValueDataFromStringValueDataV2(condition
|
148
|
-
} else if (isConditionBooleanValueDataV2(condition
|
149
|
-
newValue = createConditionValueDataFromBooleanValueDataV2(condition
|
150
|
-
} else if (isConditionNumberValueDataV2(condition
|
151
|
-
newValue = createConditionValueDataFromNumberValueDataV2(condition
|
152
|
-
} else if (isConditionDateValueDataV2(condition
|
153
|
-
newValue = createConditionValueDataFromDateValueDataV2(condition
|
148
|
+
if (isConditionListItemRefValueDataV2(condition)) {
|
149
|
+
newValue = createConditionValueDataFromListItemRefV2(condition, model)
|
150
|
+
} else if (isConditionStringValueDataV2(condition)) {
|
151
|
+
newValue = createConditionValueDataFromStringValueDataV2(condition)
|
152
|
+
} else if (isConditionBooleanValueDataV2(condition)) {
|
153
|
+
newValue = createConditionValueDataFromBooleanValueDataV2(condition)
|
154
|
+
} else if (isConditionNumberValueDataV2(condition)) {
|
155
|
+
newValue = createConditionValueDataFromNumberValueDataV2(condition)
|
156
|
+
} else if (isConditionDateValueDataV2(condition)) {
|
157
|
+
newValue = createConditionValueDataFromDateValueDataV2(condition)
|
158
|
+
} else if (isConditionRelativeDateValueDataV2(condition)) {
|
159
|
+
newValue = createConditionValueDataFromRelativeDateValueDataV2(condition)
|
154
160
|
} else {
|
155
|
-
|
161
|
+
throw Error('Unsupported condition type')
|
156
162
|
}
|
157
163
|
|
158
164
|
return {
|
package/src/conditions/types.ts
CHANGED
@@ -17,35 +17,20 @@ export interface ConditionValueData {
|
|
17
17
|
display: string
|
18
18
|
}
|
19
19
|
|
20
|
-
export interface
|
21
|
-
type: ConditionType.
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
export interface ConditionBooleanValueDataV2 {
|
26
|
-
type: ConditionType.BooleanValue
|
27
|
-
value: boolean
|
28
|
-
}
|
29
|
-
|
30
|
-
export interface ConditionNumberValueDataV2 {
|
31
|
-
type: ConditionType.NumberValue
|
32
|
-
value: number
|
33
|
-
}
|
34
|
-
|
35
|
-
export interface ConditionDateValueDataV2 {
|
36
|
-
type: ConditionType.DateValue
|
37
|
-
value: string
|
20
|
+
export interface RelativeDateValueData {
|
21
|
+
type: ConditionType.RelativeDate
|
22
|
+
period: string
|
23
|
+
unit: DateUnits
|
24
|
+
direction: DateDirections
|
38
25
|
}
|
39
26
|
|
40
27
|
export interface ConditionListItemRefValueDataV2 {
|
41
|
-
type: ConditionType.ListItemRef
|
42
28
|
listId: string
|
43
29
|
itemId: string
|
44
30
|
}
|
45
31
|
|
46
|
-
export interface
|
47
|
-
|
48
|
-
period: string
|
32
|
+
export interface RelativeDateValueDataV2 {
|
33
|
+
period: number
|
49
34
|
unit: DateUnits
|
50
35
|
direction: DateDirections
|
51
36
|
}
|
@@ -65,16 +50,16 @@ export interface ConditionData {
|
|
65
50
|
|
66
51
|
export type ConditionValueDataV2 =
|
67
52
|
| ConditionListItemRefValueDataV2
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
| RelativeDateValueData
|
53
|
+
| RelativeDateValueDataV2
|
54
|
+
| string
|
55
|
+
| boolean
|
56
|
+
| number
|
73
57
|
|
74
58
|
export interface ConditionDataV2 {
|
75
59
|
id: string
|
76
60
|
componentId: string
|
77
61
|
operator: OperatorName
|
62
|
+
type: ConditionType
|
78
63
|
value: ConditionValueDataV2
|
79
64
|
}
|
80
65
|
|
@@ -8,22 +8,20 @@ import {
|
|
8
8
|
type ContentComponentsDef,
|
9
9
|
type FileUploadFieldComponent
|
10
10
|
} from '~/src/components/types.js'
|
11
|
+
import { ConditionType, OperatorName } from '~/src/conditions/enums.js'
|
11
12
|
import {
|
12
|
-
type ConditionBooleanValueDataV2,
|
13
13
|
type ConditionData,
|
14
14
|
type ConditionDataV2,
|
15
|
-
type ConditionDateValueDataV2,
|
16
15
|
type ConditionFieldData,
|
17
16
|
type ConditionGroupData,
|
18
17
|
type ConditionGroupDataV2,
|
19
18
|
type ConditionListItemRefValueDataV2,
|
20
|
-
type ConditionNumberValueDataV2,
|
21
19
|
type ConditionRefData,
|
22
20
|
type ConditionRefDataV2,
|
23
|
-
type ConditionStringValueDataV2,
|
24
21
|
type ConditionValueData,
|
25
22
|
type ConditionsModelData,
|
26
|
-
type RelativeDateValueData
|
23
|
+
type RelativeDateValueData,
|
24
|
+
type RelativeDateValueDataV2
|
27
25
|
} from '~/src/conditions/types.js'
|
28
26
|
import {
|
29
27
|
SchemaVersion,
|
@@ -139,73 +137,10 @@ const conditionValueSchema = Joi.object<ConditionValueData>()
|
|
139
137
|
.description('Human-readable version of the value for display purposes')
|
140
138
|
})
|
141
139
|
|
142
|
-
const conditionStringValueDataSchemaV2 =
|
143
|
-
Joi.object<ConditionStringValueDataV2>()
|
144
|
-
.description('String value specification for a condition')
|
145
|
-
.keys({
|
146
|
-
type: Joi.string()
|
147
|
-
.trim()
|
148
|
-
.valid('StringValue')
|
149
|
-
.required()
|
150
|
-
.description('Type of the condition value, should be "StringValue"'),
|
151
|
-
value: Joi.string()
|
152
|
-
.trim()
|
153
|
-
.required()
|
154
|
-
.description('The actual value to compare against')
|
155
|
-
})
|
156
|
-
|
157
|
-
const conditionBooleanValueDataSchemaV2 =
|
158
|
-
Joi.object<ConditionBooleanValueDataV2>()
|
159
|
-
.description('Boolean value specification for a condition')
|
160
|
-
.keys({
|
161
|
-
type: Joi.string()
|
162
|
-
.trim()
|
163
|
-
.valid('BooleanValue')
|
164
|
-
.required()
|
165
|
-
.description('Type of the condition value, should be "BooleanValue"'),
|
166
|
-
value: Joi.boolean()
|
167
|
-
.required()
|
168
|
-
.description('The actual value to compare against')
|
169
|
-
})
|
170
|
-
|
171
|
-
const conditionNumberValueDataSchemaV2 =
|
172
|
-
Joi.object<ConditionNumberValueDataV2>()
|
173
|
-
.description('Number value specification for a condition')
|
174
|
-
.keys({
|
175
|
-
type: Joi.string()
|
176
|
-
.trim()
|
177
|
-
.valid('NumberValue')
|
178
|
-
.required()
|
179
|
-
.description('Type of the condition value, should be "NumberValue"'),
|
180
|
-
value: Joi.number()
|
181
|
-
.required()
|
182
|
-
.description('The actual value to compare against')
|
183
|
-
})
|
184
|
-
|
185
|
-
const conditionDateValueDataSchemaV2 = Joi.object<ConditionDateValueDataV2>()
|
186
|
-
.description('Date value specification for a condition')
|
187
|
-
.keys({
|
188
|
-
type: Joi.string()
|
189
|
-
.trim()
|
190
|
-
.valid('DateValue')
|
191
|
-
.required()
|
192
|
-
.description('Type of the condition value, should be "DateValue"'),
|
193
|
-
value: Joi.date()
|
194
|
-
.format('YYYY-MM-DD')
|
195
|
-
.raw()
|
196
|
-
.required()
|
197
|
-
.description('The actual value to compare against')
|
198
|
-
})
|
199
|
-
|
200
140
|
const conditionListItemRefDataSchemaV2 =
|
201
141
|
Joi.object<ConditionListItemRefValueDataV2>()
|
202
142
|
.description('List item ref specification for a condition')
|
203
143
|
.keys({
|
204
|
-
type: Joi.string()
|
205
|
-
.trim()
|
206
|
-
.valid('ListItemRef')
|
207
|
-
.required()
|
208
|
-
.description('Type of the condition value, should be "ListItemRef"'),
|
209
144
|
listId: Joi.string()
|
210
145
|
.trim()
|
211
146
|
.required()
|
@@ -224,14 +159,27 @@ const conditionListItemRefDataSchemaV2 =
|
|
224
159
|
.description('The id of the list item')
|
225
160
|
})
|
226
161
|
|
227
|
-
const
|
162
|
+
const relativeDateValueDataSchemaV2 = Joi.object<RelativeDateValueDataV2>()
|
228
163
|
.description('Relative date specification for date-based conditions')
|
229
164
|
.keys({
|
230
|
-
|
165
|
+
period: Joi.number()
|
166
|
+
.integer()
|
167
|
+
.positive()
|
168
|
+
.required()
|
169
|
+
.description('Numeric amount of the time period, as a string'),
|
170
|
+
unit: Joi.string()
|
171
|
+
.trim()
|
172
|
+
.required()
|
173
|
+
.description('Time unit (e.g. days, weeks, months, years)'),
|
174
|
+
direction: Joi.string()
|
231
175
|
.trim()
|
232
|
-
.valid('RelativeDate')
|
233
176
|
.required()
|
234
|
-
.description('
|
177
|
+
.description('Temporal direction, either "past" or "future"')
|
178
|
+
})
|
179
|
+
|
180
|
+
const relativeDateValueDataSchema = Joi.object<RelativeDateValueData>()
|
181
|
+
.description('Relative date specification for date-based conditions')
|
182
|
+
.keys({
|
235
183
|
period: Joi.string()
|
236
184
|
.trim()
|
237
185
|
.required()
|
@@ -320,18 +268,36 @@ export const conditionDataSchemaV2 = Joi.object<ConditionDataV2>()
|
|
320
268
|
),
|
321
269
|
operator: Joi.string()
|
322
270
|
.trim()
|
271
|
+
.valid(...Object.values(OperatorName))
|
323
272
|
.required()
|
324
273
|
.description('Comparison operator (equals, greaterThan, contains, etc.)'),
|
325
|
-
|
326
|
-
.
|
327
|
-
|
328
|
-
conditionBooleanValueDataSchemaV2,
|
329
|
-
conditionNumberValueDataSchemaV2,
|
330
|
-
conditionDateValueDataSchemaV2,
|
331
|
-
conditionListItemRefDataSchemaV2,
|
332
|
-
relativeDateValueDataSchema
|
333
|
-
)
|
274
|
+
type: Joi.string()
|
275
|
+
.trim()
|
276
|
+
.valid(...Object.values(ConditionType))
|
334
277
|
.required()
|
278
|
+
.description('Type of the condition value'),
|
279
|
+
value: Joi.any()
|
280
|
+
.required()
|
281
|
+
.description('The actual value to compare against')
|
282
|
+
.when('type', {
|
283
|
+
switch: [
|
284
|
+
{ is: ConditionType.BooleanValue, then: Joi.boolean() },
|
285
|
+
{ is: ConditionType.StringValue, then: Joi.string() },
|
286
|
+
{ is: ConditionType.NumberValue, then: Joi.number() },
|
287
|
+
{
|
288
|
+
is: ConditionType.DateValue,
|
289
|
+
then: Joi.date().format('YYYY-MM-DD').raw()
|
290
|
+
},
|
291
|
+
{
|
292
|
+
is: ConditionType.ListItemRef,
|
293
|
+
then: conditionListItemRefDataSchemaV2
|
294
|
+
},
|
295
|
+
{
|
296
|
+
is: ConditionType.RelativeDate,
|
297
|
+
then: relativeDateValueDataSchemaV2
|
298
|
+
}
|
299
|
+
]
|
300
|
+
})
|
335
301
|
.description(
|
336
302
|
'Value to compare the field against, either fixed or relative date'
|
337
303
|
)
|