@defra/forms-model 3.0.253 → 3.0.255
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/helpers.js +4 -1
- package/dist/module/components/helpers.js.map +1 -1
- package/dist/module/components/index.js +1 -1
- package/dist/module/components/index.js.map +1 -1
- package/dist/module/conditions/condition-field.js +6 -0
- package/dist/module/conditions/condition-field.js.map +1 -1
- package/dist/module/conditions/condition-group.js +15 -1
- package/dist/module/conditions/condition-group.js.map +1 -1
- package/dist/module/conditions/condition-model.js +9 -11
- package/dist/module/conditions/condition-model.js.map +1 -1
- package/dist/module/conditions/condition-operators.js +11 -8
- package/dist/module/conditions/condition-operators.js.map +1 -1
- package/dist/module/conditions/condition-ref.js +7 -1
- package/dist/module/conditions/condition-ref.js.map +1 -1
- package/dist/module/conditions/condition-values.js +16 -7
- package/dist/module/conditions/condition-values.js.map +1 -1
- package/dist/module/conditions/condition.js +8 -1
- package/dist/module/conditions/condition.js.map +1 -1
- package/dist/module/conditions/helpers.js +15 -0
- package/dist/module/conditions/helpers.js.map +1 -1
- package/dist/module/conditions/index.js +2 -2
- package/dist/module/conditions/index.js.map +1 -1
- package/dist/module/conditions/types.js.map +1 -1
- package/dist/types/components/helpers.d.ts +1 -0
- package/dist/types/components/helpers.d.ts.map +1 -1
- package/dist/types/components/index.d.ts +1 -1
- package/dist/types/components/index.d.ts.map +1 -1
- package/dist/types/conditions/condition-field.d.ts +2 -0
- package/dist/types/conditions/condition-field.d.ts.map +1 -1
- package/dist/types/conditions/condition-group.d.ts +3 -0
- package/dist/types/conditions/condition-group.d.ts.map +1 -1
- package/dist/types/conditions/condition-model.d.ts +8 -4
- package/dist/types/conditions/condition-model.d.ts.map +1 -1
- package/dist/types/conditions/condition-operators.d.ts +15 -15
- package/dist/types/conditions/condition-operators.d.ts.map +1 -1
- package/dist/types/conditions/condition-ref.d.ts +3 -0
- package/dist/types/conditions/condition-ref.d.ts.map +1 -1
- package/dist/types/conditions/condition-values.d.ts +4 -2
- package/dist/types/conditions/condition-values.d.ts.map +1 -1
- package/dist/types/conditions/condition.d.ts +3 -0
- package/dist/types/conditions/condition.d.ts.map +1 -1
- package/dist/types/conditions/helpers.d.ts +7 -0
- package/dist/types/conditions/helpers.d.ts.map +1 -1
- package/dist/types/conditions/index.d.ts +2 -2
- package/dist/types/conditions/index.d.ts.map +1 -1
- package/dist/types/conditions/types.d.ts +2 -2
- package/dist/types/conditions/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/helpers.ts +7 -1
- package/src/components/index.ts +3 -1
- package/src/conditions/condition-field.ts +8 -0
- package/src/conditions/condition-group.ts +19 -1
- package/src/conditions/condition-model.ts +17 -27
- package/src/conditions/condition-operators.ts +14 -11
- package/src/conditions/condition-ref.ts +12 -3
- package/src/conditions/condition-values.ts +21 -9
- package/src/conditions/condition.ts +14 -4
- package/src/conditions/helpers.ts +35 -0
- package/src/conditions/index.ts +9 -2
- package/src/conditions/types.ts +2 -5
@@ -6,7 +6,9 @@ import {
|
|
6
6
|
ConditionValue,
|
7
7
|
RelativeDateValue
|
8
8
|
} from '~/src/conditions/condition-values.js'
|
9
|
+
import { type Condition } from '~/src/conditions/condition.js'
|
9
10
|
import {
|
11
|
+
ConditionType,
|
10
12
|
DateDirections,
|
11
13
|
Operator,
|
12
14
|
OperatorName
|
@@ -21,8 +23,8 @@ const defaultOperators = {
|
|
21
23
|
[OperatorName.IsNot]: inline(Operator.IsNot)
|
22
24
|
}
|
23
25
|
|
24
|
-
function withDefaults<T>(
|
25
|
-
return
|
26
|
+
function withDefaults<T>(operators: T) {
|
27
|
+
return { ...defaultOperators, ...operators }
|
26
28
|
}
|
27
29
|
|
28
30
|
const textFieldOperators = {
|
@@ -80,14 +82,14 @@ export function getOperatorNames(fieldType?: ComponentType) {
|
|
80
82
|
return []
|
81
83
|
}
|
82
84
|
|
83
|
-
return Object.keys(conditionals)
|
85
|
+
return Object.keys(conditionals) as OperatorName[]
|
84
86
|
}
|
85
87
|
|
86
88
|
export function getExpression(
|
87
89
|
fieldType: ComponentType,
|
88
90
|
fieldName: string,
|
89
91
|
operator: OperatorName,
|
90
|
-
value:
|
92
|
+
value: Condition['value']
|
91
93
|
) {
|
92
94
|
const conditionals = getConditionals(fieldType)
|
93
95
|
if (!conditionals) {
|
@@ -153,14 +155,15 @@ function not(operatorDefinition: OperatorDefinition): OperatorDefinition {
|
|
153
155
|
|
154
156
|
function formatValue(
|
155
157
|
field: Pick<ComponentDef, 'type'>,
|
156
|
-
value:
|
158
|
+
value: Condition['value']
|
157
159
|
) {
|
158
160
|
if (
|
159
|
-
|
160
|
-
|
161
|
-
|
161
|
+
(field.type === ComponentType.DatePartsField &&
|
162
|
+
value.type === ConditionType.RelativeDate) ||
|
163
|
+
field.type === ComponentType.NumberField ||
|
164
|
+
field.type === ComponentType.YesNoField
|
162
165
|
) {
|
163
|
-
return value.
|
166
|
+
return value.toExpression()
|
164
167
|
}
|
165
168
|
|
166
169
|
return `'${value.toExpression()}'`
|
@@ -183,7 +186,7 @@ function absoluteDate(operator: Operator): OperatorDefinition {
|
|
183
186
|
)
|
184
187
|
}
|
185
188
|
|
186
|
-
return `${field.name} ${operator}
|
189
|
+
return `${field.name} ${operator} ${formatValue(field, value)}`
|
187
190
|
}
|
188
191
|
}
|
189
192
|
}
|
@@ -201,7 +204,7 @@ function relativeDate(
|
|
201
204
|
}
|
202
205
|
|
203
206
|
const isPast = value.direction === DateDirections.PAST
|
204
|
-
return `${field.name} ${isPast ? pastOperator : futureOperator} ${value
|
207
|
+
return `${field.name} ${isPast ? pastOperator : futureOperator} ${formatValue(field, value)}`
|
205
208
|
}
|
206
209
|
}
|
207
210
|
}
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import { ConditionAbstract } from '~/src/conditions/condition-abstract.js'
|
2
2
|
import { type Coordinator } from '~/src/conditions/enums.js'
|
3
|
+
import { type ConditionRefData } from '~/src/conditions/types.js'
|
3
4
|
|
4
5
|
export class ConditionRef extends ConditionAbstract {
|
5
6
|
conditionName: string
|
@@ -40,10 +41,18 @@ export class ConditionRef extends ConditionAbstract {
|
|
40
41
|
}
|
41
42
|
|
42
43
|
clone() {
|
44
|
+
return ConditionRef.from(this)
|
45
|
+
}
|
46
|
+
|
47
|
+
toJSON(): ConditionRefData {
|
48
|
+
return structuredClone(this.clone())
|
49
|
+
}
|
50
|
+
|
51
|
+
static from(obj: ConditionRefData | ConditionRef) {
|
43
52
|
return new ConditionRef(
|
44
|
-
|
45
|
-
|
46
|
-
|
53
|
+
obj.conditionName,
|
54
|
+
obj.conditionDisplayName,
|
55
|
+
obj.coordinator
|
47
56
|
)
|
48
57
|
}
|
49
58
|
}
|
@@ -12,7 +12,7 @@ export class ConditionValue extends ConditionValueAbstract {
|
|
12
12
|
display: string
|
13
13
|
|
14
14
|
constructor(value: string, display?: string) {
|
15
|
-
if (
|
15
|
+
if (typeof value !== 'string') {
|
16
16
|
throw new Error("ConditionValue param 'value' must be a string")
|
17
17
|
}
|
18
18
|
|
@@ -35,13 +35,17 @@ export class ConditionValue extends ConditionValueAbstract {
|
|
35
35
|
return this.value
|
36
36
|
}
|
37
37
|
|
38
|
-
static from(obj: ConditionValue | ConditionValueData) {
|
39
|
-
return new ConditionValue(obj.value, obj.display)
|
40
|
-
}
|
41
|
-
|
42
38
|
clone() {
|
43
39
|
return ConditionValue.from(this)
|
44
40
|
}
|
41
|
+
|
42
|
+
toJSON(): ConditionValueData {
|
43
|
+
return structuredClone(this.clone())
|
44
|
+
}
|
45
|
+
|
46
|
+
static from(obj: ConditionValue | ConditionValueData) {
|
47
|
+
return new ConditionValue(obj.value, obj.display)
|
48
|
+
}
|
45
49
|
}
|
46
50
|
|
47
51
|
export class RelativeDateValue extends ConditionValueAbstract {
|
@@ -82,13 +86,17 @@ export class RelativeDateValue extends ConditionValueAbstract {
|
|
82
86
|
return `dateForComparison(${period}, '${this.unit}')`
|
83
87
|
}
|
84
88
|
|
85
|
-
static from(obj: RelativeDateValue | RelativeDateValueData) {
|
86
|
-
return new RelativeDateValue(obj.period, obj.unit, obj.direction)
|
87
|
-
}
|
88
|
-
|
89
89
|
clone() {
|
90
90
|
return RelativeDateValue.from(this)
|
91
91
|
}
|
92
|
+
|
93
|
+
toJSON(): RelativeDateValueData {
|
94
|
+
return structuredClone(this.clone())
|
95
|
+
}
|
96
|
+
|
97
|
+
static from(obj: RelativeDateValue | RelativeDateValueData) {
|
98
|
+
return new RelativeDateValue(obj.period, obj.unit, obj.direction)
|
99
|
+
}
|
92
100
|
}
|
93
101
|
|
94
102
|
export function conditionValueFrom(
|
@@ -98,6 +106,10 @@ export function conditionValueFrom(
|
|
98
106
|
| RelativeDateValue
|
99
107
|
| RelativeDateValueData
|
100
108
|
) {
|
109
|
+
if ('clone' in obj) {
|
110
|
+
return obj.clone()
|
111
|
+
}
|
112
|
+
|
101
113
|
switch (obj.type) {
|
102
114
|
case ConditionType.Value:
|
103
115
|
return ConditionValue.from(obj)
|
@@ -3,10 +3,12 @@ import { ConditionField } from '~/src/conditions/condition-field.js'
|
|
3
3
|
import { getExpression } from '~/src/conditions/condition-operators.js'
|
4
4
|
import { ConditionValueAbstract } from '~/src/conditions/condition-value-abstract.js'
|
5
5
|
import {
|
6
|
+
conditionValueFrom,
|
6
7
|
type ConditionValue,
|
7
8
|
type RelativeDateValue
|
8
9
|
} from '~/src/conditions/condition-values.js'
|
9
10
|
import { type Coordinator, type OperatorName } from '~/src/conditions/enums.js'
|
11
|
+
import { type ConditionData } from '~/src/conditions/types.js'
|
10
12
|
|
11
13
|
export class Condition extends ConditionAbstract {
|
12
14
|
field: ConditionField
|
@@ -59,11 +61,19 @@ export class Condition extends ConditionAbstract {
|
|
59
61
|
}
|
60
62
|
|
61
63
|
clone() {
|
64
|
+
return Condition.from(this)
|
65
|
+
}
|
66
|
+
|
67
|
+
toJSON(): ConditionData {
|
68
|
+
return structuredClone(this.clone())
|
69
|
+
}
|
70
|
+
|
71
|
+
static from(obj: ConditionData | Condition) {
|
62
72
|
return new Condition(
|
63
|
-
ConditionField.from(
|
64
|
-
|
65
|
-
|
66
|
-
|
73
|
+
ConditionField.from(obj.field),
|
74
|
+
obj.operator,
|
75
|
+
conditionValueFrom(obj.value),
|
76
|
+
obj.coordinator
|
67
77
|
)
|
68
78
|
}
|
69
79
|
}
|
@@ -1,6 +1,12 @@
|
|
1
1
|
import { type ConditionGroup } from '~/src/conditions/condition-group.js'
|
2
2
|
import { type ConditionRef } from '~/src/conditions/condition-ref.js'
|
3
3
|
import { type Condition } from '~/src/conditions/condition.js'
|
4
|
+
import {
|
5
|
+
type ConditionData,
|
6
|
+
type ConditionGroupData,
|
7
|
+
type ConditionRefData
|
8
|
+
} from '~/src/conditions/types.js'
|
9
|
+
import { type ConditionWrapper } from '~/src/form/form-definition/types.js'
|
4
10
|
|
5
11
|
export function toPresentationString(
|
6
12
|
condition: Condition | ConditionRef | ConditionGroup
|
@@ -13,3 +19,32 @@ export function toExpression(
|
|
13
19
|
) {
|
14
20
|
return `${condition.coordinatorString()}${condition.conditionExpression()}`
|
15
21
|
}
|
22
|
+
|
23
|
+
export const hasConditionField = (
|
24
|
+
condition?: ConditionGroupData | ConditionData | ConditionRefData
|
25
|
+
): condition is ConditionData => {
|
26
|
+
return !!condition && 'field' in condition
|
27
|
+
}
|
28
|
+
|
29
|
+
export const hasConditionGroup = (
|
30
|
+
condition?: ConditionGroupData | ConditionData | ConditionRefData
|
31
|
+
): condition is ConditionGroupData => {
|
32
|
+
return !!condition && 'conditions' in condition
|
33
|
+
}
|
34
|
+
|
35
|
+
export const hasConditionName = (
|
36
|
+
condition?: ConditionGroupData | ConditionData | ConditionRefData
|
37
|
+
): condition is ConditionRefData => {
|
38
|
+
return !!condition && 'conditionName' in condition
|
39
|
+
}
|
40
|
+
|
41
|
+
export const hasNestedCondition = (condition?: ConditionWrapper) => {
|
42
|
+
return !!condition?.value.conditions.some(hasConditionName)
|
43
|
+
}
|
44
|
+
|
45
|
+
export const isDuplicateCondition = (
|
46
|
+
conditions: ConditionWrapper[],
|
47
|
+
conditionName: string
|
48
|
+
) => {
|
49
|
+
return conditions.some((condition) => condition.name === conditionName)
|
50
|
+
}
|
package/src/conditions/index.ts
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
export {
|
2
2
|
getExpression,
|
3
|
-
getOperatorConfig,
|
4
3
|
getOperatorNames,
|
5
4
|
absoluteDateOperatorNames,
|
6
5
|
relativeDateOperatorNames
|
@@ -18,7 +17,15 @@ export { ConditionRef } from '~/src/conditions/condition-ref.js'
|
|
18
17
|
export { ConditionGroup } from '~/src/conditions/condition-group.js'
|
19
18
|
export { ConditionsModel } from '~/src/conditions/condition-model.js'
|
20
19
|
export { ConditionGroupDef } from '~/src/conditions/condition-group-def.js'
|
21
|
-
export {
|
20
|
+
export {
|
21
|
+
hasConditionField,
|
22
|
+
hasConditionGroup,
|
23
|
+
hasConditionName,
|
24
|
+
hasNestedCondition,
|
25
|
+
isDuplicateCondition,
|
26
|
+
toExpression,
|
27
|
+
toPresentationString
|
28
|
+
} from '~/src/conditions/helpers.js'
|
22
29
|
|
23
30
|
export {
|
24
31
|
ConditionType,
|
package/src/conditions/types.ts
CHANGED
@@ -2,10 +2,7 @@ import {
|
|
2
2
|
type ComponentDef,
|
3
3
|
type ConditionalComponentType
|
4
4
|
} from '~/src/components/types.js'
|
5
|
-
import {
|
6
|
-
type ConditionValue,
|
7
|
-
type RelativeDateValue
|
8
|
-
} from '~/src/conditions/condition-values.js'
|
5
|
+
import { type Condition } from '~/src/conditions/condition.js'
|
9
6
|
import {
|
10
7
|
type ConditionType,
|
11
8
|
type Coordinator,
|
@@ -57,7 +54,7 @@ export interface ConditionsModelData extends ConditionGroupData {
|
|
57
54
|
export interface OperatorDefinition {
|
58
55
|
expression: (
|
59
56
|
component: Pick<ComponentDef, 'type' | 'name'>,
|
60
|
-
conditionValue:
|
57
|
+
conditionValue: Condition['value']
|
61
58
|
) => string
|
62
59
|
}
|
63
60
|
|