@beinformed/ui 1.9.0-beta.9 → 1.9.3

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 (130) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/esm/hooks/useForm.js.map +1 -1
  3. package/esm/hooks/useNotification.js.map +1 -1
  4. package/esm/hooks/useRouter.js.map +1 -1
  5. package/esm/models/attributes/AttributeContent.js +49 -20
  6. package/esm/models/attributes/AttributeContent.js.map +1 -1
  7. package/esm/models/attributes/AttributeDataHelper.js +1 -1
  8. package/esm/models/attributes/AttributeDataHelper.js.map +1 -1
  9. package/esm/models/attributes/HelptextAttributeModel.js +3 -1
  10. package/esm/models/attributes/HelptextAttributeModel.js.map +1 -1
  11. package/esm/models/caseview/CaseViewModel.js +26 -12
  12. package/esm/models/caseview/CaseViewModel.js.map +1 -1
  13. package/esm/models/contentconfiguration/ContentConfigurationResults.js +2 -2
  14. package/esm/models/contentconfiguration/ContentConfigurationResults.js.map +1 -1
  15. package/esm/models/form/FormObjectModel.js +8 -2
  16. package/esm/models/form/FormObjectModel.js.map +1 -1
  17. package/esm/models/layouthint/LayoutHintCollection.js +3 -2
  18. package/esm/models/layouthint/LayoutHintCollection.js.map +1 -1
  19. package/esm/models/list/ListDetailModel.js +25 -0
  20. package/esm/models/list/ListDetailModel.js.map +1 -1
  21. package/esm/models/list/ListModel.js +22 -16
  22. package/esm/models/list/ListModel.js.map +1 -1
  23. package/esm/models/panels/GroupingPanelModel.js +19 -17
  24. package/esm/models/panels/GroupingPanelModel.js.map +1 -1
  25. package/esm/modularui/ModularUIRequest.js +2 -1
  26. package/esm/modularui/ModularUIRequest.js.map +1 -1
  27. package/esm/redux/actions/FormAutosave.js +2 -1
  28. package/esm/redux/actions/FormAutosave.js.map +1 -1
  29. package/esm/redux/actions/FormValidations.js +2 -1
  30. package/esm/redux/actions/FormValidations.js.map +1 -1
  31. package/lib/hooks/useForm.js.flow +10 -5
  32. package/lib/hooks/useForm.js.map +1 -1
  33. package/lib/hooks/useNotification.js.flow +5 -2
  34. package/lib/hooks/useNotification.js.map +1 -1
  35. package/lib/hooks/useRouter.js.flow +12 -5
  36. package/lib/hooks/useRouter.js.map +1 -1
  37. package/lib/models/attributes/AttributeContent.js +51 -20
  38. package/lib/models/attributes/AttributeContent.js.flow +38 -13
  39. package/lib/models/attributes/AttributeContent.js.map +1 -1
  40. package/lib/models/attributes/AttributeDataHelper.js +1 -1
  41. package/lib/models/attributes/AttributeDataHelper.js.flow +2 -1
  42. package/lib/models/attributes/AttributeDataHelper.js.map +1 -1
  43. package/lib/models/attributes/HelptextAttributeModel.js +3 -1
  44. package/lib/models/attributes/HelptextAttributeModel.js.flow +1 -1
  45. package/lib/models/attributes/HelptextAttributeModel.js.map +1 -1
  46. package/lib/models/attributes/__tests__/AttributeContent.spec.js.flow +4 -2
  47. package/lib/models/attributes/__tests__/AttributeDataHelper.spec.js.flow +9 -3
  48. package/lib/models/attributes/__tests__/HelptextAttributeModel.spec.js.flow +1 -1
  49. package/lib/models/caseview/CaseViewModel.js +27 -13
  50. package/lib/models/caseview/CaseViewModel.js.flow +17 -7
  51. package/lib/models/caseview/CaseViewModel.js.map +1 -1
  52. package/lib/models/caseview/__tests__/CaseViewModel.spec.js.flow +68 -184
  53. package/lib/models/concepts/__mock__/business_scenario.js.flow +14 -1
  54. package/lib/models/concepts/__mock__/conceptdetail.js.flow +15 -6
  55. package/lib/models/concepts/__tests__/BusinessScenarioModel.spec.js.flow +5 -6
  56. package/lib/models/concepts/__tests__/ConceptDetailModel.spec.js.flow +58 -3
  57. package/lib/models/contentconfiguration/ContentConfigurationResults.js +2 -2
  58. package/lib/models/contentconfiguration/ContentConfigurationResults.js.flow +2 -2
  59. package/lib/models/contentconfiguration/ContentConfigurationResults.js.map +1 -1
  60. package/lib/models/contentconfiguration/__tests__/ContentConfigurationResults.spec.js.flow +6 -6
  61. package/lib/models/form/FormObjectModel.js +8 -2
  62. package/lib/models/form/FormObjectModel.js.flow +5 -1
  63. package/lib/models/form/FormObjectModel.js.map +1 -1
  64. package/lib/models/form/__tests__/FormObjectModel.spec.js.flow +2 -2
  65. package/lib/models/layouthint/LayoutHintCollection.js +4 -2
  66. package/lib/models/layouthint/LayoutHintCollection.js.flow +8 -7
  67. package/lib/models/layouthint/LayoutHintCollection.js.map +1 -1
  68. package/lib/models/list/ListDetailModel.js +25 -0
  69. package/lib/models/list/ListDetailModel.js.flow +19 -0
  70. package/lib/models/list/ListDetailModel.js.map +1 -1
  71. package/lib/models/list/ListModel.js +23 -16
  72. package/lib/models/list/ListModel.js.flow +9 -5
  73. package/lib/models/list/ListModel.js.map +1 -1
  74. package/lib/models/list/__tests__/ListDetailModel.spec.js.flow +64 -0
  75. package/lib/models/list/__tests__/ListModel.spec.js.flow +64 -2
  76. package/lib/models/panels/GroupingPanelModel.js +21 -18
  77. package/lib/models/panels/GroupingPanelModel.js.flow +10 -9
  78. package/lib/models/panels/GroupingPanelModel.js.map +1 -1
  79. package/lib/models/panels/__tests__/GroupingPanelModel.spec.js.flow +90 -0
  80. package/lib/models/types.js.flow +24 -6
  81. package/lib/modularui/ModularUIRequest.js +2 -1
  82. package/lib/modularui/ModularUIRequest.js.flow +1 -0
  83. package/lib/modularui/ModularUIRequest.js.map +1 -1
  84. package/lib/redux/actions/FormAutosave.js +2 -1
  85. package/lib/redux/actions/FormAutosave.js.flow +1 -0
  86. package/lib/redux/actions/FormAutosave.js.map +1 -1
  87. package/lib/redux/actions/FormValidations.js +2 -1
  88. package/lib/redux/actions/FormValidations.js.flow +1 -0
  89. package/lib/redux/actions/FormValidations.js.map +1 -1
  90. package/package.json +15 -15
  91. package/src/hooks/useForm.js +10 -5
  92. package/src/hooks/useNotification.js +5 -2
  93. package/src/hooks/useRouter.js +12 -5
  94. package/src/models/attributes/AttributeContent.js +38 -13
  95. package/src/models/attributes/AttributeDataHelper.js +2 -1
  96. package/src/models/attributes/HelptextAttributeModel.js +1 -1
  97. package/src/models/attributes/__tests__/AttributeContent.spec.js +4 -2
  98. package/src/models/attributes/__tests__/AttributeDataHelper.spec.js +9 -3
  99. package/src/models/attributes/__tests__/HelptextAttributeModel.spec.js +1 -1
  100. package/src/models/caseview/CaseViewModel.js +17 -7
  101. package/src/models/caseview/__tests__/CaseViewModel.spec.js +68 -184
  102. package/src/models/caseview/__tests__/caseview.json +38 -0
  103. package/src/models/caseview/__tests__/caseviewContributions.json +147 -0
  104. package/src/models/concepts/__mock__/business_scenario.js +14 -1
  105. package/src/models/concepts/__mock__/business_scenario_step.json +64 -0
  106. package/src/models/concepts/__mock__/conceptdetail.js +15 -6
  107. package/src/models/concepts/__mock__/conceptdetail_data.json +117 -17
  108. package/src/models/concepts/__mock__/concepttype_Calculation.json +75 -0
  109. package/src/models/concepts/__tests__/BusinessScenarioModel.spec.js +5 -6
  110. package/src/models/concepts/__tests__/ConceptDetailModel.spec.js +58 -3
  111. package/src/models/contentconfiguration/ContentConfigurationResults.js +2 -2
  112. package/src/models/contentconfiguration/__tests__/ContentConfigurationResults.spec.js +6 -6
  113. package/src/models/form/FormObjectModel.js +5 -1
  114. package/src/models/form/__tests__/FormObjectModel.spec.js +2 -2
  115. package/src/models/form/__tests__/FormWithContentData.json +2 -1
  116. package/src/models/layouthint/LayoutHintCollection.js +8 -7
  117. package/src/models/list/ListDetailModel.js +19 -0
  118. package/src/models/list/ListModel.js +9 -5
  119. package/src/models/list/__tests__/ListDetailModel.spec.js +64 -0
  120. package/src/models/list/__tests__/ListModel.spec.js +64 -2
  121. package/src/models/list/__tests__/caselist-34.contributions.json +1 -1
  122. package/src/models/list/__tests__/listContributions.json +1 -1
  123. package/src/models/panels/GroupingPanelModel.js +10 -9
  124. package/src/models/panels/__tests__/GroupingPanelModel.spec.js +90 -0
  125. package/src/models/panels/__tests__/groupingPanel.json +30 -0
  126. package/src/models/panels/__tests__/groupingPanelContributions.json +46 -0
  127. package/src/models/types.js +24 -6
  128. package/src/modularui/ModularUIRequest.js +1 -0
  129. package/src/redux/actions/FormAutosave.js +1 -0
  130. package/src/redux/actions/FormValidations.js +1 -0
@@ -54,8 +54,70 @@ describe("listModel spec", () => {
54
54
 
55
55
  expect(list.headers).toHaveLength(6);
56
56
 
57
- expect(list.introtext).toStrictEqual(
58
- "<p>This is a list of <em>books</em><br />For each book the <strong>contributers</strong> and the <strong>publishers</strong> are added as <u>additional details</u>.<br />For more information see amazon</p>"
57
+ expect(list.introtext).toStrictEqual("<p>This is introtext</p>");
58
+ });
59
+
60
+ it("should be able to handle different kind of introtext", () => {
61
+ const listOldStructure = new ListModel({
62
+ key: "Books",
63
+ data: mockList.Books,
64
+ contributions: mockListContributions.Books,
65
+ });
66
+
67
+ expect(listOldStructure.introtext).toBe("<p>This is introtext</p>");
68
+
69
+ const listFromDataPlain = new ListModel({
70
+ key: "Books",
71
+ data: {
72
+ text: "<p>This is introtext</p>",
73
+ ...mockList.Books,
74
+ },
75
+ contributions: mockListContributions.Books,
76
+ });
77
+
78
+ expect(listFromDataPlain.introtext).toBe("<p>This is introtext</p>");
79
+
80
+ const listFromDataApplicationMessage = new ListModel({
81
+ key: "Books",
82
+ data: {
83
+ ...mockList.Books,
84
+ text: {
85
+ message: "<p>This is introtext</p>",
86
+ },
87
+ },
88
+ contributions: mockListContributions.Books,
89
+ });
90
+
91
+ expect(listFromDataApplicationMessage.introtext).toBe(
92
+ "<p>This is introtext</p>"
93
+ );
94
+
95
+ const listFromNewContributionsRawTextMessage = new ListModel({
96
+ key: "Books",
97
+ data: mockList.Books,
98
+ contributions: {
99
+ ...mockListContributions.Books,
100
+ text: {
101
+ message: "<p>This is introtext</p>",
102
+ },
103
+ },
104
+ });
105
+
106
+ expect(listFromNewContributionsRawTextMessage.introtext).toBe(
107
+ "<p>This is introtext</p>"
108
+ );
109
+
110
+ const listFromNewContributionsSimpleMessage = new ListModel({
111
+ key: "Books",
112
+ data: mockList.Books,
113
+ contributions: {
114
+ ...mockListContributions.Books,
115
+ text: "<p>This is introtext</p>",
116
+ },
117
+ });
118
+
119
+ expect(listFromNewContributionsSimpleMessage.introtext).toBe(
120
+ "<p>This is introtext</p>"
59
121
  );
60
122
  });
61
123
  });
@@ -5,7 +5,7 @@
5
5
  "texts": [
6
6
  {
7
7
  "type": "master",
8
- "text": "<p>This view contains all the data about this book. It contains a list of the creators and editions. A person can be an author(1) or an illustrator(2)<br /><br />This is a list of books that is ordered by the role (author (1), co-author, illustrator(2)) of the person that contributed to the book.<br /><br />1) An author is broadly defined as &quot;the person who originated or gave existence to anything&quot; and whose authorship determines responsibility for what was created. Narrowly defined, an author is the originator of any written work and can also be described as a writer.<br /><br />2) An illustrator is an artist who specializes in enhancing writing or elucidating concepts by providing a visual representation that corresponds to the content of the associated text or idea. The illustration may be intended to clarify complicated concepts or objects that are difficult to describe textually, which is the reason illustrations are often found in children&#39;s books.<br /></p>"
8
+ "text": "<p>This is introtext</p>"
9
9
  }
10
10
  ],
11
11
  "_links": {
@@ -6,7 +6,7 @@
6
6
  "texts": [
7
7
  {
8
8
  "type": "master",
9
- "text": "<p>This is a list of <em>books</em><br />For each book the <strong>contributers</strong> and the <strong>publishers</strong> are added as <u>additional details</u>.<br />For more information see amazon</p>"
9
+ "text": "<p>This is introtext</p>"
10
10
  }
11
11
  ],
12
12
  "actions": [
@@ -78,22 +78,23 @@ export default class GroupingPanelModel extends ResourceModel {
78
78
  * Check if an introtext exists for this caseview
79
79
  */
80
80
  hasIntroText(): boolean {
81
- return (
82
- this.contributions.texts &&
83
- this.contributions.texts.find((item) => item.type === "master")
84
- );
81
+ return this.introtext !== "";
85
82
  }
86
83
 
87
84
  /**
88
85
  * Getting the introduction text configured on the grouping panel
89
86
  */
90
87
  get introtext(): string {
91
- if (this.contributions.texts) {
92
- const text = this.contributions.texts.find(
93
- (item) => item.type === "master"
94
- );
88
+ if (this.data._text) {
89
+ return this.data._text.message ?? this.data._text;
90
+ }
91
+
92
+ if (this.contributions.text) {
93
+ return this.contributions.text.message ?? this.contributions.text;
94
+ }
95
95
 
96
- return text ? text.text : "";
96
+ if (Array.isArray(this.contributions.texts)) {
97
+ return this.contributions.texts[0].text;
97
98
  }
98
99
 
99
100
  return "";
@@ -1,5 +1,9 @@
1
1
  import GroupingPanelModel from "../GroupingPanelModel";
2
2
 
3
+ import panelJson from "./groupingPanel.json";
4
+ import panelContributionsJson from "./groupingPanelContributions.json";
5
+ import CaseViewModel from "../../caseview/CaseViewModel";
6
+
3
7
  describe("groupingPanelModel", () => {
4
8
  it("should be able to create an empty GroupingPanelModel object", () => {
5
9
  const groupingPanel = new GroupingPanelModel();
@@ -30,4 +34,90 @@ describe("groupingPanelModel", () => {
30
34
  })
31
35
  ).toBe(true);
32
36
  });
37
+
38
+ it("should be able to create a grouping panel from a typical modular UI json structure", () => {
39
+ const groupingPanel = new GroupingPanelModel({
40
+ key: "AskingQuestions",
41
+ data: panelJson,
42
+ contributions: panelContributionsJson,
43
+ });
44
+
45
+ expect(groupingPanel).toBeInstanceOf(GroupingPanelModel);
46
+
47
+ expect(groupingPanel.key).toBe("AskingQuestions");
48
+ expect(groupingPanel.label).toBe("Asking questions");
49
+
50
+ expect(groupingPanel.links).toHaveLength(8);
51
+ expect(groupingPanel.panelLinks).toHaveLength(1);
52
+
53
+ expect(groupingPanel.hasIntroText()).toBe(true);
54
+ });
55
+
56
+ it("should be able to handle different kind of introtext", () => {
57
+ const groupingPanelOldStructure = new CaseViewModel({
58
+ key: "Book",
59
+ data: panelJson,
60
+ contributions: panelContributionsJson,
61
+ });
62
+
63
+ expect(groupingPanelOldStructure.introtext).toBe(
64
+ "<p>This is introtext</p>"
65
+ );
66
+
67
+ const groupingPanelFromDataPlain = new CaseViewModel({
68
+ key: "Book",
69
+ data: {
70
+ _text: "<p>This is introtext</p>",
71
+ ...panelJson,
72
+ },
73
+ contributions: panelContributionsJson,
74
+ });
75
+
76
+ expect(groupingPanelFromDataPlain.introtext).toBe(
77
+ "<p>This is introtext</p>"
78
+ );
79
+
80
+ const groupingPanelFromDataApplicationMessage = new CaseViewModel({
81
+ key: "Book",
82
+ data: {
83
+ ...panelJson,
84
+ _text: {
85
+ message: "<p>This is introtext</p>",
86
+ },
87
+ },
88
+ contributions: panelContributionsJson,
89
+ });
90
+
91
+ expect(groupingPanelFromDataApplicationMessage.introtext).toBe(
92
+ "<p>This is introtext</p>"
93
+ );
94
+
95
+ const groupingPanelFromNewContributionsRawTextMessage = new CaseViewModel({
96
+ key: "Book",
97
+ data: panelJson,
98
+ contributions: {
99
+ ...panelContributionsJson,
100
+ text: {
101
+ message: "<p>This is introtext</p>",
102
+ },
103
+ },
104
+ });
105
+
106
+ expect(groupingPanelFromNewContributionsRawTextMessage.introtext).toBe(
107
+ "<p>This is introtext</p>"
108
+ );
109
+
110
+ const groupingPanelFromNewContributionsSimpleMessage = new CaseViewModel({
111
+ key: "Book",
112
+ data: panelJson,
113
+ contributions: {
114
+ ...panelContributionsJson,
115
+ text: "<p>This is introtext</p>",
116
+ },
117
+ });
118
+
119
+ expect(groupingPanelFromNewContributionsSimpleMessage.introtext).toBe(
120
+ "<p>This is introtext</p>"
121
+ );
122
+ });
33
123
  });
@@ -0,0 +1,30 @@
1
+ {
2
+ "_links": {
3
+ "self": { "href": "/iq-content/case/1/asking-questions" },
4
+ "api_doc": {
5
+ "href": "/api-docs/v3/iq-content/case/(case-id)/asking-questions"
6
+ },
7
+ "contributions": {
8
+ "href": "/contributions/iq-content/case/(case-id)/asking-questions"
9
+ },
10
+ "Decisions": { "href": "/iq-content/case/1/asking-questions/decisions" },
11
+ "taskgroup": [
12
+ {
13
+ "href": "/iq-content/case/1/asking-questions/labels",
14
+ "name": "Labels"
15
+ },
16
+ {
17
+ "href": "/iq-content/case/1/asking-questions/properties",
18
+ "name": "Properties"
19
+ },
20
+ {
21
+ "href": "/iq-content/case/1/asking-questions/sources",
22
+ "name": "Sources"
23
+ },
24
+ {
25
+ "href": "/iq-content/case/1/asking-questions/text-fragments",
26
+ "name": "TextFragments"
27
+ }
28
+ ]
29
+ }
30
+ }
@@ -0,0 +1,46 @@
1
+ {
2
+ "label": "Asking questions",
3
+ "resourcetype": "GroupingPanel",
4
+ "layouthint": ["hint"],
5
+ "texts": [
6
+ {
7
+ "type": "master",
8
+ "text": "<p>This is introtext</p>"
9
+ }
10
+ ],
11
+ "_links": {
12
+ "panel": [
13
+ {
14
+ "name": "Decisions",
15
+ "label": "Decisions",
16
+ "resourcetype": "InstrumentResultListPanel"
17
+ }
18
+ ],
19
+ "taskgroup": [
20
+ {
21
+ "name": "Labels",
22
+ "label": "Labels",
23
+ "layouthint": ["not-in-dropdown"],
24
+ "resourcetype": "TaskGroup"
25
+ },
26
+ {
27
+ "name": "Properties",
28
+ "label": "Properties",
29
+ "layouthint": ["not-in-dropdown"],
30
+ "resourcetype": "TaskGroup"
31
+ },
32
+ {
33
+ "name": "Sources",
34
+ "label": "Sources",
35
+ "layouthint": ["not-in-dropdown"],
36
+ "resourcetype": "TaskGroup"
37
+ },
38
+ {
39
+ "name": "TextFragments",
40
+ "label": "Text fragments",
41
+ "layouthint": ["not-in-dropdown"],
42
+ "resourcetype": "TaskGroup"
43
+ }
44
+ ]
45
+ }
46
+ }
@@ -44,6 +44,7 @@ import type LookupOptionsModel from "./lookup/LookupOptionsModel";
44
44
  import type BaseFilterModel from "./filters/BaseFilterModel";
45
45
  import type AttributeCollection from "./attributes/AttributeCollection";
46
46
  import type AttributeModel from "./attributes/AttributeModel";
47
+ import type LayoutHintCollection from "./layouthint/LayoutHintCollection";
47
48
 
48
49
  export type ModularUIModel =
49
50
  | ApplicationModel
@@ -192,36 +193,52 @@ export type SectionData = {
192
193
  subSections: Array<SectionData>,
193
194
  };
194
195
 
195
- export type PropertiesElement = {
196
- propertiesElement: {
196
+ export type PropertyElement = {
197
+ propertyElement: {
197
198
  label: string,
198
- id: string,
199
+ layouthint: Array<string>,
199
200
  properties: Array<PropertyData>,
200
201
  },
201
202
  };
202
203
  export type TextFragmentElement = {
203
204
  textFragmentElement: {
204
205
  label: string,
205
- id: string,
206
+ layouthint: Array<string>,
206
207
  textfragments: Array<TextFragmentData>,
207
208
  },
208
209
  };
209
210
  export type ContentElement = {
210
211
  contentElement: {
211
212
  label: string,
213
+ layouthint: Array<string>,
212
214
  sections: Array<SectionData>,
213
215
  },
214
216
  };
215
217
 
218
+ type PropertyElementMapped = {
219
+ propertyElement: {
220
+ label: string,
221
+ layouthint: LayoutHintCollection,
222
+ properties: Array<PropertyData>,
223
+ },
224
+ };
225
+ type TextFragmentElementMapped = {
226
+ textFragmentElement: {
227
+ label: string,
228
+ layouthint: LayoutHintCollection,
229
+ textfragments: Array<TextFragmentData>,
230
+ },
231
+ };
216
232
  type ContentElementMapped = {
217
233
  contentElement: {
218
234
  label: string,
235
+ layouthint: LayoutHintCollection,
219
236
  sections: Array<SectionModel>,
220
237
  },
221
238
  };
222
239
 
223
240
  export type ContentAll = Array<
224
- PropertiesElement | TextFragmentElement | ContentElementMapped
241
+ PropertyElementMapped | TextFragmentElementMapped | ContentElementMapped
225
242
  >;
226
243
 
227
244
  export type ContentData = {
@@ -229,5 +246,6 @@ export type ContentData = {
229
246
  label?: string,
230
247
  description?: { id?: string, message: string, properties?: Object },
231
248
  },
232
- elements: Array<PropertiesElement | TextFragmentElement | ContentElement>,
249
+ label?: string,
250
+ elements: Array<PropertyElement | TextFragmentElement | ContentElement>,
233
251
  };
@@ -475,6 +475,7 @@ class ModularUIRequest {
475
475
 
476
476
  if (model instanceof FormModel) {
477
477
  const newData = JSON.parse(model.validationData);
478
+ // $FlowFixMe incompatible-call
478
479
  return JSON.stringify(deepmerge(prevData || {}, newData));
479
480
  }
480
481
 
@@ -40,6 +40,7 @@ const autosave = (dispatch: Dispatch, form: FormModel) => {
40
40
  method: HTTP_METHODS.POST,
41
41
  data: formdata,
42
42
  childmodels: false,
43
+ locale: form.locale,
43
44
  })
44
45
  .fetch()
45
46
  .then((savedForm) => {
@@ -47,6 +47,7 @@ const debouncedValidateFormObject = debounce<
47
47
  data: form.validationData,
48
48
  childmodels: false,
49
49
  isValidationRequest: true,
50
+ locale: form.locale,
50
51
  })
51
52
  .fetch()
52
53
  .then((formWithValidations) =>