@defra/forms-model 3.0.178 → 3.0.180

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 (62) hide show
  1. package/dist/module/components/component-types.js +4 -42
  2. package/dist/module/components/component-types.js.map +1 -1
  3. package/dist/module/components/enums.js +0 -5
  4. package/dist/module/components/enums.js.map +1 -1
  5. package/dist/module/components/helpers.js +57 -0
  6. package/dist/module/components/helpers.js.map +1 -0
  7. package/dist/module/components/index.js +2 -1
  8. package/dist/module/components/index.js.map +1 -1
  9. package/dist/module/components/types.js.map +1 -1
  10. package/dist/module/conditions/condition-field.js +5 -5
  11. package/dist/module/conditions/condition-field.js.map +1 -1
  12. package/dist/module/conditions/condition-operators.js +64 -48
  13. package/dist/module/conditions/condition-operators.js.map +1 -1
  14. package/dist/module/conditions/condition-ref.js.map +1 -1
  15. package/dist/module/conditions/condition-values.js +9 -10
  16. package/dist/module/conditions/condition-values.js.map +1 -1
  17. package/dist/module/conditions/condition.js.map +1 -1
  18. package/dist/module/conditions/enums.js +31 -0
  19. package/dist/module/conditions/enums.js.map +1 -1
  20. package/dist/module/conditions/index.js +2 -2
  21. package/dist/module/conditions/index.js.map +1 -1
  22. package/dist/module/conditions/types.js.map +1 -1
  23. package/dist/types/components/component-types.d.ts +1 -0
  24. package/dist/types/components/component-types.d.ts.map +1 -1
  25. package/dist/types/components/enums.d.ts +1 -6
  26. package/dist/types/components/enums.d.ts.map +1 -1
  27. package/dist/types/components/helpers.d.ts +30 -0
  28. package/dist/types/components/helpers.d.ts.map +1 -0
  29. package/dist/types/components/index.d.ts +2 -1
  30. package/dist/types/components/index.d.ts.map +1 -1
  31. package/dist/types/components/types.d.ts +8 -40
  32. package/dist/types/components/types.d.ts.map +1 -1
  33. package/dist/types/conditions/condition-field.d.ts +6 -6
  34. package/dist/types/conditions/condition-field.d.ts.map +1 -1
  35. package/dist/types/conditions/condition-operators.d.ts +56 -232
  36. package/dist/types/conditions/condition-operators.d.ts.map +1 -1
  37. package/dist/types/conditions/condition-ref.d.ts +3 -3
  38. package/dist/types/conditions/condition-ref.d.ts.map +1 -1
  39. package/dist/types/conditions/condition-values.d.ts +5 -8
  40. package/dist/types/conditions/condition-values.d.ts.map +1 -1
  41. package/dist/types/conditions/condition.d.ts +6 -6
  42. package/dist/types/conditions/condition.d.ts.map +1 -1
  43. package/dist/types/conditions/enums.d.ts +28 -0
  44. package/dist/types/conditions/enums.d.ts.map +1 -1
  45. package/dist/types/conditions/index.d.ts +2 -2
  46. package/dist/types/conditions/index.d.ts.map +1 -1
  47. package/dist/types/conditions/types.d.ts +8 -0
  48. package/dist/types/conditions/types.d.ts.map +1 -1
  49. package/package.json +1 -1
  50. package/src/components/component-types.ts +6 -47
  51. package/src/components/enums.ts +1 -6
  52. package/src/components/helpers.ts +138 -0
  53. package/src/components/index.ts +14 -1
  54. package/src/components/types.ts +49 -58
  55. package/src/conditions/condition-field.ts +25 -11
  56. package/src/conditions/condition-operators.ts +129 -96
  57. package/src/conditions/condition-ref.ts +2 -2
  58. package/src/conditions/condition-values.ts +15 -20
  59. package/src/conditions/condition.ts +5 -5
  60. package/src/conditions/enums.ts +31 -0
  61. package/src/conditions/index.ts +7 -2
  62. package/src/conditions/types.ts +16 -0
@@ -0,0 +1,138 @@
1
+ import { ComponentType } from '~/src/components/enums.js'
2
+ import {
3
+ type InputFieldsComponentsDef,
4
+ type ComponentDef,
5
+ type ConditionalComponentsDef,
6
+ type ContentComponentsDef,
7
+ type HtmlComponent,
8
+ type InsetTextComponent,
9
+ type ListComponentsDef,
10
+ type SelectionComponentsDef,
11
+ type EditorComponentsDef
12
+ } from '~/src/components/types.js'
13
+
14
+ /**
15
+ * Filter known components with support for conditions
16
+ */
17
+ export function hasConditionSupport(
18
+ component?: Partial<ComponentDef>
19
+ ): component is ConditionalComponentsDef {
20
+ const allowedTypes = [
21
+ ComponentType.CheckboxesField,
22
+ ComponentType.DatePartsField,
23
+ ComponentType.EmailAddressField,
24
+ ComponentType.MultilineTextField,
25
+ ComponentType.NumberField,
26
+ ComponentType.TextField,
27
+ ComponentType.TimeField,
28
+ ComponentType.YesNoField
29
+ ]
30
+
31
+ return !!component?.type && allowedTypes.includes(component.type)
32
+ }
33
+
34
+ /**
35
+ * Filter known components with content fields
36
+ */
37
+ export function hasContentField(
38
+ component?: Partial<ComponentDef>
39
+ ): component is ContentComponentsDef {
40
+ const allowedTypes = [
41
+ ComponentType.Details,
42
+ ComponentType.Html,
43
+ ComponentType.InsetText,
44
+ ComponentType.List
45
+ ]
46
+
47
+ return !!component?.type && allowedTypes.includes(component.type)
48
+ }
49
+
50
+ /**
51
+ * Filter known components with text editor
52
+ */
53
+ export function hasEditor(
54
+ component?: Partial<ComponentDef>
55
+ ): component is EditorComponentsDef {
56
+ const allowedTypes = [
57
+ ComponentType.TextField,
58
+ ComponentType.EmailAddressField,
59
+ ComponentType.TelephoneNumberField,
60
+ ComponentType.MultilineTextField,
61
+ ComponentType.NumberField,
62
+ ComponentType.AutocompleteField,
63
+ ComponentType.SelectField,
64
+ ComponentType.RadiosField,
65
+ ComponentType.CheckboxesField,
66
+ ComponentType.List,
67
+ ComponentType.Details,
68
+ ComponentType.Html,
69
+ ComponentType.InsetText,
70
+ ComponentType.DatePartsField
71
+ ]
72
+
73
+ return !!component?.type && allowedTypes.includes(component.type)
74
+ }
75
+
76
+ /**
77
+ * Filter known components with input fields
78
+ */
79
+ export function hasInputField(
80
+ component?: Partial<ComponentDef>
81
+ ): component is InputFieldsComponentsDef {
82
+ const allowedTypes = [
83
+ ComponentType.TextField,
84
+ ComponentType.EmailAddressField,
85
+ ComponentType.NumberField,
86
+ ComponentType.MultilineTextField,
87
+ ComponentType.TelephoneNumberField,
88
+ ComponentType.YesNoField,
89
+ ComponentType.MonthYearField,
90
+ ComponentType.TimeField,
91
+ ComponentType.UkAddressField
92
+ ]
93
+
94
+ return !!component?.type && allowedTypes.includes(component.type)
95
+ }
96
+
97
+ /**
98
+ * Filter known components with lists
99
+ */
100
+ export function hasListField(
101
+ component?: Partial<ComponentDef>
102
+ ): component is ListComponentsDef {
103
+ const allowedTypes = [
104
+ ComponentType.AutocompleteField,
105
+ ComponentType.List,
106
+ ComponentType.RadiosField,
107
+ ComponentType.SelectField,
108
+ ComponentType.CheckboxesField
109
+ ]
110
+
111
+ return !!component?.type && allowedTypes.includes(component.type)
112
+ }
113
+
114
+ /**
115
+ * Filter known components with selection fields
116
+ */
117
+ export function hasSelectionFields(
118
+ component?: Partial<ComponentDef>
119
+ ): component is SelectionComponentsDef {
120
+ const allowedTypes = [
121
+ ComponentType.CheckboxesField,
122
+ ComponentType.RadiosField,
123
+ ComponentType.SelectField,
124
+ ComponentType.YesNoField
125
+ ]
126
+
127
+ return !!component?.type && allowedTypes.includes(component.type)
128
+ }
129
+
130
+ /**
131
+ * Filter known components with titles
132
+ */
133
+ export function hasTitle(
134
+ component?: Partial<ComponentDef>
135
+ ): component is Exclude<ComponentDef, InsetTextComponent | HtmlComponent> {
136
+ const deniedTypes = [ComponentType.InsetText, ComponentType.Html]
137
+ return !!component?.type && !deniedTypes.includes(component.type)
138
+ }
@@ -1,2 +1,15 @@
1
- export { ComponentTypes } from '~/src/components/component-types.js'
1
+ export {
2
+ ComponentTypes,
3
+ ConditionalComponentTypes
4
+ } from '~/src/components/component-types.js'
5
+ export {
6
+ hasConditionSupport,
7
+ hasContentField,
8
+ hasEditor,
9
+ hasInputField,
10
+ hasListField,
11
+ hasSelectionFields,
12
+ hasTitle
13
+ } from '~/src/components/helpers.js'
14
+
2
15
  export { ComponentType, ComponentSubType } from '~/src/components/enums.js'
@@ -3,11 +3,17 @@ import {
3
3
  type ComponentType
4
4
  } from '~/src/components/enums.js'
5
5
 
6
- export interface ConditionalComponent {
7
- name: string
8
- title: string
9
- subType: ComponentSubType.Field
10
- }
6
+ export type ConditionalComponentType = Extract<
7
+ ComponentType,
8
+ | typeof ComponentType.CheckboxesField
9
+ | typeof ComponentType.DatePartsField
10
+ | typeof ComponentType.EmailAddressField
11
+ | typeof ComponentType.MultilineTextField
12
+ | typeof ComponentType.NumberField
13
+ | typeof ComponentType.TextField
14
+ | typeof ComponentType.TimeField
15
+ | typeof ComponentType.YesNoField
16
+ >
11
17
 
12
18
  export interface ContentOptions {
13
19
  condition?: string
@@ -24,7 +30,6 @@ interface TextFieldBase {
24
30
  | ComponentType.TelephoneNumberField
25
31
  | ComponentType.TextField
26
32
  | ComponentType.UkAddressField
27
- | ComponentType.WebsiteField
28
33
  | ComponentType.YesNoField
29
34
  subType?: ComponentSubType.Field
30
35
  name: string
@@ -102,10 +107,7 @@ interface ContentFieldBase {
102
107
 
103
108
  interface DateFieldBase {
104
109
  type:
105
- | ComponentType.DateField
106
110
  | ComponentType.DatePartsField
107
- | ComponentType.DateTimeField
108
- | ComponentType.DateTimePartsField
109
111
  | ComponentType.MonthYearField
110
112
  | ComponentType.TimeField
111
113
  subType?: ComponentSubType.Field
@@ -139,13 +141,6 @@ export interface NumberFieldComponent extends NumberFieldBase {
139
141
  type: ComponentType.NumberField
140
142
  }
141
143
 
142
- export interface WebsiteFieldComponent extends TextFieldBase {
143
- type: ComponentType.WebsiteField
144
- options: TextFieldBase['options'] & {
145
- customValidationMessage?: string
146
- }
147
- }
148
-
149
144
  export interface TelephoneNumberFieldComponent extends TextFieldBase {
150
145
  type: ComponentType.TelephoneNumberField
151
146
  options: TextFieldBase['options'] & {
@@ -170,36 +165,11 @@ export interface MultilineTextFieldComponent extends TextFieldBase {
170
165
  }
171
166
  }
172
167
 
173
- export interface FileUploadFieldComponent {
174
- type: ComponentType.FileUploadField
175
- subType?: ComponentSubType.Field
176
- name: string
177
- title: string
178
- hint: string
179
- options: {
180
- required?: boolean
181
- hideTitle?: boolean
182
- multiple?: boolean
183
- classes?: string
184
- exposeToContext?: boolean
185
- imageQualityPlayback?: boolean
186
- }
187
- schema: object
188
- }
189
-
190
168
  export interface UkAddressFieldComponent extends TextFieldBase {
191
169
  type: ComponentType.UkAddressField
192
170
  }
193
171
 
194
172
  // Date Fields
195
- export interface DateFieldComponent extends DateFieldBase {
196
- type: ComponentType.DateField
197
- }
198
-
199
- export interface DateTimeFieldComponent extends DateFieldBase {
200
- type: ComponentType.DateTimeField
201
- }
202
-
203
173
  export interface DatePartsFieldFieldComponent extends DateFieldBase {
204
174
  type: ComponentType.DatePartsField
205
175
  }
@@ -208,10 +178,6 @@ export interface MonthYearFieldComponent extends DateFieldBase {
208
178
  type: ComponentType.MonthYearField
209
179
  }
210
180
 
211
- export interface DateTimePartsFieldComponent extends DateFieldBase {
212
- type: ComponentType.DateTimePartsField
213
- }
214
-
215
181
  export interface TimeFieldComponent extends DateFieldBase {
216
182
  type: ComponentType.TimeField
217
183
  }
@@ -259,14 +225,10 @@ export type ComponentDef =
259
225
  | InsetTextComponent
260
226
  | AutocompleteFieldComponent
261
227
  | CheckboxesFieldComponent
262
- | DateFieldComponent
263
228
  | DatePartsFieldFieldComponent
264
229
  | MonthYearFieldComponent
265
- | DateTimeFieldComponent
266
- | DateTimePartsFieldComponent
267
230
  | DetailsComponent
268
231
  | EmailAddressFieldComponent
269
- | FileUploadFieldComponent
270
232
  | HtmlComponent
271
233
  | ListComponent
272
234
  | MultilineTextFieldComponent
@@ -278,9 +240,8 @@ export type ComponentDef =
278
240
  | TimeFieldComponent
279
241
  | UkAddressFieldComponent
280
242
  | YesNoFieldComponent
281
- | WebsiteFieldComponent
282
243
 
283
- // Components that render inputs.
244
+ // Components that render inputs
284
245
  export type InputFieldsComponentsDef =
285
246
  | TextFieldComponent
286
247
  | EmailAddressFieldComponent
@@ -288,26 +249,56 @@ export type InputFieldsComponentsDef =
288
249
  | MultilineTextFieldComponent
289
250
  | TelephoneNumberFieldComponent
290
251
  | YesNoFieldComponent
291
- | FileUploadFieldComponent
292
- | DateFieldComponent
293
- | DateTimeFieldComponent
294
- | DateTimePartsFieldComponent
295
252
  | MonthYearFieldComponent
296
253
  | TimeFieldComponent
297
254
  | UkAddressFieldComponent
298
- | WebsiteFieldComponent
299
255
 
300
- // Components that render content.
256
+ // Components that render content
301
257
  export type ContentComponentsDef =
302
258
  | DetailsComponent
303
259
  | HtmlComponent
304
260
  | InsetTextComponent
305
261
  | ListComponent
306
262
 
307
- // Components that render Lists
263
+ // Components with editors
264
+ export type EditorComponentsDef =
265
+ | TextFieldComponent
266
+ | EmailAddressFieldComponent
267
+ | TelephoneNumberFieldComponent
268
+ | MultilineTextFieldComponent
269
+ | NumberFieldComponent
270
+ | AutocompleteFieldComponent
271
+ | SelectFieldComponent
272
+ | RadiosFieldComponent
273
+ | CheckboxesFieldComponent
274
+ | ListComponent
275
+ | DetailsComponent
276
+ | HtmlComponent
277
+ | InsetTextComponent
278
+ | DatePartsFieldFieldComponent
279
+
280
+ // Components that render lists
308
281
  export type ListComponentsDef =
309
282
  | ListComponent
310
283
  | AutocompleteFieldComponent
311
284
  | CheckboxesFieldComponent
312
285
  | RadiosFieldComponent
313
286
  | SelectFieldComponent
287
+
288
+ // Components that have selection fields
289
+ export type SelectionComponentsDef =
290
+ | CheckboxesFieldComponent
291
+ | RadiosFieldComponent
292
+ | SelectFieldComponent
293
+ | YesNoFieldComponent
294
+
295
+ // Components that have custom condition operators
296
+ export type ConditionalComponentsDef =
297
+ | CheckboxesFieldComponent
298
+ | DatePartsFieldFieldComponent
299
+ | EmailAddressFieldComponent
300
+ | MultilineTextFieldComponent
301
+ | NumberFieldComponent
302
+ | TextFieldComponent
303
+ | TimeFieldComponent
304
+ | YesNoFieldComponent
@@ -1,22 +1,32 @@
1
- import { ComponentTypes } from '~/src/components/component-types.js'
2
- import { type ComponentType } from '~/src/components/enums.js'
1
+ import { ConditionalComponentTypes } from '~/src/components/component-types.js'
2
+ import { type ConditionalComponentType } from '~/src/components/types.js'
3
3
 
4
4
  export class ConditionField {
5
- name: string
6
- type: ComponentType
7
- display: string
5
+ name
6
+ type
7
+ display
8
8
 
9
- constructor(name: string, type: ComponentType, display: string) {
9
+ constructor(
10
+ name?: string,
11
+ type?: ConditionalComponentType,
12
+ display?: string
13
+ ) {
10
14
  if (!name || typeof name !== 'string') {
11
- throw Error(`name ${name} is not valid`)
15
+ throw new Error("ConditionField param 'name' must be a string")
12
16
  }
13
17
 
14
- if (!ComponentTypes.find((componentType) => componentType.type === type)) {
15
- throw Error(`type ${type} is not valid`)
18
+ if (
19
+ !ConditionalComponentTypes.find(
20
+ (componentType) => componentType.type === type
21
+ )
22
+ ) {
23
+ throw new Error(
24
+ "ConditionField param 'type' must be from enum ConditionalComponentTypes"
25
+ )
16
26
  }
17
27
 
18
28
  if (!display || typeof display !== 'string') {
19
- throw Error(`display ${display} is not valid`)
29
+ throw new Error("ConditionField param 'display' must be a string")
20
30
  }
21
31
 
22
32
  this.name = name
@@ -24,7 +34,11 @@ export class ConditionField {
24
34
  this.display = display
25
35
  }
26
36
 
27
- static from(obj: { name: string; type: ComponentType; display: string }) {
37
+ static from(obj: {
38
+ name: string
39
+ type: ConditionalComponentType
40
+ display: string
41
+ }) {
28
42
  return new ConditionField(obj.name, obj.type, obj.display)
29
43
  }
30
44
  }