@beinformed/ui 1.65.13 → 1.65.14

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 (644) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/esm/hooks/useList.js.flow +4 -1
  3. package/esm/hooks/useList.js.map +1 -1
  4. package/lib/hooks/useList.js.map +1 -1
  5. package/package.json +1 -2
  6. package/src/builder/__tests__/LayoutHintConfig.json +0 -20
  7. package/src/builder/__tests__/mergeLayoutHintConfigurations.spec.js +0 -71
  8. package/src/builder/__tests__/subdir/LayoutHintConfig.json +0 -20
  9. package/src/builder/index.js +0 -2
  10. package/src/builder/mergeLayoutHintConfigurations.js +0 -62
  11. package/src/constants/Constants.js +0 -196
  12. package/src/constants/LayoutHintConfig.js +0 -186
  13. package/src/constants/LayoutHints.js +0 -134
  14. package/src/constants/Settings.js +0 -267
  15. package/src/constants/index.js +0 -4
  16. package/src/exceptions/ConfigurationException.js +0 -13
  17. package/src/exceptions/FetchException.js +0 -101
  18. package/src/exceptions/IllegalArgumentException.js +0 -12
  19. package/src/exceptions/IllegalReturnException.js +0 -11
  20. package/src/exceptions/IllegalStateException.js +0 -12
  21. package/src/exceptions/JsonParseException.js +0 -12
  22. package/src/exceptions/MissingPropertyException.js +0 -13
  23. package/src/exceptions/NetworkException.js +0 -20
  24. package/src/exceptions/NotAllowedUriException.js +0 -12
  25. package/src/exceptions/NotFoundException.js +0 -20
  26. package/src/exceptions/ServerRequestException.js +0 -12
  27. package/src/exceptions/ThemePropertyException.js +0 -12
  28. package/src/exceptions/TimeoutException.js +0 -13
  29. package/src/exceptions/UnauthorizedException.js +0 -26
  30. package/src/exceptions/UnsupportedOperationException.js +0 -12
  31. package/src/exceptions/index.js +0 -16
  32. package/src/hooks/__tests__/UseModularUIModel.spec.js +0 -194
  33. package/src/hooks/__tests__/useAuthentication.spec.js +0 -166
  34. package/src/hooks/__tests__/useForm.spec.js +0 -300
  35. package/src/hooks/__tests__/useI18n.spec.js +0 -30
  36. package/src/hooks/__tests__/useModal.spec.js +0 -67
  37. package/src/hooks/__tests__/useModelCatalog.spec.js +0 -180
  38. package/src/hooks/__tests__/useModels.spec.js +0 -138
  39. package/src/hooks/__tests__/useModularUIBasic.spec.js +0 -126
  40. package/src/hooks/__tests__/useNotification.spec.js +0 -47
  41. package/src/hooks/__tests__/usePreference.spec.js +0 -72
  42. package/src/hooks/__tests__/useProgressIndicator.spec.js +0 -67
  43. package/src/hooks/index.js +0 -21
  44. package/src/hooks/useAllFormsOnModel.js +0 -92
  45. package/src/hooks/useAuthentication.js +0 -113
  46. package/src/hooks/useContent.js +0 -48
  47. package/src/hooks/useDeepCompareEffect.js +0 -50
  48. package/src/hooks/useForm.js +0 -156
  49. package/src/hooks/useI18n.js +0 -46
  50. package/src/hooks/useList.js +0 -221
  51. package/src/hooks/useLookup.js +0 -82
  52. package/src/hooks/useModal.js +0 -46
  53. package/src/hooks/useModelCatalog.js +0 -256
  54. package/src/hooks/useModels.js +0 -50
  55. package/src/hooks/useModularUI.js +0 -79
  56. package/src/hooks/useModularUIBasic.js +0 -152
  57. package/src/hooks/useModularUIKey.js +0 -14
  58. package/src/hooks/useModularUIModel.js +0 -86
  59. package/src/hooks/useModularUIRequest.js +0 -25
  60. package/src/hooks/useNotification.js +0 -48
  61. package/src/hooks/usePanel.js +0 -79
  62. package/src/hooks/usePreference.js +0 -27
  63. package/src/hooks/useProgressIndicator.js +0 -50
  64. package/src/hooks/useRouter.js +0 -70
  65. package/src/hooks/useSearch.js +0 -31
  66. package/src/i18n/Locale.js +0 -157
  67. package/src/i18n/Locales.js +0 -171
  68. package/src/i18n/Message.js +0 -66
  69. package/src/i18n/__tests__/Locale.spec.js +0 -108
  70. package/src/i18n/__tests__/Locales.spec.js +0 -137
  71. package/src/i18n/index.js +0 -12
  72. package/src/i18n/languages.js +0 -207
  73. package/src/i18n/translations/beinformed_error_messages_en.nl.js +0 -98
  74. package/src/i18n/translations/beinformed_error_messages_nl.nl.js +0 -98
  75. package/src/i18n/types.js +0 -23
  76. package/src/i18n/withMessage.js +0 -47
  77. package/src/index.js +0 -7
  78. package/src/models/__tests__/resolveModel.spec.js +0 -34
  79. package/src/models/actions/ActionCollection.js +0 -100
  80. package/src/models/actions/ActionModel.js +0 -207
  81. package/src/models/actions/__mock__/action.js +0 -35
  82. package/src/models/actions/__tests__/ActionCollection.spec.js +0 -98
  83. package/src/models/actions/__tests__/ActionModel.spec.js +0 -75
  84. package/src/models/application/ApplicationModel.js +0 -168
  85. package/src/models/application/__mock__/application.js +0 -14
  86. package/src/models/application/__mock__/contributions.json +0 -312
  87. package/src/models/application/__mock__/data.json +0 -263
  88. package/src/models/application/__tests__/Application.spec.js +0 -99
  89. package/src/models/application/__tests__/webapp.json +0 -42
  90. package/src/models/application/__tests__/webappContributions.json +0 -43
  91. package/src/models/attributes/AttributeCollection.js +0 -306
  92. package/src/models/attributes/AttributeContent.js +0 -233
  93. package/src/models/attributes/AttributeDataHelper.js +0 -323
  94. package/src/models/attributes/AttributeModel.js +0 -1021
  95. package/src/models/attributes/AttributeSetModel.js +0 -117
  96. package/src/models/attributes/BooleanAttributeModel.js +0 -319
  97. package/src/models/attributes/CaptchaAttributeModel.js +0 -51
  98. package/src/models/attributes/ChoiceAttributeModel.js +0 -520
  99. package/src/models/attributes/ChoiceAttributeOptionCollection.js +0 -372
  100. package/src/models/attributes/ChoiceAttributeOptionModel.js +0 -415
  101. package/src/models/attributes/CompositeAttributeChildCollection.js +0 -254
  102. package/src/models/attributes/CompositeAttributeModel.js +0 -439
  103. package/src/models/attributes/DatetimeAttributeModel.js +0 -566
  104. package/src/models/attributes/HelptextAttributeModel.js +0 -54
  105. package/src/models/attributes/LabelAttributeModel.js +0 -36
  106. package/src/models/attributes/MemoAttributeModel.js +0 -43
  107. package/src/models/attributes/MoneyAttributeModel.js +0 -45
  108. package/src/models/attributes/NumberAttributeModel.js +0 -255
  109. package/src/models/attributes/PasswordAttributeModel.js +0 -245
  110. package/src/models/attributes/StringAttributeModel.js +0 -314
  111. package/src/models/attributes/UploadAttributeModel.js +0 -261
  112. package/src/models/attributes/XMLAttributeModel.js +0 -51
  113. package/src/models/attributes/__mock__/_ActionFieldsContributions.json +0 -12
  114. package/src/models/attributes/__mock__/_ActionFieldsData.json +0 -7
  115. package/src/models/attributes/__mock__/_FormCollectionContribution.json +0 -419
  116. package/src/models/attributes/__mock__/_FormCollectionData.json +0 -122
  117. package/src/models/attributes/__mock__/_InstrumentQuestionContributions.json +0 -178
  118. package/src/models/attributes/__mock__/_ListAttributeContributions.json +0 -82
  119. package/src/models/attributes/__mock__/_ListAttributeData.json +0 -70
  120. package/src/models/attributes/__mock__/_ListDetailContributions.json +0 -75
  121. package/src/models/attributes/__mock__/_ListDetailData.json +0 -38
  122. package/src/models/attributes/__mock__/_TreeFormAttributeContribution.json +0 -117
  123. package/src/models/attributes/__mock__/_TreeFormAttributeData.json +0 -27
  124. package/src/models/attributes/__mock__/form.contributions.json +0 -410
  125. package/src/models/attributes/__mock__/form.data.json +0 -113
  126. package/src/models/attributes/__mock__/form.js +0 -6
  127. package/src/models/attributes/__mock__/list.contributions.json +0 -110
  128. package/src/models/attributes/__mock__/list.data.json +0 -84
  129. package/src/models/attributes/__mock__/list.js +0 -6
  130. package/src/models/attributes/__tests__/AttributeCollection.spec.js +0 -160
  131. package/src/models/attributes/__tests__/AttributeCollectionComposite.spec.js +0 -146
  132. package/src/models/attributes/__tests__/AttributeContent.spec.js +0 -225
  133. package/src/models/attributes/__tests__/AttributeDataHelper.spec.js +0 -634
  134. package/src/models/attributes/__tests__/AttributeModel.spec.js +0 -274
  135. package/src/models/attributes/__tests__/AttributeSetModel.spec.js +0 -39
  136. package/src/models/attributes/__tests__/BooleanAttributeModel.spec.js +0 -107
  137. package/src/models/attributes/__tests__/CaptchaAttributeModel.spec.js +0 -13
  138. package/src/models/attributes/__tests__/ChoiceAttributeModel.spec.js +0 -750
  139. package/src/models/attributes/__tests__/ChoiceAttributeOptionCollection.spec.js +0 -507
  140. package/src/models/attributes/__tests__/ChoiceAttributeOptionModel.spec.js +0 -107
  141. package/src/models/attributes/__tests__/CompositeAttributeModel.spec.js +0 -467
  142. package/src/models/attributes/__tests__/DateAttributeModel.spec.js +0 -134
  143. package/src/models/attributes/__tests__/DatetimeAttributeModel.spec.js +0 -206
  144. package/src/models/attributes/__tests__/DatetimeAttributeModel_offset.spec.js +0 -345
  145. package/src/models/attributes/__tests__/HelptextAttributeModel.spec.js +0 -64
  146. package/src/models/attributes/__tests__/LabelAttributeModel.spec.js +0 -13
  147. package/src/models/attributes/__tests__/LookupAttributeModel.spec.js +0 -47
  148. package/src/models/attributes/__tests__/MemoAttributeModel.spec.js +0 -28
  149. package/src/models/attributes/__tests__/MoneyAttributeModel.spec.js +0 -22
  150. package/src/models/attributes/__tests__/NumberAttributeModel.spec.js +0 -67
  151. package/src/models/attributes/__tests__/PasswordAttributeModel.spec.js +0 -49
  152. package/src/models/attributes/__tests__/StringAttributeModel.spec.js +0 -125
  153. package/src/models/attributes/__tests__/TimeAttributeModel.spec.js +0 -57
  154. package/src/models/attributes/__tests__/TimestampModel.spec.js +0 -43
  155. package/src/models/attributes/__tests__/UploadAttributeModel.spec.js +0 -67
  156. package/src/models/attributes/__tests__/XMLAttributeModel.spec.js +0 -17
  157. package/src/models/attributes/__tests__/_createAttribute.spec.js +0 -106
  158. package/src/models/attributes/__tests__/createAttributeComposite.spec.js +0 -151
  159. package/src/models/attributes/__tests__/createAttributeDynamicSchema.spec.js +0 -134
  160. package/src/models/attributes/_createAttribute.js +0 -147
  161. package/src/models/attributes/input-constraints/BSNConstraint.js +0 -80
  162. package/src/models/attributes/input-constraints/ConstraintCollection.js +0 -65
  163. package/src/models/attributes/input-constraints/ConstraintModel.js +0 -76
  164. package/src/models/attributes/input-constraints/DateBoundaryConstraint.js +0 -240
  165. package/src/models/attributes/input-constraints/DateTimeDateFormatConstraint.js +0 -72
  166. package/src/models/attributes/input-constraints/DateTimeTimeFormatConstraint.js +0 -72
  167. package/src/models/attributes/input-constraints/DatetimeFormatConstraint.js +0 -132
  168. package/src/models/attributes/input-constraints/FileExtensionConstraint.js +0 -60
  169. package/src/models/attributes/input-constraints/FileSizeConstraint.js +0 -101
  170. package/src/models/attributes/input-constraints/IBANConstraint.js +0 -46
  171. package/src/models/attributes/input-constraints/MandatoryConstraint.js +0 -54
  172. package/src/models/attributes/input-constraints/MandatoryRangeConstraint.js +0 -84
  173. package/src/models/attributes/input-constraints/NumberBoundaryConstraint.js +0 -213
  174. package/src/models/attributes/input-constraints/NumberFormatConstraint.js +0 -153
  175. package/src/models/attributes/input-constraints/NumberGroupingConstraint.js +0 -140
  176. package/src/models/attributes/input-constraints/PasswordConfirmConstraint.js +0 -68
  177. package/src/models/attributes/input-constraints/PasswordLowerAndUpperCaseConstraint.js +0 -44
  178. package/src/models/attributes/input-constraints/PasswordMinNumericCharactersConstraint.js +0 -60
  179. package/src/models/attributes/input-constraints/PasswordMinSpecialCharactersConstraint.js +0 -60
  180. package/src/models/attributes/input-constraints/PasswordThreeConsecutiveCharactersNotAllowedConstraint.js +0 -72
  181. package/src/models/attributes/input-constraints/RangeConstraint.js +0 -161
  182. package/src/models/attributes/input-constraints/RegexConstraint.js +0 -72
  183. package/src/models/attributes/input-constraints/StringLengthConstraint.js +0 -179
  184. package/src/models/attributes/input-constraints/XMLConstraint.js +0 -62
  185. package/src/models/attributes/input-constraints/__tests__/BSNConstraint.spec.js +0 -25
  186. package/src/models/attributes/input-constraints/__tests__/ConstraintCollection.spec.js +0 -9
  187. package/src/models/attributes/input-constraints/__tests__/ConstraintModel.spec.js +0 -35
  188. package/src/models/attributes/input-constraints/__tests__/DateBoundaryConstraint.spec.js +0 -117
  189. package/src/models/attributes/input-constraints/__tests__/DateTimeDateFormatConstraint.spec.js +0 -30
  190. package/src/models/attributes/input-constraints/__tests__/DateTimeTimeFormatConstraint.spec.js +0 -54
  191. package/src/models/attributes/input-constraints/__tests__/DatetimeFormatConstraint.spec.js +0 -79
  192. package/src/models/attributes/input-constraints/__tests__/FileExtensionConstraint.spec.js +0 -20
  193. package/src/models/attributes/input-constraints/__tests__/FileSizeConstraint.spec.js +0 -53
  194. package/src/models/attributes/input-constraints/__tests__/IBANConstraint.spec.js +0 -12
  195. package/src/models/attributes/input-constraints/__tests__/MandatoryConstraint.spec.js +0 -14
  196. package/src/models/attributes/input-constraints/__tests__/NumberBoundaryConstraint.spec.js +0 -46
  197. package/src/models/attributes/input-constraints/__tests__/NumberFormatConstraint.spec.js +0 -137
  198. package/src/models/attributes/input-constraints/__tests__/NumberGroupingConstraint.spec.js +0 -85
  199. package/src/models/attributes/input-constraints/__tests__/PasswordConfirmConstraint.spec.js +0 -21
  200. package/src/models/attributes/input-constraints/__tests__/PasswordLowerAndUpperCaseConstraint.spec.js +0 -14
  201. package/src/models/attributes/input-constraints/__tests__/PasswordMinNumericCharactersConstraint.spec.js +0 -11
  202. package/src/models/attributes/input-constraints/__tests__/PasswordMinSpecialCharactersConstraint.spec.js +0 -11
  203. package/src/models/attributes/input-constraints/__tests__/PasswordThreeConsecutiveCharactersNotAllowedConstraint.spec.js +0 -22
  204. package/src/models/attributes/input-constraints/__tests__/RegexConstraint.spec.js +0 -42
  205. package/src/models/attributes/input-constraints/__tests__/StringLengthConstraint.spec.js +0 -102
  206. package/src/models/attributes/input-constraints/__tests__/XMLConstraint.spec.js +0 -15
  207. package/src/models/attributes/layouthint-rules/BaseLayoutHintRule.js +0 -74
  208. package/src/models/attributes/layouthint-rules/DependentAttribute.js +0 -246
  209. package/src/models/attributes/layouthint-rules/LayoutHintRuleCollection.js +0 -101
  210. package/src/models/attributes/layouthint-rules/RemainingTotalUploadSize.js +0 -67
  211. package/src/models/attributes/layouthint-rules/__mock__/MockedCollectionFactory.js +0 -54
  212. package/src/models/attributes/layouthint-rules/__tests__/BaseLayoutHintRule.spec.js +0 -29
  213. package/src/models/attributes/layouthint-rules/__tests__/DependentAttribute.spec.js +0 -310
  214. package/src/models/attributes/layouthint-rules/__tests__/LayoutHintRuleCollection.spec.js +0 -58
  215. package/src/models/attributes/layouthint-rules/__tests__/RemainingTotalUploadSize.spec.js +0 -24
  216. package/src/models/base/BaseCollection.js +0 -191
  217. package/src/models/base/BaseModel.js +0 -155
  218. package/src/models/base/ResourceCollection.js +0 -42
  219. package/src/models/base/ResourceModel.js +0 -246
  220. package/src/models/base/__tests__/BaseCollection.spec.js +0 -108
  221. package/src/models/base/__tests__/BaseModel.spec.js +0 -85
  222. package/src/models/base/__tests__/ResourceCollection.spec.js +0 -51
  223. package/src/models/base/__tests__/ResourceModel.spec.js +0 -100
  224. package/src/models/base/__tests__/webapp.json +0 -52
  225. package/src/models/caseview/CaseViewModel.js +0 -188
  226. package/src/models/caseview/__mock__/caseview.js +0 -14
  227. package/src/models/caseview/__mock__/contributions.json +0 -146
  228. package/src/models/caseview/__mock__/data.json +0 -21
  229. package/src/models/caseview/__tests__/CaseViewModel.spec.js +0 -132
  230. package/src/models/caseview/__tests__/caseview.json +0 -49
  231. package/src/models/caseview/__tests__/caseviewContributions.json +0 -118
  232. package/src/models/caseview/__tests__/caseview_local_taskgroup.json +0 -57
  233. package/src/models/concepts/BusinessScenarioModel.js +0 -176
  234. package/src/models/concepts/ConceptDetailModel.js +0 -349
  235. package/src/models/concepts/ConceptIndexModel.js +0 -186
  236. package/src/models/concepts/ConceptLinkModel.js +0 -208
  237. package/src/models/concepts/ConceptRelationCollection.js +0 -95
  238. package/src/models/concepts/ConceptRelationModel.js +0 -129
  239. package/src/models/concepts/ConceptTypeDetailModel.js +0 -128
  240. package/src/models/concepts/SourceReferenceCollection.js +0 -40
  241. package/src/models/concepts/SourceReferenceModel.js +0 -126
  242. package/src/models/concepts/__mock__/business_scenario.js +0 -26
  243. package/src/models/concepts/__mock__/business_scenario_data.json +0 -234
  244. package/src/models/concepts/__mock__/business_scenario_step.json +0 -64
  245. package/src/models/concepts/__mock__/conceptdetail.js +0 -27
  246. package/src/models/concepts/__mock__/conceptdetail_contributions.json +0 -156
  247. package/src/models/concepts/__mock__/conceptdetail_data.json +0 -164
  248. package/src/models/concepts/__mock__/conceptindex.js +0 -15
  249. package/src/models/concepts/__mock__/conceptindex_contributions.json +0 -86
  250. package/src/models/concepts/__mock__/conceptindex_data.json +0 -329
  251. package/src/models/concepts/__mock__/concepttype.js +0 -13
  252. package/src/models/concepts/__mock__/concepttype_Calculation.json +0 -75
  253. package/src/models/concepts/__mock__/concepttype_contributions.json +0 -139
  254. package/src/models/concepts/__mock__/concepttype_data.json +0 -32
  255. package/src/models/concepts/__mock__/concepttype_hierarchy.js +0 -13
  256. package/src/models/concepts/__mock__/concepttype_hierarchy.json +0 -32
  257. package/src/models/concepts/__mock__/related_concepts.js +0 -12
  258. package/src/models/concepts/__mock__/related_concepts_contributions.json +0 -41
  259. package/src/models/concepts/__mock__/related_concepts_data.json +0 -2408
  260. package/src/models/concepts/__mock__/relation_with_props_and_tf_data.js +0 -27
  261. package/src/models/concepts/__mock__/relation_with_props_and_tf_data.json +0 -67
  262. package/src/models/concepts/__tests__/BusinessScenarioModel.spec.js +0 -28
  263. package/src/models/concepts/__tests__/ConceptDetailModel.spec.js +0 -65
  264. package/src/models/concepts/__tests__/ConceptIndexModel.spec.js +0 -42
  265. package/src/models/concepts/__tests__/ConceptLinkModel.spec.js +0 -9
  266. package/src/models/concepts/__tests__/ConceptRelationCollection.spec.js +0 -9
  267. package/src/models/concepts/__tests__/ConceptRelationModel.spec.js +0 -53
  268. package/src/models/concepts/__tests__/ConceptTypeDetailModel.spec.js +0 -31
  269. package/src/models/concepts/__tests__/RelatedConcepts.spec.js +0 -58
  270. package/src/models/concepts/__tests__/SourceReferenceCollection.spec.js +0 -9
  271. package/src/models/concepts/__tests__/SourceReferenceModel.spec.js +0 -108
  272. package/src/models/content/ContentIndexModel.js +0 -165
  273. package/src/models/content/ContentLinkModel.js +0 -308
  274. package/src/models/content/ContentModel.js +0 -227
  275. package/src/models/content/ContentTOCModel.js +0 -237
  276. package/src/models/content/ContentTypeModel.js +0 -71
  277. package/src/models/content/SectionModel.js +0 -236
  278. package/src/models/content/SubSectionModel.js +0 -181
  279. package/src/models/content/__tests__/ContentIndexModel.spec.js +0 -40
  280. package/src/models/content/__tests__/ContentLinkModel.spec.js +0 -129
  281. package/src/models/content/__tests__/ContentModel.spec.js +0 -241
  282. package/src/models/content/__tests__/Formalsource.spec.js +0 -133
  283. package/src/models/content/__tests__/content-index-contributions.json +0 -50
  284. package/src/models/content/__tests__/content-index.json +0 -164
  285. package/src/models/content/__tests__/content-with-childsections.json +0 -105
  286. package/src/models/content/__tests__/content-with-sections.json +0 -105
  287. package/src/models/content/__tests__/content-with-subsections.json +0 -119
  288. package/src/models/content/__tests__/content-with-subsections2.json +0 -79
  289. package/src/models/content/__tests__/content.json +0 -31
  290. package/src/models/content/__tests__/contributions.json +0 -84
  291. package/src/models/content/__tests__/formalsource-complete.json +0 -235
  292. package/src/models/content/__tests__/formalsource-contributions.json +0 -110
  293. package/src/models/content/__tests__/formalsource-section-contributions.json +0 -84
  294. package/src/models/content/__tests__/formalsource-section.json +0 -60
  295. package/src/models/content/__tests__/formalsource-toc.json +0 -122
  296. package/src/models/contentconfiguration/ContentConfiguration.js +0 -70
  297. package/src/models/contentconfiguration/ContentConfigurationElements.js +0 -152
  298. package/src/models/contentconfiguration/ContentConfigurationEndResults.js +0 -45
  299. package/src/models/contentconfiguration/ContentConfigurationQuestions.js +0 -60
  300. package/src/models/contentconfiguration/ContentConfigurationResults.js +0 -105
  301. package/src/models/contentconfiguration/__tests__/ContentConfigurationElements.spec.js +0 -29
  302. package/src/models/contentconfiguration/__tests__/ContentConfigurationResults.spec.js +0 -101
  303. package/src/models/detail/DetailModel.js +0 -241
  304. package/src/models/detail/__tests__/DetailModel.spec.js +0 -41
  305. package/src/models/detail/__tests__/detail.json +0 -37
  306. package/src/models/detail/__tests__/detailContributions.json +0 -124
  307. package/src/models/error/ErrorCollection.js +0 -127
  308. package/src/models/error/ErrorModel.js +0 -83
  309. package/src/models/error/ErrorResponse.js +0 -343
  310. package/src/models/error/__tests__/ErrorCollection.spec.js +0 -41
  311. package/src/models/error/__tests__/ErrorModel.spec.js +0 -24
  312. package/src/models/filters/AssignmentFilterModel.js +0 -218
  313. package/src/models/filters/BaseFilterModel.js +0 -146
  314. package/src/models/filters/ConceptIndexFilterModel.js +0 -43
  315. package/src/models/filters/FilterCollection.js +0 -227
  316. package/src/models/filters/FilterModel.js +0 -151
  317. package/src/models/filters/RangeFilterModel.js +0 -36
  318. package/src/models/filters/StringFilterModel.js +0 -167
  319. package/src/models/filters/__tests__/AssignmentFilterModel.spec.js +0 -140
  320. package/src/models/filters/__tests__/FilterCollection.spec.js +0 -68
  321. package/src/models/filters/__tests__/FilterModel.spec.js +0 -65
  322. package/src/models/filters/__tests__/RangeFilterModel.spec.js +0 -55
  323. package/src/models/filters/__tests__/ZipcodeFilter.spec.js +0 -145
  324. package/src/models/filters/__tests__/filters.json +0 -91
  325. package/src/models/filters/__tests__/filtersContributions.json +0 -110
  326. package/src/models/form/FormModel.js +0 -1280
  327. package/src/models/form/FormObjectModel.js +0 -590
  328. package/src/models/form/__mock__/contributions.json +0 -525
  329. package/src/models/form/__mock__/data.json +0 -78
  330. package/src/models/form/__mock__/form.js +0 -17
  331. package/src/models/form/__tests__/FormContributions.json +0 -495
  332. package/src/models/form/__tests__/FormContributionsUnknownRepeat.json +0 -67
  333. package/src/models/form/__tests__/FormInstrumentContributions.json +0 -183
  334. package/src/models/form/__tests__/FormModel.getters.spec.js +0 -149
  335. package/src/models/form/__tests__/FormModel.instrument.spec.js +0 -202
  336. package/src/models/form/__tests__/FormModel.repeating.spec.js +0 -65
  337. package/src/models/form/__tests__/FormModel.selfhref.spec.js +0 -84
  338. package/src/models/form/__tests__/FormModel.spec.js +0 -752
  339. package/src/models/form/__tests__/FormModel.unknown-repeat.spec.js +0 -52
  340. package/src/models/form/__tests__/FormObjectModel.spec.js +0 -180
  341. package/src/models/form/__tests__/FormResultData.spec.js +0 -86
  342. package/src/models/form/__tests__/FormValidation.spec.js +0 -79
  343. package/src/models/form/__tests__/FormValidationContributions.json +0 -45
  344. package/src/models/form/__tests__/FormValidationDataInitial.json +0 -33
  345. package/src/models/form/__tests__/FormValidationDataUpdate1.json +0 -25
  346. package/src/models/form/__tests__/FormValidationDataUpdate2.json +0 -33
  347. package/src/models/form/__tests__/FormWithContent.spec.js +0 -71
  348. package/src/models/form/__tests__/FormWithContentContributions.json +0 -242
  349. package/src/models/form/__tests__/FormWithContentData.json +0 -244
  350. package/src/models/grouping/GroupingModel.js +0 -232
  351. package/src/models/grouping/__tests__/GroupingModel.spec.js +0 -80
  352. package/src/models/href/Href.js +0 -592
  353. package/src/models/href/ListHref.js +0 -161
  354. package/src/models/href/__tests__/Href.spec.js +0 -184
  355. package/src/models/href/__tests__/ListHref.spec.js +0 -61
  356. package/src/models/href/__tests__/list.json +0 -2417
  357. package/src/models/href/__tests__/listContributions.json +0 -330
  358. package/src/models/index.js +0 -177
  359. package/src/models/layouthint/LayoutHintCollection.js +0 -116
  360. package/src/models/layouthint/__tests__/LayoutHintCollection.spec.js +0 -89
  361. package/src/models/links/LinkCollection.js +0 -169
  362. package/src/models/links/LinkModel.js +0 -246
  363. package/src/models/links/__tests__/LinkCollection.spec.js +0 -426
  364. package/src/models/links/__tests__/LinkModel.spec.js +0 -103
  365. package/src/models/links/__tests__/normalizeLinkJSON.spec.js +0 -212
  366. package/src/models/links/normalizeLinkJSON.js +0 -121
  367. package/src/models/list/ListDetailModel.js +0 -332
  368. package/src/models/list/ListHeaderModel.js +0 -96
  369. package/src/models/list/ListItemCollection.js +0 -80
  370. package/src/models/list/ListItemModel.js +0 -111
  371. package/src/models/list/ListModel.js +0 -485
  372. package/src/models/list/__mock__/caselist.contributions.json +0 -372
  373. package/src/models/list/__mock__/caselist.data.json +0 -519
  374. package/src/models/list/__mock__/caselist.js +0 -14
  375. package/src/models/list/__tests__/ListDetailModel.hierarchy.spec.js +0 -88
  376. package/src/models/list/__tests__/ListDetailModel.spec.js +0 -96
  377. package/src/models/list/__tests__/ListItemCollection.spec.js +0 -22
  378. package/src/models/list/__tests__/ListModel.spec.js +0 -152
  379. package/src/models/list/__tests__/ListResultDetail.spec.js +0 -37
  380. package/src/models/list/__tests__/caselist-34.contributions.json +0 -146
  381. package/src/models/list/__tests__/caselist-34.data.json +0 -21
  382. package/src/models/list/__tests__/hierarchy.json +0 -185
  383. package/src/models/list/__tests__/hierarchyContributions.json +0 -582
  384. package/src/models/list/__tests__/instrument-detail-contributions.json +0 -761
  385. package/src/models/list/__tests__/instrument-detail-data.json +0 -66
  386. package/src/models/list/__tests__/list.json +0 -2426
  387. package/src/models/list/__tests__/listContributions.json +0 -349
  388. package/src/models/list/__tests__/related-contributions.json +0 -42
  389. package/src/models/list/__tests__/related-data.json +0 -32
  390. package/src/models/lookup/LookupOptionCollection.js +0 -54
  391. package/src/models/lookup/LookupOptionsModel.js +0 -81
  392. package/src/models/lookup/__tests__/LookupOptionCollection.spec.js +0 -80
  393. package/src/models/lookup/__tests__/LookupOptionsModel.spec.js +0 -82
  394. package/src/models/lookup/__tests__/_LookupOptionsContributions.json +0 -29
  395. package/src/models/lookup/__tests__/_LookupOptionsData.json +0 -34
  396. package/src/models/lookup/__tests__/_LookupOptionsListContributions.json +0 -129
  397. package/src/models/lookup/__tests__/_LookupOptionsListData.json +0 -134
  398. package/src/models/lookup/__tests__/_TaxonomyAttributeData.json +0 -42
  399. package/src/models/modelcatalog/ModelCatalogModel.js +0 -73
  400. package/src/models/modelcatalog/ModelCategoryCollection.js +0 -22
  401. package/src/models/modelcatalog/ModelCategoryModel.js +0 -63
  402. package/src/models/modelcatalog/__mock__/contributions.json +0 -6
  403. package/src/models/modelcatalog/__mock__/data.json +0 -29
  404. package/src/models/modelcatalog/__mock__/modelcatalog.js +0 -14
  405. package/src/models/modelcatalog/__tests__/ModelCatalogModel.spec.js +0 -49
  406. package/src/models/paging/PagesizeModel.js +0 -50
  407. package/src/models/paging/PagingModel.js +0 -105
  408. package/src/models/paging/__tests__/PageSizeModel.spec.js +0 -31
  409. package/src/models/paging/__tests__/PagingModel.spec.js +0 -40
  410. package/src/models/paging/__tests__/list.json +0 -8
  411. package/src/models/paging/__tests__/listContributions.json +0 -7
  412. package/src/models/panels/GroupingPanelModel.js +0 -164
  413. package/src/models/panels/__tests__/GroupingPanelModel.spec.js +0 -142
  414. package/src/models/panels/__tests__/groupingPanel.json +0 -49
  415. package/src/models/panels/__tests__/groupingPanelContributions.json +0 -59
  416. package/src/models/parameter/Parameter.js +0 -117
  417. package/src/models/parameter/__tests__/Parameter.spec.js +0 -125
  418. package/src/models/process/ProcessStatusSettingsModel.js +0 -88
  419. package/src/models/process/__tests__/ProcessStatusSettingsModel.spec.js +0 -52
  420. package/src/models/resolveModel.js +0 -92
  421. package/src/models/search/CaseSearchModel.js +0 -46
  422. package/src/models/search/__tests__/CaseSearchModel.spec.js +0 -10
  423. package/src/models/sorting/SortOptionModel.js +0 -114
  424. package/src/models/sorting/SortingModel.js +0 -140
  425. package/src/models/sorting/__tests__/SortingModel.spec.js +0 -96
  426. package/src/models/tab/TabModel.js +0 -160
  427. package/src/models/tab/__mock__/contributions.json +0 -77
  428. package/src/models/tab/__mock__/data.json +0 -20
  429. package/src/models/tab/__mock__/personContributions.json +0 -35
  430. package/src/models/tab/__mock__/personData.json +0 -21
  431. package/src/models/tab/__mock__/tab.js +0 -14
  432. package/src/models/tab/__mock__/tabPerson.js +0 -14
  433. package/src/models/tab/__tests__/TabModel.spec.js +0 -72
  434. package/src/models/tab/__tests__/tab.json +0 -37
  435. package/src/models/tab/__tests__/tabContributions.json +0 -39
  436. package/src/models/taskgroup/TaskGroupCollection.js +0 -16
  437. package/src/models/taskgroup/TaskGroupModel.js +0 -102
  438. package/src/models/taskgroup/__mock__/contributions.json +0 -18
  439. package/src/models/taskgroup/__mock__/data.json +0 -21
  440. package/src/models/taskgroup/__mock__/taskgroup.js +0 -14
  441. package/src/models/taskgroup/__tests__/TaskGroupModel.spec.js +0 -26
  442. package/src/models/taskgroup/__tests__/taskgroup.json +0 -25
  443. package/src/models/taskgroup/__tests__/taskgroupContributions.json +0 -23
  444. package/src/models/types.js +0 -291
  445. package/src/models/user/UserModel.js +0 -57
  446. package/src/models/user/UserProfileModel.js +0 -54
  447. package/src/models/user/UserServicesModel.js +0 -136
  448. package/src/models/user/__mock__/contributions.json +0 -148
  449. package/src/models/user/__mock__/data.json +0 -22
  450. package/src/models/user/__tests__/UserModel.spec.js +0 -43
  451. package/src/models/user/__tests__/UserProfileModel.spec.js +0 -45
  452. package/src/models/user/__tests__/UserServicesModel.spec.js +0 -55
  453. package/src/modularui/Authenticate.js +0 -217
  454. package/src/modularui/CaptchaRequest.js +0 -104
  455. package/src/modularui/ModularUIError.js +0 -25
  456. package/src/modularui/ModularUIRequest.js +0 -872
  457. package/src/modularui/ModularUIResponse.js +0 -160
  458. package/src/modularui/UploadRequest.js +0 -151
  459. package/src/modularui/__tests__/CustomContextPath.spec.js +0 -61
  460. package/src/modularui/__tests__/ModularUIError.spec.js +0 -22
  461. package/src/modularui/__tests__/ModularUIRequest.spec.js +0 -495
  462. package/src/modularui/__tests__/contributions.json +0 -312
  463. package/src/modularui/__tests__/data.json +0 -263
  464. package/src/modularui/index.js +0 -6
  465. package/src/modularui/types.js +0 -4
  466. package/src/react/ErrorBoundary.js +0 -61
  467. package/src/react/ErrorBoundaryFallback.js +0 -46
  468. package/src/react/index.js +0 -3
  469. package/src/react/utils.js +0 -33
  470. package/src/react-client/Init.js +0 -46
  471. package/src/react-client/client.js +0 -309
  472. package/src/react-client/contextPath.js +0 -30
  473. package/src/react-client/index.js +0 -4
  474. package/src/react-client/rehydrate.js +0 -94
  475. package/src/react-server/__tests__/htmlpage.spec.js +0 -75
  476. package/src/react-server/__tests__/requestInformation.spec.js +0 -266
  477. package/src/react-server/__tests__/serverUtil.spec.js +0 -183
  478. package/src/react-server/contextPath.js +0 -8
  479. package/src/react-server/createSSRComplete.js +0 -63
  480. package/src/react-server/htmlpage.js +0 -55
  481. package/src/react-server/index.js +0 -13
  482. package/src/react-server/renderSSRComplete.js +0 -111
  483. package/src/react-server/renderSSRMinimal.js +0 -54
  484. package/src/react-server/requestInformation.js +0 -68
  485. package/src/react-server/serverNoSSR.js +0 -87
  486. package/src/react-server/serverSSR.js +0 -70
  487. package/src/react-server/serverUtil.js +0 -279
  488. package/src/react-theme/ThemeProvider.js +0 -25
  489. package/src/react-theme/__tests__/ThemeProvider.spec.js +0 -84
  490. package/src/react-theme/__tests__/createTheme.spec.js +0 -172
  491. package/src/react-theme/createTheme.js +0 -118
  492. package/src/react-theme/index.js +0 -15
  493. package/src/react-theme/types.js +0 -16
  494. package/src/react-theme/useTheme.js +0 -13
  495. package/src/react-theme/utils/__tests__/background.spec.js +0 -30
  496. package/src/react-theme/utils/__tests__/colors.spec.js +0 -30
  497. package/src/react-theme/utils/__tests__/contrast.spec.js +0 -44
  498. package/src/react-theme/utils/__tests__/corners.spec.js +0 -27
  499. package/src/react-theme/utils/__tests__/spacers.spec.js +0 -44
  500. package/src/react-theme/utils/__tests__/themeProps.spec.js +0 -72
  501. package/src/react-theme/utils/background.js +0 -20
  502. package/src/react-theme/utils/colors.js +0 -47
  503. package/src/react-theme/utils/contrast.js +0 -117
  504. package/src/react-theme/utils/corners.js +0 -37
  505. package/src/react-theme/utils/spacers.js +0 -65
  506. package/src/react-theme/utils/themeProps.js +0 -90
  507. package/src/redux/_i18n/I18nActions.js +0 -38
  508. package/src/redux/_i18n/I18nReducer.js +0 -91
  509. package/src/redux/_i18n/__tests__/actions.spec.js +0 -37
  510. package/src/redux/_i18n/__tests__/reducer.spec.js +0 -29
  511. package/src/redux/_i18n/index.js +0 -6
  512. package/src/redux/_i18n/types.js +0 -20
  513. package/src/redux/_modularui/ModularUIActions.js +0 -227
  514. package/src/redux/_modularui/ModularUIConnector.js +0 -157
  515. package/src/redux/_modularui/ModularUIMiddleware.js +0 -182
  516. package/src/redux/_modularui/ModularUIReducer.js +0 -169
  517. package/src/redux/_modularui/ModularUISelectors.js +0 -322
  518. package/src/redux/_modularui/ModularUIUtils.js +0 -96
  519. package/src/redux/_modularui/__tests__/actions.spec.js +0 -159
  520. package/src/redux/_modularui/__tests__/reducer.spec.js +0 -134
  521. package/src/redux/_modularui/__tests__/selectors.spec.js +0 -153
  522. package/src/redux/_modularui/index.js +0 -11
  523. package/src/redux/_modularui/types.js +0 -121
  524. package/src/redux/_modularui/withModularUI.js +0 -85
  525. package/src/redux/_router/RouterActions.js +0 -75
  526. package/src/redux/_router/RouterConnectors.js +0 -97
  527. package/src/redux/_router/RouterMiddleware.js +0 -37
  528. package/src/redux/_router/RouterReducer.js +0 -21
  529. package/src/redux/_router/__tests__/actions.spec.js +0 -109
  530. package/src/redux/_router/__tests__/hooks.spec.js +0 -98
  531. package/src/redux/_router/__tests__/middleware.spec.js +0 -62
  532. package/src/redux/_router/__tests__/reducer.spec.js +0 -26
  533. package/src/redux/_router/index.js +0 -8
  534. package/src/redux/_router/types.js +0 -43
  535. package/src/redux/actions/Application.js +0 -45
  536. package/src/redux/actions/Authorization.js +0 -65
  537. package/src/redux/actions/Error.js +0 -95
  538. package/src/redux/actions/Form.js +0 -42
  539. package/src/redux/actions/FormAttributeSet.js +0 -98
  540. package/src/redux/actions/FormAttributeSetRepeatable.js +0 -45
  541. package/src/redux/actions/FormAutosave.js +0 -73
  542. package/src/redux/actions/FormAutosubmit.js +0 -43
  543. package/src/redux/actions/FormAutoupdate.js +0 -47
  544. package/src/redux/actions/FormValidations.js +0 -71
  545. package/src/redux/actions/Modals.js +0 -16
  546. package/src/redux/actions/ModelCatalog.js +0 -12
  547. package/src/redux/actions/Notification.js +0 -101
  548. package/src/redux/actions/Preferences.js +0 -173
  549. package/src/redux/actions/ProgressIndicator.js +0 -39
  550. package/src/redux/actions/SignIn.js +0 -102
  551. package/src/redux/actions/SignOut.js +0 -29
  552. package/src/redux/actions/__tests__/Application.spec.js +0 -52
  553. package/src/redux/actions/__tests__/Authorization.spec.js +0 -121
  554. package/src/redux/actions/__tests__/CustomErrorResponseHandler.spec.js +0 -72
  555. package/src/redux/actions/__tests__/Error-server.spec.js +0 -134
  556. package/src/redux/actions/__tests__/Error.spec.js +0 -116
  557. package/src/redux/actions/__tests__/Form.spec.js +0 -39
  558. package/src/redux/actions/__tests__/Modals.spec.js +0 -34
  559. package/src/redux/actions/__tests__/Notification.spec.js +0 -94
  560. package/src/redux/actions/__tests__/Preferences.spec.js +0 -71
  561. package/src/redux/actions/__tests__/ProgressIndicator.spec.js +0 -53
  562. package/src/redux/actions/index.js +0 -17
  563. package/src/redux/connectors/Application.js +0 -14
  564. package/src/redux/connectors/Breadcrumb.js +0 -28
  565. package/src/redux/connectors/CaseView.js +0 -14
  566. package/src/redux/connectors/ConceptDetail.js +0 -12
  567. package/src/redux/connectors/ContentBrowser.js +0 -14
  568. package/src/redux/connectors/ContentDetail.js +0 -13
  569. package/src/redux/connectors/ContentDetailSection.js +0 -17
  570. package/src/redux/connectors/Form.js +0 -83
  571. package/src/redux/connectors/FormAttributeSet.js +0 -85
  572. package/src/redux/connectors/ListDetail.js +0 -16
  573. package/src/redux/connectors/Modal.js +0 -47
  574. package/src/redux/connectors/ModelCatalog.js +0 -14
  575. package/src/redux/connectors/Notification.js +0 -47
  576. package/src/redux/connectors/PanelRenderer.js +0 -29
  577. package/src/redux/connectors/Preferences.js +0 -53
  578. package/src/redux/connectors/Progress.js +0 -35
  579. package/src/redux/connectors/ProgressIndicator.js +0 -35
  580. package/src/redux/connectors/QuickSearch.js +0 -36
  581. package/src/redux/connectors/SignIn.js +0 -47
  582. package/src/redux/connectors/SignOut.js +0 -38
  583. package/src/redux/connectors/Tab.js +0 -14
  584. package/src/redux/connectors/index.js +0 -22
  585. package/src/redux/index.js +0 -27
  586. package/src/redux/reducers/AuthReducer.js +0 -56
  587. package/src/redux/reducers/ErrorReducer.js +0 -22
  588. package/src/redux/reducers/ModalsReducer.js +0 -58
  589. package/src/redux/reducers/ModelCatalogReducer.js +0 -34
  590. package/src/redux/reducers/NotificationReducer.js +0 -45
  591. package/src/redux/reducers/PreferencesReducer.js +0 -31
  592. package/src/redux/reducers/ProgressIndicatorReducer.js +0 -60
  593. package/src/redux/reducers/__tests__/AuthReducer.spec.js +0 -95
  594. package/src/redux/reducers/__tests__/ErrorReducer.spec.js +0 -17
  595. package/src/redux/reducers/__tests__/ModalsReducer.spec.js +0 -34
  596. package/src/redux/reducers/__tests__/ModelCatalogReducer.spec.js +0 -23
  597. package/src/redux/reducers/__tests__/NotificationReducer.spec.js +0 -53
  598. package/src/redux/reducers/__tests__/PreferencesReducer.spec.js +0 -31
  599. package/src/redux/reducers/__tests__/ProgressIndicatorReducer.spec.js +0 -82
  600. package/src/redux/reducers/createReducer.js +0 -55
  601. package/src/redux/reducers/index.js +0 -10
  602. package/src/redux/selectors/i18n.js +0 -15
  603. package/src/redux/selectors/index.js +0 -3
  604. package/src/redux/selectors/modelcatalog.js +0 -11
  605. package/src/redux/store/__tests__/beforeRenderHooks.spec.js +0 -13
  606. package/src/redux/store/beforeRenderHooks.js +0 -26
  607. package/src/redux/store/configureStore.js +0 -59
  608. package/src/redux/types.js +0 -241
  609. package/src/utils/browser/Cache.js +0 -157
  610. package/src/utils/browser/Cookies.js +0 -44
  611. package/src/utils/browser/__tests__/Cookies.spec.js +0 -51
  612. package/src/utils/datetime/DateTimeUtil.js +0 -858
  613. package/src/utils/datetime/__tests__/DateTime.spec.js +0 -873
  614. package/src/utils/datetime/__tests__/DateTimeFormat.spec.js +0 -146
  615. package/src/utils/fetch/__mocks__/applicationContributions.json +0 -323
  616. package/src/utils/fetch/__mocks__/applicationData.json +0 -216
  617. package/src/utils/fetch/__mocks__/formContributions.json +0 -527
  618. package/src/utils/fetch/__mocks__/formData.json +0 -21
  619. package/src/utils/fetch/__mocks__/universalFetch.js +0 -38
  620. package/src/utils/fetch/__tests__/xhr.spec.js +0 -281
  621. package/src/utils/fetch/serverFetch.js +0 -33
  622. package/src/utils/fetch/types.js +0 -46
  623. package/src/utils/fetch/universalFetch.js +0 -106
  624. package/src/utils/fetch/xhr.js +0 -409
  625. package/src/utils/helpers/__tests__/checkResource.spec.js +0 -60
  626. package/src/utils/helpers/__tests__/createHash.spec.js +0 -11
  627. package/src/utils/helpers/__tests__/createHref.spec.js +0 -39
  628. package/src/utils/helpers/__tests__/objects.spec.js +0 -50
  629. package/src/utils/helpers/__tests__/sanitizeHTML.spec.js +0 -69
  630. package/src/utils/helpers/checkResource.js +0 -43
  631. package/src/utils/helpers/createHash.js +0 -28
  632. package/src/utils/helpers/createHref.js +0 -117
  633. package/src/utils/helpers/createUUID.js +0 -13
  634. package/src/utils/helpers/index.js +0 -9
  635. package/src/utils/helpers/objects.js +0 -33
  636. package/src/utils/helpers/repositoryResource.js +0 -22
  637. package/src/utils/helpers/sanitizeHtml.js +0 -55
  638. package/src/utils/helpers/text.js +0 -23
  639. package/src/utils/index.js +0 -22
  640. package/src/utils/number/DecimalFormat.js +0 -410
  641. package/src/utils/number/__tests__/formatValue.spec.js +0 -36
  642. package/src/utils/number/__tests__/parseNumbers.spec.js +0 -50
  643. package/src/utils/number/formatValue.js +0 -60
  644. 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;