@beinformed/ui 1.18.4 → 1.18.7-beta.0

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 (234) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/esm/hooks/useAuthentication.js +7 -50
  3. package/esm/hooks/useAuthentication.js.map +1 -1
  4. package/esm/i18n/Locales.js.map +1 -1
  5. package/esm/models/concepts/ConceptDetailModel.js.map +1 -1
  6. package/esm/models/form/FormModel.js.map +1 -1
  7. package/esm/models/layouthint/LayoutHintCollection.js.map +1 -1
  8. package/esm/models/tab/TabModel.js.map +1 -1
  9. package/esm/modularui/Authenticate.js +2 -1
  10. package/esm/modularui/Authenticate.js.map +1 -1
  11. package/esm/redux/actions/SignOut.js +6 -2
  12. package/esm/redux/actions/SignOut.js.map +1 -1
  13. package/esm/redux/connectors/SignIn.js +3 -2
  14. package/esm/redux/connectors/SignIn.js.map +1 -1
  15. package/esm/redux/connectors/SignOut.js +4 -1
  16. package/esm/redux/connectors/SignOut.js.map +1 -1
  17. package/esm/redux/reducers/AuthReducer.js +0 -10
  18. package/esm/redux/reducers/AuthReducer.js.map +1 -1
  19. package/esm/redux/types.js.map +1 -1
  20. package/esm/utils/helpers/checkResource.js +2 -0
  21. package/esm/utils/helpers/checkResource.js.map +1 -1
  22. package/lib/constants/LayoutHints.js.map +1 -1
  23. package/lib/constants/Settings.js.map +1 -1
  24. package/lib/exceptions/FetchException.js.map +1 -1
  25. package/lib/hooks/__tests__/UseModularUIModel.spec.js.flow +1 -1
  26. package/lib/hooks/__tests__/useAuthentication.spec.js.flow +16 -2
  27. package/lib/hooks/__tests__/useForm.spec.js.flow +1 -1
  28. package/lib/hooks/__tests__/useModal.spec.js.flow +1 -1
  29. package/lib/hooks/__tests__/useModelCatalog.spec.js.flow +1 -1
  30. package/lib/hooks/__tests__/useModels.spec.js.flow +1 -1
  31. package/lib/hooks/__tests__/useModularUIBasic.spec.js.flow +1 -18
  32. package/lib/hooks/__tests__/useNotification.spec.js.flow +1 -1
  33. package/lib/hooks/__tests__/usePreference.spec.js.flow +1 -1
  34. package/lib/hooks/__tests__/useProgressIndicator.spec.js.flow +1 -1
  35. package/lib/hooks/useAllFormsOnModel.js.map +1 -1
  36. package/lib/hooks/useAuthentication.js +7 -55
  37. package/lib/hooks/useAuthentication.js.flow +4 -37
  38. package/lib/hooks/useAuthentication.js.map +1 -1
  39. package/lib/hooks/useContent.js.map +1 -1
  40. package/lib/hooks/useDeepCompareEffect.js.map +1 -1
  41. package/lib/hooks/useForm.js.map +1 -1
  42. package/lib/hooks/useI18n.js.map +1 -1
  43. package/lib/hooks/useModal.js.map +1 -1
  44. package/lib/hooks/useModelCatalog.js.map +1 -1
  45. package/lib/hooks/useModels.js.map +1 -1
  46. package/lib/hooks/useModularUI.js.map +1 -1
  47. package/lib/hooks/useModularUIBasic.js.map +1 -1
  48. package/lib/hooks/useModularUIModel.js.map +1 -1
  49. package/lib/hooks/useModularUIRequest.js.map +1 -1
  50. package/lib/hooks/useNotification.js.map +1 -1
  51. package/lib/hooks/usePreference.js.map +1 -1
  52. package/lib/hooks/useProgressIndicator.js.map +1 -1
  53. package/lib/hooks/useRouter.js.map +1 -1
  54. package/lib/i18n/Locale.js.map +1 -1
  55. package/lib/i18n/Locales.js.map +1 -1
  56. package/lib/i18n/Message.js.map +1 -1
  57. package/lib/i18n/withMessage.js.map +1 -1
  58. package/lib/models/actions/ActionModel.js.map +1 -1
  59. package/lib/models/application/ApplicationModel.js.map +1 -1
  60. package/lib/models/attributes/AttributeCollection.js.map +1 -1
  61. package/lib/models/attributes/AttributeContent.js.map +1 -1
  62. package/lib/models/attributes/AttributeDataHelper.js.map +1 -1
  63. package/lib/models/attributes/AttributeModel.js.map +1 -1
  64. package/lib/models/attributes/AttributeSetModel.js.map +1 -1
  65. package/lib/models/attributes/BooleanAttributeModel.js.map +1 -1
  66. package/lib/models/attributes/ChoiceAttributeModel.js.map +1 -1
  67. package/lib/models/attributes/ChoiceAttributeOptionCollection.js.map +1 -1
  68. package/lib/models/attributes/ChoiceAttributeOptionModel.js.map +1 -1
  69. package/lib/models/attributes/CompositeAttributeChildCollection.js.map +1 -1
  70. package/lib/models/attributes/CompositeAttributeModel.js.map +1 -1
  71. package/lib/models/attributes/DatetimeAttributeModel.js.map +1 -1
  72. package/lib/models/attributes/HelptextAttributeModel.js.map +1 -1
  73. package/lib/models/attributes/MemoAttributeModel.js.map +1 -1
  74. package/lib/models/attributes/MoneyAttributeModel.js.map +1 -1
  75. package/lib/models/attributes/NumberAttributeModel.js.map +1 -1
  76. package/lib/models/attributes/StringAttributeModel.js.map +1 -1
  77. package/lib/models/attributes/XMLAttributeModel.js.map +1 -1
  78. package/lib/models/attributes/_createAttribute.js.map +1 -1
  79. package/lib/models/attributes/input-constraints/ConstraintCollection.js.map +1 -1
  80. package/lib/models/attributes/input-constraints/ConstraintModel.js.map +1 -1
  81. package/lib/models/attributes/input-constraints/DateTimeDateFormatConstraint.js.map +1 -1
  82. package/lib/models/attributes/input-constraints/DateTimeTimeFormatConstraint.js.map +1 -1
  83. package/lib/models/attributes/input-constraints/FileSizeConstraint.js.map +1 -1
  84. package/lib/models/attributes/input-constraints/IBANConstraint.js.map +1 -1
  85. package/lib/models/attributes/input-constraints/NumberBoundaryConstraint.js.map +1 -1
  86. package/lib/models/attributes/input-constraints/NumberFormatConstraint.js.map +1 -1
  87. package/lib/models/base/BaseCollection.js.map +1 -1
  88. package/lib/models/base/BaseModel.js.map +1 -1
  89. package/lib/models/caseview/CaseViewModel.js.map +1 -1
  90. package/lib/models/concepts/BusinessScenarioModel.js.map +1 -1
  91. package/lib/models/concepts/ConceptDetailModel.js.map +1 -1
  92. package/lib/models/concepts/ConceptLinkModel.js.map +1 -1
  93. package/lib/models/concepts/SourceReferenceModel.js.map +1 -1
  94. package/lib/models/content/ContentLinkModel.js.map +1 -1
  95. package/lib/models/content/ContentTOCModel.js.map +1 -1
  96. package/lib/models/content/SectionModel.js.map +1 -1
  97. package/lib/models/content/SubSectionModel.js.map +1 -1
  98. package/lib/models/contentconfiguration/ContentConfigurationResults.js.map +1 -1
  99. package/lib/models/detail/DetailModel.js.map +1 -1
  100. package/lib/models/filters/BaseFilterModel.js.map +1 -1
  101. package/lib/models/form/FormModel.js.map +1 -1
  102. package/lib/models/form/FormObjectModel.js.map +1 -1
  103. package/lib/models/href/Href.js.map +1 -1
  104. package/lib/models/layouthint/LayoutHintCollection.js.map +1 -1
  105. package/lib/models/links/LinkCollection.js.map +1 -1
  106. package/lib/models/links/LinkModel.js.map +1 -1
  107. package/lib/models/list/ListDetailModel.js.map +1 -1
  108. package/lib/models/list/ListHeaderModel.js.map +1 -1
  109. package/lib/models/list/ListItemCollection.js.map +1 -1
  110. package/lib/models/list/ListModel.js.map +1 -1
  111. package/lib/models/lookup/LookupOptionsModel.js.map +1 -1
  112. package/lib/models/paging/PagingModel.js.map +1 -1
  113. package/lib/models/panels/GroupingPanelModel.js.map +1 -1
  114. package/lib/models/parameter/Parameter.js.map +1 -1
  115. package/lib/models/process/ProcessStatusSettingsModel.js.map +1 -1
  116. package/lib/models/resolveModel.js.map +1 -1
  117. package/lib/models/sorting/SortingModel.js.map +1 -1
  118. package/lib/models/tab/TabModel.js.map +1 -1
  119. package/lib/models/user/UserProfileModel.js.map +1 -1
  120. package/lib/models/user/UserServicesModel.js.map +1 -1
  121. package/lib/modularui/Authenticate.js +3 -1
  122. package/lib/modularui/Authenticate.js.flow +3 -2
  123. package/lib/modularui/Authenticate.js.map +1 -1
  124. package/lib/modularui/ModularUIRequest.js.map +1 -1
  125. package/lib/modularui/ModularUIResponse.js.map +1 -1
  126. package/lib/react/ErrorBoundaryFallback.js.map +1 -1
  127. package/lib/react-client/client.js.map +1 -1
  128. package/lib/react-client/rehydrate.js.map +1 -1
  129. package/lib/react-server/createSSRComplete.js.map +1 -1
  130. package/lib/react-server/renderSSRComplete.js.map +1 -1
  131. package/lib/react-server/renderSSRMinimal.js.map +1 -1
  132. package/lib/react-server/serverNoSSR.js.map +1 -1
  133. package/lib/react-server/serverSSR.js.map +1 -1
  134. package/lib/react-server/serverUtil.js.map +1 -1
  135. package/lib/react-theme/ThemeProvider.js.map +1 -1
  136. package/lib/react-theme/createTheme.js.map +1 -1
  137. package/lib/react-theme/useTheme.js.map +1 -1
  138. package/lib/react-theme/utils/background.js.map +1 -1
  139. package/lib/react-theme/utils/colors.js.map +1 -1
  140. package/lib/react-theme/utils/contrast.js.map +1 -1
  141. package/lib/react-theme/utils/corners.js.map +1 -1
  142. package/lib/react-theme/utils/spacers.js.map +1 -1
  143. package/lib/react-theme/utils/themeProps.js.map +1 -1
  144. package/lib/redux/_i18n/actions.js.map +1 -1
  145. package/lib/redux/_i18n/reducer.js.map +1 -1
  146. package/lib/redux/_modularui/actions.js.map +1 -1
  147. package/lib/redux/_modularui/connector.js.map +1 -1
  148. package/lib/redux/_modularui/middleware.js.map +1 -1
  149. package/lib/redux/_modularui/modularuiUtils.js.map +1 -1
  150. package/lib/redux/_modularui/reducer.js.map +1 -1
  151. package/lib/redux/_modularui/selectors.js.map +1 -1
  152. package/lib/redux/_modularui/withModularUI.js.map +1 -1
  153. package/lib/redux/_router/__tests__/hooks.spec.js.flow +1 -1
  154. package/lib/redux/_router/connectors.js.map +1 -1
  155. package/lib/redux/actions/Application.js.map +1 -1
  156. package/lib/redux/actions/Authorization.js.map +1 -1
  157. package/lib/redux/actions/Error.js.map +1 -1
  158. package/lib/redux/actions/Form.js.map +1 -1
  159. package/lib/redux/actions/FormAttributeSet.js.map +1 -1
  160. package/lib/redux/actions/FormAttributeSetRepeatable.js.map +1 -1
  161. package/lib/redux/actions/FormAutosave.js.map +1 -1
  162. package/lib/redux/actions/FormAutosubmit.js.map +1 -1
  163. package/lib/redux/actions/FormValidations.js.map +1 -1
  164. package/lib/redux/actions/Notification.js.map +1 -1
  165. package/lib/redux/actions/Preferences.js.map +1 -1
  166. package/lib/redux/actions/SignIn.js.map +1 -1
  167. package/lib/redux/actions/SignOut.js +6 -1
  168. package/lib/redux/actions/SignOut.js.flow +9 -5
  169. package/lib/redux/actions/SignOut.js.map +1 -1
  170. package/lib/redux/connectors/Application.js.map +1 -1
  171. package/lib/redux/connectors/Breadcrumb.js.map +1 -1
  172. package/lib/redux/connectors/CaseView.js.map +1 -1
  173. package/lib/redux/connectors/ConceptDetail.js.map +1 -1
  174. package/lib/redux/connectors/ContentBrowser.js.map +1 -1
  175. package/lib/redux/connectors/ContentDetail.js.map +1 -1
  176. package/lib/redux/connectors/ContentDetailSection.js.map +1 -1
  177. package/lib/redux/connectors/Form.js.map +1 -1
  178. package/lib/redux/connectors/FormAttributeSet.js.map +1 -1
  179. package/lib/redux/connectors/ListDetail.js.map +1 -1
  180. package/lib/redux/connectors/Modal.js.map +1 -1
  181. package/lib/redux/connectors/ModelCatalog.js.map +1 -1
  182. package/lib/redux/connectors/Notification.js.map +1 -1
  183. package/lib/redux/connectors/PanelRenderer.js.map +1 -1
  184. package/lib/redux/connectors/Preferences.js.map +1 -1
  185. package/lib/redux/connectors/Progress.js.map +1 -1
  186. package/lib/redux/connectors/ProgressIndicator.js.map +1 -1
  187. package/lib/redux/connectors/QuickSearch.js.map +1 -1
  188. package/lib/redux/connectors/SignIn.js +3 -5
  189. package/lib/redux/connectors/SignIn.js.flow +1 -6
  190. package/lib/redux/connectors/SignIn.js.map +1 -1
  191. package/lib/redux/connectors/SignOut.js +5 -1
  192. package/lib/redux/connectors/SignOut.js.flow +2 -1
  193. package/lib/redux/connectors/SignOut.js.map +1 -1
  194. package/lib/redux/connectors/Tab.js.map +1 -1
  195. package/lib/redux/reducers/AuthReducer.js +0 -11
  196. package/lib/redux/reducers/AuthReducer.js.flow +0 -11
  197. package/lib/redux/reducers/AuthReducer.js.map +1 -1
  198. package/lib/redux/reducers/__tests__/AuthReducer.spec.js.flow +0 -9
  199. package/lib/redux/store/configureStore.js.map +1 -1
  200. package/lib/redux/types.js.flow +0 -1
  201. package/lib/redux/types.js.map +1 -1
  202. package/lib/utils/browser/Cookies.js.map +1 -1
  203. package/lib/utils/datetime/DateTimeUtil.js.map +1 -1
  204. package/lib/utils/fetch/universalFetch.js.map +1 -1
  205. package/lib/utils/fetch/xhr.js.map +1 -1
  206. package/lib/utils/helpers/checkResource.js +2 -0
  207. package/lib/utils/helpers/checkResource.js.flow +3 -0
  208. package/lib/utils/helpers/checkResource.js.map +1 -1
  209. package/lib/utils/helpers/objects.js.map +1 -1
  210. package/lib/utils/helpers/sanitizeHtml.js.map +1 -1
  211. package/lib/utils/helpers/text.js.map +1 -1
  212. package/lib/utils/number/formatValue.js.map +1 -1
  213. package/lib/utils/number/parseNumbers.js.map +1 -1
  214. package/package.json +27 -27
  215. package/src/hooks/__tests__/UseModularUIModel.spec.js +1 -1
  216. package/src/hooks/__tests__/useAuthentication.spec.js +16 -2
  217. package/src/hooks/__tests__/useForm.spec.js +1 -1
  218. package/src/hooks/__tests__/useModal.spec.js +1 -1
  219. package/src/hooks/__tests__/useModelCatalog.spec.js +1 -1
  220. package/src/hooks/__tests__/useModels.spec.js +1 -1
  221. package/src/hooks/__tests__/useModularUIBasic.spec.js +1 -18
  222. package/src/hooks/__tests__/useNotification.spec.js +1 -1
  223. package/src/hooks/__tests__/usePreference.spec.js +1 -1
  224. package/src/hooks/__tests__/useProgressIndicator.spec.js +1 -1
  225. package/src/hooks/useAuthentication.js +4 -37
  226. package/src/modularui/Authenticate.js +3 -2
  227. package/src/redux/_router/__tests__/hooks.spec.js +1 -1
  228. package/src/redux/actions/SignOut.js +9 -5
  229. package/src/redux/connectors/SignIn.js +1 -6
  230. package/src/redux/connectors/SignOut.js +2 -1
  231. package/src/redux/reducers/AuthReducer.js +0 -11
  232. package/src/redux/reducers/__tests__/AuthReducer.spec.js +0 -9
  233. package/src/redux/types.js +0 -1
  234. package/src/utils/helpers/checkResource.js +3 -0
package/CHANGELOG.md CHANGED
@@ -2,6 +2,19 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ### [1.18.7-beta.0](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/compare/v1.18.6...v1.18.7-beta.0) (2022-05-23)
6
+
7
+ ### [1.18.6](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/compare/v1.18.5...v1.18.6) (2022-05-20)
8
+
9
+ ### [1.18.5](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/compare/v1.18.4...v1.18.5) (2022-05-20)
10
+
11
+ ### Bug Fixes
12
+
13
+ - **authentication:** remove isAuthenticated flag from auth reducer, use userService on application ([a7ecde7](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/commit/a7ecde77a2850964c72c97f99520e3b1d5d92ee7))
14
+ - **head-request:** add x-requested-with header to prevent basic authentication header on check resource ([24b2075](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/commit/24b2075d7fb0401f5d3261153169b4b2fded47cf))
15
+ - **logout:** return response after logout ([4e1b6b2](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/commit/4e1b6b2adeef8994ba05886a51fc8c37824c9d13))
16
+ - **signout:** improve logout sequence of logout method, improves application reload ([cad3d2d](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/commit/cad3d2d88886808301e06c6efd066cc930225a26))
17
+
5
18
  ### [1.18.4](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/compare/v1.18.3...v1.18.4) (2022-05-12)
6
19
 
7
20
  ### Bug Fixes
@@ -1,35 +1,19 @@
1
- import _slicedToArray from "@babel/runtime-corejs3/helpers/esm/slicedToArray";
2
1
  import { useSelector, useDispatch } from "react-redux";
3
2
  import { getApplication } from "../redux/_modularui/selectors";
4
3
  import { login as _login, logout as _logout, resetAuthErrors } from "../redux/actions";
5
- import UserServicesModel from "../models/user/UserServicesModel";
6
- import { useState, useEffect } from "react";
7
4
 
8
- var getIsAuthenticated = function getIsAuthenticated(isAuthenticated, application) {
9
- if (!application) {
10
- return false;
11
- }
12
-
13
- var userServicesModel = application.userServices;
14
-
15
- if (userServicesModel instanceof UserServicesModel) {
16
- return isAuthenticated && userServicesModel.isLoggedIn;
17
- }
18
-
19
- return false;
20
- };
21
5
  /**
22
6
  */
23
-
24
-
25
7
  export var useLogin = function useLogin() {
8
+ var _application$isLogged;
9
+
26
10
  var dispatch = useDispatch();
27
11
  var application = useSelector(getApplication);
28
12
  var auth = useSelector(function (state) {
29
13
  return state.auth;
30
14
  });
31
15
  return {
32
- isAuthenticated: getIsAuthenticated(auth.isAuthenticated, application),
16
+ isAuthenticated: (_application$isLogged = application === null || application === void 0 ? void 0 : application.isLoggedIn) !== null && _application$isLogged !== void 0 ? _application$isLogged : false,
33
17
  errorMessage: auth.error,
34
18
  resetErrors: function resetErrors() {
35
19
  return dispatch(resetAuthErrors());
@@ -43,41 +27,14 @@ export var useLogin = function useLogin() {
43
27
  */
44
28
 
45
29
  export var useLogout = function useLogout() {
30
+ var _application$isLogged2;
31
+
46
32
  var dispatch = useDispatch();
47
33
  var application = useSelector(getApplication);
48
- var auth = useSelector(function (state) {
49
- var _state$auth;
50
-
51
- return ((_state$auth = state.auth) === null || _state$auth === void 0 ? void 0 : _state$auth.isAuthenticated) || false;
52
- });
53
-
54
- var _useState = useState(false),
55
- _useState2 = _slicedToArray(_useState, 2),
56
- cancel = _useState2[0],
57
- setCancel = _useState2[1];
58
-
59
- var _useState3 = useState(function () {
60
- return getIsAuthenticated(auth, application);
61
- }),
62
- _useState4 = _slicedToArray(_useState3, 2),
63
- isAuthenticated = _useState4[0],
64
- setIsAuthenticated = _useState4[1]; // set cancel to true when the component this hook is used on, has been unmounted
65
- // prevents state changes after unmount
66
-
67
-
68
- useEffect(function () {
69
- return function () {
70
- setCancel(true);
71
- };
72
- }, []);
73
34
  return {
74
- isAuthenticated: isAuthenticated,
35
+ isAuthenticated: (_application$isLogged2 = application === null || application === void 0 ? void 0 : application.isLoggedIn) !== null && _application$isLogged2 !== void 0 ? _application$isLogged2 : false,
75
36
  logout: function logout() {
76
- return dispatch(_logout()).then(function () {
77
- if (!cancel) {
78
- setIsAuthenticated(false);
79
- }
80
- });
37
+ return dispatch(_logout());
81
38
  }
82
39
  };
83
40
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useAuthentication.js","names":["useSelector","useDispatch","getApplication","login","logout","resetAuthErrors","UserServicesModel","useState","useEffect","getIsAuthenticated","isAuthenticated","application","userServicesModel","userServices","isLoggedIn","useLogin","dispatch","auth","state","errorMessage","error","resetErrors","username","password","useLogout","cancel","setCancel","setIsAuthenticated","then"],"sources":["../../src/hooks/useAuthentication.js"],"sourcesContent":["// @flow\nimport { useSelector, useDispatch } from \"react-redux\";\nimport { getApplication } from \"../redux/_modularui/selectors\";\nimport { login, logout, resetAuthErrors } from \"../redux/actions\";\nimport UserServicesModel from \"../models/user/UserServicesModel\";\nimport { useState, useEffect } from \"react\";\n\nimport type { ResetAuthErrorsAction } from \"../redux/types\";\ntype LoginHook = {\n isAuthenticated: boolean,\n errorMessage: ?string,\n resetErrors: () => ResetAuthErrorsAction,\n login: (username: string, password: string) => void,\n};\ntype LogoutHook = {\n isAuthenticated: boolean,\n logout: () => void,\n};\n\nconst getIsAuthenticated = (isAuthenticated, application) => {\n if (!application) {\n return false;\n }\n\n const userServicesModel = application.userServices;\n if (userServicesModel instanceof UserServicesModel) {\n return isAuthenticated && userServicesModel.isLoggedIn;\n }\n\n return false;\n};\n\n/**\n */\nexport const useLogin = (): LoginHook => {\n const dispatch = useDispatch();\n\n const application = useSelector(getApplication);\n const auth = useSelector((state) => state.auth);\n\n return {\n isAuthenticated: getIsAuthenticated(auth.isAuthenticated, application),\n errorMessage: auth.error,\n resetErrors: () => dispatch(resetAuthErrors()),\n login: (username: string, password: string) =>\n dispatch(login(username, password)),\n };\n};\n\n/**\n */\nexport const useLogout = (): LogoutHook => {\n const dispatch = useDispatch();\n const application = useSelector(getApplication);\n const auth = useSelector((state) => state.auth?.isAuthenticated || false);\n\n const [cancel, setCancel] = useState(false);\n const [isAuthenticated, setIsAuthenticated] = useState(() =>\n getIsAuthenticated(auth, application)\n );\n\n // set cancel to true when the component this hook is used on, has been unmounted\n // prevents state changes after unmount\n useEffect(() => {\n return () => {\n setCancel(true);\n };\n }, []);\n\n return {\n isAuthenticated,\n logout: () =>\n dispatch(logout()).then(() => {\n if (!cancel) {\n setIsAuthenticated(false);\n }\n }),\n };\n};\n"],"mappings":";AACA,SAASA,WAAT,EAAsBC,WAAtB,QAAyC,aAAzC;AACA,SAASC,cAAT,QAA+B,+BAA/B;AACA,SAASC,KAAK,IAALA,MAAT,EAAgBC,MAAM,IAANA,OAAhB,EAAwBC,eAAxB,QAA+C,kBAA/C;AACA,OAAOC,iBAAP,MAA8B,kCAA9B;AACA,SAASC,QAAT,EAAmBC,SAAnB,QAAoC,OAApC;;AAcA,IAAMC,kBAAkB,GAAG,SAArBA,kBAAqB,CAACC,eAAD,EAAkBC,WAAlB,EAAkC;EAC3D,IAAI,CAACA,WAAL,EAAkB;IAChB,OAAO,KAAP;EACD;;EAED,IAAMC,iBAAiB,GAAGD,WAAW,CAACE,YAAtC;;EACA,IAAID,iBAAiB,YAAYN,iBAAjC,EAAoD;IAClD,OAAOI,eAAe,IAAIE,iBAAiB,CAACE,UAA5C;EACD;;EAED,OAAO,KAAP;AACD,CAXD;AAaA;AACA;;;AACA,OAAO,IAAMC,QAAQ,GAAG,SAAXA,QAAW,GAAiB;EACvC,IAAMC,QAAQ,GAAGf,WAAW,EAA5B;EAEA,IAAMU,WAAW,GAAGX,WAAW,CAACE,cAAD,CAA/B;EACA,IAAMe,IAAI,GAAGjB,WAAW,CAAC,UAACkB,KAAD;IAAA,OAAWA,KAAK,CAACD,IAAjB;EAAA,CAAD,CAAxB;EAEA,OAAO;IACLP,eAAe,EAAED,kBAAkB,CAACQ,IAAI,CAACP,eAAN,EAAuBC,WAAvB,CAD9B;IAELQ,YAAY,EAAEF,IAAI,CAACG,KAFd;IAGLC,WAAW,EAAE;MAAA,OAAML,QAAQ,CAACX,eAAe,EAAhB,CAAd;IAAA,CAHR;IAILF,KAAK,EAAE,eAACmB,QAAD,EAAmBC,QAAnB;MAAA,OACLP,QAAQ,CAACb,MAAK,CAACmB,QAAD,EAAWC,QAAX,CAAN,CADH;IAAA;EAJF,CAAP;AAOD,CAbM;AAeP;AACA;;AACA,OAAO,IAAMC,SAAS,GAAG,SAAZA,SAAY,GAAkB;EACzC,IAAMR,QAAQ,GAAGf,WAAW,EAA5B;EACA,IAAMU,WAAW,GAAGX,WAAW,CAACE,cAAD,CAA/B;EACA,IAAMe,IAAI,GAAGjB,WAAW,CAAC,UAACkB,KAAD;IAAA;;IAAA,OAAW,gBAAAA,KAAK,CAACD,IAAN,4DAAYP,eAAZ,KAA+B,KAA1C;EAAA,CAAD,CAAxB;;EAEA,gBAA4BH,QAAQ,CAAC,KAAD,CAApC;EAAA;EAAA,IAAOkB,MAAP;EAAA,IAAeC,SAAf;;EACA,iBAA8CnB,QAAQ,CAAC;IAAA,OACrDE,kBAAkB,CAACQ,IAAD,EAAON,WAAP,CADmC;EAAA,CAAD,CAAtD;EAAA;EAAA,IAAOD,eAAP;EAAA,IAAwBiB,kBAAxB,iBANyC,CAUzC;EACA;;;EACAnB,SAAS,CAAC,YAAM;IACd,OAAO,YAAM;MACXkB,SAAS,CAAC,IAAD,CAAT;IACD,CAFD;EAGD,CAJQ,EAIN,EAJM,CAAT;EAMA,OAAO;IACLhB,eAAe,EAAfA,eADK;IAELN,MAAM,EAAE;MAAA,OACNY,QAAQ,CAACZ,OAAM,EAAP,CAAR,CAAmBwB,IAAnB,CAAwB,YAAM;QAC5B,IAAI,CAACH,MAAL,EAAa;UACXE,kBAAkB,CAAC,KAAD,CAAlB;QACD;MACF,CAJD,CADM;IAAA;EAFH,CAAP;AASD,CA3BM"}
1
+ {"version":3,"file":"useAuthentication.js","names":["useSelector","useDispatch","getApplication","login","logout","resetAuthErrors","useLogin","dispatch","application","auth","state","isAuthenticated","isLoggedIn","errorMessage","error","resetErrors","username","password","useLogout"],"sources":["../../src/hooks/useAuthentication.js"],"sourcesContent":["// @flow\nimport { useSelector, useDispatch } from \"react-redux\";\n\nimport { getApplication } from \"../redux/_modularui/selectors\";\nimport { login, logout, resetAuthErrors } from \"../redux/actions\";\n\nimport type { ResetAuthErrorsAction } from \"../redux/types\";\ntype LoginHook = {\n isAuthenticated: boolean,\n errorMessage: ?string,\n resetErrors: () => ResetAuthErrorsAction,\n login: (username: string, password: string) => void,\n};\ntype LogoutHook = {\n isAuthenticated: boolean,\n logout: () => void,\n};\n\n/**\n */\nexport const useLogin = (): LoginHook => {\n const dispatch = useDispatch();\n\n const application = useSelector(getApplication);\n const auth = useSelector((state) => state.auth);\n\n return {\n isAuthenticated: application?.isLoggedIn ?? false,\n errorMessage: auth.error,\n resetErrors: () => dispatch(resetAuthErrors()),\n login: (username: string, password: string) =>\n dispatch(login(username, password)),\n };\n};\n\n/**\n */\nexport const useLogout = (): LogoutHook => {\n const dispatch = useDispatch();\n const application = useSelector(getApplication);\n\n return {\n isAuthenticated: application?.isLoggedIn ?? false,\n logout: () => dispatch(logout()),\n };\n};\n"],"mappings":"AACA,SAASA,WAAT,EAAsBC,WAAtB,QAAyC,aAAzC;AAEA,SAASC,cAAT,QAA+B,+BAA/B;AACA,SAASC,KAAK,IAALA,MAAT,EAAgBC,MAAM,IAANA,OAAhB,EAAwBC,eAAxB,QAA+C,kBAA/C;;AAcA;AACA;AACA,OAAO,IAAMC,QAAQ,GAAG,SAAXA,QAAW,GAAiB;EAAA;;EACvC,IAAMC,QAAQ,GAAGN,WAAW,EAA5B;EAEA,IAAMO,WAAW,GAAGR,WAAW,CAACE,cAAD,CAA/B;EACA,IAAMO,IAAI,GAAGT,WAAW,CAAC,UAACU,KAAD;IAAA,OAAWA,KAAK,CAACD,IAAjB;EAAA,CAAD,CAAxB;EAEA,OAAO;IACLE,eAAe,2BAAEH,WAAF,aAAEA,WAAF,uBAAEA,WAAW,CAAEI,UAAf,yEAA6B,KADvC;IAELC,YAAY,EAAEJ,IAAI,CAACK,KAFd;IAGLC,WAAW,EAAE;MAAA,OAAMR,QAAQ,CAACF,eAAe,EAAhB,CAAd;IAAA,CAHR;IAILF,KAAK,EAAE,eAACa,QAAD,EAAmBC,QAAnB;MAAA,OACLV,QAAQ,CAACJ,MAAK,CAACa,QAAD,EAAWC,QAAX,CAAN,CADH;IAAA;EAJF,CAAP;AAOD,CAbM;AAeP;AACA;;AACA,OAAO,IAAMC,SAAS,GAAG,SAAZA,SAAY,GAAkB;EAAA;;EACzC,IAAMX,QAAQ,GAAGN,WAAW,EAA5B;EACA,IAAMO,WAAW,GAAGR,WAAW,CAACE,cAAD,CAA/B;EAEA,OAAO;IACLS,eAAe,4BAAEH,WAAF,aAAEA,WAAF,uBAAEA,WAAW,CAAEI,UAAf,2EAA6B,KADvC;IAELR,MAAM,EAAE;MAAA,OAAMG,QAAQ,CAACH,OAAM,EAAP,CAAd;IAAA;EAFH,CAAP;AAID,CARM"}
@@ -1 +1 @@
1
- {"version":3,"file":"Locales.js","names":["Locale","englishErrors","dutchErrors","BaseCollection","IllegalArgumentException","availableLocales","code","messages","errors","createLocalesWithConfiguredErrors","configuredErrors","availableLocale","Locales","locales","locale","localeCode","some","item","hasLocale","acceptLanguageHeader","acceptLanguages","match","preferredLocales","availableLocaleCodes","length","getLocale","update","add","hydatedLocales","_collection","_code","_messages","_errors"],"sources":["../../src/i18n/Locales.js"],"sourcesContent":["// @flow\nimport Locale from \"./Locale\";\n\nimport englishErrors from \"./translations/beinformed_error_messages_en.nl\";\nimport dutchErrors from \"./translations/beinformed_error_messages_nl.nl\";\n\nimport BaseCollection from \"../models/base/BaseCollection\";\n\nimport { IllegalArgumentException } from \"../exceptions\";\n\nimport type { LocaleConfiguration } from \"./types\";\n\ntype ErrorMessageObject = {\n [languageCode: string]: {\n [messageID: string]: string,\n },\n};\n\ntype HydratedLocales = {\n _collection: Array<{\n _code: string,\n _messages: {\n [string]: string,\n },\n _errors: {\n [string]: string,\n },\n }>,\n};\n\n/**\n * Array of available locales\n * Order of locales is the preferred order of locales.\n * When user has an accept language header that does not correspond to the locales array,\n * the first one is used as the preferred language\n */\nexport const availableLocales: Array<LocaleConfiguration> = [\n {\n code: \"en\",\n messages: {},\n errors: englishErrors,\n },\n {\n code: \"nl\",\n messages: {},\n errors: dutchErrors,\n },\n];\n\n/**\n * Merge an object with custom error messages (exported and translated from be informed for example) and merge them with the existing translations.\n */\nexport const createLocalesWithConfiguredErrors = (\n configuredErrors: ErrorMessageObject\n): Array<Object> =>\n availableLocales.map((availableLocale) => {\n if (configuredErrors[availableLocale.code]) {\n return {\n ...availableLocale,\n errors: {\n ...availableLocale.errors,\n ...configuredErrors[availableLocale.code],\n },\n };\n }\n\n return availableLocale;\n });\n\n/**\n * Locales, collection of Locale\n */\nclass Locales extends BaseCollection<Locale> {\n constructor(locales: Array<LocaleConfiguration> = availableLocales) {\n super(locales.map((locale) => new Locale(locale)));\n }\n\n /**\n * rehydrate\n */\n static rehydrate(hydatedLocales: HydratedLocales): Locales {\n if (hydatedLocales && hydatedLocales._collection) {\n return new Locales(\n hydatedLocales._collection.map((locale) => ({\n code: locale._code,\n messages: locale._messages,\n errors: locale._errors,\n }))\n );\n }\n\n return new Locales([]);\n }\n\n /**\n * Check if locale with localeCode exists\n */\n hasLocale(localeCode: string): boolean {\n return this.some((item) => localeCode.startsWith(item.code));\n }\n\n /**\n * Retrieve locales by localeCode from Locales collection\n */\n getLocale(localeCode: string): Locale {\n if (this.hasLocale(localeCode)) {\n const locale = this.find((item) => localeCode.startsWith(item.code));\n if (locale) {\n return locale;\n }\n }\n throw new IllegalArgumentException(\n `Locale configuration for locale ${localeCode} not found`\n );\n }\n\n /**\n * Retrieve all available locale codes\n */\n get availableLocaleCodes(): Array<string> {\n return this.map((locale) => locale.code);\n }\n\n /**\n * Retrieve preferred locale based on the accept header of a browser\n */\n getPreferredLocale(acceptLanguageHeader: string | null): void | string {\n if (acceptLanguageHeader != null) {\n const acceptLanguages =\n acceptLanguageHeader.match(/[-A-Za-z]{2,10}/gu) || [];\n\n const preferredLocales = acceptLanguages\n .filter((locale) =>\n this.availableLocaleCodes.some((availableLocale) =>\n locale.startsWith(availableLocale)\n )\n )\n .map((locale) =>\n this.availableLocaleCodes.find((availableLocale) =>\n locale.startsWith(availableLocale)\n )\n );\n\n if (preferredLocales.length > 0) {\n return preferredLocales[0];\n }\n }\n\n return this.availableLocaleCodes[0];\n }\n\n /**\n * Add or change messages and errors for the given locale.<br>\n * It is not possible to remove messages.\n */\n update(locale: string, messages: Object = {}, errors: Object = {}) {\n if (this.hasLocale(locale)) {\n this.getLocale(locale).update(messages, errors);\n } else {\n this.add(\n new Locale({\n code: locale,\n messages,\n errors,\n })\n );\n }\n }\n}\n\nexport default Locales;\n"],"mappings":"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"}
1
+ {"version":3,"file":"Locales.js","names":["Locale","englishErrors","dutchErrors","BaseCollection","IllegalArgumentException","availableLocales","code","messages","errors","createLocalesWithConfiguredErrors","configuredErrors","availableLocale","Locales","locales","locale","localeCode","some","item","hasLocale","acceptLanguageHeader","acceptLanguages","match","preferredLocales","availableLocaleCodes","length","getLocale","update","add","hydatedLocales","_collection","_code","_messages","_errors"],"sources":["../../src/i18n/Locales.js"],"sourcesContent":["// @flow\nimport Locale from \"./Locale\";\n\nimport englishErrors from \"./translations/beinformed_error_messages_en.nl\";\nimport dutchErrors from \"./translations/beinformed_error_messages_nl.nl\";\n\nimport BaseCollection from \"../models/base/BaseCollection\";\n\nimport { IllegalArgumentException } from \"../exceptions\";\n\nimport type { LocaleConfiguration } from \"./types\";\n\ntype ErrorMessageObject = {\n [languageCode: string]: {\n [messageID: string]: string,\n },\n};\n\ntype HydratedLocales = {\n _collection: Array<{\n _code: string,\n _messages: {\n [string]: string,\n },\n _errors: {\n [string]: string,\n },\n }>,\n};\n\n/**\n * Array of available locales\n * Order of locales is the preferred order of locales.\n * When user has an accept language header that does not correspond to the locales array,\n * the first one is used as the preferred language\n */\nexport const availableLocales: Array<LocaleConfiguration> = [\n {\n code: \"en\",\n messages: {},\n errors: englishErrors,\n },\n {\n code: \"nl\",\n messages: {},\n errors: dutchErrors,\n },\n];\n\n/**\n * Merge an object with custom error messages (exported and translated from be informed for example) and merge them with the existing translations.\n */\nexport const createLocalesWithConfiguredErrors = (\n configuredErrors: ErrorMessageObject\n): Array<Object> =>\n availableLocales.map((availableLocale) => {\n if (configuredErrors[availableLocale.code]) {\n return {\n ...availableLocale,\n errors: {\n ...availableLocale.errors,\n ...configuredErrors[availableLocale.code],\n },\n };\n }\n\n return availableLocale;\n });\n\n/**\n * Locales, collection of Locale\n */\nclass Locales extends BaseCollection<Locale> {\n constructor(locales: Array<LocaleConfiguration> = availableLocales) {\n super(locales.map((locale) => new Locale(locale)));\n }\n\n /**\n * rehydrate\n */\n static rehydrate(hydatedLocales: HydratedLocales): Locales {\n if (hydatedLocales && hydatedLocales._collection) {\n return new Locales(\n hydatedLocales._collection.map((locale) => ({\n code: locale._code,\n messages: locale._messages,\n errors: locale._errors,\n }))\n );\n }\n\n return new Locales([]);\n }\n\n /**\n * Check if locale with localeCode exists\n */\n hasLocale(localeCode: string): boolean {\n return this.some((item) => localeCode.startsWith(item.code));\n }\n\n /**\n * Retrieve locales by localeCode from Locales collection\n */\n getLocale(localeCode: string): Locale {\n if (this.hasLocale(localeCode)) {\n const locale = this.find((item) => localeCode.startsWith(item.code));\n if (locale) {\n return locale;\n }\n }\n throw new IllegalArgumentException(\n `Locale configuration for locale ${localeCode} not found`\n );\n }\n\n /**\n * Retrieve all available locale codes\n */\n get availableLocaleCodes(): Array<string> {\n return this.map((locale) => locale.code);\n }\n\n /**\n * Retrieve preferred locale based on the accept header of a browser\n */\n getPreferredLocale(acceptLanguageHeader: string | null): void | string {\n if (acceptLanguageHeader != null) {\n const acceptLanguages =\n acceptLanguageHeader.match(/[-A-Za-z]{2,10}/gu) || [];\n\n const preferredLocales = acceptLanguages\n .filter((locale) =>\n this.availableLocaleCodes.some((availableLocale) =>\n locale.startsWith(availableLocale)\n )\n )\n .map((locale) =>\n this.availableLocaleCodes.find((availableLocale) =>\n locale.startsWith(availableLocale)\n )\n );\n\n if (preferredLocales.length > 0) {\n return preferredLocales[0];\n }\n }\n\n return this.availableLocaleCodes[0];\n }\n\n /**\n * Add or change messages and errors for the given locale.<br>\n * It is not possible to remove messages.\n */\n update(locale: string, messages: Object = {}, errors: Object = {}) {\n if (this.hasLocale(locale)) {\n this.getLocale(locale).update(messages, errors);\n } else {\n this.add(\n new Locale({\n code: locale,\n messages,\n errors,\n })\n );\n }\n }\n}\n\nexport default Locales;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ConceptDetailModel.js","names":["ResourceModel","ConceptRelationCollection","SourceReferenceCollection","ConceptTypeDetailModel","TIMEVERSION_FILTER_NAME","ConceptDetailModel","modularuiResponse","_relations","data","relations","entryDate","conceptTypeLink","links","getLinkByKey","relationsCollectionLinks","relationsCollection","getInitialChildModelLinks","isCacheable","models","conceptTypeModel","model","conceptType","setChildModels","getData","href","selflink","setParameter","removeParameter","_conceptType","conceptLabel","formula","labelTypes","labelType","setting","labels","label","type","_id","ids","propertyTypes","propertyType","properties","property","conceptProperties","textFragments","textFragment","textFragmentConfig","textFragmentTypes","textFragmentType","notConfiguredTextFragments","some","textfragment","keys","textfragments","availableLocales","_sourceReferences","getSourceReferencesForCurrentLanguage","LANGUAGE_POSTFIX_LENGTH","sourceReferences","availableLanguagesInSourceReferences","sourceReference","substring","length","currentLanguagePostfix","locale","availableLanguages","split","value","contributions","resourcetype"],"sources":["../../../src/models/concepts/ConceptDetailModel.js"],"sourcesContent":["// @flow\nimport ResourceModel from \"../base/ResourceModel\";\nimport ConceptRelationCollection from \"./ConceptRelationCollection\";\nimport SourceReferenceCollection from \"./SourceReferenceCollection\";\nimport ConceptTypeDetailModel from \"./ConceptTypeDetailModel\";\n\nimport { TIMEVERSION_FILTER_NAME } from \"../../constants/Constants\";\n\nimport type {\n ModularUIModel,\n labelsJSON,\n textfragmentJSON,\n propertyJSON,\n} from \"../types\";\nimport type { ModularUIResponse } from \"../../modularui\";\nimport type Href from \"../href/Href\";\nimport type LinkModel from \"../links/LinkModel\";\n\n/**\n * Model for concept details, available through modelcatalog\n */\nexport default class ConceptDetailModel extends ResourceModel {\n _relations: ConceptRelationCollection;\n _conceptType: ?ConceptTypeDetailModel;\n _sourceReferences: SourceReferenceCollection;\n\n /**\n */\n constructor(modularuiResponse: ModularUIResponse) {\n super(modularuiResponse);\n\n this._relations = new ConceptRelationCollection(\n this.data.relations,\n this.entryDate\n );\n }\n\n /**\n */\n get type(): string {\n return \"ConceptDetail\";\n }\n\n /**\n */\n static isApplicableModel(data: ModularUIResponse): boolean {\n return (\n data.contributions.resourcetype &&\n data.contributions.resourcetype === \"ConceptDetail\"\n );\n }\n\n /**\n */\n getInitialChildModelLinks(): Array<LinkModel> {\n const conceptTypeLink = this.links.getLinkByKey(\"concepttype\");\n const relationsCollectionLinks =\n this.relationsCollection.getInitialChildModelLinks();\n\n if (conceptTypeLink) {\n conceptTypeLink.isCacheable = true;\n return [conceptTypeLink, ...relationsCollectionLinks];\n }\n\n return relationsCollectionLinks;\n }\n\n /**\n */\n setChildModels(models: Array<ModularUIModel>) {\n // $FlowExpectedError[incompatible-type]\n const conceptTypeModel: ?ConceptTypeDetailModel = models.find(\n (model) => model instanceof ConceptTypeDetailModel\n );\n\n if (conceptTypeModel) {\n this.conceptType = conceptTypeModel;\n }\n\n this.relationsCollection.setChildModels(models);\n }\n\n /**\n * Retrieve concept detail identifier as key for this model\n */\n get key(): string {\n return this.getData(\"_id\", \"concept\");\n }\n\n /**\n * Getting the self link of this Concept\n */\n get selfhref(): Href {\n const { href } = this.selflink;\n\n if (this.entryDate) {\n href.setParameter(TIMEVERSION_FILTER_NAME, this.entryDate);\n } else {\n href.removeParameter(TIMEVERSION_FILTER_NAME);\n }\n\n return href;\n }\n\n /**\n * Get conceptType of concept\n */\n get conceptType(): ?ConceptTypeDetailModel {\n return this._conceptType;\n }\n\n /**\n */\n set conceptType(conceptType: ?ConceptTypeDetailModel) {\n this._conceptType = conceptType;\n }\n\n /**\n * Get concept label\n */\n get label(): string {\n return this.data.conceptLabel;\n }\n\n /**\n * Get taxonomy type\n */\n get taxonomyType(): string {\n return this.getData(\"taxonomyType\", \"default\");\n }\n\n /**\n * Get concept relations collection\n */\n get relationsCollection(): ConceptRelationCollection {\n return this._relations;\n }\n\n /**\n * Get concept formula\n */\n get formula(): string {\n return this.data.formula;\n }\n\n /**\n * Get additional labels of concept\n */\n get labels(): Array<labelsJSON> {\n return this.conceptType && this.conceptType.labelTypes\n ? this.conceptType.labelTypes.map((labelType) => {\n const setting = this.data.labels\n ? this.data.labels.find((label) => label.type === labelType._id)\n : {};\n\n return {\n ...labelType,\n ...setting,\n };\n })\n : [];\n }\n\n /**\n * Get label elements by id\n */\n getLabelElementByIds(ids: Array<string>): Array<labelsJSON> {\n return this.labels.filter((label: labelsJSON) => ids.includes(label._id));\n }\n\n /**\n * Get concept properties\n */\n get conceptProperties(): Array<propertyJSON> {\n return this.conceptType && this.conceptType.propertyTypes\n ? this.conceptType.propertyTypes.map((propertyType) => {\n const setting = this.data.properties\n ? this.data.properties.find(\n (property) => property.type === propertyType._id\n )\n : {};\n\n return {\n ...propertyType,\n ...setting,\n };\n })\n : [];\n }\n\n /**\n * Get concept properties by id\n */\n getConceptPropertiesByIds(ids: Array<string>): Array<propertyJSON> {\n return this.conceptProperties.filter((property) =>\n ids.includes(property._id)\n );\n }\n\n /**\n * Get Text fragments\n */\n get textfragments(): Array<textfragmentJSON> {\n const textFragments = this.data.textFragments\n ? this.data.textFragments.map((textFragment) => {\n const textFragmentConfig =\n this.conceptType &&\n this.conceptType.textFragmentTypes.find(\n (textFragmentType) => textFragment.type === textFragmentType._id\n );\n\n return {\n ...textFragmentConfig,\n ...textFragment,\n };\n })\n : [];\n\n const notConfiguredTextFragments =\n this.conceptType && this.conceptType.textFragmentTypes\n ? this.conceptType.textFragmentTypes.filter((textFragmentType) => {\n if (!this.data.textFragments) {\n return true;\n }\n\n return !this.data.textFragments.some(\n (textfragment) => textfragment.type === textFragmentType._id\n );\n })\n : [];\n\n return [...textFragments, ...notConfiguredTextFragments];\n }\n\n /**\n * Get text fragments by id\n */\n getTextFragmentByKeys(keys: Array<string>): Array<textfragmentJSON> {\n return this.textfragments.filter((textfragment) =>\n keys.includes(textfragment.type)\n );\n }\n\n /**\n * Get source reference collection\n */\n getSourceReferenceCollection(\n availableLocales: Array<string> = []\n ): SourceReferenceCollection {\n if (!this._sourceReferences) {\n this._sourceReferences = new SourceReferenceCollection(\n this.getSourceReferencesForCurrentLanguage(availableLocales),\n this.entryDate\n );\n }\n\n return this._sourceReferences;\n }\n\n /*\n * Retrieve all sourceReferenceTypes that are valid for the current language\n * Used by sourceRef collection\n */\n /**\n */\n getSourceReferencesForCurrentLanguage(\n availableLocales: Array<string>\n ): Array<Object> {\n const LANGUAGE_POSTFIX_LENGTH = 3;\n if (this.data.sourceReferences) {\n const availableLanguagesInSourceReferences =\n this.data.sourceReferences.map((sourceReference) =>\n sourceReference.type.substring(\n sourceReference.type.length - LANGUAGE_POSTFIX_LENGTH\n )\n );\n\n const currentLanguagePostfix = `_${this.locale}`;\n\n if (\n availableLanguagesInSourceReferences.includes(currentLanguagePostfix)\n ) {\n // return all sourceReferences that end with language that is selected\n return this.data.sourceReferences.filter((sourceReference) =>\n sourceReference.type.endsWith(currentLanguagePostfix)\n );\n }\n\n const availableLanguages = availableLocales.map(\n (locale) => `_${locale.split(\"-\")[0]}`\n );\n\n // return all sourceReferences that do not end with language postfix\n return this.data.sourceReferences.filter(\n (sourceReference) =>\n !availableLanguages.includes(\n sourceReference.type.substring(\n sourceReference.type.length - LANGUAGE_POSTFIX_LENGTH\n )\n )\n );\n }\n return [];\n }\n\n /**\n * Retrieve entrydate of content toc\n */\n get entryDate(): string | null {\n return this.data.filter?.[TIMEVERSION_FILTER_NAME]?.value ?? null;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ConceptDetailModel.js","names":["ResourceModel","ConceptRelationCollection","SourceReferenceCollection","ConceptTypeDetailModel","TIMEVERSION_FILTER_NAME","ConceptDetailModel","modularuiResponse","_relations","data","relations","entryDate","conceptTypeLink","links","getLinkByKey","relationsCollectionLinks","relationsCollection","getInitialChildModelLinks","isCacheable","models","conceptTypeModel","model","conceptType","setChildModels","getData","href","selflink","setParameter","removeParameter","_conceptType","conceptLabel","formula","labelTypes","labelType","setting","labels","label","type","_id","ids","propertyTypes","propertyType","properties","property","conceptProperties","textFragments","textFragment","textFragmentConfig","textFragmentTypes","textFragmentType","notConfiguredTextFragments","some","textfragment","keys","textfragments","availableLocales","_sourceReferences","getSourceReferencesForCurrentLanguage","LANGUAGE_POSTFIX_LENGTH","sourceReferences","availableLanguagesInSourceReferences","sourceReference","substring","length","currentLanguagePostfix","locale","availableLanguages","split","value","contributions","resourcetype"],"sources":["../../../src/models/concepts/ConceptDetailModel.js"],"sourcesContent":["// @flow\nimport ResourceModel from \"../base/ResourceModel\";\nimport ConceptRelationCollection from \"./ConceptRelationCollection\";\nimport SourceReferenceCollection from \"./SourceReferenceCollection\";\nimport ConceptTypeDetailModel from \"./ConceptTypeDetailModel\";\n\nimport { TIMEVERSION_FILTER_NAME } from \"../../constants/Constants\";\n\nimport type {\n ModularUIModel,\n labelsJSON,\n textfragmentJSON,\n propertyJSON,\n} from \"../types\";\nimport type { ModularUIResponse } from \"../../modularui\";\nimport type Href from \"../href/Href\";\nimport type LinkModel from \"../links/LinkModel\";\n\n/**\n * Model for concept details, available through modelcatalog\n */\nexport default class ConceptDetailModel extends ResourceModel {\n _relations: ConceptRelationCollection;\n _conceptType: ?ConceptTypeDetailModel;\n _sourceReferences: SourceReferenceCollection;\n\n /**\n */\n constructor(modularuiResponse: ModularUIResponse) {\n super(modularuiResponse);\n\n this._relations = new ConceptRelationCollection(\n this.data.relations,\n this.entryDate\n );\n }\n\n /**\n */\n get type(): string {\n return \"ConceptDetail\";\n }\n\n /**\n */\n static isApplicableModel(data: ModularUIResponse): boolean {\n return (\n data.contributions.resourcetype &&\n data.contributions.resourcetype === \"ConceptDetail\"\n );\n }\n\n /**\n */\n getInitialChildModelLinks(): Array<LinkModel> {\n const conceptTypeLink = this.links.getLinkByKey(\"concepttype\");\n const relationsCollectionLinks =\n this.relationsCollection.getInitialChildModelLinks();\n\n if (conceptTypeLink) {\n conceptTypeLink.isCacheable = true;\n return [conceptTypeLink, ...relationsCollectionLinks];\n }\n\n return relationsCollectionLinks;\n }\n\n /**\n */\n setChildModels(models: Array<ModularUIModel>) {\n // $FlowExpectedError[incompatible-type]\n const conceptTypeModel: ?ConceptTypeDetailModel = models.find(\n (model) => model instanceof ConceptTypeDetailModel\n );\n\n if (conceptTypeModel) {\n this.conceptType = conceptTypeModel;\n }\n\n this.relationsCollection.setChildModels(models);\n }\n\n /**\n * Retrieve concept detail identifier as key for this model\n */\n get key(): string {\n return this.getData(\"_id\", \"concept\");\n }\n\n /**\n * Getting the self link of this Concept\n */\n get selfhref(): Href {\n const { href } = this.selflink;\n\n if (this.entryDate) {\n href.setParameter(TIMEVERSION_FILTER_NAME, this.entryDate);\n } else {\n href.removeParameter(TIMEVERSION_FILTER_NAME);\n }\n\n return href;\n }\n\n /**\n * Get conceptType of concept\n */\n get conceptType(): ?ConceptTypeDetailModel {\n return this._conceptType;\n }\n\n /**\n */\n set conceptType(conceptType: ?ConceptTypeDetailModel) {\n this._conceptType = conceptType;\n }\n\n /**\n * Get concept label\n */\n get label(): string {\n return this.data.conceptLabel;\n }\n\n /**\n * Get taxonomy type\n */\n get taxonomyType(): string {\n return this.getData(\"taxonomyType\", \"default\");\n }\n\n /**\n * Get concept relations collection\n */\n get relationsCollection(): ConceptRelationCollection {\n return this._relations;\n }\n\n /**\n * Get concept formula\n */\n get formula(): string {\n return this.data.formula;\n }\n\n /**\n * Get additional labels of concept\n */\n get labels(): Array<labelsJSON> {\n return this.conceptType && this.conceptType.labelTypes\n ? this.conceptType.labelTypes.map((labelType) => {\n const setting = this.data.labels\n ? this.data.labels.find((label) => label.type === labelType._id)\n : {};\n\n return {\n ...labelType,\n ...setting,\n };\n })\n : [];\n }\n\n /**\n * Get label elements by id\n */\n getLabelElementByIds(ids: Array<string>): Array<labelsJSON> {\n return this.labels.filter((label: labelsJSON) => ids.includes(label._id));\n }\n\n /**\n * Get concept properties\n */\n get conceptProperties(): Array<propertyJSON> {\n return this.conceptType && this.conceptType.propertyTypes\n ? this.conceptType.propertyTypes.map((propertyType) => {\n const setting = this.data.properties\n ? this.data.properties.find(\n (property) => property.type === propertyType._id\n )\n : {};\n\n return {\n ...propertyType,\n ...setting,\n };\n })\n : [];\n }\n\n /**\n * Get concept properties by id\n */\n getConceptPropertiesByIds(ids: Array<string>): Array<propertyJSON> {\n return this.conceptProperties.filter((property) =>\n ids.includes(property._id)\n );\n }\n\n /**\n * Get Text fragments\n */\n get textfragments(): Array<textfragmentJSON> {\n const textFragments = this.data.textFragments\n ? this.data.textFragments.map((textFragment) => {\n const textFragmentConfig =\n this.conceptType &&\n this.conceptType.textFragmentTypes.find(\n (textFragmentType) => textFragment.type === textFragmentType._id\n );\n\n return {\n ...textFragmentConfig,\n ...textFragment,\n };\n })\n : [];\n\n const notConfiguredTextFragments =\n this.conceptType && this.conceptType.textFragmentTypes\n ? this.conceptType.textFragmentTypes.filter((textFragmentType) => {\n if (!this.data.textFragments) {\n return true;\n }\n\n return !this.data.textFragments.some(\n (textfragment) => textfragment.type === textFragmentType._id\n );\n })\n : [];\n\n return [...textFragments, ...notConfiguredTextFragments];\n }\n\n /**\n * Get text fragments by id\n */\n getTextFragmentByKeys(keys: Array<string>): Array<textfragmentJSON> {\n return this.textfragments.filter((textfragment) =>\n keys.includes(textfragment.type)\n );\n }\n\n /**\n * Get source reference collection\n */\n getSourceReferenceCollection(\n availableLocales: Array<string> = []\n ): SourceReferenceCollection {\n if (!this._sourceReferences) {\n this._sourceReferences = new SourceReferenceCollection(\n this.getSourceReferencesForCurrentLanguage(availableLocales),\n this.entryDate\n );\n }\n\n return this._sourceReferences;\n }\n\n /*\n * Retrieve all sourceReferenceTypes that are valid for the current language\n * Used by sourceRef collection\n */\n /**\n */\n getSourceReferencesForCurrentLanguage(\n availableLocales: Array<string>\n ): Array<Object> {\n const LANGUAGE_POSTFIX_LENGTH = 3;\n if (this.data.sourceReferences) {\n const availableLanguagesInSourceReferences =\n this.data.sourceReferences.map((sourceReference) =>\n sourceReference.type.substring(\n sourceReference.type.length - LANGUAGE_POSTFIX_LENGTH\n )\n );\n\n const currentLanguagePostfix = `_${this.locale}`;\n\n if (\n availableLanguagesInSourceReferences.includes(currentLanguagePostfix)\n ) {\n // return all sourceReferences that end with language that is selected\n return this.data.sourceReferences.filter((sourceReference) =>\n sourceReference.type.endsWith(currentLanguagePostfix)\n );\n }\n\n const availableLanguages = availableLocales.map(\n (locale) => `_${locale.split(\"-\")[0]}`\n );\n\n // return all sourceReferences that do not end with language postfix\n return this.data.sourceReferences.filter(\n (sourceReference) =>\n !availableLanguages.includes(\n sourceReference.type.substring(\n sourceReference.type.length - LANGUAGE_POSTFIX_LENGTH\n )\n )\n );\n }\n return [];\n }\n\n /**\n * Retrieve entrydate of content toc\n */\n get entryDate(): string | null {\n return this.data.filter?.[TIMEVERSION_FILTER_NAME]?.value ?? null;\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"FormModel.js","names":["flattenDeep","deepmerge","get","has","IllegalArgumentException","ResourceModel","ErrorCollection","Href","Parameter","FormObjectModel","HTTP_METHODS","getSetting","CREATE_ACTION","DELETE_ACTION","UPDATE_ACTION","FormModel","modularuiResponse","lastUpdate","currentFormObject","createFormObject","endResultFormObjects","setEndResultFormObjects","parameters","setParameters","isComplete","getData","data","errors","handleRootErrors","layouthint","getContribution","endResultChildLinks","endResultFormObject","getInitialChildModelLinks","models","setChildModels","forEach","buttonType","buttonLabels","completedFormObjects","contributions","objects","objectKeys","length","anchor","dynamicschema","elements","element","item","missingAnchors","missing","anchors","results","resultObject","result","objectid","addGlobalDynamicSchema","getMissingAnchors","objectId","formObjectModel","emptyFormObject","createEmpty","repeatIndex","getHighestRepeatIndex","addFormObject","Math","max","allObjects","formObject","equals","key","hint","_currentFormObject","_completedFormObjects","formObjects","_previouslyEnteredFormObjects","missingObjects","missingObjectIds","endResultAnchors","otherProps","endResult","endResultKeys","some","objectKey","content","_endResultFormObjects","previousEndResultKeys","_previousEndResultKeys","endResultFormObjectKeys","isRepeatable","hasOneValidQuestion","object","isValid","errorCollection","hasItems","hasServerErrors","hasErrors","error","addServerError","id","message","_errorCollection","resetErrors","_commit","commit","_isFinished","isFinished","_isComplete","success","redirect","_redirectLocation","successRedirect","par","_prefix","_name","_value","_parameters","selfhref","selflink","href","method","POST","parameter","name","selfhrefNoCommitParam","expectsEndResultFormObjects","addParameter","Error","selfhrefWithCommitParam","_tokens","tokens","isChangedSince","_lastUpdate","validOnly","validationData","formdata","index","hasFixedNrOfRepeats","isLastRepeat","objectFormData","getFormData","existingObjectIndex","obj","push","withConcurrencyToken","getFormDataObjects","enabled","_useClientsideValidation","attributeCollection","all","setUseClientsideValidation","useClientsideValidation","currentFormObjectKey","isRepeatWithUnknownTotal","oldCurrentFormObject","previouslyEnteredFormObjects","completedFormObjectKeys","formObjectKey","setPreviousObject","hasNoQuestionsConfigured","isDynamic","currentObjectIndex","isLastObject","receivedForm","Date","now","lastServerUpdate","receivedFormData","hasMissing","handleFinished","handleErrors","handleMissing","updateValidations","_data","properties","errorAnchors","handleMissingErrors","handleNewFormObject","attribute","hasAttributeByKey","addMissingError","removeMissingError","processMissingErrors","receivedCurrentFormObject","handlePreviouslyEnteredFormObjects","_mergePreviouslyEnteredObjects","mergePreviouslyEnteredObjects","previouslyEnteredFormObject","mergedObject","mergeObjects","hasPreviouslyEnteredObject","newObject","oldObject","mergedFormObject","mergeObject","findMethod","foundAttribute","resourcetype"],"sources":["../../../src/models/form/FormModel.js"],"sourcesContent":["// @flow\nimport flattenDeep from \"lodash/flattenDeep\";\nimport deepmerge from \"deepmerge\";\nimport { get } from \"lodash\";\n\nimport { has } from \"../../utils/helpers/objects\";\n\nimport { IllegalArgumentException } from \"../../exceptions\";\n\nimport ResourceModel from \"../base/ResourceModel\";\nimport ErrorCollection from \"../error/ErrorCollection\";\n\nimport Href from \"../href/Href\";\nimport Parameter from \"../parameter/Parameter\";\n\nimport FormObjectModel from \"./FormObjectModel\";\n\nimport { HTTP_METHODS } from \"../../constants/Constants\";\nimport { getSetting } from \"../../constants/Settings\";\nimport {\n CREATE_ACTION,\n DELETE_ACTION,\n UPDATE_ACTION,\n} from \"../../constants/LayoutHints\";\n\nimport type { AttributeType, ModularUIModel } from \"../types\";\nimport type { ModularUIResponse } from \"../../modularui\";\nimport type ErrorResponse from \"../error/ErrorResponse\";\nimport type LinkModel from \"../links/LinkModel\";\n\n/**\n */\nclass FormModel extends ResourceModel {\n _lastUpdate: number;\n\n _completedFormObjects: Array<FormObjectModel> = [];\n _currentFormObject: FormObjectModel | null = null;\n _previouslyEnteredFormObjects: Array<FormObjectModel> = [];\n\n _mergePreviouslyEnteredObjects: boolean = true;\n\n _endResultFormObjects: Array<FormObjectModel> = [];\n _previousEndResultKeys: Array<string> = [];\n\n _useClientsideValidation: boolean = getSetting(\"USE_CLIENTSIDE_VALIDATION\");\n _errorCollection: ErrorCollection = new ErrorCollection(\"form\");\n\n _redirectLocation: Href;\n\n _commit: boolean;\n _isFinished: boolean;\n _isComplete: boolean;\n\n _parameters: Array<Parameter>;\n _tokens: Array<string>;\n\n /**\n */\n constructor(modularuiResponse: ModularUIResponse) {\n super(modularuiResponse);\n\n this.lastUpdate = 0;\n\n this.currentFormObject = this.createFormObject();\n this.endResultFormObjects = this.setEndResultFormObjects();\n\n this.parameters = this.setParameters(modularuiResponse);\n\n this.isComplete = this.getData(\"complete\", false);\n\n if (this.data.errors) {\n this.handleRootErrors(this.data.errors);\n }\n }\n\n /**\n */\n get type(): string {\n return \"Form\";\n }\n\n /**\n */\n get actiontype(): string {\n if (this.layouthint.has(CREATE_ACTION)) {\n return \"create\";\n }\n if (this.layouthint.has(UPDATE_ACTION)) {\n return \"update\";\n }\n if (this.layouthint.has(DELETE_ACTION)) {\n return \"delete\";\n }\n\n return this.getContribution(\"actiontype\", \"form\");\n }\n\n /**\n */\n static isApplicableModel(data: ModularUIResponse): boolean {\n return (\n data.contributions.resourcetype &&\n data.contributions.resourcetype === \"Form\"\n );\n }\n\n /**\n */\n getInitialChildModelLinks(): Array<LinkModel> {\n const endResultChildLinks = flattenDeep(\n this.endResultFormObjects.map((endResultFormObject) =>\n endResultFormObject.getInitialChildModelLinks()\n )\n );\n\n if (this.currentFormObject === null) {\n return endResultChildLinks;\n }\n\n return [\n ...this.currentFormObject.getInitialChildModelLinks(),\n ...endResultChildLinks,\n ];\n }\n\n /**\n */\n setChildModels(models: Array<ModularUIModel>) {\n if (this.currentFormObject) {\n this.currentFormObject.setChildModels(models);\n }\n\n this.endResultFormObjects.forEach((endResultFormObject) => {\n endResultFormObject.setChildModels(models);\n });\n }\n\n /**\n */\n get label(): string {\n return this.getContribution(\"label\", \"\");\n }\n\n /**\n * Get form level button labels\n */\n get buttonLabels(): Object {\n return this.getContribution(\"buttonLabels\", {});\n }\n\n /**\n * @returns button label from contributions;\n */\n getButtonLabel(\n buttonType: \"cancel\" | \"previous\" | \"next\" | \"finish\"\n ): string | null {\n // cancel button labels are defined on the form\n if (buttonType === \"cancel\") {\n return get(this.buttonLabels, \"cancel\", null);\n }\n\n // all other form related button labels are defined on the object\n return get(this.currentFormObject?.buttonLabels, buttonType, null);\n }\n\n /**\n * Get all applicable objects\n */\n get allObjects(): Array<FormObjectModel> {\n if (this.currentFormObject === null) {\n return this.completedFormObjects;\n }\n\n return [...this.completedFormObjects, this.currentFormObject];\n }\n\n /**\n */\n get objectKeys(): Array<string> {\n if (has(this.contributions, \"objects\")) {\n return Object.keys(this.contributions.objects);\n }\n\n return [];\n }\n\n /**\n */\n get numberOfExpectedQuestions(): number {\n return this.objectKeys.length;\n }\n\n /**\n * Has questions configured on form\n */\n get hasNoQuestionsConfigured(): boolean {\n return (\n this.isComplete &&\n (this.objectKeys.length === 0 ||\n (!(\"missing\" in this.data) &&\n !(\"results\" in this.data) &&\n !(\"errors\" in this.data)))\n );\n }\n\n /**\n */\n addGlobalDynamicSchema(anchor: Object, dynamicschema: Object): Object {\n if (!dynamicschema) {\n return anchor;\n }\n\n return {\n ...anchor,\n elements: anchor.elements.map((element) => ({\n ...element,\n dynamicschema: element.dynamicschema\n ? element.dynamicschema.map((item) => ({\n ...item,\n elements: { ...item.elements, dynamicschema },\n }))\n : null,\n })),\n };\n }\n\n /**\n */\n getMissingAnchors(): Array<Object> {\n const missingAnchors = this.data.missing?.anchors ?? [];\n\n // Add intermediate result data to anchor\n return missingAnchors.map((anchor) => {\n if (this.data.results) {\n const resultObject = this.data.results.find(\n (result) =>\n result.objectid === anchor.objectid && \"elements\" in result\n );\n\n if (resultObject) {\n anchor.results = resultObject.elements;\n }\n }\n\n return this.addGlobalDynamicSchema(anchor, this.data.dynamicschema);\n });\n }\n\n /**\n * Create form object based on the data and contributions available in this form\n */\n createFormObject(): FormObjectModel | null {\n if (this.data && this.contributions) {\n const missingAnchors = this.getMissingAnchors();\n\n // Get object id from first anchor\n const objectId = missingAnchors?.[0]?.objectid ?? \"\";\n const contributions = this.contributions.objects?.[objectId];\n if (contributions) {\n return new FormObjectModel(missingAnchors[0], contributions);\n }\n }\n\n return null;\n }\n\n /**\n */\n addEmptyFormObject(\n formObjectModel: FormObjectModel | null = this.currentFormObject\n ) {\n if (formObjectModel) {\n const emptyFormObject = FormObjectModel.createEmpty(formObjectModel);\n\n emptyFormObject.repeatIndex =\n this.getHighestRepeatIndex(formObjectModel) + 1;\n\n this.addFormObject(emptyFormObject);\n }\n }\n\n /**\n */\n getHighestRepeatIndex(formObjectModel: FormObjectModel): number {\n return Math.max(\n ...this.allObjects\n .filter((formObject) => formObject.equals(formObjectModel, false))\n .map((formObject) => formObject.repeatIndex)\n );\n }\n\n /**\n */\n addFormObject(formObjectModel: FormObjectModel) {\n if (!formObjectModel) {\n throw new IllegalArgumentException(\"Missing form object to add\");\n }\n\n this.completedFormObjects = [...this.allObjects];\n this.currentFormObject = formObjectModel;\n }\n\n /**\n * Retrieve a form object by the key\n */\n getFormObjectByKey(key: string): ?FormObjectModel {\n return this.allObjects.find((formObject) => formObject.key === key);\n }\n\n /**\n * Retrieve a form object by a layouthint\n */\n getFormObjectByLayoutHint(hint: string): ?FormObjectModel {\n return this.allObjects.find((formObject) =>\n formObject.layouthint.has(hint)\n );\n }\n\n /**\n */\n removeFormObject(formObjectModel: ?FormObjectModel) {\n if (!formObjectModel) {\n throw new IllegalArgumentException(\"Missing form object to remove\");\n }\n if (formObjectModel.equals(this.currentFormObject)) {\n throw new IllegalArgumentException(\n \"Can not remove the current form object\"\n );\n }\n\n this.completedFormObjects = this.completedFormObjects.filter(\n (formObject) => !formObject.equals(formObjectModel)\n );\n }\n\n /**\n */\n get currentFormObject(): FormObjectModel | null {\n return this._currentFormObject;\n }\n\n /**\n */\n set currentFormObject(formObject: FormObjectModel | null) {\n this._currentFormObject = formObject;\n }\n\n /**\n * Completed objects are previously entered questions\n */\n get completedFormObjects(): Array<FormObjectModel> {\n return this._completedFormObjects;\n }\n\n /**\n */\n set completedFormObjects(formObjects: Array<FormObjectModel>) {\n this._completedFormObjects = formObjects;\n }\n\n /**\n * Previously entered objects are questions that have been entered before,\n * but are currently not applicable for the form.\n * For example because of previous navigation\n */\n get previouslyEnteredFormObjects(): Array<FormObjectModel> {\n return this._previouslyEnteredFormObjects;\n }\n\n /**\n */\n set previouslyEnteredFormObjects(formObjects: Array<FormObjectModel>) {\n this._previouslyEnteredFormObjects = formObjects;\n }\n\n /**\n * Handle end results\n */\n setEndResultFormObjects(): Array<FormObjectModel> {\n if (this.data && this.data.results) {\n const missingObjects = this.data.missing?.anchors ?? [];\n const missingObjectIds = missingObjects.map((anchor) => anchor.objectid);\n\n // Filter out intermediate results and rename elements property to result property\n const endResultAnchors = this.data.results\n .filter((result) => !missingObjectIds.includes(result.objectid))\n .map((result) => {\n const { elements, ...otherProps } = result;\n\n return {\n ...otherProps,\n results: elements,\n };\n });\n\n if (endResultAnchors.length > 0) {\n return endResultAnchors.map(\n (endResult) =>\n new FormObjectModel(\n endResult,\n this.contributions.objects[endResult.objectid]\n )\n );\n }\n }\n\n return [];\n }\n\n /**\n */\n get expectsEndResultFormObjects(): boolean {\n const endResultKeys = this.endResultFormObjects.map(\n (endResult) => endResult.key\n );\n\n return this.objectKeys.some(\n (objectKey) =>\n this.contributions.objects?.[objectKey]?.content?.results &&\n !endResultKeys.includes(objectKey)\n );\n }\n\n /**\n */\n get endResultFormObjects(): Array<FormObjectModel> {\n return this._endResultFormObjects;\n }\n\n /**\n */\n getEndResultFormObjects(): Array<FormObjectModel> {\n return this.endResultFormObjects.filter(\n (endResult) => !this.previousEndResultKeys.includes(endResult.key)\n );\n }\n\n /**\n */\n set endResultFormObjects(endResultFormObjects: Array<FormObjectModel>) {\n this.previousEndResultKeys = this.endResultFormObjects.map(\n (endResult) => endResult.key\n );\n this._endResultFormObjects = endResultFormObjects;\n }\n\n /**\n */\n get previousEndResultKeys(): Array<string> {\n return this._previousEndResultKeys;\n }\n\n /**\n */\n set previousEndResultKeys(endResultFormObjectKeys: Array<string>) {\n this._previousEndResultKeys = endResultFormObjectKeys;\n }\n\n /**\n * Error handling\n */\n get isValid(): boolean {\n if (this.currentFormObject) {\n if (this.currentFormObject.isRepeatable) {\n // repeating objects need at least one valid form object\n const hasOneValidQuestion = this.allObjects\n .filter((object) => object.equals(this.currentFormObject, false))\n .find((object) => object.isValid);\n\n if (hasOneValidQuestion) {\n return true;\n }\n }\n\n return this.currentFormObject?.isValid ?? true;\n }\n\n return true;\n }\n\n /**\n */\n hasServerErrors(): boolean {\n if (this.errorCollection.hasItems) {\n return true;\n }\n\n if (this.currentFormObject) {\n return this.currentFormObject.hasServerErrors();\n }\n\n return false;\n }\n\n /**\n */\n hasErrors(): boolean {\n if (this.errorCollection.hasItems) {\n return true;\n }\n\n if (this.currentFormObject) {\n return this.currentFormObject.hasErrors();\n }\n\n return false;\n }\n\n /**\n * Add an error to the error collection of this form\n */\n addServerError(error: ErrorResponse) {\n if (error.parameters) {\n this.errorCollection.addServerError(\n error.id,\n error.message,\n error.parameters\n );\n } else {\n this.errorCollection.addServerError(error.id, error.message);\n }\n }\n\n /**\n * Reset error messages\n */\n resetErrors() {\n this._errorCollection = new ErrorCollection(\"form\");\n\n if (this.currentFormObject) {\n this.currentFormObject.resetErrors();\n }\n }\n\n /**\n */\n get errorCollection(): ErrorCollection {\n return this._errorCollection;\n }\n\n /**\n */\n set errorCollection(errorCollection: ErrorCollection) {\n this._errorCollection = errorCollection;\n }\n\n /**\n * Indicates if the form needs to be committed\n */\n get commit(): boolean {\n return this._commit || false;\n }\n\n /**\n */\n set commit(commit: boolean) {\n this._commit = commit;\n }\n\n /**\n * Inidicates if form is finished: Form is completely entered and committed\n */\n get isFinished(): boolean {\n return this._isFinished || \"success\" in this.data;\n }\n\n /**\n */\n set isFinished(isFinished: boolean) {\n this._isFinished = isFinished;\n }\n\n /**\n * Indicates if form is completely entered\n */\n get isComplete(): boolean {\n return this._isComplete;\n }\n\n /**\n */\n set isComplete(isComplete: boolean) {\n this._isComplete = isComplete;\n }\n\n /**\n * Handle success redirects\n */\n get successRedirect(): Href | null {\n return this.isFinished && this.data.success\n ? new Href(this.data.success.redirect)\n : null;\n }\n\n /**\n */\n get redirectLocation(): Href {\n return this._redirectLocation || this.successRedirect;\n }\n\n /**\n */\n getSuccessData(): Object {\n return this.data.success?.data;\n }\n\n /**\n * Href handling\n */\n setParameters(modularuiResponse: ModularUIResponse): Array<Parameter> {\n const parameters = modularuiResponse?.parameters ?? [];\n return parameters.map(\n (par) => new Parameter(par._prefix, par._name, par._value)\n );\n }\n\n /**\n */\n get parameters(): Array<Parameter> {\n return this._parameters;\n }\n\n /**\n */\n set parameters(parameters: Array<Parameter>) {\n this._parameters = parameters;\n }\n\n /**\n */\n selfhrefNoCommitParam(): Href {\n const selfhref = this.selflink.href;\n selfhref.method = HTTP_METHODS.POST;\n\n selfhref.parameters = this.parameters.filter(\n (parameter) => parameter.name !== \"commit\"\n );\n\n return selfhref;\n }\n\n /**\n */\n selfhrefWithCommitParam(): Href {\n const selfhref = this.selfhrefNoCommitParam();\n\n if (this.expectsEndResultFormObjects && !this.isComplete && !this.commit) {\n selfhref.addParameter(\"commit\", \"false\");\n }\n\n return selfhref;\n }\n\n /**\n * Create a selfhref including the parameters that are used to start this form\n */\n get selfhref(): Href {\n if (!this.selflink) {\n throw new Error(\"No self link found for form\");\n }\n\n if (getSetting(\"ALWAYS_COMMIT_FORM\")) {\n return this.selfhrefNoCommitParam();\n }\n\n return this.selfhrefWithCommitParam();\n }\n\n /**\n * Handle form tokens to indicate concurrent form use\n */\n get tokens(): Array<string> {\n if (!this._tokens) {\n this._tokens = this.data.tokens ?? [];\n }\n return this._tokens;\n }\n\n /**\n * Replaces all tokens with the given collection of tokens\n */\n set tokens(tokens: Array<string>) {\n this._tokens = tokens;\n }\n\n /**\n * Removes all tokens from the form\n */\n removeTokens() {\n this._tokens = [];\n }\n\n /**\n * Keep track of changed form\n */\n isChanged(): boolean {\n return (\n this.currentFormObject !== null &&\n this.currentFormObject.isChangedSince(this.lastUpdate)\n );\n }\n\n /**\n */\n get lastUpdate(): number {\n return this._lastUpdate;\n }\n\n /**\n */\n set lastUpdate(lastUpdate: number) {\n this._lastUpdate = lastUpdate;\n }\n\n /**\n */\n getFormDataObjects(\n validOnly: boolean = true,\n validationData: boolean = false\n ): Array<Object> {\n const formdata = [];\n\n const formObjects = this.allObjects.filter((formObject, index) => {\n // repeatabe object without fixed nr of repeats, remove last form object from formdata,\n // because this is the formobject that is used as a placeholder for the create object\n // of the collection of repeats\n if (formObject.isRepeatable && !formObject.hasFixedNrOfRepeats) {\n const isLastRepeat =\n index === this.allObjects.length - 1 ||\n this.allObjects[index + 1].key !== formObject.key;\n\n if (isLastRepeat) {\n return false;\n }\n }\n\n return formObject.isValid || !validOnly;\n });\n\n formObjects.forEach((formObject) => {\n const objectFormData = formObject.getFormData(validationData);\n\n const existingObjectIndex = formdata.findIndex(\n (obj) =>\n obj.key === formObject.key &&\n obj.repeatIndex === formObject.repeatIndex\n );\n\n /*\n * when the object already exists in the formdata with the same key and index,\n * merge the attributes of both objects together\n */\n if (existingObjectIndex > -1) {\n formdata[existingObjectIndex].formdata = deepmerge(\n formdata[existingObjectIndex].formdata,\n objectFormData\n );\n } else {\n formdata.push({\n key: formObject.key,\n repeatIndex: formObject.repeatIndex,\n formdata: objectFormData,\n });\n }\n });\n\n return formdata.map((obj) => ({ [obj.key]: obj.formdata }));\n }\n\n /**\n */\n getFormData(\n validOnly: boolean = true,\n withConcurrencyToken: boolean = true,\n validationData: boolean = false\n ): string {\n if (withConcurrencyToken && this.tokens.length > 0) {\n return JSON.stringify({\n objects: this.getFormDataObjects(validOnly, validationData),\n tokens: this.tokens,\n });\n }\n\n return JSON.stringify({\n objects: this.getFormDataObjects(validOnly, validationData),\n });\n }\n\n /**\n * Used to programmatically overwrite the setting USE_CLIENTSIDE_VALIDATION\n */\n setUseClientsideValidation(enabled: boolean) {\n this._useClientsideValidation = enabled;\n\n this.allObjects.forEach((formObject) => {\n formObject.attributeCollection.all.forEach((item: AttributeType) =>\n item.setUseClientsideValidation(enabled)\n );\n });\n }\n\n /**\n * Indicates if client side validation is enabled\n * @returns {boolean}\n */\n useClientsideValidation(): boolean {\n return this._useClientsideValidation ?? true;\n }\n\n /**\n * Get form data for submitting\n */\n get formdata(): string {\n return this.getFormData(this.useClientsideValidation());\n }\n\n /**\n */\n get validationData(): string {\n return this.getFormData(false, false, true);\n }\n\n /**\n * Form navigation: Go one object back (previous button)\n */\n get hasPreviousStep(): boolean {\n const currentFormObjectKey =\n this.currentFormObject != null ? this.currentFormObject.key : \"\";\n\n return (\n this.completedFormObjects.filter(\n (formObject) =>\n !formObject.isRepeatWithUnknownTotal ||\n formObject.key !== currentFormObjectKey\n ).length > 0\n );\n }\n\n /**\n * Go one form-object back,\n * for repeating object this means go back\n * until we get at a form object that had\n * a different key than the current form object\n */\n setPreviousObject() {\n this.isComplete = false;\n\n const oldCurrentFormObject = this.currentFormObject;\n\n if (this.currentFormObject !== null) {\n this.previouslyEnteredFormObjects = [\n this.currentFormObject,\n ...this.previouslyEnteredFormObjects,\n ];\n }\n\n this.currentFormObject =\n this.completedFormObjects[this.completedFormObjects.length - 1];\n this.completedFormObjects = this.completedFormObjects.slice(0, -1);\n\n const completedFormObjectKeys = this.completedFormObjects\n .map((formObject) => formObject.key)\n .filter((formObjectKey) => formObjectKey !== this.currentFormObject?.key);\n\n this.endResultFormObjects = this._endResultFormObjects.filter((endResult) =>\n completedFormObjectKeys.includes(endResult.key)\n );\n this.previousEndResultKeys = this.endResultFormObjects.map(\n (endResult) => endResult.key\n );\n\n // while we are at the same repeating form object, go a step back\n if (\n this.currentFormObject &&\n this.currentFormObject.equals(\n oldCurrentFormObject,\n this.currentFormObject.hasFixedNrOfRepeats\n )\n ) {\n this.setPreviousObject();\n }\n }\n\n /**\n * Form navigation: has next step or is last\n */\n get hasNextStep(): boolean {\n if (\n this.isComplete ||\n this.isFinished ||\n this.hasNoQuestionsConfigured ||\n !this.contributions.objects\n ) {\n return false;\n }\n\n // current object is a dynamic object\n if (this.currentFormObject && this.currentFormObject.isDynamic) {\n return true;\n }\n\n if (this.expectsEndResultFormObjects) {\n return true;\n }\n\n const currentObjectIndex = this.objectKeys.findIndex(\n (objectKey) => objectKey === this.currentFormObject?.key\n );\n const isLastObject = this.objectKeys.length - 1 === currentObjectIndex;\n\n // current object is a repeating question but it is not the last one\n if (\n isLastObject &&\n this.currentFormObject &&\n this.currentFormObject.isRepeatable &&\n !this.currentFormObject.isLastRepeat\n ) {\n return true;\n }\n\n // current object is not repeatable and the last object\n if (isLastObject) {\n return false;\n }\n\n // can't determine if this is te last, render a next button\n return true;\n }\n\n /**\n * Merge existing form with new form\n */\n update(receivedForm: ModularUIModel): FormModel {\n if (receivedForm instanceof FormModel) {\n this.resetErrors();\n\n this.lastUpdate = Date.now();\n this.lastServerUpdate = receivedForm.lastServerUpdate;\n\n this.tokens = receivedForm.tokens;\n\n this.isComplete = receivedForm.isComplete;\n this.isFinished = receivedForm.isFinished;\n\n const receivedFormData = receivedForm.data ?? {};\n const hasMissing = has(receivedFormData, \"missing\");\n const hasErrors = has(receivedFormData, \"errors\");\n\n if (!hasMissing && !hasErrors) {\n this.handleFinished(receivedForm);\n }\n\n if (hasErrors) {\n this.handleErrors(receivedForm);\n }\n\n if (hasMissing) {\n this.handleMissing(receivedForm);\n }\n }\n\n return this;\n }\n\n /**\n */\n updateValidations(data: any): FormModel {\n if (this.currentFormObject) {\n this.currentFormObject.updateValidations(data);\n }\n\n return this;\n }\n\n /**\n * Process finished form\n */\n handleFinished(receivedForm: FormModel) {\n if (this.currentFormObject) {\n this.completedFormObjects = [\n ...this.completedFormObjects,\n this.currentFormObject,\n ];\n }\n\n this.currentFormObject = receivedForm.currentFormObject;\n this.endResultFormObjects = receivedForm.endResultFormObjects;\n\n this._data = receivedForm._data;\n }\n\n /**\n */\n handleRootErrors(errors: Array<Object>) {\n errors\n .filter((error) => !error.anchor)\n .forEach((error) => {\n this.errorCollection.addServerError(\n error.id,\n error.message,\n error.properties\n );\n });\n }\n\n /**\n * Process errors from received form\n */\n handleErrors(receivedForm: FormModel) {\n const errorAnchors = receivedForm.data.errors;\n if (errorAnchors) {\n errorAnchors.forEach((error) => {\n if (\n error.anchor &&\n this.currentFormObject &&\n this.currentFormObject.key === error.anchor.objectid\n ) {\n this.currentFormObject.addServerError(error);\n } else {\n this.errorCollection.addServerError(\n error.id,\n error.message,\n error.properties\n );\n }\n });\n }\n }\n\n /**\n * Process missing from received form\n */\n handleMissing(receivedForm: FormModel) {\n if (\n this.currentFormObject &&\n this.currentFormObject.equals(receivedForm.currentFormObject)\n ) {\n this.handleMissingErrors(receivedForm);\n } else {\n this.handleNewFormObject(receivedForm);\n }\n }\n\n /**\n * Received missing anchors in the response with an object id that is the current form object\n */\n processMissingErrors(receivedForm: FormModel): FormObjectModel | null {\n if (this.currentFormObject === null) {\n return null;\n }\n\n this.currentFormObject.attributeCollection.map((attribute) => {\n if (\n receivedForm.currentFormObject &&\n receivedForm.currentFormObject.hasAttributeByKey(attribute.key)\n ) {\n attribute.addMissingError();\n } else {\n attribute.removeMissingError();\n }\n\n return attribute;\n });\n\n return this.currentFormObject;\n }\n\n /**\n */\n handleMissingErrors(receivedForm: FormModel) {\n this.currentFormObject = this.processMissingErrors(receivedForm);\n }\n\n /**\n */\n handleNewFormObject(receivedForm: FormModel) {\n this.endResultFormObjects = receivedForm.endResultFormObjects;\n\n const receivedCurrentFormObject = receivedForm.currentFormObject;\n\n if (receivedCurrentFormObject === null) {\n this.completedFormObjects = [...this.allObjects];\n this.currentFormObject = null;\n } else {\n // check if received form exists in the previously entered form objects\n const previouslyEnteredFormObjects =\n this.previouslyEnteredFormObjects.filter((formObject) =>\n formObject.equals(\n receivedCurrentFormObject,\n formObject.hasFixedNrOfRepeats\n )\n );\n\n if (previouslyEnteredFormObjects.length > 0) {\n this.handlePreviouslyEnteredFormObjects(\n receivedCurrentFormObject,\n previouslyEnteredFormObjects\n );\n } else {\n this.completedFormObjects = [...this.allObjects];\n this.currentFormObject = receivedCurrentFormObject;\n }\n }\n }\n\n /**\n * Indicate if a new form object model should be merged with a previousled entered form object model\n * Set this property to false on the form that receives the new form to skip the merge behavior\n */\n get mergePreviouslyEnteredObjects(): boolean {\n return this._mergePreviouslyEnteredObjects;\n }\n\n /**\n */\n set mergePreviouslyEnteredObjects(mergePreviouslyEnteredObjects: boolean) {\n this._mergePreviouslyEnteredObjects = mergePreviouslyEnteredObjects;\n }\n\n /**\n */\n handlePreviouslyEnteredFormObjects(\n receivedCurrentFormObject: FormObjectModel,\n previouslyEnteredFormObjects: Array<FormObjectModel>\n ) {\n previouslyEnteredFormObjects.forEach((previouslyEnteredFormObject) => {\n const mergedObject = this.mergePreviouslyEnteredObjects\n ? this.mergeObjects(\n receivedCurrentFormObject,\n previouslyEnteredFormObject\n )\n : receivedCurrentFormObject;\n\n this.addFormObject(mergedObject);\n });\n\n // remove the previously entered form object\n this.previouslyEnteredFormObjects =\n this.previouslyEnteredFormObjects.filter((formObject) => {\n const hasPreviouslyEnteredObject = previouslyEnteredFormObjects.find(\n (previouslyEnteredFormObject) =>\n formObject.equals(previouslyEnteredFormObject)\n );\n\n return !hasPreviouslyEnteredObject;\n });\n }\n\n /**\n */\n mergeObjects(\n newObject: FormObjectModel,\n oldObject: FormObjectModel\n ): FormObjectModel {\n const mergedFormObject = FormObjectModel.createEmpty(newObject);\n\n mergedFormObject.mergeObject(oldObject);\n\n return mergedFormObject;\n }\n\n /**\n */\n findAttribute(findMethod: Function): AttributeType | null {\n let foundAttribute = null;\n\n this.allObjects.forEach((formObject) => {\n if (foundAttribute === null) {\n foundAttribute =\n formObject.attributeCollection.all.find((item) => findMethod(item)) ||\n null;\n }\n });\n\n return foundAttribute;\n }\n}\n\nexport default FormModel;\n"],"mappings":"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"}
1
+ {"version":3,"file":"FormModel.js","names":["flattenDeep","deepmerge","get","has","IllegalArgumentException","ResourceModel","ErrorCollection","Href","Parameter","FormObjectModel","HTTP_METHODS","getSetting","CREATE_ACTION","DELETE_ACTION","UPDATE_ACTION","FormModel","modularuiResponse","lastUpdate","currentFormObject","createFormObject","endResultFormObjects","setEndResultFormObjects","parameters","setParameters","isComplete","getData","data","errors","handleRootErrors","layouthint","getContribution","endResultChildLinks","endResultFormObject","getInitialChildModelLinks","models","setChildModels","forEach","buttonType","buttonLabels","completedFormObjects","contributions","objects","objectKeys","length","anchor","dynamicschema","elements","element","item","missingAnchors","missing","anchors","results","resultObject","result","objectid","addGlobalDynamicSchema","getMissingAnchors","objectId","formObjectModel","emptyFormObject","createEmpty","repeatIndex","getHighestRepeatIndex","addFormObject","Math","max","allObjects","formObject","equals","key","hint","_currentFormObject","_completedFormObjects","formObjects","_previouslyEnteredFormObjects","missingObjects","missingObjectIds","endResultAnchors","otherProps","endResult","endResultKeys","some","objectKey","content","_endResultFormObjects","previousEndResultKeys","_previousEndResultKeys","endResultFormObjectKeys","isRepeatable","hasOneValidQuestion","object","isValid","errorCollection","hasItems","hasServerErrors","hasErrors","error","addServerError","id","message","_errorCollection","resetErrors","_commit","commit","_isFinished","isFinished","_isComplete","success","redirect","_redirectLocation","successRedirect","par","_prefix","_name","_value","_parameters","selfhref","selflink","href","method","POST","parameter","name","selfhrefNoCommitParam","expectsEndResultFormObjects","addParameter","Error","selfhrefWithCommitParam","_tokens","tokens","isChangedSince","_lastUpdate","validOnly","validationData","formdata","index","hasFixedNrOfRepeats","isLastRepeat","objectFormData","getFormData","existingObjectIndex","obj","push","withConcurrencyToken","getFormDataObjects","enabled","_useClientsideValidation","attributeCollection","all","setUseClientsideValidation","useClientsideValidation","currentFormObjectKey","isRepeatWithUnknownTotal","oldCurrentFormObject","previouslyEnteredFormObjects","completedFormObjectKeys","formObjectKey","setPreviousObject","hasNoQuestionsConfigured","isDynamic","currentObjectIndex","isLastObject","receivedForm","Date","now","lastServerUpdate","receivedFormData","hasMissing","handleFinished","handleErrors","handleMissing","updateValidations","_data","properties","errorAnchors","handleMissingErrors","handleNewFormObject","attribute","hasAttributeByKey","addMissingError","removeMissingError","processMissingErrors","receivedCurrentFormObject","handlePreviouslyEnteredFormObjects","_mergePreviouslyEnteredObjects","mergePreviouslyEnteredObjects","previouslyEnteredFormObject","mergedObject","mergeObjects","hasPreviouslyEnteredObject","newObject","oldObject","mergedFormObject","mergeObject","findMethod","foundAttribute","resourcetype"],"sources":["../../../src/models/form/FormModel.js"],"sourcesContent":["// @flow\nimport flattenDeep from \"lodash/flattenDeep\";\nimport deepmerge from \"deepmerge\";\nimport { get } from \"lodash\";\n\nimport { has } from \"../../utils/helpers/objects\";\n\nimport { IllegalArgumentException } from \"../../exceptions\";\n\nimport ResourceModel from \"../base/ResourceModel\";\nimport ErrorCollection from \"../error/ErrorCollection\";\n\nimport Href from \"../href/Href\";\nimport Parameter from \"../parameter/Parameter\";\n\nimport FormObjectModel from \"./FormObjectModel\";\n\nimport { HTTP_METHODS } from \"../../constants/Constants\";\nimport { getSetting } from \"../../constants/Settings\";\nimport {\n CREATE_ACTION,\n DELETE_ACTION,\n UPDATE_ACTION,\n} from \"../../constants/LayoutHints\";\n\nimport type { AttributeType, ModularUIModel } from \"../types\";\nimport type { ModularUIResponse } from \"../../modularui\";\nimport type ErrorResponse from \"../error/ErrorResponse\";\nimport type LinkModel from \"../links/LinkModel\";\n\n/**\n */\nclass FormModel extends ResourceModel {\n _lastUpdate: number;\n\n _completedFormObjects: Array<FormObjectModel> = [];\n _currentFormObject: FormObjectModel | null = null;\n _previouslyEnteredFormObjects: Array<FormObjectModel> = [];\n\n _mergePreviouslyEnteredObjects: boolean = true;\n\n _endResultFormObjects: Array<FormObjectModel> = [];\n _previousEndResultKeys: Array<string> = [];\n\n _useClientsideValidation: boolean = getSetting(\"USE_CLIENTSIDE_VALIDATION\");\n _errorCollection: ErrorCollection = new ErrorCollection(\"form\");\n\n _redirectLocation: Href;\n\n _commit: boolean;\n _isFinished: boolean;\n _isComplete: boolean;\n\n _parameters: Array<Parameter>;\n _tokens: Array<string>;\n\n /**\n */\n constructor(modularuiResponse: ModularUIResponse) {\n super(modularuiResponse);\n\n this.lastUpdate = 0;\n\n this.currentFormObject = this.createFormObject();\n this.endResultFormObjects = this.setEndResultFormObjects();\n\n this.parameters = this.setParameters(modularuiResponse);\n\n this.isComplete = this.getData(\"complete\", false);\n\n if (this.data.errors) {\n this.handleRootErrors(this.data.errors);\n }\n }\n\n /**\n */\n get type(): string {\n return \"Form\";\n }\n\n /**\n */\n get actiontype(): string {\n if (this.layouthint.has(CREATE_ACTION)) {\n return \"create\";\n }\n if (this.layouthint.has(UPDATE_ACTION)) {\n return \"update\";\n }\n if (this.layouthint.has(DELETE_ACTION)) {\n return \"delete\";\n }\n\n return this.getContribution(\"actiontype\", \"form\");\n }\n\n /**\n */\n static isApplicableModel(data: ModularUIResponse): boolean {\n return (\n data.contributions.resourcetype &&\n data.contributions.resourcetype === \"Form\"\n );\n }\n\n /**\n */\n getInitialChildModelLinks(): Array<LinkModel> {\n const endResultChildLinks = flattenDeep(\n this.endResultFormObjects.map((endResultFormObject) =>\n endResultFormObject.getInitialChildModelLinks()\n )\n );\n\n if (this.currentFormObject === null) {\n return endResultChildLinks;\n }\n\n return [\n ...this.currentFormObject.getInitialChildModelLinks(),\n ...endResultChildLinks,\n ];\n }\n\n /**\n */\n setChildModels(models: Array<ModularUIModel>) {\n if (this.currentFormObject) {\n this.currentFormObject.setChildModels(models);\n }\n\n this.endResultFormObjects.forEach((endResultFormObject) => {\n endResultFormObject.setChildModels(models);\n });\n }\n\n /**\n */\n get label(): string {\n return this.getContribution(\"label\", \"\");\n }\n\n /**\n * Get form level button labels\n */\n get buttonLabels(): Object {\n return this.getContribution(\"buttonLabels\", {});\n }\n\n /**\n * @returns button label from contributions;\n */\n getButtonLabel(\n buttonType: \"cancel\" | \"previous\" | \"next\" | \"finish\"\n ): string | null {\n // cancel button labels are defined on the form\n if (buttonType === \"cancel\") {\n return get(this.buttonLabels, \"cancel\", null);\n }\n\n // all other form related button labels are defined on the object\n return get(this.currentFormObject?.buttonLabels, buttonType, null);\n }\n\n /**\n * Get all applicable objects\n */\n get allObjects(): Array<FormObjectModel> {\n if (this.currentFormObject === null) {\n return this.completedFormObjects;\n }\n\n return [...this.completedFormObjects, this.currentFormObject];\n }\n\n /**\n */\n get objectKeys(): Array<string> {\n if (has(this.contributions, \"objects\")) {\n return Object.keys(this.contributions.objects);\n }\n\n return [];\n }\n\n /**\n */\n get numberOfExpectedQuestions(): number {\n return this.objectKeys.length;\n }\n\n /**\n * Has questions configured on form\n */\n get hasNoQuestionsConfigured(): boolean {\n return (\n this.isComplete &&\n (this.objectKeys.length === 0 ||\n (!(\"missing\" in this.data) &&\n !(\"results\" in this.data) &&\n !(\"errors\" in this.data)))\n );\n }\n\n /**\n */\n addGlobalDynamicSchema(anchor: Object, dynamicschema: Object): Object {\n if (!dynamicschema) {\n return anchor;\n }\n\n return {\n ...anchor,\n elements: anchor.elements.map((element) => ({\n ...element,\n dynamicschema: element.dynamicschema\n ? element.dynamicschema.map((item) => ({\n ...item,\n elements: { ...item.elements, dynamicschema },\n }))\n : null,\n })),\n };\n }\n\n /**\n */\n getMissingAnchors(): Array<Object> {\n const missingAnchors = this.data.missing?.anchors ?? [];\n\n // Add intermediate result data to anchor\n return missingAnchors.map((anchor) => {\n if (this.data.results) {\n const resultObject = this.data.results.find(\n (result) =>\n result.objectid === anchor.objectid && \"elements\" in result\n );\n\n if (resultObject) {\n anchor.results = resultObject.elements;\n }\n }\n\n return this.addGlobalDynamicSchema(anchor, this.data.dynamicschema);\n });\n }\n\n /**\n * Create form object based on the data and contributions available in this form\n */\n createFormObject(): FormObjectModel | null {\n if (this.data && this.contributions) {\n const missingAnchors = this.getMissingAnchors();\n\n // Get object id from first anchor\n const objectId = missingAnchors?.[0]?.objectid ?? \"\";\n const contributions = this.contributions.objects?.[objectId];\n if (contributions) {\n return new FormObjectModel(missingAnchors[0], contributions);\n }\n }\n\n return null;\n }\n\n /**\n */\n addEmptyFormObject(\n formObjectModel: FormObjectModel | null = this.currentFormObject\n ) {\n if (formObjectModel) {\n const emptyFormObject = FormObjectModel.createEmpty(formObjectModel);\n\n emptyFormObject.repeatIndex =\n this.getHighestRepeatIndex(formObjectModel) + 1;\n\n this.addFormObject(emptyFormObject);\n }\n }\n\n /**\n */\n getHighestRepeatIndex(formObjectModel: FormObjectModel): number {\n return Math.max(\n ...this.allObjects\n .filter((formObject) => formObject.equals(formObjectModel, false))\n .map((formObject) => formObject.repeatIndex)\n );\n }\n\n /**\n */\n addFormObject(formObjectModel: FormObjectModel) {\n if (!formObjectModel) {\n throw new IllegalArgumentException(\"Missing form object to add\");\n }\n\n this.completedFormObjects = [...this.allObjects];\n this.currentFormObject = formObjectModel;\n }\n\n /**\n * Retrieve a form object by the key\n */\n getFormObjectByKey(key: string): ?FormObjectModel {\n return this.allObjects.find((formObject) => formObject.key === key);\n }\n\n /**\n * Retrieve a form object by a layouthint\n */\n getFormObjectByLayoutHint(hint: string): ?FormObjectModel {\n return this.allObjects.find((formObject) =>\n formObject.layouthint.has(hint)\n );\n }\n\n /**\n */\n removeFormObject(formObjectModel: ?FormObjectModel) {\n if (!formObjectModel) {\n throw new IllegalArgumentException(\"Missing form object to remove\");\n }\n if (formObjectModel.equals(this.currentFormObject)) {\n throw new IllegalArgumentException(\n \"Can not remove the current form object\"\n );\n }\n\n this.completedFormObjects = this.completedFormObjects.filter(\n (formObject) => !formObject.equals(formObjectModel)\n );\n }\n\n /**\n */\n get currentFormObject(): FormObjectModel | null {\n return this._currentFormObject;\n }\n\n /**\n */\n set currentFormObject(formObject: FormObjectModel | null) {\n this._currentFormObject = formObject;\n }\n\n /**\n * Completed objects are previously entered questions\n */\n get completedFormObjects(): Array<FormObjectModel> {\n return this._completedFormObjects;\n }\n\n /**\n */\n set completedFormObjects(formObjects: Array<FormObjectModel>) {\n this._completedFormObjects = formObjects;\n }\n\n /**\n * Previously entered objects are questions that have been entered before,\n * but are currently not applicable for the form.\n * For example because of previous navigation\n */\n get previouslyEnteredFormObjects(): Array<FormObjectModel> {\n return this._previouslyEnteredFormObjects;\n }\n\n /**\n */\n set previouslyEnteredFormObjects(formObjects: Array<FormObjectModel>) {\n this._previouslyEnteredFormObjects = formObjects;\n }\n\n /**\n * Handle end results\n */\n setEndResultFormObjects(): Array<FormObjectModel> {\n if (this.data && this.data.results) {\n const missingObjects = this.data.missing?.anchors ?? [];\n const missingObjectIds = missingObjects.map((anchor) => anchor.objectid);\n\n // Filter out intermediate results and rename elements property to result property\n const endResultAnchors = this.data.results\n .filter((result) => !missingObjectIds.includes(result.objectid))\n .map((result) => {\n const { elements, ...otherProps } = result;\n\n return {\n ...otherProps,\n results: elements,\n };\n });\n\n if (endResultAnchors.length > 0) {\n return endResultAnchors.map(\n (endResult) =>\n new FormObjectModel(\n endResult,\n this.contributions.objects[endResult.objectid]\n )\n );\n }\n }\n\n return [];\n }\n\n /**\n */\n get expectsEndResultFormObjects(): boolean {\n const endResultKeys = this.endResultFormObjects.map(\n (endResult) => endResult.key\n );\n\n return this.objectKeys.some(\n (objectKey) =>\n this.contributions.objects?.[objectKey]?.content?.results &&\n !endResultKeys.includes(objectKey)\n );\n }\n\n /**\n */\n get endResultFormObjects(): Array<FormObjectModel> {\n return this._endResultFormObjects;\n }\n\n /**\n */\n getEndResultFormObjects(): Array<FormObjectModel> {\n return this.endResultFormObjects.filter(\n (endResult) => !this.previousEndResultKeys.includes(endResult.key)\n );\n }\n\n /**\n */\n set endResultFormObjects(endResultFormObjects: Array<FormObjectModel>) {\n this.previousEndResultKeys = this.endResultFormObjects.map(\n (endResult) => endResult.key\n );\n this._endResultFormObjects = endResultFormObjects;\n }\n\n /**\n */\n get previousEndResultKeys(): Array<string> {\n return this._previousEndResultKeys;\n }\n\n /**\n */\n set previousEndResultKeys(endResultFormObjectKeys: Array<string>) {\n this._previousEndResultKeys = endResultFormObjectKeys;\n }\n\n /**\n * Error handling\n */\n get isValid(): boolean {\n if (this.currentFormObject) {\n if (this.currentFormObject.isRepeatable) {\n // repeating objects need at least one valid form object\n const hasOneValidQuestion = this.allObjects\n .filter((object) => object.equals(this.currentFormObject, false))\n .find((object) => object.isValid);\n\n if (hasOneValidQuestion) {\n return true;\n }\n }\n\n return this.currentFormObject?.isValid ?? true;\n }\n\n return true;\n }\n\n /**\n */\n hasServerErrors(): boolean {\n if (this.errorCollection.hasItems) {\n return true;\n }\n\n if (this.currentFormObject) {\n return this.currentFormObject.hasServerErrors();\n }\n\n return false;\n }\n\n /**\n */\n hasErrors(): boolean {\n if (this.errorCollection.hasItems) {\n return true;\n }\n\n if (this.currentFormObject) {\n return this.currentFormObject.hasErrors();\n }\n\n return false;\n }\n\n /**\n * Add an error to the error collection of this form\n */\n addServerError(error: ErrorResponse) {\n if (error.parameters) {\n this.errorCollection.addServerError(\n error.id,\n error.message,\n error.parameters\n );\n } else {\n this.errorCollection.addServerError(error.id, error.message);\n }\n }\n\n /**\n * Reset error messages\n */\n resetErrors() {\n this._errorCollection = new ErrorCollection(\"form\");\n\n if (this.currentFormObject) {\n this.currentFormObject.resetErrors();\n }\n }\n\n /**\n */\n get errorCollection(): ErrorCollection {\n return this._errorCollection;\n }\n\n /**\n */\n set errorCollection(errorCollection: ErrorCollection) {\n this._errorCollection = errorCollection;\n }\n\n /**\n * Indicates if the form needs to be committed\n */\n get commit(): boolean {\n return this._commit || false;\n }\n\n /**\n */\n set commit(commit: boolean) {\n this._commit = commit;\n }\n\n /**\n * Inidicates if form is finished: Form is completely entered and committed\n */\n get isFinished(): boolean {\n return this._isFinished || \"success\" in this.data;\n }\n\n /**\n */\n set isFinished(isFinished: boolean) {\n this._isFinished = isFinished;\n }\n\n /**\n * Indicates if form is completely entered\n */\n get isComplete(): boolean {\n return this._isComplete;\n }\n\n /**\n */\n set isComplete(isComplete: boolean) {\n this._isComplete = isComplete;\n }\n\n /**\n * Handle success redirects\n */\n get successRedirect(): Href | null {\n return this.isFinished && this.data.success\n ? new Href(this.data.success.redirect)\n : null;\n }\n\n /**\n */\n get redirectLocation(): Href {\n return this._redirectLocation || this.successRedirect;\n }\n\n /**\n */\n getSuccessData(): Object {\n return this.data.success?.data;\n }\n\n /**\n * Href handling\n */\n setParameters(modularuiResponse: ModularUIResponse): Array<Parameter> {\n const parameters = modularuiResponse?.parameters ?? [];\n return parameters.map(\n (par) => new Parameter(par._prefix, par._name, par._value)\n );\n }\n\n /**\n */\n get parameters(): Array<Parameter> {\n return this._parameters;\n }\n\n /**\n */\n set parameters(parameters: Array<Parameter>) {\n this._parameters = parameters;\n }\n\n /**\n */\n selfhrefNoCommitParam(): Href {\n const selfhref = this.selflink.href;\n selfhref.method = HTTP_METHODS.POST;\n\n selfhref.parameters = this.parameters.filter(\n (parameter) => parameter.name !== \"commit\"\n );\n\n return selfhref;\n }\n\n /**\n */\n selfhrefWithCommitParam(): Href {\n const selfhref = this.selfhrefNoCommitParam();\n\n if (this.expectsEndResultFormObjects && !this.isComplete && !this.commit) {\n selfhref.addParameter(\"commit\", \"false\");\n }\n\n return selfhref;\n }\n\n /**\n * Create a selfhref including the parameters that are used to start this form\n */\n get selfhref(): Href {\n if (!this.selflink) {\n throw new Error(\"No self link found for form\");\n }\n\n if (getSetting(\"ALWAYS_COMMIT_FORM\")) {\n return this.selfhrefNoCommitParam();\n }\n\n return this.selfhrefWithCommitParam();\n }\n\n /**\n * Handle form tokens to indicate concurrent form use\n */\n get tokens(): Array<string> {\n if (!this._tokens) {\n this._tokens = this.data.tokens ?? [];\n }\n return this._tokens;\n }\n\n /**\n * Replaces all tokens with the given collection of tokens\n */\n set tokens(tokens: Array<string>) {\n this._tokens = tokens;\n }\n\n /**\n * Removes all tokens from the form\n */\n removeTokens() {\n this._tokens = [];\n }\n\n /**\n * Keep track of changed form\n */\n isChanged(): boolean {\n return (\n this.currentFormObject !== null &&\n this.currentFormObject.isChangedSince(this.lastUpdate)\n );\n }\n\n /**\n */\n get lastUpdate(): number {\n return this._lastUpdate;\n }\n\n /**\n */\n set lastUpdate(lastUpdate: number) {\n this._lastUpdate = lastUpdate;\n }\n\n /**\n */\n getFormDataObjects(\n validOnly: boolean = true,\n validationData: boolean = false\n ): Array<Object> {\n const formdata = [];\n\n const formObjects = this.allObjects.filter((formObject, index) => {\n // repeatabe object without fixed nr of repeats, remove last form object from formdata,\n // because this is the formobject that is used as a placeholder for the create object\n // of the collection of repeats\n if (formObject.isRepeatable && !formObject.hasFixedNrOfRepeats) {\n const isLastRepeat =\n index === this.allObjects.length - 1 ||\n this.allObjects[index + 1].key !== formObject.key;\n\n if (isLastRepeat) {\n return false;\n }\n }\n\n return formObject.isValid || !validOnly;\n });\n\n formObjects.forEach((formObject) => {\n const objectFormData = formObject.getFormData(validationData);\n\n const existingObjectIndex = formdata.findIndex(\n (obj) =>\n obj.key === formObject.key &&\n obj.repeatIndex === formObject.repeatIndex\n );\n\n /*\n * when the object already exists in the formdata with the same key and index,\n * merge the attributes of both objects together\n */\n if (existingObjectIndex > -1) {\n formdata[existingObjectIndex].formdata = deepmerge(\n formdata[existingObjectIndex].formdata,\n objectFormData\n );\n } else {\n formdata.push({\n key: formObject.key,\n repeatIndex: formObject.repeatIndex,\n formdata: objectFormData,\n });\n }\n });\n\n return formdata.map((obj) => ({ [obj.key]: obj.formdata }));\n }\n\n /**\n */\n getFormData(\n validOnly: boolean = true,\n withConcurrencyToken: boolean = true,\n validationData: boolean = false\n ): string {\n if (withConcurrencyToken && this.tokens.length > 0) {\n return JSON.stringify({\n objects: this.getFormDataObjects(validOnly, validationData),\n tokens: this.tokens,\n });\n }\n\n return JSON.stringify({\n objects: this.getFormDataObjects(validOnly, validationData),\n });\n }\n\n /**\n * Used to programmatically overwrite the setting USE_CLIENTSIDE_VALIDATION\n */\n setUseClientsideValidation(enabled: boolean) {\n this._useClientsideValidation = enabled;\n\n this.allObjects.forEach((formObject) => {\n formObject.attributeCollection.all.forEach((item: AttributeType) =>\n item.setUseClientsideValidation(enabled)\n );\n });\n }\n\n /**\n * Indicates if client side validation is enabled\n * @returns {boolean}\n */\n useClientsideValidation(): boolean {\n return this._useClientsideValidation ?? true;\n }\n\n /**\n * Get form data for submitting\n */\n get formdata(): string {\n return this.getFormData(this.useClientsideValidation());\n }\n\n /**\n */\n get validationData(): string {\n return this.getFormData(false, false, true);\n }\n\n /**\n * Form navigation: Go one object back (previous button)\n */\n get hasPreviousStep(): boolean {\n const currentFormObjectKey =\n this.currentFormObject != null ? this.currentFormObject.key : \"\";\n\n return (\n this.completedFormObjects.filter(\n (formObject) =>\n !formObject.isRepeatWithUnknownTotal ||\n formObject.key !== currentFormObjectKey\n ).length > 0\n );\n }\n\n /**\n * Go one form-object back,\n * for repeating object this means go back\n * until we get at a form object that had\n * a different key than the current form object\n */\n setPreviousObject() {\n this.isComplete = false;\n\n const oldCurrentFormObject = this.currentFormObject;\n\n if (this.currentFormObject !== null) {\n this.previouslyEnteredFormObjects = [\n this.currentFormObject,\n ...this.previouslyEnteredFormObjects,\n ];\n }\n\n this.currentFormObject =\n this.completedFormObjects[this.completedFormObjects.length - 1];\n this.completedFormObjects = this.completedFormObjects.slice(0, -1);\n\n const completedFormObjectKeys = this.completedFormObjects\n .map((formObject) => formObject.key)\n .filter((formObjectKey) => formObjectKey !== this.currentFormObject?.key);\n\n this.endResultFormObjects = this._endResultFormObjects.filter((endResult) =>\n completedFormObjectKeys.includes(endResult.key)\n );\n this.previousEndResultKeys = this.endResultFormObjects.map(\n (endResult) => endResult.key\n );\n\n // while we are at the same repeating form object, go a step back\n if (\n this.currentFormObject &&\n this.currentFormObject.equals(\n oldCurrentFormObject,\n this.currentFormObject.hasFixedNrOfRepeats\n )\n ) {\n this.setPreviousObject();\n }\n }\n\n /**\n * Form navigation: has next step or is last\n */\n get hasNextStep(): boolean {\n if (\n this.isComplete ||\n this.isFinished ||\n this.hasNoQuestionsConfigured ||\n !this.contributions.objects\n ) {\n return false;\n }\n\n // current object is a dynamic object\n if (this.currentFormObject && this.currentFormObject.isDynamic) {\n return true;\n }\n\n if (this.expectsEndResultFormObjects) {\n return true;\n }\n\n const currentObjectIndex = this.objectKeys.findIndex(\n (objectKey) => objectKey === this.currentFormObject?.key\n );\n const isLastObject = this.objectKeys.length - 1 === currentObjectIndex;\n\n // current object is a repeating question but it is not the last one\n if (\n isLastObject &&\n this.currentFormObject &&\n this.currentFormObject.isRepeatable &&\n !this.currentFormObject.isLastRepeat\n ) {\n return true;\n }\n\n // current object is not repeatable and the last object\n if (isLastObject) {\n return false;\n }\n\n // can't determine if this is te last, render a next button\n return true;\n }\n\n /**\n * Merge existing form with new form\n */\n update(receivedForm: ModularUIModel): FormModel {\n if (receivedForm instanceof FormModel) {\n this.resetErrors();\n\n this.lastUpdate = Date.now();\n this.lastServerUpdate = receivedForm.lastServerUpdate;\n\n this.tokens = receivedForm.tokens;\n\n this.isComplete = receivedForm.isComplete;\n this.isFinished = receivedForm.isFinished;\n\n const receivedFormData = receivedForm.data ?? {};\n const hasMissing = has(receivedFormData, \"missing\");\n const hasErrors = has(receivedFormData, \"errors\");\n\n if (!hasMissing && !hasErrors) {\n this.handleFinished(receivedForm);\n }\n\n if (hasErrors) {\n this.handleErrors(receivedForm);\n }\n\n if (hasMissing) {\n this.handleMissing(receivedForm);\n }\n }\n\n return this;\n }\n\n /**\n */\n updateValidations(data: any): FormModel {\n if (this.currentFormObject) {\n this.currentFormObject.updateValidations(data);\n }\n\n return this;\n }\n\n /**\n * Process finished form\n */\n handleFinished(receivedForm: FormModel) {\n if (this.currentFormObject) {\n this.completedFormObjects = [\n ...this.completedFormObjects,\n this.currentFormObject,\n ];\n }\n\n this.currentFormObject = receivedForm.currentFormObject;\n this.endResultFormObjects = receivedForm.endResultFormObjects;\n\n this._data = receivedForm._data;\n }\n\n /**\n */\n handleRootErrors(errors: Array<Object>) {\n errors\n .filter((error) => !error.anchor)\n .forEach((error) => {\n this.errorCollection.addServerError(\n error.id,\n error.message,\n error.properties\n );\n });\n }\n\n /**\n * Process errors from received form\n */\n handleErrors(receivedForm: FormModel) {\n const errorAnchors = receivedForm.data.errors;\n if (errorAnchors) {\n errorAnchors.forEach((error) => {\n if (\n error.anchor &&\n this.currentFormObject &&\n this.currentFormObject.key === error.anchor.objectid\n ) {\n this.currentFormObject.addServerError(error);\n } else {\n this.errorCollection.addServerError(\n error.id,\n error.message,\n error.properties\n );\n }\n });\n }\n }\n\n /**\n * Process missing from received form\n */\n handleMissing(receivedForm: FormModel) {\n if (\n this.currentFormObject &&\n this.currentFormObject.equals(receivedForm.currentFormObject)\n ) {\n this.handleMissingErrors(receivedForm);\n } else {\n this.handleNewFormObject(receivedForm);\n }\n }\n\n /**\n * Received missing anchors in the response with an object id that is the current form object\n */\n processMissingErrors(receivedForm: FormModel): FormObjectModel | null {\n if (this.currentFormObject === null) {\n return null;\n }\n\n this.currentFormObject.attributeCollection.map((attribute) => {\n if (\n receivedForm.currentFormObject &&\n receivedForm.currentFormObject.hasAttributeByKey(attribute.key)\n ) {\n attribute.addMissingError();\n } else {\n attribute.removeMissingError();\n }\n\n return attribute;\n });\n\n return this.currentFormObject;\n }\n\n /**\n */\n handleMissingErrors(receivedForm: FormModel) {\n this.currentFormObject = this.processMissingErrors(receivedForm);\n }\n\n /**\n */\n handleNewFormObject(receivedForm: FormModel) {\n this.endResultFormObjects = receivedForm.endResultFormObjects;\n\n const receivedCurrentFormObject = receivedForm.currentFormObject;\n\n if (receivedCurrentFormObject === null) {\n this.completedFormObjects = [...this.allObjects];\n this.currentFormObject = null;\n } else {\n // check if received form exists in the previously entered form objects\n const previouslyEnteredFormObjects =\n this.previouslyEnteredFormObjects.filter((formObject) =>\n formObject.equals(\n receivedCurrentFormObject,\n formObject.hasFixedNrOfRepeats\n )\n );\n\n if (previouslyEnteredFormObjects.length > 0) {\n this.handlePreviouslyEnteredFormObjects(\n receivedCurrentFormObject,\n previouslyEnteredFormObjects\n );\n } else {\n this.completedFormObjects = [...this.allObjects];\n this.currentFormObject = receivedCurrentFormObject;\n }\n }\n }\n\n /**\n * Indicate if a new form object model should be merged with a previousled entered form object model\n * Set this property to false on the form that receives the new form to skip the merge behavior\n */\n get mergePreviouslyEnteredObjects(): boolean {\n return this._mergePreviouslyEnteredObjects;\n }\n\n /**\n */\n set mergePreviouslyEnteredObjects(mergePreviouslyEnteredObjects: boolean) {\n this._mergePreviouslyEnteredObjects = mergePreviouslyEnteredObjects;\n }\n\n /**\n */\n handlePreviouslyEnteredFormObjects(\n receivedCurrentFormObject: FormObjectModel,\n previouslyEnteredFormObjects: Array<FormObjectModel>\n ) {\n previouslyEnteredFormObjects.forEach((previouslyEnteredFormObject) => {\n const mergedObject = this.mergePreviouslyEnteredObjects\n ? this.mergeObjects(\n receivedCurrentFormObject,\n previouslyEnteredFormObject\n )\n : receivedCurrentFormObject;\n\n this.addFormObject(mergedObject);\n });\n\n // remove the previously entered form object\n this.previouslyEnteredFormObjects =\n this.previouslyEnteredFormObjects.filter((formObject) => {\n const hasPreviouslyEnteredObject = previouslyEnteredFormObjects.find(\n (previouslyEnteredFormObject) =>\n formObject.equals(previouslyEnteredFormObject)\n );\n\n return !hasPreviouslyEnteredObject;\n });\n }\n\n /**\n */\n mergeObjects(\n newObject: FormObjectModel,\n oldObject: FormObjectModel\n ): FormObjectModel {\n const mergedFormObject = FormObjectModel.createEmpty(newObject);\n\n mergedFormObject.mergeObject(oldObject);\n\n return mergedFormObject;\n }\n\n /**\n */\n findAttribute(findMethod: Function): AttributeType | null {\n let foundAttribute = null;\n\n this.allObjects.forEach((formObject) => {\n if (foundAttribute === null) {\n foundAttribute =\n formObject.attributeCollection.all.find((item) => findMethod(item)) ||\n null;\n }\n });\n\n return foundAttribute;\n }\n}\n\nexport default FormModel;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"LayoutHintCollection.js","names":["BaseCollection","IllegalArgumentException","LayoutHintCollection","layouthint","Array","isArray","collection","hints","hintArray","length","some","hint","hint2","foundHint","toString","checkHint","substr","match","getByLayoutHint","has","value","getLayoutHintValue","split"],"sources":["../../../src/models/layouthint/LayoutHintCollection.js"],"sourcesContent":["// @flow\nimport BaseCollection from \"../base/BaseCollection\";\nimport { IllegalArgumentException } from \"../../exceptions\";\n\n/**\n * Collection of layouthint\n */\nexport default class LayoutHintCollection extends BaseCollection<string> {\n /**\n * Constructs the layouthint collection\n */\n constructor(layouthint: Array<string> = []) {\n super();\n\n if (!Array.isArray(layouthint)) {\n throw new IllegalArgumentException(`${layouthint} is not an Array`);\n }\n\n this.collection = layouthint;\n }\n\n /**\n * Retrieve layout hints\n */\n get layouthint(): Array<string> {\n return this.collection;\n }\n\n /**\n * Checks if a specific layouthint exists in the component configuration\n * This method matches all exact matches and hints starting with. For example\n * when calling layouth.has(\"hide\"), this will return true for both \"hide\" and \"hide-when-empty\".\n * If only exact matches are required, use the method {@link hasExact}.\n */\n has(...hints: Array<string>): boolean {\n const hintArray = hints.length > 0 ? [...hints] : [];\n\n return hintArray\n .flat()\n .some(\n (hint) =>\n this.layouthint.includes(hint) ||\n this.layouthint.some((hint2) => hint2.startsWith(hint))\n );\n }\n\n /**\n * Checks if a specific layouthint exists in the component configuration,\n * only checks on exact matches.\n * If layouthints that start with the given hint should also match, use {@link has}.\n * @param hints\n * @returns {boolean}\n */\n hasExact(...hints: Array<string>): boolean {\n const hintArray = hints.length > 0 ? [...hints] : [];\n return hintArray.flat().some((hint) => this.layouthint.includes(hint));\n }\n\n /**\n * Retrieve the first layouthint starting with hint\n */\n getByLayoutHint(hint: Function | string): null | string {\n let foundHint = null;\n\n if (typeof hint === \"function\") {\n foundHint = this.layouthint.find(hint);\n }\n\n if (typeof hint === \"string\") {\n foundHint = this.layouthint.find((hint2) =>\n hint2.startsWith(hint.toString())\n );\n }\n\n return foundHint || null;\n }\n\n /**\n * Get the value of a specific hint\n * Format: hint=value\n */\n getLayoutHintValue(hint: string): ?string {\n const checkHint = hint.endsWith(\":\")\n ? hint.substr(0, hint.length - 1)\n : hint;\n\n const match = this.getByLayoutHint(\n (hint2) =>\n hint2.startsWith(`${checkHint}=`) || hint2.startsWith(`${checkHint}:`)\n );\n\n if (!match) {\n return null;\n }\n\n return match.substr(checkHint.length + 1);\n }\n\n /**\n * Get an array of multiple values from a specific hint\n * Format: hint=value1;value2;value3\n */\n getLayoutHintValues(hint: string): Array<string> | null {\n if (!this.has(hint)) {\n return null;\n }\n\n const value = this.getLayoutHintValue(hint);\n\n if (!value) {\n return [];\n }\n\n return value.split(\";\");\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"LayoutHintCollection.js","names":["BaseCollection","IllegalArgumentException","LayoutHintCollection","layouthint","Array","isArray","collection","hints","hintArray","length","some","hint","hint2","foundHint","toString","checkHint","substr","match","getByLayoutHint","has","value","getLayoutHintValue","split"],"sources":["../../../src/models/layouthint/LayoutHintCollection.js"],"sourcesContent":["// @flow\nimport BaseCollection from \"../base/BaseCollection\";\nimport { IllegalArgumentException } from \"../../exceptions\";\n\n/**\n * Collection of layouthint\n */\nexport default class LayoutHintCollection extends BaseCollection<string> {\n /**\n * Constructs the layouthint collection\n */\n constructor(layouthint: Array<string> = []) {\n super();\n\n if (!Array.isArray(layouthint)) {\n throw new IllegalArgumentException(`${layouthint} is not an Array`);\n }\n\n this.collection = layouthint;\n }\n\n /**\n * Retrieve layout hints\n */\n get layouthint(): Array<string> {\n return this.collection;\n }\n\n /**\n * Checks if a specific layouthint exists in the component configuration\n * This method matches all exact matches and hints starting with. For example\n * when calling layouth.has(\"hide\"), this will return true for both \"hide\" and \"hide-when-empty\".\n * If only exact matches are required, use the method {@link hasExact}.\n */\n has(...hints: Array<string>): boolean {\n const hintArray = hints.length > 0 ? [...hints] : [];\n\n return hintArray\n .flat()\n .some(\n (hint) =>\n this.layouthint.includes(hint) ||\n this.layouthint.some((hint2) => hint2.startsWith(hint))\n );\n }\n\n /**\n * Checks if a specific layouthint exists in the component configuration,\n * only checks on exact matches.\n * If layouthints that start with the given hint should also match, use {@link has}.\n * @param hints\n * @returns {boolean}\n */\n hasExact(...hints: Array<string>): boolean {\n const hintArray = hints.length > 0 ? [...hints] : [];\n return hintArray.flat().some((hint) => this.layouthint.includes(hint));\n }\n\n /**\n * Retrieve the first layouthint starting with hint\n */\n getByLayoutHint(hint: Function | string): null | string {\n let foundHint = null;\n\n if (typeof hint === \"function\") {\n foundHint = this.layouthint.find(hint);\n }\n\n if (typeof hint === \"string\") {\n foundHint = this.layouthint.find((hint2) =>\n hint2.startsWith(hint.toString())\n );\n }\n\n return foundHint || null;\n }\n\n /**\n * Get the value of a specific hint\n * Format: hint=value\n */\n getLayoutHintValue(hint: string): ?string {\n const checkHint = hint.endsWith(\":\")\n ? hint.substr(0, hint.length - 1)\n : hint;\n\n const match = this.getByLayoutHint(\n (hint2) =>\n hint2.startsWith(`${checkHint}=`) || hint2.startsWith(`${checkHint}:`)\n );\n\n if (!match) {\n return null;\n }\n\n return match.substr(checkHint.length + 1);\n }\n\n /**\n * Get an array of multiple values from a specific hint\n * Format: hint=value1;value2;value3\n */\n getLayoutHintValues(hint: string): Array<string> | null {\n if (!this.has(hint)) {\n return null;\n }\n\n const value = this.getLayoutHintValue(hint);\n\n if (!value) {\n return [];\n }\n\n return value.split(\";\");\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TabModel.js","names":["TaskGroupCollection","ResourceModel","TaskGroupModel","ActionCollection","TabModel","modularuiResponse","createTaskGroupCollection","_actionCollection","data","actions","contributions","links","getLinksByGroup","all","models","taskGroups","i","length","push","taskGroupCollection","add","first","taskgroups","taskgroup","taskgroupContributions","taskgroupContribution","name","create","_taskGroupCollection","getContribution","components","size","hasItems","actionCollection","resourcetype"],"sources":["../../../src/models/tab/TabModel.js"],"sourcesContent":["// @flow\nimport TaskGroupCollection from \"../taskgroup/TaskGroupCollection\";\nimport ResourceModel from \"../base/ResourceModel\";\nimport TaskGroupModel from \"../taskgroup/TaskGroupModel\";\nimport ActionCollection from \"../actions/ActionCollection\";\n\nimport type { ModularUIModel } from \"../types\";\nimport type { ModularUIResponse } from \"../../modularui\";\nimport type LinkModel from \"../links/LinkModel\";\nimport type LinkCollection from \"../links/LinkCollection\";\n\n/**\n * Describes a TabModel\n */\nexport default class TabModel extends ResourceModel {\n _actionCollection: ActionCollection;\n _taskGroupCollection: TaskGroupCollection;\n\n /**\n */\n constructor(modularuiResponse: ModularUIResponse) {\n super(modularuiResponse);\n\n this.createTaskGroupCollection();\n\n this._actionCollection = new ActionCollection(\n this.data.actions,\n this.contributions.actions\n );\n }\n\n /**\n */\n get type(): string {\n return \"Tab\";\n }\n\n /**\n */\n static isApplicableModel(data: ModularUIResponse): boolean {\n return (\n data.contributions.resourcetype &&\n (data.contributions.resourcetype.endsWith(\"Tab\") ||\n data.contributions.resourcetype.endsWith(\"KnowledgeBank\"))\n );\n }\n\n /**\n */\n getInitialChildModelLinks(): Array<LinkModel> {\n return this.links.getLinksByGroup(\"taskgroup\", \"actions\").all;\n }\n\n /**\n */\n setChildModels(models: Array<ModularUIModel>) {\n const taskGroups = [];\n\n for (let i = 0; i < models.length; i++) {\n if (models[i] instanceof TaskGroupModel) {\n taskGroups.push(models[i]);\n }\n }\n\n this.taskGroupCollection.add(taskGroups);\n }\n\n /**\n */\n get searchLink(): ?LinkModel {\n return this.links.getLinksByGroup(\"search\").first;\n }\n\n /**\n */\n createTaskGroupCollection() {\n this.taskGroupCollection = this.data.taskgroups\n ? this.data.taskgroups\n .map((taskgroup) => {\n const taskgroupContributions = this.contributions.taskgroups.find(\n (taskgroupContribution) =>\n taskgroupContribution.name === taskgroup.name\n );\n\n if (taskgroupContributions) {\n return TaskGroupModel.create(\n taskgroup.name,\n taskgroup,\n taskgroupContributions\n );\n }\n\n return null;\n })\n .filter((taskgroup) => taskgroup != null)\n : [];\n }\n\n /**\n * Getting the taskgrouppanels on the tab\n */\n get taskGroupCollection(): TaskGroupCollection {\n return this._taskGroupCollection;\n }\n\n /**\n * Setting the taskgroup panel collection\n */\n set taskGroupCollection(taskgroups: Array<TaskGroupModel>) {\n this._taskGroupCollection = new TaskGroupCollection(taskgroups);\n }\n\n /**\n * Getting the label of the tab\n */\n get label(): string {\n return this.getContribution(\"label\", \"\");\n }\n\n /**\n * Getting the component links on the tab\n */\n get components(): LinkCollection {\n return this.links.getLinksByGroup(\"component\", \"search\");\n }\n\n /**\n */\n get actionCollection(): ActionCollection {\n return this._actionCollection;\n }\n\n /**\n * Has component links\n */\n hasComponents(): boolean {\n return this.components.size > 0;\n }\n\n /**\n * Has taskgroups\n */\n hasTaskGroups(): boolean {\n return this.taskGroupCollection && this.taskGroupCollection?.hasItems;\n }\n\n /**\n */\n hasActions(): boolean {\n return this.actionCollection && this.actionCollection.hasItems;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"TabModel.js","names":["TaskGroupCollection","ResourceModel","TaskGroupModel","ActionCollection","TabModel","modularuiResponse","createTaskGroupCollection","_actionCollection","data","actions","contributions","links","getLinksByGroup","all","models","taskGroups","i","length","push","taskGroupCollection","add","first","taskgroups","taskgroup","taskgroupContributions","taskgroupContribution","name","create","_taskGroupCollection","getContribution","components","size","hasItems","actionCollection","resourcetype"],"sources":["../../../src/models/tab/TabModel.js"],"sourcesContent":["// @flow\nimport TaskGroupCollection from \"../taskgroup/TaskGroupCollection\";\nimport ResourceModel from \"../base/ResourceModel\";\nimport TaskGroupModel from \"../taskgroup/TaskGroupModel\";\nimport ActionCollection from \"../actions/ActionCollection\";\n\nimport type { ModularUIModel } from \"../types\";\nimport type { ModularUIResponse } from \"../../modularui\";\nimport type LinkModel from \"../links/LinkModel\";\nimport type LinkCollection from \"../links/LinkCollection\";\n\n/**\n * Describes a TabModel\n */\nexport default class TabModel extends ResourceModel {\n _actionCollection: ActionCollection;\n _taskGroupCollection: TaskGroupCollection;\n\n /**\n */\n constructor(modularuiResponse: ModularUIResponse) {\n super(modularuiResponse);\n\n this.createTaskGroupCollection();\n\n this._actionCollection = new ActionCollection(\n this.data.actions,\n this.contributions.actions\n );\n }\n\n /**\n */\n get type(): string {\n return \"Tab\";\n }\n\n /**\n */\n static isApplicableModel(data: ModularUIResponse): boolean {\n return (\n data.contributions.resourcetype &&\n (data.contributions.resourcetype.endsWith(\"Tab\") ||\n data.contributions.resourcetype.endsWith(\"KnowledgeBank\"))\n );\n }\n\n /**\n */\n getInitialChildModelLinks(): Array<LinkModel> {\n return this.links.getLinksByGroup(\"taskgroup\", \"actions\").all;\n }\n\n /**\n */\n setChildModels(models: Array<ModularUIModel>) {\n const taskGroups = [];\n\n for (let i = 0; i < models.length; i++) {\n if (models[i] instanceof TaskGroupModel) {\n taskGroups.push(models[i]);\n }\n }\n\n this.taskGroupCollection.add(taskGroups);\n }\n\n /**\n */\n get searchLink(): ?LinkModel {\n return this.links.getLinksByGroup(\"search\").first;\n }\n\n /**\n */\n createTaskGroupCollection() {\n this.taskGroupCollection = this.data.taskgroups\n ? this.data.taskgroups\n .map((taskgroup) => {\n const taskgroupContributions = this.contributions.taskgroups.find(\n (taskgroupContribution) =>\n taskgroupContribution.name === taskgroup.name\n );\n\n if (taskgroupContributions) {\n return TaskGroupModel.create(\n taskgroup.name,\n taskgroup,\n taskgroupContributions\n );\n }\n\n return null;\n })\n .filter((taskgroup) => taskgroup != null)\n : [];\n }\n\n /**\n * Getting the taskgrouppanels on the tab\n */\n get taskGroupCollection(): TaskGroupCollection {\n return this._taskGroupCollection;\n }\n\n /**\n * Setting the taskgroup panel collection\n */\n set taskGroupCollection(taskgroups: Array<TaskGroupModel>) {\n this._taskGroupCollection = new TaskGroupCollection(taskgroups);\n }\n\n /**\n * Getting the label of the tab\n */\n get label(): string {\n return this.getContribution(\"label\", \"\");\n }\n\n /**\n * Getting the component links on the tab\n */\n get components(): LinkCollection {\n return this.links.getLinksByGroup(\"component\", \"search\");\n }\n\n /**\n */\n get actionCollection(): ActionCollection {\n return this._actionCollection;\n }\n\n /**\n * Has component links\n */\n hasComponents(): boolean {\n return this.components.size > 0;\n }\n\n /**\n * Has taskgroups\n */\n hasTaskGroups(): boolean {\n return this.taskGroupCollection && this.taskGroupCollection?.hasItems;\n }\n\n /**\n */\n hasActions(): boolean {\n return this.actionCollection && this.actionCollection.hasItems;\n }\n}\n"],"mappings":"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"}