@defra/forms-model 3.0.481 → 3.0.483

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 (186) hide show
  1. package/dist/module/conditions/condition-operators.js +4 -1
  2. package/dist/module/conditions/condition-operators.js.map +1 -1
  3. package/dist/module/form/form-definition/index.js +0 -1
  4. package/dist/module/form/form-definition/index.js.map +1 -1
  5. package/dist/module/form/form-editor/__stubs__/preview.js +83 -4
  6. package/dist/module/form/form-editor/__stubs__/preview.js.map +1 -1
  7. package/dist/module/form/form-editor/index.js +2 -2
  8. package/dist/module/form/form-editor/index.js.map +1 -1
  9. package/dist/module/form/form-editor/macros/types.js +2 -0
  10. package/dist/module/form/form-editor/macros/types.js.map +1 -0
  11. package/dist/module/form/form-editor/preview/autocomplete.js +20 -4
  12. package/dist/module/form/form-editor/preview/autocomplete.js.map +1 -1
  13. package/dist/module/form/form-editor/preview/checkbox-sortable.js +7 -2
  14. package/dist/module/form/form-editor/preview/checkbox-sortable.js.map +1 -1
  15. package/dist/module/form/form-editor/preview/checkbox.js +17 -0
  16. package/dist/module/form/form-editor/preview/checkbox.js.map +1 -0
  17. package/dist/module/form/form-editor/preview/component-elements.js +61 -0
  18. package/dist/module/form/form-editor/preview/component-elements.js.map +1 -0
  19. package/dist/module/form/form-editor/preview/constants.js +2 -0
  20. package/dist/module/form/form-editor/preview/constants.js.map +1 -0
  21. package/dist/module/form/form-editor/preview/content.js +94 -0
  22. package/dist/module/form/form-editor/preview/content.js.map +1 -0
  23. package/dist/module/form/form-editor/preview/controller/page-controller.js +260 -0
  24. package/dist/module/form/form-editor/preview/controller/page-controller.js.map +1 -0
  25. package/dist/module/form/form-editor/preview/date-input.js +7 -2
  26. package/dist/module/form/form-editor/preview/date-input.js.map +1 -1
  27. package/dist/module/form/form-editor/preview/email-address.js +7 -1
  28. package/dist/module/form/form-editor/preview/email-address.js.map +1 -1
  29. package/dist/module/form/form-editor/preview/fieldset-question.js +5 -0
  30. package/dist/module/form/form-editor/preview/fieldset-question.js.map +1 -1
  31. package/dist/module/form/form-editor/preview/helpers.js +81 -0
  32. package/dist/module/form/form-editor/preview/helpers.js.map +1 -0
  33. package/dist/module/form/form-editor/preview/index.js +6 -0
  34. package/dist/module/form/form-editor/preview/index.js.map +1 -1
  35. package/dist/module/form/form-editor/preview/list.js +59 -3
  36. package/dist/module/form/form-editor/preview/list.js.map +1 -1
  37. package/dist/module/form/form-editor/preview/long-answer.js +7 -1
  38. package/dist/module/form/form-editor/preview/long-answer.js.map +1 -1
  39. package/dist/module/form/form-editor/preview/markdown.js +53 -0
  40. package/dist/module/form/form-editor/preview/markdown.js.map +1 -0
  41. package/dist/module/form/form-editor/preview/month-year.js +7 -2
  42. package/dist/module/form/form-editor/preview/month-year.js.map +1 -1
  43. package/dist/module/form/form-editor/preview/number-only.js +5 -0
  44. package/dist/module/form/form-editor/preview/number-only.js.map +1 -1
  45. package/dist/module/form/form-editor/preview/phone-number.js +7 -1
  46. package/dist/module/form/form-editor/preview/phone-number.js.map +1 -1
  47. package/dist/module/form/form-editor/preview/preview.js +212 -0
  48. package/dist/module/form/form-editor/preview/preview.js.map +1 -0
  49. package/dist/module/form/form-editor/preview/question.js +48 -138
  50. package/dist/module/form/form-editor/preview/question.js.map +1 -1
  51. package/dist/module/form/form-editor/preview/radio-sortable.js +7 -2
  52. package/dist/module/form/form-editor/preview/radio-sortable.js.map +1 -1
  53. package/dist/module/form/form-editor/preview/radio.js +7 -2
  54. package/dist/module/form/form-editor/preview/radio.js.map +1 -1
  55. package/dist/module/form/form-editor/preview/select-sortable.js +38 -0
  56. package/dist/module/form/form-editor/preview/select-sortable.js.map +1 -0
  57. package/dist/module/form/form-editor/preview/select.js +11 -0
  58. package/dist/module/form/form-editor/preview/select.js.map +1 -0
  59. package/dist/module/form/form-editor/preview/short-answer.js +7 -1
  60. package/dist/module/form/form-editor/preview/short-answer.js.map +1 -1
  61. package/dist/module/form/form-editor/preview/supporting-evidence.js +7 -1
  62. package/dist/module/form/form-editor/preview/supporting-evidence.js.map +1 -1
  63. package/dist/module/form/form-editor/preview/types.js.map +1 -1
  64. package/dist/module/form/form-editor/preview/uk-address.js +7 -2
  65. package/dist/module/form/form-editor/preview/uk-address.js.map +1 -1
  66. package/dist/module/form/form-editor/preview/yes-no.js +7 -2
  67. package/dist/module/form/form-editor/preview/yes-no.js.map +1 -1
  68. package/dist/module/form/form-editor/types.js.map +1 -1
  69. package/dist/module/form/form-metadata/index.js +1 -5
  70. package/dist/module/form/form-metadata/index.js.map +1 -1
  71. package/dist/module/form/utils/index.js +1 -0
  72. package/dist/module/form/utils/index.js.map +1 -1
  73. package/dist/module/form/utils/list.js +15 -0
  74. package/dist/module/form/utils/list.js.map +1 -0
  75. package/dist/module/index.js.map +1 -1
  76. package/dist/module/stubs.js +1 -0
  77. package/dist/module/stubs.js.map +1 -1
  78. package/dist/types/conditions/condition-operators.d.ts +0 -4
  79. package/dist/types/conditions/condition-operators.d.ts.map +1 -1
  80. package/dist/types/form/form-definition/index.d.ts.map +1 -1
  81. package/dist/types/form/form-editor/__stubs__/preview.d.ts +58 -11
  82. package/dist/types/form/form-editor/__stubs__/preview.d.ts.map +1 -1
  83. package/dist/types/form/form-editor/index.d.ts.map +1 -1
  84. package/dist/types/form/form-editor/macros/types.d.ts +62 -0
  85. package/dist/types/form/form-editor/macros/types.d.ts.map +1 -0
  86. package/dist/types/form/form-editor/preview/autocomplete.d.ts +3 -1
  87. package/dist/types/form/form-editor/preview/autocomplete.d.ts.map +1 -1
  88. package/dist/types/form/form-editor/preview/checkbox-sortable.d.ts.map +1 -1
  89. package/dist/types/form/form-editor/preview/checkbox.d.ts +4 -0
  90. package/dist/types/form/form-editor/preview/checkbox.d.ts.map +1 -0
  91. package/dist/types/form/form-editor/preview/component-elements.d.ts +35 -0
  92. package/dist/types/form/form-editor/preview/component-elements.d.ts.map +1 -0
  93. package/dist/types/form/form-editor/preview/constants.d.ts +2 -0
  94. package/dist/types/form/form-editor/preview/constants.d.ts.map +1 -0
  95. package/dist/types/form/form-editor/preview/content.d.ts +43 -0
  96. package/dist/types/form/form-editor/preview/content.d.ts.map +1 -0
  97. package/dist/types/form/form-editor/preview/controller/page-controller.d.ts +132 -0
  98. package/dist/types/form/form-editor/preview/controller/page-controller.d.ts.map +1 -0
  99. package/dist/types/form/form-editor/preview/date-input.d.ts.map +1 -1
  100. package/dist/types/form/form-editor/preview/email-address.d.ts.map +1 -1
  101. package/dist/types/form/form-editor/preview/fieldset-question.d.ts +2 -0
  102. package/dist/types/form/form-editor/preview/fieldset-question.d.ts.map +1 -1
  103. package/dist/types/form/form-editor/preview/helpers.d.ts +11 -0
  104. package/dist/types/form/form-editor/preview/helpers.d.ts.map +1 -0
  105. package/dist/types/form/form-editor/preview/index.d.ts +6 -0
  106. package/dist/types/form/form-editor/preview/list-sortable.d.ts +1 -1
  107. package/dist/types/form/form-editor/preview/list.d.ts +25 -0
  108. package/dist/types/form/form-editor/preview/list.d.ts.map +1 -1
  109. package/dist/types/form/form-editor/preview/long-answer.d.ts.map +1 -1
  110. package/dist/types/form/form-editor/preview/markdown.d.ts +9 -0
  111. package/dist/types/form/form-editor/preview/markdown.d.ts.map +1 -0
  112. package/dist/types/form/form-editor/preview/month-year.d.ts.map +1 -1
  113. package/dist/types/form/form-editor/preview/number-only.d.ts.map +1 -1
  114. package/dist/types/form/form-editor/preview/phone-number.d.ts.map +1 -1
  115. package/dist/types/form/form-editor/preview/preview.d.ts +126 -0
  116. package/dist/types/form/form-editor/preview/preview.d.ts.map +1 -0
  117. package/dist/types/form/form-editor/preview/question.d.ts +19 -93
  118. package/dist/types/form/form-editor/preview/question.d.ts.map +1 -1
  119. package/dist/types/form/form-editor/preview/radio-sortable.d.ts.map +1 -1
  120. package/dist/types/form/form-editor/preview/radio.d.ts.map +1 -1
  121. package/dist/types/form/form-editor/preview/select-sortable.d.ts +18 -0
  122. package/dist/types/form/form-editor/preview/select-sortable.d.ts.map +1 -0
  123. package/dist/types/form/form-editor/preview/select.d.ts +4 -0
  124. package/dist/types/form/form-editor/preview/select.d.ts.map +1 -0
  125. package/dist/types/form/form-editor/preview/short-answer.d.ts.map +1 -1
  126. package/dist/types/form/form-editor/preview/supporting-evidence.d.ts.map +1 -1
  127. package/dist/types/form/form-editor/preview/types.d.ts +13 -17
  128. package/dist/types/form/form-editor/preview/types.d.ts.map +1 -1
  129. package/dist/types/form/form-editor/preview/uk-address.d.ts.map +1 -1
  130. package/dist/types/form/form-editor/preview/yes-no.d.ts.map +1 -1
  131. package/dist/types/form/form-editor/types.d.ts +6 -4
  132. package/dist/types/form/form-editor/types.d.ts.map +1 -1
  133. package/dist/types/form/form-metadata/index.d.ts.map +1 -1
  134. package/dist/types/form/utils/index.d.ts +1 -0
  135. package/dist/types/form/utils/index.d.ts.map +1 -1
  136. package/dist/types/form/utils/list.d.ts +10 -0
  137. package/dist/types/form/utils/list.d.ts.map +1 -0
  138. package/dist/types/index.d.ts +1 -0
  139. package/dist/types/index.d.ts.map +1 -1
  140. package/dist/types/stubs.d.ts +1 -0
  141. package/dist/types/stubs.d.ts.map +1 -1
  142. package/package.json +1 -1
  143. package/schemas/form-definition-schema.json +0 -12
  144. package/schemas/form-metadata-input-schema.json +1 -2
  145. package/schemas/form-metadata-schema.json +1 -2
  146. package/schemas/question-type-full-schema.json +2 -1
  147. package/src/conditions/condition-operators.ts +4 -1
  148. package/src/form/form-definition/index.ts +0 -5
  149. package/src/form/form-editor/__stubs__/preview.js +84 -4
  150. package/src/form/form-editor/index.ts +4 -2
  151. package/src/form/form-editor/macros/types.ts +65 -0
  152. package/src/form/form-editor/preview/autocomplete.js +21 -4
  153. package/src/form/form-editor/preview/checkbox-sortable.js +7 -2
  154. package/src/form/form-editor/preview/checkbox.js +17 -0
  155. package/src/form/form-editor/preview/component-elements.js +61 -0
  156. package/src/form/form-editor/preview/constants.js +1 -0
  157. package/src/form/form-editor/preview/content.js +93 -0
  158. package/src/form/form-editor/preview/controller/page-controller.js +284 -0
  159. package/src/form/form-editor/preview/date-input.js +8 -2
  160. package/src/form/form-editor/preview/email-address.js +7 -1
  161. package/src/form/form-editor/preview/fieldset-question.js +6 -0
  162. package/src/form/form-editor/preview/helpers.js +95 -0
  163. package/src/form/form-editor/preview/index.js +6 -0
  164. package/src/form/form-editor/preview/list.js +62 -3
  165. package/src/form/form-editor/preview/long-answer.js +7 -1
  166. package/src/form/form-editor/preview/markdown.js +50 -0
  167. package/src/form/form-editor/preview/month-year.js +7 -2
  168. package/src/form/form-editor/preview/number-only.js +5 -0
  169. package/src/form/form-editor/preview/phone-number.js +7 -1
  170. package/src/form/form-editor/preview/preview.js +211 -0
  171. package/src/form/form-editor/preview/question.js +47 -142
  172. package/src/form/form-editor/preview/radio-sortable.js +7 -2
  173. package/src/form/form-editor/preview/radio.js +7 -2
  174. package/src/form/form-editor/preview/select-sortable.js +43 -0
  175. package/src/form/form-editor/preview/select.js +11 -0
  176. package/src/form/form-editor/preview/short-answer.js +7 -1
  177. package/src/form/form-editor/preview/supporting-evidence.js +7 -1
  178. package/src/form/form-editor/preview/types.ts +18 -18
  179. package/src/form/form-editor/preview/uk-address.js +7 -2
  180. package/src/form/form-editor/preview/yes-no.js +7 -2
  181. package/src/form/form-editor/types.ts +6 -4
  182. package/src/form/form-metadata/index.ts +2 -5
  183. package/src/form/utils/index.ts +1 -0
  184. package/src/form/utils/list.ts +25 -0
  185. package/src/index.ts +1 -0
  186. package/src/stubs.ts +1 -0
@@ -108,9 +108,8 @@
108
108
  },
109
109
  "notificationEmail": {
110
110
  "type": "string",
111
- "description": "Email address to receive form submission notifications, must be a .gov.uk or .org.uk address",
111
+ "description": "Email address to receive form submission notifications",
112
112
  "format": "email",
113
- "pattern": "\\.gov\\.uk$|\\.org\\.uk$",
114
113
  "title": "Notification Email"
115
114
  },
116
115
  "id": {
@@ -14,7 +14,8 @@
14
14
  "YesNoField",
15
15
  "CheckboxesField",
16
16
  "RadiosField",
17
- "AutocompleteField"
17
+ "AutocompleteField",
18
+ "SelectField"
18
19
  ],
19
20
  "$schema": "http://json-schema.org/draft-07/schema#",
20
21
  "title": "Question Type Full Schema",
@@ -73,7 +73,10 @@ export const customOperators = {
73
73
  ...relativeDateOperators
74
74
  },
75
75
  [ComponentType.TextField]: withDefaults(textFieldOperators),
76
- [ComponentType.MultilineTextField]: withDefaults(textFieldOperators),
76
+ [ComponentType.MultilineTextField]: {
77
+ [OperatorName.IsLongerThan]: lengthIs(Operator.IsMoreThan),
78
+ [OperatorName.IsShorterThan]: lengthIs(Operator.IsLessThan)
79
+ },
77
80
  [ComponentType.EmailAddressField]: withDefaults(textFieldOperators),
78
81
  [ComponentType.TelephoneNumberField]: defaultOperators,
79
82
  [ComponentType.SelectField]: defaultOperators,
@@ -180,11 +180,6 @@ const relativeDateValueDataSchemaV2 = Joi.object<RelativeDateValueDataV2>()
180
180
  const relativeDateValueDataSchema = Joi.object<RelativeDateValueData>()
181
181
  .description('Relative date specification for date-based conditions')
182
182
  .keys({
183
- type: Joi.string()
184
- .trim()
185
- .valid('RelativeDate')
186
- .required()
187
- .description('Type of the condition value, should be "RelativeDate"'),
188
183
  period: Joi.string()
189
184
  .trim()
190
185
  .required()
@@ -1,3 +1,5 @@
1
+ import { Question } from '~/src/form/form-editor/preview/question.js'
2
+
1
3
  /**
2
4
  * @implements {QuestionRenderer}
3
5
  */
@@ -32,6 +34,40 @@ export class QuestionRendererStub {
32
34
  }
33
35
  }
34
36
 
37
+ /**
38
+ * @implements {PageRenderer}
39
+ */
40
+ export class PageRendererStub {
41
+ /**
42
+ * @type {jest.Mock<void, [string, PagePreviewPanelMacro]>}
43
+ */
44
+ renderMock
45
+
46
+ /**
47
+ * @param {jest.Mock<void, [string, PagePreviewPanelMacro]>} renderMock
48
+ */
49
+ constructor(renderMock) {
50
+ this.renderMock = renderMock
51
+ }
52
+
53
+ /**
54
+ * @param {string} pageTemplate
55
+ * @param {PagePreviewPanelMacro} pagePreviewPanelMacro
56
+ */
57
+ render(pageTemplate, pagePreviewPanelMacro) {
58
+ this.renderMock(pageTemplate, pagePreviewPanelMacro)
59
+ }
60
+
61
+ /**
62
+ * @returns {string}
63
+ * @param {string} _questionTemplate
64
+ * @param {RenderContext} _renderContext
65
+ */
66
+ static buildHTML(_questionTemplate, _renderContext) {
67
+ return '**** BUILT HTML ****'
68
+ }
69
+ }
70
+
35
71
  /**
36
72
  * @implements {ListElements}
37
73
  */
@@ -49,6 +85,11 @@ export class QuestionPreviewElements {
49
85
  * @protected
50
86
  */
51
87
  _shortDesc = ''
88
+ /**
89
+ * @type {string}
90
+ * @protected
91
+ */
92
+ _content = ''
52
93
  /**
53
94
  *
54
95
  * @type {ListElement[]}
@@ -61,21 +102,26 @@ export class QuestionPreviewElements {
61
102
  /**
62
103
  * @param {BaseSettings} baseSettings
63
104
  */
64
- constructor({ question, hintText, optional, shortDesc, items }) {
105
+ constructor({ question, hintText, optional, shortDesc, items, content }) {
65
106
  this._question = question
66
107
  this._hintText = hintText
67
108
  this._optional = optional
68
109
  this._shortDesc = shortDesc
69
110
  this._items = items
111
+ this._content = content
70
112
  }
71
113
 
114
+ /**
115
+ * @returns {BaseSettings}
116
+ */
72
117
  get values() {
73
118
  return {
74
119
  question: this._question,
75
120
  hintText: this._hintText,
76
121
  optional: this._optional,
77
122
  shortDesc: this._shortDesc,
78
- items: this._items
123
+ items: this._items,
124
+ content: this._content
79
125
  }
80
126
  }
81
127
 
@@ -107,12 +153,30 @@ export class AutocompletePreviewElements extends QuestionPreviewElements {
107
153
  }
108
154
  }
109
155
 
156
+ /**
157
+ * @implements {PageOverviewElements}
158
+ */
159
+ export class PagePreviewElements {
160
+ guidance
161
+ heading
162
+
163
+ /**
164
+ * @param {string} heading
165
+ * @param {string} guidance
166
+ */
167
+ constructor(heading, guidance = '') {
168
+ this.heading = heading
169
+ this.guidance = guidance
170
+ }
171
+ }
172
+
110
173
  export const baseElements = /** @type {BaseSettings} */ ({
111
174
  items: [],
112
175
  optional: false,
113
176
  question: 'Which quest would you like to pick?',
114
177
  hintText: 'Choose one adventure that best suits you.',
115
- shortDesc: ''
178
+ shortDesc: '',
179
+ content: ''
116
180
  })
117
181
 
118
182
  const list1Id = '414d82a3-4cab-416a-bd54-6b86fbd51120'
@@ -158,7 +222,23 @@ export const listElementsStub = {
158
222
  baseElements: listElementsBase
159
223
  }
160
224
 
225
+ /**
226
+ * @param {Partial<BaseSettings>} partialBaseElements
227
+ * @param {jest.Mock<void, [string, QuestionBaseModel]>} renderMock
228
+ * @returns {Question}
229
+ */
230
+ export function buildPreviewShortAnswer(partialBaseElements, renderMock) {
231
+ return new Question(
232
+ new QuestionPreviewElements({
233
+ ...baseElements,
234
+ ...partialBaseElements
235
+ }),
236
+ new QuestionRendererStub(renderMock)
237
+ )
238
+ }
239
+
161
240
  /**
162
241
  * @import { ListElement } from '~/src/form/form-editor/types.js'
163
- * @import { BaseSettings, ListElements, RenderContext, QuestionBaseModel, QuestionElements, QuestionRenderer, AutocompleteElements } from '~/src/form/form-editor/preview/types.js'
242
+ * @import { PagePreviewPanelMacro } from '~/src/form/form-editor/macros/types.js'
243
+ * @import { BaseSettings, ListElements, RenderContext, QuestionBaseModel, QuestionElements, QuestionRenderer, AutocompleteElements, PageOverviewElements, PageRenderer } from '~/src/form/form-editor/preview/types.js'
164
244
  */
@@ -54,7 +54,8 @@ export const questionTypeFullSchema = Joi.string()
54
54
  ComponentType.YesNoField,
55
55
  ComponentType.CheckboxesField,
56
56
  ComponentType.RadiosField,
57
- ComponentType.AutocompleteField
57
+ ComponentType.AutocompleteField,
58
+ ComponentType.SelectField
58
59
  )
59
60
  .description('The specific component type to use for this question')
60
61
 
@@ -76,7 +77,8 @@ export const listSubSchema = Joi.string()
76
77
  ComponentType.YesNoField,
77
78
  ComponentType.CheckboxesField,
78
79
  ComponentType.RadiosField,
79
- ComponentType.AutocompleteField
80
+ ComponentType.AutocompleteField,
81
+ ComponentType.SelectField
80
82
  )
81
83
  .description('Subtype for date-related questions')
82
84
 
@@ -0,0 +1,65 @@
1
+ import { type ComponentType } from '~/src/components/enums.js'
2
+ import {
3
+ type DateItem,
4
+ type GovukField,
5
+ type ListItemReadonly
6
+ } from '~/src/form/form-editor/types.js'
7
+ import { type DefaultComponent, type GovukFieldset } from '~/src/index.js'
8
+
9
+ export interface AppPreviewErrorPanelMacroErrorTemplate {
10
+ advancedSettingsErrors: []
11
+ baseErrors: { template: unknown; type: string }[]
12
+ }
13
+
14
+ export interface AppPreviewErrorPanelMacro {
15
+ errorTemplates: AppPreviewErrorPanelMacroErrorTemplate
16
+ fieldDetails: {
17
+ extraFields: GovukField[]
18
+ basePageFields: GovukField[]
19
+ }
20
+ questionType: ComponentType
21
+ }
22
+
23
+ export interface AppPreviewPanelTabsMacro {
24
+ questionType: ComponentType
25
+ previewPageUrl: string
26
+ previewErrorsUrl: string
27
+ errorTemplates: AppPreviewErrorPanelMacroErrorTemplate
28
+ extraFields: GovukField[]
29
+ basePageFields: GovukField[]
30
+ }
31
+
32
+ export interface QuestionBaseModel {
33
+ id?: string
34
+ name?: string
35
+ content?: string
36
+ label?: DefaultComponent
37
+ hint?: DefaultComponent
38
+ fieldset?: GovukFieldset
39
+ readonly items?: ListItemReadonly[] | DateItem[]
40
+ text?: string
41
+ formGroup?: { afterInputs: { html: string } }
42
+ type?: 'text' | 'number' | 'boolean'
43
+ classes?: string
44
+ }
45
+
46
+ export interface AppPreviewPanelMacro extends AppPreviewPanelTabsMacro {
47
+ model: QuestionBaseModel
48
+ }
49
+
50
+ export interface PagePreviewComponent {
51
+ model: QuestionBaseModel
52
+ questionType: ComponentType
53
+ }
54
+
55
+ export interface PagePreviewPanelMacro {
56
+ readonly pageTitle: {
57
+ text: string
58
+ classes: string
59
+ }
60
+ readonly guidance: {
61
+ text: string
62
+ classes: string
63
+ }
64
+ readonly components: PagePreviewComponent[]
65
+ }
@@ -1,19 +1,36 @@
1
+ import { ComponentType } from '~/src/components/enums.js'
1
2
  import { autoCompleteOptionsSchema } from '~/src/form/form-editor/index.js'
3
+ import { PreviewComponent } from '~/src/form/form-editor/preview/preview.js'
2
4
  import { Question } from '~/src/form/form-editor/preview/question.js'
3
5
 
4
- export class AutocompleteQuestion extends Question {
5
- _questionTemplate = Question.PATH + 'autocompletefield.njk'
6
+ export class AutocompleteListQuestion extends Question {
7
+ /**
8
+ * @type {ComponentType}
9
+ */
10
+ componentType = ComponentType.AutocompleteField
11
+ _questionTemplate = PreviewComponent.PATH + 'autocompletefield.njk'
6
12
  /**
7
13
  * @type {string}
8
14
  * @protected
9
15
  */
10
16
  _fieldName = 'autoCompleteField'
17
+
18
+ /**
19
+ * @returns {Partial<QuestionBaseModel>}
20
+ */
21
+ get customRenderFields() {
22
+ return {
23
+ items: this._htmlElements.values.items
24
+ }
25
+ }
26
+ }
27
+
28
+ export class AutocompleteQuestion extends AutocompleteListQuestion {
11
29
  /**
12
30
  * @type {ListElement[]}
13
31
  * @private
14
32
  */
15
33
  _autocompleteList = []
16
-
17
34
  /**
18
35
  * @param {AutocompleteElements} autocompleteElements
19
36
  * @param {QuestionRenderer} questionRenderer
@@ -63,5 +80,5 @@ export class AutocompleteQuestion extends Question {
63
80
  /**
64
81
  * @import { ValidationResult } from 'joi'
65
82
  * @import { ListElement } from '~/src/form/form-editor/types.js'
66
- * @import { AutocompleteElements, QuestionRenderer } from '~/src/form/form-editor/preview/types.js'
83
+ * @import { AutocompleteElements, QuestionRenderer, QuestionBaseModel } from '~/src/form/form-editor/preview/types.js'
67
84
  */
@@ -1,12 +1,17 @@
1
+ import { ComponentType } from '~/src/components/enums.js'
1
2
  import { ListSortableQuestion } from '~/src/form/form-editor/preview/list-sortable.js'
2
- import { Question } from '~/src/form/form-editor/preview/question.js'
3
+ import { PreviewComponent } from '~/src/form/form-editor/preview/preview.js'
3
4
 
4
5
  export class CheckboxSortableQuestion extends ListSortableQuestion {
6
+ /**
7
+ * @type {ComponentType}
8
+ */
9
+ componentType = ComponentType.CheckboxesField
5
10
  /**
6
11
  * @type {string}
7
12
  * @protected
8
13
  */
9
- _questionTemplate = Question.PATH + 'checkboxesfield.njk'
14
+ _questionTemplate = PreviewComponent.PATH + 'checkboxesfield.njk'
10
15
  listRenderId = 'checkboxField'
11
16
  listRenderName = 'checkboxField'
12
17
  }
@@ -0,0 +1,17 @@
1
+ import { ComponentType } from '~/src/components/enums.js'
2
+ import { ListQuestion } from '~/src/form/form-editor/preview/list.js'
3
+ import { PreviewComponent } from '~/src/form/form-editor/preview/preview.js'
4
+
5
+ export class CheckboxQuestion extends ListQuestion {
6
+ /**
7
+ * @type {ComponentType}
8
+ */
9
+ componentType = ComponentType.CheckboxesField
10
+ /**
11
+ * @type {string}
12
+ * @protected
13
+ */
14
+ _questionTemplate = PreviewComponent.PATH + 'checkboxesfield.njk'
15
+ listRenderId = 'checkboxField'
16
+ listRenderName = 'checkboxField'
17
+ }
@@ -0,0 +1,61 @@
1
+ /**
2
+ * @implements {QuestionElements}
3
+ */
4
+ export class ComponentElements {
5
+ /**
6
+ * @type {ComponentDef}
7
+ * @protected
8
+ */
9
+ _component
10
+ /**
11
+ * @param {ComponentDef} component
12
+ */
13
+ constructor(component) {
14
+ this._component = component
15
+ }
16
+
17
+ /**
18
+ * @protected
19
+ * @returns {BaseSettings}
20
+ */
21
+ _getValues() {
22
+ const required = this._component.options?.required ?? true
23
+
24
+ return {
25
+ question: this._component.title,
26
+ hintText: '',
27
+ optional: !required,
28
+ shortDesc: '',
29
+ items: [],
30
+ content: ''
31
+ }
32
+ }
33
+
34
+ /**
35
+ * @returns {BaseSettings}
36
+ */
37
+ get values() {
38
+ const values = this._getValues()
39
+ return values
40
+ }
41
+
42
+ /**
43
+ * @param {HTMLElement} _element
44
+ */
45
+ setPreviewDOM(_element) {
46
+ throw new Error('Not implemented')
47
+ }
48
+
49
+ /**
50
+ * @param {string} _value
51
+ */
52
+ setPreviewHTML(_value) {
53
+ throw new Error('Not implemented')
54
+ }
55
+ }
56
+
57
+ /**
58
+ * @import { ListenerRow, BaseSettings, QuestionElements, QuestionBaseModel, GovukFieldset, DefaultComponent, QuestionRenderer } from '~/src/form/form-editor/preview/types.js'
59
+ * @import { FormComponentsDef, ContentComponentsDef, ComponentDef } from '~/src/components/types.js'
60
+ * @import { ListElement, ListItemReadonly } from '~/src/form/form-editor/types.js'
61
+ */
@@ -0,0 +1 @@
1
+ export const HIGHLIGHT_CLASS = 'highlight'
@@ -0,0 +1,93 @@
1
+ import { ComponentElements } from '~/src/form/form-editor/preview/component-elements.js'
2
+ import { PreviewComponent } from '~/src/form/form-editor/preview/preview.js'
3
+
4
+ /**
5
+ * @implements {QuestionElements}
6
+ */
7
+ export class ContentElements extends ComponentElements {
8
+ /**
9
+ * @type {Exclude<ContentComponentsDef, ListComponent>}
10
+ * @protected
11
+ */
12
+ _component
13
+ /**
14
+ * @param {Exclude<ContentComponentsDef, ListComponent>} component
15
+ */
16
+ constructor(component) {
17
+ super(component)
18
+ this._component = component
19
+ }
20
+
21
+ /**
22
+ * @protected
23
+ * @returns {BaseSettings}
24
+ */
25
+ _getValues() {
26
+ return {
27
+ ...super._getValues(),
28
+ content: this._component.content
29
+ }
30
+ }
31
+ }
32
+
33
+ /**
34
+ * @abstract
35
+ * @class Content
36
+ * @classdesc
37
+ * Base of Content preview classes
38
+ */
39
+ export class Content extends PreviewComponent {
40
+ /**
41
+ * @type {string}
42
+ * @protected
43
+ */
44
+ _content
45
+
46
+ /**
47
+ * @param {QuestionElements} htmlElements
48
+ * @param {QuestionRenderer} questionRenderer
49
+ */
50
+ constructor(htmlElements, questionRenderer) {
51
+ super(htmlElements, questionRenderer)
52
+ const { content } = htmlElements.values
53
+
54
+ this._content = content
55
+ }
56
+
57
+ /**
58
+ * @returns {QuestionBaseModel}
59
+ * @protected
60
+ */
61
+ _renderInput() {
62
+ return {
63
+ ...super._renderInput(),
64
+ content: this.content
65
+ }
66
+ }
67
+
68
+ /**
69
+ * @param {string} value
70
+ * @protected
71
+ */
72
+ _setContent(value) {
73
+ this._content = value
74
+ }
75
+
76
+ /**
77
+ * @returns {string}
78
+ */
79
+ get content() {
80
+ return this._content
81
+ }
82
+
83
+ set content(value) {
84
+ this._setContent(value)
85
+ this.render()
86
+ }
87
+ }
88
+
89
+ /**
90
+ * @import { ListenerRow, BaseSettings, QuestionElements, QuestionBaseModel, GovukFieldset, DefaultComponent, QuestionRenderer } from '~/src/form/form-editor/preview/types.js'
91
+ * @import { FormComponentsDef, ListComponent, ContentComponentsDef, ComponentDef } from '~/src/components/types.js'
92
+ * @import { ListElement, ListItemReadonly } from '~/src/form/form-editor/types.js'
93
+ */