@beinformed/ui 1.13.0 → 1.13.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 (123) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/esm/builder/mergeLayoutHintConfigurations.js +3 -3
  3. package/esm/builder/mergeLayoutHintConfigurations.js.map +1 -1
  4. package/esm/constants/LayoutHintConfig.js +9 -0
  5. package/esm/constants/LayoutHintConfig.js.map +1 -1
  6. package/esm/constants/LayoutHints.js +5 -0
  7. package/esm/constants/LayoutHints.js.map +1 -1
  8. package/esm/constants/Settings.js +2 -1
  9. package/esm/constants/Settings.js.map +1 -1
  10. package/esm/hooks/useContent.js +2 -2
  11. package/esm/hooks/useContent.js.map +1 -1
  12. package/esm/hooks/useDeepCompareEffect.js +2 -1
  13. package/esm/hooks/useDeepCompareEffect.js.map +1 -1
  14. package/esm/hooks/useForm.js.map +1 -1
  15. package/esm/hooks/useModal.js +2 -2
  16. package/esm/hooks/useModal.js.map +1 -1
  17. package/esm/hooks/useModularUI.js +0 -1
  18. package/esm/hooks/useModularUI.js.map +1 -1
  19. package/esm/models/attributes/DatetimeAttributeModel.js +8 -3
  20. package/esm/models/attributes/DatetimeAttributeModel.js.map +1 -1
  21. package/esm/models/caseview/CaseViewModel.js +2 -1
  22. package/esm/models/caseview/CaseViewModel.js.map +1 -1
  23. package/esm/models/list/ListItemCollection.js +38 -0
  24. package/esm/models/list/ListItemCollection.js.map +1 -1
  25. package/esm/models/list/ListItemModel.js +14 -2
  26. package/esm/models/list/ListItemModel.js.map +1 -1
  27. package/esm/models/list/ListModel.js +16 -69
  28. package/esm/models/list/ListModel.js.map +1 -1
  29. package/esm/modularui/ModularUIRequest.js +69 -47
  30. package/esm/modularui/ModularUIRequest.js.map +1 -1
  31. package/esm/utils/browser/Cookies.js +18 -32
  32. package/esm/utils/browser/Cookies.js.map +1 -1
  33. package/esm/utils/fetch/xhr.js +4 -2
  34. package/esm/utils/fetch/xhr.js.map +1 -1
  35. package/lib/builder/mergeLayoutHintConfigurations.js +3 -3
  36. package/lib/builder/mergeLayoutHintConfigurations.js.flow +3 -3
  37. package/lib/builder/mergeLayoutHintConfigurations.js.map +1 -1
  38. package/lib/constants/LayoutHintConfig.js +9 -0
  39. package/lib/constants/LayoutHintConfig.js.flow +9 -0
  40. package/lib/constants/LayoutHintConfig.js.map +1 -1
  41. package/lib/constants/LayoutHints.js +8 -2
  42. package/lib/constants/LayoutHints.js.flow +4 -0
  43. package/lib/constants/LayoutHints.js.map +1 -1
  44. package/lib/constants/Settings.js +2 -1
  45. package/lib/constants/Settings.js.flow +2 -0
  46. package/lib/constants/Settings.js.map +1 -1
  47. package/lib/hooks/useContent.js +2 -2
  48. package/lib/hooks/useContent.js.flow +2 -2
  49. package/lib/hooks/useContent.js.map +1 -1
  50. package/lib/hooks/useDeepCompareEffect.js +2 -1
  51. package/lib/hooks/useDeepCompareEffect.js.flow +1 -1
  52. package/lib/hooks/useDeepCompareEffect.js.map +1 -1
  53. package/lib/hooks/useForm.js.flow +1 -2
  54. package/lib/hooks/useForm.js.map +1 -1
  55. package/lib/hooks/useModal.js +2 -2
  56. package/lib/hooks/useModal.js.flow +1 -1
  57. package/lib/hooks/useModal.js.map +1 -1
  58. package/lib/hooks/useModularUI.js +0 -1
  59. package/lib/hooks/useModularUI.js.flow +0 -2
  60. package/lib/hooks/useModularUI.js.map +1 -1
  61. package/lib/models/attributes/DatetimeAttributeModel.js +9 -3
  62. package/lib/models/attributes/DatetimeAttributeModel.js.flow +7 -4
  63. package/lib/models/attributes/DatetimeAttributeModel.js.map +1 -1
  64. package/lib/models/attributes/__tests__/StringAttributeModel.spec.js.flow +1 -1
  65. package/lib/models/base/__tests__/BaseModel.spec.js.flow +5 -5
  66. package/lib/models/caseview/CaseViewModel.js +3 -1
  67. package/lib/models/caseview/CaseViewModel.js.flow +3 -1
  68. package/lib/models/caseview/CaseViewModel.js.map +1 -1
  69. package/lib/models/caseview/__tests__/CaseViewModel.spec.js.flow +38 -1
  70. package/lib/models/list/ListItemCollection.js +40 -0
  71. package/lib/models/list/ListItemCollection.js.flow +38 -1
  72. package/lib/models/list/ListItemCollection.js.map +1 -1
  73. package/lib/models/list/ListItemModel.js +14 -2
  74. package/lib/models/list/ListItemModel.js.flow +15 -0
  75. package/lib/models/list/ListItemModel.js.map +1 -1
  76. package/lib/models/list/ListModel.js +15 -70
  77. package/lib/models/list/ListModel.js.flow +1 -45
  78. package/lib/models/list/ListModel.js.map +1 -1
  79. package/lib/models/list/__tests__/ListItemCollection.spec.js.flow +22 -0
  80. package/lib/models/list/__tests__/ListModel.spec.js.flow +0 -2
  81. package/lib/models/panels/__tests__/GroupingPanelModel.spec.js.flow +38 -21
  82. package/lib/models/process/__tests__/ProcessStatusSettingsModel.spec.js.flow +11 -0
  83. package/lib/modularui/ModularUIRequest.js +67 -47
  84. package/lib/modularui/ModularUIRequest.js.flow +38 -22
  85. package/lib/modularui/ModularUIRequest.js.map +1 -1
  86. package/lib/utils/browser/Cookies.js +18 -31
  87. package/lib/utils/browser/Cookies.js.flow +22 -28
  88. package/lib/utils/browser/Cookies.js.map +1 -1
  89. package/lib/utils/browser/__tests__/Cookies.spec.js.flow +51 -0
  90. package/lib/utils/fetch/xhr.js +5 -2
  91. package/lib/utils/fetch/xhr.js.flow +6 -2
  92. package/lib/utils/fetch/xhr.js.map +1 -1
  93. package/package.json +30 -28
  94. package/src/builder/mergeLayoutHintConfigurations.js +3 -3
  95. package/src/constants/LayoutHintConfig.js +9 -0
  96. package/src/constants/LayoutHints.js +4 -0
  97. package/src/constants/Settings.js +2 -0
  98. package/src/hooks/useContent.js +2 -2
  99. package/src/hooks/useDeepCompareEffect.js +1 -1
  100. package/src/hooks/useForm.js +1 -2
  101. package/src/hooks/useModal.js +1 -1
  102. package/src/hooks/useModularUI.js +0 -2
  103. package/src/models/attributes/DatetimeAttributeModel.js +7 -4
  104. package/src/models/attributes/__tests__/StringAttributeModel.spec.js +1 -1
  105. package/src/models/base/__tests__/BaseModel.spec.js +5 -5
  106. package/src/models/caseview/CaseViewModel.js +3 -1
  107. package/src/models/caseview/__tests__/CaseViewModel.spec.js +38 -1
  108. package/src/models/caseview/__tests__/caseview.json +14 -3
  109. package/src/models/caseview/__tests__/caseviewContributions.json +48 -77
  110. package/src/models/caseview/__tests__/caseview_local_taskgroup.json +57 -0
  111. package/src/models/list/ListItemCollection.js +38 -1
  112. package/src/models/list/ListItemModel.js +15 -0
  113. package/src/models/list/ListModel.js +1 -45
  114. package/src/models/list/__tests__/ListItemCollection.spec.js +22 -0
  115. package/src/models/list/__tests__/ListModel.spec.js +0 -2
  116. package/src/models/panels/__tests__/GroupingPanelModel.spec.js +38 -21
  117. package/src/models/panels/__tests__/groupingPanel.json +20 -1
  118. package/src/models/panels/__tests__/groupingPanelContributions.json +14 -1
  119. package/src/models/process/__tests__/ProcessStatusSettingsModel.spec.js +11 -0
  120. package/src/modularui/ModularUIRequest.js +38 -22
  121. package/src/utils/browser/Cookies.js +22 -28
  122. package/src/utils/browser/__tests__/Cookies.spec.js +51 -0
  123. package/src/utils/fetch/xhr.js +6 -2
@@ -0,0 +1,51 @@
1
+ import { getCookie, setCookie, clearCookie } from "../Cookies";
2
+
3
+ describe("cookies util", () => {
4
+ beforeEach(() => {
5
+ Object.defineProperty(
6
+ window.document,
7
+ "cookie",
8
+ (function (cookies) {
9
+ return {
10
+ get: function _get() {
11
+ const output = [];
12
+ for (const cookieName in cookies) {
13
+ output.push(cookieName + "=" + cookies[cookieName]);
14
+ }
15
+ return output.join("; ");
16
+ },
17
+ set: function _set(s) {
18
+ const indexOfSeparator = s.indexOf("=");
19
+ const key = s.substr(0, indexOfSeparator);
20
+ const value = s.substring(indexOfSeparator + 1);
21
+ const valueWithoutAttributes = value.substr(0, value.indexOf(";"));
22
+
23
+ if (valueWithoutAttributes === "") {
24
+ delete cookies[key];
25
+ } else {
26
+ cookies[key] = value;
27
+ }
28
+ return key + "=" + value;
29
+ },
30
+ reset: function _reset() {
31
+ cookies = {};
32
+ },
33
+ configurable: true,
34
+ };
35
+ })({})
36
+ );
37
+ });
38
+
39
+ it("should be able retrieve cookies by name", () => {
40
+ setCookie("newCookie", "test");
41
+ expect(getCookie("newCookie")).toBe("test");
42
+
43
+ setCookie("newCookie2", "test2");
44
+ expect(getCookie("newCookie")).toBe("test");
45
+ expect(getCookie("newCookie2")).toBe("test2");
46
+
47
+ clearCookie("newCookie2");
48
+ expect(getCookie("newCookie")).toBe("test");
49
+ expect(getCookie("newCookie2")).toBeUndefined();
50
+ });
51
+ });
@@ -45,6 +45,8 @@ var _Cache = _interopRequireDefault(require("../browser/Cache"));
45
45
 
46
46
  var _Constants = require("../../constants/Constants");
47
47
 
48
+ var _Settings = require("../../constants/Settings");
49
+
48
50
  function ownKeys(object, enumerableOnly) { var keys = _Object$keys2(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
49
51
 
50
52
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? Object.defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
@@ -168,7 +170,7 @@ var XHR = /*#__PURE__*/function () {
168
170
  }, {
169
171
  key: "timeout",
170
172
  get: function get() {
171
- return this.options.timeout || 300000;
173
+ return this.options.timeout || (0, _Settings.getSetting)("XHR_TIMEOUT_MS", 300000);
172
174
  }
173
175
  /**
174
176
  */
@@ -188,7 +190,8 @@ var XHR = /*#__PURE__*/function () {
188
190
  return this.options.onProgress;
189
191
  }
190
192
 
191
- return function () {};
193
+ return function () {// do nothing
194
+ };
192
195
  }
193
196
  /**
194
197
  */
@@ -15,6 +15,8 @@ import Cache from "../browser/Cache";
15
15
 
16
16
  import { HTTP_METHODS } from "../../constants/Constants";
17
17
 
18
+ import { getSetting } from "../../constants/Settings";
19
+
18
20
  import type { RequestOptions } from "./types";
19
21
 
20
22
  const NETWORK_ERROR_CODE = 0;
@@ -116,7 +118,7 @@ class XHR {
116
118
  /**
117
119
  */
118
120
  get timeout() {
119
- return this.options.timeout || 300000;
121
+ return this.options.timeout || getSetting("XHR_TIMEOUT_MS", 300000);
120
122
  }
121
123
 
122
124
  /**
@@ -132,7 +134,9 @@ class XHR {
132
134
  return this.options.onProgress;
133
135
  }
134
136
 
135
- return () => {};
137
+ return () => {
138
+ // do nothing
139
+ };
136
140
  }
137
141
 
138
142
  /**
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/fetch/xhr.js"],"names":["NETWORK_ERROR_CODE","SUCCESS_CODE","CLIENT_ERROR_CODE","UNAUTHORIZED_CODE","REDIRECTION_CODE","NOT_FOUND_CODE","JSON_TYPE","XHR","options","_options","_attempts","_xmlhttp","xmlhttp","attempts","url","params","aUrl","split","data","method","HTTP_METHODS","GET","timeout","responseType","onProgress","events","baseHeaders","Accept","headers","reject","TimeoutException","responseJSON","status","isReload","NetworkException","NotFoundException","UnauthorizedException","FetchException","response","getResponseHeader","JSON","parse","error","JsonParseException","resolve","getResponse","errorHandler","forEach","eventType","addEventListener","timeoutHandler","responseHandler","eventName","open","Cache","hasItem","withCredentials","basicToken","getItem","setRequestHeader","headerName","send","stringData","XMLHttpRequest","setEventListeners","openConnection","setBasicAuthentication","setCustomHeaders","setOtherOptions","sendData","setXMLHttpRequest","fetch","validateInputArguments","args","IllegalArgumentException","toString","xhr"],"mappings":"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","sourcesContent":["// @flow\nimport { has, isPlainObject } from \"../helpers/objects\";\n\nimport {\n IllegalArgumentException,\n UnauthorizedException,\n FetchException,\n TimeoutException,\n NotFoundException,\n JsonParseException,\n NetworkException,\n} from \"../../exceptions\";\n\nimport Cache from \"../browser/Cache\";\n\nimport { HTTP_METHODS } from \"../../constants/Constants\";\n\nimport type { RequestOptions } from \"./types\";\n\nconst NETWORK_ERROR_CODE = 0;\nconst SUCCESS_CODE = 200;\nconst CLIENT_ERROR_CODE = 400;\nconst UNAUTHORIZED_CODE = 401;\nconst REDIRECTION_CODE = 300;\nconst NOT_FOUND_CODE = 404;\n\nconst JSON_TYPE = \"application/json\";\n\n/**\n * @private\n */\nclass XHR {\n _options: RequestOptions;\n _xmlhttp: XMLHttpRequest;\n _attempts: number;\n\n /**\n */\n constructor(options: RequestOptions) {\n this._options = options;\n this._attempts = 0;\n }\n\n /**\n */\n get xmlhttp() {\n return this._xmlhttp;\n }\n\n /**\n */\n set xmlhttp(xmlhttp) {\n this._xmlhttp = xmlhttp;\n }\n\n /**\n */\n get options() {\n return this._options;\n }\n\n /**\n */\n set options(options: RequestOptions) {\n this._options = options;\n }\n\n /**\n */\n get attempts() {\n return this._attempts;\n }\n\n /**\n */\n set attempts(attempts) {\n this._attempts = attempts;\n }\n\n /**\n * Create and fix url when params or both querystring and params exist.\n */\n get url() {\n const { url } = this.options;\n if (this.params !== \"\") {\n if (url.includes(\"?\")) {\n const aUrl = url.split(\"?\");\n\n return `${aUrl[0]}?${aUrl[1]}&${this.params}`;\n }\n\n return `${url}?${this.params}`;\n }\n\n return url;\n }\n\n /**\n */\n get params() {\n return this.options.params || \"\";\n }\n\n /**\n */\n get data() {\n return this.options.data || null;\n }\n\n /**\n */\n get method() {\n return this.options.method || HTTP_METHODS.GET;\n }\n\n /**\n */\n get timeout() {\n return this.options.timeout || 300000;\n }\n\n /**\n */\n get responseType() {\n return this.options.responseType || \"json\";\n }\n\n /**\n */\n get onProgress(): ProgressEventHandler {\n if (this.options.onProgress) {\n return this.options.onProgress;\n }\n\n return () => {};\n }\n\n /**\n */\n get events() {\n return this.options.events || {};\n }\n\n /**\n */\n get headers() {\n const baseHeaders = {\n Accept: JSON_TYPE,\n \"Content-Type\": JSON_TYPE,\n\n // needed for csrf, see: https://plaza.beinformed.com/amdoc/csrf-protection-in-modular-ui-services-40054554.html\n \"X-Requested-With\": \"XMLHttpRequest\",\n\n \"Accept-Language\": \"en\",\n };\n\n if (this.options.headers) {\n // $FlowFixMe[cannot-spread-indexer]\n return {\n ...baseHeaders,\n ...this.options.headers,\n };\n }\n\n return baseHeaders;\n }\n\n /**\n */\n timeoutHandler(reject) {\n return reject(new TimeoutException(this.url, this.method));\n }\n\n /**\n */\n errorHandler(reject, responseJSON = null) {\n const { status } = this.xmlhttp;\n const { isReload } = this.options;\n\n if (status === NETWORK_ERROR_CODE) {\n return reject(new NetworkException(this.url, this.method));\n }\n\n if (status === NOT_FOUND_CODE) {\n return reject(new NotFoundException(this.url, this.method, isReload));\n }\n\n if (status === UNAUTHORIZED_CODE) {\n return reject(\n new UnauthorizedException(this.url, this.method, responseJSON)\n );\n }\n\n return reject(new FetchException(responseJSON, this.xmlhttp, this.options));\n }\n\n /**\n */\n getResponse() {\n const { responseType, response } = this.xmlhttp;\n\n if (\n (responseType === \"\" || responseType === \"text\") &&\n this.getResponseHeader(\"Content-Type\") === JSON_TYPE\n ) {\n if (isPlainObject(response)) {\n return response;\n }\n\n try {\n return JSON.parse(response);\n } catch (error) {\n throw new JsonParseException(error);\n }\n }\n\n return response;\n }\n\n /**\n */\n responseHandler(resolve, reject) {\n const { status } = this.xmlhttp;\n\n let response = null;\n try {\n response = this.getResponse();\n } catch (error) {\n return reject(error);\n }\n\n if (\n (status >= SUCCESS_CODE && status < REDIRECTION_CODE) ||\n (status === CLIENT_ERROR_CODE && has(response, \"formresponse\"))\n ) {\n return resolve(response);\n }\n\n return this.errorHandler(reject, response);\n }\n\n /**\n */\n setEventListeners(resolve, reject) {\n if (this.options.onProgress) {\n [\"load\", \"loadend\", \"loadstart\", \"progress\"].forEach((eventType) => {\n this.xmlhttp.addEventListener(eventType, this.onProgress);\n });\n }\n\n [\"abort\", \"error\"].forEach((eventType) => {\n this.xmlhttp.addEventListener(eventType, () => this.errorHandler(reject));\n });\n\n this.xmlhttp.addEventListener(\"timeout\", () => this.timeoutHandler(reject));\n\n this.xmlhttp.addEventListener(\"load\", () =>\n this.responseHandler(resolve, reject)\n );\n\n // Set custom events\n Object.keys(this.events).forEach((eventName) => {\n this.xmlhttp.addEventListener(eventName, this.events[eventName]);\n });\n }\n\n /**\n */\n openConnection() {\n this.xmlhttp.open(this.method, this.url, true);\n }\n\n /**\n */\n setBasicAuthentication() {\n if (Cache.hasItem(\"basic\")) {\n this.xmlhttp.withCredentials = true;\n const basicToken = Cache.getItem(\"basic\");\n\n if (typeof basicToken === \"string\") {\n this.xmlhttp.setRequestHeader(\"Authorization\", `Basic ${basicToken}`);\n }\n }\n }\n\n /**\n */\n getResponseHeader(headerName) {\n return this.xmlhttp.getResponseHeader(headerName);\n }\n\n /**\n */\n setCustomHeaders() {\n Object.keys(this.headers).forEach((headerName) => {\n this.xmlhttp.setRequestHeader(headerName, this.headers[headerName]);\n });\n }\n\n /**\n */\n setOtherOptions() {\n this.xmlhttp.responseType = this.responseType;\n this.xmlhttp.timeout = this.timeout;\n }\n\n /**\n */\n sendData() {\n if (this.data == null) {\n this.xmlhttp.send();\n } else {\n const stringData = isPlainObject(this.data)\n ? JSON.stringify(this.data)\n : this.data;\n this.xmlhttp.send(stringData);\n }\n }\n\n /**\n */\n setXMLHttpRequest() {\n return new Promise((resolve, reject) => {\n this.xmlhttp = new XMLHttpRequest();\n\n this.setEventListeners(resolve, reject);\n\n this.openConnection();\n\n this.setBasicAuthentication();\n\n this.setCustomHeaders();\n\n this.setOtherOptions();\n\n this.sendData();\n });\n }\n\n /**\n */\n async fetch() {\n try {\n return await this.setXMLHttpRequest();\n } catch (err) {\n if (err instanceof NetworkException && this.attempts < 2) {\n this.attempts += 1;\n return this.fetch();\n }\n\n throw err;\n }\n }\n}\n\n/**\n */\nconst validateInputArguments = (args: RequestOptions) => {\n if (args == null) {\n throw new IllegalArgumentException(\n \"Missing request options, expecting an object as argument for xhr\"\n );\n }\n\n if (!isPlainObject(args)) {\n throw new IllegalArgumentException(\n `Expecting an object as argument for xhr, but received: ${args.toString()}`\n );\n }\n\n if (!has(args, \"url\")) {\n throw new IllegalArgumentException(\n `No url property found in arguments of xhr, received: ${JSON.stringify(\n args\n )}`\n );\n }\n\n return true;\n};\n\n/**\n */\nconst xhr = (args: RequestOptions): Promise<any> => {\n validateInputArguments(args);\n\n return new XHR(args).fetch();\n};\n\nexport default xhr;\n"],"file":"xhr.js"}
1
+ {"version":3,"sources":["../../../src/utils/fetch/xhr.js"],"names":["NETWORK_ERROR_CODE","SUCCESS_CODE","CLIENT_ERROR_CODE","UNAUTHORIZED_CODE","REDIRECTION_CODE","NOT_FOUND_CODE","JSON_TYPE","XHR","options","_options","_attempts","_xmlhttp","xmlhttp","attempts","url","params","aUrl","split","data","method","HTTP_METHODS","GET","timeout","responseType","onProgress","events","baseHeaders","Accept","headers","reject","TimeoutException","responseJSON","status","isReload","NetworkException","NotFoundException","UnauthorizedException","FetchException","response","getResponseHeader","JSON","parse","error","JsonParseException","resolve","getResponse","errorHandler","forEach","eventType","addEventListener","timeoutHandler","responseHandler","eventName","open","Cache","hasItem","withCredentials","basicToken","getItem","setRequestHeader","headerName","send","stringData","XMLHttpRequest","setEventListeners","openConnection","setBasicAuthentication","setCustomHeaders","setOtherOptions","sendData","setXMLHttpRequest","fetch","validateInputArguments","args","IllegalArgumentException","toString","xhr"],"mappings":"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","sourcesContent":["// @flow\nimport { has, isPlainObject } from \"../helpers/objects\";\n\nimport {\n IllegalArgumentException,\n UnauthorizedException,\n FetchException,\n TimeoutException,\n NotFoundException,\n JsonParseException,\n NetworkException,\n} from \"../../exceptions\";\n\nimport Cache from \"../browser/Cache\";\n\nimport { HTTP_METHODS } from \"../../constants/Constants\";\n\nimport { getSetting } from \"../../constants/Settings\";\n\nimport type { RequestOptions } from \"./types\";\n\nconst NETWORK_ERROR_CODE = 0;\nconst SUCCESS_CODE = 200;\nconst CLIENT_ERROR_CODE = 400;\nconst UNAUTHORIZED_CODE = 401;\nconst REDIRECTION_CODE = 300;\nconst NOT_FOUND_CODE = 404;\n\nconst JSON_TYPE = \"application/json\";\n\n/**\n * @private\n */\nclass XHR {\n _options: RequestOptions;\n _xmlhttp: XMLHttpRequest;\n _attempts: number;\n\n /**\n */\n constructor(options: RequestOptions) {\n this._options = options;\n this._attempts = 0;\n }\n\n /**\n */\n get xmlhttp() {\n return this._xmlhttp;\n }\n\n /**\n */\n set xmlhttp(xmlhttp) {\n this._xmlhttp = xmlhttp;\n }\n\n /**\n */\n get options() {\n return this._options;\n }\n\n /**\n */\n set options(options: RequestOptions) {\n this._options = options;\n }\n\n /**\n */\n get attempts() {\n return this._attempts;\n }\n\n /**\n */\n set attempts(attempts) {\n this._attempts = attempts;\n }\n\n /**\n * Create and fix url when params or both querystring and params exist.\n */\n get url() {\n const { url } = this.options;\n if (this.params !== \"\") {\n if (url.includes(\"?\")) {\n const aUrl = url.split(\"?\");\n\n return `${aUrl[0]}?${aUrl[1]}&${this.params}`;\n }\n\n return `${url}?${this.params}`;\n }\n\n return url;\n }\n\n /**\n */\n get params() {\n return this.options.params || \"\";\n }\n\n /**\n */\n get data() {\n return this.options.data || null;\n }\n\n /**\n */\n get method() {\n return this.options.method || HTTP_METHODS.GET;\n }\n\n /**\n */\n get timeout() {\n return this.options.timeout || getSetting(\"XHR_TIMEOUT_MS\", 300000);\n }\n\n /**\n */\n get responseType() {\n return this.options.responseType || \"json\";\n }\n\n /**\n */\n get onProgress(): ProgressEventHandler {\n if (this.options.onProgress) {\n return this.options.onProgress;\n }\n\n return () => {\n // do nothing\n };\n }\n\n /**\n */\n get events() {\n return this.options.events || {};\n }\n\n /**\n */\n get headers() {\n const baseHeaders = {\n Accept: JSON_TYPE,\n \"Content-Type\": JSON_TYPE,\n\n // needed for csrf, see: https://plaza.beinformed.com/amdoc/csrf-protection-in-modular-ui-services-40054554.html\n \"X-Requested-With\": \"XMLHttpRequest\",\n\n \"Accept-Language\": \"en\",\n };\n\n if (this.options.headers) {\n // $FlowFixMe[cannot-spread-indexer]\n return {\n ...baseHeaders,\n ...this.options.headers,\n };\n }\n\n return baseHeaders;\n }\n\n /**\n */\n timeoutHandler(reject) {\n return reject(new TimeoutException(this.url, this.method));\n }\n\n /**\n */\n errorHandler(reject, responseJSON = null) {\n const { status } = this.xmlhttp;\n const { isReload } = this.options;\n\n if (status === NETWORK_ERROR_CODE) {\n return reject(new NetworkException(this.url, this.method));\n }\n\n if (status === NOT_FOUND_CODE) {\n return reject(new NotFoundException(this.url, this.method, isReload));\n }\n\n if (status === UNAUTHORIZED_CODE) {\n return reject(\n new UnauthorizedException(this.url, this.method, responseJSON)\n );\n }\n\n return reject(new FetchException(responseJSON, this.xmlhttp, this.options));\n }\n\n /**\n */\n getResponse() {\n const { responseType, response } = this.xmlhttp;\n\n if (\n (responseType === \"\" || responseType === \"text\") &&\n this.getResponseHeader(\"Content-Type\") === JSON_TYPE\n ) {\n if (isPlainObject(response)) {\n return response;\n }\n\n try {\n return JSON.parse(response);\n } catch (error) {\n throw new JsonParseException(error);\n }\n }\n\n return response;\n }\n\n /**\n */\n responseHandler(resolve, reject) {\n const { status } = this.xmlhttp;\n\n let response = null;\n try {\n response = this.getResponse();\n } catch (error) {\n return reject(error);\n }\n\n if (\n (status >= SUCCESS_CODE && status < REDIRECTION_CODE) ||\n (status === CLIENT_ERROR_CODE && has(response, \"formresponse\"))\n ) {\n return resolve(response);\n }\n\n return this.errorHandler(reject, response);\n }\n\n /**\n */\n setEventListeners(resolve, reject) {\n if (this.options.onProgress) {\n [\"load\", \"loadend\", \"loadstart\", \"progress\"].forEach((eventType) => {\n this.xmlhttp.addEventListener(eventType, this.onProgress);\n });\n }\n\n [\"abort\", \"error\"].forEach((eventType) => {\n this.xmlhttp.addEventListener(eventType, () => this.errorHandler(reject));\n });\n\n this.xmlhttp.addEventListener(\"timeout\", () => this.timeoutHandler(reject));\n\n this.xmlhttp.addEventListener(\"load\", () =>\n this.responseHandler(resolve, reject)\n );\n\n // Set custom events\n Object.keys(this.events).forEach((eventName) => {\n this.xmlhttp.addEventListener(eventName, this.events[eventName]);\n });\n }\n\n /**\n */\n openConnection() {\n this.xmlhttp.open(this.method, this.url, true);\n }\n\n /**\n */\n setBasicAuthentication() {\n if (Cache.hasItem(\"basic\")) {\n this.xmlhttp.withCredentials = true;\n const basicToken = Cache.getItem(\"basic\");\n\n if (typeof basicToken === \"string\") {\n this.xmlhttp.setRequestHeader(\"Authorization\", `Basic ${basicToken}`);\n }\n }\n }\n\n /**\n */\n getResponseHeader(headerName) {\n return this.xmlhttp.getResponseHeader(headerName);\n }\n\n /**\n */\n setCustomHeaders() {\n Object.keys(this.headers).forEach((headerName) => {\n this.xmlhttp.setRequestHeader(headerName, this.headers[headerName]);\n });\n }\n\n /**\n */\n setOtherOptions() {\n this.xmlhttp.responseType = this.responseType;\n this.xmlhttp.timeout = this.timeout;\n }\n\n /**\n */\n sendData() {\n if (this.data == null) {\n this.xmlhttp.send();\n } else {\n const stringData = isPlainObject(this.data)\n ? JSON.stringify(this.data)\n : this.data;\n this.xmlhttp.send(stringData);\n }\n }\n\n /**\n */\n setXMLHttpRequest() {\n return new Promise((resolve, reject) => {\n this.xmlhttp = new XMLHttpRequest();\n\n this.setEventListeners(resolve, reject);\n\n this.openConnection();\n\n this.setBasicAuthentication();\n\n this.setCustomHeaders();\n\n this.setOtherOptions();\n\n this.sendData();\n });\n }\n\n /**\n */\n async fetch() {\n try {\n return await this.setXMLHttpRequest();\n } catch (err) {\n if (err instanceof NetworkException && this.attempts < 2) {\n this.attempts += 1;\n return this.fetch();\n }\n\n throw err;\n }\n }\n}\n\n/**\n */\nconst validateInputArguments = (args: RequestOptions) => {\n if (args == null) {\n throw new IllegalArgumentException(\n \"Missing request options, expecting an object as argument for xhr\"\n );\n }\n\n if (!isPlainObject(args)) {\n throw new IllegalArgumentException(\n `Expecting an object as argument for xhr, but received: ${args.toString()}`\n );\n }\n\n if (!has(args, \"url\")) {\n throw new IllegalArgumentException(\n `No url property found in arguments of xhr, received: ${JSON.stringify(\n args\n )}`\n );\n }\n\n return true;\n};\n\n/**\n */\nconst xhr = (args: RequestOptions): Promise<any> => {\n validateInputArguments(args);\n\n return new XHR(args).fetch();\n};\n\nexport default xhr;\n"],"file":"xhr.js"}
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@beinformed/ui",
3
- "version": "1.13.0",
3
+ "version": "1.13.4",
4
4
  "description": "Toolbox for be informed javascript layouts",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "bugs": "http://support.beinformed.com",
7
7
  "main": "lib/index.js",
8
8
  "module": "esm/index.js",
9
9
  "engines": {
10
- "node": "^12.20 || ^14.14.0 || ^16"
10
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
11
11
  },
12
12
  "esnext": "src/index.js",
13
13
  "sideEffects": false,
@@ -38,7 +38,7 @@
38
38
  "prepublishOnly": "npm run build",
39
39
  "docs": "node ./.build/docs.js",
40
40
  "prepare": "husky install",
41
- "security-audit": "npm audit --production --json | node ./.build/transform-audit.js > npm-audit.json"
41
+ "security-audit": "auditjs ossi --xml > npm-audit.xml"
42
42
  },
43
43
  "repository": {
44
44
  "type": "git",
@@ -71,16 +71,16 @@
71
71
  "react": "^16.14.0 || ^17.0.0",
72
72
  "react-dom": "^16.14.0 || ^17.0.0",
73
73
  "react-helmet-async": "^1.0.0",
74
- "redux": "^4.0.0",
75
74
  "react-redux": "^7.0.0",
76
75
  "react-router-dom": "^5.2.0",
76
+ "redux": "^4.0.0",
77
77
  "redux-thunk": "^2.3.0",
78
78
  "styled-components": "^5.2.0"
79
79
  },
80
80
  "dependencies": {
81
- "@babel/runtime-corejs3": "^7.16.5",
81
+ "@babel/runtime-corejs3": "^7.17.0",
82
82
  "big.js": "^6.1.1",
83
- "date-fns": "^2.27.0",
83
+ "date-fns": "^2.28.0",
84
84
  "deepmerge": "^4.2.2",
85
85
  "dequal": "^2.0.2",
86
86
  "element-closest": "^3.0.2",
@@ -89,49 +89,51 @@
89
89
  "format-message": "^6.2.3",
90
90
  "he": "^1.2.0",
91
91
  "iban": "^0.0.14",
92
+ "js-cookie": "^3.0.1",
92
93
  "lodash": "^4.17.21",
93
94
  "reselect": "^4.1.5",
94
95
  "setimmediate": "^1.0.5"
95
96
  },
96
97
  "devDependencies": {
97
- "@babel/cli": "^7.16.0",
98
- "@babel/core": "^7.16.5",
99
- "@babel/eslint-parser": "^7.16.5",
98
+ "@babel/cli": "^7.17.0",
99
+ "@babel/core": "^7.17.0",
100
+ "@babel/eslint-parser": "^7.17.0",
100
101
  "@babel/eslint-plugin": "^7.16.5",
101
102
  "@babel/plugin-syntax-dynamic-import": "^7.8.3",
102
- "@babel/plugin-transform-runtime": "^7.16.5",
103
- "@babel/preset-env": "^7.16.5",
104
- "@babel/preset-flow": "^7.16.5",
105
- "@babel/preset-react": "^7.16.5",
106
- "@commitlint/cli": "^15.0.0",
107
- "@commitlint/config-conventional": "^15.0.0",
103
+ "@babel/plugin-transform-runtime": "^7.17.0",
104
+ "@babel/preset-env": "^7.16.11",
105
+ "@babel/preset-flow": "^7.16.7",
106
+ "@babel/preset-react": "^7.16.7",
107
+ "@commitlint/cli": "^16.1.0",
108
+ "@commitlint/config-conventional": "^16.0.0",
108
109
  "@testing-library/react-hooks": "^7.0.2",
109
- "babel-jest": "^27.4.5",
110
- "babel-plugin-styled-components": "^1.13.3",
110
+ "auditjs": "^4.0.35",
111
+ "babel-jest": "^27.4.6",
112
+ "babel-plugin-styled-components": "^2.0.2",
111
113
  "cherry-pick": "^0.5.0",
112
114
  "cross-env": "^7.0.3",
113
115
  "documentation": "^13.2.5",
114
- "eslint": "^7.32.0",
116
+ "eslint": "^8.8.0",
115
117
  "eslint-config-prettier": "^8.3.0",
116
118
  "eslint-plugin-babel": "^5.3.1",
117
- "eslint-plugin-flowtype": "^6.1.1",
118
- "eslint-plugin-import": "^2.25.3",
119
- "eslint-plugin-jest": "^25.3.0",
120
- "eslint-plugin-jsdoc": "^37.2.2",
121
- "eslint-plugin-react": "^7.27.1",
119
+ "eslint-plugin-flowtype": "^8.0.3",
120
+ "eslint-plugin-import": "^2.25.4",
121
+ "eslint-plugin-jest": "^26.0.0",
122
+ "eslint-plugin-jsdoc": "^37.7.1",
123
+ "eslint-plugin-react": "^7.28.0",
122
124
  "eslint-plugin-react-hooks": "^4.3.0",
123
125
  "flow-bin": "0.152.0",
124
126
  "flow-copy-source": "^2.0.9",
125
- "flow-typed": "^3.5.0",
127
+ "flow-typed": "^3.6.1",
126
128
  "glob": "^7.2.0",
127
129
  "history": "^4.0.0",
128
130
  "husky": "^7.0.4",
129
- "jest": "^27.4.5",
131
+ "jest": "^27.4.7",
130
132
  "jest-junit": "^13.0.0",
131
133
  "jest-sonar-reporter": "^2.0.0",
132
- "jscodeshift": "^0.13.0",
133
- "lint-staged": "^12.1.2",
134
- "polished": "^4.1.3",
134
+ "jscodeshift": "^0.13.1",
135
+ "lint-staged": "^12.3.3",
136
+ "polished": "^4.1.4",
135
137
  "prettier": "^2.5.1",
136
138
  "react": "^17.0.2",
137
139
  "react-dom": "^17.0.2",
@@ -44,9 +44,9 @@ exports.mergeLayoutHintConfigurations = async (
44
44
  path.join(outputFolder, "LayoutHintConfig.json"),
45
45
  JSON.stringify(newConfig),
46
46
 
47
- (err) => {
48
- if (err) {
49
- return reject(err);
47
+ (writeErr) => {
48
+ if (writeErr) {
49
+ return reject(writeErr);
50
50
  }
51
51
 
52
52
  return resolve();
@@ -109,6 +109,15 @@ export const LayoutHintConfiguration = {
109
109
  link: "",
110
110
  component: ["attribute/number"],
111
111
  },
112
+ IGNORE_FORMAT_SETTING: {
113
+ hint: "ignore-format-setting",
114
+ description: {
115
+ NL: "Maakt het mogelijk om de global date format setting te negeren voor een specifiek attribuut",
116
+ EN: "Makes it possible to ignore the global date format for a specific attribute",
117
+ },
118
+ link: "",
119
+ component: ["attribute/date", "attribute/datetime"],
120
+ },
112
121
  CREATE_ACTION: {
113
122
  hint: "create",
114
123
  description: {
@@ -53,6 +53,10 @@ export const SORT_OPTIONS: string = getHint("SORT_OPTIONS");
53
53
  * Layout-hint: Marks an attribute as a title attribute
54
54
  */
55
55
  export const TITLE: string = getHint("TITLE");
56
+ /**
57
+ * Layout-hint: Ignore the global input format for specific attribute
58
+ */
59
+ export const IGNORE_FORMAT_SETTING: string = getHint("IGNORE_FORMAT_SETTING");
56
60
 
57
61
  /*
58
62
  * --------------------------------
@@ -64,6 +64,8 @@ const defaultSettings = {
64
64
 
65
65
  // reload the complete page on signout, usefull when third party authentication is in place
66
66
  PAGE_RELOAD_ON_UNAUTHORIZED_ERROR: false,
67
+
68
+ XHR_TIMEOUT_MS: 300000,
67
69
  };
68
70
 
69
71
  let settings = defaultSettings;
@@ -35,8 +35,8 @@ export const useContentFromSourceReferences = (
35
35
  });
36
36
 
37
37
  start();
38
- Promise.all(requests).then((content) => {
39
- setContent(content);
38
+ Promise.all(requests).then((responseContent) => {
39
+ setContent(responseContent);
40
40
  finish();
41
41
  });
42
42
 
@@ -10,7 +10,7 @@ type DependencyList = Array<mixed>;
10
10
  * Need to copy this, because the dependency on dequal breaks in ie11
11
11
  */
12
12
  const useDeepCompareMemoize = (value: DependencyList) => {
13
- const ref = React.useRef<DependencyList | null>(null);
13
+ const ref = React.useRef<DependencyList | null>(null); // NOSONAR
14
14
  const signalRef = React.useRef<number>(0);
15
15
 
16
16
  if (!deepEqual(value, ref.current)) {
@@ -20,8 +20,7 @@ import {
20
20
 
21
21
  import FormModel from "../models/form/FormModel";
22
22
 
23
- import type { FormObjectModel } from "../models";
24
- import type { AttributeType } from "../models";
23
+ import type { FormObjectModel, AttributeType } from "../models";
25
24
  import type { UpdateFormOptions } from "../redux/types";
26
25
  import type {
27
26
  RemoveModelByKeyAction,
@@ -25,7 +25,7 @@ export const useModal: ModalHook = (modalId: string) => {
25
25
 
26
26
  const dispatch = useDispatch();
27
27
  const modal = useSelector(({ modals }) =>
28
- modals.modals.find((modal) => modal.key === modalId)
28
+ modals.modals.find((m) => m.key === modalId)
29
29
  );
30
30
 
31
31
  const show = useCallback(() => {
@@ -38,8 +38,6 @@ export const useModularUI = (
38
38
 
39
39
  // dispatch loadModularUI
40
40
  useDeepCompareEffect(() => {
41
- // console.info({ new: options }, { old: prevOptions.current });
42
-
43
41
  // prevent reloads when previous option had the isReload, but the new options not
44
42
  const isOldReload =
45
43
  prevHref.current === href &&
@@ -18,6 +18,7 @@ import DateBoundaryConstraint from "./input-constraints/DateBoundaryConstraint";
18
18
 
19
19
  import { ATTRIBUTE_WIDTH, ISO_DATE_FORMAT } from "../../constants";
20
20
  import { getSetting } from "../../constants/Settings";
21
+ import { IGNORE_FORMAT_SETTING } from "../../constants/LayoutHints";
21
22
 
22
23
  import type { FormErrorAnchor, IConstraintModel } from "../types";
23
24
 
@@ -239,10 +240,12 @@ class DatetimeAttributeModel extends StringAttributeModel {
239
240
  }
240
241
 
241
242
  // setting for date input
242
- const dateInputFormatSetting = getSetting("DATE_INPUT_FORMAT", "");
243
-
244
- if (dateInputFormatSetting) {
245
- return dateInputFormatSetting;
243
+ const ignoreFormatSetting = this.layouthint.has(IGNORE_FORMAT_SETTING);
244
+ if (!ignoreFormatSetting) {
245
+ const dateInputFormatSetting = getSetting("DATE_INPUT_FORMAT", "");
246
+ if (dateInputFormatSetting) {
247
+ return dateInputFormatSetting;
248
+ }
246
249
  }
247
250
 
248
251
  let format = this.format;
@@ -110,6 +110,6 @@ describe("stringAttributeModel", () => {
110
110
 
111
111
  const clonedAttribute = attribute.clone();
112
112
 
113
- expect(attribute === clonedAttribute).toBe(false);
113
+ expect(attribute).not.toBe(clonedAttribute);
114
114
  });
115
115
  });
@@ -73,13 +73,13 @@ describe("baseModel", () => {
73
73
  });
74
74
 
75
75
  const shallowClone = model.clone();
76
- expect(model === shallowClone).toBe(false);
77
- expect(model.data.prop === shallowClone.data.prop).toBe(true);
78
- expect(model.data.prop.child === shallowClone.data.prop.child).toBe(true);
76
+ expect(model).not.toBe(shallowClone);
77
+ expect(model.data.prop).toBe(shallowClone.data.prop);
78
+ expect(model.data.prop.child).toBe(shallowClone.data.prop.child);
79
79
 
80
80
  const deepClone = model.clone(true);
81
- expect(model === deepClone).toBe(false);
81
+ expect(model).not.toBe(deepClone);
82
82
  expect(model.data.prop === deepClone.data.prop).toBeFalsy();
83
- expect(model.data.prop.child === deepClone.data.prop.child).toBe(true);
83
+ expect(model.data.prop.child).toBe(deepClone.data.prop.child);
84
84
  });
85
85
  });
@@ -6,6 +6,8 @@ import TaskGroupModel from "../taskgroup/TaskGroupModel";
6
6
 
7
7
  import { TITLE } from "../../constants/LayoutHints";
8
8
 
9
+ import IllegalStateException from "../../exceptions/IllegalStateException";
10
+
9
11
  import type { ModularUIModel, AttributeType } from "../types";
10
12
  import type { ModularUIResponse } from "../../modularui";
11
13
  import type LinkCollection from "../links/LinkCollection";
@@ -122,7 +124,7 @@ export default class CaseViewModel extends DetailModel {
122
124
  const selfLink = this.links.getLinkByKey("self");
123
125
 
124
126
  if (selfLink === null) {
125
- throw new Error("No self href available");
127
+ throw new IllegalStateException("No self href available");
126
128
  }
127
129
 
128
130
  return new Href(selfLink.href);
@@ -2,13 +2,26 @@ import CaseViewModel from "../CaseViewModel";
2
2
  import DetailModel from "../../detail/DetailModel";
3
3
 
4
4
  import caseviewJson from "./caseview.json";
5
+ import caseviewLocalTaskgroupJson from "./caseview_local_taskgroup.json";
5
6
  import caseviewContributionsJson from "./caseviewContributions.json";
6
7
 
8
+ import IllegalStateException from "../../../exceptions/IllegalStateException";
9
+
7
10
  describe("caseViewModel", () => {
8
11
  it("should be able to create an empty casedetail", () => {
9
12
  const caseview = new CaseViewModel({});
10
13
 
11
14
  expect(caseview).toBeInstanceOf(CaseViewModel);
15
+ expect(caseview.getInitialChildModelLinks()).toHaveLength(0);
16
+ expect(caseview.panelLinks).toHaveLength(0);
17
+ expect(caseview.introtext).toBe("");
18
+ });
19
+
20
+ it("throws when no self link is available", () => {
21
+ const caseview = new CaseViewModel({});
22
+ expect(() => {
23
+ caseview.selfhref;
24
+ }).toThrow(IllegalStateException);
12
25
  });
13
26
 
14
27
  it("should be able to create a casedetail from a typical modular UI json structure", () => {
@@ -18,6 +31,8 @@ describe("caseViewModel", () => {
18
31
  contributions: caseviewContributionsJson,
19
32
  });
20
33
 
34
+ expect(caseDetail.viewLabel).toBe("Book");
35
+ expect(caseDetail.hasIntroText()).toBe(true);
21
36
  expect(caseDetail).toBeInstanceOf(CaseViewModel);
22
37
  expect(caseDetail).toBeInstanceOf(DetailModel);
23
38
 
@@ -25,13 +40,35 @@ describe("caseViewModel", () => {
25
40
  expect(caseDetail.id).toBe(24);
26
41
 
27
42
  expect(caseDetail.casename.value).toBe("The safety of objects");
43
+
44
+ expect(caseDetail.hasTaskGroups()).toBe(false);
45
+ });
46
+
47
+ it("should be able to handle local taskgroup", () => {
48
+ const caseDetail = new CaseViewModel({
49
+ key: "Book",
50
+ data: caseviewLocalTaskgroupJson,
51
+ contributions: caseviewContributionsJson,
52
+ });
53
+
54
+ expect(caseDetail.hasTaskGroups()).toBe(true);
55
+ expect(caseDetail.taskGroupCollection).toHaveLength(1);
28
56
  });
29
57
 
30
58
  it("should be able to handle different kind of introtext", () => {
31
59
  const caseviewOldStructure = new CaseViewModel({
32
60
  key: "Book",
33
61
  data: caseviewJson,
34
- contributions: caseviewContributionsJson,
62
+ contributions: {
63
+ ...caseviewContributionsJson,
64
+ text: undefined,
65
+ texts: [
66
+ {
67
+ type: "master",
68
+ text: "<p>This is introtext</p>",
69
+ },
70
+ ],
71
+ },
35
72
  });
36
73
 
37
74
  expect(caseviewOldStructure.introtext).toBe("<p>This is introtext</p>");
@@ -4,10 +4,13 @@
4
4
  "href": "/books/book/24"
5
5
  },
6
6
  "api_doc": {
7
- "href": "/api-docs/books/book/24"
7
+ "href": "/api-docs/v3/books/book/(case-id)"
8
8
  },
9
9
  "contributions": {
10
- "href": "/contributions/books/book/24"
10
+ "href": "/contributions/books/book/(case-id)"
11
+ },
12
+ "Details": {
13
+ "href": "/books/book/24/details"
11
14
  },
12
15
  "Creator": {
13
16
  "href": "/books/book/24/creator"
@@ -19,6 +22,14 @@
19
22
  "href": "/books/book/24/activities"
20
23
  },
21
24
  "taskgroup": [
25
+ {
26
+ "href": "/books/book/24/contributors-tasks",
27
+ "name": "Contributors"
28
+ },
29
+ {
30
+ "href": "/books/book/24/delivery-tasks",
31
+ "name": "Delivery"
32
+ },
22
33
  {
23
34
  "href": "/books/book/24/Tasks",
24
35
  "name": "Tasks"
@@ -35,4 +46,4 @@
35
46
  "Language": "EN",
36
47
  "NumberOfPages": 176,
37
48
  "State": "Registered"
38
- }
49
+ }