@beinformed/ui 1.25.2 → 1.25.4

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 (239) hide show
  1. package/CHANGELOG.md +12 -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 +3 -0
  8. package/esm/hooks/useModularUIBasic.js.map +1 -1
  9. package/esm/hooks/useModularUIModel.js +7 -0
  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 +38 -11
  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.map +1 -1
  69. package/esm/redux/_modularui/ModularUIMiddleware.js.map +1 -1
  70. package/esm/redux/_modularui/types.js.map +1 -1
  71. package/esm/redux/_modularui/withModularUI.js.map +1 -1
  72. package/esm/utils/fetch/types.js.map +1 -1
  73. package/lib/constants/Constants.js +7 -1
  74. package/lib/constants/Constants.js.flow +6 -0
  75. package/lib/constants/Constants.js.map +1 -1
  76. package/lib/hooks/__tests__/UseModularUIModel.spec.js.flow +1 -1
  77. package/lib/hooks/__tests__/useModelCatalog.spec.js.flow +1 -1
  78. package/lib/hooks/__tests__/useModularUIBasic.spec.js.flow +2 -2
  79. package/lib/hooks/useAuthentication.js +4 -4
  80. package/lib/hooks/useAuthentication.js.flow +17 -5
  81. package/lib/hooks/useAuthentication.js.map +1 -1
  82. package/lib/hooks/useModularUI.js.flow +2 -2
  83. package/lib/hooks/useModularUI.js.map +1 -1
  84. package/lib/hooks/useModularUIBasic.js +3 -0
  85. package/lib/hooks/useModularUIBasic.js.flow +6 -3
  86. package/lib/hooks/useModularUIBasic.js.map +1 -1
  87. package/lib/hooks/useModularUIModel.js +9 -1
  88. package/lib/hooks/useModularUIModel.js.flow +18 -10
  89. package/lib/hooks/useModularUIModel.js.map +1 -1
  90. package/lib/hooks/useModularUIRequest.js +5 -7
  91. package/lib/hooks/useModularUIRequest.js.flow +12 -11
  92. package/lib/hooks/useModularUIRequest.js.map +1 -1
  93. package/lib/models/application/ApplicationModel.js +8 -1
  94. package/lib/models/application/ApplicationModel.js.flow +10 -1
  95. package/lib/models/application/ApplicationModel.js.map +1 -1
  96. package/lib/models/base/ResourceModel.js +7 -0
  97. package/lib/models/base/ResourceModel.js.flow +7 -0
  98. package/lib/models/base/ResourceModel.js.map +1 -1
  99. package/lib/models/caseview/CaseViewModel.js +6 -0
  100. package/lib/models/caseview/CaseViewModel.js.flow +6 -0
  101. package/lib/models/caseview/CaseViewModel.js.map +1 -1
  102. package/lib/models/concepts/BusinessScenarioModel.js +6 -0
  103. package/lib/models/concepts/BusinessScenarioModel.js.flow +6 -0
  104. package/lib/models/concepts/BusinessScenarioModel.js.map +1 -1
  105. package/lib/models/concepts/ConceptDetailModel.js +6 -0
  106. package/lib/models/concepts/ConceptDetailModel.js.flow +6 -0
  107. package/lib/models/concepts/ConceptDetailModel.js.map +1 -1
  108. package/lib/models/concepts/ConceptIndexModel.js +6 -0
  109. package/lib/models/concepts/ConceptIndexModel.js.flow +6 -0
  110. package/lib/models/concepts/ConceptIndexModel.js.map +1 -1
  111. package/lib/models/concepts/ConceptTypeDetailModel.js +6 -0
  112. package/lib/models/concepts/ConceptTypeDetailModel.js.flow +6 -0
  113. package/lib/models/concepts/ConceptTypeDetailModel.js.map +1 -1
  114. package/lib/models/content/ContentIndexModel.js +6 -0
  115. package/lib/models/content/ContentIndexModel.js.flow +6 -0
  116. package/lib/models/content/ContentIndexModel.js.map +1 -1
  117. package/lib/models/content/ContentModel.js +6 -0
  118. package/lib/models/content/ContentModel.js.flow +6 -0
  119. package/lib/models/content/ContentModel.js.map +1 -1
  120. package/lib/models/content/ContentTOCModel.js +6 -0
  121. package/lib/models/content/ContentTOCModel.js.flow +6 -0
  122. package/lib/models/content/ContentTOCModel.js.map +1 -1
  123. package/lib/models/content/ContentTypeModel.js +6 -0
  124. package/lib/models/content/ContentTypeModel.js.flow +6 -0
  125. package/lib/models/content/ContentTypeModel.js.map +1 -1
  126. package/lib/models/detail/DetailModel.js +6 -0
  127. package/lib/models/detail/DetailModel.js.flow +6 -0
  128. package/lib/models/detail/DetailModel.js.map +1 -1
  129. package/lib/models/form/FormModel.js +6 -0
  130. package/lib/models/form/FormModel.js.flow +6 -0
  131. package/lib/models/form/FormModel.js.map +1 -1
  132. package/lib/models/list/ListDetailModel.js +6 -0
  133. package/lib/models/list/ListDetailModel.js.flow +6 -0
  134. package/lib/models/list/ListDetailModel.js.map +1 -1
  135. package/lib/models/list/ListModel.js +6 -0
  136. package/lib/models/list/ListModel.js.flow +6 -0
  137. package/lib/models/list/ListModel.js.map +1 -1
  138. package/lib/models/lookup/LookupOptionsModel.js +6 -0
  139. package/lib/models/lookup/LookupOptionsModel.js.flow +6 -0
  140. package/lib/models/lookup/LookupOptionsModel.js.map +1 -1
  141. package/lib/models/modelcatalog/ModelCatalogModel.js +6 -0
  142. package/lib/models/modelcatalog/ModelCatalogModel.js.flow +6 -0
  143. package/lib/models/modelcatalog/ModelCatalogModel.js.map +1 -1
  144. package/lib/models/panels/GroupingPanelModel.js +6 -0
  145. package/lib/models/panels/GroupingPanelModel.js.flow +6 -0
  146. package/lib/models/panels/GroupingPanelModel.js.map +1 -1
  147. package/lib/models/resolveModel.js +4 -3
  148. package/lib/models/resolveModel.js.flow +6 -4
  149. package/lib/models/resolveModel.js.map +1 -1
  150. package/lib/models/search/CaseSearchModel.js +6 -0
  151. package/lib/models/search/CaseSearchModel.js.flow +6 -0
  152. package/lib/models/search/CaseSearchModel.js.map +1 -1
  153. package/lib/models/tab/TabModel.js +6 -0
  154. package/lib/models/tab/TabModel.js.flow +6 -0
  155. package/lib/models/tab/TabModel.js.map +1 -1
  156. package/lib/models/taskgroup/TaskGroupModel.js +6 -0
  157. package/lib/models/taskgroup/TaskGroupModel.js.flow +6 -0
  158. package/lib/models/taskgroup/TaskGroupModel.js.map +1 -1
  159. package/lib/models/types.js.flow +1 -1
  160. package/lib/models/types.js.map +1 -1
  161. package/lib/models/user/UserModel.js +6 -0
  162. package/lib/models/user/UserModel.js.flow +6 -0
  163. package/lib/models/user/UserModel.js.map +1 -1
  164. package/lib/models/user/UserProfileModel.js +6 -0
  165. package/lib/models/user/UserProfileModel.js.flow +6 -0
  166. package/lib/models/user/UserProfileModel.js.map +1 -1
  167. package/lib/models/user/UserServicesModel.js +6 -0
  168. package/lib/models/user/UserServicesModel.js.flow +6 -0
  169. package/lib/models/user/UserServicesModel.js.map +1 -1
  170. package/lib/modularui/ModularUIRequest.js +38 -11
  171. package/lib/modularui/ModularUIRequest.js.flow +65 -17
  172. package/lib/modularui/ModularUIRequest.js.map +1 -1
  173. package/lib/modularui/__tests__/ModularUIRequest.spec.js.flow +4 -9
  174. package/lib/modularui/types.js +2 -0
  175. package/lib/modularui/types.js.flow +4 -0
  176. package/lib/modularui/types.js.map +1 -0
  177. package/lib/redux/_modularui/ModularUIActions.js.flow +4 -4
  178. package/lib/redux/_modularui/ModularUIActions.js.map +1 -1
  179. package/lib/redux/_modularui/ModularUIMiddleware.js.flow +3 -2
  180. package/lib/redux/_modularui/ModularUIMiddleware.js.map +1 -1
  181. package/lib/redux/_modularui/types.js.flow +4 -3
  182. package/lib/redux/_modularui/types.js.map +1 -1
  183. package/lib/redux/_modularui/withModularUI.js.flow +2 -2
  184. package/lib/redux/_modularui/withModularUI.js.map +1 -1
  185. package/lib/utils/fetch/types.js.flow +12 -4
  186. package/lib/utils/fetch/types.js.map +1 -1
  187. package/package.json +7 -7
  188. package/src/constants/Constants.js +6 -0
  189. package/src/hooks/__tests__/UseModularUIModel.spec.js +1 -1
  190. package/src/hooks/__tests__/useModelCatalog.spec.js +1 -1
  191. package/src/hooks/__tests__/useModularUIBasic.spec.js +2 -2
  192. package/src/hooks/useAuthentication.js +17 -5
  193. package/src/hooks/useModularUI.js +2 -2
  194. package/src/hooks/useModularUIBasic.js +6 -3
  195. package/src/hooks/useModularUIModel.js +18 -10
  196. package/src/hooks/useModularUIRequest.js +12 -11
  197. package/src/models/application/ApplicationModel.js +10 -1
  198. package/src/models/base/ResourceModel.js +7 -0
  199. package/src/models/caseview/CaseViewModel.js +6 -0
  200. package/src/models/concepts/BusinessScenarioModel.js +6 -0
  201. package/src/models/concepts/ConceptDetailModel.js +6 -0
  202. package/src/models/concepts/ConceptIndexModel.js +6 -0
  203. package/src/models/concepts/ConceptTypeDetailModel.js +6 -0
  204. package/src/models/content/ContentIndexModel.js +6 -0
  205. package/src/models/content/ContentModel.js +6 -0
  206. package/src/models/content/ContentTOCModel.js +6 -0
  207. package/src/models/content/ContentTypeModel.js +6 -0
  208. package/src/models/detail/DetailModel.js +6 -0
  209. package/src/models/form/FormModel.js +6 -0
  210. package/src/models/list/ListDetailModel.js +6 -0
  211. package/src/models/list/ListModel.js +6 -0
  212. package/src/models/lookup/LookupOptionsModel.js +6 -0
  213. package/src/models/modelcatalog/ModelCatalogModel.js +6 -0
  214. package/src/models/panels/GroupingPanelModel.js +6 -0
  215. package/src/models/resolveModel.js +6 -4
  216. package/src/models/search/CaseSearchModel.js +6 -0
  217. package/src/models/tab/TabModel.js +6 -0
  218. package/src/models/taskgroup/TaskGroupModel.js +6 -0
  219. package/src/models/types.js +1 -1
  220. package/src/models/user/UserModel.js +6 -0
  221. package/src/models/user/UserProfileModel.js +6 -0
  222. package/src/models/user/UserServicesModel.js +6 -0
  223. package/src/modularui/ModularUIRequest.js +65 -17
  224. package/src/modularui/__tests__/ModularUIRequest.spec.js +4 -9
  225. package/src/modularui/types.js +4 -0
  226. package/src/redux/_modularui/ModularUIActions.js +4 -4
  227. package/src/redux/_modularui/ModularUIMiddleware.js +3 -2
  228. package/src/redux/_modularui/types.js +4 -3
  229. package/src/redux/_modularui/withModularUI.js +2 -2
  230. package/src/utils/fetch/types.js +12 -4
  231. package/types/constants/Constants.d.ts +5 -0
  232. package/types/models/base/ResourceModel.d.ts +4 -0
  233. package/types/models/form/FormObjectModel.d.ts +28 -2
  234. package/types/models/resolveModel.d.ts +1 -1
  235. package/types/models/types.d.ts +1 -1
  236. package/types/modularui/ModularUIRequest.d.ts +15 -7
  237. package/types/modularui/types.d.ts +2 -0
  238. package/types/redux/_modularui/types.d.ts +2 -2
  239. package/types/utils/fetch/types.d.ts +8 -5
@@ -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,8 @@ 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;
41
45
  _contributionsHref: string;
42
46
  _locale: string;
43
47
  _method: $Keys<typeof HTTP_METHODS> = HTTP_METHODS.GET;
@@ -46,7 +50,10 @@ class ModularUIRequest {
46
50
 
47
51
  /**
48
52
  */
49
- constructor(href: Href | string, options: $Shape<RequestBaseOptions> = {}) {
53
+ constructor(
54
+ href: Href | string,
55
+ options: $Shape<RequestModularUIOptions> = {}
56
+ ) {
50
57
  if (!href) {
51
58
  throw new IllegalArgumentException(
52
59
  "You must pass a href to the resource that is requested"
@@ -132,7 +139,7 @@ class ModularUIRequest {
132
139
 
133
140
  /**
134
141
  */
135
- get options(): RequestBaseOptions {
142
+ get options(): RequestModularUIOptions {
136
143
  return {
137
144
  ...this._options,
138
145
  locale: this.locale,
@@ -142,7 +149,23 @@ class ModularUIRequest {
142
149
 
143
150
  /**
144
151
  */
145
- set options(options: RequestBaseOptions) {
152
+ get requestOptions(): RequestBaseOptions {
153
+ /* eslint-disable no-unused-vars */
154
+ const {
155
+ targetModel,
156
+ updateModel,
157
+ childmodels,
158
+ isValidationRequest,
159
+ removeOnUnmount,
160
+ ...requestOptions
161
+ } = this.options;
162
+ /* eslint-enable no-unused-vars */
163
+ return requestOptions;
164
+ }
165
+
166
+ /**
167
+ */
168
+ set options(options: RequestModularUIOptions) {
146
169
  this._options = options;
147
170
  }
148
171
 
@@ -156,31 +179,57 @@ class ModularUIRequest {
156
179
 
157
180
  /**
158
181
  */
159
- set targetModel(targetModel: ?Class<ModularUIModel>) {
182
+ set targetModel(targetModel: TargetModel) {
160
183
  this._targetModel = targetModel;
161
184
  }
162
185
 
163
186
  /**
164
187
  */
165
- get targetModel(): ?Class<ModularUIModel> {
188
+ get targetModel(): ?TargetModel {
166
189
  return this._targetModel;
167
190
  }
168
191
 
169
192
  /**
170
193
  */
171
- createModel(): ModularUIModel {
172
- const Model = this.targetModel || resolveModel(this.response);
194
+ resolveModel(): Class<ModularUIModel> {
195
+ let availableModels;
196
+ if (this.targetModel) {
197
+ availableModels = Array.isArray(this.targetModel)
198
+ ? [...this.targetModel]
199
+ : [this.targetModel];
200
+ }
201
+
202
+ const Model: Class<ModularUIModel> | null = resolveModel(
203
+ this.response,
204
+ availableModels
205
+ );
173
206
 
174
- // check for ResourceModel
175
207
  if (Model && Model.isApplicableModel) {
176
- return new Model(this.response);
208
+ return Model;
209
+ }
210
+
211
+ if (availableModels) {
212
+ throw new IllegalStateException(
213
+ `data is not applicable for model(s): ${availableModels
214
+ .map((m) => m.modelName)
215
+ .join(", ")}`
216
+ );
177
217
  }
178
218
 
179
219
  throw new IllegalStateException(
180
- `No model available for data: ${JSON.stringify(this.response)}`
220
+ `no javascript model is applicable for received response: ${JSON.stringify(
221
+ this.response
222
+ )}`
181
223
  );
182
224
  }
183
225
 
226
+ /**
227
+ */
228
+ createModel(): ModularUIModel {
229
+ const Model = this.resolveModel();
230
+ return new Model(this.response);
231
+ }
232
+
184
233
  /**
185
234
  */
186
235
  processContributionsService(contributionsData: Object): void {
@@ -274,7 +323,7 @@ class ModularUIRequest {
274
323
  */
275
324
  fetchDataService(): Promise<any> {
276
325
  return universalFetch({
277
- ...this.options,
326
+ ...this.requestOptions,
278
327
  url: `${BASE}${this.href.path}`,
279
328
  params: this.href.getQuerystringForModularUI(),
280
329
  locale: this.options.locale,
@@ -451,7 +500,7 @@ class ModularUIRequest {
451
500
  );
452
501
 
453
502
  return universalFetch({
454
- ...this.options,
503
+ ...this.requestOptions,
455
504
  url: `${BASE}${href}`,
456
505
  })
457
506
  .then((response: Object) => {
@@ -519,10 +568,9 @@ class ModularUIRequest {
519
568
  ) {
520
569
  const validationHref = this.href.setParameter("commit", "false");
521
570
  return universalFetch({
522
- ...this.options,
571
+ ...this.requestOptions,
523
572
  url: `${BASE}${this.href.path}`,
524
573
  params: validationHref.getQuerystringForModularUI(),
525
- childmodels: false,
526
574
  data: this.getDynamicValidationData(model),
527
575
  }).then((data) => {
528
576
  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>>;
@@ -15,7 +15,7 @@ import type {
15
15
  ResetModularUIAction,
16
16
  UpdateStatusAction,
17
17
  } from "./types";
18
- import type { RequestBaseOptions } from "../../utils/fetch/types";
18
+ import type { RequestModularUIOptions } from "../../utils/fetch/types";
19
19
 
20
20
  /**
21
21
  */
@@ -94,7 +94,7 @@ const loadModelSuccessAction = (
94
94
  export const loadModel = (
95
95
  key: string,
96
96
  href: Href | string,
97
- options?: RequestBaseOptions
97
+ options?: RequestModularUIOptions
98
98
  ): ModularUIAction => ({
99
99
  type: "MODULARUI/FETCH",
100
100
  payload: {
@@ -131,7 +131,7 @@ export const loadModularUI =
131
131
  (
132
132
  key: string,
133
133
  href: Href | string,
134
- options?: RequestBaseOptions
134
+ options?: RequestModularUIOptions
135
135
  ): ThunkAction =>
136
136
  (dispatch: Dispatch) => {
137
137
  dispatch(updateStatus(key, MODULARUI_STATUS.LOADING));
@@ -154,7 +154,7 @@ export const loadModularUI =
154
154
  */
155
155
  export const reloadModel = (
156
156
  model: ModularUIModel,
157
- options?: RequestBaseOptions
157
+ options?: RequestModularUIOptions
158
158
  ): ThunkAction =>
159
159
  loadModularUI(model.connectKey, model.selfhref, {
160
160
  ...options,
@@ -16,6 +16,7 @@ import type {
16
16
  import type { ModularUIModel } from "../../models/types";
17
17
  import type Href from "../../models/href/Href";
18
18
  import type { ModularUIAction, SuccessAction, ErrorAction } from "./types";
19
+ import type { TargetModel } from "../../modularui/types";
19
20
 
20
21
  type RequestOptions = {
21
22
  href: Href,
@@ -23,14 +24,14 @@ type RequestOptions = {
23
24
  data?: string | { [key: string]: string },
24
25
  locale: string,
25
26
  childmodels?: boolean,
26
- targetModel?: Class<ModularUIModel>,
27
+ targetModel?: TargetModel,
27
28
  isReload?: boolean,
28
29
  };
29
30
 
30
31
  /**
31
32
  * Symbol key that carries API call info interpreted by this Redux middleware.
32
33
  */
33
- const createRequest = (modularui: RequestOptions) => {
34
+ const createRequest = (modularui: RequestOptions): ModularUIRequest => {
34
35
  const request = new ModularUIRequest(modularui.href, {
35
36
  method: modularui.method || HTTP_METHODS.GET,
36
37
  data: modularui.data || {},
@@ -7,13 +7,14 @@ import typeof {
7
7
  HTTP_METHODS,
8
8
  MODULARUI_STATUS,
9
9
  } from "../../constants/Constants";
10
- import type { RequestBaseOptions } from "../../utils/fetch/types";
11
10
  import type { ComponentType } from "react";
11
+ import type { TargetModel } from "../../modularui/types";
12
+ import type { RequestModularUIOptions } from "../../utils/fetch/types";
12
13
 
13
14
  export type ModularUIOptions = {
14
15
  propName?: string,
15
16
  removeOnUnmount?: boolean,
16
- ...RequestBaseOptions,
17
+ ...RequestModularUIOptions,
17
18
  };
18
19
 
19
20
  export type ModelEntry = {
@@ -56,7 +57,7 @@ export type ModularUIAction = {
56
57
  data?: string | { [key: string]: string },
57
58
  locale: string,
58
59
  childmodels?: boolean,
59
- targetModel?: Class<ModularUIModel>,
60
+ targetModel?: TargetModel,
60
61
  successAction: (
61
62
  model: ModularUIModel
62
63
  ) => UpdateModelAction | SetModelAction,
@@ -21,9 +21,9 @@ import type {
21
21
  } from "../types";
22
22
  import type Href from "../../models/href/Href";
23
23
  import type { ModularUIModel } from "../../models/types";
24
- import type { RequestBaseOptions } from "../../utils/fetch/types";
25
24
  import type FetchException from "../../exceptions/FetchException";
26
25
  import type { ComponentType } from "react";
26
+ import type { RequestModularUIOptions } from "../../utils/fetch/types";
27
27
 
28
28
  type StateProps = {
29
29
  modularui: (href: Href, options: any) => ModularUIRequest,
@@ -35,7 +35,7 @@ type DispatchProps = {
35
35
  finishProgress: () => FinishProgressAction,
36
36
  reloadModel: (
37
37
  model: ModularUIModel,
38
- options?: RequestBaseOptions
38
+ options?: RequestModularUIOptions
39
39
  ) => ThunkAction,
40
40
  handleError: (error: Error | FetchException) => ThunkAction,
41
41
  };
@@ -1,10 +1,12 @@
1
1
  // @flow
2
2
  import typeof { HTTP_METHODS } from "../../constants/Constants";
3
3
  import type { ModularUIModel } from "../../models/types";
4
+ import type { TargetModel } from "../../modularui/types";
4
5
 
5
6
  export type RequestURLOptions = {
6
7
  url: string,
7
8
  };
9
+
8
10
  export type RequestBaseOptions = {
9
11
  method?: $Keys<HTTP_METHODS>,
10
12
  params?: string,
@@ -24,11 +26,17 @@ export type RequestBaseOptions = {
24
26
  includeContext?: boolean,
25
27
  locale?: string,
26
28
  cache?: boolean,
29
+ isReload?: boolean,
30
+ };
31
+
32
+ export type RequestOptions = { ...RequestURLOptions, ...RequestBaseOptions };
33
+
34
+ export type RequestModularUIOptions = {
35
+ ...RequestBaseOptions,
36
+ targetModel?: TargetModel,
37
+ updateModel?: ModularUIModel,
27
38
  childmodels?: boolean,
28
39
  isValidationRequest?: boolean,
29
- targetModel?: Class<ModularUIModel>,
30
- updateModel?: ModularUIModel,
31
- isReload?: boolean,
40
+
32
41
  removeOnUnmount?: boolean,
33
42
  };
34
- export type RequestOptions = { ...RequestURLOptions, ...RequestBaseOptions };
@@ -149,3 +149,8 @@ export const LOGIN_PATH_SETTING: "FormClient.login_url";
149
149
  export const LOGIN_USERNAME_SETTING: "FormClient.username_field_name";
150
150
  export const LOGIN_PASSWORD_SETTING: "FormClient.password_field_name";
151
151
  export const LOGOUT_PATH_SETTING: "FormClient.logout_url";
152
+ export namespace fallbackDefaultAuthenticationType {
153
+ const name: string;
154
+ const authentication: string;
155
+ const isPrimary: boolean;
156
+ }
@@ -3,6 +3,10 @@ export default ResourceModel;
3
3
  * Base model, this the foundation for models that represent modular ui services, e.g. application, tab, caseview, etc
4
4
  */
5
5
  declare class ResourceModel extends BaseModel {
6
+ /**
7
+ * Property to render name of a model, is original name after transpilation
8
+ */
9
+ static get modelName(): string;
6
10
  /**
7
11
  * Returns true when the model is supported based on configuration found in contributions
8
12
  *
@@ -145,8 +145,33 @@ export default class FormObjectModel extends BaseModel {
145
145
  /**
146
146
  */
147
147
  get dynamicValidationsLoaded(): boolean;
148
- handleErrorValidations(errors: any): void;
149
- handleMissingValidations(missing: any): void;
148
+ /**
149
+ * Convert error json from a form service to validation messages on the form object and attributes
150
+ */
151
+ handleErrorValidations(errors: Array<{
152
+ anchor: {
153
+ objectid: string;
154
+ elementid?: string;
155
+ };
156
+ id: string;
157
+ message: string;
158
+ properties: MessageParameters;
159
+ layouthint: Array<string>;
160
+ }>): void;
161
+ /**
162
+ * Convert missing json from a form service to mandatory validation constraints and messages
163
+ */
164
+ handleMissingValidations(missing: {
165
+ anchors: Array<{
166
+ elements: Array<{
167
+ elementid: string;
168
+ }>;
169
+ } | {
170
+ anchor: {
171
+ elementid: string;
172
+ };
173
+ }>;
174
+ }): void;
150
175
  /**
151
176
  */
152
177
  updateValidations(data: any): FormObjectModel;
@@ -168,3 +193,4 @@ import { AttributeType } from "../types";
168
193
  import LinkModel from "../links/LinkModel";
169
194
  import { ModularUIModel } from "../types";
170
195
  import { FormErrorAnchor } from "../types";
196
+ import { MessageParameters } from "../../i18n/types";
@@ -2,6 +2,6 @@ export default resolveModel;
2
2
  /**
3
3
  * Resolve a model by resource
4
4
  */
5
- declare function resolveModel(data: ModularUIResponse): Class<ModularUIModel> | null;
5
+ declare function resolveModel(data: ModularUIResponse, availableModels?: Array<Class<ModularUIModel>>): Class<ModularUIModel> | null;
6
6
  import ModularUIResponse from "../modularui/ModularUIResponse";
7
7
  import { ModularUIModel } from "./types";
@@ -49,7 +49,7 @@ export interface IModelWithChildModels {
49
49
  type AuthenticationType = {
50
50
  name: string;
51
51
  authentication: string;
52
- redirectUri: string;
52
+ redirectUri?: string;
53
53
  isPrimary: boolean;
54
54
  };
55
55
  type FileEntryType = {