@defra/forms-model 3.0.254 → 3.0.256

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.
Files changed (60) hide show
  1. package/dist/module/components/helpers.js +4 -1
  2. package/dist/module/components/helpers.js.map +1 -1
  3. package/dist/module/components/index.js +1 -1
  4. package/dist/module/components/index.js.map +1 -1
  5. package/dist/module/conditions/condition-field.js +6 -0
  6. package/dist/module/conditions/condition-field.js.map +1 -1
  7. package/dist/module/conditions/condition-group.js +15 -1
  8. package/dist/module/conditions/condition-group.js.map +1 -1
  9. package/dist/module/conditions/condition-model.js +9 -11
  10. package/dist/module/conditions/condition-model.js.map +1 -1
  11. package/dist/module/conditions/condition-operators.js +6 -3
  12. package/dist/module/conditions/condition-operators.js.map +1 -1
  13. package/dist/module/conditions/condition-ref.js +7 -1
  14. package/dist/module/conditions/condition-ref.js.map +1 -1
  15. package/dist/module/conditions/condition-values.js +16 -7
  16. package/dist/module/conditions/condition-values.js.map +1 -1
  17. package/dist/module/conditions/condition.js +8 -1
  18. package/dist/module/conditions/condition.js.map +1 -1
  19. package/dist/module/conditions/helpers.js +15 -0
  20. package/dist/module/conditions/helpers.js.map +1 -1
  21. package/dist/module/conditions/index.js +2 -2
  22. package/dist/module/conditions/index.js.map +1 -1
  23. package/dist/module/conditions/types.js.map +1 -1
  24. package/dist/types/components/helpers.d.ts +1 -0
  25. package/dist/types/components/helpers.d.ts.map +1 -1
  26. package/dist/types/components/index.d.ts +1 -1
  27. package/dist/types/components/index.d.ts.map +1 -1
  28. package/dist/types/conditions/condition-field.d.ts +2 -0
  29. package/dist/types/conditions/condition-field.d.ts.map +1 -1
  30. package/dist/types/conditions/condition-group.d.ts +3 -0
  31. package/dist/types/conditions/condition-group.d.ts.map +1 -1
  32. package/dist/types/conditions/condition-model.d.ts +8 -4
  33. package/dist/types/conditions/condition-model.d.ts.map +1 -1
  34. package/dist/types/conditions/condition-operators.d.ts +15 -15
  35. package/dist/types/conditions/condition-operators.d.ts.map +1 -1
  36. package/dist/types/conditions/condition-ref.d.ts +3 -0
  37. package/dist/types/conditions/condition-ref.d.ts.map +1 -1
  38. package/dist/types/conditions/condition-values.d.ts +4 -2
  39. package/dist/types/conditions/condition-values.d.ts.map +1 -1
  40. package/dist/types/conditions/condition.d.ts +3 -0
  41. package/dist/types/conditions/condition.d.ts.map +1 -1
  42. package/dist/types/conditions/helpers.d.ts +7 -0
  43. package/dist/types/conditions/helpers.d.ts.map +1 -1
  44. package/dist/types/conditions/index.d.ts +2 -2
  45. package/dist/types/conditions/index.d.ts.map +1 -1
  46. package/dist/types/conditions/types.d.ts +2 -2
  47. package/dist/types/conditions/types.d.ts.map +1 -1
  48. package/package.json +1 -1
  49. package/src/components/helpers.ts +7 -1
  50. package/src/components/index.ts +3 -1
  51. package/src/conditions/condition-field.ts +8 -0
  52. package/src/conditions/condition-group.ts +19 -1
  53. package/src/conditions/condition-model.ts +17 -27
  54. package/src/conditions/condition-operators.ts +6 -5
  55. package/src/conditions/condition-ref.ts +12 -3
  56. package/src/conditions/condition-values.ts +21 -9
  57. package/src/conditions/condition.ts +14 -4
  58. package/src/conditions/helpers.ts +35 -0
  59. package/src/conditions/index.ts +9 -2
  60. package/src/conditions/types.ts +2 -5
@@ -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
- this.conditionName,
45
- this.conditionDisplayName,
46
- this.coordinator
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 (!value || typeof value !== 'string') {
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(this.field),
64
- this.operator,
65
- this.value.clone(),
66
- this.coordinator
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
+ }
@@ -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 { toExpression, toPresentationString } from '~/src/conditions/helpers.js'
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,
@@ -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: ConditionValue | RelativeDateValue
57
+ conditionValue: Condition['value']
61
58
  ) => string
62
59
  }
63
60