@beinformed/ui 1.13.4 → 1.13.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 (142) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/esm/models/attributes/AttributeContent.js +3 -3
  3. package/esm/models/attributes/AttributeContent.js.map +1 -1
  4. package/esm/models/attributes/AttributeModel.js.map +1 -1
  5. package/esm/models/attributes/BooleanAttributeModel.js +1 -0
  6. package/esm/models/attributes/BooleanAttributeModel.js.map +1 -1
  7. package/esm/models/attributes/ChoiceAttributeModel.js +1 -0
  8. package/esm/models/attributes/ChoiceAttributeModel.js.map +1 -1
  9. package/esm/models/attributes/ChoiceAttributeOptionCollection.js.map +1 -1
  10. package/esm/models/attributes/ChoiceAttributeOptionModel.js.map +1 -1
  11. package/esm/models/attributes/CompositeAttributeChildCollection.js +1 -1
  12. package/esm/models/attributes/CompositeAttributeChildCollection.js.map +1 -1
  13. package/esm/models/attributes/CompositeAttributeModel.js +2 -1
  14. package/esm/models/attributes/CompositeAttributeModel.js.map +1 -1
  15. package/esm/models/base/BaseCollection.js.map +1 -1
  16. package/esm/models/base/ResourceCollection.js +4 -2
  17. package/esm/models/base/ResourceCollection.js.map +1 -1
  18. package/esm/models/base/ResourceModel.js +1 -0
  19. package/esm/models/base/ResourceModel.js.map +1 -1
  20. package/esm/models/concepts/BusinessScenarioModel.js +2 -1
  21. package/esm/models/concepts/BusinessScenarioModel.js.map +1 -1
  22. package/esm/models/concepts/ConceptDetailModel.js +2 -1
  23. package/esm/models/concepts/ConceptDetailModel.js.map +1 -1
  24. package/esm/models/concepts/ConceptLinkModel.js.map +1 -1
  25. package/esm/models/concepts/ConceptRelationModel.js.map +1 -1
  26. package/esm/models/content/ContentLinkModel.js +2 -0
  27. package/esm/models/content/ContentLinkModel.js.map +1 -1
  28. package/esm/models/href/Href.js +1 -1
  29. package/esm/models/href/Href.js.map +1 -1
  30. package/esm/react-server/renderSSRComplete.js +1 -2
  31. package/esm/react-server/renderSSRComplete.js.map +1 -1
  32. package/esm/react-server/serverNoSSR.js +1 -1
  33. package/esm/react-server/serverNoSSR.js.map +1 -1
  34. package/esm/redux/_modularui/actions.js +16 -17
  35. package/esm/redux/_modularui/actions.js.map +1 -1
  36. package/esm/redux/_modularui/reducer.js +1 -2
  37. package/esm/redux/_modularui/reducer.js.map +1 -1
  38. package/esm/redux/actions/SignIn.js +5 -9
  39. package/esm/redux/actions/SignIn.js.map +1 -1
  40. package/esm/utils/helpers/objects.js +2 -1
  41. package/esm/utils/helpers/objects.js.map +1 -1
  42. package/lib/hooks/__tests__/useAuthentication.spec.js.flow +1 -0
  43. package/lib/models/attributes/AttributeContent.js +3 -3
  44. package/lib/models/attributes/AttributeContent.js.flow +3 -3
  45. package/lib/models/attributes/AttributeContent.js.map +1 -1
  46. package/lib/models/attributes/AttributeModel.js.flow +10 -2
  47. package/lib/models/attributes/AttributeModel.js.map +1 -1
  48. package/lib/models/attributes/BooleanAttributeModel.js +1 -0
  49. package/lib/models/attributes/BooleanAttributeModel.js.flow +4 -1
  50. package/lib/models/attributes/BooleanAttributeModel.js.map +1 -1
  51. package/lib/models/attributes/ChoiceAttributeModel.js +1 -0
  52. package/lib/models/attributes/ChoiceAttributeModel.js.flow +4 -1
  53. package/lib/models/attributes/ChoiceAttributeModel.js.map +1 -1
  54. package/lib/models/attributes/ChoiceAttributeOptionCollection.js.flow +1 -1
  55. package/lib/models/attributes/ChoiceAttributeOptionCollection.js.map +1 -1
  56. package/lib/models/attributes/ChoiceAttributeOptionModel.js.flow +5 -2
  57. package/lib/models/attributes/ChoiceAttributeOptionModel.js.map +1 -1
  58. package/lib/models/attributes/CompositeAttributeChildCollection.js +1 -1
  59. package/lib/models/attributes/CompositeAttributeChildCollection.js.flow +1 -1
  60. package/lib/models/attributes/CompositeAttributeChildCollection.js.map +1 -1
  61. package/lib/models/attributes/CompositeAttributeModel.js +2 -1
  62. package/lib/models/attributes/CompositeAttributeModel.js.flow +1 -0
  63. package/lib/models/attributes/CompositeAttributeModel.js.map +1 -1
  64. package/lib/models/base/BaseCollection.js.flow +2 -2
  65. package/lib/models/base/BaseCollection.js.map +1 -1
  66. package/lib/models/base/ResourceCollection.js +4 -2
  67. package/lib/models/base/ResourceCollection.js.flow +4 -6
  68. package/lib/models/base/ResourceCollection.js.map +1 -1
  69. package/lib/models/base/ResourceModel.js +1 -0
  70. package/lib/models/base/ResourceModel.js.flow +3 -2
  71. package/lib/models/base/ResourceModel.js.map +1 -1
  72. package/lib/models/concepts/BusinessScenarioModel.js +3 -1
  73. package/lib/models/concepts/BusinessScenarioModel.js.flow +2 -1
  74. package/lib/models/concepts/BusinessScenarioModel.js.map +1 -1
  75. package/lib/models/concepts/ConceptDetailModel.js +3 -1
  76. package/lib/models/concepts/ConceptDetailModel.js.flow +2 -2
  77. package/lib/models/concepts/ConceptDetailModel.js.map +1 -1
  78. package/lib/models/concepts/ConceptLinkModel.js.flow +5 -2
  79. package/lib/models/concepts/ConceptLinkModel.js.map +1 -1
  80. package/lib/models/concepts/ConceptRelationModel.js.flow +6 -2
  81. package/lib/models/concepts/ConceptRelationModel.js.map +1 -1
  82. package/lib/models/content/ContentLinkModel.js +2 -0
  83. package/lib/models/content/ContentLinkModel.js.flow +2 -0
  84. package/lib/models/content/ContentLinkModel.js.map +1 -1
  85. package/lib/models/href/Href.js +1 -1
  86. package/lib/models/href/Href.js.flow +4 -3
  87. package/lib/models/href/Href.js.map +1 -1
  88. package/lib/models/types.js.flow +2 -2
  89. package/lib/react-server/__tests__/serverUtil.spec.js.flow +15 -14
  90. package/lib/react-server/renderSSRComplete.js +1 -2
  91. package/lib/react-server/renderSSRComplete.js.flow +2 -1
  92. package/lib/react-server/renderSSRComplete.js.map +1 -1
  93. package/lib/react-server/serverNoSSR.js +1 -1
  94. package/lib/react-server/serverNoSSR.js.flow +1 -1
  95. package/lib/react-server/serverNoSSR.js.map +1 -1
  96. package/lib/redux/_modularui/__tests__/actions.spec.js.flow +1 -0
  97. package/lib/redux/_modularui/actions.js +12 -12
  98. package/lib/redux/_modularui/actions.js.flow +12 -12
  99. package/lib/redux/_modularui/actions.js.map +1 -1
  100. package/lib/redux/_modularui/reducer.js +1 -2
  101. package/lib/redux/_modularui/reducer.js.flow +0 -1
  102. package/lib/redux/_modularui/reducer.js.map +1 -1
  103. package/lib/redux/actions/SignIn.js +6 -9
  104. package/lib/redux/actions/SignIn.js.flow +5 -11
  105. package/lib/redux/actions/SignIn.js.map +1 -1
  106. package/lib/redux/actions/__tests__/Application.spec.js.flow +1 -0
  107. package/lib/redux/actions/__tests__/CustomErrorResponseHandler.spec.js.flow +2 -0
  108. package/lib/utils/fetch/__tests__/xhr.spec.js.flow +1 -0
  109. package/lib/utils/helpers/objects.js +3 -1
  110. package/lib/utils/helpers/objects.js.flow +2 -2
  111. package/lib/utils/helpers/objects.js.map +1 -1
  112. package/package.json +8 -8
  113. package/src/hooks/__tests__/useAuthentication.spec.js +1 -0
  114. package/src/models/attributes/AttributeContent.js +3 -3
  115. package/src/models/attributes/AttributeModel.js +10 -2
  116. package/src/models/attributes/BooleanAttributeModel.js +4 -1
  117. package/src/models/attributes/ChoiceAttributeModel.js +4 -1
  118. package/src/models/attributes/ChoiceAttributeOptionCollection.js +1 -1
  119. package/src/models/attributes/ChoiceAttributeOptionModel.js +5 -2
  120. package/src/models/attributes/CompositeAttributeChildCollection.js +1 -1
  121. package/src/models/attributes/CompositeAttributeModel.js +1 -0
  122. package/src/models/base/BaseCollection.js +2 -2
  123. package/src/models/base/ResourceCollection.js +4 -6
  124. package/src/models/base/ResourceModel.js +3 -2
  125. package/src/models/concepts/BusinessScenarioModel.js +2 -1
  126. package/src/models/concepts/ConceptDetailModel.js +2 -2
  127. package/src/models/concepts/ConceptLinkModel.js +5 -2
  128. package/src/models/concepts/ConceptRelationModel.js +6 -2
  129. package/src/models/content/ContentLinkModel.js +2 -0
  130. package/src/models/href/Href.js +4 -3
  131. package/src/models/types.js +2 -2
  132. package/src/react-server/__tests__/serverUtil.spec.js +15 -14
  133. package/src/react-server/renderSSRComplete.js +2 -1
  134. package/src/react-server/serverNoSSR.js +1 -1
  135. package/src/redux/_modularui/__tests__/actions.spec.js +1 -0
  136. package/src/redux/_modularui/actions.js +12 -12
  137. package/src/redux/_modularui/reducer.js +0 -1
  138. package/src/redux/actions/SignIn.js +5 -11
  139. package/src/redux/actions/__tests__/Application.spec.js +1 -0
  140. package/src/redux/actions/__tests__/CustomErrorResponseHandler.spec.js +2 -0
  141. package/src/utils/fetch/__tests__/xhr.spec.js +1 -0
  142. package/src/utils/helpers/objects.js +2 -2
@@ -2,6 +2,7 @@
2
2
  import ResourceModel from "../base/ResourceModel";
3
3
  import ConceptRelationCollection from "./ConceptRelationCollection";
4
4
  import SourceReferenceCollection from "./SourceReferenceCollection";
5
+ import ConceptTypeDetailModel from "./ConceptTypeDetailModel";
5
6
 
6
7
  import { TIMEVERSION_FILTER_NAME } from "../../constants/Constants";
7
8
 
@@ -14,7 +15,6 @@ import type {
14
15
  import type { ModularUIResponse } from "../../modularui";
15
16
  import type Href from "../href/Href";
16
17
  import type LinkModel from "../links/LinkModel";
17
- import type ConceptTypeDetailModel from "./ConceptTypeDetailModel";
18
18
 
19
19
  /**
20
20
  * Model for concept details, available through modelcatalog
@@ -70,7 +70,7 @@ export default class ConceptDetailModel extends ResourceModel {
70
70
  setChildModels(models: Array<ModularUIModel>) {
71
71
  // $FlowExpectedError[incompatible-type]
72
72
  const conceptTypeModel: ?ConceptTypeDetailModel = models.find(
73
- (model) => model.type === "ConceptTypeDetail"
73
+ (model) => model instanceof ConceptTypeDetailModel
74
74
  );
75
75
 
76
76
  if (conceptTypeModel) {
@@ -5,12 +5,15 @@ import LinkCollection from "../links/LinkCollection";
5
5
  import ConceptTypeDetailModel from "./ConceptTypeDetailModel";
6
6
  import { TIMEVERSION_FILTER_NAME } from "../../constants/Constants";
7
7
 
8
- import type { ModularUIModel } from "../types";
8
+ import type { IModelWithChildModels, ModularUIModel } from "../types";
9
9
  import type Href from "../href/Href";
10
10
  /**
11
11
  * Link to a concept
12
12
  */
13
- export default class ConceptLinkModel extends BaseModel {
13
+ export default class ConceptLinkModel
14
+ extends BaseModel
15
+ implements IModelWithChildModels
16
+ {
14
17
  _links: ?LinkCollection;
15
18
  _entryDate: ?ISO_DATE;
16
19
  _conceptType: ?ConceptTypeDetailModel;
@@ -2,12 +2,16 @@
2
2
  import ConceptLinkModel from "./ConceptLinkModel";
3
3
  import LinkModel from "../links/LinkModel";
4
4
 
5
- import type { ModularUIModel, textfragmentJSON } from "../types";
5
+ import type {
6
+ IModelWithChildModels,
7
+ ModularUIModel,
8
+ textfragmentJSON,
9
+ } from "../types";
6
10
 
7
11
  /**
8
12
  * Concept relation model
9
13
  */
10
- export default class ConceptRelationModel {
14
+ export default class ConceptRelationModel implements IModelWithChildModels {
11
15
  _relation: Object;
12
16
  _concept: ConceptLinkModel;
13
17
 
@@ -33,6 +33,7 @@ export default class ContentLinkModel
33
33
 
34
34
  /**
35
35
  */
36
+ // $FlowFixMe[method-unbinding]
36
37
  getInitialChildModelLinks(): Array<LinkModel> {
37
38
  if (this.contentTypeLink) {
38
39
  this.contentTypeLink.isCacheable = true;
@@ -44,6 +45,7 @@ export default class ContentLinkModel
44
45
 
45
46
  /**
46
47
  */
48
+ // $FlowFixMe[method-unbinding]
47
49
  setChildModels(models: Array<ModularUIModel>) {
48
50
  if (this.contentTypeLink) {
49
51
  const href = this.contentTypeLink.href;
@@ -4,7 +4,7 @@ import { BASE, CONTENT_PATH, HTTP_METHODS } from "../../constants/Constants";
4
4
  import Parameter from "../parameter/Parameter";
5
5
  import { IllegalArgumentException } from "../../exceptions";
6
6
 
7
- import type { LocationShape } from "react-router";
7
+ import type { LocationShape, Location } from "react-router";
8
8
 
9
9
  type HrefObject = {
10
10
  _path: string,
@@ -13,6 +13,7 @@ type HrefObject = {
13
13
  _resourcetype: string,
14
14
  _method: $Keys<typeof HTTP_METHODS>,
15
15
  _state: ?{ [key: string]: any },
16
+ pathname: ?string,
16
17
  };
17
18
 
18
19
  export type HrefInput = Href | HrefObject | LocationShape | string;
@@ -61,7 +62,7 @@ class Href {
61
62
  /**
62
63
  */
63
64
  setFromLocationOrObject(href: LocationShape | HrefObject) {
64
- if (href.pathname) {
65
+ if (typeof href["pathname"] === "string") {
65
66
  this.path = href.pathname;
66
67
  } else if (typeof href._path === "string") {
67
68
  this.path = href._path;
@@ -438,7 +439,7 @@ class Href {
438
439
 
439
440
  /**
440
441
  */
441
- toLocation(): LocationShape {
442
+ toLocation(): Location {
442
443
  return {
443
444
  pathname: this.path,
444
445
  search: this.querystring.length > 0 ? `?${this.querystring}` : "",
@@ -149,8 +149,8 @@ export interface ILayoutHintRule {
149
149
  }
150
150
 
151
151
  export interface IModelWithChildModels {
152
- +getInitialChildModelLinks: () => Array<LinkModel>;
153
- +setChildModels: (models: Array<ModularUIModel>) => void;
152
+ getInitialChildModelLinks(): Array<LinkModel>;
153
+ setChildModels(models: Array<ModularUIModel>): void;
154
154
  }
155
155
 
156
156
  export type FileEntryType = {
@@ -16,6 +16,20 @@ global.preferencesProvider = {
16
16
 
17
17
  const mockStore = configureMockStore();
18
18
 
19
+ const getExpectedLocales = () =>
20
+ new Locales([
21
+ ...availableLocales.map((locale) =>
22
+ locale.code === "nl"
23
+ ? {
24
+ ...locale,
25
+ messages: {
26
+ message_nl: "Dutch message",
27
+ },
28
+ }
29
+ : locale
30
+ ),
31
+ ]);
32
+
19
33
  describe("serverUtil", () => {
20
34
  it("handles setI18n", () => {
21
35
  const store = mockStore({ i18n: {} });
@@ -39,25 +53,12 @@ describe("serverUtil", () => {
39
53
  }
40
54
  );
41
55
 
42
- const expectedLocales = new Locales([
43
- ...availableLocales.map((locale) =>
44
- locale.code === "nl"
45
- ? {
46
- ...locale,
47
- messages: {
48
- message_nl: "Dutch message",
49
- },
50
- }
51
- : locale
52
- ),
53
- ]);
54
-
55
56
  expect(store.getActions()).toStrictEqual([
56
57
  {
57
58
  type: "SET_LOCALES",
58
59
  payload: {
59
60
  locale: "en",
60
- locales: expectedLocales,
61
+ locales: getExpectedLocales(),
61
62
  },
62
63
  },
63
64
  ]);
@@ -21,6 +21,8 @@ import type { Theme } from "../react-theme/types";
21
21
  import type { ReduxStore } from "../redux/types";
22
22
  import type Href from "../models/href/Href";
23
23
  import type { TemplateProps } from "./htmlpage";
24
+ import type { Location } from "react-router";
25
+
24
26
  type Props = {
25
27
  store: ReduxStore,
26
28
  theme: Theme,
@@ -46,7 +48,6 @@ const renderSSRComplete = ({
46
48
 
47
49
  const sheet = new ServerStyleSheet();
48
50
 
49
- // $FlowExpectedError[incompatible-type]
50
51
  const location: Location = requestHref.toLocation();
51
52
 
52
53
  return createSSRComplete(store, () =>
@@ -56,7 +56,7 @@ const serverNoSSR = ({
56
56
 
57
57
  if (theme) {
58
58
  const storedTheme = store.getState()?.preferences?.theme;
59
- // $FlowFixMe
59
+ // $FlowFixMe[incompatible-call]
60
60
  createTheme(storedTheme, theme);
61
61
  }
62
62
 
@@ -152,6 +152,7 @@ describe("modularui actions", () => {
152
152
  targetModel: undefined,
153
153
  }),
154
154
  },
155
+ { type: "FINISH_PROGRESS" },
155
156
  ]);
156
157
  });
157
158
  });
@@ -73,7 +73,8 @@ const loadModelSuccessAction = (
73
73
  modelToUpdate
74
74
  ): UpdateModelAction | SetModelAction => {
75
75
  if (modelToUpdate) {
76
- if (typeof modelToUpdate.update === "function") {
76
+ // $FlowFixMe[prop-missing]
77
+ if (typeof modelToUpdate["update"] === "function") {
77
78
  const clonedModel = modelToUpdate.clone();
78
79
  clonedModel.update(model);
79
80
 
@@ -140,17 +141,16 @@ export const loadModularUI =
140
141
  dispatch(startProgress());
141
142
 
142
143
  const loadModelPromise = dispatch(loadModel(key, href, options));
143
- if (typeof loadModelPromise !== "function" && loadModelPromise.then) {
144
- return loadModelPromise
145
- .then((response) => {
146
- if (response?.type === "FINISH_PROGRESS") {
147
- dispatch(updateStatus(key, MODULARUI_STATUS.FINISHED));
148
- }
149
-
150
- return dispatch(finishProgress());
151
- })
152
- .catch((error) => dispatch(handleError(error)));
153
- }
144
+
145
+ return Promise.resolve(loadModelPromise)
146
+ .then((response) => {
147
+ if (response?.type === "FINISH_PROGRESS") {
148
+ dispatch(updateStatus(key, MODULARUI_STATUS.FINISHED));
149
+ }
150
+
151
+ return dispatch(finishProgress());
152
+ })
153
+ .catch((error) => dispatch(handleError(error)));
154
154
  };
155
155
 
156
156
  /**
@@ -74,7 +74,6 @@ const removeKey = (modelKey: string, state: ModularUIState): ModularUIState => {
74
74
  // eslint-disable-next-line no-unused-vars
75
75
  const { [modelKey]: _, ...newState } = state;
76
76
 
77
- // $FlowExpectedError[incompatible-return]
78
77
  return newState;
79
78
  };
80
79
 
@@ -66,17 +66,11 @@ export const login =
66
66
  .catch((error) => {
67
67
  if (error.id === "Error.ChangePasswordRequired") {
68
68
  const dispatchedReloadApplication = dispatch(reloadApplication());
69
- if (
70
- typeof dispatchedReloadApplication !== "function" &&
71
- dispatchedReloadApplication.then
72
- ) {
73
- dispatchedReloadApplication
74
- .then(() => {
75
- Cache.addItem("auth", true);
76
- return dispatch(changePassword());
77
- })
78
- .then(() => dispatch(finishProgress()));
79
- }
69
+
70
+ return Promise.resolve(dispatchedReloadApplication).then(() => {
71
+ Cache.addItem("auth", true);
72
+ return dispatch(changePassword());
73
+ });
80
74
  }
81
75
 
82
76
  dispatch(loginFailed(error.id));
@@ -27,6 +27,7 @@ describe("application actions", () => {
27
27
  href: new Href("/", "Application"),
28
28
  }),
29
29
  }),
30
+ { type: "FINISH_PROGRESS" },
30
31
  ]);
31
32
  });
32
33
 
@@ -27,6 +27,7 @@ describe("custom error response handling", () => {
27
27
  const store = mockStore({});
28
28
 
29
29
  setCustomErrorResponseHandler((error) => {
30
+ // eslint-disable-next-line jest/no-conditional-in-test
30
31
  if (error.isRemoteServiceException) {
31
32
  return {
32
33
  type: "REMOTE_SERVICE_EXCEPTION",
@@ -50,6 +51,7 @@ describe("custom error response handling", () => {
50
51
  const store = mockStore({});
51
52
 
52
53
  setCustomErrorResponseHandler((error, defaultHandler) => (dispatch) => {
54
+ // eslint-disable-next-line jest/no-conditional-in-test
53
55
  if (error.isRemoteServiceException) {
54
56
  dispatch({
55
57
  type: "REMOTE_SERVICE_EXCEPTION",
@@ -156,6 +156,7 @@ describe("xhr", () => {
156
156
  onProgress: ({ type, loaded, total, lengthComputable }) => {
157
157
  events.push({ type, loaded, total, lengthComputable });
158
158
 
159
+ // eslint-disable-next-line jest/no-conditional-in-test
159
160
  if (type === "loadend") {
160
161
  resolve(events);
161
162
  }
@@ -1,10 +1,10 @@
1
1
  // @flow
2
2
  import _has from "lodash/has";
3
+ import _isPlainObject from "lodash/isPlainObject";
3
4
 
4
5
  /**
5
6
  */
6
- export const isPlainObject = (value: any): boolean =>
7
- Object.prototype.toString.call(value) === "[object Object]";
7
+ export const isPlainObject = (value: any): boolean => _isPlainObject(value);
8
8
 
9
9
  /**
10
10
  */