@beinformed/ui 1.17.4 → 1.18.1

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 (52) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/esm/constants/Constants.js +4 -0
  3. package/esm/constants/Constants.js.map +1 -1
  4. package/esm/constants/Settings.js +25 -1
  5. package/esm/constants/Settings.js.map +1 -1
  6. package/esm/modularui/Authenticate.js +9 -9
  7. package/esm/modularui/Authenticate.js.map +1 -1
  8. package/esm/react-client/client.js +3 -2
  9. package/esm/react-client/client.js.map +1 -1
  10. package/esm/react-server/serverUtil.js +2 -1
  11. package/esm/react-server/serverUtil.js.map +1 -1
  12. package/esm/redux/actions/Preferences.js +32 -2
  13. package/esm/redux/actions/Preferences.js.map +1 -1
  14. package/esm/redux/reducers/PreferencesReducer.js +5 -1
  15. package/esm/redux/reducers/PreferencesReducer.js.map +1 -1
  16. package/lib/constants/Constants.js +9 -1
  17. package/lib/constants/Constants.js.flow +5 -0
  18. package/lib/constants/Constants.js.map +1 -1
  19. package/lib/constants/Settings.js +37 -1
  20. package/lib/constants/Settings.js.flow +25 -1
  21. package/lib/constants/Settings.js.map +1 -1
  22. package/lib/modularui/Authenticate.js +10 -10
  23. package/lib/modularui/Authenticate.js.flow +11 -7
  24. package/lib/modularui/Authenticate.js.map +1 -1
  25. package/lib/react-client/client.js +2 -1
  26. package/lib/react-client/client.js.flow +5 -1
  27. package/lib/react-client/client.js.map +1 -1
  28. package/lib/react-server/__tests__/serverUtil.spec.js.flow +18 -0
  29. package/lib/react-server/serverUtil.js +1 -0
  30. package/lib/react-server/serverUtil.js.flow +2 -0
  31. package/lib/react-server/serverUtil.js.map +1 -1
  32. package/lib/redux/actions/Preferences.js +41 -1
  33. package/lib/redux/actions/Preferences.js.flow +49 -2
  34. package/lib/redux/actions/Preferences.js.map +1 -1
  35. package/lib/redux/actions/__tests__/Preferences.spec.js.flow +11 -0
  36. package/lib/redux/reducers/PreferencesReducer.js +5 -1
  37. package/lib/redux/reducers/PreferencesReducer.js.flow +8 -1
  38. package/lib/redux/reducers/PreferencesReducer.js.map +1 -1
  39. package/lib/redux/reducers/__tests__/PreferencesReducer.spec.js.flow +12 -0
  40. package/lib/redux/types.js.flow +5 -0
  41. package/package.json +12 -11
  42. package/src/constants/Constants.js +5 -0
  43. package/src/constants/Settings.js +25 -1
  44. package/src/modularui/Authenticate.js +11 -7
  45. package/src/react-client/client.js +5 -1
  46. package/src/react-server/__tests__/serverUtil.spec.js +18 -0
  47. package/src/react-server/serverUtil.js +2 -0
  48. package/src/redux/actions/Preferences.js +49 -2
  49. package/src/redux/actions/__tests__/Preferences.spec.js +11 -0
  50. package/src/redux/reducers/PreferencesReducer.js +8 -1
  51. package/src/redux/reducers/__tests__/PreferencesReducer.spec.js +12 -0
  52. package/src/redux/types.js +5 -0
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequ
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.setSettings = exports.setSetting = exports.hasAllContentInData = exports.getSetting = exports.allSettings = void 0;
8
+ exports.setSettings = exports.setSetting = exports.logoutPath = exports.loginUsernameField = exports.loginPath = exports.loginPasswordField = exports.hasAllContentInData = exports.getSetting = exports.allSettings = void 0;
9
9
 
10
10
  var _assign = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/assign"));
11
11
 
@@ -111,6 +111,42 @@ exports.allSettings = allSettings;
111
111
  var hasAllContentInData = function hasAllContentInData() {
112
112
  return getSetting(_Constants.ALL_CONTENT_IN_DATA_SETTING, true);
113
113
  };
114
+ /**
115
+ */
116
+
114
117
 
115
118
  exports.hasAllContentInData = hasAllContentInData;
119
+
120
+ var loginPath = function loginPath() {
121
+ return getSetting(_Constants.LOGIN_PATH_SETTING, "".concat(_Constants.BASE, "/j_security_check"));
122
+ };
123
+ /**
124
+ */
125
+
126
+
127
+ exports.loginPath = loginPath;
128
+
129
+ var loginUsernameField = function loginUsernameField() {
130
+ return getSetting(_Constants.LOGIN_USERNAME_SETTING, "j_username");
131
+ };
132
+ /**
133
+ */
134
+
135
+
136
+ exports.loginUsernameField = loginUsernameField;
137
+
138
+ var loginPasswordField = function loginPasswordField() {
139
+ return getSetting(_Constants.LOGIN_PASSWORD_SETTING, "j_password");
140
+ };
141
+ /**
142
+ */
143
+
144
+
145
+ exports.loginPasswordField = loginPasswordField;
146
+
147
+ var logoutPath = function logoutPath() {
148
+ return getSetting(_Constants.LOGOUT_PATH_SETTING, "".concat(_Constants.BASE, "/Logoff"));
149
+ };
150
+
151
+ exports.logoutPath = logoutPath;
116
152
  //# sourceMappingURL=Settings.js.map
@@ -1,6 +1,13 @@
1
1
  // @flow
2
2
  import { isPlainObject, has } from "../utils/helpers/objects";
3
- import { ALL_CONTENT_IN_DATA_SETTING } from "./Constants";
3
+ import {
4
+ BASE,
5
+ ALL_CONTENT_IN_DATA_SETTING,
6
+ LOGIN_PATH_SETTING,
7
+ LOGIN_USERNAME_SETTING,
8
+ LOGIN_PASSWORD_SETTING,
9
+ LOGOUT_PATH_SETTING,
10
+ } from "./Constants";
4
11
 
5
12
  type Setting = boolean | string | number | Array<string>;
6
13
 
@@ -115,3 +122,20 @@ export const allSettings = (): { [name: string]: Setting } => settings;
115
122
  */
116
123
  export const hasAllContentInData = (): boolean =>
117
124
  getSetting(ALL_CONTENT_IN_DATA_SETTING, true);
125
+
126
+ /**
127
+ */
128
+ export const loginPath = (): string =>
129
+ getSetting(LOGIN_PATH_SETTING, `${BASE}/j_security_check`);
130
+ /**
131
+ */
132
+ export const loginUsernameField = (): string =>
133
+ getSetting(LOGIN_USERNAME_SETTING, "j_username");
134
+ /**
135
+ */
136
+ export const loginPasswordField = (): string =>
137
+ getSetting(LOGIN_PASSWORD_SETTING, "j_password");
138
+ /**
139
+ */
140
+ export const logoutPath = (): string =>
141
+ getSetting(LOGOUT_PATH_SETTING, `${BASE}/Logoff`);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/constants/Settings.js"],"names":["defaultSettings","DEBUG_I18N_MESSAGE_NOT_FOUND","HIDE_NOTIFICATION_TIMEOUT","ALWAYS_COMMIT_FORM","RENDER_QUESTION_LABELS","RENDER_MANDATORY_ATTRIBUTE_INDICATION","RENDER_OPTIONAL_ATTRIBUTE_INDICATION","AVAILABLE_LIST_VIEWS","USE_CLIENTSIDE_VALIDATION","USE_INSTANT_SERVER_VALIDATION","ENABLED_LOCALES","RENDER_FORMS_IN_MODAL","SHOW_SUBMIT_WAIT_TIMEOUT","SWIM_LANE_DIAGRAM_CONFIGURATION","BUSINESS_SCENARIO_CONCEPT_TYPE","BUSINESS_SCENARIO_STEP_CONCEPT_TYPE","BUSINESS_SCENARIO_PERSONA_CONCEPT_TYPE","DATE_INPUT_FORMAT","DATE_READONLY_FORMAT","CALENDAR_WEEK_STARTS_ON","CALENDAR_FIRST_WEEK_CONTAINS_DATE","UI_PARAMETERS","ALLOW_HIDE_WHEN_EMPTY_ON_TABS","PAGE_RELOAD_ON_UNAUTHORIZED_ERROR","XHR_TIMEOUT_MS","settings","setSettings","config","getSetting","key","defaultValue","undefined","Error","setSetting","value","allSettings","hasAllContentInData","ALL_CONTENT_IN_DATA_SETTING"],"mappings":";;;;;;;;;;;AACA;;AACA;;AAIA,IAAMA,eAAe,GAAG;AACtB;AACAC,EAAAA,4BAA4B,EAAE,IAFR;AAItB;AACAC,EAAAA,yBAAyB,EAAE,IALL;AAOtB;AACAC,EAAAA,kBAAkB,EAAE,KARE;AAUtB;AACAC,EAAAA,sBAAsB,EAAE,IAXF;AAatB;AACAC,EAAAA,qCAAqC,EAAE,IAdjB;AAgBtB;AACAC,EAAAA,oCAAoC,EAAE,KAjBhB;AAmBtB;AACAC,EAAAA,oBAAoB,EAAE,CAAC,UAAD,EAAa,WAAb,CApBA;AAsBtB;AACAC,EAAAA,yBAAyB,EAAE,IAvBL;AAyBtB;AACAC,EAAAA,6BAA6B,EAAE,IA1BT;AA4BtB;AACAC,EAAAA,eAAe,EAAE,CAAC,IAAD,EAAO,IAAP,CA7BK;AA+BtB;AACAC,EAAAA,qBAAqB,EAAE,IAhCD;AAkCtB;AACAC,EAAAA,wBAAwB,EAAE,GAnCJ;AAqCtB;AACAC,EAAAA,+BAA+B,EAAE,kCAtCX;AAwCtB;AACAC,EAAAA,8BAA8B,EAAE,CAC9B,yDAD8B,CAzCV;AA4CtBC,EAAAA,mCAAmC,EAAE,CACnC,qDADmC,CA5Cf;AA+CtBC,EAAAA,sCAAsC,EAAE,CACtC,gDADsC,CA/ClB;AAmDtB;AACAC,EAAAA,iBAAiB,EAAE,EApDG;AAsDtB;AACAC,EAAAA,oBAAoB,EAAE,EAvDA;AAyDtB;AACAC,EAAAA,uBAAuB,EAAE,CA1DH;AA4DtB;AACAC,EAAAA,iCAAiC,EAAE,CA7Db;AA+DtB;AACAC,EAAAA,aAAa,EAAE,EAhEO;AAkEtB;AACAC,EAAAA,6BAA6B,EAAE,IAnET;AAqEtB;AACAC,EAAAA,iCAAiC,EAAE,KAtEb;AAwEtBC,EAAAA,cAAc,EAAE;AAxEM,CAAxB;AA2EA,IAAIC,QAAQ,GAAGzB,eAAf;AAEA;AACA;;AACO,IAAM0B,WAAW,GAAG,SAAdA,WAAc,CAACC,MAAD,EAAoB;AAC7C,MAAI,4BAAcA,MAAd,CAAJ,EAA2B;AACzBF,IAAAA,QAAQ,GAAG,qBAAczB,eAAd,EAA+B2B,MAA/B,CAAX;AACD;AACF,CAJM;AAMP;AACA;;;;;AACO,IAAMC,UAAU,GAAG,SAAbA,UAAa,CAACC,GAAD,EAAcC,YAAd,EAA0C;AAAA;;AAClE,MAAI,CAAC,kBAAIL,QAAJ,EAAcI,GAAd,CAAD,IAAuBC,YAAY,KAAKC,SAA5C,EAAuD;AACrD,UAAM,IAAIC,KAAJ,6BACiBH,GADjB,0CAAN;AAGD;;AAED,0BAAOJ,QAAQ,CAACI,GAAD,CAAf,yDAAwBC,YAAxB;AACD,CARM;AAUP;AACA;;;;;AACO,IAAMG,UAAU,GAAG,SAAbA,UAAa,CAACJ,GAAD,EAAcK,KAAd,EAA6B;AACrDT,EAAAA,QAAQ,CAACI,GAAD,CAAR,GAAgBK,KAAhB;AACD,CAFM;AAIP;AACA;;;;;AACO,IAAMC,WAAW,GAAG,SAAdA,WAAc;AAAA,SAAmCV,QAAnC;AAAA,CAApB;AAEP;AACA;;;;;AACO,IAAMW,mBAAmB,GAAG,SAAtBA,mBAAsB;AAAA,SACjCR,UAAU,CAACS,sCAAD,EAA8B,IAA9B,CADuB;AAAA,CAA5B","sourcesContent":["// @flow\nimport { isPlainObject, has } from \"../utils/helpers/objects\";\nimport { ALL_CONTENT_IN_DATA_SETTING } from \"./Constants\";\n\ntype Setting = boolean | string | number | Array<string>;\n\nconst defaultSettings = {\n // Debug missing i18n messages in layout\n DEBUG_I18N_MESSAGE_NOT_FOUND: true,\n\n // Time to show the notification bar\n HIDE_NOTIFICATION_TIMEOUT: 5000,\n\n // Always commit form, does not show result pages for instruments\n ALWAYS_COMMIT_FORM: false,\n\n // Render instrument and event question labels on forms (might result in duplicate labels)\n RENDER_QUESTION_LABELS: true,\n\n // Render mandatory indications on attributes\n RENDER_MANDATORY_ATTRIBUTE_INDICATION: true,\n\n // Render optional indications on attributes\n RENDER_OPTIONAL_ATTRIBUTE_INDICATION: false,\n\n // Renders a toggle with supported list views, options are ListView and TableView\n AVAILABLE_LIST_VIEWS: [\"ListView\", \"TableView\"],\n\n // Toggle client side validation\n USE_CLIENTSIDE_VALIDATION: true,\n\n // Indicates if server validation should be used when a form field is changed\n USE_INSTANT_SERVER_VALIDATION: true,\n\n // Indicates which locales are enabled\n ENABLED_LOCALES: [\"en\", \"nl\"],\n\n // Render forms in a modal\n RENDER_FORMS_IN_MODAL: true,\n\n // Wait timeout before rendering submit wait icon\n SHOW_SUBMIT_WAIT_TIMEOUT: 300,\n\n // Swim lane diagram configuration file\n SWIM_LANE_DIAGRAM_CONFIGURATION: \"/Library/Diagrams/Overviews.json\",\n\n // Business scenario concept types\n BUSINESS_SCENARIO_CONCEPT_TYPE: [\n \"/Library/KMTs/Business scenarios.bixml/BusinessScenario\",\n ],\n BUSINESS_SCENARIO_STEP_CONCEPT_TYPE: [\n \"/Library/KMTs/Business scenarios.bixml/ScenarioStep\",\n ],\n BUSINESS_SCENARIO_PERSONA_CONCEPT_TYPE: [\n \"/Library/KMTs/Business scenarios.bixml/Persona\",\n ],\n\n // Input format for dates. Without this setting having a value, the contributions format is used\n DATE_INPUT_FORMAT: \"\",\n\n // Readonly format for dates. Without this setting having a value, the contributions format is used\n DATE_READONLY_FORMAT: \"\",\n\n // indicates on what day the week starts (0 = Sunday)\n CALENDAR_WEEK_STARTS_ON: 1,\n\n // indicates which date indicates the first week of the year\n CALENDAR_FIRST_WEEK_CONTAINS_DATE: 1,\n\n // parameters that are added for the ui state, but should not be send to the modular ui\n UI_PARAMETERS: [],\n\n // disable hide-when-empty hint for layouts running on Be Informed versions older than 21.1\n ALLOW_HIDE_WHEN_EMPTY_ON_TABS: true,\n\n // reload the complete page on signout, usefull when third party authentication is in place\n PAGE_RELOAD_ON_UNAUTHORIZED_ERROR: false,\n\n XHR_TIMEOUT_MS: 300000,\n};\n\nlet settings = defaultSettings;\n\n/**\n */\nexport const setSettings = (config: Object) => {\n if (isPlainObject(config)) {\n settings = Object.assign(defaultSettings, config);\n }\n};\n\n/**\n */\nexport const getSetting = (key: string, defaultValue?: any): any => {\n if (!has(settings, key) && defaultValue === undefined) {\n throw new Error(\n `Setting with name ${key} not found and no defaultValue given`\n );\n }\n\n return settings[key] ?? defaultValue;\n};\n\n/**\n */\nexport const setSetting = (key: string, value: any) => {\n settings[key] = value;\n};\n\n/**\n */\nexport const allSettings = (): { [name: string]: Setting } => settings;\n\n/**\n */\nexport const hasAllContentInData = (): boolean =>\n getSetting(ALL_CONTENT_IN_DATA_SETTING, true);\n"],"file":"Settings.js"}
1
+ {"version":3,"sources":["../../src/constants/Settings.js"],"names":["defaultSettings","DEBUG_I18N_MESSAGE_NOT_FOUND","HIDE_NOTIFICATION_TIMEOUT","ALWAYS_COMMIT_FORM","RENDER_QUESTION_LABELS","RENDER_MANDATORY_ATTRIBUTE_INDICATION","RENDER_OPTIONAL_ATTRIBUTE_INDICATION","AVAILABLE_LIST_VIEWS","USE_CLIENTSIDE_VALIDATION","USE_INSTANT_SERVER_VALIDATION","ENABLED_LOCALES","RENDER_FORMS_IN_MODAL","SHOW_SUBMIT_WAIT_TIMEOUT","SWIM_LANE_DIAGRAM_CONFIGURATION","BUSINESS_SCENARIO_CONCEPT_TYPE","BUSINESS_SCENARIO_STEP_CONCEPT_TYPE","BUSINESS_SCENARIO_PERSONA_CONCEPT_TYPE","DATE_INPUT_FORMAT","DATE_READONLY_FORMAT","CALENDAR_WEEK_STARTS_ON","CALENDAR_FIRST_WEEK_CONTAINS_DATE","UI_PARAMETERS","ALLOW_HIDE_WHEN_EMPTY_ON_TABS","PAGE_RELOAD_ON_UNAUTHORIZED_ERROR","XHR_TIMEOUT_MS","settings","setSettings","config","getSetting","key","defaultValue","undefined","Error","setSetting","value","allSettings","hasAllContentInData","ALL_CONTENT_IN_DATA_SETTING","loginPath","LOGIN_PATH_SETTING","BASE","loginUsernameField","LOGIN_USERNAME_SETTING","loginPasswordField","LOGIN_PASSWORD_SETTING","logoutPath","LOGOUT_PATH_SETTING"],"mappings":"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","sourcesContent":["// @flow\nimport { isPlainObject, has } from \"../utils/helpers/objects\";\nimport {\n BASE,\n ALL_CONTENT_IN_DATA_SETTING,\n LOGIN_PATH_SETTING,\n LOGIN_USERNAME_SETTING,\n LOGIN_PASSWORD_SETTING,\n LOGOUT_PATH_SETTING,\n} from \"./Constants\";\n\ntype Setting = boolean | string | number | Array<string>;\n\nconst defaultSettings = {\n // Debug missing i18n messages in layout\n DEBUG_I18N_MESSAGE_NOT_FOUND: true,\n\n // Time to show the notification bar\n HIDE_NOTIFICATION_TIMEOUT: 5000,\n\n // Always commit form, does not show result pages for instruments\n ALWAYS_COMMIT_FORM: false,\n\n // Render instrument and event question labels on forms (might result in duplicate labels)\n RENDER_QUESTION_LABELS: true,\n\n // Render mandatory indications on attributes\n RENDER_MANDATORY_ATTRIBUTE_INDICATION: true,\n\n // Render optional indications on attributes\n RENDER_OPTIONAL_ATTRIBUTE_INDICATION: false,\n\n // Renders a toggle with supported list views, options are ListView and TableView\n AVAILABLE_LIST_VIEWS: [\"ListView\", \"TableView\"],\n\n // Toggle client side validation\n USE_CLIENTSIDE_VALIDATION: true,\n\n // Indicates if server validation should be used when a form field is changed\n USE_INSTANT_SERVER_VALIDATION: true,\n\n // Indicates which locales are enabled\n ENABLED_LOCALES: [\"en\", \"nl\"],\n\n // Render forms in a modal\n RENDER_FORMS_IN_MODAL: true,\n\n // Wait timeout before rendering submit wait icon\n SHOW_SUBMIT_WAIT_TIMEOUT: 300,\n\n // Swim lane diagram configuration file\n SWIM_LANE_DIAGRAM_CONFIGURATION: \"/Library/Diagrams/Overviews.json\",\n\n // Business scenario concept types\n BUSINESS_SCENARIO_CONCEPT_TYPE: [\n \"/Library/KMTs/Business scenarios.bixml/BusinessScenario\",\n ],\n BUSINESS_SCENARIO_STEP_CONCEPT_TYPE: [\n \"/Library/KMTs/Business scenarios.bixml/ScenarioStep\",\n ],\n BUSINESS_SCENARIO_PERSONA_CONCEPT_TYPE: [\n \"/Library/KMTs/Business scenarios.bixml/Persona\",\n ],\n\n // Input format for dates. Without this setting having a value, the contributions format is used\n DATE_INPUT_FORMAT: \"\",\n\n // Readonly format for dates. Without this setting having a value, the contributions format is used\n DATE_READONLY_FORMAT: \"\",\n\n // indicates on what day the week starts (0 = Sunday)\n CALENDAR_WEEK_STARTS_ON: 1,\n\n // indicates which date indicates the first week of the year\n CALENDAR_FIRST_WEEK_CONTAINS_DATE: 1,\n\n // parameters that are added for the ui state, but should not be send to the modular ui\n UI_PARAMETERS: [],\n\n // disable hide-when-empty hint for layouts running on Be Informed versions older than 21.1\n ALLOW_HIDE_WHEN_EMPTY_ON_TABS: true,\n\n // reload the complete page on signout, usefull when third party authentication is in place\n PAGE_RELOAD_ON_UNAUTHORIZED_ERROR: false,\n\n XHR_TIMEOUT_MS: 300000,\n};\n\nlet settings = defaultSettings;\n\n/**\n */\nexport const setSettings = (config: Object) => {\n if (isPlainObject(config)) {\n settings = Object.assign(defaultSettings, config);\n }\n};\n\n/**\n */\nexport const getSetting = (key: string, defaultValue?: any): any => {\n if (!has(settings, key) && defaultValue === undefined) {\n throw new Error(\n `Setting with name ${key} not found and no defaultValue given`\n );\n }\n\n return settings[key] ?? defaultValue;\n};\n\n/**\n */\nexport const setSetting = (key: string, value: any) => {\n settings[key] = value;\n};\n\n/**\n */\nexport const allSettings = (): { [name: string]: Setting } => settings;\n\n/**\n */\nexport const hasAllContentInData = (): boolean =>\n getSetting(ALL_CONTENT_IN_DATA_SETTING, true);\n\n/**\n */\nexport const loginPath = (): string =>\n getSetting(LOGIN_PATH_SETTING, `${BASE}/j_security_check`);\n/**\n */\nexport const loginUsernameField = (): string =>\n getSetting(LOGIN_USERNAME_SETTING, \"j_username\");\n/**\n */\nexport const loginPasswordField = (): string =>\n getSetting(LOGIN_PASSWORD_SETTING, \"j_password\");\n/**\n */\nexport const logoutPath = (): string =>\n getSetting(LOGOUT_PATH_SETTING, `${BASE}/Logoff`);\n"],"file":"Settings.js"}
@@ -25,13 +25,10 @@ var _Cache = _interopRequireDefault(require("../utils/browser/Cache"));
25
25
 
26
26
  var _exceptions = require("../exceptions");
27
27
 
28
- var LOGIN_PATH = "".concat(_Constants.BASE, "/j_security_check");
29
- var LOGOUT_PATH = "".concat(_Constants.BASE, "/Logoff");
30
- var usernameField = "j_username";
31
- var passwordField = "j_password";
28
+ var _constants = require("../constants");
29
+
32
30
  /**
33
31
  */
34
-
35
32
  var Authenticate = /*#__PURE__*/function () {
36
33
  /**
37
34
  */
@@ -91,8 +88,11 @@ var Authenticate = /*#__PURE__*/function () {
91
88
  }, {
92
89
  key: "createLogin",
93
90
  value: function createLogin(username, password) {
94
- var _context, _context2;
91
+ var _context, _context2, _context3;
95
92
 
93
+ var LOGIN_PATH = (0, _constants.loginPath)();
94
+ var usernameField = (0, _constants.loginUsernameField)();
95
+ var passwordField = (0, _constants.loginPasswordField)();
96
96
  var encodedUsername = encodeURIComponent(username);
97
97
  var encodedPassword = encodeURIComponent(password);
98
98
  return {
@@ -102,7 +102,7 @@ var Authenticate = /*#__PURE__*/function () {
102
102
  Accept: "application/json",
103
103
  "Content-Type": "application/x-www-form-urlencoded"
104
104
  },
105
- data: (0, _concat.default)(_context = (0, _concat.default)(_context2 = "".concat(usernameField, "=").concat(encodedUsername, "&")).call(_context2, passwordField, "=")).call(_context, encodedPassword)
105
+ data: (0, _concat.default)(_context = (0, _concat.default)(_context2 = (0, _concat.default)(_context3 = "".concat(usernameField, "=")).call(_context3, encodedUsername, "&")).call(_context2, passwordField, "=")).call(_context, encodedPassword)
106
106
  };
107
107
  }
108
108
  /**
@@ -115,9 +115,9 @@ var Authenticate = /*#__PURE__*/function () {
115
115
 
116
116
  return this.initLogin(true).then(function () {
117
117
  if (_this2.isBasicAuthentication) {
118
- var _context3;
118
+ var _context4;
119
119
 
120
- _Cache.default.addItem("basic", btoa((0, _concat.default)(_context3 = "".concat(username, ":")).call(_context3, password)));
120
+ _Cache.default.addItem("basic", btoa((0, _concat.default)(_context4 = "".concat(username, ":")).call(_context4, password)));
121
121
 
122
122
  return _promise.default.resolve();
123
123
  }
@@ -132,7 +132,7 @@ var Authenticate = /*#__PURE__*/function () {
132
132
  key: "logout",
133
133
  value: function logout() {
134
134
  return (0, _universalFetch.default)({
135
- url: LOGOUT_PATH
135
+ url: (0, _constants.logoutPath)()
136
136
  }).then(function () {
137
137
  // clear cache because of cached contributions
138
138
  _Cache.default.clear();
@@ -6,12 +6,12 @@ import Cache from "../utils/browser/Cache";
6
6
 
7
7
  import { UnauthorizedException } from "../exceptions";
8
8
  import type { RequestOptions } from "../utils/fetch/types";
9
-
10
- const LOGIN_PATH = `${BASE}/j_security_check`;
11
- const LOGOUT_PATH = `${BASE}/Logoff`;
12
-
13
- const usernameField = "j_username";
14
- const passwordField = "j_password";
9
+ import {
10
+ loginPasswordField,
11
+ loginPath,
12
+ loginUsernameField,
13
+ logoutPath,
14
+ } from "../constants";
15
15
 
16
16
  /**
17
17
  */
@@ -65,6 +65,10 @@ class Authenticate {
65
65
  /**
66
66
  */
67
67
  createLogin(username: string, password: string): $Shape<RequestOptions> {
68
+ const LOGIN_PATH = loginPath();
69
+ const usernameField = loginUsernameField();
70
+ const passwordField = loginPasswordField();
71
+
68
72
  const encodedUsername = encodeURIComponent(username);
69
73
  const encodedPassword = encodeURIComponent(password);
70
74
 
@@ -97,7 +101,7 @@ class Authenticate {
97
101
  */
98
102
  logout(): Promise<void> {
99
103
  return universalFetch({
100
- url: LOGOUT_PATH,
104
+ url: logoutPath(),
101
105
  }).then(() => {
102
106
  // clear cache because of cached contributions
103
107
  Cache.clear();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/modularui/Authenticate.js"],"names":["LOGIN_PATH","BASE","LOGOUT_PATH","usernameField","passwordField","Authenticate","_isBasic","isBasicAuthentication","initLogin","resolve","url","method","HTTP_METHODS","GET","headers","Accept","catch","error","UnauthorizedException","username","password","encodedUsername","encodeURIComponent","encodedPassword","POST","data","then","Cache","addItem","btoa","createLogin","clear"],"mappings":";;;;;;;;;;;;;;;;;;;AACA;;AAEA;;AACA;;AAEA;;AAGA,IAAMA,UAAU,aAAMC,eAAN,sBAAhB;AACA,IAAMC,WAAW,aAAMD,eAAN,YAAjB;AAEA,IAAME,aAAa,GAAG,YAAtB;AACA,IAAMC,aAAa,GAAG,YAAtB;AAEA;AACA;;IACMC,Y;AAGJ;AACF;AACE,0BAAc;AAAA;AAAA;AACZ,SAAKC,QAAL,GAAgB,KAAhB;AACD;AAED;AACF;;;;;SACE,eAAqC;AACnC,aAAO,KAAKA,QAAZ;AACD;AAED;AACF;;SACE,aAA0BC,qBAA1B,EAA0D;AACxD,WAAKD,QAAL,GAAgBC,qBAAhB;AACD;AAED;AACF;;;;WACE,mBAAUC,UAAV,EAA4C;AAAA;;AAC1C,UAAI,KAAKD,qBAAL,IAA8B,CAACC,UAAnC,EAA8C;AAC5C,eAAO,iBAAQC,OAAR,CAAgB,IAAhB,CAAP;AACD;;AAED,aAAO,6BAAe;AACpBC,QAAAA,GAAG,YAAKT,eAAL,WADiB;AAEpBU,QAAAA,MAAM,EAAEC,wBAAaC,GAFD;AAGpBC,QAAAA,OAAO,EAAE;AACPC,UAAAA,MAAM,EAAE,kBADD;AAEP,0BAAgB;AAFT;AAHW,OAAf,EAOJC,KAPI,CAOE,UAACC,KAAD,EAAW;AAClB;AACA;AACA;AACA,YAAIA,KAAK,YAAYC,iCAArB,EAA4C;AAC1C,UAAA,KAAI,CAACX,qBAAL,GAA6B,IAA7B;AACD;;AAED,eAAO,iBAAQE,OAAR,CAAgB,EAAhB,CAAP;AACD,OAhBM,CAAP;AAiBD;AAED;AACF;;;;WACE,qBAAYU,QAAZ,EAA8BC,QAA9B,EAAwE;AAAA;;AACtE,UAAMC,eAAe,GAAGC,kBAAkB,CAACH,QAAD,CAA1C;AACA,UAAMI,eAAe,GAAGD,kBAAkB,CAACF,QAAD,CAA1C;AAEA,aAAO;AACLV,QAAAA,GAAG,EAAEV,UADA;AAELW,QAAAA,MAAM,EAAEC,wBAAaY,IAFhB;AAGLV,QAAAA,OAAO,EAAE;AACPC,UAAAA,MAAM,EAAE,kBADD;AAEP,0BAAgB;AAFT,SAHJ;AAOLU,QAAAA,IAAI,6EAAKtB,aAAL,cAAsBkB,eAAtB,wBAAyCjB,aAAzC,uBAA0DmB,eAA1D;AAPC,OAAP;AASD;AAED;AACF;;;;WACE,eAAMJ,QAAN,EAAwBC,QAAxB,EAAwD;AAAA;;AACtD,aAAO,KAAKZ,SAAL,CAAe,IAAf,EAAqBkB,IAArB,CAA0B,YAAM;AACrC,YAAI,MAAI,CAACnB,qBAAT,EAAgC;AAAA;;AAC9BoB,yBAAMC,OAAN,CAAc,OAAd,EAAuBC,IAAI,4CAAIV,QAAJ,wBAAgBC,QAAhB,EAA3B;;AAEA,iBAAO,iBAAQX,OAAR,EAAP;AACD;;AAED,eAAO,6BAAe,MAAI,CAACqB,WAAL,CAAiBX,QAAjB,EAA2BC,QAA3B,CAAf,CAAP;AACD,OARM,CAAP;AASD;AAED;AACF;;;;WACE,kBAAwB;AACtB,aAAO,6BAAe;AACpBV,QAAAA,GAAG,EAAER;AADe,OAAf,EAEJwB,IAFI,CAEC,YAAM;AACZ;AACAC,uBAAMI,KAAN;AACD,OALM,CAAP;AAMD;;;;;eAGY1B,Y","sourcesContent":["// @flow\nimport { BASE, HTTP_METHODS } from \"../constants/Constants\";\n\nimport universalFetch from \"../utils/fetch/universalFetch\";\nimport Cache from \"../utils/browser/Cache\";\n\nimport { UnauthorizedException } from \"../exceptions\";\nimport type { RequestOptions } from \"../utils/fetch/types\";\n\nconst LOGIN_PATH = `${BASE}/j_security_check`;\nconst LOGOUT_PATH = `${BASE}/Logoff`;\n\nconst usernameField = \"j_username\";\nconst passwordField = \"j_password\";\n\n/**\n */\nclass Authenticate {\n _isBasic: boolean;\n\n /**\n */\n constructor() {\n this._isBasic = false;\n }\n\n /**\n */\n get isBasicAuthentication(): boolean {\n return this._isBasic;\n }\n\n /**\n */\n set isBasicAuthentication(isBasicAuthentication: boolean) {\n this._isBasic = isBasicAuthentication;\n }\n\n /**\n */\n initLogin(initLogin: boolean): Promise<any> {\n if (this.isBasicAuthentication || !initLogin) {\n return Promise.resolve(true);\n }\n\n return universalFetch({\n url: `${BASE}/login`,\n method: HTTP_METHODS.GET,\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n }).catch((error) => {\n // when an unauthorizedexception is received on a request to the login service,\n // this indicates a basic authorization scenario\n // in case of form based authentication other exceptions are thrown\n if (error instanceof UnauthorizedException) {\n this.isBasicAuthentication = true;\n }\n\n return Promise.resolve({});\n });\n }\n\n /**\n */\n createLogin(username: string, password: string): $Shape<RequestOptions> {\n const encodedUsername = encodeURIComponent(username);\n const encodedPassword = encodeURIComponent(password);\n\n return {\n url: LOGIN_PATH,\n method: HTTP_METHODS.POST,\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n data: `${usernameField}=${encodedUsername}&${passwordField}=${encodedPassword}`,\n };\n }\n\n /**\n */\n login(username: string, password: string): Promise<any> {\n return this.initLogin(true).then(() => {\n if (this.isBasicAuthentication) {\n Cache.addItem(\"basic\", btoa(`${username}:${password}`));\n\n return Promise.resolve();\n }\n\n return universalFetch(this.createLogin(username, password));\n });\n }\n\n /**\n */\n logout(): Promise<void> {\n return universalFetch({\n url: LOGOUT_PATH,\n }).then(() => {\n // clear cache because of cached contributions\n Cache.clear();\n });\n }\n}\n\nexport default Authenticate;\n"],"file":"Authenticate.js"}
1
+ {"version":3,"sources":["../../src/modularui/Authenticate.js"],"names":["Authenticate","_isBasic","isBasicAuthentication","initLogin","resolve","url","BASE","method","HTTP_METHODS","GET","headers","Accept","catch","error","UnauthorizedException","username","password","LOGIN_PATH","usernameField","passwordField","encodedUsername","encodeURIComponent","encodedPassword","POST","data","then","Cache","addItem","btoa","createLogin","clear"],"mappings":";;;;;;;;;;;;;;;;;;;AACA;;AAEA;;AACA;;AAEA;;AAEA;;AAOA;AACA;IACMA,Y;AAGJ;AACF;AACE,0BAAc;AAAA;AAAA;AACZ,SAAKC,QAAL,GAAgB,KAAhB;AACD;AAED;AACF;;;;;SACE,eAAqC;AACnC,aAAO,KAAKA,QAAZ;AACD;AAED;AACF;;SACE,aAA0BC,qBAA1B,EAA0D;AACxD,WAAKD,QAAL,GAAgBC,qBAAhB;AACD;AAED;AACF;;;;WACE,mBAAUC,UAAV,EAA4C;AAAA;;AAC1C,UAAI,KAAKD,qBAAL,IAA8B,CAACC,UAAnC,EAA8C;AAC5C,eAAO,iBAAQC,OAAR,CAAgB,IAAhB,CAAP;AACD;;AAED,aAAO,6BAAe;AACpBC,QAAAA,GAAG,YAAKC,eAAL,WADiB;AAEpBC,QAAAA,MAAM,EAAEC,wBAAaC,GAFD;AAGpBC,QAAAA,OAAO,EAAE;AACPC,UAAAA,MAAM,EAAE,kBADD;AAEP,0BAAgB;AAFT;AAHW,OAAf,EAOJC,KAPI,CAOE,UAACC,KAAD,EAAW;AAClB;AACA;AACA;AACA,YAAIA,KAAK,YAAYC,iCAArB,EAA4C;AAC1C,UAAA,KAAI,CAACZ,qBAAL,GAA6B,IAA7B;AACD;;AAED,eAAO,iBAAQE,OAAR,CAAgB,EAAhB,CAAP;AACD,OAhBM,CAAP;AAiBD;AAED;AACF;;;;WACE,qBAAYW,QAAZ,EAA8BC,QAA9B,EAAwE;AAAA;;AACtE,UAAMC,UAAU,GAAG,2BAAnB;AACA,UAAMC,aAAa,GAAG,oCAAtB;AACA,UAAMC,aAAa,GAAG,oCAAtB;AAEA,UAAMC,eAAe,GAAGC,kBAAkB,CAACN,QAAD,CAA1C;AACA,UAAMO,eAAe,GAAGD,kBAAkB,CAACL,QAAD,CAA1C;AAEA,aAAO;AACLX,QAAAA,GAAG,EAAEY,UADA;AAELV,QAAAA,MAAM,EAAEC,wBAAae,IAFhB;AAGLb,QAAAA,OAAO,EAAE;AACPC,UAAAA,MAAM,EAAE,kBADD;AAEP,0BAAgB;AAFT,SAHJ;AAOLa,QAAAA,IAAI,8GAAKN,aAAL,wBAAsBE,eAAtB,wBAAyCD,aAAzC,uBAA0DG,eAA1D;AAPC,OAAP;AASD;AAED;AACF;;;;WACE,eAAMP,QAAN,EAAwBC,QAAxB,EAAwD;AAAA;;AACtD,aAAO,KAAKb,SAAL,CAAe,IAAf,EAAqBsB,IAArB,CAA0B,YAAM;AACrC,YAAI,MAAI,CAACvB,qBAAT,EAAgC;AAAA;;AAC9BwB,yBAAMC,OAAN,CAAc,OAAd,EAAuBC,IAAI,4CAAIb,QAAJ,wBAAgBC,QAAhB,EAA3B;;AAEA,iBAAO,iBAAQZ,OAAR,EAAP;AACD;;AAED,eAAO,6BAAe,MAAI,CAACyB,WAAL,CAAiBd,QAAjB,EAA2BC,QAA3B,CAAf,CAAP;AACD,OARM,CAAP;AASD;AAED;AACF;;;;WACE,kBAAwB;AACtB,aAAO,6BAAe;AACpBX,QAAAA,GAAG,EAAE;AADe,OAAf,EAEJoB,IAFI,CAEC,YAAM;AACZ;AACAC,uBAAMI,KAAN;AACD,OALM,CAAP;AAMD;;;;;eAGY9B,Y","sourcesContent":["// @flow\nimport { BASE, HTTP_METHODS } from \"../constants/Constants\";\n\nimport universalFetch from \"../utils/fetch/universalFetch\";\nimport Cache from \"../utils/browser/Cache\";\n\nimport { UnauthorizedException } from \"../exceptions\";\nimport type { RequestOptions } from \"../utils/fetch/types\";\nimport {\n loginPasswordField,\n loginPath,\n loginUsernameField,\n logoutPath,\n} from \"../constants\";\n\n/**\n */\nclass Authenticate {\n _isBasic: boolean;\n\n /**\n */\n constructor() {\n this._isBasic = false;\n }\n\n /**\n */\n get isBasicAuthentication(): boolean {\n return this._isBasic;\n }\n\n /**\n */\n set isBasicAuthentication(isBasicAuthentication: boolean) {\n this._isBasic = isBasicAuthentication;\n }\n\n /**\n */\n initLogin(initLogin: boolean): Promise<any> {\n if (this.isBasicAuthentication || !initLogin) {\n return Promise.resolve(true);\n }\n\n return universalFetch({\n url: `${BASE}/login`,\n method: HTTP_METHODS.GET,\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n }).catch((error) => {\n // when an unauthorizedexception is received on a request to the login service,\n // this indicates a basic authorization scenario\n // in case of form based authentication other exceptions are thrown\n if (error instanceof UnauthorizedException) {\n this.isBasicAuthentication = true;\n }\n\n return Promise.resolve({});\n });\n }\n\n /**\n */\n createLogin(username: string, password: string): $Shape<RequestOptions> {\n const LOGIN_PATH = loginPath();\n const usernameField = loginUsernameField();\n const passwordField = loginPasswordField();\n\n const encodedUsername = encodeURIComponent(username);\n const encodedPassword = encodeURIComponent(password);\n\n return {\n url: LOGIN_PATH,\n method: HTTP_METHODS.POST,\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n data: `${usernameField}=${encodedUsername}&${passwordField}=${encodedPassword}`,\n };\n }\n\n /**\n */\n login(username: string, password: string): Promise<any> {\n return this.initLogin(true).then(() => {\n if (this.isBasicAuthentication) {\n Cache.addItem(\"basic\", btoa(`${username}:${password}`));\n\n return Promise.resolve();\n }\n\n return universalFetch(this.createLogin(username, password));\n });\n }\n\n /**\n */\n logout(): Promise<void> {\n return universalFetch({\n url: logoutPath(),\n }).then(() => {\n // clear cache because of cached contributions\n Cache.clear();\n });\n }\n}\n\nexport default Authenticate;\n"],"file":"Authenticate.js"}
@@ -106,7 +106,8 @@ var client = function client() {
106
106
  history = _configureStore.history,
107
107
  store = _configureStore.store;
108
108
 
109
- (0, _Preferences.setAllContentInDataSetting)(store.getState()); // load existing cache from other browser tabs
109
+ (0, _Preferences.setAllContentInDataSetting)(store.getState());
110
+ (0, _Preferences.setLoginPreferences)(store.getState()); // load existing cache from other browser tabs
110
111
 
111
112
  _Cache.default.loadOtherBrowserTabs(function () {
112
113
  if (_Cache.default.getItem("auth")) {
@@ -19,7 +19,10 @@ import configureStore from "../redux/store/configureStore";
19
19
  import rehydrate from "./rehydrate";
20
20
  import { BASE } from "../constants/Constants";
21
21
 
22
- import { setAllContentInDataSetting } from "../redux/actions/Preferences";
22
+ import {
23
+ setAllContentInDataSetting,
24
+ setLoginPreferences,
25
+ } from "../redux/actions/Preferences";
23
26
  import { showXHRErrorNotification } from "../redux/actions/Notification";
24
27
 
25
28
  import { handleError } from "../redux/actions/Error";
@@ -99,6 +102,7 @@ const client = ({
99
102
  );
100
103
 
101
104
  setAllContentInDataSetting(store.getState());
105
+ setLoginPreferences(store.getState());
102
106
 
103
107
  // load existing cache from other browser tabs
104
108
  Cache.loadOtherBrowserTabs(() => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/react-client/client.js"],"names":["window","parseDataToJSON","data","JSON","parse","error","JsonParseException","client","customReducers","theme","render","beforeRenderHooks","ErrorFallbackComponent","contextPath","Error","dataElement","document","querySelector","textContent","Cache","clear","browserHistory","basename","BASE","history","store","getState","loadOtherBrowserTabs","getItem","dispatch","FetchException","response","listen","location","action","onunhandledrejection","event","detail","errorMessage","reason","message","toString","body","className","addContentLoadedEvent","addEventListener","applicationNode","isSSR","mount","hydrate","reactRender"],"mappings":"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","sourcesContent":["// @flow\n/* polyfills needed for ie11 */\nimport elementClosest from \"element-closest\";\nelementClosest(window);\n\n/* polyfill for focus-visible */\nimport \"focus-visible\";\n\nimport { hydrate, render as reactRender } from \"react-dom\";\n\nimport { has } from \"../utils/helpers/objects\";\nimport setImmediate from \"setimmediate\";\n\nimport Cache from \"../utils/browser/Cache\";\n\nimport { createBrowserHistory } from \"history\";\nimport configureStore from \"../redux/store/configureStore\";\n\nimport rehydrate from \"./rehydrate\";\nimport { BASE } from \"../constants/Constants\";\n\nimport { setAllContentInDataSetting } from \"../redux/actions/Preferences\";\nimport { showXHRErrorNotification } from \"../redux/actions/Notification\";\n\nimport { handleError } from \"../redux/actions/Error\";\nimport { loginSuccess } from \"../redux/actions/SignIn\";\n\nimport { locationChange } from \"../redux/_router/actions\";\n\nimport { JsonParseException, FetchException } from \"../exceptions\";\n\nimport Init from \"./Init\";\n\nimport { handleBeforeRenderHooks } from \"../redux/store/beforeRenderHooks\";\n\nimport type { ComponentType } from \"react\";\nimport type { Theme } from \"../react-theme/types\";\nimport type { CustomReducers } from \"../redux/types\";\nimport type { RouterHistory } from \"react-router\";\nimport type { BeforeRenderHook } from \"../redux/store/beforeRenderHooks\";\nimport type { Props as FallbackProps } from \"../react/ErrorBoundaryFallback\";\nexport type Props = {\n customReducers?: CustomReducers,\n theme?: Theme | Array<Theme>,\n render: Function,\n beforeRenderHooks?: Array<BeforeRenderHook>,\n ErrorFallbackComponent?: ComponentType<FallbackProps>,\n};\n\n/*\n * deserialize serialized data from the server to provide a smooth dehydration.\n */\n/**\n */\nconst parseDataToJSON = (data) => {\n try {\n return JSON.parse(data);\n } catch (error) {\n throw new JsonParseException(`Error parsing content ${data}`);\n }\n};\n\n/**\n * Mount the webapplication to the DOM, used client side when JavaScript is enabled.\n */\nconst client = ({\n customReducers = {},\n theme = {},\n render,\n beforeRenderHooks,\n ErrorFallbackComponent,\n}: Props = {}) => {\n if (typeof window.contextPath === \"undefined\") {\n throw new Error(\"Missing contextPath on window object\");\n }\n\n const dataElement = document.querySelector(\n 'script[type=\"application/json\"][data-app-state=\"app-json\"]'\n );\n if (!dataElement) {\n throw new Error(\"Error loading state, json not found\");\n } else if (dataElement.textContent.trim() === \"\") {\n return;\n }\n\n const data = parseDataToJSON(dataElement.textContent);\n\n // remove all resources from cache\n Cache.clear(\"^res:\");\n\n // $FlowExpectedError\n const browserHistory: RouterHistory = createBrowserHistory({\n basename: BASE,\n });\n const { history, store } = configureStore(\n browserHistory,\n customReducers,\n rehydrate(data)\n );\n\n setAllContentInDataSetting(store.getState());\n\n // load existing cache from other browser tabs\n Cache.loadOtherBrowserTabs(() => {\n if (Cache.getItem(\"auth\")) {\n store.dispatch(loginSuccess());\n }\n });\n\n if (has(data, \"error.name\")) {\n const error = new FetchException(data.error.response);\n store.dispatch(handleError(error));\n }\n\n if (Cache.getItem(\"auth\")) {\n store.dispatch(loginSuccess());\n }\n\n // listen to history change and update the redux router store\n history.listen((location, action) => {\n store.dispatch(locationChange(location, action));\n });\n\n /**\n */\n window.onunhandledrejection = (event) => {\n if (event.detail) {\n return setImmediate(() => {\n const errorMessage = event.detail.reason.message.toString();\n\n store.dispatch(showXHRErrorNotification(errorMessage));\n throw event.detail.reason;\n });\n }\n\n return event;\n };\n\n if (document.body) {\n document.body.className = \"js\";\n }\n\n handleBeforeRenderHooks(beforeRenderHooks, { store });\n\n addContentLoadedEvent(store, history, theme, render, ErrorFallbackComponent);\n};\n\n/**\n */\nconst addContentLoadedEvent = (\n store,\n history,\n theme,\n render,\n ErrorFallbackComponent\n) => {\n window.addEventListener(\"DOMContentLoaded\", () => {\n const applicationNode = document.querySelector(\"#application\");\n if (applicationNode) {\n const isSSR = applicationNode.querySelector(\".application\");\n const mount = isSSR ? hydrate : reactRender;\n mount(\n <Init\n store={store}\n history={history}\n contextPath={window.contextPath}\n theme={theme}\n ErrorFallbackComponent={ErrorFallbackComponent}\n >\n {render()}\n </Init>,\n applicationNode\n );\n } else {\n throw new Error(\n \"No DOM element with id application found to attach client to\"\n );\n }\n });\n};\n\nexport default client;\n"],"file":"client.js"}
1
+ {"version":3,"sources":["../../src/react-client/client.js"],"names":["window","parseDataToJSON","data","JSON","parse","error","JsonParseException","client","customReducers","theme","render","beforeRenderHooks","ErrorFallbackComponent","contextPath","Error","dataElement","document","querySelector","textContent","Cache","clear","browserHistory","basename","BASE","history","store","getState","loadOtherBrowserTabs","getItem","dispatch","FetchException","response","listen","location","action","onunhandledrejection","event","detail","errorMessage","reason","message","toString","body","className","addContentLoadedEvent","addEventListener","applicationNode","isSSR","mount","hydrate","reactRender"],"mappings":"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","sourcesContent":["// @flow\n/* polyfills needed for ie11 */\nimport elementClosest from \"element-closest\";\nelementClosest(window);\n\n/* polyfill for focus-visible */\nimport \"focus-visible\";\n\nimport { hydrate, render as reactRender } from \"react-dom\";\n\nimport { has } from \"../utils/helpers/objects\";\nimport setImmediate from \"setimmediate\";\n\nimport Cache from \"../utils/browser/Cache\";\n\nimport { createBrowserHistory } from \"history\";\nimport configureStore from \"../redux/store/configureStore\";\n\nimport rehydrate from \"./rehydrate\";\nimport { BASE } from \"../constants/Constants\";\n\nimport {\n setAllContentInDataSetting,\n setLoginPreferences,\n} from \"../redux/actions/Preferences\";\nimport { showXHRErrorNotification } from \"../redux/actions/Notification\";\n\nimport { handleError } from \"../redux/actions/Error\";\nimport { loginSuccess } from \"../redux/actions/SignIn\";\n\nimport { locationChange } from \"../redux/_router/actions\";\n\nimport { JsonParseException, FetchException } from \"../exceptions\";\n\nimport Init from \"./Init\";\n\nimport { handleBeforeRenderHooks } from \"../redux/store/beforeRenderHooks\";\n\nimport type { ComponentType } from \"react\";\nimport type { Theme } from \"../react-theme/types\";\nimport type { CustomReducers } from \"../redux/types\";\nimport type { RouterHistory } from \"react-router\";\nimport type { BeforeRenderHook } from \"../redux/store/beforeRenderHooks\";\nimport type { Props as FallbackProps } from \"../react/ErrorBoundaryFallback\";\nexport type Props = {\n customReducers?: CustomReducers,\n theme?: Theme | Array<Theme>,\n render: Function,\n beforeRenderHooks?: Array<BeforeRenderHook>,\n ErrorFallbackComponent?: ComponentType<FallbackProps>,\n};\n\n/*\n * deserialize serialized data from the server to provide a smooth dehydration.\n */\n/**\n */\nconst parseDataToJSON = (data) => {\n try {\n return JSON.parse(data);\n } catch (error) {\n throw new JsonParseException(`Error parsing content ${data}`);\n }\n};\n\n/**\n * Mount the webapplication to the DOM, used client side when JavaScript is enabled.\n */\nconst client = ({\n customReducers = {},\n theme = {},\n render,\n beforeRenderHooks,\n ErrorFallbackComponent,\n}: Props = {}) => {\n if (typeof window.contextPath === \"undefined\") {\n throw new Error(\"Missing contextPath on window object\");\n }\n\n const dataElement = document.querySelector(\n 'script[type=\"application/json\"][data-app-state=\"app-json\"]'\n );\n if (!dataElement) {\n throw new Error(\"Error loading state, json not found\");\n } else if (dataElement.textContent.trim() === \"\") {\n return;\n }\n\n const data = parseDataToJSON(dataElement.textContent);\n\n // remove all resources from cache\n Cache.clear(\"^res:\");\n\n // $FlowExpectedError\n const browserHistory: RouterHistory = createBrowserHistory({\n basename: BASE,\n });\n const { history, store } = configureStore(\n browserHistory,\n customReducers,\n rehydrate(data)\n );\n\n setAllContentInDataSetting(store.getState());\n setLoginPreferences(store.getState());\n\n // load existing cache from other browser tabs\n Cache.loadOtherBrowserTabs(() => {\n if (Cache.getItem(\"auth\")) {\n store.dispatch(loginSuccess());\n }\n });\n\n if (has(data, \"error.name\")) {\n const error = new FetchException(data.error.response);\n store.dispatch(handleError(error));\n }\n\n if (Cache.getItem(\"auth\")) {\n store.dispatch(loginSuccess());\n }\n\n // listen to history change and update the redux router store\n history.listen((location, action) => {\n store.dispatch(locationChange(location, action));\n });\n\n /**\n */\n window.onunhandledrejection = (event) => {\n if (event.detail) {\n return setImmediate(() => {\n const errorMessage = event.detail.reason.message.toString();\n\n store.dispatch(showXHRErrorNotification(errorMessage));\n throw event.detail.reason;\n });\n }\n\n return event;\n };\n\n if (document.body) {\n document.body.className = \"js\";\n }\n\n handleBeforeRenderHooks(beforeRenderHooks, { store });\n\n addContentLoadedEvent(store, history, theme, render, ErrorFallbackComponent);\n};\n\n/**\n */\nconst addContentLoadedEvent = (\n store,\n history,\n theme,\n render,\n ErrorFallbackComponent\n) => {\n window.addEventListener(\"DOMContentLoaded\", () => {\n const applicationNode = document.querySelector(\"#application\");\n if (applicationNode) {\n const isSSR = applicationNode.querySelector(\".application\");\n const mount = isSSR ? hydrate : reactRender;\n mount(\n <Init\n store={store}\n history={history}\n contextPath={window.contextPath}\n theme={theme}\n ErrorFallbackComponent={ErrorFallbackComponent}\n >\n {render()}\n </Init>,\n applicationNode\n );\n } else {\n throw new Error(\n \"No DOM element with id application found to attach client to\"\n );\n }\n });\n};\n\nexport default client;\n"],"file":"client.js"}
@@ -109,6 +109,15 @@ describe("serverUtil", () => {
109
109
  hasAllContentInData: false,
110
110
  },
111
111
  },
112
+ {
113
+ type: "SET_PREFERENCES",
114
+ payload: {
115
+ "FormClient.login_url": "/BeInformed/j_security_check",
116
+ "FormClient.logout_url": "/BeInformed/Logoff",
117
+ "FormClient.password_field_name": "j_password",
118
+ "FormClient.username_field_name": "j_username",
119
+ },
120
+ },
112
121
  ]);
113
122
  });
114
123
 
@@ -146,6 +155,15 @@ describe("serverUtil", () => {
146
155
  hasAllContentInData: false,
147
156
  },
148
157
  },
158
+ {
159
+ type: "SET_PREFERENCES",
160
+ payload: {
161
+ "FormClient.login_url": "/BeInformed/j_security_check",
162
+ "FormClient.logout_url": "/BeInformed/Logoff",
163
+ "FormClient.password_field_name": "j_password",
164
+ "FormClient.username_field_name": "j_username",
165
+ },
166
+ },
149
167
  ]);
150
168
  });
151
169
  });
@@ -165,6 +165,7 @@ var setServerPreferences = function setServerPreferences(store, serverPreference
165
165
  }
166
166
 
167
167
  store.dispatch((0, _Preferences.setAllContentInDataSetting)());
168
+ store.dispatch((0, _Preferences.setLoginPreferences)());
168
169
 
169
170
  if (preferencesProvider && preferencesProvider.isStudioContext && preferencesProvider.isStudioContext()) {
170
171
  store.dispatch((0, _Preferences.setPreference)("isStudioContext", true));
@@ -16,6 +16,7 @@ import {
16
16
  setThemePreference,
17
17
  setPreference,
18
18
  setAllContentInDataSetting,
19
+ setLoginPreferences,
19
20
  } from "../redux/actions/Preferences";
20
21
 
21
22
  import { getSetting } from "../constants/Settings";
@@ -126,6 +127,7 @@ const setServerPreferences = (
126
127
  }
127
128
 
128
129
  store.dispatch(setAllContentInDataSetting());
130
+ store.dispatch(setLoginPreferences());
129
131
 
130
132
  if (
131
133
  preferencesProvider &&
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/react-server/serverUtil.js"],"names":["createReduxStore","requestHref","customReducers","history","initialEntries","toString","store","setI18n","locales","request","Array","isArray","IllegalArgumentException","mergedLocales","locale","code","customLocale","custLocale","forEach","some","push","enabledLocales","localesInstance","Locales","preferredLocale","dispatch","setServerPreferencesFromArray","serverPreferences","serverPreference","name","defaultValue","type","setServerPreferences","preferencesProvider","isStudioContext","setConfigurationTheme","configTheme","configFileLocation","getLayoutConfigFileLocation","configFilePath","dataFetcher","fetch","Error","handleErrors","state","getState","error","shouldThrowOnServer","dehydrate","filteredState","modularui","reduce","obj","key","status","model","replace","createHead","sheet","UUID","helmetContext","style","getStyleTags","meta","helmet"],"mappings":"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","sourcesContent":["// @flow\nimport { createMemoryHistory } from \"history\";\nimport { has } from \"../utils/helpers/objects\";\nimport deepmerge from \"deepmerge\";\n\nimport configureStore from \"../redux/store/configureStore\";\n\nimport { availableLocales } from \"../i18n/Locales\";\nimport Locales from \"../i18n/Locales\";\n\nimport { getPreferredLocale } from \"./requestInformation\";\nimport { setLocales } from \"../redux/_i18n/actions\";\n\nimport {\n setServerPreference,\n setThemePreference,\n setPreference,\n setAllContentInDataSetting,\n} from \"../redux/actions/Preferences\";\n\nimport { getSetting } from \"../constants/Settings\";\n\nimport { IllegalArgumentException } from \"../exceptions\";\n\nimport type { LocaleConfiguration } from \"../i18n/types\";\nimport type { ReduxStore } from \"../redux/types\";\nimport type Href from \"../models/href/Href\";\nimport type { RouterHistory } from \"react-router\";\n\nexport type PreferenceValue = {\n name: string,\n defaultValue?: string | null,\n type?: string,\n};\n\n/**\n */\nconst createReduxStore = (\n requestHref: Href,\n customReducers: Object\n): ReduxStore => {\n // $FlowExpectedError\n const history: RouterHistory = createMemoryHistory({\n initialEntries: [requestHref.toString()],\n });\n\n const { store } = configureStore(history, customReducers);\n\n return store;\n};\n\n/**\n */\nconst setI18n = (\n store: ReduxStore,\n locales: Array<LocaleConfiguration> = [],\n request: HttpServletRequestJava\n) => {\n if (!Array.isArray(locales)) {\n throw new IllegalArgumentException(\"locales must be an array of objects\");\n }\n if (!request) {\n throw new IllegalArgumentException(\"missing request argument\");\n }\n\n const mergedLocales = availableLocales.map((locale) => {\n const code = locale.code;\n const customLocale = locales.find((custLocale) => custLocale.code === code);\n\n if (customLocale) {\n return deepmerge(locale, customLocale);\n }\n\n return locale;\n });\n\n locales.forEach((customLocale) => {\n if (!mergedLocales.some((locale) => locale.code === customLocale.code)) {\n mergedLocales.push(customLocale);\n }\n });\n\n const enabledLocales = mergedLocales.filter((locale: LocaleConfiguration) =>\n getSetting(\"ENABLED_LOCALES\").includes(locale.code)\n );\n\n const localesInstance = new Locales(enabledLocales);\n const preferredLocale = getPreferredLocale(request, localesInstance);\n store.dispatch(setLocales(localesInstance, preferredLocale ?? \"en\"));\n};\n\nconst setServerPreferencesFromArray = (\n store: ReduxStore,\n serverPreferences: Array<string | PreferenceValue>\n) => {\n serverPreferences.forEach((serverPreference) => {\n if (typeof serverPreference === \"object\") {\n const { name, defaultValue, type } = serverPreference;\n store.dispatch(setServerPreference(name, defaultValue, type));\n } else {\n store.dispatch(setServerPreference(serverPreference, null));\n }\n });\n};\n\n/**\n * Server preferences can be suplied by an array of preference names,\n * or an array of objects which has the name, an optional default value and an optional type.<br>\n * When the type is set to string, a comma separated value is not converted to an array:\n *\n * @example\n * // value becomes an array [default1, default2]\n * { name: \"prefName\", defaultValue: \"default1, default2\" }\n * // value remains a string \"default1, default2\"\n * { name: \"prefName\", defaultValue: \"default1, default2\", type: \"string\" }\n *\n * @param store\n * @param serverPreferences\n */\nconst setServerPreferences = (\n store: ReduxStore,\n serverPreferences: Array<string | PreferenceValue>\n) => {\n if (Array.isArray(serverPreferences)) {\n setServerPreferencesFromArray(store, serverPreferences);\n }\n\n store.dispatch(setAllContentInDataSetting());\n\n if (\n preferencesProvider &&\n preferencesProvider.isStudioContext &&\n preferencesProvider.isStudioContext()\n ) {\n store.dispatch(setPreference(\"isStudioContext\", true));\n }\n};\n\n/**\n */\nconst setConfigurationTheme = (store: ReduxStore) => {\n let configTheme = null;\n\n const configFileLocation = preferencesProvider.getLayoutConfigFileLocation();\n if (typeof configFileLocation === \"string\") {\n const configFilePath = configFileLocation.startsWith(\"/\")\n ? `/resource${configFileLocation}`\n : `/resource/${configFileLocation}`;\n\n configTheme = dataFetcher.fetch(configFilePath);\n\n if (configTheme) {\n store.dispatch(setThemePreference(configTheme));\n } else {\n throw new Error(\n `Could not read theme configuration file from: ${configFilePath}`\n );\n }\n }\n};\n\n/**\n */\nconst handleErrors = (store: ReduxStore) => {\n const state = store.getState();\n\n if (\n state.error &&\n (state.error.shouldThrowOnServer ||\n !has(state.error, \"shouldThrowOnServer\"))\n ) {\n throw state.error;\n }\n};\n\n/**\n */\nconst dehydrate = (store: ReduxStore): string => {\n const state = store.getState();\n\n const filteredState = {\n ...state,\n modularui: Object.keys(state.modularui).reduce((obj, key) => {\n obj[key] = {\n status: state.modularui[key].status,\n model: state.modularui[key].model\n ? state.modularui[key].model.dehydrate()\n : void 0,\n };\n\n return obj;\n }, {}),\n };\n\n return JSON.stringify(filteredState).replace(/</g, \"\\\\u003c\");\n};\n\n/**\n */\nconst createHead = (\n sheet: any,\n UUID: string,\n helmetContext?: Object\n): Object => {\n const style = sheet.getStyleTags();\n const meta = helmetContext ? [...helmetContext.helmet.meta] : [];\n\n if (helmetContext) {\n return {\n ...helmetContext.helmet,\n style,\n meta,\n };\n }\n\n return {\n style,\n meta,\n };\n};\n\nexport {\n createReduxStore,\n setI18n,\n setServerPreferences,\n setConfigurationTheme,\n createHead,\n handleErrors,\n dehydrate,\n};\n"],"file":"serverUtil.js"}
1
+ {"version":3,"sources":["../../src/react-server/serverUtil.js"],"names":["createReduxStore","requestHref","customReducers","history","initialEntries","toString","store","setI18n","locales","request","Array","isArray","IllegalArgumentException","mergedLocales","locale","code","customLocale","custLocale","forEach","some","push","enabledLocales","localesInstance","Locales","preferredLocale","dispatch","setServerPreferencesFromArray","serverPreferences","serverPreference","name","defaultValue","type","setServerPreferences","preferencesProvider","isStudioContext","setConfigurationTheme","configTheme","configFileLocation","getLayoutConfigFileLocation","configFilePath","dataFetcher","fetch","Error","handleErrors","state","getState","error","shouldThrowOnServer","dehydrate","filteredState","modularui","reduce","obj","key","status","model","replace","createHead","sheet","UUID","helmetContext","style","getStyleTags","meta","helmet"],"mappings":"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","sourcesContent":["// @flow\nimport { createMemoryHistory } from \"history\";\nimport { has } from \"../utils/helpers/objects\";\nimport deepmerge from \"deepmerge\";\n\nimport configureStore from \"../redux/store/configureStore\";\n\nimport { availableLocales } from \"../i18n/Locales\";\nimport Locales from \"../i18n/Locales\";\n\nimport { getPreferredLocale } from \"./requestInformation\";\nimport { setLocales } from \"../redux/_i18n/actions\";\n\nimport {\n setServerPreference,\n setThemePreference,\n setPreference,\n setAllContentInDataSetting,\n setLoginPreferences,\n} from \"../redux/actions/Preferences\";\n\nimport { getSetting } from \"../constants/Settings\";\n\nimport { IllegalArgumentException } from \"../exceptions\";\n\nimport type { LocaleConfiguration } from \"../i18n/types\";\nimport type { ReduxStore } from \"../redux/types\";\nimport type Href from \"../models/href/Href\";\nimport type { RouterHistory } from \"react-router\";\n\nexport type PreferenceValue = {\n name: string,\n defaultValue?: string | null,\n type?: string,\n};\n\n/**\n */\nconst createReduxStore = (\n requestHref: Href,\n customReducers: Object\n): ReduxStore => {\n // $FlowExpectedError\n const history: RouterHistory = createMemoryHistory({\n initialEntries: [requestHref.toString()],\n });\n\n const { store } = configureStore(history, customReducers);\n\n return store;\n};\n\n/**\n */\nconst setI18n = (\n store: ReduxStore,\n locales: Array<LocaleConfiguration> = [],\n request: HttpServletRequestJava\n) => {\n if (!Array.isArray(locales)) {\n throw new IllegalArgumentException(\"locales must be an array of objects\");\n }\n if (!request) {\n throw new IllegalArgumentException(\"missing request argument\");\n }\n\n const mergedLocales = availableLocales.map((locale) => {\n const code = locale.code;\n const customLocale = locales.find((custLocale) => custLocale.code === code);\n\n if (customLocale) {\n return deepmerge(locale, customLocale);\n }\n\n return locale;\n });\n\n locales.forEach((customLocale) => {\n if (!mergedLocales.some((locale) => locale.code === customLocale.code)) {\n mergedLocales.push(customLocale);\n }\n });\n\n const enabledLocales = mergedLocales.filter((locale: LocaleConfiguration) =>\n getSetting(\"ENABLED_LOCALES\").includes(locale.code)\n );\n\n const localesInstance = new Locales(enabledLocales);\n const preferredLocale = getPreferredLocale(request, localesInstance);\n store.dispatch(setLocales(localesInstance, preferredLocale ?? \"en\"));\n};\n\nconst setServerPreferencesFromArray = (\n store: ReduxStore,\n serverPreferences: Array<string | PreferenceValue>\n) => {\n serverPreferences.forEach((serverPreference) => {\n if (typeof serverPreference === \"object\") {\n const { name, defaultValue, type } = serverPreference;\n store.dispatch(setServerPreference(name, defaultValue, type));\n } else {\n store.dispatch(setServerPreference(serverPreference, null));\n }\n });\n};\n\n/**\n * Server preferences can be suplied by an array of preference names,\n * or an array of objects which has the name, an optional default value and an optional type.<br>\n * When the type is set to string, a comma separated value is not converted to an array:\n *\n * @example\n * // value becomes an array [default1, default2]\n * { name: \"prefName\", defaultValue: \"default1, default2\" }\n * // value remains a string \"default1, default2\"\n * { name: \"prefName\", defaultValue: \"default1, default2\", type: \"string\" }\n *\n * @param store\n * @param serverPreferences\n */\nconst setServerPreferences = (\n store: ReduxStore,\n serverPreferences: Array<string | PreferenceValue>\n) => {\n if (Array.isArray(serverPreferences)) {\n setServerPreferencesFromArray(store, serverPreferences);\n }\n\n store.dispatch(setAllContentInDataSetting());\n store.dispatch(setLoginPreferences());\n\n if (\n preferencesProvider &&\n preferencesProvider.isStudioContext &&\n preferencesProvider.isStudioContext()\n ) {\n store.dispatch(setPreference(\"isStudioContext\", true));\n }\n};\n\n/**\n */\nconst setConfigurationTheme = (store: ReduxStore) => {\n let configTheme = null;\n\n const configFileLocation = preferencesProvider.getLayoutConfigFileLocation();\n if (typeof configFileLocation === \"string\") {\n const configFilePath = configFileLocation.startsWith(\"/\")\n ? `/resource${configFileLocation}`\n : `/resource/${configFileLocation}`;\n\n configTheme = dataFetcher.fetch(configFilePath);\n\n if (configTheme) {\n store.dispatch(setThemePreference(configTheme));\n } else {\n throw new Error(\n `Could not read theme configuration file from: ${configFilePath}`\n );\n }\n }\n};\n\n/**\n */\nconst handleErrors = (store: ReduxStore) => {\n const state = store.getState();\n\n if (\n state.error &&\n (state.error.shouldThrowOnServer ||\n !has(state.error, \"shouldThrowOnServer\"))\n ) {\n throw state.error;\n }\n};\n\n/**\n */\nconst dehydrate = (store: ReduxStore): string => {\n const state = store.getState();\n\n const filteredState = {\n ...state,\n modularui: Object.keys(state.modularui).reduce((obj, key) => {\n obj[key] = {\n status: state.modularui[key].status,\n model: state.modularui[key].model\n ? state.modularui[key].model.dehydrate()\n : void 0,\n };\n\n return obj;\n }, {}),\n };\n\n return JSON.stringify(filteredState).replace(/</g, \"\\\\u003c\");\n};\n\n/**\n */\nconst createHead = (\n sheet: any,\n UUID: string,\n helmetContext?: Object\n): Object => {\n const style = sheet.getStyleTags();\n const meta = helmetContext ? [...helmetContext.helmet.meta] : [];\n\n if (helmetContext) {\n return {\n ...helmetContext.helmet,\n style,\n meta,\n };\n }\n\n return {\n style,\n meta,\n };\n};\n\nexport {\n createReduxStore,\n setI18n,\n setServerPreferences,\n setConfigurationTheme,\n createHead,\n handleErrors,\n dehydrate,\n};\n"],"file":"serverUtil.js"}
@@ -1,11 +1,21 @@
1
1
  "use strict";
2
2
 
3
+ var _Object$keys = require("@babel/runtime-corejs3/core-js-stable/object/keys");
4
+
5
+ var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols");
6
+
7
+ var _filterInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/filter");
8
+
9
+ var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor");
10
+
11
+ var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors");
12
+
3
13
  var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
4
14
 
5
15
  Object.defineProperty(exports, "__esModule", {
6
16
  value: true
7
17
  });
8
- exports.setThemePreference = exports.setServerPreference = exports.setPreference = exports.setAllContentInDataSetting = void 0;
18
+ exports.setThemePreference = exports.setServerPreference = exports.setPreferences = exports.setPreference = exports.setLoginPreferences = exports.setAllContentInDataSetting = void 0;
9
19
 
10
20
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
11
21
 
@@ -23,6 +33,10 @@ var _Settings = require("../../constants/Settings");
23
33
 
24
34
  var _constants = require("../../constants");
25
35
 
36
+ function ownKeys(object, enumerableOnly) { var keys = _Object$keys(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; }
37
+
38
+ 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; }
39
+
26
40
  /**
27
41
  */
28
42
  var getServerPreferenceValue = function getServerPreferenceValue(preferenceName) {
@@ -77,6 +91,18 @@ var setPreference = function setPreference(propertyName) {
77
91
 
78
92
  exports.setPreference = setPreference;
79
93
 
94
+ var setPreferences = function setPreferences(preferences) {
95
+ return {
96
+ type: "SET_PREFERENCES",
97
+ payload: _objectSpread({}, preferences)
98
+ };
99
+ };
100
+ /**
101
+ */
102
+
103
+
104
+ exports.setPreferences = setPreferences;
105
+
80
106
  var setThemePreference = function setThemePreference(configTheme) {
81
107
  var themeData = {};
82
108
 
@@ -111,6 +137,20 @@ var setAllContentInDataSetting = function setAllContentInDataSetting(state) {
111
137
  (0, _Settings.setSetting)(_constants.ALL_CONTENT_IN_DATA_SETTING, !!allContentInDataSetting);
112
138
  return setPreference(_constants.ALL_CONTENT_IN_DATA_SETTING, allContentInDataSetting);
113
139
  };
140
+ /**
141
+ * Retrieves login settings from runtime preferences and sets them as setting in the preference reducer
142
+ */
143
+
114
144
 
115
145
  exports.setAllContentInDataSetting = setAllContentInDataSetting;
146
+
147
+ var setLoginPreferences = function setLoginPreferences(state) {
148
+ var _state$preferences$LO, _state$preferences$LO2, _state$preferences$LO3, _state$preferences$LO4, _loginSettings;
149
+
150
+ var loginSettings = (_loginSettings = {}, (0, _defineProperty2.default)(_loginSettings, _constants.LOGIN_PATH_SETTING, getServerPreferenceValue(_constants.LOGIN_PATH_SETTING, (_state$preferences$LO = state === null || state === void 0 ? void 0 : state.preferences[_constants.LOGIN_PATH_SETTING]) !== null && _state$preferences$LO !== void 0 ? _state$preferences$LO : "".concat(_constants.BASE, "/j_security_check"))), (0, _defineProperty2.default)(_loginSettings, _constants.LOGIN_USERNAME_SETTING, getServerPreferenceValue(_constants.LOGIN_USERNAME_SETTING, (_state$preferences$LO2 = state === null || state === void 0 ? void 0 : state.preferences[_constants.LOGIN_USERNAME_SETTING]) !== null && _state$preferences$LO2 !== void 0 ? _state$preferences$LO2 : "j_username")), (0, _defineProperty2.default)(_loginSettings, _constants.LOGIN_PASSWORD_SETTING, getServerPreferenceValue(_constants.LOGIN_PASSWORD_SETTING, (_state$preferences$LO3 = state === null || state === void 0 ? void 0 : state.preferences[_constants.LOGIN_PASSWORD_SETTING]) !== null && _state$preferences$LO3 !== void 0 ? _state$preferences$LO3 : "j_password")), (0, _defineProperty2.default)(_loginSettings, _constants.LOGOUT_PATH_SETTING, getServerPreferenceValue(_constants.LOGOUT_PATH_SETTING, (_state$preferences$LO4 = state === null || state === void 0 ? void 0 : state.preferences[_constants.LOGOUT_PATH_SETTING]) !== null && _state$preferences$LO4 !== void 0 ? _state$preferences$LO4 : "".concat(_constants.BASE, "/Logoff"))), _loginSettings);
151
+ (0, _Settings.setSettings)(loginSettings);
152
+ return setPreferences(loginSettings);
153
+ };
154
+
155
+ exports.setLoginPreferences = setLoginPreferences;
116
156
  //# sourceMappingURL=Preferences.js.map
@@ -2,14 +2,23 @@
2
2
  import { isPlainObject } from "../../utils/helpers/objects";
3
3
 
4
4
  import { JsonParseException } from "../../exceptions";
5
- import { setSettings, setSetting } from "../../constants/Settings";
5
+ import { setSetting, setSettings } from "../../constants/Settings";
6
6
 
7
7
  import type {
8
8
  PreferenceValue,
9
9
  ReduxState,
10
10
  SetPreferenceAction,
11
+ SetPreferencesAction,
11
12
  } from "../types";
12
- import { ALL_CONTENT_IN_DATA_SETTING } from "../../constants";
13
+
14
+ import {
15
+ BASE,
16
+ ALL_CONTENT_IN_DATA_SETTING,
17
+ LOGIN_PASSWORD_SETTING,
18
+ LOGIN_PATH_SETTING,
19
+ LOGIN_USERNAME_SETTING,
20
+ LOGOUT_PATH_SETTING,
21
+ } from "../../constants";
13
22
 
14
23
  /**
15
24
  */
@@ -57,6 +66,15 @@ export const setPreference = (
57
66
  },
58
67
  });
59
68
 
69
+ /**
70
+ */
71
+ export const setPreferences = (preferences: Object): SetPreferencesAction => ({
72
+ type: "SET_PREFERENCES",
73
+ payload: {
74
+ ...preferences,
75
+ },
76
+ });
77
+
60
78
  /**
61
79
  */
62
80
  export const setThemePreference = (
@@ -97,3 +115,32 @@ export const setAllContentInDataSetting = (
97
115
  setSetting(ALL_CONTENT_IN_DATA_SETTING, !!allContentInDataSetting);
98
116
  return setPreference(ALL_CONTENT_IN_DATA_SETTING, allContentInDataSetting);
99
117
  };
118
+
119
+ /**
120
+ * Retrieves login settings from runtime preferences and sets them as setting in the preference reducer
121
+ */
122
+ export const setLoginPreferences = (
123
+ state?: ReduxState
124
+ ): SetPreferencesAction => {
125
+ const loginSettings = {
126
+ [LOGIN_PATH_SETTING]: getServerPreferenceValue(
127
+ LOGIN_PATH_SETTING,
128
+ state?.preferences[LOGIN_PATH_SETTING] ?? `${BASE}/j_security_check`
129
+ ),
130
+ [LOGIN_USERNAME_SETTING]: getServerPreferenceValue(
131
+ LOGIN_USERNAME_SETTING,
132
+ state?.preferences[LOGIN_USERNAME_SETTING] ?? "j_username"
133
+ ),
134
+ [LOGIN_PASSWORD_SETTING]: getServerPreferenceValue(
135
+ LOGIN_PASSWORD_SETTING,
136
+ state?.preferences[LOGIN_PASSWORD_SETTING] ?? "j_password"
137
+ ),
138
+ [LOGOUT_PATH_SETTING]: getServerPreferenceValue(
139
+ LOGOUT_PATH_SETTING,
140
+ state?.preferences[LOGOUT_PATH_SETTING] ?? `${BASE}/Logoff`
141
+ ),
142
+ };
143
+
144
+ setSettings(loginSettings);
145
+ return setPreferences(loginSettings);
146
+ };