@beinformed/ui 1.25.2 → 1.25.5

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 (243) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/esm/constants/Constants.js +5 -0
  3. package/esm/constants/Constants.js.map +1 -1
  4. package/esm/hooks/useAuthentication.js +5 -5
  5. package/esm/hooks/useAuthentication.js.map +1 -1
  6. package/esm/hooks/useModularUI.js.map +1 -1
  7. package/esm/hooks/useModularUIBasic.js +7 -1
  8. package/esm/hooks/useModularUIBasic.js.map +1 -1
  9. package/esm/hooks/useModularUIModel.js +9 -1
  10. package/esm/hooks/useModularUIModel.js.map +1 -1
  11. package/esm/hooks/useModularUIRequest.js +5 -7
  12. package/esm/hooks/useModularUIRequest.js.map +1 -1
  13. package/esm/models/application/ApplicationModel.js +9 -1
  14. package/esm/models/application/ApplicationModel.js.map +1 -1
  15. package/esm/models/base/ResourceModel.js +7 -0
  16. package/esm/models/base/ResourceModel.js.map +1 -1
  17. package/esm/models/caseview/CaseViewModel.js +6 -0
  18. package/esm/models/caseview/CaseViewModel.js.map +1 -1
  19. package/esm/models/concepts/BusinessScenarioModel.js +6 -0
  20. package/esm/models/concepts/BusinessScenarioModel.js.map +1 -1
  21. package/esm/models/concepts/ConceptDetailModel.js +6 -0
  22. package/esm/models/concepts/ConceptDetailModel.js.map +1 -1
  23. package/esm/models/concepts/ConceptIndexModel.js +6 -0
  24. package/esm/models/concepts/ConceptIndexModel.js.map +1 -1
  25. package/esm/models/concepts/ConceptTypeDetailModel.js +6 -0
  26. package/esm/models/concepts/ConceptTypeDetailModel.js.map +1 -1
  27. package/esm/models/content/ContentIndexModel.js +6 -0
  28. package/esm/models/content/ContentIndexModel.js.map +1 -1
  29. package/esm/models/content/ContentModel.js +6 -0
  30. package/esm/models/content/ContentModel.js.map +1 -1
  31. package/esm/models/content/ContentTOCModel.js +6 -0
  32. package/esm/models/content/ContentTOCModel.js.map +1 -1
  33. package/esm/models/content/ContentTypeModel.js +6 -0
  34. package/esm/models/content/ContentTypeModel.js.map +1 -1
  35. package/esm/models/detail/DetailModel.js +6 -0
  36. package/esm/models/detail/DetailModel.js.map +1 -1
  37. package/esm/models/form/FormModel.js +6 -0
  38. package/esm/models/form/FormModel.js.map +1 -1
  39. package/esm/models/list/ListDetailModel.js +6 -0
  40. package/esm/models/list/ListDetailModel.js.map +1 -1
  41. package/esm/models/list/ListModel.js +6 -0
  42. package/esm/models/list/ListModel.js.map +1 -1
  43. package/esm/models/lookup/LookupOptionsModel.js +6 -0
  44. package/esm/models/lookup/LookupOptionsModel.js.map +1 -1
  45. package/esm/models/modelcatalog/ModelCatalogModel.js +6 -0
  46. package/esm/models/modelcatalog/ModelCatalogModel.js.map +1 -1
  47. package/esm/models/panels/GroupingPanelModel.js +6 -0
  48. package/esm/models/panels/GroupingPanelModel.js.map +1 -1
  49. package/esm/models/resolveModel.js +4 -4
  50. package/esm/models/resolveModel.js.map +1 -1
  51. package/esm/models/search/CaseSearchModel.js +6 -0
  52. package/esm/models/search/CaseSearchModel.js.map +1 -1
  53. package/esm/models/tab/TabModel.js +6 -0
  54. package/esm/models/tab/TabModel.js.map +1 -1
  55. package/esm/models/taskgroup/TaskGroupModel.js +6 -0
  56. package/esm/models/taskgroup/TaskGroupModel.js.map +1 -1
  57. package/esm/models/types.js.map +1 -1
  58. package/esm/models/user/UserModel.js +6 -0
  59. package/esm/models/user/UserModel.js.map +1 -1
  60. package/esm/models/user/UserProfileModel.js +6 -0
  61. package/esm/models/user/UserProfileModel.js.map +1 -1
  62. package/esm/models/user/UserServicesModel.js +6 -0
  63. package/esm/models/user/UserServicesModel.js.map +1 -1
  64. package/esm/modularui/ModularUIRequest.js +54 -10
  65. package/esm/modularui/ModularUIRequest.js.map +1 -1
  66. package/esm/modularui/types.js +2 -0
  67. package/esm/modularui/types.js.map +1 -0
  68. package/esm/redux/_modularui/ModularUIActions.js +2 -0
  69. package/esm/redux/_modularui/ModularUIActions.js.map +1 -1
  70. package/esm/redux/_modularui/ModularUIMiddleware.js +1 -0
  71. package/esm/redux/_modularui/ModularUIMiddleware.js.map +1 -1
  72. package/esm/redux/_modularui/types.js.map +1 -1
  73. package/esm/redux/_modularui/withModularUI.js.map +1 -1
  74. package/esm/utils/fetch/types.js.map +1 -1
  75. package/lib/constants/Constants.js +7 -1
  76. package/lib/constants/Constants.js.flow +6 -0
  77. package/lib/constants/Constants.js.map +1 -1
  78. package/lib/hooks/__tests__/UseModularUIModel.spec.js.flow +1 -1
  79. package/lib/hooks/__tests__/useModelCatalog.spec.js.flow +1 -1
  80. package/lib/hooks/__tests__/useModularUIBasic.spec.js.flow +2 -2
  81. package/lib/hooks/useAuthentication.js +4 -4
  82. package/lib/hooks/useAuthentication.js.flow +17 -5
  83. package/lib/hooks/useAuthentication.js.map +1 -1
  84. package/lib/hooks/useModularUI.js.flow +2 -2
  85. package/lib/hooks/useModularUI.js.map +1 -1
  86. package/lib/hooks/useModularUIBasic.js +7 -1
  87. package/lib/hooks/useModularUIBasic.js.flow +14 -4
  88. package/lib/hooks/useModularUIBasic.js.map +1 -1
  89. package/lib/hooks/useModularUIModel.js +11 -2
  90. package/lib/hooks/useModularUIModel.js.flow +19 -10
  91. package/lib/hooks/useModularUIModel.js.map +1 -1
  92. package/lib/hooks/useModularUIRequest.js +5 -7
  93. package/lib/hooks/useModularUIRequest.js.flow +12 -11
  94. package/lib/hooks/useModularUIRequest.js.map +1 -1
  95. package/lib/models/application/ApplicationModel.js +8 -1
  96. package/lib/models/application/ApplicationModel.js.flow +10 -1
  97. package/lib/models/application/ApplicationModel.js.map +1 -1
  98. package/lib/models/base/ResourceModel.js +7 -0
  99. package/lib/models/base/ResourceModel.js.flow +7 -0
  100. package/lib/models/base/ResourceModel.js.map +1 -1
  101. package/lib/models/caseview/CaseViewModel.js +6 -0
  102. package/lib/models/caseview/CaseViewModel.js.flow +6 -0
  103. package/lib/models/caseview/CaseViewModel.js.map +1 -1
  104. package/lib/models/concepts/BusinessScenarioModel.js +6 -0
  105. package/lib/models/concepts/BusinessScenarioModel.js.flow +6 -0
  106. package/lib/models/concepts/BusinessScenarioModel.js.map +1 -1
  107. package/lib/models/concepts/ConceptDetailModel.js +6 -0
  108. package/lib/models/concepts/ConceptDetailModel.js.flow +6 -0
  109. package/lib/models/concepts/ConceptDetailModel.js.map +1 -1
  110. package/lib/models/concepts/ConceptIndexModel.js +6 -0
  111. package/lib/models/concepts/ConceptIndexModel.js.flow +6 -0
  112. package/lib/models/concepts/ConceptIndexModel.js.map +1 -1
  113. package/lib/models/concepts/ConceptTypeDetailModel.js +6 -0
  114. package/lib/models/concepts/ConceptTypeDetailModel.js.flow +6 -0
  115. package/lib/models/concepts/ConceptTypeDetailModel.js.map +1 -1
  116. package/lib/models/content/ContentIndexModel.js +6 -0
  117. package/lib/models/content/ContentIndexModel.js.flow +6 -0
  118. package/lib/models/content/ContentIndexModel.js.map +1 -1
  119. package/lib/models/content/ContentModel.js +6 -0
  120. package/lib/models/content/ContentModel.js.flow +6 -0
  121. package/lib/models/content/ContentModel.js.map +1 -1
  122. package/lib/models/content/ContentTOCModel.js +6 -0
  123. package/lib/models/content/ContentTOCModel.js.flow +6 -0
  124. package/lib/models/content/ContentTOCModel.js.map +1 -1
  125. package/lib/models/content/ContentTypeModel.js +6 -0
  126. package/lib/models/content/ContentTypeModel.js.flow +6 -0
  127. package/lib/models/content/ContentTypeModel.js.map +1 -1
  128. package/lib/models/detail/DetailModel.js +6 -0
  129. package/lib/models/detail/DetailModel.js.flow +6 -0
  130. package/lib/models/detail/DetailModel.js.map +1 -1
  131. package/lib/models/form/FormModel.js +6 -0
  132. package/lib/models/form/FormModel.js.flow +6 -0
  133. package/lib/models/form/FormModel.js.map +1 -1
  134. package/lib/models/list/ListDetailModel.js +6 -0
  135. package/lib/models/list/ListDetailModel.js.flow +6 -0
  136. package/lib/models/list/ListDetailModel.js.map +1 -1
  137. package/lib/models/list/ListModel.js +6 -0
  138. package/lib/models/list/ListModel.js.flow +6 -0
  139. package/lib/models/list/ListModel.js.map +1 -1
  140. package/lib/models/lookup/LookupOptionsModel.js +6 -0
  141. package/lib/models/lookup/LookupOptionsModel.js.flow +6 -0
  142. package/lib/models/lookup/LookupOptionsModel.js.map +1 -1
  143. package/lib/models/modelcatalog/ModelCatalogModel.js +6 -0
  144. package/lib/models/modelcatalog/ModelCatalogModel.js.flow +6 -0
  145. package/lib/models/modelcatalog/ModelCatalogModel.js.map +1 -1
  146. package/lib/models/panels/GroupingPanelModel.js +6 -0
  147. package/lib/models/panels/GroupingPanelModel.js.flow +6 -0
  148. package/lib/models/panels/GroupingPanelModel.js.map +1 -1
  149. package/lib/models/resolveModel.js +4 -3
  150. package/lib/models/resolveModel.js.flow +6 -4
  151. package/lib/models/resolveModel.js.map +1 -1
  152. package/lib/models/search/CaseSearchModel.js +6 -0
  153. package/lib/models/search/CaseSearchModel.js.flow +6 -0
  154. package/lib/models/search/CaseSearchModel.js.map +1 -1
  155. package/lib/models/tab/TabModel.js +6 -0
  156. package/lib/models/tab/TabModel.js.flow +6 -0
  157. package/lib/models/tab/TabModel.js.map +1 -1
  158. package/lib/models/taskgroup/TaskGroupModel.js +6 -0
  159. package/lib/models/taskgroup/TaskGroupModel.js.flow +6 -0
  160. package/lib/models/taskgroup/TaskGroupModel.js.map +1 -1
  161. package/lib/models/types.js.flow +1 -1
  162. package/lib/models/types.js.map +1 -1
  163. package/lib/models/user/UserModel.js +6 -0
  164. package/lib/models/user/UserModel.js.flow +6 -0
  165. package/lib/models/user/UserModel.js.map +1 -1
  166. package/lib/models/user/UserProfileModel.js +6 -0
  167. package/lib/models/user/UserProfileModel.js.flow +6 -0
  168. package/lib/models/user/UserProfileModel.js.map +1 -1
  169. package/lib/models/user/UserServicesModel.js +6 -0
  170. package/lib/models/user/UserServicesModel.js.flow +6 -0
  171. package/lib/models/user/UserServicesModel.js.map +1 -1
  172. package/lib/modularui/ModularUIRequest.js +54 -10
  173. package/lib/modularui/ModularUIRequest.js.flow +83 -17
  174. package/lib/modularui/ModularUIRequest.js.map +1 -1
  175. package/lib/modularui/__tests__/ModularUIRequest.spec.js.flow +4 -9
  176. package/lib/modularui/types.js +2 -0
  177. package/lib/modularui/types.js.flow +4 -0
  178. package/lib/modularui/types.js.map +1 -0
  179. package/lib/redux/_modularui/ModularUIActions.js +2 -0
  180. package/lib/redux/_modularui/ModularUIActions.js.flow +6 -4
  181. package/lib/redux/_modularui/ModularUIActions.js.map +1 -1
  182. package/lib/redux/_modularui/ModularUIMiddleware.js +1 -0
  183. package/lib/redux/_modularui/ModularUIMiddleware.js.flow +5 -2
  184. package/lib/redux/_modularui/ModularUIMiddleware.js.map +1 -1
  185. package/lib/redux/_modularui/types.js.flow +5 -3
  186. package/lib/redux/_modularui/types.js.map +1 -1
  187. package/lib/redux/_modularui/withModularUI.js.flow +2 -2
  188. package/lib/redux/_modularui/withModularUI.js.map +1 -1
  189. package/lib/utils/fetch/types.js.flow +12 -4
  190. package/lib/utils/fetch/types.js.map +1 -1
  191. package/package.json +7 -7
  192. package/src/constants/Constants.js +6 -0
  193. package/src/hooks/__tests__/UseModularUIModel.spec.js +1 -1
  194. package/src/hooks/__tests__/useModelCatalog.spec.js +1 -1
  195. package/src/hooks/__tests__/useModularUIBasic.spec.js +2 -2
  196. package/src/hooks/useAuthentication.js +17 -5
  197. package/src/hooks/useModularUI.js +2 -2
  198. package/src/hooks/useModularUIBasic.js +14 -4
  199. package/src/hooks/useModularUIModel.js +19 -10
  200. package/src/hooks/useModularUIRequest.js +12 -11
  201. package/src/models/application/ApplicationModel.js +10 -1
  202. package/src/models/base/ResourceModel.js +7 -0
  203. package/src/models/caseview/CaseViewModel.js +6 -0
  204. package/src/models/concepts/BusinessScenarioModel.js +6 -0
  205. package/src/models/concepts/ConceptDetailModel.js +6 -0
  206. package/src/models/concepts/ConceptIndexModel.js +6 -0
  207. package/src/models/concepts/ConceptTypeDetailModel.js +6 -0
  208. package/src/models/content/ContentIndexModel.js +6 -0
  209. package/src/models/content/ContentModel.js +6 -0
  210. package/src/models/content/ContentTOCModel.js +6 -0
  211. package/src/models/content/ContentTypeModel.js +6 -0
  212. package/src/models/detail/DetailModel.js +6 -0
  213. package/src/models/form/FormModel.js +6 -0
  214. package/src/models/list/ListDetailModel.js +6 -0
  215. package/src/models/list/ListModel.js +6 -0
  216. package/src/models/lookup/LookupOptionsModel.js +6 -0
  217. package/src/models/modelcatalog/ModelCatalogModel.js +6 -0
  218. package/src/models/panels/GroupingPanelModel.js +6 -0
  219. package/src/models/resolveModel.js +6 -4
  220. package/src/models/search/CaseSearchModel.js +6 -0
  221. package/src/models/tab/TabModel.js +6 -0
  222. package/src/models/taskgroup/TaskGroupModel.js +6 -0
  223. package/src/models/types.js +1 -1
  224. package/src/models/user/UserModel.js +6 -0
  225. package/src/models/user/UserProfileModel.js +6 -0
  226. package/src/models/user/UserServicesModel.js +6 -0
  227. package/src/modularui/ModularUIRequest.js +83 -17
  228. package/src/modularui/__tests__/ModularUIRequest.spec.js +4 -9
  229. package/src/modularui/types.js +4 -0
  230. package/src/redux/_modularui/ModularUIActions.js +6 -4
  231. package/src/redux/_modularui/ModularUIMiddleware.js +5 -2
  232. package/src/redux/_modularui/types.js +5 -3
  233. package/src/redux/_modularui/withModularUI.js +2 -2
  234. package/src/utils/fetch/types.js +12 -4
  235. package/types/constants/Constants.d.ts +5 -0
  236. package/types/models/base/ResourceModel.d.ts +4 -0
  237. package/types/models/form/FormObjectModel.d.ts +28 -2
  238. package/types/models/resolveModel.d.ts +1 -1
  239. package/types/models/types.d.ts +1 -1
  240. package/types/modularui/ModularUIRequest.d.ts +15 -7
  241. package/types/modularui/types.d.ts +2 -0
  242. package/types/redux/_modularui/types.d.ts +2 -2
  243. package/types/utils/fetch/types.d.ts +8 -5
@@ -5,21 +5,22 @@ import { useSelector } from "react-redux";
5
5
  import ModularUIRequest from "../modularui/ModularUIRequest";
6
6
  import { getLocale } from "../redux/selectors/i18n";
7
7
 
8
- import type { RequestBaseOptions } from "../utils";
9
8
  import type Href from "../models/href/Href";
10
-
11
- const getModularUIRequest = createSelector([getLocale], (localeCode) => {
12
- return (href: Href, options?: $Shape<RequestBaseOptions>) => {
13
- const request = new ModularUIRequest(href, options);
14
- request.locale = localeCode;
15
- return request;
16
- };
17
- });
9
+ import type { RequestModularUIOptions } from "../utils";
18
10
 
19
11
  /**
20
12
  * Creates a ModularUIRequest with the locale as available in the redux store
21
13
  */
22
14
  export const useModularUIRequest = (): ((
23
15
  href: Href,
24
- options?: $Shape<RequestBaseOptions>
25
- ) => ModularUIRequest) => useSelector(getModularUIRequest);
16
+ options?: $Shape<RequestModularUIOptions>
17
+ ) => ModularUIRequest) =>
18
+ useSelector(
19
+ createSelector([getLocale], (localeCode) => {
20
+ return (href: Href, options?: $Shape<RequestModularUIOptions>) => {
21
+ const request = new ModularUIRequest(href, options);
22
+ request.locale = localeCode;
23
+ return request;
24
+ };
25
+ })
26
+ );
@@ -9,6 +9,7 @@ import type { ModularUIModel, AuthenticationType } from "../types";
9
9
  import type { ModularUIResponse } from "../../modularui";
10
10
  import type LinkCollection from "../links/LinkCollection";
11
11
  import type Href from "../href/Href";
12
+ import { fallbackDefaultAuthenticationType } from "../../constants";
12
13
 
13
14
  /**
14
15
  * The Application model
@@ -23,6 +24,12 @@ export default class ApplicationModel extends ResourceModel {
23
24
  return "Application";
24
25
  }
25
26
 
27
+ /**
28
+ */
29
+ static get modelName(): string {
30
+ return "ApplicationModel";
31
+ }
32
+
26
33
  /**
27
34
  */
28
35
  static isApplicableModel(data: ModularUIResponse): boolean {
@@ -68,7 +75,9 @@ export default class ApplicationModel extends ResourceModel {
68
75
  * Getting the authentication types of the application
69
76
  */
70
77
  get authenticationTypes(): Array<AuthenticationType> {
71
- const authenticationTypes = this.getContribution("security", []);
78
+ const authenticationTypes = this.getContribution("security", [
79
+ fallbackDefaultAuthenticationType,
80
+ ]);
72
81
 
73
82
  //put primary first
74
83
  return authenticationTypes?.sort(
@@ -37,6 +37,13 @@ class ResourceModel extends BaseModel implements IModelWithChildModels {
37
37
  this._lastServerUpdate = Date.now();
38
38
  }
39
39
 
40
+ /**
41
+ * Property to render name of a model, is original name after transpilation
42
+ */
43
+ static get modelName(): string {
44
+ throw new IllegalStateException(`No modelName set on the resource model`);
45
+ }
46
+
40
47
  /**
41
48
  * Returns true when the model is supported based on configuration found in contributions
42
49
  *
@@ -33,6 +33,12 @@ export default class CaseViewModel extends DetailModel {
33
33
  return "CaseView";
34
34
  }
35
35
 
36
+ /**
37
+ */
38
+ static get modelName(): string {
39
+ return "CaseViewModel";
40
+ }
41
+
36
42
  /**
37
43
  */
38
44
  static isApplicableModel(data: ModularUIResponse): boolean {
@@ -19,6 +19,12 @@ class BusinessScenarioModel extends ConceptDetailModel {
19
19
  return "BusinessScenario";
20
20
  }
21
21
 
22
+ /**
23
+ */
24
+ static get modelName(): string {
25
+ return "BusinessScenario";
26
+ }
27
+
22
28
  /**
23
29
  */
24
30
  static isApplicableModel(data: ModularUIResponse): boolean {
@@ -41,6 +41,12 @@ export default class ConceptDetailModel extends ResourceModel {
41
41
  return "ConceptDetail";
42
42
  }
43
43
 
44
+ /**
45
+ */
46
+ static get modelName(): string {
47
+ return "ConceptDetailModel";
48
+ }
49
+
44
50
  /**
45
51
  */
46
52
  static isApplicableModel(data: ModularUIResponse): boolean {
@@ -46,6 +46,12 @@ export default class ConceptIndexModel extends ResourceModel {
46
46
  return "ConceptIndex";
47
47
  }
48
48
 
49
+ /**
50
+ */
51
+ static get modelName(): string {
52
+ return "ConceptIndexModel";
53
+ }
54
+
49
55
  /**
50
56
  */
51
57
  static isApplicableModel(data: ModularUIResponse): boolean {
@@ -13,6 +13,12 @@ class ConceptTypeDetailModel extends ResourceModel {
13
13
  return "ConceptTypeDetail";
14
14
  }
15
15
 
16
+ /**
17
+ */
18
+ static get modelName(): string {
19
+ return "ConceptTypeDetailModel";
20
+ }
21
+
16
22
  /**
17
23
  */
18
24
  static isApplicableModel(data: ModularUIResponse): boolean {
@@ -41,6 +41,12 @@ export default class ContentIndexModel extends ResourceModel {
41
41
  return "ContentIndex";
42
42
  }
43
43
 
44
+ /**
45
+ */
46
+ static get modelName(): string {
47
+ return "ContentIndexModel";
48
+ }
49
+
44
50
  /**
45
51
  */
46
52
  static isApplicableModel(data: ModularUIResponse): boolean {
@@ -35,6 +35,12 @@ export default class ContentModel extends ResourceModel {
35
35
  return "Content";
36
36
  }
37
37
 
38
+ /**
39
+ */
40
+ static get modelName(): string {
41
+ return "ContentModel";
42
+ }
43
+
38
44
  /**
39
45
  */
40
46
  static isApplicableModel(data: ModularUIResponse): boolean {
@@ -49,6 +49,12 @@ export default class ContentTOCModel extends ResourceModel {
49
49
  return "ContentTOC";
50
50
  }
51
51
 
52
+ /**
53
+ */
54
+ static get modelName(): string {
55
+ return "ContentTOCModel";
56
+ }
57
+
52
58
  /**
53
59
  */
54
60
  static isApplicableModel(data: ModularUIResponse): boolean {
@@ -12,6 +12,12 @@ export default class ContentTypeModel extends ResourceModel {
12
12
  return "ContentType";
13
13
  }
14
14
 
15
+ /**
16
+ */
17
+ static get modelName(): string {
18
+ return "ContentTypeModel";
19
+ }
20
+
15
21
  /**
16
22
  */
17
23
  static isApplicableModel(data: ModularUIResponse): boolean {
@@ -37,6 +37,12 @@ export default class DetailModel extends ResourceModel {
37
37
  return "Detail";
38
38
  }
39
39
 
40
+ /**
41
+ */
42
+ static get modelName(): string {
43
+ return "DetailModel";
44
+ }
45
+
40
46
  /**
41
47
  */
42
48
  static isApplicableModel(data: ModularUIResponse): boolean {
@@ -95,6 +95,12 @@ class FormModel extends ResourceModel {
95
95
  return this.getContribution("actiontype", "form");
96
96
  }
97
97
 
98
+ /**
99
+ */
100
+ static get modelName(): string {
101
+ return "FormModel";
102
+ }
103
+
98
104
  /**
99
105
  */
100
106
  static isApplicableModel(data: ModularUIResponse): boolean {
@@ -83,6 +83,12 @@ export default class ListDetailModel extends DetailModel {
83
83
  return "ListDetail";
84
84
  }
85
85
 
86
+ /**
87
+ */
88
+ static get modelName(): string {
89
+ return "ListDetailModel";
90
+ }
91
+
86
92
  /**
87
93
  */
88
94
  static isApplicableModel(data: ModularUIResponse): boolean {
@@ -41,6 +41,12 @@ export default class ListModel extends ResourceModel {
41
41
  return "List";
42
42
  }
43
43
 
44
+ /**
45
+ */
46
+ static get modelName(): string {
47
+ return "ListModel";
48
+ }
49
+
44
50
  /**
45
51
  */
46
52
  static isApplicableModel(data: ModularUIResponse): boolean {
@@ -33,6 +33,12 @@ export default class LookupOptionsModel extends ResourceModel {
33
33
  return "LookupOptions";
34
34
  }
35
35
 
36
+ /**
37
+ */
38
+ static get modelName(): string {
39
+ return "LookupOptionsModel";
40
+ }
41
+
36
42
  /**
37
43
  */
38
44
  static isApplicableModel(data: ModularUIResponse): boolean {
@@ -14,6 +14,12 @@ export default class ModelCatalogModel extends ResourceModel {
14
14
  return "ModelCatalog";
15
15
  }
16
16
 
17
+ /**
18
+ */
19
+ static get modelName(): string {
20
+ return "ModelCatalogModel";
21
+ }
22
+
17
23
  /**
18
24
  */
19
25
  static isApplicableModel(data: Object): boolean {
@@ -30,6 +30,12 @@ export default class GroupingPanelModel extends ResourceModel {
30
30
  return "GroupingPanel";
31
31
  }
32
32
 
33
+ /**
34
+ */
35
+ static get modelName(): string {
36
+ return "GroupingPanelModel";
37
+ }
38
+
33
39
  /**
34
40
  */
35
41
  static isApplicableModel(data: ModularUIResponse): boolean {
@@ -25,9 +25,10 @@ import ContentModel from "./content/ContentModel";
25
25
  import ContentTypeModel from "./content/ContentTypeModel";
26
26
  import LookupOptionsModel from "./lookup/LookupOptionsModel";
27
27
 
28
+ import { IllegalArgumentException } from "../exceptions";
29
+
28
30
  import type ModularUIResponse from "../modularui/ModularUIResponse";
29
31
  import type { ModularUIModel } from "./types";
30
- import { IllegalArgumentException } from "../exceptions";
31
32
 
32
33
  /**
33
34
  * Mapping of models and resourcetypes
@@ -62,7 +63,8 @@ const RESOURCE_MODELS = [
62
63
  * Resolve a model by resource
63
64
  */
64
65
  const resolveModel = (
65
- data: ModularUIResponse
66
+ data: ModularUIResponse,
67
+ availableModels: Array<Class<ModularUIModel>> = RESOURCE_MODELS
66
68
  ): Class<ModularUIModel> | null => {
67
69
  if (!data) {
68
70
  throw new IllegalArgumentException(
@@ -72,11 +74,11 @@ const resolveModel = (
72
74
 
73
75
  if (!has(data.contributions, "resourcetype")) {
74
76
  throw new IllegalArgumentException(
75
- "Data has wrong format, missing resourcetype in contributions, cannot resolve model"
77
+ "Data has wrong format, missing resourcetype property in contributions, cannot resolve model"
76
78
  );
77
79
  }
78
80
 
79
- const resourceTypeModel = RESOURCE_MODELS.find((resourceModel) =>
81
+ const resourceTypeModel = availableModels.find((resourceModel) =>
80
82
  resourceModel.isApplicableModel(data)
81
83
  );
82
84
 
@@ -14,6 +14,12 @@ export default class CaseSearchModel extends ListModel {
14
14
  return "CaseSearch";
15
15
  }
16
16
 
17
+ /**
18
+ */
19
+ static get modelName(): string {
20
+ return "CaseSearchModel";
21
+ }
22
+
17
23
  /**
18
24
  */
19
25
  static isApplicableModel(data: ModularUIResponse): boolean {
@@ -35,6 +35,12 @@ export default class TabModel extends ResourceModel {
35
35
  return "Tab";
36
36
  }
37
37
 
38
+ /**
39
+ */
40
+ static get modelName(): string {
41
+ return "TabModel";
42
+ }
43
+
38
44
  /**
39
45
  */
40
46
  static isApplicableModel(data: ModularUIResponse): boolean {
@@ -51,6 +51,12 @@ export default class TaskGroupModel extends ResourceModel {
51
51
  return "TaskGroup";
52
52
  }
53
53
 
54
+ /**
55
+ */
56
+ static get modelName(): string {
57
+ return "TaskGroupModel";
58
+ }
59
+
54
60
  /**
55
61
  */
56
62
  static isApplicableModel(data: ModularUIResponse): boolean {
@@ -157,7 +157,7 @@ export interface IModelWithChildModels {
157
157
  export type AuthenticationType = {
158
158
  name: string,
159
159
  authentication: string,
160
- redirectUri: string,
160
+ redirectUri?: string,
161
161
  isPrimary: boolean,
162
162
  };
163
163
 
@@ -13,6 +13,12 @@ export default class UserModel extends ResourceModel {
13
13
  return "User";
14
14
  }
15
15
 
16
+ /**
17
+ */
18
+ static get modelName(): string {
19
+ return "UserModel";
20
+ }
21
+
16
22
  /**
17
23
  */
18
24
  static isApplicableModel(data: ModularUIResponse): boolean {
@@ -44,4 +44,10 @@ export default class UserProfileModel extends UserModel {
44
44
  get attributeCollection(): AttributeCollection {
45
45
  return this._attributeCollection;
46
46
  }
47
+
48
+ /**
49
+ */
50
+ static get modelName(): string {
51
+ return "UserProfileModel";
52
+ }
47
53
  }
@@ -19,6 +19,12 @@ class UserServicesModel extends ResourceModel {
19
19
  return "UserServices";
20
20
  }
21
21
 
22
+ /**
23
+ */
24
+ static get modelName(): string {
25
+ return "UserServicesModel";
26
+ }
27
+
22
28
  /**
23
29
  */
24
30
  static isApplicableModel(data: ModularUIResponse): boolean {
@@ -25,7 +25,11 @@ import { IllegalArgumentException, IllegalStateException } from "../exceptions";
25
25
 
26
26
  import { isPlainObject } from "../utils/helpers/objects";
27
27
 
28
- import type { RequestBaseOptions } from "../utils/fetch/types";
28
+ import type { TargetModel } from "./types";
29
+ import type {
30
+ RequestBaseOptions,
31
+ RequestModularUIOptions,
32
+ } from "../utils/fetch/types";
29
33
  import type { ModularUIModel } from "../models/types";
30
34
 
31
35
  /**
@@ -36,8 +40,9 @@ class ModularUIRequest {
36
40
  _response: ModularUIResponse;
37
41
 
38
42
  _href: Href;
39
- _options: RequestBaseOptions;
40
- _targetModel: ?Class<ModularUIModel>;
43
+ _options: RequestModularUIOptions;
44
+ _targetModel: ?TargetModel;
45
+ _forceTargetModel: boolean = false;
41
46
  _contributionsHref: string;
42
47
  _locale: string;
43
48
  _method: $Keys<typeof HTTP_METHODS> = HTTP_METHODS.GET;
@@ -46,7 +51,10 @@ class ModularUIRequest {
46
51
 
47
52
  /**
48
53
  */
49
- constructor(href: Href | string, options: $Shape<RequestBaseOptions> = {}) {
54
+ constructor(
55
+ href: Href | string,
56
+ options: $Shape<RequestModularUIOptions> = {}
57
+ ) {
50
58
  if (!href) {
51
59
  throw new IllegalArgumentException(
52
60
  "You must pass a href to the resource that is requested"
@@ -132,7 +140,7 @@ class ModularUIRequest {
132
140
 
133
141
  /**
134
142
  */
135
- get options(): RequestBaseOptions {
143
+ get options(): RequestModularUIOptions {
136
144
  return {
137
145
  ...this._options,
138
146
  locale: this.locale,
@@ -142,7 +150,24 @@ class ModularUIRequest {
142
150
 
143
151
  /**
144
152
  */
145
- set options(options: RequestBaseOptions) {
153
+ get requestOptions(): RequestBaseOptions {
154
+ /* eslint-disable no-unused-vars */
155
+ const {
156
+ targetModel,
157
+ forceTargetModel,
158
+ updateModel,
159
+ childmodels,
160
+ isValidationRequest,
161
+ removeOnUnmount,
162
+ ...requestOptions
163
+ } = this.options;
164
+ /* eslint-enable no-unused-vars */
165
+ return requestOptions;
166
+ }
167
+
168
+ /**
169
+ */
170
+ set options(options: RequestModularUIOptions) {
146
171
  this._options = options;
147
172
  }
148
173
 
@@ -156,31 +181,73 @@ class ModularUIRequest {
156
181
 
157
182
  /**
158
183
  */
159
- set targetModel(targetModel: ?Class<ModularUIModel>) {
184
+ set targetModel(targetModel: TargetModel) {
160
185
  this._targetModel = targetModel;
161
186
  }
162
187
 
163
188
  /**
164
189
  */
165
- get targetModel(): ?Class<ModularUIModel> {
190
+ get targetModel(): ?TargetModel {
166
191
  return this._targetModel;
167
192
  }
168
193
 
169
194
  /**
170
195
  */
171
- createModel(): ModularUIModel {
172
- const Model = this.targetModel || resolveModel(this.response);
196
+ set forceTargetModel(forceTargetModel: boolean) {
197
+ this._forceTargetModel = forceTargetModel ?? false;
198
+ }
199
+
200
+ /**
201
+ */
202
+ get forceTargetModel(): boolean {
203
+ return this._forceTargetModel;
204
+ }
205
+
206
+ /**
207
+ */
208
+ resolveModel(): Class<ModularUIModel> {
209
+ let availableModels;
210
+ if (this.targetModel) {
211
+ availableModels = Array.isArray(this.targetModel)
212
+ ? [...this.targetModel]
213
+ : [this.targetModel];
214
+
215
+ if (this.forceTargetModel) {
216
+ return availableModels[0];
217
+ }
218
+ }
219
+
220
+ const Model: Class<ModularUIModel> | null = resolveModel(
221
+ this.response,
222
+ availableModels
223
+ );
173
224
 
174
- // check for ResourceModel
175
225
  if (Model && Model.isApplicableModel) {
176
- return new Model(this.response);
226
+ return Model;
227
+ }
228
+
229
+ if (availableModels) {
230
+ throw new IllegalStateException(
231
+ `data for ${this.href.toString()} is not applicable for model(s): ${availableModels
232
+ .map((m) => m.modelName)
233
+ .join(", ")}, received response: ${JSON.stringify(this.response)}`
234
+ );
177
235
  }
178
236
 
179
237
  throw new IllegalStateException(
180
- `No model available for data: ${JSON.stringify(this.response)}`
238
+ `no javascript model is applicable for received request of ${this.href.toString()}, with response: ${JSON.stringify(
239
+ this.response
240
+ )}`
181
241
  );
182
242
  }
183
243
 
244
+ /**
245
+ */
246
+ createModel(): ModularUIModel {
247
+ const Model = this.resolveModel();
248
+ return new Model(this.response);
249
+ }
250
+
184
251
  /**
185
252
  */
186
253
  processContributionsService(contributionsData: Object): void {
@@ -274,7 +341,7 @@ class ModularUIRequest {
274
341
  */
275
342
  fetchDataService(): Promise<any> {
276
343
  return universalFetch({
277
- ...this.options,
344
+ ...this.requestOptions,
278
345
  url: `${BASE}${this.href.path}`,
279
346
  params: this.href.getQuerystringForModularUI(),
280
347
  locale: this.options.locale,
@@ -451,7 +518,7 @@ class ModularUIRequest {
451
518
  );
452
519
 
453
520
  return universalFetch({
454
- ...this.options,
521
+ ...this.requestOptions,
455
522
  url: `${BASE}${href}`,
456
523
  })
457
524
  .then((response: Object) => {
@@ -519,10 +586,9 @@ class ModularUIRequest {
519
586
  ) {
520
587
  const validationHref = this.href.setParameter("commit", "false");
521
588
  return universalFetch({
522
- ...this.options,
589
+ ...this.requestOptions,
523
590
  url: `${BASE}${this.href.path}`,
524
591
  params: validationHref.getQuerystringForModularUI(),
525
- childmodels: false,
526
592
  data: this.getDynamicValidationData(model),
527
593
  }).then((data) => {
528
594
  if (data == null || typeof data !== "object") {
@@ -115,17 +115,12 @@ describe("modularUIRequest", () => {
115
115
  expect(requestWithChildModels.withChildModels).toBe(true);
116
116
  });
117
117
 
118
- it("can create a model from a targetModel", () => {
118
+ it("Throws when data is missing", () => {
119
119
  const requestWithTargetModel = new ModularUIRequest("/");
120
120
  requestWithTargetModel.targetModel = ApplicationModel;
121
-
122
- const model = requestWithTargetModel.createModel();
123
- expect(model).toBeInstanceOf(ApplicationModel);
124
-
125
- const wrongTargetModel = new ModularUIRequest("/");
126
- wrongTargetModel.targetModel = Href;
127
-
128
- expect(() => wrongTargetModel.createModel()).toThrow(IllegalStateException);
121
+ expect(() => requestWithTargetModel.createModel()).toThrow(
122
+ IllegalArgumentException
123
+ );
129
124
  });
130
125
 
131
126
  it("creates a model from a response", () => {
@@ -0,0 +1,4 @@
1
+ // @flow
2
+ import type { ModularUIModel } from "../models";
3
+
4
+ export type TargetModel = Class<ModularUIModel> | Array<Class<ModularUIModel>>;