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