@defra/forms-model 3.0.247 → 3.0.248
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/components/component-types.js +0 -7
- package/dist/module/components/component-types.js.map +1 -1
- package/dist/module/components/enums.js +0 -1
- package/dist/module/components/enums.js.map +1 -1
- package/dist/module/components/helpers.js +2 -2
- package/dist/module/components/helpers.js.map +1 -1
- package/dist/module/components/types.js.map +1 -1
- package/dist/module/conditions/condition-abstract.js.map +1 -1
- package/dist/module/conditions/condition-field.js.map +1 -1
- package/dist/module/conditions/condition-group-def.js.map +1 -1
- package/dist/module/conditions/condition-group.js.map +1 -1
- package/dist/module/conditions/condition-model.js +4 -4
- package/dist/module/conditions/condition-model.js.map +1 -1
- package/dist/module/conditions/condition-operators.js +21 -25
- package/dist/module/conditions/condition-operators.js.map +1 -1
- package/dist/module/conditions/condition-ref.js.map +1 -1
- package/dist/module/conditions/condition-values.js +17 -54
- package/dist/module/conditions/condition-values.js.map +1 -1
- package/dist/module/conditions/condition.js.map +1 -1
- package/dist/module/conditions/enums.js +7 -1
- package/dist/module/conditions/enums.js.map +1 -1
- package/dist/module/conditions/helpers.js.map +1 -1
- package/dist/module/conditions/index.js +3 -3
- package/dist/module/conditions/index.js.map +1 -1
- package/dist/module/conditions/types.js.map +1 -1
- package/dist/module/form/form-definition/index.js +22 -29
- package/dist/module/form/form-definition/index.js.map +1 -1
- package/dist/module/form/form-definition/types.js.map +1 -1
- package/dist/module/form/form-metadata/types.js.map +1 -1
- package/dist/types/components/component-types.d.ts.map +1 -1
- package/dist/types/components/enums.d.ts +0 -1
- package/dist/types/components/enums.d.ts.map +1 -1
- package/dist/types/components/helpers.d.ts.map +1 -1
- package/dist/types/components/types.d.ts +7 -12
- package/dist/types/components/types.d.ts.map +1 -1
- package/dist/types/conditions/condition-abstract.d.ts +3 -3
- package/dist/types/conditions/condition-abstract.d.ts.map +1 -1
- package/dist/types/conditions/condition-field.d.ts +6 -8
- package/dist/types/conditions/condition-field.d.ts.map +1 -1
- package/dist/types/conditions/condition-group-def.d.ts +5 -3
- package/dist/types/conditions/condition-group-def.d.ts.map +1 -1
- package/dist/types/conditions/condition-group.d.ts +11 -10
- package/dist/types/conditions/condition-group.d.ts.map +1 -1
- package/dist/types/conditions/condition-model.d.ts +9 -17
- package/dist/types/conditions/condition-model.d.ts.map +1 -1
- package/dist/types/conditions/condition-operators.d.ts +8 -14
- package/dist/types/conditions/condition-operators.d.ts.map +1 -1
- package/dist/types/conditions/condition-ref.d.ts +4 -4
- package/dist/types/conditions/condition-ref.d.ts.map +1 -1
- package/dist/types/conditions/condition-values.d.ts +13 -30
- package/dist/types/conditions/condition-values.d.ts.map +1 -1
- package/dist/types/conditions/condition.d.ts +5 -5
- package/dist/types/conditions/condition.d.ts.map +1 -1
- package/dist/types/conditions/enums.d.ts +6 -1
- package/dist/types/conditions/enums.d.ts.map +1 -1
- package/dist/types/conditions/helpers.d.ts +5 -2
- package/dist/types/conditions/helpers.d.ts.map +1 -1
- package/dist/types/conditions/index.d.ts +3 -3
- package/dist/types/conditions/index.d.ts.map +1 -1
- package/dist/types/conditions/types.d.ts +36 -37
- package/dist/types/conditions/types.d.ts.map +1 -1
- package/dist/types/form/form-definition/index.d.ts +0 -5
- package/dist/types/form/form-definition/index.d.ts.map +1 -1
- package/dist/types/form/form-definition/types.d.ts +6 -10
- package/dist/types/form/form-definition/types.d.ts.map +1 -1
- package/dist/types/form/form-metadata/types.d.ts +5 -0
- package/dist/types/form/form-metadata/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/component-types.ts +0 -8
- package/src/components/enums.ts +0 -1
- package/src/components/helpers.ts +1 -2
- package/src/components/types.ts +7 -17
- package/src/conditions/condition-abstract.ts +5 -5
- package/src/conditions/condition-field.ts +6 -4
- package/src/conditions/condition-group-def.ts +7 -3
- package/src/conditions/condition-group.ts +11 -10
- package/src/conditions/condition-model.ts +27 -25
- package/src/conditions/condition-operators.ts +29 -49
- package/src/conditions/condition-ref.ts +3 -3
- package/src/conditions/condition-values.ts +31 -89
- package/src/conditions/condition.ts +5 -5
- package/src/conditions/enums.ts +7 -1
- package/src/conditions/helpers.ts +10 -2
- package/src/conditions/index.ts +4 -6
- package/src/conditions/types.ts +47 -24
- package/src/form/form-definition/index.ts +47 -51
- package/src/form/form-definition/types.ts +6 -13
- package/src/form/form-metadata/types.ts +6 -0
@@ -1,15 +1,12 @@
|
|
1
1
|
import { ConditionValueAbstract } from '~/src/conditions/condition-value-abstract.js'
|
2
2
|
import { ConditionType, DateDirections } from '~/src/conditions/enums.js'
|
3
|
+
import { type DateUnits } from '~/src/conditions/enums.js'
|
3
4
|
import {
|
4
|
-
type
|
5
|
-
type
|
6
|
-
type TimeUnits
|
5
|
+
type ConditionValueData,
|
6
|
+
type RelativeDateValueData
|
7
7
|
} from '~/src/conditions/types.js'
|
8
8
|
|
9
|
-
export class ConditionValue
|
10
|
-
extends ConditionValueAbstract
|
11
|
-
implements ConditionValueFrom
|
12
|
-
{
|
9
|
+
export class ConditionValue extends ConditionValueAbstract {
|
13
10
|
type: ConditionType.Value
|
14
11
|
value: string
|
15
12
|
display: string
|
@@ -38,7 +35,7 @@ export class ConditionValue
|
|
38
35
|
return this.value
|
39
36
|
}
|
40
37
|
|
41
|
-
static from(obj: ConditionValue |
|
38
|
+
static from(obj: ConditionValue | ConditionValueData) {
|
42
39
|
return new ConditionValue(obj.value, obj.display)
|
43
40
|
}
|
44
41
|
|
@@ -47,120 +44,65 @@ export class ConditionValue
|
|
47
44
|
}
|
48
45
|
}
|
49
46
|
|
50
|
-
export
|
51
|
-
|
52
|
-
|
53
|
-
|
47
|
+
export class RelativeDateValue extends ConditionValueAbstract {
|
48
|
+
type: ConditionType.RelativeDate
|
49
|
+
period
|
50
|
+
unit
|
51
|
+
direction
|
54
52
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
DAYS: { display: 'day(s)', value: 'days' }
|
59
|
-
} as const
|
60
|
-
|
61
|
-
export const timeUnits: TimeUnits = {
|
62
|
-
HOURS: { display: 'hour(s)', value: 'hours' },
|
63
|
-
MINUTES: { display: 'minute(s)', value: 'minutes' },
|
64
|
-
SECONDS: { display: 'second(s)', value: 'seconds' }
|
65
|
-
} as const
|
66
|
-
|
67
|
-
export const dateTimeUnits: DateUnits & TimeUnits = {
|
68
|
-
...dateUnits,
|
69
|
-
...timeUnits
|
70
|
-
} as const
|
71
|
-
|
72
|
-
export class RelativeTimeValue
|
73
|
-
extends ConditionValueAbstract
|
74
|
-
implements RelativeTimeValueFrom
|
75
|
-
{
|
76
|
-
type: ConditionType.RelativeTime
|
77
|
-
timePeriod: string
|
78
|
-
timeUnit: DateTimeUnitValues
|
79
|
-
direction: DateDirections
|
80
|
-
timeOnly: boolean
|
81
|
-
|
82
|
-
constructor(
|
83
|
-
timePeriod: string,
|
84
|
-
timeUnit: DateTimeUnitValues,
|
85
|
-
direction: DateDirections,
|
86
|
-
timeOnly = false
|
87
|
-
) {
|
88
|
-
if (typeof timePeriod !== 'string') {
|
89
|
-
throw new Error("RelativeTimeValue param 'timePeriod' must be a string")
|
90
|
-
}
|
91
|
-
|
92
|
-
if (
|
93
|
-
!Object.values(dateTimeUnits)
|
94
|
-
.map((unit) => unit.value)
|
95
|
-
.includes(timeUnit)
|
96
|
-
) {
|
97
|
-
throw new Error(
|
98
|
-
"RelativeTimeValue param 'dateTimeUnits' must only include DateTimeUnitValues keys"
|
99
|
-
)
|
53
|
+
constructor(period: string, unit: DateUnits, direction: DateDirections) {
|
54
|
+
if (typeof period !== 'string') {
|
55
|
+
throw new Error("RelativeDateValue param 'period' must be a string")
|
100
56
|
}
|
101
57
|
|
102
58
|
if (!Object.values(DateDirections).includes(direction)) {
|
103
59
|
throw new Error(
|
104
|
-
"
|
60
|
+
"RelativeDateValue param 'direction' must be from enum DateDirections"
|
105
61
|
)
|
106
62
|
}
|
107
63
|
|
108
64
|
super()
|
109
65
|
|
110
|
-
this.type = ConditionType.
|
111
|
-
this.
|
112
|
-
this.
|
66
|
+
this.type = ConditionType.RelativeDate
|
67
|
+
this.period = period
|
68
|
+
this.unit = unit
|
113
69
|
this.direction = direction
|
114
|
-
this.timeOnly = timeOnly
|
115
70
|
}
|
116
71
|
|
117
72
|
toPresentationString() {
|
118
|
-
return `${this.
|
73
|
+
return `${this.period} ${this.unit} ${this.direction}`
|
119
74
|
}
|
120
75
|
|
121
76
|
toExpression(): string {
|
122
|
-
const
|
77
|
+
const period =
|
123
78
|
this.direction === DateDirections.PAST
|
124
|
-
? 0 - Number(this.
|
125
|
-
: this.
|
126
|
-
|
127
|
-
|
128
|
-
: `dateForComparison(${timePeriod}, '${this.timeUnit}')`
|
79
|
+
? 0 - Number(this.period)
|
80
|
+
: this.period
|
81
|
+
|
82
|
+
return `dateForComparison(${period}, '${this.unit}')`
|
129
83
|
}
|
130
84
|
|
131
|
-
static from(obj:
|
132
|
-
return new
|
133
|
-
obj.timePeriod,
|
134
|
-
obj.timeUnit,
|
135
|
-
obj.direction,
|
136
|
-
obj.timeOnly
|
137
|
-
)
|
85
|
+
static from(obj: RelativeDateValue | RelativeDateValueData) {
|
86
|
+
return new RelativeDateValue(obj.period, obj.unit, obj.direction)
|
138
87
|
}
|
139
88
|
|
140
89
|
clone() {
|
141
|
-
return
|
90
|
+
return RelativeDateValue.from(this)
|
142
91
|
}
|
143
92
|
}
|
144
93
|
|
145
|
-
export interface RelativeTimeValueFrom {
|
146
|
-
timePeriod: string
|
147
|
-
timeUnit: DateTimeUnitValues
|
148
|
-
direction: DateDirections
|
149
|
-
timeOnly: boolean
|
150
|
-
}
|
151
|
-
|
152
94
|
export function conditionValueFrom(
|
153
95
|
obj:
|
154
96
|
| ConditionValue
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
97
|
+
| ConditionValueData
|
98
|
+
| RelativeDateValue
|
99
|
+
| RelativeDateValueData
|
158
100
|
) {
|
159
101
|
switch (obj.type) {
|
160
102
|
case ConditionType.Value:
|
161
103
|
return ConditionValue.from(obj)
|
162
104
|
|
163
|
-
case ConditionType.
|
164
|
-
return
|
105
|
+
case ConditionType.RelativeDate:
|
106
|
+
return RelativeDateValue.from(obj)
|
165
107
|
}
|
166
108
|
}
|
@@ -4,19 +4,19 @@ import { getExpression } from '~/src/conditions/condition-operators.js'
|
|
4
4
|
import { ConditionValueAbstract } from '~/src/conditions/condition-value-abstract.js'
|
5
5
|
import {
|
6
6
|
type ConditionValue,
|
7
|
-
type
|
7
|
+
type RelativeDateValue
|
8
8
|
} from '~/src/conditions/condition-values.js'
|
9
9
|
import { type Coordinator, type OperatorName } from '~/src/conditions/enums.js'
|
10
10
|
|
11
11
|
export class Condition extends ConditionAbstract {
|
12
|
-
field
|
13
|
-
operator
|
14
|
-
value
|
12
|
+
field: ConditionField
|
13
|
+
operator: OperatorName
|
14
|
+
value: ConditionValue | RelativeDateValue
|
15
15
|
|
16
16
|
constructor(
|
17
17
|
field?: ConditionField,
|
18
18
|
operator?: OperatorName,
|
19
|
-
value?: ConditionValue |
|
19
|
+
value?: ConditionValue | RelativeDateValue,
|
20
20
|
coordinator?: Coordinator
|
21
21
|
) {
|
22
22
|
if (!(field instanceof ConditionField)) {
|
package/src/conditions/enums.ts
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
export enum ConditionType {
|
2
2
|
Value = 'Value',
|
3
|
-
|
3
|
+
RelativeDate = 'RelativeDate'
|
4
4
|
}
|
5
5
|
|
6
6
|
export enum Coordinator {
|
@@ -38,3 +38,9 @@ export enum DateDirections {
|
|
38
38
|
FUTURE = 'in the future',
|
39
39
|
PAST = 'in the past'
|
40
40
|
}
|
41
|
+
|
42
|
+
export enum DateUnits {
|
43
|
+
YEARS = 'years',
|
44
|
+
MONTHS = 'months',
|
45
|
+
DAYS = 'days'
|
46
|
+
}
|
@@ -1,7 +1,15 @@
|
|
1
|
-
|
1
|
+
import { type ConditionGroup } from '~/src/conditions/condition-group.js'
|
2
|
+
import { type ConditionRef } from '~/src/conditions/condition-ref.js'
|
3
|
+
import { type Condition } from '~/src/conditions/condition.js'
|
4
|
+
|
5
|
+
export function toPresentationString(
|
6
|
+
condition: Condition | ConditionRef | ConditionGroup
|
7
|
+
) {
|
2
8
|
return `${condition.coordinatorString()}${condition.conditionString()}`
|
3
9
|
}
|
4
10
|
|
5
|
-
export function toExpression(
|
11
|
+
export function toExpression(
|
12
|
+
condition: Condition | ConditionRef | ConditionGroup
|
13
|
+
) {
|
6
14
|
return `${condition.coordinatorString()}${condition.conditionExpression()}`
|
7
15
|
}
|
package/src/conditions/index.ts
CHANGED
@@ -2,16 +2,13 @@ export {
|
|
2
2
|
getExpression,
|
3
3
|
getOperatorConfig,
|
4
4
|
getOperatorNames,
|
5
|
-
|
6
|
-
|
5
|
+
absoluteDateOperatorNames,
|
6
|
+
relativeDateOperatorNames
|
7
7
|
} from '~/src/conditions/condition-operators.js'
|
8
8
|
|
9
9
|
export {
|
10
|
-
timeUnits,
|
11
|
-
dateUnits,
|
12
|
-
dateTimeUnits,
|
13
10
|
ConditionValue,
|
14
|
-
|
11
|
+
RelativeDateValue,
|
15
12
|
conditionValueFrom
|
16
13
|
} from '~/src/conditions/condition-values.js'
|
17
14
|
|
@@ -27,6 +24,7 @@ export {
|
|
27
24
|
ConditionType,
|
28
25
|
Coordinator,
|
29
26
|
DateDirections,
|
27
|
+
DateUnits,
|
30
28
|
Operator,
|
31
29
|
OperatorName
|
32
30
|
} from '~/src/conditions/enums.js'
|
package/src/conditions/types.ts
CHANGED
@@ -1,40 +1,63 @@
|
|
1
|
-
import {
|
2
|
-
|
3
|
-
|
1
|
+
import {
|
2
|
+
type ComponentDef,
|
3
|
+
type ConditionalComponentType
|
4
|
+
} from '~/src/components/types.js'
|
4
5
|
import {
|
5
6
|
type ConditionValue,
|
6
|
-
type
|
7
|
+
type RelativeDateValue
|
7
8
|
} from '~/src/conditions/condition-values.js'
|
8
|
-
import {
|
9
|
-
|
9
|
+
import {
|
10
|
+
type ConditionType,
|
11
|
+
type Coordinator,
|
12
|
+
type DateDirections,
|
13
|
+
type DateUnits,
|
14
|
+
type OperatorName
|
15
|
+
} from '~/src/conditions/enums.js'
|
16
|
+
|
17
|
+
export interface ConditionValueData {
|
18
|
+
type: ConditionType.Value
|
19
|
+
value: string
|
20
|
+
display: string
|
21
|
+
}
|
22
|
+
|
23
|
+
export interface RelativeDateValueData {
|
24
|
+
type: ConditionType.RelativeDate
|
25
|
+
period: string
|
26
|
+
unit: DateUnits
|
27
|
+
direction: DateDirections
|
28
|
+
}
|
10
29
|
|
11
|
-
export
|
30
|
+
export interface ConditionFieldData {
|
31
|
+
name: string
|
32
|
+
type: ConditionalComponentType
|
33
|
+
display: string
|
34
|
+
}
|
12
35
|
|
13
|
-
export
|
14
|
-
|
15
|
-
|
16
|
-
|
|
17
|
-
|
18
|
-
|
19
|
-
|
36
|
+
export interface ConditionData {
|
37
|
+
field: ConditionFieldData
|
38
|
+
operator: OperatorName
|
39
|
+
value: ConditionValueData | RelativeDateValueData
|
40
|
+
coordinator?: Coordinator
|
41
|
+
}
|
42
|
+
|
43
|
+
export interface ConditionRefData {
|
44
|
+
conditionName: string
|
45
|
+
conditionDisplayName: string
|
46
|
+
coordinator?: Coordinator
|
47
|
+
}
|
20
48
|
|
21
|
-
export interface
|
22
|
-
|
23
|
-
MONTHS: { display: 'month(s)'; value: 'months' }
|
24
|
-
DAYS: { display: 'day(s)'; value: 'days' }
|
49
|
+
export interface ConditionGroupData {
|
50
|
+
conditions: (ConditionData | ConditionRefData | ConditionGroupData)[]
|
25
51
|
}
|
26
52
|
|
27
|
-
export interface
|
28
|
-
|
29
|
-
MINUTES: { display: 'minute(s)'; value: 'minutes' }
|
30
|
-
SECONDS: { display: 'second(s)'; value: 'seconds' }
|
53
|
+
export interface ConditionsModelData extends ConditionGroupData {
|
54
|
+
name: string
|
31
55
|
}
|
32
56
|
|
33
57
|
export interface OperatorDefinition {
|
34
|
-
units?: DateUnits | TimeUnits
|
35
58
|
expression: (
|
36
59
|
component: Pick<ComponentDef, 'type' | 'name'>,
|
37
|
-
conditionValue: ConditionValue |
|
60
|
+
conditionValue: ConditionValue | RelativeDateValue
|
38
61
|
) => string
|
39
62
|
}
|
40
63
|
|
@@ -3,8 +3,16 @@ import Joi from 'joi'
|
|
3
3
|
import { type ComponentType } from '~/src/components/enums.js'
|
4
4
|
import { type ComponentDef } from '~/src/components/types.js'
|
5
5
|
import {
|
6
|
-
type
|
7
|
-
type
|
6
|
+
type ConditionData,
|
7
|
+
type ConditionFieldData,
|
8
|
+
type ConditionGroupData,
|
9
|
+
type ConditionRefData,
|
10
|
+
type ConditionsModelData,
|
11
|
+
type ConditionValueData,
|
12
|
+
type RelativeDateValueData
|
13
|
+
} from '~/src/conditions/types.js'
|
14
|
+
import {
|
15
|
+
type ConditionWrapper,
|
8
16
|
type FormDefinition,
|
9
17
|
type Item,
|
10
18
|
type Link,
|
@@ -14,95 +22,84 @@ import {
|
|
14
22
|
type Section
|
15
23
|
} from '~/src/form/form-definition/types.js'
|
16
24
|
|
17
|
-
/**
|
18
|
-
* If an optional key is added, CURRENT_VERSION does not need to be incremented.
|
19
|
-
* Only breaking changes will require an increment, as well as a migration script.
|
20
|
-
*/
|
21
|
-
export const CURRENT_VERSION = 2
|
22
|
-
|
23
25
|
const sectionsSchema = Joi.object<Section>().keys({
|
24
26
|
name: Joi.string().required(),
|
25
27
|
title: Joi.string().required(),
|
26
28
|
hideTitle: Joi.boolean().optional().default(false)
|
27
29
|
})
|
28
30
|
|
29
|
-
const conditionFieldSchema = Joi.object().keys({
|
31
|
+
const conditionFieldSchema = Joi.object<ConditionFieldData>().keys({
|
30
32
|
name: Joi.string().required(),
|
31
33
|
type: Joi.string().required(),
|
32
34
|
display: Joi.string().required()
|
33
35
|
})
|
34
36
|
|
35
|
-
const conditionValueSchema = Joi.object().keys({
|
37
|
+
const conditionValueSchema = Joi.object<ConditionValueData>().keys({
|
36
38
|
type: Joi.string().required(),
|
37
39
|
value: Joi.string().required(),
|
38
40
|
display: Joi.string().required()
|
39
41
|
})
|
40
42
|
|
41
|
-
const
|
43
|
+
const relativeDateValueSchema = Joi.object<RelativeDateValueData>().keys({
|
42
44
|
type: Joi.string().required(),
|
43
|
-
|
44
|
-
|
45
|
-
direction: Joi.string().required()
|
46
|
-
timeOnly: Joi.boolean().required()
|
45
|
+
period: Joi.string().required(),
|
46
|
+
unit: Joi.string().required(),
|
47
|
+
direction: Joi.string().required()
|
47
48
|
})
|
48
49
|
|
49
|
-
const conditionRefSchema = Joi.object().keys({
|
50
|
+
const conditionRefSchema = Joi.object<ConditionRefData>().keys({
|
50
51
|
conditionName: Joi.string().required(),
|
51
52
|
conditionDisplayName: Joi.string().required(),
|
52
53
|
coordinator: Joi.string().optional()
|
53
54
|
})
|
54
55
|
|
55
|
-
const conditionSchema = Joi.object().keys({
|
56
|
+
const conditionSchema = Joi.object<ConditionData>().keys({
|
56
57
|
field: conditionFieldSchema,
|
57
58
|
operator: Joi.string().required(),
|
58
|
-
value: Joi.alternatives().try(conditionValueSchema,
|
59
|
+
value: Joi.alternatives().try(conditionValueSchema, relativeDateValueSchema),
|
59
60
|
coordinator: Joi.string().optional()
|
60
61
|
})
|
61
62
|
|
62
|
-
const conditionGroupSchema = Joi.object()
|
63
|
-
|
64
|
-
Joi.alternatives().try(
|
65
|
-
conditionSchema,
|
66
|
-
conditionRefSchema,
|
67
|
-
Joi.any() /** Should be a joi.link('#conditionGroupSchema') */
|
68
|
-
)
|
69
|
-
)
|
70
|
-
})
|
71
|
-
|
72
|
-
const conditionsModelSchema = Joi.alternatives<ConditionWrapperValue>().try(
|
73
|
-
Joi.string(),
|
74
|
-
Joi.object().keys({
|
75
|
-
name: Joi.string().required(),
|
63
|
+
const conditionGroupSchema = Joi.object<ConditionGroupData>()
|
64
|
+
.keys({
|
76
65
|
conditions: Joi.array().items(
|
77
66
|
Joi.alternatives().try(
|
78
67
|
conditionSchema,
|
79
68
|
conditionRefSchema,
|
80
|
-
conditionGroupSchema
|
69
|
+
Joi.link('#conditionGroupSchema')
|
81
70
|
)
|
82
71
|
)
|
83
72
|
})
|
84
|
-
)
|
73
|
+
.id('conditionGroupSchema')
|
85
74
|
|
86
|
-
const
|
75
|
+
const conditionsModelSchema = Joi.object<ConditionsModelData>().keys({
|
76
|
+
name: Joi.string().required(),
|
77
|
+
conditions: Joi.array().items(
|
78
|
+
Joi.alternatives().try(
|
79
|
+
conditionSchema,
|
80
|
+
conditionRefSchema,
|
81
|
+
conditionGroupSchema
|
82
|
+
)
|
83
|
+
)
|
84
|
+
})
|
85
|
+
|
86
|
+
const conditionWrapperSchema = Joi.object<ConditionWrapper>().keys({
|
87
87
|
name: Joi.string().required(),
|
88
88
|
displayName: Joi.string(),
|
89
89
|
value: conditionsModelSchema.required()
|
90
90
|
})
|
91
91
|
|
92
|
-
const localisedString = Joi.alternatives().try(
|
93
|
-
Joi.object({ a: Joi.any() }).unknown(),
|
94
|
-
Joi.string().allow('')
|
95
|
-
)
|
96
|
-
|
97
92
|
export const componentSchema = Joi.object<ComponentDef>()
|
98
93
|
.keys({
|
99
94
|
type: Joi.string<ComponentType>().required(),
|
100
95
|
name: Joi.string(),
|
101
|
-
title:
|
102
|
-
hint:
|
96
|
+
title: Joi.string().allow(''),
|
97
|
+
hint: Joi.string().allow('').optional(),
|
103
98
|
options: Joi.object({
|
104
99
|
rows: Joi.number().empty(''),
|
105
100
|
maxWords: Joi.number().empty(''),
|
101
|
+
maxDaysInPast: Joi.number().empty(''),
|
102
|
+
maxDaysInFuture: Joi.number().empty(''),
|
106
103
|
customValidationMessage: Joi.string().allow('')
|
107
104
|
})
|
108
105
|
.default({})
|
@@ -130,7 +127,7 @@ const nextSchema = Joi.object<Link>().keys({
|
|
130
127
|
*/
|
131
128
|
const pageSchema = Joi.object<Page>().keys({
|
132
129
|
path: Joi.string().required().disallow('/status'),
|
133
|
-
title:
|
130
|
+
title: Joi.string().allow(''),
|
134
131
|
section: Joi.string(),
|
135
132
|
controller: Joi.string().optional(),
|
136
133
|
components: Joi.array<ComponentDef>().items(componentSchema),
|
@@ -138,8 +135,8 @@ const pageSchema = Joi.object<Page>().keys({
|
|
138
135
|
})
|
139
136
|
|
140
137
|
const baseListItemSchema = Joi.object<Item>().keys({
|
141
|
-
text:
|
142
|
-
description:
|
138
|
+
text: Joi.string().allow(''),
|
139
|
+
description: Joi.string().allow('').optional(),
|
143
140
|
conditional: Joi.object<Item['conditional']>()
|
144
141
|
.keys({
|
145
142
|
components: Joi.array<ComponentDef>()
|
@@ -147,9 +144,8 @@ const baseListItemSchema = Joi.object<Item>().keys({
|
|
147
144
|
.items(componentSchema.unknown(true))
|
148
145
|
.unique('name')
|
149
146
|
})
|
150
|
-
.allow(null)
|
151
147
|
.optional(),
|
152
|
-
condition: Joi.string().allow(
|
148
|
+
condition: Joi.string().allow('').optional()
|
153
149
|
})
|
154
150
|
|
155
151
|
const stringListItemSchema = baseListItemSchema.append({
|
@@ -162,7 +158,7 @@ const numberListItemSchema = baseListItemSchema.append({
|
|
162
158
|
|
163
159
|
const listSchema = Joi.object<List>().keys({
|
164
160
|
name: Joi.string().required(),
|
165
|
-
title:
|
161
|
+
title: Joi.string().allow(''),
|
166
162
|
type: Joi.string().required().valid('string', 'number'),
|
167
163
|
items: Joi.when('type', {
|
168
164
|
is: 'string',
|
@@ -203,7 +199,7 @@ const phaseBannerSchema = Joi.object<PhaseBanner>().keys({
|
|
203
199
|
export const formDefinitionSchema = Joi.object<FormDefinition>()
|
204
200
|
.required()
|
205
201
|
.keys({
|
206
|
-
name:
|
202
|
+
name: Joi.string().allow('').optional(),
|
207
203
|
feedback: feedbackSchema.optional(),
|
208
204
|
startPage: Joi.string().optional(),
|
209
205
|
pages: Joi.array<Page>().required().items(pageSchema).unique('path'),
|
@@ -211,8 +207,8 @@ export const formDefinitionSchema = Joi.object<FormDefinition>()
|
|
211
207
|
.items(sectionsSchema)
|
212
208
|
.unique('name')
|
213
209
|
.required(),
|
214
|
-
conditions: Joi.array<
|
215
|
-
.items(
|
210
|
+
conditions: Joi.array<ConditionWrapper>()
|
211
|
+
.items(conditionWrapperSchema)
|
216
212
|
.unique('name'),
|
217
213
|
lists: Joi.array<List>().items(listSchema).unique('name'),
|
218
214
|
metadata: Joi.object({ a: Joi.any() }).unknown().optional(),
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { type ComponentDef } from '~/src/components/types.js'
|
2
|
-
import { type
|
2
|
+
import { type ConditionsModelData } from '~/src/conditions/types.js'
|
3
3
|
import { formDefinitionSchema } from '~/src/form/form-definition/index.js'
|
4
4
|
|
5
5
|
export interface Link {
|
@@ -27,8 +27,8 @@ export interface Item {
|
|
27
27
|
text: string
|
28
28
|
value: string | number | boolean
|
29
29
|
description?: string
|
30
|
-
conditional?: { components: ComponentDef[] }
|
31
|
-
condition?: string
|
30
|
+
conditional?: { components: ComponentDef[] }
|
31
|
+
condition?: string
|
32
32
|
}
|
33
33
|
|
34
34
|
export interface List {
|
@@ -49,17 +49,10 @@ export interface PhaseBanner {
|
|
49
49
|
feedbackUrl?: string
|
50
50
|
}
|
51
51
|
|
52
|
-
export
|
53
|
-
| string
|
54
|
-
| {
|
55
|
-
name: string
|
56
|
-
conditions: Condition[]
|
57
|
-
}
|
58
|
-
|
59
|
-
export interface ConditionRawData {
|
52
|
+
export interface ConditionWrapper {
|
60
53
|
name: string
|
61
54
|
displayName: string
|
62
|
-
value:
|
55
|
+
value: ConditionsModelData
|
63
56
|
}
|
64
57
|
|
65
58
|
/**
|
@@ -68,7 +61,7 @@ export interface ConditionRawData {
|
|
68
61
|
*/
|
69
62
|
export interface FormDefinition {
|
70
63
|
pages: Page[]
|
71
|
-
conditions:
|
64
|
+
conditions: ConditionWrapper[]
|
72
65
|
lists: List[]
|
73
66
|
sections: Section[]
|
74
67
|
startPage?: Page['path']
|