@beinformed/ui 1.65.13 → 1.65.15

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 (656) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/esm/hooks/useList.js +3 -1
  3. package/esm/hooks/useList.js.flow +11 -4
  4. package/esm/hooks/useList.js.map +1 -1
  5. package/esm/hooks/useModularUI.js +21 -26
  6. package/esm/hooks/useModularUI.js.flow +28 -34
  7. package/esm/hooks/useModularUI.js.map +1 -1
  8. package/esm/hooks/useModularUIBasic.js +8 -39
  9. package/esm/hooks/useModularUIBasic.js.flow +6 -42
  10. package/esm/hooks/useModularUIBasic.js.map +1 -1
  11. package/lib/hooks/useList.js +3 -1
  12. package/lib/hooks/useList.js.map +1 -1
  13. package/lib/hooks/useModularUI.js +20 -25
  14. package/lib/hooks/useModularUI.js.map +1 -1
  15. package/lib/hooks/useModularUIBasic.js +9 -39
  16. package/lib/hooks/useModularUIBasic.js.map +1 -1
  17. package/package.json +2 -3
  18. package/src/builder/__tests__/LayoutHintConfig.json +0 -20
  19. package/src/builder/__tests__/mergeLayoutHintConfigurations.spec.js +0 -71
  20. package/src/builder/__tests__/subdir/LayoutHintConfig.json +0 -20
  21. package/src/builder/index.js +0 -2
  22. package/src/builder/mergeLayoutHintConfigurations.js +0 -62
  23. package/src/constants/Constants.js +0 -196
  24. package/src/constants/LayoutHintConfig.js +0 -186
  25. package/src/constants/LayoutHints.js +0 -134
  26. package/src/constants/Settings.js +0 -267
  27. package/src/constants/index.js +0 -4
  28. package/src/exceptions/ConfigurationException.js +0 -13
  29. package/src/exceptions/FetchException.js +0 -101
  30. package/src/exceptions/IllegalArgumentException.js +0 -12
  31. package/src/exceptions/IllegalReturnException.js +0 -11
  32. package/src/exceptions/IllegalStateException.js +0 -12
  33. package/src/exceptions/JsonParseException.js +0 -12
  34. package/src/exceptions/MissingPropertyException.js +0 -13
  35. package/src/exceptions/NetworkException.js +0 -20
  36. package/src/exceptions/NotAllowedUriException.js +0 -12
  37. package/src/exceptions/NotFoundException.js +0 -20
  38. package/src/exceptions/ServerRequestException.js +0 -12
  39. package/src/exceptions/ThemePropertyException.js +0 -12
  40. package/src/exceptions/TimeoutException.js +0 -13
  41. package/src/exceptions/UnauthorizedException.js +0 -26
  42. package/src/exceptions/UnsupportedOperationException.js +0 -12
  43. package/src/exceptions/index.js +0 -16
  44. package/src/hooks/__tests__/UseModularUIModel.spec.js +0 -194
  45. package/src/hooks/__tests__/useAuthentication.spec.js +0 -166
  46. package/src/hooks/__tests__/useForm.spec.js +0 -300
  47. package/src/hooks/__tests__/useI18n.spec.js +0 -30
  48. package/src/hooks/__tests__/useModal.spec.js +0 -67
  49. package/src/hooks/__tests__/useModelCatalog.spec.js +0 -180
  50. package/src/hooks/__tests__/useModels.spec.js +0 -138
  51. package/src/hooks/__tests__/useModularUIBasic.spec.js +0 -126
  52. package/src/hooks/__tests__/useNotification.spec.js +0 -47
  53. package/src/hooks/__tests__/usePreference.spec.js +0 -72
  54. package/src/hooks/__tests__/useProgressIndicator.spec.js +0 -67
  55. package/src/hooks/index.js +0 -21
  56. package/src/hooks/useAllFormsOnModel.js +0 -92
  57. package/src/hooks/useAuthentication.js +0 -113
  58. package/src/hooks/useContent.js +0 -48
  59. package/src/hooks/useDeepCompareEffect.js +0 -50
  60. package/src/hooks/useForm.js +0 -156
  61. package/src/hooks/useI18n.js +0 -46
  62. package/src/hooks/useList.js +0 -221
  63. package/src/hooks/useLookup.js +0 -82
  64. package/src/hooks/useModal.js +0 -46
  65. package/src/hooks/useModelCatalog.js +0 -256
  66. package/src/hooks/useModels.js +0 -50
  67. package/src/hooks/useModularUI.js +0 -79
  68. package/src/hooks/useModularUIBasic.js +0 -152
  69. package/src/hooks/useModularUIKey.js +0 -14
  70. package/src/hooks/useModularUIModel.js +0 -86
  71. package/src/hooks/useModularUIRequest.js +0 -25
  72. package/src/hooks/useNotification.js +0 -48
  73. package/src/hooks/usePanel.js +0 -79
  74. package/src/hooks/usePreference.js +0 -27
  75. package/src/hooks/useProgressIndicator.js +0 -50
  76. package/src/hooks/useRouter.js +0 -70
  77. package/src/hooks/useSearch.js +0 -31
  78. package/src/i18n/Locale.js +0 -157
  79. package/src/i18n/Locales.js +0 -171
  80. package/src/i18n/Message.js +0 -66
  81. package/src/i18n/__tests__/Locale.spec.js +0 -108
  82. package/src/i18n/__tests__/Locales.spec.js +0 -137
  83. package/src/i18n/index.js +0 -12
  84. package/src/i18n/languages.js +0 -207
  85. package/src/i18n/translations/beinformed_error_messages_en.nl.js +0 -98
  86. package/src/i18n/translations/beinformed_error_messages_nl.nl.js +0 -98
  87. package/src/i18n/types.js +0 -23
  88. package/src/i18n/withMessage.js +0 -47
  89. package/src/index.js +0 -7
  90. package/src/models/__tests__/resolveModel.spec.js +0 -34
  91. package/src/models/actions/ActionCollection.js +0 -100
  92. package/src/models/actions/ActionModel.js +0 -207
  93. package/src/models/actions/__mock__/action.js +0 -35
  94. package/src/models/actions/__tests__/ActionCollection.spec.js +0 -98
  95. package/src/models/actions/__tests__/ActionModel.spec.js +0 -75
  96. package/src/models/application/ApplicationModel.js +0 -168
  97. package/src/models/application/__mock__/application.js +0 -14
  98. package/src/models/application/__mock__/contributions.json +0 -312
  99. package/src/models/application/__mock__/data.json +0 -263
  100. package/src/models/application/__tests__/Application.spec.js +0 -99
  101. package/src/models/application/__tests__/webapp.json +0 -42
  102. package/src/models/application/__tests__/webappContributions.json +0 -43
  103. package/src/models/attributes/AttributeCollection.js +0 -306
  104. package/src/models/attributes/AttributeContent.js +0 -233
  105. package/src/models/attributes/AttributeDataHelper.js +0 -323
  106. package/src/models/attributes/AttributeModel.js +0 -1021
  107. package/src/models/attributes/AttributeSetModel.js +0 -117
  108. package/src/models/attributes/BooleanAttributeModel.js +0 -319
  109. package/src/models/attributes/CaptchaAttributeModel.js +0 -51
  110. package/src/models/attributes/ChoiceAttributeModel.js +0 -520
  111. package/src/models/attributes/ChoiceAttributeOptionCollection.js +0 -372
  112. package/src/models/attributes/ChoiceAttributeOptionModel.js +0 -415
  113. package/src/models/attributes/CompositeAttributeChildCollection.js +0 -254
  114. package/src/models/attributes/CompositeAttributeModel.js +0 -439
  115. package/src/models/attributes/DatetimeAttributeModel.js +0 -566
  116. package/src/models/attributes/HelptextAttributeModel.js +0 -54
  117. package/src/models/attributes/LabelAttributeModel.js +0 -36
  118. package/src/models/attributes/MemoAttributeModel.js +0 -43
  119. package/src/models/attributes/MoneyAttributeModel.js +0 -45
  120. package/src/models/attributes/NumberAttributeModel.js +0 -255
  121. package/src/models/attributes/PasswordAttributeModel.js +0 -245
  122. package/src/models/attributes/StringAttributeModel.js +0 -314
  123. package/src/models/attributes/UploadAttributeModel.js +0 -261
  124. package/src/models/attributes/XMLAttributeModel.js +0 -51
  125. package/src/models/attributes/__mock__/_ActionFieldsContributions.json +0 -12
  126. package/src/models/attributes/__mock__/_ActionFieldsData.json +0 -7
  127. package/src/models/attributes/__mock__/_FormCollectionContribution.json +0 -419
  128. package/src/models/attributes/__mock__/_FormCollectionData.json +0 -122
  129. package/src/models/attributes/__mock__/_InstrumentQuestionContributions.json +0 -178
  130. package/src/models/attributes/__mock__/_ListAttributeContributions.json +0 -82
  131. package/src/models/attributes/__mock__/_ListAttributeData.json +0 -70
  132. package/src/models/attributes/__mock__/_ListDetailContributions.json +0 -75
  133. package/src/models/attributes/__mock__/_ListDetailData.json +0 -38
  134. package/src/models/attributes/__mock__/_TreeFormAttributeContribution.json +0 -117
  135. package/src/models/attributes/__mock__/_TreeFormAttributeData.json +0 -27
  136. package/src/models/attributes/__mock__/form.contributions.json +0 -410
  137. package/src/models/attributes/__mock__/form.data.json +0 -113
  138. package/src/models/attributes/__mock__/form.js +0 -6
  139. package/src/models/attributes/__mock__/list.contributions.json +0 -110
  140. package/src/models/attributes/__mock__/list.data.json +0 -84
  141. package/src/models/attributes/__mock__/list.js +0 -6
  142. package/src/models/attributes/__tests__/AttributeCollection.spec.js +0 -160
  143. package/src/models/attributes/__tests__/AttributeCollectionComposite.spec.js +0 -146
  144. package/src/models/attributes/__tests__/AttributeContent.spec.js +0 -225
  145. package/src/models/attributes/__tests__/AttributeDataHelper.spec.js +0 -634
  146. package/src/models/attributes/__tests__/AttributeModel.spec.js +0 -274
  147. package/src/models/attributes/__tests__/AttributeSetModel.spec.js +0 -39
  148. package/src/models/attributes/__tests__/BooleanAttributeModel.spec.js +0 -107
  149. package/src/models/attributes/__tests__/CaptchaAttributeModel.spec.js +0 -13
  150. package/src/models/attributes/__tests__/ChoiceAttributeModel.spec.js +0 -750
  151. package/src/models/attributes/__tests__/ChoiceAttributeOptionCollection.spec.js +0 -507
  152. package/src/models/attributes/__tests__/ChoiceAttributeOptionModel.spec.js +0 -107
  153. package/src/models/attributes/__tests__/CompositeAttributeModel.spec.js +0 -467
  154. package/src/models/attributes/__tests__/DateAttributeModel.spec.js +0 -134
  155. package/src/models/attributes/__tests__/DatetimeAttributeModel.spec.js +0 -206
  156. package/src/models/attributes/__tests__/DatetimeAttributeModel_offset.spec.js +0 -345
  157. package/src/models/attributes/__tests__/HelptextAttributeModel.spec.js +0 -64
  158. package/src/models/attributes/__tests__/LabelAttributeModel.spec.js +0 -13
  159. package/src/models/attributes/__tests__/LookupAttributeModel.spec.js +0 -47
  160. package/src/models/attributes/__tests__/MemoAttributeModel.spec.js +0 -28
  161. package/src/models/attributes/__tests__/MoneyAttributeModel.spec.js +0 -22
  162. package/src/models/attributes/__tests__/NumberAttributeModel.spec.js +0 -67
  163. package/src/models/attributes/__tests__/PasswordAttributeModel.spec.js +0 -49
  164. package/src/models/attributes/__tests__/StringAttributeModel.spec.js +0 -125
  165. package/src/models/attributes/__tests__/TimeAttributeModel.spec.js +0 -57
  166. package/src/models/attributes/__tests__/TimestampModel.spec.js +0 -43
  167. package/src/models/attributes/__tests__/UploadAttributeModel.spec.js +0 -67
  168. package/src/models/attributes/__tests__/XMLAttributeModel.spec.js +0 -17
  169. package/src/models/attributes/__tests__/_createAttribute.spec.js +0 -106
  170. package/src/models/attributes/__tests__/createAttributeComposite.spec.js +0 -151
  171. package/src/models/attributes/__tests__/createAttributeDynamicSchema.spec.js +0 -134
  172. package/src/models/attributes/_createAttribute.js +0 -147
  173. package/src/models/attributes/input-constraints/BSNConstraint.js +0 -80
  174. package/src/models/attributes/input-constraints/ConstraintCollection.js +0 -65
  175. package/src/models/attributes/input-constraints/ConstraintModel.js +0 -76
  176. package/src/models/attributes/input-constraints/DateBoundaryConstraint.js +0 -240
  177. package/src/models/attributes/input-constraints/DateTimeDateFormatConstraint.js +0 -72
  178. package/src/models/attributes/input-constraints/DateTimeTimeFormatConstraint.js +0 -72
  179. package/src/models/attributes/input-constraints/DatetimeFormatConstraint.js +0 -132
  180. package/src/models/attributes/input-constraints/FileExtensionConstraint.js +0 -60
  181. package/src/models/attributes/input-constraints/FileSizeConstraint.js +0 -101
  182. package/src/models/attributes/input-constraints/IBANConstraint.js +0 -46
  183. package/src/models/attributes/input-constraints/MandatoryConstraint.js +0 -54
  184. package/src/models/attributes/input-constraints/MandatoryRangeConstraint.js +0 -84
  185. package/src/models/attributes/input-constraints/NumberBoundaryConstraint.js +0 -213
  186. package/src/models/attributes/input-constraints/NumberFormatConstraint.js +0 -153
  187. package/src/models/attributes/input-constraints/NumberGroupingConstraint.js +0 -140
  188. package/src/models/attributes/input-constraints/PasswordConfirmConstraint.js +0 -68
  189. package/src/models/attributes/input-constraints/PasswordLowerAndUpperCaseConstraint.js +0 -44
  190. package/src/models/attributes/input-constraints/PasswordMinNumericCharactersConstraint.js +0 -60
  191. package/src/models/attributes/input-constraints/PasswordMinSpecialCharactersConstraint.js +0 -60
  192. package/src/models/attributes/input-constraints/PasswordThreeConsecutiveCharactersNotAllowedConstraint.js +0 -72
  193. package/src/models/attributes/input-constraints/RangeConstraint.js +0 -161
  194. package/src/models/attributes/input-constraints/RegexConstraint.js +0 -72
  195. package/src/models/attributes/input-constraints/StringLengthConstraint.js +0 -179
  196. package/src/models/attributes/input-constraints/XMLConstraint.js +0 -62
  197. package/src/models/attributes/input-constraints/__tests__/BSNConstraint.spec.js +0 -25
  198. package/src/models/attributes/input-constraints/__tests__/ConstraintCollection.spec.js +0 -9
  199. package/src/models/attributes/input-constraints/__tests__/ConstraintModel.spec.js +0 -35
  200. package/src/models/attributes/input-constraints/__tests__/DateBoundaryConstraint.spec.js +0 -117
  201. package/src/models/attributes/input-constraints/__tests__/DateTimeDateFormatConstraint.spec.js +0 -30
  202. package/src/models/attributes/input-constraints/__tests__/DateTimeTimeFormatConstraint.spec.js +0 -54
  203. package/src/models/attributes/input-constraints/__tests__/DatetimeFormatConstraint.spec.js +0 -79
  204. package/src/models/attributes/input-constraints/__tests__/FileExtensionConstraint.spec.js +0 -20
  205. package/src/models/attributes/input-constraints/__tests__/FileSizeConstraint.spec.js +0 -53
  206. package/src/models/attributes/input-constraints/__tests__/IBANConstraint.spec.js +0 -12
  207. package/src/models/attributes/input-constraints/__tests__/MandatoryConstraint.spec.js +0 -14
  208. package/src/models/attributes/input-constraints/__tests__/NumberBoundaryConstraint.spec.js +0 -46
  209. package/src/models/attributes/input-constraints/__tests__/NumberFormatConstraint.spec.js +0 -137
  210. package/src/models/attributes/input-constraints/__tests__/NumberGroupingConstraint.spec.js +0 -85
  211. package/src/models/attributes/input-constraints/__tests__/PasswordConfirmConstraint.spec.js +0 -21
  212. package/src/models/attributes/input-constraints/__tests__/PasswordLowerAndUpperCaseConstraint.spec.js +0 -14
  213. package/src/models/attributes/input-constraints/__tests__/PasswordMinNumericCharactersConstraint.spec.js +0 -11
  214. package/src/models/attributes/input-constraints/__tests__/PasswordMinSpecialCharactersConstraint.spec.js +0 -11
  215. package/src/models/attributes/input-constraints/__tests__/PasswordThreeConsecutiveCharactersNotAllowedConstraint.spec.js +0 -22
  216. package/src/models/attributes/input-constraints/__tests__/RegexConstraint.spec.js +0 -42
  217. package/src/models/attributes/input-constraints/__tests__/StringLengthConstraint.spec.js +0 -102
  218. package/src/models/attributes/input-constraints/__tests__/XMLConstraint.spec.js +0 -15
  219. package/src/models/attributes/layouthint-rules/BaseLayoutHintRule.js +0 -74
  220. package/src/models/attributes/layouthint-rules/DependentAttribute.js +0 -246
  221. package/src/models/attributes/layouthint-rules/LayoutHintRuleCollection.js +0 -101
  222. package/src/models/attributes/layouthint-rules/RemainingTotalUploadSize.js +0 -67
  223. package/src/models/attributes/layouthint-rules/__mock__/MockedCollectionFactory.js +0 -54
  224. package/src/models/attributes/layouthint-rules/__tests__/BaseLayoutHintRule.spec.js +0 -29
  225. package/src/models/attributes/layouthint-rules/__tests__/DependentAttribute.spec.js +0 -310
  226. package/src/models/attributes/layouthint-rules/__tests__/LayoutHintRuleCollection.spec.js +0 -58
  227. package/src/models/attributes/layouthint-rules/__tests__/RemainingTotalUploadSize.spec.js +0 -24
  228. package/src/models/base/BaseCollection.js +0 -191
  229. package/src/models/base/BaseModel.js +0 -155
  230. package/src/models/base/ResourceCollection.js +0 -42
  231. package/src/models/base/ResourceModel.js +0 -246
  232. package/src/models/base/__tests__/BaseCollection.spec.js +0 -108
  233. package/src/models/base/__tests__/BaseModel.spec.js +0 -85
  234. package/src/models/base/__tests__/ResourceCollection.spec.js +0 -51
  235. package/src/models/base/__tests__/ResourceModel.spec.js +0 -100
  236. package/src/models/base/__tests__/webapp.json +0 -52
  237. package/src/models/caseview/CaseViewModel.js +0 -188
  238. package/src/models/caseview/__mock__/caseview.js +0 -14
  239. package/src/models/caseview/__mock__/contributions.json +0 -146
  240. package/src/models/caseview/__mock__/data.json +0 -21
  241. package/src/models/caseview/__tests__/CaseViewModel.spec.js +0 -132
  242. package/src/models/caseview/__tests__/caseview.json +0 -49
  243. package/src/models/caseview/__tests__/caseviewContributions.json +0 -118
  244. package/src/models/caseview/__tests__/caseview_local_taskgroup.json +0 -57
  245. package/src/models/concepts/BusinessScenarioModel.js +0 -176
  246. package/src/models/concepts/ConceptDetailModel.js +0 -349
  247. package/src/models/concepts/ConceptIndexModel.js +0 -186
  248. package/src/models/concepts/ConceptLinkModel.js +0 -208
  249. package/src/models/concepts/ConceptRelationCollection.js +0 -95
  250. package/src/models/concepts/ConceptRelationModel.js +0 -129
  251. package/src/models/concepts/ConceptTypeDetailModel.js +0 -128
  252. package/src/models/concepts/SourceReferenceCollection.js +0 -40
  253. package/src/models/concepts/SourceReferenceModel.js +0 -126
  254. package/src/models/concepts/__mock__/business_scenario.js +0 -26
  255. package/src/models/concepts/__mock__/business_scenario_data.json +0 -234
  256. package/src/models/concepts/__mock__/business_scenario_step.json +0 -64
  257. package/src/models/concepts/__mock__/conceptdetail.js +0 -27
  258. package/src/models/concepts/__mock__/conceptdetail_contributions.json +0 -156
  259. package/src/models/concepts/__mock__/conceptdetail_data.json +0 -164
  260. package/src/models/concepts/__mock__/conceptindex.js +0 -15
  261. package/src/models/concepts/__mock__/conceptindex_contributions.json +0 -86
  262. package/src/models/concepts/__mock__/conceptindex_data.json +0 -329
  263. package/src/models/concepts/__mock__/concepttype.js +0 -13
  264. package/src/models/concepts/__mock__/concepttype_Calculation.json +0 -75
  265. package/src/models/concepts/__mock__/concepttype_contributions.json +0 -139
  266. package/src/models/concepts/__mock__/concepttype_data.json +0 -32
  267. package/src/models/concepts/__mock__/concepttype_hierarchy.js +0 -13
  268. package/src/models/concepts/__mock__/concepttype_hierarchy.json +0 -32
  269. package/src/models/concepts/__mock__/related_concepts.js +0 -12
  270. package/src/models/concepts/__mock__/related_concepts_contributions.json +0 -41
  271. package/src/models/concepts/__mock__/related_concepts_data.json +0 -2408
  272. package/src/models/concepts/__mock__/relation_with_props_and_tf_data.js +0 -27
  273. package/src/models/concepts/__mock__/relation_with_props_and_tf_data.json +0 -67
  274. package/src/models/concepts/__tests__/BusinessScenarioModel.spec.js +0 -28
  275. package/src/models/concepts/__tests__/ConceptDetailModel.spec.js +0 -65
  276. package/src/models/concepts/__tests__/ConceptIndexModel.spec.js +0 -42
  277. package/src/models/concepts/__tests__/ConceptLinkModel.spec.js +0 -9
  278. package/src/models/concepts/__tests__/ConceptRelationCollection.spec.js +0 -9
  279. package/src/models/concepts/__tests__/ConceptRelationModel.spec.js +0 -53
  280. package/src/models/concepts/__tests__/ConceptTypeDetailModel.spec.js +0 -31
  281. package/src/models/concepts/__tests__/RelatedConcepts.spec.js +0 -58
  282. package/src/models/concepts/__tests__/SourceReferenceCollection.spec.js +0 -9
  283. package/src/models/concepts/__tests__/SourceReferenceModel.spec.js +0 -108
  284. package/src/models/content/ContentIndexModel.js +0 -165
  285. package/src/models/content/ContentLinkModel.js +0 -308
  286. package/src/models/content/ContentModel.js +0 -227
  287. package/src/models/content/ContentTOCModel.js +0 -237
  288. package/src/models/content/ContentTypeModel.js +0 -71
  289. package/src/models/content/SectionModel.js +0 -236
  290. package/src/models/content/SubSectionModel.js +0 -181
  291. package/src/models/content/__tests__/ContentIndexModel.spec.js +0 -40
  292. package/src/models/content/__tests__/ContentLinkModel.spec.js +0 -129
  293. package/src/models/content/__tests__/ContentModel.spec.js +0 -241
  294. package/src/models/content/__tests__/Formalsource.spec.js +0 -133
  295. package/src/models/content/__tests__/content-index-contributions.json +0 -50
  296. package/src/models/content/__tests__/content-index.json +0 -164
  297. package/src/models/content/__tests__/content-with-childsections.json +0 -105
  298. package/src/models/content/__tests__/content-with-sections.json +0 -105
  299. package/src/models/content/__tests__/content-with-subsections.json +0 -119
  300. package/src/models/content/__tests__/content-with-subsections2.json +0 -79
  301. package/src/models/content/__tests__/content.json +0 -31
  302. package/src/models/content/__tests__/contributions.json +0 -84
  303. package/src/models/content/__tests__/formalsource-complete.json +0 -235
  304. package/src/models/content/__tests__/formalsource-contributions.json +0 -110
  305. package/src/models/content/__tests__/formalsource-section-contributions.json +0 -84
  306. package/src/models/content/__tests__/formalsource-section.json +0 -60
  307. package/src/models/content/__tests__/formalsource-toc.json +0 -122
  308. package/src/models/contentconfiguration/ContentConfiguration.js +0 -70
  309. package/src/models/contentconfiguration/ContentConfigurationElements.js +0 -152
  310. package/src/models/contentconfiguration/ContentConfigurationEndResults.js +0 -45
  311. package/src/models/contentconfiguration/ContentConfigurationQuestions.js +0 -60
  312. package/src/models/contentconfiguration/ContentConfigurationResults.js +0 -105
  313. package/src/models/contentconfiguration/__tests__/ContentConfigurationElements.spec.js +0 -29
  314. package/src/models/contentconfiguration/__tests__/ContentConfigurationResults.spec.js +0 -101
  315. package/src/models/detail/DetailModel.js +0 -241
  316. package/src/models/detail/__tests__/DetailModel.spec.js +0 -41
  317. package/src/models/detail/__tests__/detail.json +0 -37
  318. package/src/models/detail/__tests__/detailContributions.json +0 -124
  319. package/src/models/error/ErrorCollection.js +0 -127
  320. package/src/models/error/ErrorModel.js +0 -83
  321. package/src/models/error/ErrorResponse.js +0 -343
  322. package/src/models/error/__tests__/ErrorCollection.spec.js +0 -41
  323. package/src/models/error/__tests__/ErrorModel.spec.js +0 -24
  324. package/src/models/filters/AssignmentFilterModel.js +0 -218
  325. package/src/models/filters/BaseFilterModel.js +0 -146
  326. package/src/models/filters/ConceptIndexFilterModel.js +0 -43
  327. package/src/models/filters/FilterCollection.js +0 -227
  328. package/src/models/filters/FilterModel.js +0 -151
  329. package/src/models/filters/RangeFilterModel.js +0 -36
  330. package/src/models/filters/StringFilterModel.js +0 -167
  331. package/src/models/filters/__tests__/AssignmentFilterModel.spec.js +0 -140
  332. package/src/models/filters/__tests__/FilterCollection.spec.js +0 -68
  333. package/src/models/filters/__tests__/FilterModel.spec.js +0 -65
  334. package/src/models/filters/__tests__/RangeFilterModel.spec.js +0 -55
  335. package/src/models/filters/__tests__/ZipcodeFilter.spec.js +0 -145
  336. package/src/models/filters/__tests__/filters.json +0 -91
  337. package/src/models/filters/__tests__/filtersContributions.json +0 -110
  338. package/src/models/form/FormModel.js +0 -1280
  339. package/src/models/form/FormObjectModel.js +0 -590
  340. package/src/models/form/__mock__/contributions.json +0 -525
  341. package/src/models/form/__mock__/data.json +0 -78
  342. package/src/models/form/__mock__/form.js +0 -17
  343. package/src/models/form/__tests__/FormContributions.json +0 -495
  344. package/src/models/form/__tests__/FormContributionsUnknownRepeat.json +0 -67
  345. package/src/models/form/__tests__/FormInstrumentContributions.json +0 -183
  346. package/src/models/form/__tests__/FormModel.getters.spec.js +0 -149
  347. package/src/models/form/__tests__/FormModel.instrument.spec.js +0 -202
  348. package/src/models/form/__tests__/FormModel.repeating.spec.js +0 -65
  349. package/src/models/form/__tests__/FormModel.selfhref.spec.js +0 -84
  350. package/src/models/form/__tests__/FormModel.spec.js +0 -752
  351. package/src/models/form/__tests__/FormModel.unknown-repeat.spec.js +0 -52
  352. package/src/models/form/__tests__/FormObjectModel.spec.js +0 -180
  353. package/src/models/form/__tests__/FormResultData.spec.js +0 -86
  354. package/src/models/form/__tests__/FormValidation.spec.js +0 -79
  355. package/src/models/form/__tests__/FormValidationContributions.json +0 -45
  356. package/src/models/form/__tests__/FormValidationDataInitial.json +0 -33
  357. package/src/models/form/__tests__/FormValidationDataUpdate1.json +0 -25
  358. package/src/models/form/__tests__/FormValidationDataUpdate2.json +0 -33
  359. package/src/models/form/__tests__/FormWithContent.spec.js +0 -71
  360. package/src/models/form/__tests__/FormWithContentContributions.json +0 -242
  361. package/src/models/form/__tests__/FormWithContentData.json +0 -244
  362. package/src/models/grouping/GroupingModel.js +0 -232
  363. package/src/models/grouping/__tests__/GroupingModel.spec.js +0 -80
  364. package/src/models/href/Href.js +0 -592
  365. package/src/models/href/ListHref.js +0 -161
  366. package/src/models/href/__tests__/Href.spec.js +0 -184
  367. package/src/models/href/__tests__/ListHref.spec.js +0 -61
  368. package/src/models/href/__tests__/list.json +0 -2417
  369. package/src/models/href/__tests__/listContributions.json +0 -330
  370. package/src/models/index.js +0 -177
  371. package/src/models/layouthint/LayoutHintCollection.js +0 -116
  372. package/src/models/layouthint/__tests__/LayoutHintCollection.spec.js +0 -89
  373. package/src/models/links/LinkCollection.js +0 -169
  374. package/src/models/links/LinkModel.js +0 -246
  375. package/src/models/links/__tests__/LinkCollection.spec.js +0 -426
  376. package/src/models/links/__tests__/LinkModel.spec.js +0 -103
  377. package/src/models/links/__tests__/normalizeLinkJSON.spec.js +0 -212
  378. package/src/models/links/normalizeLinkJSON.js +0 -121
  379. package/src/models/list/ListDetailModel.js +0 -332
  380. package/src/models/list/ListHeaderModel.js +0 -96
  381. package/src/models/list/ListItemCollection.js +0 -80
  382. package/src/models/list/ListItemModel.js +0 -111
  383. package/src/models/list/ListModel.js +0 -485
  384. package/src/models/list/__mock__/caselist.contributions.json +0 -372
  385. package/src/models/list/__mock__/caselist.data.json +0 -519
  386. package/src/models/list/__mock__/caselist.js +0 -14
  387. package/src/models/list/__tests__/ListDetailModel.hierarchy.spec.js +0 -88
  388. package/src/models/list/__tests__/ListDetailModel.spec.js +0 -96
  389. package/src/models/list/__tests__/ListItemCollection.spec.js +0 -22
  390. package/src/models/list/__tests__/ListModel.spec.js +0 -152
  391. package/src/models/list/__tests__/ListResultDetail.spec.js +0 -37
  392. package/src/models/list/__tests__/caselist-34.contributions.json +0 -146
  393. package/src/models/list/__tests__/caselist-34.data.json +0 -21
  394. package/src/models/list/__tests__/hierarchy.json +0 -185
  395. package/src/models/list/__tests__/hierarchyContributions.json +0 -582
  396. package/src/models/list/__tests__/instrument-detail-contributions.json +0 -761
  397. package/src/models/list/__tests__/instrument-detail-data.json +0 -66
  398. package/src/models/list/__tests__/list.json +0 -2426
  399. package/src/models/list/__tests__/listContributions.json +0 -349
  400. package/src/models/list/__tests__/related-contributions.json +0 -42
  401. package/src/models/list/__tests__/related-data.json +0 -32
  402. package/src/models/lookup/LookupOptionCollection.js +0 -54
  403. package/src/models/lookup/LookupOptionsModel.js +0 -81
  404. package/src/models/lookup/__tests__/LookupOptionCollection.spec.js +0 -80
  405. package/src/models/lookup/__tests__/LookupOptionsModel.spec.js +0 -82
  406. package/src/models/lookup/__tests__/_LookupOptionsContributions.json +0 -29
  407. package/src/models/lookup/__tests__/_LookupOptionsData.json +0 -34
  408. package/src/models/lookup/__tests__/_LookupOptionsListContributions.json +0 -129
  409. package/src/models/lookup/__tests__/_LookupOptionsListData.json +0 -134
  410. package/src/models/lookup/__tests__/_TaxonomyAttributeData.json +0 -42
  411. package/src/models/modelcatalog/ModelCatalogModel.js +0 -73
  412. package/src/models/modelcatalog/ModelCategoryCollection.js +0 -22
  413. package/src/models/modelcatalog/ModelCategoryModel.js +0 -63
  414. package/src/models/modelcatalog/__mock__/contributions.json +0 -6
  415. package/src/models/modelcatalog/__mock__/data.json +0 -29
  416. package/src/models/modelcatalog/__mock__/modelcatalog.js +0 -14
  417. package/src/models/modelcatalog/__tests__/ModelCatalogModel.spec.js +0 -49
  418. package/src/models/paging/PagesizeModel.js +0 -50
  419. package/src/models/paging/PagingModel.js +0 -105
  420. package/src/models/paging/__tests__/PageSizeModel.spec.js +0 -31
  421. package/src/models/paging/__tests__/PagingModel.spec.js +0 -40
  422. package/src/models/paging/__tests__/list.json +0 -8
  423. package/src/models/paging/__tests__/listContributions.json +0 -7
  424. package/src/models/panels/GroupingPanelModel.js +0 -164
  425. package/src/models/panels/__tests__/GroupingPanelModel.spec.js +0 -142
  426. package/src/models/panels/__tests__/groupingPanel.json +0 -49
  427. package/src/models/panels/__tests__/groupingPanelContributions.json +0 -59
  428. package/src/models/parameter/Parameter.js +0 -117
  429. package/src/models/parameter/__tests__/Parameter.spec.js +0 -125
  430. package/src/models/process/ProcessStatusSettingsModel.js +0 -88
  431. package/src/models/process/__tests__/ProcessStatusSettingsModel.spec.js +0 -52
  432. package/src/models/resolveModel.js +0 -92
  433. package/src/models/search/CaseSearchModel.js +0 -46
  434. package/src/models/search/__tests__/CaseSearchModel.spec.js +0 -10
  435. package/src/models/sorting/SortOptionModel.js +0 -114
  436. package/src/models/sorting/SortingModel.js +0 -140
  437. package/src/models/sorting/__tests__/SortingModel.spec.js +0 -96
  438. package/src/models/tab/TabModel.js +0 -160
  439. package/src/models/tab/__mock__/contributions.json +0 -77
  440. package/src/models/tab/__mock__/data.json +0 -20
  441. package/src/models/tab/__mock__/personContributions.json +0 -35
  442. package/src/models/tab/__mock__/personData.json +0 -21
  443. package/src/models/tab/__mock__/tab.js +0 -14
  444. package/src/models/tab/__mock__/tabPerson.js +0 -14
  445. package/src/models/tab/__tests__/TabModel.spec.js +0 -72
  446. package/src/models/tab/__tests__/tab.json +0 -37
  447. package/src/models/tab/__tests__/tabContributions.json +0 -39
  448. package/src/models/taskgroup/TaskGroupCollection.js +0 -16
  449. package/src/models/taskgroup/TaskGroupModel.js +0 -102
  450. package/src/models/taskgroup/__mock__/contributions.json +0 -18
  451. package/src/models/taskgroup/__mock__/data.json +0 -21
  452. package/src/models/taskgroup/__mock__/taskgroup.js +0 -14
  453. package/src/models/taskgroup/__tests__/TaskGroupModel.spec.js +0 -26
  454. package/src/models/taskgroup/__tests__/taskgroup.json +0 -25
  455. package/src/models/taskgroup/__tests__/taskgroupContributions.json +0 -23
  456. package/src/models/types.js +0 -291
  457. package/src/models/user/UserModel.js +0 -57
  458. package/src/models/user/UserProfileModel.js +0 -54
  459. package/src/models/user/UserServicesModel.js +0 -136
  460. package/src/models/user/__mock__/contributions.json +0 -148
  461. package/src/models/user/__mock__/data.json +0 -22
  462. package/src/models/user/__tests__/UserModel.spec.js +0 -43
  463. package/src/models/user/__tests__/UserProfileModel.spec.js +0 -45
  464. package/src/models/user/__tests__/UserServicesModel.spec.js +0 -55
  465. package/src/modularui/Authenticate.js +0 -217
  466. package/src/modularui/CaptchaRequest.js +0 -104
  467. package/src/modularui/ModularUIError.js +0 -25
  468. package/src/modularui/ModularUIRequest.js +0 -872
  469. package/src/modularui/ModularUIResponse.js +0 -160
  470. package/src/modularui/UploadRequest.js +0 -151
  471. package/src/modularui/__tests__/CustomContextPath.spec.js +0 -61
  472. package/src/modularui/__tests__/ModularUIError.spec.js +0 -22
  473. package/src/modularui/__tests__/ModularUIRequest.spec.js +0 -495
  474. package/src/modularui/__tests__/contributions.json +0 -312
  475. package/src/modularui/__tests__/data.json +0 -263
  476. package/src/modularui/index.js +0 -6
  477. package/src/modularui/types.js +0 -4
  478. package/src/react/ErrorBoundary.js +0 -61
  479. package/src/react/ErrorBoundaryFallback.js +0 -46
  480. package/src/react/index.js +0 -3
  481. package/src/react/utils.js +0 -33
  482. package/src/react-client/Init.js +0 -46
  483. package/src/react-client/client.js +0 -309
  484. package/src/react-client/contextPath.js +0 -30
  485. package/src/react-client/index.js +0 -4
  486. package/src/react-client/rehydrate.js +0 -94
  487. package/src/react-server/__tests__/htmlpage.spec.js +0 -75
  488. package/src/react-server/__tests__/requestInformation.spec.js +0 -266
  489. package/src/react-server/__tests__/serverUtil.spec.js +0 -183
  490. package/src/react-server/contextPath.js +0 -8
  491. package/src/react-server/createSSRComplete.js +0 -63
  492. package/src/react-server/htmlpage.js +0 -55
  493. package/src/react-server/index.js +0 -13
  494. package/src/react-server/renderSSRComplete.js +0 -111
  495. package/src/react-server/renderSSRMinimal.js +0 -54
  496. package/src/react-server/requestInformation.js +0 -68
  497. package/src/react-server/serverNoSSR.js +0 -87
  498. package/src/react-server/serverSSR.js +0 -70
  499. package/src/react-server/serverUtil.js +0 -279
  500. package/src/react-theme/ThemeProvider.js +0 -25
  501. package/src/react-theme/__tests__/ThemeProvider.spec.js +0 -84
  502. package/src/react-theme/__tests__/createTheme.spec.js +0 -172
  503. package/src/react-theme/createTheme.js +0 -118
  504. package/src/react-theme/index.js +0 -15
  505. package/src/react-theme/types.js +0 -16
  506. package/src/react-theme/useTheme.js +0 -13
  507. package/src/react-theme/utils/__tests__/background.spec.js +0 -30
  508. package/src/react-theme/utils/__tests__/colors.spec.js +0 -30
  509. package/src/react-theme/utils/__tests__/contrast.spec.js +0 -44
  510. package/src/react-theme/utils/__tests__/corners.spec.js +0 -27
  511. package/src/react-theme/utils/__tests__/spacers.spec.js +0 -44
  512. package/src/react-theme/utils/__tests__/themeProps.spec.js +0 -72
  513. package/src/react-theme/utils/background.js +0 -20
  514. package/src/react-theme/utils/colors.js +0 -47
  515. package/src/react-theme/utils/contrast.js +0 -117
  516. package/src/react-theme/utils/corners.js +0 -37
  517. package/src/react-theme/utils/spacers.js +0 -65
  518. package/src/react-theme/utils/themeProps.js +0 -90
  519. package/src/redux/_i18n/I18nActions.js +0 -38
  520. package/src/redux/_i18n/I18nReducer.js +0 -91
  521. package/src/redux/_i18n/__tests__/actions.spec.js +0 -37
  522. package/src/redux/_i18n/__tests__/reducer.spec.js +0 -29
  523. package/src/redux/_i18n/index.js +0 -6
  524. package/src/redux/_i18n/types.js +0 -20
  525. package/src/redux/_modularui/ModularUIActions.js +0 -227
  526. package/src/redux/_modularui/ModularUIConnector.js +0 -157
  527. package/src/redux/_modularui/ModularUIMiddleware.js +0 -182
  528. package/src/redux/_modularui/ModularUIReducer.js +0 -169
  529. package/src/redux/_modularui/ModularUISelectors.js +0 -322
  530. package/src/redux/_modularui/ModularUIUtils.js +0 -96
  531. package/src/redux/_modularui/__tests__/actions.spec.js +0 -159
  532. package/src/redux/_modularui/__tests__/reducer.spec.js +0 -134
  533. package/src/redux/_modularui/__tests__/selectors.spec.js +0 -153
  534. package/src/redux/_modularui/index.js +0 -11
  535. package/src/redux/_modularui/types.js +0 -121
  536. package/src/redux/_modularui/withModularUI.js +0 -85
  537. package/src/redux/_router/RouterActions.js +0 -75
  538. package/src/redux/_router/RouterConnectors.js +0 -97
  539. package/src/redux/_router/RouterMiddleware.js +0 -37
  540. package/src/redux/_router/RouterReducer.js +0 -21
  541. package/src/redux/_router/__tests__/actions.spec.js +0 -109
  542. package/src/redux/_router/__tests__/hooks.spec.js +0 -98
  543. package/src/redux/_router/__tests__/middleware.spec.js +0 -62
  544. package/src/redux/_router/__tests__/reducer.spec.js +0 -26
  545. package/src/redux/_router/index.js +0 -8
  546. package/src/redux/_router/types.js +0 -43
  547. package/src/redux/actions/Application.js +0 -45
  548. package/src/redux/actions/Authorization.js +0 -65
  549. package/src/redux/actions/Error.js +0 -95
  550. package/src/redux/actions/Form.js +0 -42
  551. package/src/redux/actions/FormAttributeSet.js +0 -98
  552. package/src/redux/actions/FormAttributeSetRepeatable.js +0 -45
  553. package/src/redux/actions/FormAutosave.js +0 -73
  554. package/src/redux/actions/FormAutosubmit.js +0 -43
  555. package/src/redux/actions/FormAutoupdate.js +0 -47
  556. package/src/redux/actions/FormValidations.js +0 -71
  557. package/src/redux/actions/Modals.js +0 -16
  558. package/src/redux/actions/ModelCatalog.js +0 -12
  559. package/src/redux/actions/Notification.js +0 -101
  560. package/src/redux/actions/Preferences.js +0 -173
  561. package/src/redux/actions/ProgressIndicator.js +0 -39
  562. package/src/redux/actions/SignIn.js +0 -102
  563. package/src/redux/actions/SignOut.js +0 -29
  564. package/src/redux/actions/__tests__/Application.spec.js +0 -52
  565. package/src/redux/actions/__tests__/Authorization.spec.js +0 -121
  566. package/src/redux/actions/__tests__/CustomErrorResponseHandler.spec.js +0 -72
  567. package/src/redux/actions/__tests__/Error-server.spec.js +0 -134
  568. package/src/redux/actions/__tests__/Error.spec.js +0 -116
  569. package/src/redux/actions/__tests__/Form.spec.js +0 -39
  570. package/src/redux/actions/__tests__/Modals.spec.js +0 -34
  571. package/src/redux/actions/__tests__/Notification.spec.js +0 -94
  572. package/src/redux/actions/__tests__/Preferences.spec.js +0 -71
  573. package/src/redux/actions/__tests__/ProgressIndicator.spec.js +0 -53
  574. package/src/redux/actions/index.js +0 -17
  575. package/src/redux/connectors/Application.js +0 -14
  576. package/src/redux/connectors/Breadcrumb.js +0 -28
  577. package/src/redux/connectors/CaseView.js +0 -14
  578. package/src/redux/connectors/ConceptDetail.js +0 -12
  579. package/src/redux/connectors/ContentBrowser.js +0 -14
  580. package/src/redux/connectors/ContentDetail.js +0 -13
  581. package/src/redux/connectors/ContentDetailSection.js +0 -17
  582. package/src/redux/connectors/Form.js +0 -83
  583. package/src/redux/connectors/FormAttributeSet.js +0 -85
  584. package/src/redux/connectors/ListDetail.js +0 -16
  585. package/src/redux/connectors/Modal.js +0 -47
  586. package/src/redux/connectors/ModelCatalog.js +0 -14
  587. package/src/redux/connectors/Notification.js +0 -47
  588. package/src/redux/connectors/PanelRenderer.js +0 -29
  589. package/src/redux/connectors/Preferences.js +0 -53
  590. package/src/redux/connectors/Progress.js +0 -35
  591. package/src/redux/connectors/ProgressIndicator.js +0 -35
  592. package/src/redux/connectors/QuickSearch.js +0 -36
  593. package/src/redux/connectors/SignIn.js +0 -47
  594. package/src/redux/connectors/SignOut.js +0 -38
  595. package/src/redux/connectors/Tab.js +0 -14
  596. package/src/redux/connectors/index.js +0 -22
  597. package/src/redux/index.js +0 -27
  598. package/src/redux/reducers/AuthReducer.js +0 -56
  599. package/src/redux/reducers/ErrorReducer.js +0 -22
  600. package/src/redux/reducers/ModalsReducer.js +0 -58
  601. package/src/redux/reducers/ModelCatalogReducer.js +0 -34
  602. package/src/redux/reducers/NotificationReducer.js +0 -45
  603. package/src/redux/reducers/PreferencesReducer.js +0 -31
  604. package/src/redux/reducers/ProgressIndicatorReducer.js +0 -60
  605. package/src/redux/reducers/__tests__/AuthReducer.spec.js +0 -95
  606. package/src/redux/reducers/__tests__/ErrorReducer.spec.js +0 -17
  607. package/src/redux/reducers/__tests__/ModalsReducer.spec.js +0 -34
  608. package/src/redux/reducers/__tests__/ModelCatalogReducer.spec.js +0 -23
  609. package/src/redux/reducers/__tests__/NotificationReducer.spec.js +0 -53
  610. package/src/redux/reducers/__tests__/PreferencesReducer.spec.js +0 -31
  611. package/src/redux/reducers/__tests__/ProgressIndicatorReducer.spec.js +0 -82
  612. package/src/redux/reducers/createReducer.js +0 -55
  613. package/src/redux/reducers/index.js +0 -10
  614. package/src/redux/selectors/i18n.js +0 -15
  615. package/src/redux/selectors/index.js +0 -3
  616. package/src/redux/selectors/modelcatalog.js +0 -11
  617. package/src/redux/store/__tests__/beforeRenderHooks.spec.js +0 -13
  618. package/src/redux/store/beforeRenderHooks.js +0 -26
  619. package/src/redux/store/configureStore.js +0 -59
  620. package/src/redux/types.js +0 -241
  621. package/src/utils/browser/Cache.js +0 -157
  622. package/src/utils/browser/Cookies.js +0 -44
  623. package/src/utils/browser/__tests__/Cookies.spec.js +0 -51
  624. package/src/utils/datetime/DateTimeUtil.js +0 -858
  625. package/src/utils/datetime/__tests__/DateTime.spec.js +0 -873
  626. package/src/utils/datetime/__tests__/DateTimeFormat.spec.js +0 -146
  627. package/src/utils/fetch/__mocks__/applicationContributions.json +0 -323
  628. package/src/utils/fetch/__mocks__/applicationData.json +0 -216
  629. package/src/utils/fetch/__mocks__/formContributions.json +0 -527
  630. package/src/utils/fetch/__mocks__/formData.json +0 -21
  631. package/src/utils/fetch/__mocks__/universalFetch.js +0 -38
  632. package/src/utils/fetch/__tests__/xhr.spec.js +0 -281
  633. package/src/utils/fetch/serverFetch.js +0 -33
  634. package/src/utils/fetch/types.js +0 -46
  635. package/src/utils/fetch/universalFetch.js +0 -106
  636. package/src/utils/fetch/xhr.js +0 -409
  637. package/src/utils/helpers/__tests__/checkResource.spec.js +0 -60
  638. package/src/utils/helpers/__tests__/createHash.spec.js +0 -11
  639. package/src/utils/helpers/__tests__/createHref.spec.js +0 -39
  640. package/src/utils/helpers/__tests__/objects.spec.js +0 -50
  641. package/src/utils/helpers/__tests__/sanitizeHTML.spec.js +0 -69
  642. package/src/utils/helpers/checkResource.js +0 -43
  643. package/src/utils/helpers/createHash.js +0 -28
  644. package/src/utils/helpers/createHref.js +0 -117
  645. package/src/utils/helpers/createUUID.js +0 -13
  646. package/src/utils/helpers/index.js +0 -9
  647. package/src/utils/helpers/objects.js +0 -33
  648. package/src/utils/helpers/repositoryResource.js +0 -22
  649. package/src/utils/helpers/sanitizeHtml.js +0 -55
  650. package/src/utils/helpers/text.js +0 -23
  651. package/src/utils/index.js +0 -22
  652. package/src/utils/number/DecimalFormat.js +0 -410
  653. package/src/utils/number/__tests__/formatValue.spec.js +0 -36
  654. package/src/utils/number/__tests__/parseNumbers.spec.js +0 -50
  655. package/src/utils/number/formatValue.js +0 -60
  656. package/src/utils/number/parseNumbers.js +0 -94
@@ -1,1280 +0,0 @@
1
- // @flow
2
- import flattenDeep from "lodash/flattenDeep";
3
- import deepmerge from "deepmerge";
4
-
5
- import { has } from "../../utils/helpers/objects";
6
-
7
- import { IllegalArgumentException } from "../../exceptions";
8
-
9
- import ResourceModel from "../base/ResourceModel";
10
- import ErrorCollection from "../error/ErrorCollection";
11
-
12
- import Href from "../href/Href";
13
- import Parameter from "../parameter/Parameter";
14
-
15
- import FormObjectModel from "./FormObjectModel";
16
-
17
- import { HTTP_METHODS } from "../../constants/Constants";
18
- import { getSetting } from "../../constants/Settings";
19
- import {
20
- CREATE_ACTION,
21
- DELETE_ACTION,
22
- UPDATE_ACTION,
23
- } from "../../constants/LayoutHints";
24
-
25
- import LayoutHintCollection from "../layouthint/LayoutHintCollection";
26
- import AttributeSetModel from "../attributes/AttributeSetModel";
27
-
28
- import type { AttributeType, ModularUIModel } from "../types";
29
- import type { ModularUIResponse } from "../../modularui";
30
- import type ErrorResponse from "../error/ErrorResponse";
31
- import type LinkModel from "../links/LinkModel";
32
-
33
- /**
34
- */
35
- class FormModel extends ResourceModel {
36
- _lastUpdate: number;
37
-
38
- _completedFormObjects: Array<FormObjectModel> = [];
39
- _currentFormObject: FormObjectModel | null = null;
40
- _previouslyEnteredFormObjects: Array<FormObjectModel> = [];
41
-
42
- _mergePreviouslyEnteredObjects: boolean = true;
43
-
44
- _endResultFormObjects: Array<FormObjectModel> = [];
45
- _previousEndResultKeys: Array<string> = [];
46
-
47
- _useClientsideValidation: boolean = getSetting("USE_CLIENTSIDE_VALIDATION");
48
- _errorCollection: ErrorCollection = new ErrorCollection("form");
49
-
50
- _redirectLocation: Href;
51
-
52
- _commit: boolean;
53
- _isFinished: boolean;
54
- _isComplete: boolean;
55
- _success: { redirect: string, data: Object } | null;
56
-
57
- _parameters: Array<Parameter>;
58
- _tokens: Array<string>;
59
-
60
- /**
61
- */
62
- constructor(modularuiResponse: ModularUIResponse) {
63
- super(modularuiResponse);
64
-
65
- this.lastUpdate = 0;
66
-
67
- this.currentFormObject = this.createFormObject();
68
- this.endResultFormObjects = this.setEndResultFormObjects();
69
-
70
- this.parameters = this.setParameters(modularuiResponse);
71
-
72
- this.isComplete = this.getData("complete", false);
73
-
74
- if (this.data.errors) {
75
- this.handleRootErrors(this.data.errors);
76
- }
77
-
78
- this.createSuccess();
79
- }
80
-
81
- /**
82
- */
83
- get type(): string {
84
- return "Form";
85
- }
86
-
87
- /**
88
- */
89
- get actiontype(): string {
90
- if (this.layouthint.has(CREATE_ACTION)) {
91
- return "create";
92
- }
93
- if (this.layouthint.has(UPDATE_ACTION)) {
94
- return "update";
95
- }
96
- if (this.layouthint.has(DELETE_ACTION)) {
97
- return "delete";
98
- }
99
-
100
- return this.getContribution("actiontype", "form");
101
- }
102
-
103
- /**
104
- */
105
- static get modelName(): string {
106
- return "FormModel";
107
- }
108
-
109
- /**
110
- */
111
- static isApplicableModel(data: ModularUIResponse): boolean {
112
- return (
113
- data.contributions.resourcetype &&
114
- data.contributions.resourcetype === "Form"
115
- );
116
- }
117
-
118
- /**
119
- */
120
- getInitialChildModelLinks(): Array<LinkModel> {
121
- const endResultChildLinks = flattenDeep(
122
- this.endResultFormObjects.map((endResultFormObject) =>
123
- endResultFormObject.getInitialChildModelLinks(),
124
- ),
125
- );
126
-
127
- if (this.currentFormObject === null) {
128
- return endResultChildLinks;
129
- }
130
-
131
- return [
132
- ...this.currentFormObject.getInitialChildModelLinks(),
133
- ...endResultChildLinks,
134
- ];
135
- }
136
-
137
- /**
138
- */
139
- setChildModels(models: Array<ModularUIModel>, errors: Array<ErrorResponse>) {
140
- if (this.currentFormObject) {
141
- this.currentFormObject.setChildModels(models, errors);
142
- }
143
-
144
- this.endResultFormObjects.forEach((endResultFormObject) => {
145
- endResultFormObject.setChildModels(models, errors);
146
- });
147
- }
148
-
149
- /**
150
- */
151
- get label(): string {
152
- return this.getContribution("label", "");
153
- }
154
-
155
- /**
156
- * Get form level button labels
157
- */
158
- get buttonLabels(): Object {
159
- return this.getContribution("buttonLabels", {});
160
- }
161
-
162
- /**
163
- * @returns button label from contributions;
164
- */
165
- getButtonLabel(
166
- buttonType: "cancel" | "previous" | "next" | "finish",
167
- ): string | null {
168
- // cancel button labels are defined on the form
169
- if (buttonType === "cancel") {
170
- return this.buttonLabels?.cancel ?? null;
171
- }
172
-
173
- // all other form related button labels are defined on the object
174
- return this.currentFormObject?.buttonLabels?.[buttonType] ?? null;
175
- }
176
-
177
- /**
178
- * Get all applicable objects
179
- */
180
- get allObjects(): Array<FormObjectModel> {
181
- if (this.currentFormObject === null) {
182
- return this.completedFormObjects;
183
- }
184
-
185
- return [...this.completedFormObjects, this.currentFormObject];
186
- }
187
-
188
- /**
189
- */
190
- get objectKeys(): Array<string> {
191
- if (has(this.contributions, "objects")) {
192
- return Object.keys(this.contributions.objects);
193
- }
194
-
195
- return [];
196
- }
197
-
198
- /**
199
- */
200
- get numberOfExpectedQuestions(): number {
201
- return this.objectKeys.length;
202
- }
203
-
204
- /**
205
- * Has questions configured on form
206
- */
207
- get hasNoQuestionsConfigured(): boolean {
208
- return (
209
- this.isComplete &&
210
- (this.objectKeys.length === 0 ||
211
- (!("missing" in this.data) &&
212
- !("results" in this.data) &&
213
- !("errors" in this.data)))
214
- );
215
- }
216
-
217
- /**
218
- */
219
- addGlobalDynamicSchema(anchor: Object, dynamicschema: Object): Object {
220
- if (!dynamicschema) {
221
- return anchor;
222
- }
223
-
224
- return {
225
- ...anchor,
226
- elements: anchor.elements.map((element) => ({
227
- ...element,
228
- dynamicschema: element.dynamicschema
229
- ? element.dynamicschema.map((item) => ({
230
- ...item,
231
- elements: { ...item.elements, dynamicschema },
232
- }))
233
- : null,
234
- })),
235
- };
236
- }
237
-
238
- /**
239
- */
240
- getMissingAnchors(): Array<Object> {
241
- const missingAnchors = this.data.missing?.anchors ?? [];
242
-
243
- // Add intermediate result data to anchor
244
- return missingAnchors.map((anchor) => {
245
- if (this.data.results) {
246
- const resultObject = this.data.results.find(
247
- (result) =>
248
- result.objectid === anchor.objectid && "elements" in result,
249
- );
250
-
251
- if (resultObject) {
252
- anchor.results = resultObject.elements;
253
- }
254
- }
255
-
256
- return this.addGlobalDynamicSchema(anchor, this.data.dynamicschema);
257
- });
258
- }
259
-
260
- /**
261
- * Create form object based on the data and contributions available in this form
262
- */
263
- createFormObject(): FormObjectModel | null {
264
- if (this.data && this.contributions) {
265
- const missingAnchors = this.getMissingAnchors();
266
-
267
- // Get object id from first anchor
268
- const objectId = missingAnchors?.[0]?.objectid ?? "";
269
- const contributions = this.contributions.objects?.[objectId];
270
- if (contributions) {
271
- return new FormObjectModel(
272
- missingAnchors[0],
273
- contributions,
274
- this.modelOptions,
275
- );
276
- }
277
- }
278
-
279
- return null;
280
- }
281
-
282
- /**
283
- */
284
- addEmptyFormObject(
285
- formObjectModel: FormObjectModel | null = this.currentFormObject,
286
- ) {
287
- if (formObjectModel) {
288
- const emptyFormObject = FormObjectModel.createEmpty(formObjectModel);
289
-
290
- emptyFormObject.repeatIndex =
291
- this.getHighestRepeatIndex(formObjectModel) + 1;
292
-
293
- this.addFormObject(emptyFormObject);
294
- }
295
- }
296
-
297
- /**
298
- */
299
- getHighestRepeatIndex(formObjectModel: FormObjectModel): number {
300
- return Math.max(
301
- ...this.allObjects
302
- .filter((formObject) => formObject.equals(formObjectModel, false))
303
- .map((formObject) => formObject.repeatIndex),
304
- );
305
- }
306
-
307
- /**
308
- */
309
- addFormObject(formObjectModel: FormObjectModel): void {
310
- if (!formObjectModel) {
311
- throw new IllegalArgumentException("Missing form object to add");
312
- }
313
-
314
- this.completedFormObjects = [...this.allObjects];
315
- this.currentFormObject = formObjectModel;
316
- }
317
-
318
- /**
319
- * Retrieve a form object by the key
320
- */
321
- getFormObjectByKey(key: string): ?FormObjectModel {
322
- return this.allObjects.find((formObject) => formObject.key === key);
323
- }
324
-
325
- /**
326
- * Retrieve a form object by a layouthint
327
- */
328
- getFormObjectByLayoutHint(hint: string): ?FormObjectModel {
329
- return this.allObjects.find((formObject) =>
330
- formObject.layouthint.has(hint),
331
- );
332
- }
333
-
334
- /**
335
- */
336
- removeFormObject(formObjectModel: ?FormObjectModel): void {
337
- if (!formObjectModel) {
338
- throw new IllegalArgumentException("Missing form object to remove");
339
- }
340
- if (formObjectModel.equals(this.currentFormObject)) {
341
- throw new IllegalArgumentException(
342
- "Can not remove the current form object",
343
- );
344
- }
345
-
346
- this.completedFormObjects = this.completedFormObjects.filter(
347
- (formObject) => !formObject.equals(formObjectModel),
348
- );
349
- }
350
-
351
- /**
352
- */
353
- get currentFormObject(): FormObjectModel | null {
354
- return this._currentFormObject;
355
- }
356
-
357
- /**
358
- */
359
- set currentFormObject(formObject: FormObjectModel | null) {
360
- this._currentFormObject = formObject;
361
- }
362
-
363
- /**
364
- * Completed objects are previously entered questions
365
- */
366
- get completedFormObjects(): Array<FormObjectModel> {
367
- return this._completedFormObjects;
368
- }
369
-
370
- /**
371
- */
372
- set completedFormObjects(formObjects: Array<FormObjectModel>) {
373
- this._completedFormObjects = formObjects;
374
- }
375
-
376
- /**
377
- * Previously entered objects are questions that have been entered before,
378
- * but are currently not applicable for the form.
379
- * For example because of previous navigation
380
- */
381
- get previouslyEnteredFormObjects(): Array<FormObjectModel> {
382
- return this._previouslyEnteredFormObjects;
383
- }
384
-
385
- /**
386
- */
387
- set previouslyEnteredFormObjects(formObjects: Array<FormObjectModel>) {
388
- this._previouslyEnteredFormObjects = formObjects;
389
- }
390
-
391
- /**
392
- * Handle end results
393
- */
394
- setEndResultFormObjects(): Array<FormObjectModel> {
395
- if (this.data && this.data.results) {
396
- const missingObjects = this.data.missing?.anchors ?? [];
397
- const missingObjectIds = missingObjects.map((anchor) => anchor.objectid);
398
-
399
- // Filter out intermediate results and rename elements property to result property
400
- const endResultAnchors = this.data.results
401
- .filter((result) => !missingObjectIds.includes(result.objectid))
402
- .map((result) => {
403
- const { elements, ...otherProps } = result;
404
-
405
- return {
406
- ...otherProps,
407
- results: elements,
408
- };
409
- });
410
-
411
- if (endResultAnchors.length > 0) {
412
- return endResultAnchors.map(
413
- (endResult) =>
414
- new FormObjectModel(
415
- endResult,
416
- this.contributions.objects[endResult.objectid],
417
- this.modelOptions,
418
- ),
419
- );
420
- }
421
- }
422
-
423
- return [];
424
- }
425
-
426
- /**
427
- */
428
- get expectsEndResultFormObjects(): boolean {
429
- const endResultKeys = this.endResultFormObjects.map(
430
- (endResult) => endResult.key,
431
- );
432
-
433
- return this.objectKeys.some(
434
- (objectKey) =>
435
- this.contributions.objects?.[objectKey]?.content?.results &&
436
- !endResultKeys.includes(objectKey),
437
- );
438
- }
439
-
440
- /**
441
- */
442
- get endResultFormObjects(): Array<FormObjectModel> {
443
- return this._endResultFormObjects;
444
- }
445
-
446
- /**
447
- */
448
- getEndResultFormObjects(): Array<FormObjectModel> {
449
- return this.endResultFormObjects.filter(
450
- (endResult) => !this.previousEndResultKeys.includes(endResult.key),
451
- );
452
- }
453
-
454
- /**
455
- */
456
- set endResultFormObjects(endResultFormObjects: Array<FormObjectModel>) {
457
- this.previousEndResultKeys = this.endResultFormObjects.map(
458
- (endResult) => endResult.key,
459
- );
460
- this._endResultFormObjects = endResultFormObjects;
461
- }
462
-
463
- /**
464
- */
465
- get previousEndResultKeys(): Array<string> {
466
- return this._previousEndResultKeys;
467
- }
468
-
469
- /**
470
- */
471
- set previousEndResultKeys(endResultFormObjectKeys: Array<string>) {
472
- this._previousEndResultKeys = endResultFormObjectKeys;
473
- }
474
-
475
- /**
476
- * Error handling
477
- */
478
- get isValid(): boolean {
479
- if (this.currentFormObject) {
480
- if (this.currentFormObject.isRepeatable) {
481
- // repeating objects need at least one valid form object
482
- const hasOneValidQuestion = this.allObjects
483
- .filter((object) => object.equals(this.currentFormObject, false))
484
- .find((object) => object.isValid);
485
-
486
- if (hasOneValidQuestion) {
487
- return true;
488
- }
489
- }
490
-
491
- return this.currentFormObject?.isValid ?? true;
492
- }
493
-
494
- return true;
495
- }
496
-
497
- /**
498
- */
499
- hasServerErrors(): boolean {
500
- if (this.errorCollection.hasItems) {
501
- return true;
502
- }
503
-
504
- if (this.currentFormObject) {
505
- return this.currentFormObject.hasServerErrors();
506
- }
507
-
508
- return false;
509
- }
510
-
511
- /**
512
- */
513
- hasErrors(): boolean {
514
- if (this.errorCollection.hasItems) {
515
- return true;
516
- }
517
-
518
- if (this.currentFormObject) {
519
- return this.currentFormObject.hasErrors();
520
- }
521
-
522
- return false;
523
- }
524
-
525
- /**
526
- * Add an error to the error collection of this form
527
- */
528
- addServerError(error: ErrorResponse) {
529
- if (error.parameters) {
530
- this.errorCollection.addServerError(
531
- error.id,
532
- error.message,
533
- error.parameters,
534
- error.layouthint,
535
- );
536
- } else {
537
- this.errorCollection.addServerError(
538
- error.id,
539
- error.message,
540
- undefined,
541
- error.layouthint,
542
- );
543
- }
544
- }
545
-
546
- /**
547
- * Reset error messages
548
- */
549
- resetErrors() {
550
- this._errorCollection = new ErrorCollection("form");
551
-
552
- if (this.currentFormObject) {
553
- this.currentFormObject.resetErrors();
554
- }
555
- }
556
-
557
- /**
558
- */
559
- get errorCollection(): ErrorCollection {
560
- return this._errorCollection;
561
- }
562
-
563
- /**
564
- */
565
- set errorCollection(errorCollection: ErrorCollection) {
566
- this._errorCollection = errorCollection;
567
- }
568
-
569
- /**
570
- * Indicates if the form needs to be committed
571
- */
572
- get commit(): boolean {
573
- return this._commit || false;
574
- }
575
-
576
- /**
577
- */
578
- set commit(commit: boolean) {
579
- this._commit = commit;
580
- }
581
-
582
- /**
583
- * Inidicates if form is finished: Form is completely entered and committed
584
- */
585
- get isFinished(): boolean {
586
- return this._isFinished || this.success != undefined;
587
- }
588
-
589
- /**
590
- */
591
- set isFinished(isFinished: boolean) {
592
- this._isFinished = isFinished;
593
- }
594
-
595
- /**
596
- * Indicates if form is completely entered
597
- */
598
- get isComplete(): boolean {
599
- return this._isComplete;
600
- }
601
-
602
- /**
603
- */
604
- set isComplete(isComplete: boolean) {
605
- this._isComplete = isComplete;
606
- }
607
-
608
- /**
609
- * Handle success redirects
610
- */
611
- get successRedirect(): Href | null {
612
- return this.isFinished && this.success
613
- ? new Href(this.success.redirect, "", this.modelOptions)
614
- : null;
615
- }
616
-
617
- /**
618
- */
619
- get redirectLocation(): Href {
620
- return this._redirectLocation || this.successRedirect;
621
- }
622
-
623
- /**
624
- * Get the result data as plain json object
625
- */
626
- getSuccessData(): ?Object {
627
- return this.success?.data;
628
- }
629
-
630
- /**
631
- * Retrieve an object where each property is a result data attribute set
632
- */
633
- getResultData(): ?{
634
- [key: string]: AttributeSetModel,
635
- } {
636
- const resultDataKeys = Object.keys(this.contributions.resultdata) ?? [];
637
- const successData = this.getSuccessData() ?? {};
638
-
639
- const resultdata: {
640
- [key: string]: AttributeSetModel,
641
- } = {};
642
-
643
- for (const resultDataKey of resultDataKeys) {
644
- resultdata[resultDataKey] = new AttributeSetModel(
645
- resultDataKey,
646
- successData[resultDataKey],
647
- this.contributions.resultdata[resultDataKey],
648
- this.modelOptions,
649
- );
650
- }
651
-
652
- return resultdata;
653
- }
654
-
655
- /**
656
- */
657
- get resultData(): ?Object {
658
- return this.getSuccessData();
659
- }
660
-
661
- /**
662
- * Href handling
663
- */
664
- setParameters(modularuiResponse: ModularUIResponse): Array<Parameter> {
665
- const parameters = modularuiResponse?.parameters ?? [];
666
- return parameters.map(
667
- (par) => new Parameter(par._prefix, par._name, par._value),
668
- );
669
- }
670
-
671
- /**
672
- */
673
- get parameters(): Array<Parameter> {
674
- return this._parameters;
675
- }
676
-
677
- /**
678
- */
679
- set parameters(parameters: Array<Parameter>) {
680
- this._parameters = parameters;
681
- }
682
-
683
- /**
684
- */
685
- selfhrefNoCommitParam(): Href {
686
- const selfhref = this.selflink.href;
687
- selfhref.method = HTTP_METHODS.POST;
688
-
689
- selfhref.parameters = this.parameters.filter(
690
- (parameter) => parameter.name !== "commit",
691
- );
692
-
693
- return selfhref;
694
- }
695
-
696
- /**
697
- */
698
- selfhrefWithCommitParam(): Href {
699
- const selfhref = this.selfhrefNoCommitParam();
700
-
701
- if (this.expectsEndResultFormObjects && !this.isComplete && !this.commit) {
702
- selfhref.addParameter("commit", "false");
703
- }
704
-
705
- return selfhref;
706
- }
707
-
708
- /**
709
- * Create a selfhref including the parameters that are used to start this form
710
- */
711
- get selfhref(): Href {
712
- if (!this.selflink) {
713
- throw new Error("No self link found for form");
714
- }
715
-
716
- if (getSetting("ALWAYS_COMMIT_FORM")) {
717
- return this.selfhrefNoCommitParam();
718
- }
719
-
720
- return this.selfhrefWithCommitParam();
721
- }
722
-
723
- /**
724
- * Handle form tokens to indicate concurrent form use
725
- */
726
- get tokens(): Array<string> {
727
- if (!this._tokens) {
728
- this._tokens = this.data.tokens ?? [];
729
- }
730
- return this._tokens;
731
- }
732
-
733
- /**
734
- * Replaces all tokens with the given collection of tokens
735
- */
736
- set tokens(tokens: Array<string>) {
737
- this._tokens = tokens;
738
- }
739
-
740
- /**
741
- * Removes all tokens from the form
742
- */
743
- removeTokens() {
744
- this._tokens = [];
745
- }
746
-
747
- /**
748
- * Keep track of changed form
749
- */
750
- isChanged(): boolean {
751
- return (
752
- this.currentFormObject !== null &&
753
- this.currentFormObject.isChangedSince(this.lastUpdate)
754
- );
755
- }
756
-
757
- /**
758
- */
759
- get lastUpdate(): number {
760
- return this._lastUpdate;
761
- }
762
-
763
- /**
764
- */
765
- set lastUpdate(lastUpdate: number) {
766
- this._lastUpdate = lastUpdate;
767
- }
768
-
769
- /**
770
- */
771
- getFormDataObjects(
772
- validOnly: boolean = true,
773
- validationData: boolean = false,
774
- ): Array<Object> {
775
- const formdata = [];
776
-
777
- const formObjects = this.allObjects.filter((formObject, index) => {
778
- // repeatabe object without fixed nr of repeats, remove last form object from formdata,
779
- // because this is the formobject that is used as a placeholder for the create object
780
- // of the collection of repeats
781
- if (formObject.isRepeatable && !formObject.hasFixedNrOfRepeats) {
782
- const isLastRepeat =
783
- index === this.allObjects.length - 1 ||
784
- this.allObjects[index + 1].key !== formObject.key;
785
-
786
- if (isLastRepeat) {
787
- return false;
788
- }
789
- }
790
-
791
- return formObject.isValid || !validOnly;
792
- });
793
-
794
- formObjects.forEach((formObject) => {
795
- const objectFormData = formObject.getFormData(validationData);
796
-
797
- const existingObjectIndex = formdata.findIndex(
798
- (obj) =>
799
- obj.key === formObject.key &&
800
- obj.repeatIndex === formObject.repeatIndex,
801
- );
802
-
803
- /*
804
- * when the object already exists in the formdata with the same key and index,
805
- * merge the attributes of both objects together
806
- */
807
- if (existingObjectIndex > -1) {
808
- formdata[existingObjectIndex].formdata = deepmerge(
809
- formdata[existingObjectIndex].formdata,
810
- objectFormData,
811
- );
812
- } else {
813
- formdata.push({
814
- key: formObject.key,
815
- repeatIndex: formObject.repeatIndex,
816
- formdata: objectFormData,
817
- });
818
- }
819
- });
820
-
821
- return formdata.map((obj) => ({ [obj.key]: obj.formdata }));
822
- }
823
-
824
- /**
825
- */
826
- getFormData(
827
- validOnly: boolean = true,
828
- withConcurrencyToken: boolean = true,
829
- validationData: boolean = false,
830
- ): string {
831
- if (withConcurrencyToken && this.tokens.length > 0) {
832
- return JSON.stringify({
833
- objects: this.getFormDataObjects(validOnly, validationData),
834
- tokens: this.tokens,
835
- });
836
- }
837
-
838
- return JSON.stringify({
839
- objects: this.getFormDataObjects(validOnly, validationData),
840
- });
841
- }
842
-
843
- /**
844
- * Used to programmatically overwrite the setting USE_CLIENTSIDE_VALIDATION
845
- */
846
- setUseClientsideValidation(enabled: boolean) {
847
- this._useClientsideValidation = enabled;
848
-
849
- this.allObjects.forEach((formObject) => {
850
- formObject.attributeCollection.all.forEach((item: AttributeType) =>
851
- item.setUseClientsideValidation(enabled),
852
- );
853
- });
854
- }
855
-
856
- /**
857
- * Indicates if client side validation is enabled
858
- * @returns {boolean}
859
- */
860
- useClientsideValidation(): boolean {
861
- return this._useClientsideValidation ?? true;
862
- }
863
-
864
- /**
865
- * Get form data for submitting
866
- */
867
- get formdata(): string {
868
- return this.getFormData(this.useClientsideValidation());
869
- }
870
-
871
- /**
872
- */
873
- get validationData(): string {
874
- return this.getFormData(false, false, true);
875
- }
876
-
877
- /**
878
- * Form navigation: Go one object back (previous button)
879
- */
880
- get hasPreviousStep(): boolean {
881
- const currentFormObjectKey =
882
- this.currentFormObject != null ? this.currentFormObject.key : "";
883
-
884
- return (
885
- this.completedFormObjects.filter(
886
- (formObject) =>
887
- !formObject.isRepeatWithUnknownTotal ||
888
- formObject.key !== currentFormObjectKey,
889
- ).length > 0
890
- );
891
- }
892
-
893
- /**
894
- * Go one form-object back,
895
- * for repeating object this means go back
896
- * until we get at a form object that had
897
- * a different key than the current form object
898
- */
899
- setPreviousObject() {
900
- this.isComplete = false;
901
- this.isFinished = false;
902
- this.success = null;
903
-
904
- const oldCurrentFormObject = this.currentFormObject;
905
-
906
- if (this.currentFormObject !== null) {
907
- this.previouslyEnteredFormObjects = [
908
- this.currentFormObject,
909
- ...this.previouslyEnteredFormObjects,
910
- ];
911
- }
912
-
913
- this.currentFormObject =
914
- this.completedFormObjects[this.completedFormObjects.length - 1];
915
- this.completedFormObjects = this.completedFormObjects.slice(0, -1);
916
-
917
- const completedFormObjectKeys = this.completedFormObjects
918
- .map((formObject) => formObject.key)
919
- .filter((formObjectKey) => formObjectKey !== this.currentFormObject?.key);
920
-
921
- this.endResultFormObjects = this._endResultFormObjects.filter((endResult) =>
922
- completedFormObjectKeys.includes(endResult.key),
923
- );
924
- this.previousEndResultKeys = this.endResultFormObjects.map(
925
- (endResult) => endResult.key,
926
- );
927
-
928
- // while we are at the same repeating form object, go a step back
929
- if (
930
- this.currentFormObject &&
931
- this.currentFormObject.equals(
932
- oldCurrentFormObject,
933
- this.currentFormObject.hasFixedNrOfRepeats,
934
- )
935
- ) {
936
- this.setPreviousObject();
937
- }
938
- }
939
-
940
- /**
941
- * Form navigation: has next step or is last
942
- */
943
- get hasNextStep(): boolean {
944
- if (
945
- this.isComplete ||
946
- this.isFinished ||
947
- this.hasNoQuestionsConfigured ||
948
- !this.contributions.objects
949
- ) {
950
- return false;
951
- }
952
-
953
- // current object is a dynamic object
954
- if (this.currentFormObject && this.currentFormObject.isDynamic) {
955
- return true;
956
- }
957
-
958
- if (this.expectsEndResultFormObjects) {
959
- return true;
960
- }
961
-
962
- const currentObjectIndex = this.objectKeys.findIndex(
963
- (objectKey) => objectKey === this.currentFormObject?.key,
964
- );
965
- const isLastObject = this.objectKeys.length - 1 === currentObjectIndex;
966
-
967
- // current object is a repeating question but it is not the last one
968
- if (
969
- isLastObject &&
970
- this.currentFormObject &&
971
- this.currentFormObject.isRepeatable &&
972
- !this.currentFormObject.isLastRepeat
973
- ) {
974
- return true;
975
- }
976
-
977
- // current object is not repeatable and the last object
978
- if (isLastObject) {
979
- return false;
980
- }
981
-
982
- // can't determine if this is te last, render a next button
983
- return true;
984
- }
985
-
986
- /**
987
- * Merge existing form with new form
988
- */
989
- update(receivedForm: ModularUIModel): FormModel {
990
- if (receivedForm instanceof FormModel) {
991
- this.resetErrors();
992
-
993
- this.lastUpdate = Date.now();
994
- this.lastServerUpdate = receivedForm.lastServerUpdate;
995
-
996
- this.tokens = receivedForm.tokens;
997
-
998
- this.isComplete = receivedForm.isComplete;
999
- this.isFinished = receivedForm.isFinished;
1000
- this.success = receivedForm.success;
1001
-
1002
- const receivedFormData = receivedForm.data ?? {};
1003
- const hasMissing = has(receivedFormData, "missing");
1004
- const hasErrors = has(receivedFormData, "errors");
1005
-
1006
- if (!hasMissing && !hasErrors) {
1007
- this.handleFinished(receivedForm);
1008
- }
1009
-
1010
- if (hasErrors) {
1011
- this.handleErrors(receivedForm);
1012
- }
1013
-
1014
- if (hasMissing) {
1015
- this.handleMissing(receivedForm);
1016
- }
1017
- }
1018
-
1019
- return this;
1020
- }
1021
-
1022
- /**
1023
- * Updates the current form object with new information about the object,
1024
- * like for example a new dynamicschema. Used for autoupdate functionality that makes it possible
1025
- * to update the options of a next missing attribute in a form-tree iq question
1026
- */
1027
- updateCurrentFormObject(receivedForm: ModularUIModel) {
1028
- if (receivedForm instanceof FormModel) {
1029
- const receivedFormData = receivedForm.data ?? {};
1030
- const hasMissing = has(receivedFormData, "missing");
1031
- const hasErrors = has(receivedFormData, "errors");
1032
-
1033
- if (hasErrors) {
1034
- this.handleErrors(receivedForm);
1035
- }
1036
-
1037
- if (hasMissing) {
1038
- this.handleMissing(receivedForm);
1039
- }
1040
- }
1041
- }
1042
-
1043
- /**
1044
- */
1045
- updateValidations(data: any): FormModel {
1046
- if (this.currentFormObject) {
1047
- this.currentFormObject.updateValidations(data);
1048
- }
1049
-
1050
- return this;
1051
- }
1052
-
1053
- /**
1054
- * Retrieve success information from response
1055
- * @returns {{redirect: string, data: object}}
1056
- */
1057
- get success(): { redirect: string, data: Object } | null {
1058
- return this._success;
1059
- }
1060
-
1061
- /**
1062
- * Set success information, contains redirect and event data
1063
- * @param success
1064
- */
1065
- set success(success: { redirect: string, data: Object } | null) {
1066
- this._success = success;
1067
- }
1068
-
1069
- /**
1070
- */
1071
- createSuccess() {
1072
- this._success = this.data.success;
1073
- }
1074
-
1075
- /**
1076
- * Process finished form
1077
- */
1078
- handleFinished(receivedForm: FormModel) {
1079
- if (this.currentFormObject) {
1080
- this.completedFormObjects = [
1081
- ...this.completedFormObjects,
1082
- this.currentFormObject,
1083
- ];
1084
- }
1085
-
1086
- this.currentFormObject = receivedForm.currentFormObject;
1087
- this.endResultFormObjects = receivedForm.endResultFormObjects;
1088
-
1089
- this._data = receivedForm._data;
1090
- }
1091
-
1092
- /**
1093
- */
1094
- handleRootErrors(errors: Array<Object>) {
1095
- errors
1096
- .filter((error) => !error.anchor)
1097
- .forEach((error) => {
1098
- this.errorCollection.addServerError(
1099
- error.id,
1100
- error.message,
1101
- error.properties,
1102
- error.layouthint,
1103
- );
1104
- });
1105
- }
1106
-
1107
- /**
1108
- * Process errors from received form
1109
- */
1110
- handleErrors(receivedForm: FormModel) {
1111
- const errorAnchors = receivedForm.data.errors;
1112
- if (errorAnchors) {
1113
- errorAnchors.forEach((error) => {
1114
- if (
1115
- error.anchor &&
1116
- this.currentFormObject &&
1117
- this.currentFormObject.key === error.anchor.objectid
1118
- ) {
1119
- this.currentFormObject.addServerError(error);
1120
- } else {
1121
- this.errorCollection.addServerError(
1122
- error.id,
1123
- error.message,
1124
- error.properties,
1125
- new LayoutHintCollection(error.layouthint),
1126
- );
1127
- }
1128
- });
1129
- }
1130
- }
1131
-
1132
- /**
1133
- * Process missing from received form
1134
- */
1135
- handleMissing(receivedForm: FormModel) {
1136
- if (
1137
- this.currentFormObject &&
1138
- this.currentFormObject.equals(receivedForm.currentFormObject)
1139
- ) {
1140
- this.handleMissingErrors(receivedForm);
1141
- } else {
1142
- this.handleNewFormObject(receivedForm);
1143
- }
1144
- }
1145
-
1146
- /**
1147
- * Received missing anchors in the response with an object id that is the current form object
1148
- */
1149
- processMissingErrors(receivedForm: FormModel): FormObjectModel | null {
1150
- if (this.currentFormObject === null) {
1151
- return null;
1152
- }
1153
-
1154
- this.currentFormObject.attributeCollection.map((attribute) => {
1155
- const receivedAttribute =
1156
- receivedForm.currentFormObject?.getAttributeByKey(attribute.key);
1157
- if (receivedAttribute) {
1158
- attribute.addMissingError(receivedAttribute);
1159
- } else {
1160
- attribute.removeMissingError();
1161
- }
1162
-
1163
- return attribute;
1164
- });
1165
-
1166
- return this.currentFormObject;
1167
- }
1168
-
1169
- /**
1170
- */
1171
- handleMissingErrors(receivedForm: FormModel) {
1172
- this.currentFormObject = this.processMissingErrors(receivedForm);
1173
- }
1174
-
1175
- /**
1176
- */
1177
- handleNewFormObject(receivedForm: FormModel) {
1178
- this.endResultFormObjects = receivedForm.endResultFormObjects;
1179
-
1180
- const receivedCurrentFormObject = receivedForm.currentFormObject;
1181
-
1182
- if (receivedCurrentFormObject === null) {
1183
- this.completedFormObjects = [...this.allObjects];
1184
- this.currentFormObject = null;
1185
- } else {
1186
- // check if received form exists in the previously entered form objects
1187
- const previouslyEnteredFormObjects =
1188
- this.previouslyEnteredFormObjects.filter((formObject) =>
1189
- formObject.equals(
1190
- receivedCurrentFormObject,
1191
- formObject.hasFixedNrOfRepeats,
1192
- ),
1193
- );
1194
-
1195
- if (previouslyEnteredFormObjects.length > 0) {
1196
- this.handlePreviouslyEnteredFormObjects(
1197
- receivedCurrentFormObject,
1198
- previouslyEnteredFormObjects,
1199
- );
1200
- } else {
1201
- this.completedFormObjects = [...this.allObjects];
1202
- this.currentFormObject = receivedCurrentFormObject;
1203
- }
1204
- }
1205
- }
1206
-
1207
- /**
1208
- * Indicate if a new form object model should be merged with a previousled entered form object model
1209
- * Set this property to false on the form that receives the new form to skip the merge behavior
1210
- */
1211
- get mergePreviouslyEnteredObjects(): boolean {
1212
- return this._mergePreviouslyEnteredObjects;
1213
- }
1214
-
1215
- /**
1216
- */
1217
- set mergePreviouslyEnteredObjects(mergePreviouslyEnteredObjects: boolean) {
1218
- this._mergePreviouslyEnteredObjects = mergePreviouslyEnteredObjects;
1219
- }
1220
-
1221
- /**
1222
- */
1223
- handlePreviouslyEnteredFormObjects(
1224
- receivedCurrentFormObject: FormObjectModel,
1225
- previouslyEnteredFormObjects: Array<FormObjectModel>,
1226
- ) {
1227
- previouslyEnteredFormObjects.forEach((previouslyEnteredFormObject) => {
1228
- const mergedObject = this.mergePreviouslyEnteredObjects
1229
- ? this.mergeObjects(
1230
- receivedCurrentFormObject,
1231
- previouslyEnteredFormObject,
1232
- )
1233
- : receivedCurrentFormObject;
1234
-
1235
- this.addFormObject(mergedObject);
1236
- });
1237
-
1238
- // remove the previously entered form object
1239
- this.previouslyEnteredFormObjects =
1240
- this.previouslyEnteredFormObjects.filter((formObject) => {
1241
- const hasPreviouslyEnteredObject = previouslyEnteredFormObjects.find(
1242
- (previouslyEnteredFormObject) =>
1243
- formObject.equals(previouslyEnteredFormObject),
1244
- );
1245
-
1246
- return !hasPreviouslyEnteredObject;
1247
- });
1248
- }
1249
-
1250
- /**
1251
- */
1252
- mergeObjects(
1253
- newObject: FormObjectModel,
1254
- oldObject: FormObjectModel,
1255
- ): FormObjectModel {
1256
- const mergedFormObject = FormObjectModel.createEmpty(newObject);
1257
-
1258
- mergedFormObject.mergeObject(oldObject);
1259
-
1260
- return mergedFormObject;
1261
- }
1262
-
1263
- /**
1264
- */
1265
- findAttribute(findMethod: Function): AttributeType | null {
1266
- let foundAttribute = null;
1267
-
1268
- this.allObjects.forEach((formObject) => {
1269
- if (foundAttribute === null) {
1270
- foundAttribute =
1271
- formObject.attributeCollection.all.find((item) => findMethod(item)) ||
1272
- null;
1273
- }
1274
- });
1275
-
1276
- return foundAttribute;
1277
- }
1278
- }
1279
-
1280
- export default FormModel;