@beinformed/ui 1.26.0 → 1.27.0-beta.0

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 (173) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/esm/constants/Constants.js +9 -35
  3. package/esm/constants/Constants.js.map +1 -1
  4. package/esm/constants/Settings.js +47 -1
  5. package/esm/constants/Settings.js.map +1 -1
  6. package/esm/hooks/useAuthentication.js +7 -6
  7. package/esm/hooks/useAuthentication.js.map +1 -1
  8. package/esm/models/application/ApplicationModel.js +2 -3
  9. package/esm/models/application/ApplicationModel.js.map +1 -1
  10. package/esm/models/attributes/UploadAttributeModel.js +15 -3
  11. package/esm/models/attributes/UploadAttributeModel.js.map +1 -1
  12. package/esm/models/error/ErrorModel.js +11 -0
  13. package/esm/models/error/ErrorModel.js.map +1 -1
  14. package/esm/models/href/Href.js +4 -4
  15. package/esm/models/href/Href.js.map +1 -1
  16. package/esm/modularui/Authenticate.js +6 -6
  17. package/esm/modularui/Authenticate.js.map +1 -1
  18. package/esm/modularui/CaptchaRequest.js +46 -0
  19. package/esm/modularui/CaptchaRequest.js.map +1 -0
  20. package/esm/modularui/ModularUIRequest.js +17 -6
  21. package/esm/modularui/ModularUIRequest.js.map +1 -1
  22. package/esm/modularui/UploadRequest.js +104 -0
  23. package/esm/modularui/UploadRequest.js.map +1 -0
  24. package/esm/modularui/index.js +2 -0
  25. package/esm/modularui/index.js.map +1 -1
  26. package/esm/react-client/client.js +2 -2
  27. package/esm/react-client/client.js.map +1 -1
  28. package/esm/react-server/contextPath.js +2 -2
  29. package/esm/react-server/contextPath.js.map +1 -1
  30. package/esm/react-server/renderSSRComplete.js +5 -4
  31. package/esm/react-server/renderSSRComplete.js.map +1 -1
  32. package/esm/react-server/renderSSRMinimal.js +2 -2
  33. package/esm/react-server/renderSSRMinimal.js.map +1 -1
  34. package/esm/redux/_modularui/ModularUIMiddleware.js.map +1 -1
  35. package/esm/redux/_modularui/types.js.map +1 -1
  36. package/esm/utils/browser/Cookies.js +6 -7
  37. package/esm/utils/browser/Cookies.js.map +1 -1
  38. package/esm/utils/fetch/serverFetch.js +2 -2
  39. package/esm/utils/fetch/serverFetch.js.map +1 -1
  40. package/esm/utils/fetch/types.js.map +1 -1
  41. package/esm/utils/fetch/universalFetch.js +4 -3
  42. package/esm/utils/fetch/universalFetch.js.map +1 -1
  43. package/esm/utils/fetch/xhr.js.map +1 -1
  44. package/esm/utils/helpers/checkResource.js +0 -3
  45. package/esm/utils/helpers/checkResource.js.map +1 -1
  46. package/esm/utils/helpers/index.js +8 -0
  47. package/esm/utils/helpers/index.js.map +1 -0
  48. package/esm/utils/helpers/repositoryResource.js +18 -0
  49. package/esm/utils/helpers/repositoryResource.js.map +1 -0
  50. package/esm/utils/index.js +1 -6
  51. package/esm/utils/index.js.map +1 -1
  52. package/lib/constants/Constants.js +13 -42
  53. package/lib/constants/Constants.js.flow +9 -41
  54. package/lib/constants/Constants.js.map +1 -1
  55. package/lib/constants/Settings.js +53 -1
  56. package/lib/constants/Settings.js.flow +60 -0
  57. package/lib/constants/Settings.js.map +1 -1
  58. package/lib/hooks/useAuthentication.js +6 -5
  59. package/lib/hooks/useAuthentication.js.flow +9 -8
  60. package/lib/hooks/useAuthentication.js.map +1 -1
  61. package/lib/models/application/ApplicationModel.js +1 -1
  62. package/lib/models/application/ApplicationModel.js.flow +3 -2
  63. package/lib/models/application/ApplicationModel.js.map +1 -1
  64. package/lib/models/attributes/UploadAttributeModel.js +15 -3
  65. package/lib/models/attributes/UploadAttributeModel.js.flow +21 -0
  66. package/lib/models/attributes/UploadAttributeModel.js.map +1 -1
  67. package/lib/models/error/ErrorModel.js +11 -0
  68. package/lib/models/error/ErrorModel.js.flow +12 -1
  69. package/lib/models/error/ErrorModel.js.map +1 -1
  70. package/lib/models/href/Href.js +6 -6
  71. package/lib/models/href/Href.js.flow +4 -4
  72. package/lib/models/href/Href.js.map +1 -1
  73. package/lib/models/href/__tests__/Href.spec.js.flow +2 -3
  74. package/lib/modularui/Authenticate.js +4 -4
  75. package/lib/modularui/Authenticate.js.flow +6 -5
  76. package/lib/modularui/Authenticate.js.map +1 -1
  77. package/lib/modularui/CaptchaRequest.js +54 -0
  78. package/lib/modularui/CaptchaRequest.js.flow +45 -0
  79. package/lib/modularui/CaptchaRequest.js.map +1 -0
  80. package/lib/modularui/ModularUIRequest.js +15 -4
  81. package/lib/modularui/ModularUIRequest.js.flow +10 -10
  82. package/lib/modularui/ModularUIRequest.js.map +1 -1
  83. package/lib/modularui/UploadRequest.js +112 -0
  84. package/lib/modularui/UploadRequest.js.flow +125 -0
  85. package/lib/modularui/UploadRequest.js.map +1 -0
  86. package/lib/modularui/index.js +14 -0
  87. package/lib/modularui/index.js.flow +2 -0
  88. package/lib/modularui/index.js.map +1 -1
  89. package/lib/react-client/client.js +2 -2
  90. package/lib/react-client/client.js.flow +2 -2
  91. package/lib/react-client/client.js.map +1 -1
  92. package/lib/react-server/contextPath.js +2 -2
  93. package/lib/react-server/contextPath.js.flow +2 -2
  94. package/lib/react-server/contextPath.js.map +1 -1
  95. package/lib/react-server/renderSSRComplete.js +5 -4
  96. package/lib/react-server/renderSSRComplete.js.flow +6 -4
  97. package/lib/react-server/renderSSRComplete.js.map +1 -1
  98. package/lib/react-server/renderSSRMinimal.js +2 -2
  99. package/lib/react-server/renderSSRMinimal.js.flow +2 -2
  100. package/lib/react-server/renderSSRMinimal.js.map +1 -1
  101. package/lib/redux/_modularui/ModularUIMiddleware.js.flow +1 -1
  102. package/lib/redux/_modularui/ModularUIMiddleware.js.map +1 -1
  103. package/lib/redux/_modularui/types.js.flow +1 -1
  104. package/lib/redux/_modularui/types.js.map +1 -1
  105. package/lib/utils/browser/Cookies.js +3 -3
  106. package/lib/utils/browser/Cookies.js.flow +10 -8
  107. package/lib/utils/browser/Cookies.js.map +1 -1
  108. package/lib/utils/fetch/serverFetch.js +2 -2
  109. package/lib/utils/fetch/serverFetch.js.flow +2 -2
  110. package/lib/utils/fetch/serverFetch.js.map +1 -1
  111. package/lib/utils/fetch/types.js.flow +1 -1
  112. package/lib/utils/fetch/types.js.map +1 -1
  113. package/lib/utils/fetch/universalFetch.js +3 -2
  114. package/lib/utils/fetch/universalFetch.js.flow +5 -3
  115. package/lib/utils/fetch/universalFetch.js.map +1 -1
  116. package/lib/utils/fetch/xhr.js.flow +1 -1
  117. package/lib/utils/fetch/xhr.js.map +1 -1
  118. package/lib/utils/helpers/checkResource.js +0 -3
  119. package/lib/utils/helpers/checkResource.js.flow +0 -2
  120. package/lib/utils/helpers/checkResource.js.map +1 -1
  121. package/lib/utils/helpers/index.js +90 -0
  122. package/lib/utils/helpers/index.js.flow +8 -0
  123. package/lib/utils/helpers/index.js.map +1 -0
  124. package/lib/utils/helpers/repositoryResource.js +25 -0
  125. package/lib/utils/helpers/repositoryResource.js.flow +20 -0
  126. package/lib/utils/helpers/repositoryResource.js.map +1 -0
  127. package/lib/utils/index.js +4 -60
  128. package/lib/utils/index.js.flow +1 -6
  129. package/lib/utils/index.js.map +1 -1
  130. package/package.json +1 -1
  131. package/src/constants/Constants.js +9 -41
  132. package/src/constants/Settings.js +60 -0
  133. package/src/hooks/useAuthentication.js +9 -8
  134. package/src/models/application/ApplicationModel.js +3 -2
  135. package/src/models/attributes/UploadAttributeModel.js +21 -0
  136. package/src/models/error/ErrorModel.js +12 -1
  137. package/src/models/href/Href.js +4 -4
  138. package/src/models/href/__tests__/Href.spec.js +2 -3
  139. package/src/modularui/Authenticate.js +6 -5
  140. package/src/modularui/CaptchaRequest.js +45 -0
  141. package/src/modularui/ModularUIRequest.js +10 -10
  142. package/src/modularui/UploadRequest.js +125 -0
  143. package/src/modularui/index.js +2 -0
  144. package/src/react-client/client.js +2 -2
  145. package/src/react-server/contextPath.js +2 -2
  146. package/src/react-server/renderSSRComplete.js +6 -4
  147. package/src/react-server/renderSSRMinimal.js +2 -2
  148. package/src/redux/_modularui/ModularUIMiddleware.js +1 -1
  149. package/src/redux/_modularui/types.js +1 -1
  150. package/src/utils/browser/Cookies.js +10 -8
  151. package/src/utils/fetch/serverFetch.js +2 -2
  152. package/src/utils/fetch/types.js +1 -1
  153. package/src/utils/fetch/universalFetch.js +5 -3
  154. package/src/utils/fetch/xhr.js +1 -1
  155. package/src/utils/helpers/checkResource.js +0 -2
  156. package/src/utils/helpers/index.js +8 -0
  157. package/src/utils/helpers/repositoryResource.js +20 -0
  158. package/src/utils/index.js +1 -6
  159. package/types/constants/Constants.d.ts +8 -24
  160. package/types/constants/Settings.d.ts +12 -0
  161. package/types/models/attributes/UploadAttributeModel.d.ts +6 -0
  162. package/types/models/error/ErrorModel.d.ts +5 -0
  163. package/types/models/href/Href.d.ts +1 -1
  164. package/types/modularui/CaptchaRequest.d.ts +17 -0
  165. package/types/modularui/ModularUIRequest.d.ts +4 -6
  166. package/types/modularui/UploadRequest.d.ts +29 -0
  167. package/types/modularui/index.d.ts +2 -0
  168. package/types/redux/_modularui/types.d.ts +1 -3
  169. package/types/utils/browser/Cookies.d.ts +0 -6
  170. package/types/utils/fetch/types.d.ts +1 -3
  171. package/types/utils/helpers/index.d.ts +7 -0
  172. package/types/utils/helpers/repositoryResource.d.ts +1 -0
  173. package/types/utils/index.d.ts +1 -6
@@ -21,7 +21,7 @@ const useLogin = () => {
21
21
  const isAuthenticated = application?.isLoggedIn ?? false;
22
22
  return {
23
23
  isAuthenticated,
24
- authenticationTypes: application?.authenticationTypes ?? [_constants.fallbackDefaultAuthenticationType],
24
+ authenticationTypes: application?.authenticationTypes ?? [_constants.DEFAULT_AUTHENTICATION_TYPE],
25
25
  errorMessage: auth.error,
26
26
  resetErrors: () => dispatch((0, _actions.resetAuthErrors)()),
27
27
  login: (username, password) => dispatch((0, _actions.login)(username, password)),
@@ -32,7 +32,7 @@ const useLogin = () => {
32
32
  }
33
33
  if (!isAuthenticated) {
34
34
  _Cache.default.setItem("isRedirectLogin", true);
35
- window.location.assign(`${_constants.BASE}${authenticationType.redirectUri ?? ""}`);
35
+ window.location.assign(`${(0, _constants.getBasePath)()}${authenticationType.redirectUri ?? ""}`);
36
36
  }
37
37
  }
38
38
  };
@@ -44,15 +44,16 @@ exports.useLogin = useLogin;
44
44
  const useLogout = () => {
45
45
  const dispatch = (0, _reactRedux.useDispatch)();
46
46
  const application = (0, _reactRedux.useSelector)(_ModularUISelectors.getApplication);
47
- const LOGOUT_PATH = (0, _constants.getSetting)("LOGOUT_PATH", "/signout");
47
+ const LOGOUT_PATH = (0, _constants.logoutPath)();
48
+ const BASE_PATH = (0, _constants.getBasePath)();
48
49
  const isAuthenticated = application?.isLoggedIn ?? false;
49
50
  return {
50
51
  isAuthenticated,
51
- authenticationTypes: application?.authenticationTypes ?? [_constants.fallbackDefaultAuthenticationType],
52
+ authenticationTypes: application?.authenticationTypes ?? [_constants.DEFAULT_AUTHENTICATION_TYPE],
52
53
  logout: () => {
53
54
  if (_Cache.default.getItem("isRedirectLogin")) {
54
55
  const origin = window.location.origin;
55
- const url = `${origin}${_constants.BASE}/logout?url=${origin}${_constants.BASE}${LOGOUT_PATH}`;
56
+ const url = `${origin}${BASE_PATH}/logout?url=${origin}${BASE_PATH}${LOGOUT_PATH}`;
56
57
  _Cache.default.setItem("isRedirectLogin", false);
57
58
  window.location.assign(url);
58
59
  } else {
@@ -6,9 +6,9 @@ import { login, logout, resetAuthErrors } from "../redux/actions";
6
6
 
7
7
  import Cache from "../utils/browser/Cache";
8
8
  import {
9
- BASE,
10
- fallbackDefaultAuthenticationType,
11
- getSetting,
9
+ DEFAULT_AUTHENTICATION_TYPE,
10
+ getBasePath,
11
+ logoutPath,
12
12
  } from "../constants";
13
13
 
14
14
  import type { ResetAuthErrorsAction } from "../redux/types";
@@ -43,7 +43,7 @@ export const useLogin = (): LoginHook => {
43
43
  return {
44
44
  isAuthenticated,
45
45
  authenticationTypes: application?.authenticationTypes ?? [
46
- fallbackDefaultAuthenticationType,
46
+ DEFAULT_AUTHENTICATION_TYPE,
47
47
  ],
48
48
  errorMessage: auth.error,
49
49
  resetErrors: () => dispatch(resetAuthErrors()),
@@ -62,7 +62,7 @@ export const useLogin = (): LoginHook => {
62
62
  if (!isAuthenticated) {
63
63
  Cache.setItem("isRedirectLogin", true);
64
64
  window.location.assign(
65
- `${BASE}${authenticationType.redirectUri ?? ""}`
65
+ `${getBasePath()}${authenticationType.redirectUri ?? ""}`
66
66
  );
67
67
  }
68
68
  },
@@ -75,18 +75,19 @@ export const useLogout = (): LogoutHook => {
75
75
  const dispatch = useDispatch();
76
76
  const application = useSelector(getApplication);
77
77
 
78
- const LOGOUT_PATH = getSetting("LOGOUT_PATH", "/signout");
78
+ const LOGOUT_PATH = logoutPath();
79
+ const BASE_PATH = getBasePath();
79
80
 
80
81
  const isAuthenticated = application?.isLoggedIn ?? false;
81
82
  return {
82
83
  isAuthenticated,
83
84
  authenticationTypes: application?.authenticationTypes ?? [
84
- fallbackDefaultAuthenticationType,
85
+ DEFAULT_AUTHENTICATION_TYPE,
85
86
  ],
86
87
  logout: () => {
87
88
  if (Cache.getItem("isRedirectLogin")) {
88
89
  const origin = window.location.origin;
89
- const url = `${origin}${BASE}/logout?url=${origin}${BASE}${LOGOUT_PATH}`;
90
+ const url = `${origin}${BASE_PATH}/logout?url=${origin}${BASE_PATH}${LOGOUT_PATH}`;
90
91
  Cache.setItem("isRedirectLogin", false);
91
92
  window.location.assign(url);
92
93
  } else {
@@ -1 +1 @@
1
- {"version":3,"file":"useAuthentication.js","names":["useLogin","Cache","setItem","dispatch","useDispatch","application","useSelector","getApplication","auth","state","isAuthenticated","isLoggedIn","authenticationTypes","fallbackDefaultAuthenticationType","errorMessage","error","resetErrors","resetAuthErrors","login","username","password","redirectLogin","authenticationType","getItem","IllegalStateException","authentication","redirectUri","window","location","assign","BASE","useLogout","LOGOUT_PATH","getSetting","logout","origin","url"],"sources":["../../src/hooks/useAuthentication.js"],"sourcesContent":["// @flow\nimport { useSelector, useDispatch } from \"react-redux\";\n\nimport { getApplication } from \"../redux/_modularui/ModularUISelectors\";\nimport { login, logout, resetAuthErrors } from \"../redux/actions\";\n\nimport Cache from \"../utils/browser/Cache\";\nimport {\n BASE,\n fallbackDefaultAuthenticationType,\n getSetting,\n} from \"../constants\";\n\nimport type { ResetAuthErrorsAction } from \"../redux/types\";\nimport type { AuthenticationType } from \"../models/types\";\nimport { IllegalStateException } from \"../exceptions\";\ntype LoginHook = {\n isAuthenticated: boolean,\n authenticationTypes: Array<AuthenticationType>,\n errorMessage: ?string,\n resetErrors: () => ResetAuthErrorsAction,\n login: (username: string, password: string) => void,\n redirectLogin: (authenticationType: AuthenticationType) => void,\n};\ntype LogoutHook = {\n isAuthenticated: boolean,\n authenticationTypes: Array<AuthenticationType>,\n logout: () => void,\n};\n\n/**\n */\nexport const useLogin = (): LoginHook => {\n Cache.setItem(\"isRedirectLogin\", false);\n\n const dispatch = useDispatch();\n\n const application = useSelector(getApplication);\n const auth = useSelector((state) => state.auth);\n\n const isAuthenticated = application?.isLoggedIn ?? false;\n\n return {\n isAuthenticated,\n authenticationTypes: application?.authenticationTypes ?? [\n fallbackDefaultAuthenticationType,\n ],\n errorMessage: auth.error,\n resetErrors: () => dispatch(resetAuthErrors()),\n login: (username: string, password: string) =>\n dispatch(login(username, password)),\n redirectLogin: (authenticationType: AuthenticationType) => {\n if (Cache.getItem(\"isRedirectLogin\")) {\n // prevent endless loop in redirects when authentication type can't be redirected\n throw new IllegalStateException(\n `Could not redirect to '${\n authenticationType.authentication\n }' using url: '${authenticationType.redirectUri ?? \"\"}'`\n );\n }\n\n if (!isAuthenticated) {\n Cache.setItem(\"isRedirectLogin\", true);\n window.location.assign(\n `${BASE}${authenticationType.redirectUri ?? \"\"}`\n );\n }\n },\n };\n};\n\n/**\n */\nexport const useLogout = (): LogoutHook => {\n const dispatch = useDispatch();\n const application = useSelector(getApplication);\n\n const LOGOUT_PATH = getSetting(\"LOGOUT_PATH\", \"/signout\");\n\n const isAuthenticated = application?.isLoggedIn ?? false;\n return {\n isAuthenticated,\n authenticationTypes: application?.authenticationTypes ?? [\n fallbackDefaultAuthenticationType,\n ],\n logout: () => {\n if (Cache.getItem(\"isRedirectLogin\")) {\n const origin = window.location.origin;\n const url = `${origin}${BASE}/logout?url=${origin}${BASE}${LOGOUT_PATH}`;\n Cache.setItem(\"isRedirectLogin\", false);\n window.location.assign(url);\n } else {\n return dispatch(logout());\n }\n },\n };\n};\n"],"mappings":";;;;;;;AACA;AAEA;AACA;AAEA;AACA;AAQA;AAeA;AACA;AACO,MAAMA,QAAQ,GAAG,MAAiB;EACvCC,cAAK,CAACC,OAAO,CAAC,iBAAiB,EAAE,KAAK,CAAC;EAEvC,MAAMC,QAAQ,GAAG,IAAAC,uBAAW,GAAE;EAE9B,MAAMC,WAAW,GAAG,IAAAC,uBAAW,EAACC,kCAAc,CAAC;EAC/C,MAAMC,IAAI,GAAG,IAAAF,uBAAW,EAAEG,KAAK,IAAKA,KAAK,CAACD,IAAI,CAAC;EAE/C,MAAME,eAAe,GAAGL,WAAW,EAAEM,UAAU,IAAI,KAAK;EAExD,OAAO;IACLD,eAAe;IACfE,mBAAmB,EAAEP,WAAW,EAAEO,mBAAmB,IAAI,CACvDC,4CAAiC,CAClC;IACDC,YAAY,EAAEN,IAAI,CAACO,KAAK;IACxBC,WAAW,EAAE,MAAMb,QAAQ,CAAC,IAAAc,wBAAe,GAAE,CAAC;IAC9CC,KAAK,EAAE,CAACC,QAAgB,EAAEC,QAAgB,KACxCjB,QAAQ,CAAC,IAAAe,cAAK,EAACC,QAAQ,EAAEC,QAAQ,CAAC,CAAC;IACrCC,aAAa,EAAGC,kBAAsC,IAAK;MACzD,IAAIrB,cAAK,CAACsB,OAAO,CAAC,iBAAiB,CAAC,EAAE;QACpC;QACA,MAAM,IAAIC,iCAAqB,CAC5B,0BACCF,kBAAkB,CAACG,cACpB,iBAAgBH,kBAAkB,CAACI,WAAW,IAAI,EAAG,GAAE,CACzD;MACH;MAEA,IAAI,CAAChB,eAAe,EAAE;QACpBT,cAAK,CAACC,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC;QACtCyB,MAAM,CAACC,QAAQ,CAACC,MAAM,CACnB,GAAEC,eAAK,GAAER,kBAAkB,CAACI,WAAW,IAAI,EAAG,EAAC,CACjD;MACH;IACF;EACF,CAAC;AACH,CAAC;;AAED;AACA;AADA;AAEO,MAAMK,SAAS,GAAG,MAAkB;EACzC,MAAM5B,QAAQ,GAAG,IAAAC,uBAAW,GAAE;EAC9B,MAAMC,WAAW,GAAG,IAAAC,uBAAW,EAACC,kCAAc,CAAC;EAE/C,MAAMyB,WAAW,GAAG,IAAAC,qBAAU,EAAC,aAAa,EAAE,UAAU,CAAC;EAEzD,MAAMvB,eAAe,GAAGL,WAAW,EAAEM,UAAU,IAAI,KAAK;EACxD,OAAO;IACLD,eAAe;IACfE,mBAAmB,EAAEP,WAAW,EAAEO,mBAAmB,IAAI,CACvDC,4CAAiC,CAClC;IACDqB,MAAM,EAAE,MAAM;MACZ,IAAIjC,cAAK,CAACsB,OAAO,CAAC,iBAAiB,CAAC,EAAE;QACpC,MAAMY,MAAM,GAAGR,MAAM,CAACC,QAAQ,CAACO,MAAM;QACrC,MAAMC,GAAG,GAAI,GAAED,MAAO,GAAEL,eAAK,eAAcK,MAAO,GAAEL,eAAK,GAAEE,WAAY,EAAC;QACxE/B,cAAK,CAACC,OAAO,CAAC,iBAAiB,EAAE,KAAK,CAAC;QACvCyB,MAAM,CAACC,QAAQ,CAACC,MAAM,CAACO,GAAG,CAAC;MAC7B,CAAC,MAAM;QACL,OAAOjC,QAAQ,CAAC,IAAA+B,eAAM,GAAE,CAAC;MAC3B;IACF;EACF,CAAC;AACH,CAAC;AAAC"}
1
+ {"version":3,"file":"useAuthentication.js","names":["useLogin","Cache","setItem","dispatch","useDispatch","application","useSelector","getApplication","auth","state","isAuthenticated","isLoggedIn","authenticationTypes","DEFAULT_AUTHENTICATION_TYPE","errorMessage","error","resetErrors","resetAuthErrors","login","username","password","redirectLogin","authenticationType","getItem","IllegalStateException","authentication","redirectUri","window","location","assign","getBasePath","useLogout","LOGOUT_PATH","logoutPath","BASE_PATH","logout","origin","url"],"sources":["../../src/hooks/useAuthentication.js"],"sourcesContent":["// @flow\nimport { useSelector, useDispatch } from \"react-redux\";\n\nimport { getApplication } from \"../redux/_modularui/ModularUISelectors\";\nimport { login, logout, resetAuthErrors } from \"../redux/actions\";\n\nimport Cache from \"../utils/browser/Cache\";\nimport {\n DEFAULT_AUTHENTICATION_TYPE,\n getBasePath,\n logoutPath,\n} from \"../constants\";\n\nimport type { ResetAuthErrorsAction } from \"../redux/types\";\nimport type { AuthenticationType } from \"../models/types\";\nimport { IllegalStateException } from \"../exceptions\";\ntype LoginHook = {\n isAuthenticated: boolean,\n authenticationTypes: Array<AuthenticationType>,\n errorMessage: ?string,\n resetErrors: () => ResetAuthErrorsAction,\n login: (username: string, password: string) => void,\n redirectLogin: (authenticationType: AuthenticationType) => void,\n};\ntype LogoutHook = {\n isAuthenticated: boolean,\n authenticationTypes: Array<AuthenticationType>,\n logout: () => void,\n};\n\n/**\n */\nexport const useLogin = (): LoginHook => {\n Cache.setItem(\"isRedirectLogin\", false);\n\n const dispatch = useDispatch();\n\n const application = useSelector(getApplication);\n const auth = useSelector((state) => state.auth);\n\n const isAuthenticated = application?.isLoggedIn ?? false;\n\n return {\n isAuthenticated,\n authenticationTypes: application?.authenticationTypes ?? [\n DEFAULT_AUTHENTICATION_TYPE,\n ],\n errorMessage: auth.error,\n resetErrors: () => dispatch(resetAuthErrors()),\n login: (username: string, password: string) =>\n dispatch(login(username, password)),\n redirectLogin: (authenticationType: AuthenticationType) => {\n if (Cache.getItem(\"isRedirectLogin\")) {\n // prevent endless loop in redirects when authentication type can't be redirected\n throw new IllegalStateException(\n `Could not redirect to '${\n authenticationType.authentication\n }' using url: '${authenticationType.redirectUri ?? \"\"}'`\n );\n }\n\n if (!isAuthenticated) {\n Cache.setItem(\"isRedirectLogin\", true);\n window.location.assign(\n `${getBasePath()}${authenticationType.redirectUri ?? \"\"}`\n );\n }\n },\n };\n};\n\n/**\n */\nexport const useLogout = (): LogoutHook => {\n const dispatch = useDispatch();\n const application = useSelector(getApplication);\n\n const LOGOUT_PATH = logoutPath();\n const BASE_PATH = getBasePath();\n\n const isAuthenticated = application?.isLoggedIn ?? false;\n return {\n isAuthenticated,\n authenticationTypes: application?.authenticationTypes ?? [\n DEFAULT_AUTHENTICATION_TYPE,\n ],\n logout: () => {\n if (Cache.getItem(\"isRedirectLogin\")) {\n const origin = window.location.origin;\n const url = `${origin}${BASE_PATH}/logout?url=${origin}${BASE_PATH}${LOGOUT_PATH}`;\n Cache.setItem(\"isRedirectLogin\", false);\n window.location.assign(url);\n } else {\n return dispatch(logout());\n }\n },\n };\n};\n"],"mappings":";;;;;;;AACA;AAEA;AACA;AAEA;AACA;AAQA;AAeA;AACA;AACO,MAAMA,QAAQ,GAAG,MAAiB;EACvCC,cAAK,CAACC,OAAO,CAAC,iBAAiB,EAAE,KAAK,CAAC;EAEvC,MAAMC,QAAQ,GAAG,IAAAC,uBAAW,GAAE;EAE9B,MAAMC,WAAW,GAAG,IAAAC,uBAAW,EAACC,kCAAc,CAAC;EAC/C,MAAMC,IAAI,GAAG,IAAAF,uBAAW,EAAEG,KAAK,IAAKA,KAAK,CAACD,IAAI,CAAC;EAE/C,MAAME,eAAe,GAAGL,WAAW,EAAEM,UAAU,IAAI,KAAK;EAExD,OAAO;IACLD,eAAe;IACfE,mBAAmB,EAAEP,WAAW,EAAEO,mBAAmB,IAAI,CACvDC,sCAA2B,CAC5B;IACDC,YAAY,EAAEN,IAAI,CAACO,KAAK;IACxBC,WAAW,EAAE,MAAMb,QAAQ,CAAC,IAAAc,wBAAe,GAAE,CAAC;IAC9CC,KAAK,EAAE,CAACC,QAAgB,EAAEC,QAAgB,KACxCjB,QAAQ,CAAC,IAAAe,cAAK,EAACC,QAAQ,EAAEC,QAAQ,CAAC,CAAC;IACrCC,aAAa,EAAGC,kBAAsC,IAAK;MACzD,IAAIrB,cAAK,CAACsB,OAAO,CAAC,iBAAiB,CAAC,EAAE;QACpC;QACA,MAAM,IAAIC,iCAAqB,CAC5B,0BACCF,kBAAkB,CAACG,cACpB,iBAAgBH,kBAAkB,CAACI,WAAW,IAAI,EAAG,GAAE,CACzD;MACH;MAEA,IAAI,CAAChB,eAAe,EAAE;QACpBT,cAAK,CAACC,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC;QACtCyB,MAAM,CAACC,QAAQ,CAACC,MAAM,CACnB,GAAE,IAAAC,sBAAW,GAAG,GAAER,kBAAkB,CAACI,WAAW,IAAI,EAAG,EAAC,CAC1D;MACH;IACF;EACF,CAAC;AACH,CAAC;;AAED;AACA;AADA;AAEO,MAAMK,SAAS,GAAG,MAAkB;EACzC,MAAM5B,QAAQ,GAAG,IAAAC,uBAAW,GAAE;EAC9B,MAAMC,WAAW,GAAG,IAAAC,uBAAW,EAACC,kCAAc,CAAC;EAE/C,MAAMyB,WAAW,GAAG,IAAAC,qBAAU,GAAE;EAChC,MAAMC,SAAS,GAAG,IAAAJ,sBAAW,GAAE;EAE/B,MAAMpB,eAAe,GAAGL,WAAW,EAAEM,UAAU,IAAI,KAAK;EACxD,OAAO;IACLD,eAAe;IACfE,mBAAmB,EAAEP,WAAW,EAAEO,mBAAmB,IAAI,CACvDC,sCAA2B,CAC5B;IACDsB,MAAM,EAAE,MAAM;MACZ,IAAIlC,cAAK,CAACsB,OAAO,CAAC,iBAAiB,CAAC,EAAE;QACpC,MAAMa,MAAM,GAAGT,MAAM,CAACC,QAAQ,CAACQ,MAAM;QACrC,MAAMC,GAAG,GAAI,GAAED,MAAO,GAAEF,SAAU,eAAcE,MAAO,GAAEF,SAAU,GAAEF,WAAY,EAAC;QAClF/B,cAAK,CAACC,OAAO,CAAC,iBAAiB,EAAE,KAAK,CAAC;QACvCyB,MAAM,CAACC,QAAQ,CAACC,MAAM,CAACQ,GAAG,CAAC;MAC7B,CAAC,MAAM;QACL,OAAOlC,QAAQ,CAAC,IAAAgC,eAAM,GAAE,CAAC;MAC3B;IACF;EACF,CAAC;AACH,CAAC;AAAC"}
@@ -69,7 +69,7 @@ class ApplicationModel extends _ResourceModel.default {
69
69
  * Getting the authentication types of the application
70
70
  */
71
71
  get authenticationTypes() {
72
- const authenticationTypes = this.getContribution("security", [_constants.fallbackDefaultAuthenticationType]);
72
+ const authenticationTypes = this.getContribution("security", [_constants.DEFAULT_AUTHENTICATION_TYPE]);
73
73
 
74
74
  //put primary first
75
75
  return authenticationTypes?.sort((a, b) => a.isPrimary === b.isPrimary ? 0 : a.isPrimary ? -1 : 1);
@@ -5,11 +5,12 @@ import UserServicesModel from "../user/UserServicesModel";
5
5
 
6
6
  import { NotAllowedUriException } from "../../exceptions";
7
7
 
8
+ import { DEFAULT_AUTHENTICATION_TYPE } from "../../constants";
9
+
8
10
  import type { ModularUIModel, AuthenticationType } from "../types";
9
11
  import type { ModularUIResponse } from "../../modularui";
10
12
  import type LinkCollection from "../links/LinkCollection";
11
13
  import type Href from "../href/Href";
12
- import { fallbackDefaultAuthenticationType } from "../../constants";
13
14
 
14
15
  /**
15
16
  * The Application model
@@ -76,7 +77,7 @@ export default class ApplicationModel extends ResourceModel {
76
77
  */
77
78
  get authenticationTypes(): Array<AuthenticationType> {
78
79
  const authenticationTypes = this.getContribution("security", [
79
- fallbackDefaultAuthenticationType,
80
+ DEFAULT_AUTHENTICATION_TYPE,
80
81
  ]);
81
82
 
82
83
  //put primary first
@@ -1 +1 @@
1
- {"version":3,"file":"ApplicationModel.js","names":["ApplicationModel","ResourceModel","type","modelName","isApplicableModel","data","contributions","resourcetype","getInitialChildModelLinks","userService","links","getLinkByKey","href","path","NotAllowedUriException","setChildModels","models","userServiceModel","model","userServices","label","getContribution","authenticationTypes","fallbackDefaultAuthenticationType","sort","a","b","isPrimary","tabs","getLinksByGroup","modelcatalog","LinkModel","create","_userServices","UserServicesModel","isLoggedIn","userHref","userLink"],"sources":["../../../src/models/application/ApplicationModel.js"],"sourcesContent":["// @flow\nimport ResourceModel from \"../base/ResourceModel\";\nimport LinkModel from \"../links/LinkModel\";\nimport UserServicesModel from \"../user/UserServicesModel\";\n\nimport { NotAllowedUriException } from \"../../exceptions\";\n\nimport type { ModularUIModel, AuthenticationType } from \"../types\";\nimport type { ModularUIResponse } from \"../../modularui\";\nimport type LinkCollection from \"../links/LinkCollection\";\nimport type Href from \"../href/Href\";\nimport { fallbackDefaultAuthenticationType } from \"../../constants\";\n\n/**\n * The Application model\n */\nexport default class ApplicationModel extends ResourceModel {\n _userServices: ?UserServicesModel;\n\n /**\n * Retrieve type of model\n */\n get type(): string {\n return \"Application\";\n }\n\n /**\n */\n static get modelName(): string {\n return \"ApplicationModel\";\n }\n\n /**\n */\n static isApplicableModel(data: ModularUIResponse): boolean {\n return (\n data.contributions.resourcetype &&\n data.contributions.resourcetype === \"Application\"\n );\n }\n\n /**\n */\n getInitialChildModelLinks(): Array<LinkModel> {\n const userService = this.links.getLinkByKey(\"UserServices\");\n if (userService && userService.href.path === \"/login\") {\n throw new NotAllowedUriException(\n \"The user service (Login panel) should not have the uri '/login', use a different URI because this uri matches the login service.\"\n );\n }\n\n return userService ? [userService] : [];\n }\n\n /**\n */\n setChildModels(models: Array<ModularUIModel>) {\n const userServiceModel = models.find(\n (model) => model.type === \"UserServices\"\n );\n\n if (userServiceModel) {\n this.userServices = userServiceModel;\n }\n }\n\n /**\n * Getting the label of the application\n */\n get label(): string {\n return this.getContribution(\"label\", \"\");\n }\n\n /**\n * Getting the authentication types of the application\n */\n get authenticationTypes(): Array<AuthenticationType> {\n const authenticationTypes = this.getContribution(\"security\", [\n fallbackDefaultAuthenticationType,\n ]);\n\n //put primary first\n return authenticationTypes?.sort(\n (a: AuthenticationType, b: AuthenticationType) =>\n a.isPrimary === b.isPrimary ? 0 : a.isPrimary ? -1 : 1\n );\n }\n /**\n * Getting the tab links\n */\n get tabs(): LinkCollection {\n return this.links.getLinksByGroup(\"tab\");\n }\n\n /**\n * Get modelcatalog link\n */\n get modelcatalog(): LinkModel {\n return LinkModel.create(\"modelcatalog\", \"/modelcatalog\", \"Model catalog\");\n }\n\n /**\n * Set the userservices for this application\n */\n set userServices(model: ?ModularUIModel) {\n this._userServices = model instanceof UserServicesModel ? model : null;\n }\n\n /**\n * returns the userservices configured for this application\n */\n get userServices(): ?UserServicesModel {\n return this._userServices ? this._userServices : null;\n }\n\n /**\n * Indicates if the user is logged in\n */\n get isLoggedIn(): boolean {\n return this.userServices?.isLoggedIn ?? false;\n }\n\n /**\n * Retrieve link to the user information,\n * only available when the user services are available\n */\n get userHref(): Href | null {\n if (this.userServices != null && this.userServices.userLink != null) {\n return this.userServices.userLink.href;\n }\n\n return null;\n }\n}\n"],"mappings":";;;;;;;;;AACA;AACA;AACA;AAEA;AAMA;AAEA;AACA;AACA;AACe,MAAMA,gBAAgB,SAASC,sBAAa,CAAC;EAAA;IAAA;IAAA;EAAA;EAG1D;AACF;AACA;EACE,IAAIC,IAAI,GAAW;IACjB,OAAO,aAAa;EACtB;;EAEA;AACF;EACE,WAAWC,SAAS,GAAW;IAC7B,OAAO,kBAAkB;EAC3B;;EAEA;AACF;EACE,OAAOC,iBAAiB,CAACC,IAAuB,EAAW;IACzD,OACEA,IAAI,CAACC,aAAa,CAACC,YAAY,IAC/BF,IAAI,CAACC,aAAa,CAACC,YAAY,KAAK,aAAa;EAErD;;EAEA;AACF;EACEC,yBAAyB,GAAqB;IAC5C,MAAMC,WAAW,GAAG,IAAI,CAACC,KAAK,CAACC,YAAY,CAAC,cAAc,CAAC;IAC3D,IAAIF,WAAW,IAAIA,WAAW,CAACG,IAAI,CAACC,IAAI,KAAK,QAAQ,EAAE;MACrD,MAAM,IAAIC,kCAAsB,CAC9B,kIAAkI,CACnI;IACH;IAEA,OAAOL,WAAW,GAAG,CAACA,WAAW,CAAC,GAAG,EAAE;EACzC;;EAEA;AACF;EACEM,cAAc,CAACC,MAA6B,EAAE;IAC5C,MAAMC,gBAAgB,GAAG,mBAAAD,MAAM,OAANA,MAAM,EAC5BE,KAAK,IAAKA,KAAK,CAAChB,IAAI,KAAK,cAAc,CACzC;IAED,IAAIe,gBAAgB,EAAE;MACpB,IAAI,CAACE,YAAY,GAAGF,gBAAgB;IACtC;EACF;;EAEA;AACF;AACA;EACE,IAAIG,KAAK,GAAW;IAClB,OAAO,IAAI,CAACC,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC;EAC1C;;EAEA;AACF;AACA;EACE,IAAIC,mBAAmB,GAA8B;IACnD,MAAMA,mBAAmB,GAAG,IAAI,CAACD,eAAe,CAAC,UAAU,EAAE,CAC3DE,4CAAiC,CAClC,CAAC;;IAEF;IACA,OAAOD,mBAAmB,EAAEE,IAAI,CAC9B,CAACC,CAAqB,EAAEC,CAAqB,KAC3CD,CAAC,CAACE,SAAS,KAAKD,CAAC,CAACC,SAAS,GAAG,CAAC,GAAGF,CAAC,CAACE,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,CACzD;EACH;EACA;AACF;AACA;EACE,IAAIC,IAAI,GAAmB;IACzB,OAAO,IAAI,CAAClB,KAAK,CAACmB,eAAe,CAAC,KAAK,CAAC;EAC1C;;EAEA;AACF;AACA;EACE,IAAIC,YAAY,GAAc;IAC5B,OAAOC,kBAAS,CAACC,MAAM,CAAC,cAAc,EAAE,eAAe,EAAE,eAAe,CAAC;EAC3E;;EAEA;AACF;AACA;EACE,IAAIb,YAAY,CAACD,KAAsB,EAAE;IACvC,IAAI,CAACe,aAAa,GAAGf,KAAK,YAAYgB,0BAAiB,GAAGhB,KAAK,GAAG,IAAI;EACxE;;EAEA;AACF;AACA;EACE,IAAIC,YAAY,GAAuB;IACrC,OAAO,IAAI,CAACc,aAAa,GAAG,IAAI,CAACA,aAAa,GAAG,IAAI;EACvD;;EAEA;AACF;AACA;EACE,IAAIE,UAAU,GAAY;IACxB,OAAO,IAAI,CAAChB,YAAY,EAAEgB,UAAU,IAAI,KAAK;EAC/C;;EAEA;AACF;AACA;AACA;EACE,IAAIC,QAAQ,GAAgB;IAC1B,IAAI,IAAI,CAACjB,YAAY,IAAI,IAAI,IAAI,IAAI,CAACA,YAAY,CAACkB,QAAQ,IAAI,IAAI,EAAE;MACnE,OAAO,IAAI,CAAClB,YAAY,CAACkB,QAAQ,CAACzB,IAAI;IACxC;IAEA,OAAO,IAAI;EACb;AACF;AAAC"}
1
+ {"version":3,"file":"ApplicationModel.js","names":["ApplicationModel","ResourceModel","type","modelName","isApplicableModel","data","contributions","resourcetype","getInitialChildModelLinks","userService","links","getLinkByKey","href","path","NotAllowedUriException","setChildModels","models","userServiceModel","model","userServices","label","getContribution","authenticationTypes","DEFAULT_AUTHENTICATION_TYPE","sort","a","b","isPrimary","tabs","getLinksByGroup","modelcatalog","LinkModel","create","_userServices","UserServicesModel","isLoggedIn","userHref","userLink"],"sources":["../../../src/models/application/ApplicationModel.js"],"sourcesContent":["// @flow\nimport ResourceModel from \"../base/ResourceModel\";\nimport LinkModel from \"../links/LinkModel\";\nimport UserServicesModel from \"../user/UserServicesModel\";\n\nimport { NotAllowedUriException } from \"../../exceptions\";\n\nimport { DEFAULT_AUTHENTICATION_TYPE } from \"../../constants\";\n\nimport type { ModularUIModel, AuthenticationType } from \"../types\";\nimport type { ModularUIResponse } from \"../../modularui\";\nimport type LinkCollection from \"../links/LinkCollection\";\nimport type Href from \"../href/Href\";\n\n/**\n * The Application model\n */\nexport default class ApplicationModel extends ResourceModel {\n _userServices: ?UserServicesModel;\n\n /**\n * Retrieve type of model\n */\n get type(): string {\n return \"Application\";\n }\n\n /**\n */\n static get modelName(): string {\n return \"ApplicationModel\";\n }\n\n /**\n */\n static isApplicableModel(data: ModularUIResponse): boolean {\n return (\n data.contributions.resourcetype &&\n data.contributions.resourcetype === \"Application\"\n );\n }\n\n /**\n */\n getInitialChildModelLinks(): Array<LinkModel> {\n const userService = this.links.getLinkByKey(\"UserServices\");\n if (userService && userService.href.path === \"/login\") {\n throw new NotAllowedUriException(\n \"The user service (Login panel) should not have the uri '/login', use a different URI because this uri matches the login service.\"\n );\n }\n\n return userService ? [userService] : [];\n }\n\n /**\n */\n setChildModels(models: Array<ModularUIModel>) {\n const userServiceModel = models.find(\n (model) => model.type === \"UserServices\"\n );\n\n if (userServiceModel) {\n this.userServices = userServiceModel;\n }\n }\n\n /**\n * Getting the label of the application\n */\n get label(): string {\n return this.getContribution(\"label\", \"\");\n }\n\n /**\n * Getting the authentication types of the application\n */\n get authenticationTypes(): Array<AuthenticationType> {\n const authenticationTypes = this.getContribution(\"security\", [\n DEFAULT_AUTHENTICATION_TYPE,\n ]);\n\n //put primary first\n return authenticationTypes?.sort(\n (a: AuthenticationType, b: AuthenticationType) =>\n a.isPrimary === b.isPrimary ? 0 : a.isPrimary ? -1 : 1\n );\n }\n /**\n * Getting the tab links\n */\n get tabs(): LinkCollection {\n return this.links.getLinksByGroup(\"tab\");\n }\n\n /**\n * Get modelcatalog link\n */\n get modelcatalog(): LinkModel {\n return LinkModel.create(\"modelcatalog\", \"/modelcatalog\", \"Model catalog\");\n }\n\n /**\n * Set the userservices for this application\n */\n set userServices(model: ?ModularUIModel) {\n this._userServices = model instanceof UserServicesModel ? model : null;\n }\n\n /**\n * returns the userservices configured for this application\n */\n get userServices(): ?UserServicesModel {\n return this._userServices ? this._userServices : null;\n }\n\n /**\n * Indicates if the user is logged in\n */\n get isLoggedIn(): boolean {\n return this.userServices?.isLoggedIn ?? false;\n }\n\n /**\n * Retrieve link to the user information,\n * only available when the user services are available\n */\n get userHref(): Href | null {\n if (this.userServices != null && this.userServices.userLink != null) {\n return this.userServices.userLink.href;\n }\n\n return null;\n }\n}\n"],"mappings":";;;;;;;;;AACA;AACA;AACA;AAEA;AAEA;AAOA;AACA;AACA;AACe,MAAMA,gBAAgB,SAASC,sBAAa,CAAC;EAAA;IAAA;IAAA;EAAA;EAG1D;AACF;AACA;EACE,IAAIC,IAAI,GAAW;IACjB,OAAO,aAAa;EACtB;;EAEA;AACF;EACE,WAAWC,SAAS,GAAW;IAC7B,OAAO,kBAAkB;EAC3B;;EAEA;AACF;EACE,OAAOC,iBAAiB,CAACC,IAAuB,EAAW;IACzD,OACEA,IAAI,CAACC,aAAa,CAACC,YAAY,IAC/BF,IAAI,CAACC,aAAa,CAACC,YAAY,KAAK,aAAa;EAErD;;EAEA;AACF;EACEC,yBAAyB,GAAqB;IAC5C,MAAMC,WAAW,GAAG,IAAI,CAACC,KAAK,CAACC,YAAY,CAAC,cAAc,CAAC;IAC3D,IAAIF,WAAW,IAAIA,WAAW,CAACG,IAAI,CAACC,IAAI,KAAK,QAAQ,EAAE;MACrD,MAAM,IAAIC,kCAAsB,CAC9B,kIAAkI,CACnI;IACH;IAEA,OAAOL,WAAW,GAAG,CAACA,WAAW,CAAC,GAAG,EAAE;EACzC;;EAEA;AACF;EACEM,cAAc,CAACC,MAA6B,EAAE;IAC5C,MAAMC,gBAAgB,GAAG,mBAAAD,MAAM,OAANA,MAAM,EAC5BE,KAAK,IAAKA,KAAK,CAAChB,IAAI,KAAK,cAAc,CACzC;IAED,IAAIe,gBAAgB,EAAE;MACpB,IAAI,CAACE,YAAY,GAAGF,gBAAgB;IACtC;EACF;;EAEA;AACF;AACA;EACE,IAAIG,KAAK,GAAW;IAClB,OAAO,IAAI,CAACC,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC;EAC1C;;EAEA;AACF;AACA;EACE,IAAIC,mBAAmB,GAA8B;IACnD,MAAMA,mBAAmB,GAAG,IAAI,CAACD,eAAe,CAAC,UAAU,EAAE,CAC3DE,sCAA2B,CAC5B,CAAC;;IAEF;IACA,OAAOD,mBAAmB,EAAEE,IAAI,CAC9B,CAACC,CAAqB,EAAEC,CAAqB,KAC3CD,CAAC,CAACE,SAAS,KAAKD,CAAC,CAACC,SAAS,GAAG,CAAC,GAAGF,CAAC,CAACE,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,CACzD;EACH;EACA;AACF;AACA;EACE,IAAIC,IAAI,GAAmB;IACzB,OAAO,IAAI,CAAClB,KAAK,CAACmB,eAAe,CAAC,KAAK,CAAC;EAC1C;;EAEA;AACF;AACA;EACE,IAAIC,YAAY,GAAc;IAC5B,OAAOC,kBAAS,CAACC,MAAM,CAAC,cAAc,EAAE,eAAe,EAAE,eAAe,CAAC;EAC3E;;EAEA;AACF;AACA;EACE,IAAIb,YAAY,CAACD,KAAsB,EAAE;IACvC,IAAI,CAACe,aAAa,GAAGf,KAAK,YAAYgB,0BAAiB,GAAGhB,KAAK,GAAG,IAAI;EACxE;;EAEA;AACF;AACA;EACE,IAAIC,YAAY,GAAuB;IACrC,OAAO,IAAI,CAACc,aAAa,GAAG,IAAI,CAACA,aAAa,GAAG,IAAI;EACvD;;EAEA;AACF;AACA;EACE,IAAIE,UAAU,GAAY;IACxB,OAAO,IAAI,CAAChB,YAAY,EAAEgB,UAAU,IAAI,KAAK;EAC/C;;EAEA;AACF;AACA;AACA;EACE,IAAIC,QAAQ,GAAgB;IAC1B,IAAI,IAAI,CAACjB,YAAY,IAAI,IAAI,IAAI,IAAI,CAACA,YAAY,CAACkB,QAAQ,IAAI,IAAI,EAAE;MACnE,OAAO,IAAI,CAAClB,YAAY,CAACkB,QAAQ,CAACzB,IAAI;IACxC;IAEA,OAAO,IAAI;EACb;AACF;AAAC"}
@@ -121,10 +121,22 @@ class UploadAttributeModel extends _StringAttributeModel.default {
121
121
  fileSize: this.maxFileSize,
122
122
  maxTotalFileSize: this.maxTotalFileSize,
123
123
  isMaxTotal: this.maxTotalFileSize !== undefined
124
- }
124
+ },
125
+ acceptedFiles: this.acceptedFiles
125
126
  };
126
127
  }
127
128
 
129
+ /**
130
+ * Array of accepted file extensions and mime types.
131
+ * Convenience method for accept attribute of file input html control
132
+ */
133
+ get acceptedFiles() {
134
+ var _context3, _context4, _context5;
135
+ const mimeTypes = this.contributions.allowedMimeTypes ? (0, _filter.default)(_context3 = this.contributions.allowedMimeTypes).call(_context3, mimeType => mimeType !== "[...]") : [];
136
+ const extensions = this.contributions.allowedExtensions ? (0, _map.default)(_context4 = (0, _filter.default)(_context5 = this.contributions.allowedExtensions).call(_context5, extension => extension !== "[...]")).call(_context4, extension => `.${extension}`) : [];
137
+ return [...extensions, ...mimeTypes];
138
+ }
139
+
128
140
  /**
129
141
  * Add upload constraints
130
142
  */
@@ -164,10 +176,10 @@ class UploadAttributeModel extends _StringAttributeModel.default {
164
176
  // when the input value is a string but not json,
165
177
  // we assume that it is just a list of uploaded tokens and copy it as input value
166
178
  try {
167
- var _context3;
179
+ var _context6;
168
180
  const files = JSON.parse(value);
169
181
  this.files = files;
170
- this.inputvalue = (0, _map.default)(_context3 = (0, _keys.default)(files)).call(_context3, fileName => files[fileName].token).join(",");
182
+ this.inputvalue = (0, _map.default)(_context6 = (0, _keys.default)(files)).call(_context6, fileName => files[fileName].token).join(",");
171
183
  } catch (error) {
172
184
  if (typeof value === "string") {
173
185
  this.inputvalue = value;
@@ -108,6 +108,7 @@ export default class UploadAttributeModel extends StringAttributeModel {
108
108
  get uploadConstraints(): {
109
109
  fileTypes: FiletypeConstraintsType,
110
110
  maxFileSize: FilesizeConstraintsType,
111
+ acceptedFiles: Array<string>,
111
112
  } {
112
113
  const mimeTypes = this.contributions.allowedMimeTypes
113
114
  ? this.contributions.allowedMimeTypes.filter(
@@ -132,9 +133,29 @@ export default class UploadAttributeModel extends StringAttributeModel {
132
133
  maxTotalFileSize: this.maxTotalFileSize,
133
134
  isMaxTotal: this.maxTotalFileSize !== undefined,
134
135
  },
136
+ acceptedFiles: this.acceptedFiles,
135
137
  };
136
138
  }
137
139
 
140
+ /**
141
+ * Array of accepted file extensions and mime types.
142
+ * Convenience method for accept attribute of file input html control
143
+ */
144
+ get acceptedFiles(): Array<string> {
145
+ const mimeTypes = this.contributions.allowedMimeTypes
146
+ ? this.contributions.allowedMimeTypes.filter(
147
+ (mimeType) => mimeType !== "[...]"
148
+ )
149
+ : [];
150
+ const extensions = this.contributions.allowedExtensions
151
+ ? this.contributions.allowedExtensions
152
+ .filter((extension) => extension !== "[...]")
153
+ .map((extension) => `.${extension}`)
154
+ : [];
155
+
156
+ return [...extensions, ...mimeTypes];
157
+ }
158
+
138
159
  /**
139
160
  * Add upload constraints
140
161
  */
@@ -1 +1 @@
1
- {"version":3,"file":"UploadAttributeModel.js","names":["UNCHANGED","UploadAttributeModel","StringAttributeModel","isApplicableModel","contributions","type","multiple","getContribution","initialTotalFileSize","_initialTotalFileSize","maxTotalFileSize","_maxTotalFileSize","currentFilesize","uploadedFileSize","maxFileSize","uploadMaxFileSize","files","length","accumulatedFileSize","forEach","fileName","file","size","uploadConstraints","mimeTypes","allowedMimeTypes","mimeType","extensions","allowedExtensions","extension","fileTypes","fileSize","isMaxTotal","undefined","addConstraints","constraints","ConstraintCollection","add","FileExtensionConstraint","hasFilesizeConstraint","FileSizeConstraint","_files","update","value","JSON","parse","inputvalue","token","join","error","updateLastModification","readonlyvalue","initvalue","toString","getValue","hasValue","_value","mergeAttribute","oldAttribute","isValid"],"sources":["../../../src/models/attributes/UploadAttributeModel.js"],"sourcesContent":["// @flow\nimport ConstraintCollection from \"./input-constraints/ConstraintCollection\";\nimport StringAttributeModel from \"./StringAttributeModel\";\nimport FileExtensionConstraint from \"./input-constraints/FileExtensionConstraint\";\nimport FileSizeConstraint from \"./input-constraints/FileSizeConstraint\";\n\nimport type {\n AttributeType,\n FilesType,\n FiletypeConstraintsType,\n FilesizeConstraintsType,\n} from \"../types\";\n\nconst UNCHANGED = \"UNCHANGED\";\n\n/**\n * Upload attribute\n */\nexport default class UploadAttributeModel extends StringAttributeModel {\n _files: FilesType;\n _initialTotalFileSize: number;\n _maxTotalFileSize: number;\n\n /**\n */\n static isApplicableModel(contributions: Object): boolean {\n return contributions.type === \"binary\";\n }\n\n /**\n */\n get type(): string {\n return \"upload\";\n }\n\n /**\n * Retrieve single or multi upload\n */\n get multiple(): boolean {\n return this.getContribution(\"multiple\", false);\n }\n\n /**\n */\n get initialTotalFileSize(): number {\n return this._initialTotalFileSize || 0;\n }\n\n /**\n */\n set initialTotalFileSize(initialTotalFileSize: number) {\n this._initialTotalFileSize = initialTotalFileSize;\n }\n\n /**\n */\n get maxTotalFileSize(): number {\n return this._maxTotalFileSize;\n }\n\n /**\n */\n set maxTotalFileSize(maxTotalFileSize: number) {\n this._maxTotalFileSize = maxTotalFileSize;\n }\n\n /**\n */\n get currentFilesize(): number {\n return this.initialTotalFileSize + this.uploadedFileSize;\n }\n\n /**\n */\n get maxFileSize(): ?number {\n if (this.maxTotalFileSize) {\n const uploadMaxFileSize = this.maxTotalFileSize - this.currentFilesize;\n if (uploadMaxFileSize < 0) {\n return 0;\n }\n\n return uploadMaxFileSize;\n }\n\n return this.contributions.uploadMaxFileSize;\n }\n\n /**\n */\n get uploadedFileSize(): number {\n if (Object.keys(this.files).length === 0) {\n return 0;\n }\n\n let accumulatedFileSize = 0;\n Object.keys(this.files).forEach((fileName) => {\n const file = this.files[fileName];\n if (file.size) {\n accumulatedFileSize += file.size;\n }\n });\n return accumulatedFileSize;\n }\n\n /**\n * Upload constraints\n */\n get uploadConstraints(): {\n fileTypes: FiletypeConstraintsType,\n maxFileSize: FilesizeConstraintsType,\n } {\n const mimeTypes = this.contributions.allowedMimeTypes\n ? this.contributions.allowedMimeTypes.filter(\n (mimeType) => mimeType !== \"[...]\"\n )\n : [];\n const extensions = this.contributions.allowedExtensions\n ? this.contributions.allowedExtensions.filter(\n (extension) => extension !== \"[...]\"\n )\n : [];\n\n const fileTypes: FiletypeConstraintsType = extensions.map((extension) => ({\n extensions: [extension],\n mimeTypes,\n }));\n\n return {\n fileTypes,\n maxFileSize: {\n fileSize: this.maxFileSize,\n maxTotalFileSize: this.maxTotalFileSize,\n isMaxTotal: this.maxTotalFileSize !== undefined,\n },\n };\n }\n\n /**\n * Add upload constraints\n */\n addConstraints(): ConstraintCollection {\n const constraints = new ConstraintCollection();\n\n if (this.uploadConstraints.fileTypes.length > 0) {\n constraints.add(\n new FileExtensionConstraint(this.uploadConstraints.fileTypes)\n );\n }\n\n const hasFilesizeConstraint =\n this.uploadConstraints.maxFileSize.isMaxTotal ||\n this.uploadConstraints.maxFileSize.fileSize !== undefined;\n\n if (hasFilesizeConstraint) {\n constraints.add(\n new FileSizeConstraint(this.uploadConstraints.maxFileSize)\n );\n }\n\n return constraints;\n }\n\n /**\n */\n get files(): FilesType {\n return this._files || {};\n }\n\n /**\n */\n set files(files: FilesType) {\n this._files = files;\n }\n\n /**\n * Update the attribute\n */\n update(value: string): UploadAttributeModel {\n if (!value) {\n return this;\n }\n\n // parse to json and handle uploaded file\n // when the input value is a string but not json,\n // we assume that it is just a list of uploaded tokens and copy it as input value\n try {\n const files = JSON.parse(value);\n this.files = files;\n\n this.inputvalue = Object.keys(files)\n .map((fileName) => files[fileName].token)\n .join(\",\");\n } catch (error) {\n if (typeof value === \"string\") {\n this.inputvalue = value;\n }\n }\n\n this.updateLastModification();\n\n return this;\n }\n\n /**\n */\n get readonlyvalue(): string {\n if (this.initvalue) {\n return this.initvalue.toString();\n }\n\n return \"\";\n }\n\n /**\n * Getting the value of the attribute, return unchanged when the uploaded file has not changed\n */\n getValue(): any {\n if (!this.hasValue()) {\n return null;\n }\n\n if (this.initvalue === this.inputvalue) {\n return UNCHANGED;\n }\n\n return this._value;\n }\n\n /**\n */\n mergeAttribute(oldAttribute: AttributeType) {\n if (\n oldAttribute instanceof UploadAttributeModel &&\n oldAttribute.isValid &&\n oldAttribute.inputvalue !== null\n ) {\n this.update(JSON.stringify(oldAttribute.files));\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"UploadAttributeModel.js","names":["UNCHANGED","UploadAttributeModel","StringAttributeModel","isApplicableModel","contributions","type","multiple","getContribution","initialTotalFileSize","_initialTotalFileSize","maxTotalFileSize","_maxTotalFileSize","currentFilesize","uploadedFileSize","maxFileSize","uploadMaxFileSize","files","length","accumulatedFileSize","forEach","fileName","file","size","uploadConstraints","mimeTypes","allowedMimeTypes","mimeType","extensions","allowedExtensions","extension","fileTypes","fileSize","isMaxTotal","undefined","acceptedFiles","addConstraints","constraints","ConstraintCollection","add","FileExtensionConstraint","hasFilesizeConstraint","FileSizeConstraint","_files","update","value","JSON","parse","inputvalue","token","join","error","updateLastModification","readonlyvalue","initvalue","toString","getValue","hasValue","_value","mergeAttribute","oldAttribute","isValid"],"sources":["../../../src/models/attributes/UploadAttributeModel.js"],"sourcesContent":["// @flow\nimport ConstraintCollection from \"./input-constraints/ConstraintCollection\";\nimport StringAttributeModel from \"./StringAttributeModel\";\nimport FileExtensionConstraint from \"./input-constraints/FileExtensionConstraint\";\nimport FileSizeConstraint from \"./input-constraints/FileSizeConstraint\";\n\nimport type {\n AttributeType,\n FilesType,\n FiletypeConstraintsType,\n FilesizeConstraintsType,\n} from \"../types\";\n\nconst UNCHANGED = \"UNCHANGED\";\n\n/**\n * Upload attribute\n */\nexport default class UploadAttributeModel extends StringAttributeModel {\n _files: FilesType;\n _initialTotalFileSize: number;\n _maxTotalFileSize: number;\n\n /**\n */\n static isApplicableModel(contributions: Object): boolean {\n return contributions.type === \"binary\";\n }\n\n /**\n */\n get type(): string {\n return \"upload\";\n }\n\n /**\n * Retrieve single or multi upload\n */\n get multiple(): boolean {\n return this.getContribution(\"multiple\", false);\n }\n\n /**\n */\n get initialTotalFileSize(): number {\n return this._initialTotalFileSize || 0;\n }\n\n /**\n */\n set initialTotalFileSize(initialTotalFileSize: number) {\n this._initialTotalFileSize = initialTotalFileSize;\n }\n\n /**\n */\n get maxTotalFileSize(): number {\n return this._maxTotalFileSize;\n }\n\n /**\n */\n set maxTotalFileSize(maxTotalFileSize: number) {\n this._maxTotalFileSize = maxTotalFileSize;\n }\n\n /**\n */\n get currentFilesize(): number {\n return this.initialTotalFileSize + this.uploadedFileSize;\n }\n\n /**\n */\n get maxFileSize(): ?number {\n if (this.maxTotalFileSize) {\n const uploadMaxFileSize = this.maxTotalFileSize - this.currentFilesize;\n if (uploadMaxFileSize < 0) {\n return 0;\n }\n\n return uploadMaxFileSize;\n }\n\n return this.contributions.uploadMaxFileSize;\n }\n\n /**\n */\n get uploadedFileSize(): number {\n if (Object.keys(this.files).length === 0) {\n return 0;\n }\n\n let accumulatedFileSize = 0;\n Object.keys(this.files).forEach((fileName) => {\n const file = this.files[fileName];\n if (file.size) {\n accumulatedFileSize += file.size;\n }\n });\n return accumulatedFileSize;\n }\n\n /**\n * Upload constraints\n */\n get uploadConstraints(): {\n fileTypes: FiletypeConstraintsType,\n maxFileSize: FilesizeConstraintsType,\n acceptedFiles: Array<string>,\n } {\n const mimeTypes = this.contributions.allowedMimeTypes\n ? this.contributions.allowedMimeTypes.filter(\n (mimeType) => mimeType !== \"[...]\"\n )\n : [];\n const extensions = this.contributions.allowedExtensions\n ? this.contributions.allowedExtensions.filter(\n (extension) => extension !== \"[...]\"\n )\n : [];\n\n const fileTypes: FiletypeConstraintsType = extensions.map((extension) => ({\n extensions: [extension],\n mimeTypes,\n }));\n\n return {\n fileTypes,\n maxFileSize: {\n fileSize: this.maxFileSize,\n maxTotalFileSize: this.maxTotalFileSize,\n isMaxTotal: this.maxTotalFileSize !== undefined,\n },\n acceptedFiles: this.acceptedFiles,\n };\n }\n\n /**\n * Array of accepted file extensions and mime types.\n * Convenience method for accept attribute of file input html control\n */\n get acceptedFiles(): Array<string> {\n const mimeTypes = this.contributions.allowedMimeTypes\n ? this.contributions.allowedMimeTypes.filter(\n (mimeType) => mimeType !== \"[...]\"\n )\n : [];\n const extensions = this.contributions.allowedExtensions\n ? this.contributions.allowedExtensions\n .filter((extension) => extension !== \"[...]\")\n .map((extension) => `.${extension}`)\n : [];\n\n return [...extensions, ...mimeTypes];\n }\n\n /**\n * Add upload constraints\n */\n addConstraints(): ConstraintCollection {\n const constraints = new ConstraintCollection();\n\n if (this.uploadConstraints.fileTypes.length > 0) {\n constraints.add(\n new FileExtensionConstraint(this.uploadConstraints.fileTypes)\n );\n }\n\n const hasFilesizeConstraint =\n this.uploadConstraints.maxFileSize.isMaxTotal ||\n this.uploadConstraints.maxFileSize.fileSize !== undefined;\n\n if (hasFilesizeConstraint) {\n constraints.add(\n new FileSizeConstraint(this.uploadConstraints.maxFileSize)\n );\n }\n\n return constraints;\n }\n\n /**\n */\n get files(): FilesType {\n return this._files || {};\n }\n\n /**\n */\n set files(files: FilesType) {\n this._files = files;\n }\n\n /**\n * Update the attribute\n */\n update(value: string): UploadAttributeModel {\n if (!value) {\n return this;\n }\n\n // parse to json and handle uploaded file\n // when the input value is a string but not json,\n // we assume that it is just a list of uploaded tokens and copy it as input value\n try {\n const files = JSON.parse(value);\n this.files = files;\n\n this.inputvalue = Object.keys(files)\n .map((fileName) => files[fileName].token)\n .join(\",\");\n } catch (error) {\n if (typeof value === \"string\") {\n this.inputvalue = value;\n }\n }\n\n this.updateLastModification();\n\n return this;\n }\n\n /**\n */\n get readonlyvalue(): string {\n if (this.initvalue) {\n return this.initvalue.toString();\n }\n\n return \"\";\n }\n\n /**\n * Getting the value of the attribute, return unchanged when the uploaded file has not changed\n */\n getValue(): any {\n if (!this.hasValue()) {\n return null;\n }\n\n if (this.initvalue === this.inputvalue) {\n return UNCHANGED;\n }\n\n return this._value;\n }\n\n /**\n */\n mergeAttribute(oldAttribute: AttributeType) {\n if (\n oldAttribute instanceof UploadAttributeModel &&\n oldAttribute.isValid &&\n oldAttribute.inputvalue !== null\n ) {\n this.update(JSON.stringify(oldAttribute.files));\n }\n }\n}\n"],"mappings":"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"}
@@ -65,6 +65,17 @@ class ErrorModel {
65
65
  get isMandatoryConstraint() {
66
66
  return this.id === "Constraint.Mandatory";
67
67
  }
68
+
69
+ /**
70
+ * Returns a message object from the error
71
+ */
72
+ getMessage() {
73
+ return {
74
+ id: this.id,
75
+ defaultMessage: this.defaultMessage ?? "",
76
+ parameters: this.parameters ?? {}
77
+ };
78
+ }
68
79
  }
69
80
  var _default = ErrorModel;
70
81
  exports.default = _default;
@@ -1,5 +1,5 @@
1
1
  // @flow
2
- import type { MessageParameters } from "../../i18n/types";
2
+ import type { MessageObject, MessageParameters } from "../../i18n/types";
3
3
  import LayoutHintCollection from "../layouthint/LayoutHintCollection";
4
4
 
5
5
  /**
@@ -67,6 +67,17 @@ class ErrorModel {
67
67
  get isMandatoryConstraint(): boolean {
68
68
  return this.id === "Constraint.Mandatory";
69
69
  }
70
+
71
+ /**
72
+ * Returns a message object from the error
73
+ */
74
+ getMessage(): MessageObject {
75
+ return {
76
+ id: this.id,
77
+ defaultMessage: this.defaultMessage ?? "",
78
+ parameters: this.parameters ?? {},
79
+ };
80
+ }
70
81
  }
71
82
 
72
83
  export default ErrorModel;
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorModel.js","names":["ErrorModel","constructor","id","defaultMessage","parameters","isClientConstraint","layouthint","LayoutHintCollection","_id","_parameters","_defaultMessage","_isClientConstraint","_layouthint","Array","isArray","isMandatoryConstraint"],"sources":["../../../src/models/error/ErrorModel.js"],"sourcesContent":["// @flow\nimport type { MessageParameters } from \"../../i18n/types\";\nimport LayoutHintCollection from \"../layouthint/LayoutHintCollection\";\n\n/**\n * Wrapper around an error message / object\n */\nclass ErrorModel {\n _id: string;\n _defaultMessage: ?string;\n _parameters: ?MessageParameters;\n _isClientConstraint: boolean;\n _layouthint: LayoutHintCollection;\n\n /**\n * Contruct\n */\n constructor(\n id: string,\n defaultMessage: ?string,\n parameters: ?MessageParameters,\n isClientConstraint: boolean = false,\n layouthint: LayoutHintCollection = new LayoutHintCollection()\n ) {\n this._id = id;\n this._parameters = parameters;\n this._defaultMessage = defaultMessage;\n this._isClientConstraint = isClientConstraint;\n this._layouthint = Array.isArray(layouthint)\n ? new LayoutHintCollection(layouthint)\n : layouthint;\n }\n\n /**\n * Get id of error\n */\n get id(): string {\n return this._id;\n }\n\n /**\n */\n get defaultMessage(): ?string {\n return this._defaultMessage;\n }\n\n /**\n */\n get parameters(): ?MessageParameters {\n return this._parameters;\n }\n\n /**\n */\n get isClientConstraint(): boolean {\n return this._isClientConstraint || false;\n }\n\n /**\n */\n get layouthint(): LayoutHintCollection {\n return this._layouthint;\n }\n\n /**\n */\n get isMandatoryConstraint(): boolean {\n return this.id === \"Constraint.Mandatory\";\n }\n}\n\nexport default ErrorModel;\n"],"mappings":";;;;;;;;AAEA;AAEA;AACA;AACA;AACA,MAAMA,UAAU,CAAC;EAOf;AACF;AACA;EACEC,WAAW,CACTC,EAAU,EACVC,cAAuB,EACvBC,UAA8B,EAG9B;IAAA,IAFAC,kBAA2B,uEAAG,KAAK;IAAA,IACnCC,UAAgC,uEAAG,IAAIC,6BAAoB,EAAE;IAAA;IAAA;IAAA;IAAA;IAAA;IAE7D,IAAI,CAACC,GAAG,GAAGN,EAAE;IACb,IAAI,CAACO,WAAW,GAAGL,UAAU;IAC7B,IAAI,CAACM,eAAe,GAAGP,cAAc;IACrC,IAAI,CAACQ,mBAAmB,GAAGN,kBAAkB;IAC7C,IAAI,CAACO,WAAW,GAAGC,KAAK,CAACC,OAAO,CAACR,UAAU,CAAC,GACxC,IAAIC,6BAAoB,CAACD,UAAU,CAAC,GACpCA,UAAU;EAChB;;EAEA;AACF;AACA;EACE,IAAIJ,EAAE,GAAW;IACf,OAAO,IAAI,CAACM,GAAG;EACjB;;EAEA;AACF;EACE,IAAIL,cAAc,GAAY;IAC5B,OAAO,IAAI,CAACO,eAAe;EAC7B;;EAEA;AACF;EACE,IAAIN,UAAU,GAAuB;IACnC,OAAO,IAAI,CAACK,WAAW;EACzB;;EAEA;AACF;EACE,IAAIJ,kBAAkB,GAAY;IAChC,OAAO,IAAI,CAACM,mBAAmB,IAAI,KAAK;EAC1C;;EAEA;AACF;EACE,IAAIL,UAAU,GAAyB;IACrC,OAAO,IAAI,CAACM,WAAW;EACzB;;EAEA;AACF;EACE,IAAIG,qBAAqB,GAAY;IACnC,OAAO,IAAI,CAACb,EAAE,KAAK,sBAAsB;EAC3C;AACF;AAAC,eAEcF,UAAU;AAAA"}
1
+ {"version":3,"file":"ErrorModel.js","names":["ErrorModel","constructor","id","defaultMessage","parameters","isClientConstraint","layouthint","LayoutHintCollection","_id","_parameters","_defaultMessage","_isClientConstraint","_layouthint","Array","isArray","isMandatoryConstraint","getMessage"],"sources":["../../../src/models/error/ErrorModel.js"],"sourcesContent":["// @flow\nimport type { MessageObject, MessageParameters } from \"../../i18n/types\";\nimport LayoutHintCollection from \"../layouthint/LayoutHintCollection\";\n\n/**\n * Wrapper around an error message / object\n */\nclass ErrorModel {\n _id: string;\n _defaultMessage: ?string;\n _parameters: ?MessageParameters;\n _isClientConstraint: boolean;\n _layouthint: LayoutHintCollection;\n\n /**\n * Contruct\n */\n constructor(\n id: string,\n defaultMessage: ?string,\n parameters: ?MessageParameters,\n isClientConstraint: boolean = false,\n layouthint: LayoutHintCollection = new LayoutHintCollection()\n ) {\n this._id = id;\n this._parameters = parameters;\n this._defaultMessage = defaultMessage;\n this._isClientConstraint = isClientConstraint;\n this._layouthint = Array.isArray(layouthint)\n ? new LayoutHintCollection(layouthint)\n : layouthint;\n }\n\n /**\n * Get id of error\n */\n get id(): string {\n return this._id;\n }\n\n /**\n */\n get defaultMessage(): ?string {\n return this._defaultMessage;\n }\n\n /**\n */\n get parameters(): ?MessageParameters {\n return this._parameters;\n }\n\n /**\n */\n get isClientConstraint(): boolean {\n return this._isClientConstraint || false;\n }\n\n /**\n */\n get layouthint(): LayoutHintCollection {\n return this._layouthint;\n }\n\n /**\n */\n get isMandatoryConstraint(): boolean {\n return this.id === \"Constraint.Mandatory\";\n }\n\n /**\n * Returns a message object from the error\n */\n getMessage(): MessageObject {\n return {\n id: this.id,\n defaultMessage: this.defaultMessage ?? \"\",\n parameters: this.parameters ?? {},\n };\n }\n}\n\nexport default ErrorModel;\n"],"mappings":";;;;;;;;AAEA;AAEA;AACA;AACA;AACA,MAAMA,UAAU,CAAC;EAOf;AACF;AACA;EACEC,WAAW,CACTC,EAAU,EACVC,cAAuB,EACvBC,UAA8B,EAG9B;IAAA,IAFAC,kBAA2B,uEAAG,KAAK;IAAA,IACnCC,UAAgC,uEAAG,IAAIC,6BAAoB,EAAE;IAAA;IAAA;IAAA;IAAA;IAAA;IAE7D,IAAI,CAACC,GAAG,GAAGN,EAAE;IACb,IAAI,CAACO,WAAW,GAAGL,UAAU;IAC7B,IAAI,CAACM,eAAe,GAAGP,cAAc;IACrC,IAAI,CAACQ,mBAAmB,GAAGN,kBAAkB;IAC7C,IAAI,CAACO,WAAW,GAAGC,KAAK,CAACC,OAAO,CAACR,UAAU,CAAC,GACxC,IAAIC,6BAAoB,CAACD,UAAU,CAAC,GACpCA,UAAU;EAChB;;EAEA;AACF;AACA;EACE,IAAIJ,EAAE,GAAW;IACf,OAAO,IAAI,CAACM,GAAG;EACjB;;EAEA;AACF;EACE,IAAIL,cAAc,GAAY;IAC5B,OAAO,IAAI,CAACO,eAAe;EAC7B;;EAEA;AACF;EACE,IAAIN,UAAU,GAAuB;IACnC,OAAO,IAAI,CAACK,WAAW;EACzB;;EAEA;AACF;EACE,IAAIJ,kBAAkB,GAAY;IAChC,OAAO,IAAI,CAACM,mBAAmB,IAAI,KAAK;EAC1C;;EAEA;AACF;EACE,IAAIL,UAAU,GAAyB;IACrC,OAAO,IAAI,CAACM,WAAW;EACzB;;EAEA;AACF;EACE,IAAIG,qBAAqB,GAAY;IACnC,OAAO,IAAI,CAACb,EAAE,KAAK,sBAAsB;EAC3C;;EAEA;AACF;AACA;EACEc,UAAU,GAAkB;IAC1B,OAAO;MACLd,EAAE,EAAE,IAAI,CAACA,EAAE;MACXC,cAAc,EAAE,IAAI,CAACA,cAAc,IAAI,EAAE;MACzCC,UAAU,EAAE,IAAI,CAACA,UAAU,IAAI,CAAC;IAClC,CAAC;EACH;AACF;AAAC,eAEcJ,UAAU;AAAA"}
@@ -11,7 +11,7 @@ var _startsWith = _interopRequireDefault(require("@babel/runtime-corejs3/core-js
11
11
  var _find = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/find"));
12
12
  var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
13
13
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
14
- var _Constants = require("../../constants/Constants");
14
+ var _constants = require("../../constants");
15
15
  var _Parameter = _interopRequireDefault(require("../parameter/Parameter"));
16
16
  var _exceptions = require("../../exceptions");
17
17
  /**
@@ -26,7 +26,7 @@ class Href {
26
26
  (0, _defineProperty2.default)(this, "_hash", "");
27
27
  (0, _defineProperty2.default)(this, "_parameters", []);
28
28
  (0, _defineProperty2.default)(this, "_resourcetype", "");
29
- (0, _defineProperty2.default)(this, "_method", _Constants.HTTP_METHODS.GET);
29
+ (0, _defineProperty2.default)(this, "_method", _constants.HTTP_METHODS.GET);
30
30
  (0, _defineProperty2.default)(this, "_state", null);
31
31
  this.resourcetype = resourcetype ?? "";
32
32
  if (href instanceof Href) {
@@ -193,7 +193,7 @@ class Href {
193
193
  * Set request method
194
194
  */
195
195
  set method(method) {
196
- this._method = method || _Constants.HTTP_METHODS.GET;
196
+ this._method = method || _constants.HTTP_METHODS.GET;
197
197
  }
198
198
 
199
199
  /**
@@ -306,13 +306,13 @@ class Href {
306
306
  }
307
307
 
308
308
  /**
309
- * Retrieve the path combined with the BASE of the application, e.g. /BeInformed
309
+ * Retrieve the path combined with the base path (context-path) of the application, e.g. /BeInformed
310
310
  */
311
311
  get absolutepath() {
312
312
  if (this.isExternal) {
313
313
  return this.path;
314
314
  }
315
- return _Constants.BASE + this.path;
315
+ return (0, _constants.getBasePath)() + this.path;
316
316
  }
317
317
 
318
318
  /**
@@ -382,7 +382,7 @@ class Href {
382
382
  */
383
383
  get isContent() {
384
384
  var _context10;
385
- return (0, _startsWith.default)(_context10 = this.absolutepath).call(_context10, _Constants.CONTENT_PATH);
385
+ return (0, _startsWith.default)(_context10 = this.absolutepath).call(_context10, `${(0, _constants.getBasePath)()}${_constants.CONTENT_PATH}`);
386
386
  }
387
387
 
388
388
  /**
@@ -1,5 +1,5 @@
1
1
  // @flow
2
- import { BASE, CONTENT_PATH, HTTP_METHODS } from "../../constants/Constants";
2
+ import { getBasePath, HTTP_METHODS, CONTENT_PATH } from "../../constants";
3
3
 
4
4
  import Parameter from "../parameter/Parameter";
5
5
  import { IllegalArgumentException } from "../../exceptions";
@@ -341,14 +341,14 @@ class Href {
341
341
  }
342
342
 
343
343
  /**
344
- * Retrieve the path combined with the BASE of the application, e.g. /BeInformed
344
+ * Retrieve the path combined with the base path (context-path) of the application, e.g. /BeInformed
345
345
  */
346
346
  get absolutepath(): string {
347
347
  if (this.isExternal) {
348
348
  return this.path;
349
349
  }
350
350
 
351
- return BASE + this.path;
351
+ return getBasePath() + this.path;
352
352
  }
353
353
 
354
354
  /**
@@ -433,7 +433,7 @@ class Href {
433
433
  * Indicates if the link is a content link
434
434
  */
435
435
  get isContent(): boolean {
436
- return this.absolutepath.startsWith(CONTENT_PATH);
436
+ return this.absolutepath.startsWith(`${getBasePath()}${CONTENT_PATH}`);
437
437
  }
438
438
 
439
439
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"Href.js","names":["Href","constructor","href","resourcetype","HTTP_METHODS","GET","setFromHref","setFromString","setFromLocationOrObject","path","parameters","hash","state","pathname","_path","search","addParametersFromString","Array","isArray","_parameters","param","addParameter","_name","_value","_prefix","getHashFromString","_hash","_state","getPathFromString","isChangePassword","isCamelRoute","checkAbsoluteUrl","checkAbsolute","RegExp","test","isExternal","decodedHref","decodeURI","hrefNoHash","substr","indexOf","split","forEach","paramFromString","Parameter","fromString","setParameter","name","value","prefix","removeParameter","push","getParameter","hasParameter","undefined","method","_method","getQuerystring","withPrefix","toQuerystring","join","getQuerystringForModularUI","isModUIParameter","querystring","setState","_resourcetype","absolutepath","BASE","length","absolutehref","absolutehrefPrefixedQuerystring","startsWith","thisPath","otherPath","equals","equalsWithParameters","thisParams","toString","every","IllegalArgumentException","isContent","CONTENT_PATH","toLocation"],"sources":["../../../src/models/href/Href.js"],"sourcesContent":["// @flow\nimport { BASE, CONTENT_PATH, HTTP_METHODS } from \"../../constants/Constants\";\n\nimport Parameter from \"../parameter/Parameter\";\nimport { IllegalArgumentException } from \"../../exceptions\";\n\nimport type { LocationShape } from \"react-router\";\n\ntype HrefObject = {\n _path: string,\n _hash: string,\n _parameters: Array<Parameter>,\n _resourcetype: string,\n _method: $Keys<typeof HTTP_METHODS>,\n _state: ?{ [key: string]: any },\n pathname: ?string,\n};\n\nexport type HrefInput = Href | HrefObject | LocationShape | string;\n\n/**\n * Defines a Href with the parameters\n */\nclass Href {\n _path: string = \"\";\n _hash: string = \"\";\n _parameters: Array<Parameter> = [];\n _resourcetype: string = \"\";\n _method: $Keys<typeof HTTP_METHODS> = HTTP_METHODS.GET;\n _state: any = null;\n\n /**\n * Create a Href\n */\n constructor(href?: HrefInput, resourcetype?: string) {\n this.resourcetype = resourcetype ?? \"\";\n\n if (href instanceof Href) {\n this.setFromHref(href);\n } else if (typeof href === \"string\") {\n this.setFromString(href);\n } else if (typeof href === \"object\") {\n this.setFromLocationOrObject(href);\n }\n }\n\n /**\n * Set parameters from Href model input\n */\n setFromHref(href: Href) {\n this.path = href.path;\n this.parameters = href.parameters;\n this.hash = href.hash;\n this.state = href.state;\n }\n\n /**\n */\n setFromLocationOrObject(href: LocationShape | HrefObject) {\n if (typeof href[\"pathname\"] === \"string\") {\n this.path = href.pathname;\n } else if (typeof href._path === \"string\") {\n this.path = href._path;\n }\n\n if (href.search) {\n this.addParametersFromString(href.search);\n } else if (Array.isArray(href._parameters)) {\n // $FlowExpectedError[incompatible-call]\n href._parameters.map((param: Parameter) =>\n this.addParameter(param._name, param._value, param._prefix)\n );\n }\n\n if (href.hash) {\n this.hash = Href.getHashFromString(href.hash);\n } else if (typeof href._hash === \"string\") {\n this.hash = href._hash;\n }\n\n if (href.state) {\n this.state = href.state || null;\n } else if (typeof href._state === \"object\") {\n this.state = href._state;\n }\n }\n\n /**\n * Set parameters from string input\n */\n setFromString(href: string) {\n this.path = Href.getPathFromString(href);\n this.addParametersFromString(href);\n this.hash = Href.getHashFromString(href);\n }\n\n /**\n */\n get isChangePassword(): boolean {\n return this._path.includes(\"/change-password\");\n }\n\n /**\n * check if the path is referencing a camel route\n */\n static isCamelRoute(path: string): boolean {\n return (\n path.startsWith(\"/restServices\") && !path.startsWith(\"/restServices/ui\")\n );\n }\n\n /**\n */\n static checkAbsoluteUrl(href: string): boolean {\n const checkAbsolute = new RegExp(\"^(?:[a-z]+:)?//\", \"i\");\n return checkAbsolute.test(href);\n }\n\n // Check if url is relative (not checking for absolute urls with same domain)\n /**\n */\n get isExternal(): boolean {\n return Href.checkAbsoluteUrl(this.path);\n }\n\n /**\n * Retrieve the relative path part of a href string, e.g. https://www.beinformed.com/BeInformed/tab/view?q=url => /tab/view\n */\n static getPathFromString(href: string): string {\n const decodedHref = decodeURI(href);\n\n const hrefNoHash = decodedHref.includes(\"#\")\n ? decodedHref.substr(0, decodedHref.indexOf(\"#\"))\n : decodedHref;\n\n return hrefNoHash.includes(\"?\") ? hrefNoHash.split(\"?\")[0] : hrefNoHash;\n }\n\n /**\n * Retrieve hash of href string\n */\n static getHashFromString(href: string = \"\"): string {\n return href.includes(\"#\") ? href.substr(href.indexOf(\"#\") + 1) : \"\";\n }\n\n /**\n * Add a parameter for each parameter found in the querystring of an URL string, e.g. https://www.beinformed.com?q=url => q=url\n */\n addParametersFromString(href: string): Href {\n if (href.includes(\"?\")) {\n href\n .split(\"?\")[1]\n .split(\"&\")\n .forEach((param) => {\n const paramFromString = Parameter.fromString(param);\n if (paramFromString) {\n this.setParameter(\n paramFromString.name,\n paramFromString.value,\n paramFromString.prefix\n );\n }\n });\n }\n\n return this;\n }\n\n /**\n * Add a querystring parameter to the parameter collection of this Href, skips parameters that have a value of null\n */\n addParameter(name: string, value: ?string, prefix: ?string): Href {\n if (value !== null) {\n this.removeParameter(name, prefix);\n this._parameters.push(new Parameter(prefix, name, value));\n }\n\n return this;\n }\n\n /**\n * Adds or overwrites a parameter when it exists and value is not null.\n * Removes the parameter when the value is null\n */\n setParameter(name: string, value: ?string, prefix: ?string): Href {\n if (value === null) {\n this.removeParameter(name, prefix);\n } else {\n this.addParameter(name, value, prefix);\n }\n\n return this;\n }\n\n /**\n * Retrieve a parameter by it's name and (optionally) prefix\n */\n getParameter(name: string, prefix: ?string): ?Parameter {\n return this._parameters.find(\n (param) => param.prefix === prefix && param.name === name\n );\n }\n\n /**\n */\n hasParameter(name: string, prefix: ?string): boolean {\n return this.getParameter(name, prefix) !== undefined;\n }\n\n /**\n * Get request method\n */\n get method(): $Keys<typeof HTTP_METHODS> {\n return this._method;\n }\n\n /**\n * Set request method\n */\n set method(method: $Keys<typeof HTTP_METHODS>) {\n this._method = method || HTTP_METHODS.GET;\n }\n\n /**\n * Retrieve all paremters\n */\n get parameters(): Array<Parameter> {\n return this._parameters;\n }\n\n /**\n * Replace parameters of Href\n */\n set parameters(parameters: Array<Parameter>) {\n this._parameters = parameters;\n }\n\n /**\n * Remove a parameter from the parameter collection\n */\n removeParameter(name: string, prefix: ?string): Href {\n this._parameters = this._parameters.filter(\n (param) => param.prefix !== prefix || param.name !== name\n );\n\n return this;\n }\n\n /**\n * Get the parameters as a querystring, e.g. param1=value1&param2=value2, optionally with prefix\n */\n getQuerystring(withPrefix: boolean = false): string {\n return this.parameters\n .filter((param) => param.value != null)\n .map((param) => param.toQuerystring(withPrefix))\n .join(\"&\");\n }\n\n /**\n * Retrieve a querystring that only contains parameter that can be send to the modular ui, parameters are filtered by prefix\n */\n getQuerystringForModularUI(prefix: string = \"\"): string {\n return this.parameters\n .filter(\n (param) =>\n param.isModUIParameter &&\n (!prefix || !param.prefix || param.prefix === prefix) &&\n param.value != null\n )\n .map((param) => param.toQuerystring(false))\n .join(\"&\");\n }\n\n /**\n * Retrieve all parameters from the parameter collection in a querystring style name1=value1&name2=value2, without the prefix\n */\n get querystring(): string {\n return this.getQuerystring(false);\n }\n\n /**\n * Set the path of the Href, the part before the querystring question mark\n */\n set path(path: string) {\n this._path = path;\n }\n\n /**\n * Retrieve the path\n */\n get path(): string {\n return this._path || \"\";\n }\n\n /**\n * Set hash\n */\n set hash(hash: string) {\n this._hash = hash;\n }\n\n /**\n * Retrieve hash\n */\n get hash(): string {\n return this._hash;\n }\n\n /**\n */\n set state(state: any) {\n this._state = state;\n }\n\n /**\n */\n get state(): any {\n return this._state;\n }\n\n /**\n */\n setState(state: any): Href {\n this.state = state;\n\n return this;\n }\n\n /**\n * Set resourctype\n */\n set resourcetype(resourcetype: string) {\n this._resourcetype = resourcetype;\n }\n\n /**\n * Retrieve resourceType\n */\n get resourcetype(): string {\n return this._resourcetype;\n }\n\n /**\n * Retrieve the path combined with the BASE of the application, e.g. /BeInformed\n */\n get absolutepath(): string {\n if (this.isExternal) {\n return this.path;\n }\n\n return BASE + this.path;\n }\n\n /**\n * Retrieves the combination of the path and the querystring\n */\n get href(): string {\n return this.querystring.length > 0\n ? [this.path, this.querystring].join(\"?\")\n : this.path;\n }\n\n /**\n * Getting the URL including the base path, querystring is prefixed\n */\n get absolutehref(): string {\n const querystring = this.getQuerystring(false);\n\n return querystring.length > 0\n ? [this.absolutepath, querystring].join(\"?\")\n : this.absolutepath;\n }\n\n /**\n * Getting the URL including the base path, the querystring is prefixed\n */\n get absolutehrefPrefixedQuerystring(): string {\n const querystring = this.getQuerystring(true);\n\n return querystring.length > 0\n ? [this.absolutepath, querystring].join(\"?\")\n : this.absolutepath;\n }\n\n /**\n * Checks if the URL starts within the given href\n */\n startsWith(href: Href | string): boolean {\n const thisPath = `${this.path}/`;\n const otherPath = href instanceof Href ? `${href.path}/` : href;\n\n return thisPath.startsWith(otherPath);\n }\n\n /**\n * Checks if the given Href equals this Href\n */\n equals(href: Href | string): boolean {\n if (href instanceof Href) {\n return this.path === href.path;\n }\n\n return this.path === href;\n }\n\n /**\n */\n equalsWithParameters(href: Href): boolean {\n if (!this.equals(href)) {\n return false;\n }\n\n if (href instanceof Href) {\n if (this.parameters.length !== href.parameters.length) {\n return false;\n }\n\n if (this.parameters.length === 0 && href.parameters.length === 0) {\n return true;\n }\n\n const thisParams = this.parameters.map((param) => param.toString());\n\n return href.parameters.every((param) =>\n thisParams.includes(param.toString())\n );\n }\n\n throw new IllegalArgumentException(`${href} is not an instance of Href`);\n }\n\n /**\n * Indicates if the link is a content link\n */\n get isContent(): boolean {\n return this.absolutepath.startsWith(CONTENT_PATH);\n }\n\n /**\n * Returns a complete url from the Href\n */\n toString(): string {\n return this.href;\n }\n\n /**\n */\n toLocation(): LocationShape {\n return {\n pathname: this.path,\n search: this.querystring.length > 0 ? `?${this.querystring}` : \"\",\n hash: this.hash.length > 0 ? `#${this.hash}` : \"\",\n state: this.state,\n };\n }\n}\n\nexport default Href;\n"],"mappings":"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"}
1
+ {"version":3,"file":"Href.js","names":["Href","constructor","href","resourcetype","HTTP_METHODS","GET","setFromHref","setFromString","setFromLocationOrObject","path","parameters","hash","state","pathname","_path","search","addParametersFromString","Array","isArray","_parameters","param","addParameter","_name","_value","_prefix","getHashFromString","_hash","_state","getPathFromString","isChangePassword","isCamelRoute","checkAbsoluteUrl","checkAbsolute","RegExp","test","isExternal","decodedHref","decodeURI","hrefNoHash","substr","indexOf","split","forEach","paramFromString","Parameter","fromString","setParameter","name","value","prefix","removeParameter","push","getParameter","hasParameter","undefined","method","_method","getQuerystring","withPrefix","toQuerystring","join","getQuerystringForModularUI","isModUIParameter","querystring","setState","_resourcetype","absolutepath","getBasePath","length","absolutehref","absolutehrefPrefixedQuerystring","startsWith","thisPath","otherPath","equals","equalsWithParameters","thisParams","toString","every","IllegalArgumentException","isContent","CONTENT_PATH","toLocation"],"sources":["../../../src/models/href/Href.js"],"sourcesContent":["// @flow\nimport { getBasePath, HTTP_METHODS, CONTENT_PATH } from \"../../constants\";\n\nimport Parameter from \"../parameter/Parameter\";\nimport { IllegalArgumentException } from \"../../exceptions\";\n\nimport type { LocationShape } from \"react-router\";\n\ntype HrefObject = {\n _path: string,\n _hash: string,\n _parameters: Array<Parameter>,\n _resourcetype: string,\n _method: $Keys<typeof HTTP_METHODS>,\n _state: ?{ [key: string]: any },\n pathname: ?string,\n};\n\nexport type HrefInput = Href | HrefObject | LocationShape | string;\n\n/**\n * Defines a Href with the parameters\n */\nclass Href {\n _path: string = \"\";\n _hash: string = \"\";\n _parameters: Array<Parameter> = [];\n _resourcetype: string = \"\";\n _method: $Keys<typeof HTTP_METHODS> = HTTP_METHODS.GET;\n _state: any = null;\n\n /**\n * Create a Href\n */\n constructor(href?: HrefInput, resourcetype?: string) {\n this.resourcetype = resourcetype ?? \"\";\n\n if (href instanceof Href) {\n this.setFromHref(href);\n } else if (typeof href === \"string\") {\n this.setFromString(href);\n } else if (typeof href === \"object\") {\n this.setFromLocationOrObject(href);\n }\n }\n\n /**\n * Set parameters from Href model input\n */\n setFromHref(href: Href) {\n this.path = href.path;\n this.parameters = href.parameters;\n this.hash = href.hash;\n this.state = href.state;\n }\n\n /**\n */\n setFromLocationOrObject(href: LocationShape | HrefObject) {\n if (typeof href[\"pathname\"] === \"string\") {\n this.path = href.pathname;\n } else if (typeof href._path === \"string\") {\n this.path = href._path;\n }\n\n if (href.search) {\n this.addParametersFromString(href.search);\n } else if (Array.isArray(href._parameters)) {\n // $FlowExpectedError[incompatible-call]\n href._parameters.map((param: Parameter) =>\n this.addParameter(param._name, param._value, param._prefix)\n );\n }\n\n if (href.hash) {\n this.hash = Href.getHashFromString(href.hash);\n } else if (typeof href._hash === \"string\") {\n this.hash = href._hash;\n }\n\n if (href.state) {\n this.state = href.state || null;\n } else if (typeof href._state === \"object\") {\n this.state = href._state;\n }\n }\n\n /**\n * Set parameters from string input\n */\n setFromString(href: string) {\n this.path = Href.getPathFromString(href);\n this.addParametersFromString(href);\n this.hash = Href.getHashFromString(href);\n }\n\n /**\n */\n get isChangePassword(): boolean {\n return this._path.includes(\"/change-password\");\n }\n\n /**\n * check if the path is referencing a camel route\n */\n static isCamelRoute(path: string): boolean {\n return (\n path.startsWith(\"/restServices\") && !path.startsWith(\"/restServices/ui\")\n );\n }\n\n /**\n */\n static checkAbsoluteUrl(href: string): boolean {\n const checkAbsolute = new RegExp(\"^(?:[a-z]+:)?//\", \"i\");\n return checkAbsolute.test(href);\n }\n\n // Check if url is relative (not checking for absolute urls with same domain)\n /**\n */\n get isExternal(): boolean {\n return Href.checkAbsoluteUrl(this.path);\n }\n\n /**\n * Retrieve the relative path part of a href string, e.g. https://www.beinformed.com/BeInformed/tab/view?q=url => /tab/view\n */\n static getPathFromString(href: string): string {\n const decodedHref = decodeURI(href);\n\n const hrefNoHash = decodedHref.includes(\"#\")\n ? decodedHref.substr(0, decodedHref.indexOf(\"#\"))\n : decodedHref;\n\n return hrefNoHash.includes(\"?\") ? hrefNoHash.split(\"?\")[0] : hrefNoHash;\n }\n\n /**\n * Retrieve hash of href string\n */\n static getHashFromString(href: string = \"\"): string {\n return href.includes(\"#\") ? href.substr(href.indexOf(\"#\") + 1) : \"\";\n }\n\n /**\n * Add a parameter for each parameter found in the querystring of an URL string, e.g. https://www.beinformed.com?q=url => q=url\n */\n addParametersFromString(href: string): Href {\n if (href.includes(\"?\")) {\n href\n .split(\"?\")[1]\n .split(\"&\")\n .forEach((param) => {\n const paramFromString = Parameter.fromString(param);\n if (paramFromString) {\n this.setParameter(\n paramFromString.name,\n paramFromString.value,\n paramFromString.prefix\n );\n }\n });\n }\n\n return this;\n }\n\n /**\n * Add a querystring parameter to the parameter collection of this Href, skips parameters that have a value of null\n */\n addParameter(name: string, value: ?string, prefix: ?string): Href {\n if (value !== null) {\n this.removeParameter(name, prefix);\n this._parameters.push(new Parameter(prefix, name, value));\n }\n\n return this;\n }\n\n /**\n * Adds or overwrites a parameter when it exists and value is not null.\n * Removes the parameter when the value is null\n */\n setParameter(name: string, value: ?string, prefix: ?string): Href {\n if (value === null) {\n this.removeParameter(name, prefix);\n } else {\n this.addParameter(name, value, prefix);\n }\n\n return this;\n }\n\n /**\n * Retrieve a parameter by it's name and (optionally) prefix\n */\n getParameter(name: string, prefix: ?string): ?Parameter {\n return this._parameters.find(\n (param) => param.prefix === prefix && param.name === name\n );\n }\n\n /**\n */\n hasParameter(name: string, prefix: ?string): boolean {\n return this.getParameter(name, prefix) !== undefined;\n }\n\n /**\n * Get request method\n */\n get method(): $Keys<typeof HTTP_METHODS> {\n return this._method;\n }\n\n /**\n * Set request method\n */\n set method(method: $Keys<typeof HTTP_METHODS>) {\n this._method = method || HTTP_METHODS.GET;\n }\n\n /**\n * Retrieve all paremters\n */\n get parameters(): Array<Parameter> {\n return this._parameters;\n }\n\n /**\n * Replace parameters of Href\n */\n set parameters(parameters: Array<Parameter>) {\n this._parameters = parameters;\n }\n\n /**\n * Remove a parameter from the parameter collection\n */\n removeParameter(name: string, prefix: ?string): Href {\n this._parameters = this._parameters.filter(\n (param) => param.prefix !== prefix || param.name !== name\n );\n\n return this;\n }\n\n /**\n * Get the parameters as a querystring, e.g. param1=value1&param2=value2, optionally with prefix\n */\n getQuerystring(withPrefix: boolean = false): string {\n return this.parameters\n .filter((param) => param.value != null)\n .map((param) => param.toQuerystring(withPrefix))\n .join(\"&\");\n }\n\n /**\n * Retrieve a querystring that only contains parameter that can be send to the modular ui, parameters are filtered by prefix\n */\n getQuerystringForModularUI(prefix: string = \"\"): string {\n return this.parameters\n .filter(\n (param) =>\n param.isModUIParameter &&\n (!prefix || !param.prefix || param.prefix === prefix) &&\n param.value != null\n )\n .map((param) => param.toQuerystring(false))\n .join(\"&\");\n }\n\n /**\n * Retrieve all parameters from the parameter collection in a querystring style name1=value1&name2=value2, without the prefix\n */\n get querystring(): string {\n return this.getQuerystring(false);\n }\n\n /**\n * Set the path of the Href, the part before the querystring question mark\n */\n set path(path: string) {\n this._path = path;\n }\n\n /**\n * Retrieve the path\n */\n get path(): string {\n return this._path || \"\";\n }\n\n /**\n * Set hash\n */\n set hash(hash: string) {\n this._hash = hash;\n }\n\n /**\n * Retrieve hash\n */\n get hash(): string {\n return this._hash;\n }\n\n /**\n */\n set state(state: any) {\n this._state = state;\n }\n\n /**\n */\n get state(): any {\n return this._state;\n }\n\n /**\n */\n setState(state: any): Href {\n this.state = state;\n\n return this;\n }\n\n /**\n * Set resourctype\n */\n set resourcetype(resourcetype: string) {\n this._resourcetype = resourcetype;\n }\n\n /**\n * Retrieve resourceType\n */\n get resourcetype(): string {\n return this._resourcetype;\n }\n\n /**\n * Retrieve the path combined with the base path (context-path) of the application, e.g. /BeInformed\n */\n get absolutepath(): string {\n if (this.isExternal) {\n return this.path;\n }\n\n return getBasePath() + this.path;\n }\n\n /**\n * Retrieves the combination of the path and the querystring\n */\n get href(): string {\n return this.querystring.length > 0\n ? [this.path, this.querystring].join(\"?\")\n : this.path;\n }\n\n /**\n * Getting the URL including the base path, querystring is prefixed\n */\n get absolutehref(): string {\n const querystring = this.getQuerystring(false);\n\n return querystring.length > 0\n ? [this.absolutepath, querystring].join(\"?\")\n : this.absolutepath;\n }\n\n /**\n * Getting the URL including the base path, the querystring is prefixed\n */\n get absolutehrefPrefixedQuerystring(): string {\n const querystring = this.getQuerystring(true);\n\n return querystring.length > 0\n ? [this.absolutepath, querystring].join(\"?\")\n : this.absolutepath;\n }\n\n /**\n * Checks if the URL starts within the given href\n */\n startsWith(href: Href | string): boolean {\n const thisPath = `${this.path}/`;\n const otherPath = href instanceof Href ? `${href.path}/` : href;\n\n return thisPath.startsWith(otherPath);\n }\n\n /**\n * Checks if the given Href equals this Href\n */\n equals(href: Href | string): boolean {\n if (href instanceof Href) {\n return this.path === href.path;\n }\n\n return this.path === href;\n }\n\n /**\n */\n equalsWithParameters(href: Href): boolean {\n if (!this.equals(href)) {\n return false;\n }\n\n if (href instanceof Href) {\n if (this.parameters.length !== href.parameters.length) {\n return false;\n }\n\n if (this.parameters.length === 0 && href.parameters.length === 0) {\n return true;\n }\n\n const thisParams = this.parameters.map((param) => param.toString());\n\n return href.parameters.every((param) =>\n thisParams.includes(param.toString())\n );\n }\n\n throw new IllegalArgumentException(`${href} is not an instance of Href`);\n }\n\n /**\n * Indicates if the link is a content link\n */\n get isContent(): boolean {\n return this.absolutepath.startsWith(`${getBasePath()}${CONTENT_PATH}`);\n }\n\n /**\n * Returns a complete url from the Href\n */\n toString(): string {\n return this.href;\n }\n\n /**\n */\n toLocation(): LocationShape {\n return {\n pathname: this.path,\n search: this.querystring.length > 0 ? `?${this.querystring}` : \"\",\n hash: this.hash.length > 0 ? `#${this.hash}` : \"\",\n state: this.state,\n };\n }\n}\n\nexport default Href;\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { BASE, APPLICATION_PATH } from "../../../constants";
1
+ import { getBasePath } from "../../../constants";
2
2
  import Href from "../Href";
3
3
 
4
4
  describe("href spec", () => {
@@ -140,8 +140,7 @@ describe("href spec", () => {
140
140
  });
141
141
 
142
142
  it("a tab can have the same uri as the contextPath", () => {
143
- expect(BASE).toBe("/BeInformed");
144
- expect(APPLICATION_PATH).toBe("/BeInformed/");
143
+ expect(getBasePath()).toBe("/BeInformed");
145
144
 
146
145
  const tabHref = new Href("/BeInformed");
147
146