@researchdatabox/sails-ng-common 0.2.1 → 5.0.0-RC1

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 (237) hide show
  1. package/dist/src/config/base-field-component.model.d.ts +26 -0
  2. package/dist/src/config/base-field-component.model.js +29 -0
  3. package/dist/src/config/base-field-component.outline.d.ts +108 -0
  4. package/dist/src/config/base-field-component.outline.js +3 -0
  5. package/dist/src/config/component/accordion.model.d.ts +103 -0
  6. package/dist/src/config/component/accordion.model.js +127 -0
  7. package/dist/src/config/component/accordion.outline.d.ts +162 -0
  8. package/dist/src/config/component/accordion.outline.js +13 -0
  9. package/dist/src/config/component/action-row-layout.model.d.ts +28 -0
  10. package/dist/src/config/component/action-row-layout.model.js +35 -0
  11. package/dist/src/config/component/action-row-layout.outline.d.ts +36 -0
  12. package/dist/src/config/component/action-row-layout.outline.js +6 -0
  13. package/dist/src/config/component/cancel-button.model.d.ts +48 -0
  14. package/dist/src/config/component/cancel-button.model.js +58 -0
  15. package/dist/src/config/component/cancel-button.outline.d.ts +85 -0
  16. package/dist/src/config/component/cancel-button.outline.js +6 -0
  17. package/dist/src/config/component/checkbox-input.model.d.ts +67 -0
  18. package/dist/src/config/component/checkbox-input.model.js +79 -0
  19. package/dist/src/config/component/checkbox-input.outline.d.ts +93 -0
  20. package/dist/src/config/component/checkbox-input.outline.js +8 -0
  21. package/dist/src/config/component/checkbox-tree.model.d.ts +68 -0
  22. package/dist/src/config/component/checkbox-tree.model.js +80 -0
  23. package/dist/src/config/component/checkbox-tree.outline.d.ts +105 -0
  24. package/dist/src/config/component/checkbox-tree.outline.js +8 -0
  25. package/dist/src/config/component/content.model.d.ts +46 -0
  26. package/dist/src/config/component/content.model.js +56 -0
  27. package/dist/src/config/component/content.outline.d.ts +74 -0
  28. package/dist/src/config/component/content.outline.js +6 -0
  29. package/dist/src/config/component/data-location.model.d.ts +83 -0
  30. package/dist/src/config/component/data-location.model.js +95 -0
  31. package/dist/src/config/component/data-location.outline.d.ts +124 -0
  32. package/dist/src/config/component/data-location.outline.js +6 -0
  33. package/dist/src/config/component/date-input.model.d.ts +67 -0
  34. package/dist/src/config/component/date-input.model.js +80 -0
  35. package/dist/src/config/component/date-input.outline.d.ts +88 -0
  36. package/dist/src/config/component/date-input.outline.js +8 -0
  37. package/dist/src/config/component/default-layout.model.d.ts +22 -0
  38. package/dist/src/config/component/default-layout.model.js +30 -0
  39. package/dist/src/config/component/default-layout.outline.d.ts +29 -0
  40. package/dist/src/config/component/default-layout.outline.js +5 -0
  41. package/dist/src/config/component/delete-button.model.d.ts +46 -0
  42. package/dist/src/config/component/delete-button.model.js +48 -0
  43. package/dist/src/config/component/delete-button.outline.d.ts +89 -0
  44. package/dist/src/config/component/delete-button.outline.js +5 -0
  45. package/dist/src/config/component/dropdown-input.model.d.ts +65 -0
  46. package/dist/src/config/component/dropdown-input.model.js +78 -0
  47. package/dist/src/config/component/dropdown-input.outline.d.ts +92 -0
  48. package/dist/src/config/component/dropdown-input.outline.js +8 -0
  49. package/dist/src/config/component/file-upload.model.d.ts +67 -0
  50. package/dist/src/config/component/file-upload.model.js +81 -0
  51. package/dist/src/config/component/file-upload.outline.d.ts +99 -0
  52. package/dist/src/config/component/file-upload.outline.js +8 -0
  53. package/dist/src/config/component/group.model.d.ts +61 -0
  54. package/dist/src/config/component/group.model.js +75 -0
  55. package/dist/src/config/component/group.outline.d.ts +83 -0
  56. package/dist/src/config/component/group.outline.js +8 -0
  57. package/dist/src/config/component/inline-layout.model.d.ts +22 -0
  58. package/dist/src/config/component/inline-layout.model.js +29 -0
  59. package/dist/src/config/component/inline-layout.outline.d.ts +29 -0
  60. package/dist/src/config/component/inline-layout.outline.js +5 -0
  61. package/dist/src/config/component/integration-status.model.d.ts +49 -0
  62. package/dist/src/config/component/integration-status.model.js +65 -0
  63. package/dist/src/config/component/integration-status.outline.d.ts +61 -0
  64. package/dist/src/config/component/integration-status.outline.js +5 -0
  65. package/dist/src/config/component/map.model.d.ts +69 -0
  66. package/dist/src/config/component/map.model.js +86 -0
  67. package/dist/src/config/component/map.outline.d.ts +110 -0
  68. package/dist/src/config/component/map.outline.js +8 -0
  69. package/dist/src/config/component/pdf-list.model.d.ts +68 -0
  70. package/dist/src/config/component/pdf-list.model.js +71 -0
  71. package/dist/src/config/component/pdf-list.outline.d.ts +97 -0
  72. package/dist/src/config/component/pdf-list.outline.js +6 -0
  73. package/dist/src/config/component/publish-data-location-refresh.model.d.ts +39 -0
  74. package/dist/src/config/component/publish-data-location-refresh.model.js +52 -0
  75. package/dist/src/config/component/publish-data-location-refresh.outline.d.ts +58 -0
  76. package/dist/src/config/component/publish-data-location-refresh.outline.js +5 -0
  77. package/dist/src/config/component/publish-data-location-selector.model.d.ts +78 -0
  78. package/dist/src/config/component/publish-data-location-selector.model.js +104 -0
  79. package/dist/src/config/component/publish-data-location-selector.outline.d.ts +110 -0
  80. package/dist/src/config/component/publish-data-location-selector.outline.js +6 -0
  81. package/dist/src/config/component/question-tree.helper.d.ts +58 -0
  82. package/dist/src/config/component/question-tree.helper.js +291 -0
  83. package/dist/src/config/component/question-tree.model.d.ts +64 -0
  84. package/dist/src/config/component/question-tree.model.js +80 -0
  85. package/dist/src/config/component/question-tree.outline.d.ts +314 -0
  86. package/dist/src/config/component/question-tree.outline.js +9 -0
  87. package/dist/src/config/component/radio-input.model.d.ts +65 -0
  88. package/dist/src/config/component/radio-input.model.js +77 -0
  89. package/dist/src/config/component/radio-input.outline.d.ts +91 -0
  90. package/dist/src/config/component/radio-input.outline.js +8 -0
  91. package/dist/src/config/component/record-metadata-retriever.model.d.ts +41 -0
  92. package/dist/src/config/component/record-metadata-retriever.model.js +57 -0
  93. package/dist/src/config/component/record-metadata-retriever.outline.d.ts +53 -0
  94. package/dist/src/config/component/record-metadata-retriever.outline.js +5 -0
  95. package/dist/src/config/component/record-selector.model.d.ts +61 -0
  96. package/dist/src/config/component/record-selector.model.js +61 -0
  97. package/dist/src/config/component/record-selector.outline.d.ts +91 -0
  98. package/dist/src/config/component/record-selector.outline.js +6 -0
  99. package/dist/src/config/component/repeatable.model.d.ts +91 -0
  100. package/dist/src/config/component/repeatable.model.js +112 -0
  101. package/dist/src/config/component/repeatable.outline.d.ts +115 -0
  102. package/dist/src/config/component/repeatable.outline.js +10 -0
  103. package/dist/src/config/component/reusable.model.d.ts +42 -0
  104. package/dist/src/config/component/reusable.model.js +57 -0
  105. package/dist/src/config/component/reusable.outline.d.ts +55 -0
  106. package/dist/src/config/component/reusable.outline.js +6 -0
  107. package/dist/src/config/component/rich-text-editor.model.d.ts +65 -0
  108. package/dist/src/config/component/rich-text-editor.model.js +79 -0
  109. package/dist/src/config/component/rich-text-editor.outline.d.ts +92 -0
  110. package/dist/src/config/component/rich-text-editor.outline.js +8 -0
  111. package/dist/src/config/component/save-button.model.d.ts +49 -0
  112. package/dist/src/config/component/save-button.model.js +59 -0
  113. package/dist/src/config/component/save-button.outline.d.ts +90 -0
  114. package/dist/src/config/component/save-button.outline.js +6 -0
  115. package/dist/src/config/component/save-status.model.d.ts +42 -0
  116. package/dist/src/config/component/save-status.model.js +60 -0
  117. package/dist/src/config/component/save-status.outline.d.ts +58 -0
  118. package/dist/src/config/component/save-status.outline.js +6 -0
  119. package/dist/src/config/component/simple-input.model.d.ts +62 -0
  120. package/dist/src/config/component/simple-input.model.js +75 -0
  121. package/dist/src/config/component/simple-input.outline.d.ts +86 -0
  122. package/dist/src/config/component/simple-input.outline.js +9 -0
  123. package/dist/src/config/component/suggested-validation-summary.model.d.ts +45 -0
  124. package/dist/src/config/component/suggested-validation-summary.model.js +61 -0
  125. package/dist/src/config/component/suggested-validation-summary.outline.d.ts +57 -0
  126. package/dist/src/config/component/suggested-validation-summary.outline.js +5 -0
  127. package/dist/src/config/component/tab-content.model.d.ts +63 -0
  128. package/dist/src/config/component/tab-content.model.js +77 -0
  129. package/dist/src/config/component/tab-content.outline.d.ts +98 -0
  130. package/dist/src/config/component/tab-content.outline.js +8 -0
  131. package/dist/src/config/component/tab-nav-button.model.d.ts +45 -0
  132. package/dist/src/config/component/tab-nav-button.model.js +55 -0
  133. package/dist/src/config/component/tab-nav-button.outline.d.ts +70 -0
  134. package/dist/src/config/component/tab-nav-button.outline.js +6 -0
  135. package/dist/src/config/component/tab.model.d.ts +71 -0
  136. package/dist/src/config/component/tab.model.js +84 -0
  137. package/dist/src/config/component/tab.outline.d.ts +112 -0
  138. package/dist/src/config/component/tab.outline.js +9 -0
  139. package/dist/src/config/component/text-area.model.d.ts +63 -0
  140. package/dist/src/config/component/text-area.model.js +76 -0
  141. package/dist/src/config/component/text-area.outline.d.ts +87 -0
  142. package/dist/src/config/component/text-area.outline.js +8 -0
  143. package/dist/src/config/component/typeahead-input.model.d.ts +83 -0
  144. package/dist/src/config/component/typeahead-input.model.js +97 -0
  145. package/dist/src/config/component/typeahead-input.outline.d.ts +199 -0
  146. package/dist/src/config/component/typeahead-input.outline.js +10 -0
  147. package/dist/src/config/component/validation-summary.model.d.ts +42 -0
  148. package/dist/src/config/component/validation-summary.model.js +60 -0
  149. package/dist/src/config/component/validation-summary.outline.d.ts +63 -0
  150. package/dist/src/config/component/validation-summary.outline.js +6 -0
  151. package/dist/src/config/dictionary.model.d.ts +648 -0
  152. package/dist/src/config/dictionary.model.js +181 -0
  153. package/dist/src/config/dictionary.outline.d.ts +96 -0
  154. package/dist/src/config/dictionary.outline.js +3 -0
  155. package/dist/src/config/field-component.model.d.ts +7 -0
  156. package/dist/src/config/field-component.model.js +11 -0
  157. package/dist/src/config/field-component.outline.d.ts +20 -0
  158. package/dist/src/config/field-component.outline.js +3 -0
  159. package/dist/src/config/field-layout.model.d.ts +19 -0
  160. package/dist/src/config/field-layout.model.js +23 -0
  161. package/dist/src/config/field-layout.outline.d.ts +42 -0
  162. package/dist/src/config/field-layout.outline.js +3 -0
  163. package/dist/src/config/field-model.model.d.ts +21 -0
  164. package/dist/src/config/field-model.model.js +24 -0
  165. package/dist/src/config/field-model.outline.d.ts +63 -0
  166. package/dist/src/config/field-model.outline.js +3 -0
  167. package/dist/src/config/field.model.d.ts +12 -0
  168. package/dist/src/config/field.model.js +12 -0
  169. package/dist/src/config/field.outline.d.ts +19 -0
  170. package/dist/src/config/field.outline.js +3 -0
  171. package/dist/src/config/form-behaviour.outline.d.ts +128 -0
  172. package/dist/src/config/form-behaviour.outline.js +40 -0
  173. package/dist/src/config/form-component.model.d.ts +38 -0
  174. package/dist/src/config/form-component.model.js +36 -0
  175. package/dist/src/config/form-component.outline.d.ts +305 -0
  176. package/dist/src/config/form-component.outline.js +27 -0
  177. package/dist/src/config/form-config.model.d.ts +33 -0
  178. package/dist/src/config/form-config.model.js +36 -0
  179. package/dist/src/config/form-config.outline.d.ts +111 -0
  180. package/dist/src/config/form-config.outline.js +3 -0
  181. package/dist/src/config/form-override.model.d.ts +146 -0
  182. package/dist/src/config/form-override.model.js +1523 -0
  183. package/dist/src/config/form-override.outline.d.ts +15 -0
  184. package/dist/src/config/form-override.outline.js +3 -0
  185. package/dist/src/config/form-prehydrate.outline.d.ts +17 -0
  186. package/dist/src/config/form-prehydrate.outline.js +5 -0
  187. package/dist/src/config/form-types.model.d.ts +6 -0
  188. package/dist/src/config/form-types.model.js +23 -0
  189. package/dist/src/config/form-types.outline.d.ts +48 -0
  190. package/dist/src/config/form-types.outline.js +137 -0
  191. package/dist/src/config/helpers.d.ts +31 -0
  192. package/dist/src/config/helpers.js +122 -0
  193. package/dist/src/config/names/naming-helpers.d.ts +112 -0
  194. package/dist/src/config/names/naming-helpers.js +188 -0
  195. package/dist/src/config/names/query-helpers.d.ts +43 -0
  196. package/dist/src/config/names/query-helpers.js +59 -0
  197. package/dist/src/config/shared.outline.d.ts +54 -0
  198. package/dist/src/config/shared.outline.js +41 -0
  199. package/dist/src/config/visitor/base.model.d.ts +143 -0
  200. package/dist/src/config/visitor/base.model.js +336 -0
  201. package/dist/src/config/visitor/base.outline.d.ts +146 -0
  202. package/dist/src/config/visitor/base.outline.js +3 -0
  203. package/dist/src/config/visitor/common.model.d.ts +119 -0
  204. package/dist/src/config/visitor/common.model.js +422 -0
  205. package/dist/src/date-format-helpers.d.ts +1 -0
  206. package/dist/src/date-format-helpers.js +21 -0
  207. package/dist/src/handlebars-helpers.d.ts +258 -0
  208. package/dist/src/handlebars-helpers.js +715 -0
  209. package/dist/src/html-helpers.d.ts +15 -0
  210. package/dist/src/html-helpers.js +42 -0
  211. package/dist/src/index.d.ts +118 -3
  212. package/dist/src/index.js +127 -2
  213. package/dist/src/jsonata-helpers.d.ts +40 -0
  214. package/dist/src/jsonata-helpers.js +118 -0
  215. package/dist/src/logger.interface.d.ts +14 -0
  216. package/dist/src/logger.interface.js +3 -0
  217. package/dist/src/record.model.d.ts +23 -0
  218. package/dist/src/record.model.js +19 -1
  219. package/dist/src/report.model.d.ts +46 -0
  220. package/dist/src/status.model.d.ts +22 -0
  221. package/dist/src/status.model.js +28 -0
  222. package/dist/src/template.outline.d.ts +82 -0
  223. package/dist/src/template.outline.js +14 -0
  224. package/dist/src/translation-helpers.d.ts +26 -0
  225. package/dist/src/translation-helpers.js +71 -0
  226. package/dist/src/validation/form.model.d.ts +306 -24
  227. package/dist/src/validation/form.model.js +29 -1
  228. package/dist/src/validation/helpers.d.ts +15 -7
  229. package/dist/src/validation/helpers.js +49 -13
  230. package/dist/src/validation/validators-support.d.ts +39 -2
  231. package/dist/src/validation/validators-support.js +162 -12
  232. package/dist/src/validation/validators.d.ts +28 -0
  233. package/dist/src/validation/validators.js +531 -0
  234. package/package.json +51 -34
  235. package/LICENSE +0 -674
  236. package/dist/src/validation/index.d.ts +0 -3
  237. package/dist/src/validation/index.js +0 -20
@@ -0,0 +1,110 @@
1
+ import { FieldComponentConfigFrameKindType, FieldComponentConfigKindType, FieldComponentDefinitionFrameKindType, FieldComponentDefinitionKindType, FieldModelConfigFrameKindType, FieldModelConfigKindType, FieldModelDefinitionFrameKindType, FieldModelDefinitionKindType, FormComponentDefinitionFrameKindType, FormComponentDefinitionKindType } from "../shared.outline";
2
+ import { FieldComponentConfigFrame, FieldComponentConfigOutline, FieldComponentDefinitionFrame, FieldComponentDefinitionOutline } from "../field-component.outline";
3
+ import { FieldModelConfigFrame, FieldModelConfigOutline, FieldModelDefinitionFrame, FieldModelDefinitionOutline } from "../field-model.outline";
4
+ import { FormComponentDefinitionFrame, FormComponentDefinitionOutline } from "../form-component.outline";
5
+ import { AvailableFieldLayoutDefinitionFrames, AvailableFieldLayoutDefinitionOutlines, AvailableFormComponentDefinitionFrames, AvailableFormComponentDefinitionOutlines } from "../dictionary.outline";
6
+ import { DataLocationAttachmentValue, DataLocationFileValue, DataLocationOption, DataLocationPhysicalValue, DataLocationUrlValue } from "./data-location.outline";
7
+ export declare const PublishDataLocationSelectorComponentName: "PublishDataLocationSelectorComponent";
8
+ export type PublishDataLocationSelectorComponentNameType = typeof PublishDataLocationSelectorComponentName;
9
+ export declare const PublishDataLocationSelectorModelName: "PublishDataLocationSelectorModel";
10
+ export type PublishDataLocationSelectorModelNameType = typeof PublishDataLocationSelectorModelName;
11
+ export interface PublishDataLocationSelectorValueState {
12
+ selected?: boolean;
13
+ }
14
+ export type PublishDataLocationValueType = (DataLocationUrlValue & PublishDataLocationSelectorValueState) | (DataLocationPhysicalValue & PublishDataLocationSelectorValueState) | (DataLocationFileValue & PublishDataLocationSelectorValueState) | (DataLocationAttachmentValue & PublishDataLocationSelectorValueState);
15
+ export type PublishDataLocationModelValueType = PublishDataLocationValueType[];
16
+ export type PublishDataLocationSelectionCriterion = Record<string, string>;
17
+ export interface PublishDataLocationSelectorFieldComponentConfigFrame extends FieldComponentConfigFrame {
18
+ columns?: string[] | Record<string, unknown>[];
19
+ editNotesButtonText?: string;
20
+ editNotesTitle?: string;
21
+ cancelEditNotesButtonText?: string;
22
+ applyEditNotesButtonText?: string;
23
+ editNotesCssClasses?: string;
24
+ typeHeader?: string;
25
+ locationHeader?: string;
26
+ notesHeader?: string;
27
+ iscHeader?: string;
28
+ iscEnabled?: boolean;
29
+ notesEnabled?: boolean;
30
+ metadataOnlyTitle?: string;
31
+ metadataOnlyBody?: string;
32
+ noLocationsAvailableTitle?: string;
33
+ noLocationsAvailableBody?: string;
34
+ selectionSummaryTemplate?: string;
35
+ headerActions?: AvailableFormComponentDefinitionFrames[];
36
+ publicCheck?: string;
37
+ selectionCriteria?: PublishDataLocationSelectionCriterion[];
38
+ dataTypes?: DataLocationOption[];
39
+ dataTypeLookup?: Record<string, string>;
40
+ }
41
+ export interface PublishDataLocationSelectorFieldComponentConfigOutline extends PublishDataLocationSelectorFieldComponentConfigFrame, FieldComponentConfigOutline {
42
+ headerActions?: AvailableFormComponentDefinitionOutlines[];
43
+ }
44
+ export interface PublishDataLocationSelectorFieldComponentDefinitionFrame extends FieldComponentDefinitionFrame {
45
+ class: PublishDataLocationSelectorComponentNameType;
46
+ config?: PublishDataLocationSelectorFieldComponentConfigFrame;
47
+ }
48
+ export interface PublishDataLocationSelectorFieldComponentDefinitionOutline extends PublishDataLocationSelectorFieldComponentDefinitionFrame, FieldComponentDefinitionOutline {
49
+ class: PublishDataLocationSelectorComponentNameType;
50
+ config?: PublishDataLocationSelectorFieldComponentConfigOutline;
51
+ }
52
+ export interface PublishDataLocationSelectorFieldModelConfigFrame extends FieldModelConfigFrame<PublishDataLocationModelValueType> {
53
+ }
54
+ export interface PublishDataLocationSelectorFieldModelConfigOutline extends PublishDataLocationSelectorFieldModelConfigFrame, FieldModelConfigOutline<PublishDataLocationModelValueType> {
55
+ }
56
+ export interface PublishDataLocationSelectorFieldModelDefinitionFrame extends FieldModelDefinitionFrame<PublishDataLocationModelValueType> {
57
+ class: PublishDataLocationSelectorModelNameType;
58
+ config?: PublishDataLocationSelectorFieldModelConfigFrame;
59
+ }
60
+ export interface PublishDataLocationSelectorFieldModelDefinitionOutline extends PublishDataLocationSelectorFieldModelDefinitionFrame, FieldModelDefinitionOutline<PublishDataLocationModelValueType> {
61
+ class: PublishDataLocationSelectorModelNameType;
62
+ config?: PublishDataLocationSelectorFieldModelConfigOutline;
63
+ }
64
+ export interface PublishDataLocationSelectorFormComponentDefinitionFrame extends FormComponentDefinitionFrame {
65
+ component: PublishDataLocationSelectorFieldComponentDefinitionFrame;
66
+ model?: PublishDataLocationSelectorFieldModelDefinitionFrame;
67
+ layout?: AvailableFieldLayoutDefinitionFrames;
68
+ }
69
+ /**
70
+ * Selects a configured data location for publication workflows.
71
+ *
72
+ * @extensionPoint Use `PublishDataLocationSelectorComponent` with its model to bind publishable location choices.
73
+ * @see https://github.com/redbox-mint/redbox-portal/wiki/Configuring-Record-Forms
74
+ */
75
+ export interface PublishDataLocationSelectorFormComponentDefinitionOutline extends PublishDataLocationSelectorFormComponentDefinitionFrame, FormComponentDefinitionOutline {
76
+ component: PublishDataLocationSelectorFieldComponentDefinitionOutline;
77
+ model?: PublishDataLocationSelectorFieldModelDefinitionOutline;
78
+ layout?: AvailableFieldLayoutDefinitionOutlines;
79
+ }
80
+ export type PublishDataLocationSelectorTypes = {
81
+ kind: FieldComponentConfigFrameKindType;
82
+ class: PublishDataLocationSelectorFieldComponentConfigFrame;
83
+ } | {
84
+ kind: FieldComponentDefinitionFrameKindType;
85
+ class: PublishDataLocationSelectorFieldComponentDefinitionFrame;
86
+ } | {
87
+ kind: FieldModelConfigFrameKindType;
88
+ class: PublishDataLocationSelectorFieldModelConfigFrame;
89
+ } | {
90
+ kind: FieldModelDefinitionFrameKindType;
91
+ class: PublishDataLocationSelectorFieldModelDefinitionFrame;
92
+ } | {
93
+ kind: FormComponentDefinitionFrameKindType;
94
+ class: PublishDataLocationSelectorFormComponentDefinitionFrame;
95
+ } | {
96
+ kind: FieldComponentConfigKindType;
97
+ class: PublishDataLocationSelectorFieldComponentConfigOutline;
98
+ } | {
99
+ kind: FieldComponentDefinitionKindType;
100
+ class: PublishDataLocationSelectorFieldComponentDefinitionOutline;
101
+ } | {
102
+ kind: FieldModelConfigKindType;
103
+ class: PublishDataLocationSelectorFieldModelConfigOutline;
104
+ } | {
105
+ kind: FieldModelDefinitionKindType;
106
+ class: PublishDataLocationSelectorFieldModelDefinitionOutline;
107
+ } | {
108
+ kind: FormComponentDefinitionKindType;
109
+ class: PublishDataLocationSelectorFormComponentDefinitionOutline;
110
+ };
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PublishDataLocationSelectorModelName = exports.PublishDataLocationSelectorComponentName = void 0;
4
+ exports.PublishDataLocationSelectorComponentName = "PublishDataLocationSelectorComponent";
5
+ exports.PublishDataLocationSelectorModelName = "PublishDataLocationSelectorModel";
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGlzaC1kYXRhLWxvY2F0aW9uLXNlbGVjdG9yLm91dGxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29uZmlnL2NvbXBvbmVudC9wdWJsaXNoLWRhdGEtbG9jYXRpb24tc2VsZWN0b3Iub3V0bGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF1Q2EsUUFBQSx3Q0FBd0MsR0FBRyxzQ0FBK0MsQ0FBQztBQUczRixRQUFBLG9DQUFvQyxHQUFHLGtDQUEyQyxDQUFDIn0=
@@ -0,0 +1,58 @@
1
+ import { QuestionTreeFieldComponentDefinitionOutline, QuestionTreeMeta, QuestionTreeQuestion, QuestionTreeQuestionRules } from "./question-tree.outline";
2
+ import { ReusableFormComponentDefinitionFrame } from "./reusable.outline";
3
+ import { LineagePaths } from "../names/naming-helpers";
4
+ import { ILogger } from "../../logger.interface";
5
+ export declare class QuestionTreeHelper {
6
+ private readonly logName;
7
+ private readonly defaultQuestionTreeLabelPrefix;
8
+ private readonly logger;
9
+ constructor(logger: ILogger);
10
+ validateQuestions(questions: QuestionTreeQuestion[]): {
11
+ errors: string[];
12
+ questionAnswerValuesMap: {
13
+ [k: string]: string[];
14
+ };
15
+ };
16
+ /**
17
+ * Validate a question tree's questions to ensure they are internally consistent.
18
+ * @param question A question tree question definition.
19
+ * @param questionIndex The question index.
20
+ * @param availableOutcomeValues The available outcome ids.
21
+ * @param availableMeta The available meta data.
22
+ * @param questionAnswerValuesMap A map of question answer values.
23
+ * @return An array of errors, an empty array indicates no errors.
24
+ */
25
+ validateQuestion(question: QuestionTreeQuestion, questionIndex: number, availableOutcomeValues: string[], availableMeta: QuestionTreeMeta, questionAnswerValuesMap: {
26
+ [k: string]: string[];
27
+ }): string[];
28
+ /**
29
+ * Transform a question tree question to a reusable form definition to be used in the form config.
30
+ * @param name The question tree name.
31
+ * @param lineagePath The question tree lineage path.
32
+ * @param item The question tree component config.
33
+ * @param modelData The full question tree model data.
34
+ * @param questionId The question config to transform.
35
+ * @param questions The questions config.
36
+ * @return A reusable form definition representing the question and available answers.
37
+ */
38
+ transformQuestionConfig(name: string, lineagePath: LineagePaths, item: QuestionTreeFieldComponentDefinitionOutline, modelData: unknown, questionId: string, questions: QuestionTreeQuestion[]): ReusableFormComponentDefinitionFrame;
39
+ private questionLabelPrefix;
40
+ private questionLabelKey;
41
+ private questionHelpKey;
42
+ private questionAnswerLabelKey;
43
+ }
44
+ /**
45
+ * Determine whether a question should be 'activated' based on the provided question tree form model data.
46
+ * - An activated question is visible and can have a non-null data model. A question is active if its rules evaluate to true.
47
+ * - A deactivated question is not visible and its form model data must be null.
48
+ * @param questionId The question id.
49
+ * @param questions The questions config.
50
+ * @param data The current question tree form data.
51
+ */
52
+ export declare function isQuestionTreeQuestionActivated(questionId: string, questions: QuestionTreeQuestion[], data: Record<string, unknown>): boolean;
53
+ /**
54
+ * Determine whether a rule is true given the data.
55
+ * @param rule The question tree question rule to check.
56
+ * @param data The question tree data.
57
+ */
58
+ export declare function isQuestionTreeQuestionRuleTrue(rule: QuestionTreeQuestionRules, data: Record<string, unknown>): boolean;
@@ -0,0 +1,291 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.QuestionTreeHelper = void 0;
4
+ exports.isQuestionTreeQuestionActivated = isQuestionTreeQuestionActivated;
5
+ exports.isQuestionTreeQuestionRuleTrue = isQuestionTreeQuestionRuleTrue;
6
+ const helpers_1 = require("../helpers");
7
+ class QuestionTreeHelper {
8
+ logName = "QuestionTreeHelper";
9
+ defaultQuestionTreeLabelPrefix = "questiontree";
10
+ logger;
11
+ constructor(logger) {
12
+ this.logger = logger;
13
+ }
14
+ validateQuestions(questions) {
15
+ // Prepare question and answer info to assist checking for valid structure
16
+ const questionAnswerValuesMap = Object.fromEntries(questions?.map(question => [question.id, question.answers.map(answer => answer.value)]));
17
+ const errors = [];
18
+ const duplicateQuestionIds = new Set(Object.keys(questionAnswerValuesMap).filter((e, i, a) => a.indexOf(e) !== i));
19
+ if (duplicateQuestionIds.size > 0) {
20
+ errors.push(`Question ids must be unique, these were not ${Array.from(duplicateQuestionIds).sort().join(', ')}.`);
21
+ }
22
+ return { errors, questionAnswerValuesMap };
23
+ }
24
+ /**
25
+ * Validate a question tree's questions to ensure they are internally consistent.
26
+ * @param question A question tree question definition.
27
+ * @param questionIndex The question index.
28
+ * @param availableOutcomeValues The available outcome ids.
29
+ * @param availableMeta The available meta data.
30
+ * @param questionAnswerValuesMap A map of question answer values.
31
+ * @return An array of errors, an empty array indicates no errors.
32
+ */
33
+ validateQuestion(question, questionIndex, availableOutcomeValues, availableMeta, questionAnswerValuesMap) {
34
+ const id = question.id;
35
+ const answersMin = question.answersMin;
36
+ const answersMax = question.answersMax;
37
+ const answers = question.answers;
38
+ const rules = question.rules;
39
+ const errors = [];
40
+ // validate question structure
41
+ if (!id) {
42
+ errors.push(`Question ${questionIndex + 1} has no id.`);
43
+ }
44
+ const msgQ = `Question ${questionIndex + 1} '${id}'`;
45
+ if (answersMin < 1 || answersMin > answersMax) {
46
+ errors.push(`${msgQ} answer min (${answersMin}) must be 1 or greater and equal or less than max (${answersMax}).`);
47
+ }
48
+ if (answersMax < 1 || answersMin > answersMax || answersMax > answers.length) {
49
+ errors.push(`${msgQ} answer max (${answersMax}) must be 1 or greater, equal or greater than min (${answersMin}), and equal or less than the number of answers (${answers.length}).`);
50
+ }
51
+ if (answers.length < 1) {
52
+ errors.push(`${msgQ} must have at least one answer.`);
53
+ }
54
+ if (Object.keys(rules).length === 0) {
55
+ // Must have at least one rule - add a rule that always matches, so the question always shows.
56
+ rules.op = "true";
57
+ }
58
+ // All answer outcome property keys and values must match a defined outcome.
59
+ answers.forEach((answer, answerIndex) => {
60
+ const outcome = answer.outcome;
61
+ if (outcome && !availableOutcomeValues.includes(outcome)) {
62
+ errors.push(`${msgQ} answer ${answerIndex + 1} '${answer.value}' outcome is unknown '${outcome}', available are '${availableOutcomeValues.join(', ')}'.`);
63
+ }
64
+ const meta = answer.meta ?? {};
65
+ for (const [metaKey, metaValue] of Object.entries(meta)) {
66
+ if (!(metaKey in availableMeta)) {
67
+ errors.push(`${msgQ} answer ${answerIndex + 1} '${answer.value}' meta key is unknown '${metaKey}', available are '${Object.keys(availableMeta).join(', ')}'.`);
68
+ }
69
+ if (availableMeta[metaKey] && !(metaValue in availableMeta[metaKey])) {
70
+ errors.push(`${msgQ} answer ${answerIndex + 1} '${answer.value}' meta key '${metaKey}' has unknown value '${metaValue}', available are '${Object.values(availableMeta).join(', ')}'.`);
71
+ }
72
+ }
73
+ });
74
+ // All rules that reference questions or answer values must use valid values.
75
+ const rulesToCheck = [rules];
76
+ while (rulesToCheck.length > 0) {
77
+ const currentRule = rulesToCheck.shift();
78
+ if (!currentRule) {
79
+ continue;
80
+ }
81
+ switch (currentRule.op) {
82
+ case "true":
83
+ continue;
84
+ case "and":
85
+ case "or":
86
+ rulesToCheck.push(...currentRule.args);
87
+ break;
88
+ case "in":
89
+ case "notin":
90
+ case "only":
91
+ if (!(currentRule.q in questionAnswerValuesMap)) {
92
+ errors.push(`${msgQ} rule op '${currentRule.op}' references an invalid question id '${currentRule.q}'.`);
93
+ }
94
+ const questionAnswers = questionAnswerValuesMap[currentRule.q];
95
+ for (const ruleAnswerValue of currentRule.a) {
96
+ if (!questionAnswers.includes(ruleAnswerValue)) {
97
+ errors.push(`${msgQ} rule op '${currentRule.op}' question '${currentRule.q}' references an invalid answer value '${ruleAnswerValue}'.`);
98
+ }
99
+ }
100
+ break;
101
+ default:
102
+ // Setting currentRule to a variable typed with never ensures that all possible switch cases
103
+ // are present. TypeScript compile will fail if there are any possible cases missing.
104
+ const _unexpected = currentRule;
105
+ errors.push(`${msgQ} unknown rule ${JSON.stringify(_unexpected)}.`);
106
+ break;
107
+ }
108
+ }
109
+ return errors;
110
+ }
111
+ /**
112
+ * Transform a question tree question to a reusable form definition to be used in the form config.
113
+ * @param name The question tree name.
114
+ * @param lineagePath The question tree lineage path.
115
+ * @param item The question tree component config.
116
+ * @param modelData The full question tree model data.
117
+ * @param questionId The question config to transform.
118
+ * @param questions The questions config.
119
+ * @return A reusable form definition representing the question and available answers.
120
+ */
121
+ transformQuestionConfig(name, lineagePath, item, modelData, questionId, questions) {
122
+ if (!lineagePath.angularComponentsJsonPointer) {
123
+ throw new Error(`${this.logName}: Did not provide lineage path JSON pointer ${JSON.stringify({
124
+ name, lineagePath, item
125
+ })}`);
126
+ }
127
+ if (modelData !== undefined && ((0, helpers_1.guessType)(modelData) !== 'object' || typeof modelData !== 'object')) {
128
+ throw new Error(`${this.logName}: Expected model data to be an object, but got ${modelData}`);
129
+ }
130
+ const question = questions.find(q => q.id === questionId);
131
+ if (question === undefined) {
132
+ throw new Error(`${this.logName}: Could not find question id ${questionId}`);
133
+ }
134
+ const id = questionId;
135
+ const answersMax = question.answersMax;
136
+ const answers = question.answers;
137
+ const isVisible = isQuestionTreeQuestionActivated(id, questions, modelData);
138
+ // build reusable component
139
+ const hasOneAnswer = answersMax === 1;
140
+ const componentOptions = answers.map(a => {
141
+ return { value: a.value, label: this.questionAnswerLabelKey(name, id, a.value, a.label) };
142
+ });
143
+ const questionLabel = this.questionLabelKey(name, id, question.label);
144
+ const questionHelpText = this.questionHelpKey(name, id);
145
+ const componentAnswerOne = {
146
+ overrides: { reusableFormName: "questiontree-answer-one" },
147
+ name: "",
148
+ component: {
149
+ class: "ReusableComponent", config: {
150
+ componentDefinitions: [
151
+ {
152
+ name: "questiontree_answer_one",
153
+ overrides: { replaceName: id },
154
+ layout: {
155
+ class: "DefaultLayout",
156
+ config: { label: questionLabel, helpText: questionHelpText, visible: isVisible }
157
+ },
158
+ component: { class: "RadioInputComponent", config: { options: componentOptions, visible: isVisible } },
159
+ },
160
+ ],
161
+ },
162
+ },
163
+ };
164
+ const componentAnswerMore = {
165
+ overrides: { reusableFormName: "questiontree-answer-one-more" },
166
+ name: "",
167
+ component: {
168
+ class: 'ReusableComponent',
169
+ config: {
170
+ componentDefinitions: [
171
+ {
172
+ name: 'questiontree_answer_one_more',
173
+ overrides: { replaceName: id },
174
+ layout: {
175
+ class: 'DefaultLayout',
176
+ config: { label: questionLabel, helpText: questionHelpText, visible: isVisible }
177
+ },
178
+ component: { class: 'CheckboxInputComponent', config: { options: componentOptions, visible: isVisible } },
179
+ },
180
+ ],
181
+ },
182
+ },
183
+ };
184
+ return hasOneAnswer ? componentAnswerOne : componentAnswerMore;
185
+ }
186
+ questionLabelPrefix(componentName) {
187
+ return (componentName ?? "").trim().replace(/^@+/, "") || this.defaultQuestionTreeLabelPrefix;
188
+ }
189
+ questionLabelKey(componentName, questionId, questionLabel) {
190
+ if (!!questionLabel?.trim()) {
191
+ return questionLabel;
192
+ }
193
+ const keyPrefix = this.questionLabelPrefix(componentName);
194
+ return `@${keyPrefix}-item-${questionId}-label`;
195
+ }
196
+ questionHelpKey(componentName, questionId) {
197
+ const keyPrefix = this.questionLabelPrefix(componentName);
198
+ return `@${keyPrefix}-item-${questionId}-help`;
199
+ }
200
+ questionAnswerLabelKey(componentName, questionId, answerValue, answerLabel) {
201
+ if (!!answerLabel?.trim()) {
202
+ return answerLabel;
203
+ }
204
+ const keyPrefix = this.questionLabelPrefix(componentName);
205
+ return `@${keyPrefix}-item-${questionId}-${answerValue}-label`;
206
+ }
207
+ }
208
+ exports.QuestionTreeHelper = QuestionTreeHelper;
209
+ /**
210
+ * Determine whether a question should be 'activated' based on the provided question tree form model data.
211
+ * - An activated question is visible and can have a non-null data model. A question is active if its rules evaluate to true.
212
+ * - A deactivated question is not visible and its form model data must be null.
213
+ * @param questionId The question id.
214
+ * @param questions The questions config.
215
+ * @param data The current question tree form data.
216
+ */
217
+ function isQuestionTreeQuestionActivated(questionId, questions, data) {
218
+ const questionIdsToCheck = [questionId];
219
+ while (questionIdsToCheck.length > 0) {
220
+ const currentQuestionId = questionIdsToCheck.shift();
221
+ const currentQuestion = questions.find(q => q.id === currentQuestionId);
222
+ if (currentQuestion === undefined) {
223
+ return false;
224
+ }
225
+ const rulesToCheck = [currentQuestion?.rules];
226
+ while (rulesToCheck.length > 0) {
227
+ const currentRule = rulesToCheck.shift();
228
+ if (currentRule === undefined) {
229
+ return false;
230
+ }
231
+ if (!isQuestionTreeQuestionRuleTrue(currentRule, data)) {
232
+ return false;
233
+ }
234
+ switch (currentRule?.op) {
235
+ case "true":
236
+ continue;
237
+ case "and":
238
+ rulesToCheck.push(...currentRule.args);
239
+ continue;
240
+ case "or":
241
+ rulesToCheck.push(...currentRule.args.filter(rule => isQuestionTreeQuestionRuleTrue(rule, data)));
242
+ continue;
243
+ case "in":
244
+ case "notin":
245
+ case "only":
246
+ if (currentRule.q) {
247
+ questionIdsToCheck.push(currentRule.q);
248
+ }
249
+ continue;
250
+ default:
251
+ throw new Error(`Unknown question tree question rule ${JSON.stringify(currentRule)}.`);
252
+ }
253
+ }
254
+ }
255
+ return true;
256
+ }
257
+ /**
258
+ * Determine whether a rule is true given the data.
259
+ * @param rule The question tree question rule to check.
260
+ * @param data The question tree data.
261
+ */
262
+ function isQuestionTreeQuestionRuleTrue(rule, data) {
263
+ switch (rule.op) {
264
+ case "true":
265
+ return true;
266
+ case "and":
267
+ return rule.args.every(rule => isQuestionTreeQuestionRuleTrue(rule, data));
268
+ case "or":
269
+ return rule.args.some(rule => isQuestionTreeQuestionRuleTrue(rule, data));
270
+ case "in":
271
+ const valueIn = data?.[rule.q] ?? "";
272
+ const actualIn = Array.isArray(valueIn) ? valueIn : [valueIn];
273
+ const expectedIn = Array.isArray(rule.a) ? rule.a : [rule.a];
274
+ return expectedIn.every(e => actualIn.filter(a => !!a).includes(e));
275
+ case "notin":
276
+ const valueNotIn = data?.[rule.q] ?? "";
277
+ const actualNotIn = Array.isArray(valueNotIn) ? valueNotIn : [valueNotIn];
278
+ const expectedNotIn = Array.isArray(rule.a) ? rule.a : [rule.a];
279
+ return expectedNotIn.every(e => !actualNotIn.filter(a => !!a).includes(e));
280
+ case "only":
281
+ const valueOnly = data?.[rule.q] ?? "";
282
+ const actualOnly = Array.isArray(valueOnly) ? valueOnly : [valueOnly];
283
+ const expectedOnly = Array.isArray(rule.a) ? rule.a : [rule.a];
284
+ return actualOnly.length === expectedOnly.length &&
285
+ expectedOnly.every(e => actualOnly.filter(a => !!a).includes(e)) &&
286
+ actualOnly.every(a => expectedOnly.filter(e => !!e).includes(a));
287
+ default:
288
+ throw new Error(`Unknown question tree question rule ${JSON.stringify(rule)}.`);
289
+ }
290
+ }
291
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb24tdHJlZS5oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29uZmlnL2NvbXBvbmVudC9xdWVzdGlvbi10cmVlLmhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUE4UUEsMEVBeUNDO0FBT0Qsd0VBa0NDO0FBdFZELHdDQUFxQztBQUVyQyxNQUFhLGtCQUFrQjtJQUNaLE9BQU8sR0FBRyxvQkFBb0IsQ0FBQztJQUMvQiw4QkFBOEIsR0FBRyxjQUFjLENBQUM7SUFDaEQsTUFBTSxDQUFVO0lBRWpDLFlBQVksTUFBZTtRQUN6QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRU0saUJBQWlCLENBQUMsU0FBaUM7UUFDeEQsMEVBQTBFO1FBQzFFLE1BQU0sdUJBQXVCLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FDaEQsU0FBUyxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQ3hGLENBQUM7UUFFRixNQUFNLE1BQU0sR0FBYSxFQUFFLENBQUM7UUFDNUIsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuSCxJQUFJLG9CQUFvQixDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNsQyxNQUFNLENBQUMsSUFBSSxDQUFDLCtDQUErQyxLQUFLLENBQUMsSUFBSSxDQUFD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SUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsOEJBQThCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFNUUsS0FBSyxJQUFJO1lBQ1AsTUFBTSxPQUFPLEdBQUcsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNyQyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDOUQsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdELE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdEUsS0FBSyxPQUFPO1lBQ1YsTUFBTSxVQUFVLEdBQUcsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN4QyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDMUUsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hFLE9BQU8sYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU3RSxLQUFLLE1BQU07WUFDVCxNQUFNLFNBQVMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN0RSxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0QsT0FBTyxVQUFVLENBQUMsTUFBTSxLQUFLLFlBQVksQ0FBQyxNQUFNO2dCQUM5QyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXJFO1lBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEYsQ0FBQztBQUNILENBQUMifQ==
@@ -0,0 +1,64 @@
1
+ import { FieldComponentConfig, FieldComponentDefinition } from "../field-component.model";
2
+ import { FieldModelConfig, FieldModelDefinition } from "../field-model.model";
3
+ import { FormComponentDefinition } from "../form-component.model";
4
+ import { FormConfigVisitorOutline } from "../visitor/base.outline";
5
+ import { QuestionTreeFieldComponentConfigOutline, QuestionTreeFieldComponentDefinitionOutline, QuestionTreeFieldModelConfigOutline, QuestionTreeFieldModelDefinitionOutline, QuestionTreeFormComponentDefinitionOutline, QuestionTreeModelValueType, QuestionTreeOutcome, QuestionTreeMeta, QuestionTreeQuestion } from "./question-tree.outline";
6
+ import { AvailableFieldLayoutDefinitionOutlines, AvailableFormComponentDefinitionOutlines } from "../dictionary.outline";
7
+ export declare class QuestionTreeFieldComponentConfig extends FieldComponentConfig implements QuestionTreeFieldComponentConfigOutline {
8
+ availableOutcomes: QuestionTreeOutcome[];
9
+ availableMeta?: QuestionTreeMeta;
10
+ questions: QuestionTreeQuestion[];
11
+ componentDefinitions: AvailableFormComponentDefinitionOutlines[];
12
+ constructor();
13
+ }
14
+ export declare class QuestionTreeFieldComponentDefinition extends FieldComponentDefinition implements QuestionTreeFieldComponentDefinitionOutline {
15
+ class: "QuestionTreeComponent";
16
+ config?: QuestionTreeFieldComponentConfigOutline;
17
+ constructor();
18
+ accept(visitor: FormConfigVisitorOutline): Promise<void>;
19
+ }
20
+ export declare class QuestionTreeFieldModelConfig extends FieldModelConfig<QuestionTreeModelValueType> implements QuestionTreeFieldModelConfigOutline {
21
+ constructor();
22
+ }
23
+ export declare class QuestionTreeFieldModelDefinition extends FieldModelDefinition<QuestionTreeModelValueType> implements QuestionTreeFieldModelDefinitionOutline {
24
+ class: "QuestionTreeModel";
25
+ config?: QuestionTreeFieldModelConfigOutline;
26
+ constructor();
27
+ accept(visitor: FormConfigVisitorOutline): Promise<void>;
28
+ }
29
+ export declare class QuestionTreeFormComponentDefinition extends FormComponentDefinition implements QuestionTreeFormComponentDefinitionOutline {
30
+ component: QuestionTreeFieldComponentDefinitionOutline;
31
+ model?: QuestionTreeFieldModelDefinitionOutline;
32
+ layout?: AvailableFieldLayoutDefinitionOutlines;
33
+ constructor();
34
+ accept(visitor: FormConfigVisitorOutline): Promise<void>;
35
+ }
36
+ export declare const QuestionTreeMap: ({
37
+ kind: "FieldComponentConfigKind";
38
+ def: typeof QuestionTreeFieldComponentConfig;
39
+ class?: undefined;
40
+ } | {
41
+ kind: "FieldComponentDefinitionKind";
42
+ def: typeof QuestionTreeFieldComponentDefinition;
43
+ class: "QuestionTreeComponent";
44
+ } | {
45
+ kind: "FieldModelConfigKind";
46
+ def: typeof QuestionTreeFieldModelConfig;
47
+ class?: undefined;
48
+ } | {
49
+ kind: "FieldModelDefinitionKind";
50
+ def: typeof QuestionTreeFieldModelDefinition;
51
+ class: "QuestionTreeModel";
52
+ } | {
53
+ kind: "FormComponentDefinitionKind";
54
+ def: typeof QuestionTreeFormComponentDefinition;
55
+ class: "QuestionTreeComponent";
56
+ })[];
57
+ export declare const QuestionTreeDefaults: {
58
+ FormComponentDefinitionKind: {
59
+ QuestionTreeComponent: {
60
+ FieldComponentDefinitionKind: "QuestionTreeComponent";
61
+ FieldModelDefinitionKind: "QuestionTreeModel";
62
+ };
63
+ };
64
+ };
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.QuestionTreeDefaults = exports.QuestionTreeMap = exports.QuestionTreeFormComponentDefinition = exports.QuestionTreeFieldModelDefinition = exports.QuestionTreeFieldModelConfig = exports.QuestionTreeFieldComponentDefinition = exports.QuestionTreeFieldComponentConfig = void 0;
4
+ const field_component_model_1 = require("../field-component.model");
5
+ const field_model_model_1 = require("../field-model.model");
6
+ const form_component_model_1 = require("../form-component.model");
7
+ const shared_outline_1 = require("../shared.outline");
8
+ const question_tree_outline_1 = require("./question-tree.outline");
9
+ /* QuestionTree Component */
10
+ class QuestionTreeFieldComponentConfig extends field_component_model_1.FieldComponentConfig {
11
+ availableOutcomes;
12
+ availableMeta;
13
+ questions;
14
+ componentDefinitions;
15
+ constructor() {
16
+ super();
17
+ this.availableOutcomes = [];
18
+ this.questions = [];
19
+ this.componentDefinitions = [];
20
+ }
21
+ }
22
+ exports.QuestionTreeFieldComponentConfig = QuestionTreeFieldComponentConfig;
23
+ class QuestionTreeFieldComponentDefinition extends field_component_model_1.FieldComponentDefinition {
24
+ class = question_tree_outline_1.QuestionTreeComponentName;
25
+ config;
26
+ constructor() {
27
+ super();
28
+ }
29
+ async accept(visitor) {
30
+ await visitor.visitQuestionTreeFieldComponentDefinition(this);
31
+ }
32
+ }
33
+ exports.QuestionTreeFieldComponentDefinition = QuestionTreeFieldComponentDefinition;
34
+ /* QuestionTree Model */
35
+ class QuestionTreeFieldModelConfig extends field_model_model_1.FieldModelConfig {
36
+ constructor() {
37
+ super();
38
+ }
39
+ }
40
+ exports.QuestionTreeFieldModelConfig = QuestionTreeFieldModelConfig;
41
+ class QuestionTreeFieldModelDefinition extends field_model_model_1.FieldModelDefinition {
42
+ class = question_tree_outline_1.QuestionTreeModelName;
43
+ config;
44
+ constructor() {
45
+ super();
46
+ }
47
+ async accept(visitor) {
48
+ await visitor.visitQuestionTreeFieldModelDefinition(this);
49
+ }
50
+ }
51
+ exports.QuestionTreeFieldModelDefinition = QuestionTreeFieldModelDefinition;
52
+ /* QuestionTree Form Component */
53
+ class QuestionTreeFormComponentDefinition extends form_component_model_1.FormComponentDefinition {
54
+ component;
55
+ model;
56
+ layout;
57
+ constructor() {
58
+ super();
59
+ }
60
+ async accept(visitor) {
61
+ await visitor.visitQuestionTreeFormComponentDefinition(this);
62
+ }
63
+ }
64
+ exports.QuestionTreeFormComponentDefinition = QuestionTreeFormComponentDefinition;
65
+ exports.QuestionTreeMap = [
66
+ { kind: shared_outline_1.FieldComponentConfigKind, def: QuestionTreeFieldComponentConfig },
67
+ { kind: shared_outline_1.FieldComponentDefinitionKind, def: QuestionTreeFieldComponentDefinition, class: question_tree_outline_1.QuestionTreeComponentName },
68
+ { kind: shared_outline_1.FieldModelConfigKind, def: QuestionTreeFieldModelConfig },
69
+ { kind: shared_outline_1.FieldModelDefinitionKind, def: QuestionTreeFieldModelDefinition, class: question_tree_outline_1.QuestionTreeModelName },
70
+ { kind: shared_outline_1.FormComponentDefinitionKind, def: QuestionTreeFormComponentDefinition, class: question_tree_outline_1.QuestionTreeComponentName },
71
+ ];
72
+ exports.QuestionTreeDefaults = {
73
+ [shared_outline_1.FormComponentDefinitionKind]: {
74
+ [question_tree_outline_1.QuestionTreeComponentName]: {
75
+ [shared_outline_1.FieldComponentDefinitionKind]: question_tree_outline_1.QuestionTreeComponentName,
76
+ [shared_outline_1.FieldModelDefinitionKind]: question_tree_outline_1.QuestionTreeModelName,
77
+ },
78
+ },
79
+ };
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb24tdHJlZS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb25maWcvY29tcG9uZW50L3F1ZXN0aW9uLXRyZWUubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsb0VBR2tDO0FBQ2xDLDREQUc4QjtBQUM5QixrRUFBZ0U7QUFFaEUsc0RBSTJCO0FBQzNCLG1FQVVpQztBQU1qQyw0QkFBNEI7QUFFNUIsTUFBYSxnQ0FBaUMsU0FBUSw0Q0FBb0I7SUFDdEUsaUJBQWlCLENBQXdCO0lBQ3pDLGFBQWEsQ0FBb0I7SUFDakMsU0FBUyxDQUF5QjtJQUNsQyxvQkFBb0IsQ0FBNkM7SUFFakU7UUFDSSxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0NBQ0o7QUFaRCw0RUFZQztBQUdELE1BQWEsb0NBQXFDLFNBQVEsZ0RBQXdCO0lBQzlFLEtBQUssR0FBRyxpREFBeUIsQ0FBQztJQUNsQyxNQUFNLENBQTJDO0lBRWpEO1FBQ0ksS0FBSyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFpQztRQUMxQyxNQUFNLE9BQU8sQ0FBQyx5Q0FBeUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsRSxDQUFDO0NBQ0o7QUFYRCxvRkFXQztBQUdELHdCQUF3QjtBQUN4QixNQUFhLDRCQUE2QixTQUFRLG9DQUE0QztJQUMxRjtRQUNJLEtBQUssRUFBRSxDQUFDO0lBQ1osQ0FBQztDQUNKO0FBSkQsb0VBSUM7QUFFRCxNQUFhLGdDQUFpQyxTQUFRLHdDQUFnRDtJQUNsRyxLQUFLLEdBQUcsNkNBQXFCLENBQUM7SUFDOUIsTUFBTSxDQUF1QztJQUU3QztRQUNJLEtBQUssRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBaUM7UUFDMUMsTUFBTSxPQUFPLENBQUMscUNBQXFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUQsQ0FBQztDQUNKO0FBWEQsNEVBV0M7QUFHRCxpQ0FBaUM7QUFDakMsTUFBYSxtQ0FBb0MsU0FBUSw4Q0FBdUI7SUFDckUsU0FBUyxDQUErQztJQUN4RCxLQUFLLENBQTJDO0lBQ2hELE1BQU0sQ0FBMEM7SUFFdkQ7UUFDSSxLQUFLLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQWlDO1FBQzFDLE1BQU0sT0FBTyxDQUFDLHdDQUF3QyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pFLENBQUM7Q0FDSjtBQVpELGtGQVlDO0FBRVksUUFBQSxlQUFlLEdBQUc7SUFDM0IsRUFBQyxJQUFJLEVBQUUseUNBQXdCLEVBQUUsR0FBRyxFQUFFLGdDQUFnQyxFQUFDO0lBQ3ZFLEVBQUMsSUFBSSxFQUFFLDZDQUE0QixFQUFFLEdBQUcsRUFBRSxvQ0FBb0MsRUFBRSxLQUFLLEVBQUUsaURBQXlCLEVBQUM7SUFDakgsRUFBQyxJQUFJLEVBQUUscUNBQW9CLEVBQUUsR0FBRyxFQUFFLDRCQUE0QixFQUFDO0lBQy9ELEVBQUMsSUFBSSxFQUFFLHlDQUF3QixFQUFFLEdBQUcsRUFBRSxnQ0FBZ0MsRUFBRSxLQUFLLEVBQUUsNkNBQXFCLEVBQUM7SUFDckcsRUFBQyxJQUFJLEVBQUUsNENBQTJCLEVBQUUsR0FBRyxFQUFFLG1DQUFtQyxFQUFFLEtBQUssRUFBRSxpREFBeUIsRUFBQztDQUNsSCxDQUFDO0FBQ1csUUFBQSxvQkFBb0IsR0FBRztJQUNoQyxDQUFDLDRDQUEyQixDQUFDLEVBQUU7UUFDM0IsQ0FBQyxpREFBeUIsQ0FBQyxFQUFFO1lBQ3pCLENBQUMsNkNBQTRCLENBQUMsRUFBRSxpREFBeUI7WUFDekQsQ0FBQyx5Q0FBd0IsQ0FBQyxFQUFFLDZDQUFxQjtTQUNwRDtLQUNKO0NBQ0osQ0FBQyJ9