asab_webui_shell 25.2.8 → 26.1.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 (40) hide show
  1. package/dist/actions.js +1 -2
  2. package/dist/components/branding/BrandImage.js +2 -2
  3. package/dist/config/ConfigService.js +10 -5
  4. package/dist/containers/Alerts/index.js +14 -9
  5. package/dist/containers/Application.js +45 -50
  6. package/dist/containers/Header/ApplicationScreenTitle/ApplicationScreenTitle.js +3 -3
  7. package/dist/containers/Header/ApplicationScreenTitle/index.js +3 -3
  8. package/dist/containers/Header/Help/HelpButton.js +5 -3
  9. package/dist/containers/Header/index.js +3 -3
  10. package/dist/containers/Header/reducer.js +0 -5
  11. package/dist/containers/Navigation/index.js +7 -4
  12. package/dist/containers/Router/ApplicationRouter.js +6 -4
  13. package/dist/containers/Router/index.js +7 -4
  14. package/dist/containers/Sidebar/NavbarBrand.js +4 -4
  15. package/dist/containers/Sidebar/SidebarBottomItem.js +8 -3
  16. package/dist/containers/Sidebar/SidebarItem.js +5 -5
  17. package/dist/containers/Sidebar/index.js +7 -5
  18. package/dist/containers/Toast/ToastContainer.js +2 -2
  19. package/dist/containers/Toast/ToastContainer.jsx +2 -2
  20. package/dist/modules/about/AboutScreen.js +6 -6
  21. package/dist/modules/auth/components/SessionExpirationAlert.js +1 -2
  22. package/dist/modules/auth/header.js +7 -11
  23. package/dist/modules/auth/index.js +37 -31
  24. package/dist/modules/auth/screens/AccessControlScreen.js +5 -6
  25. package/dist/modules/auth/screens/InvitationScreen.js +1 -2
  26. package/dist/modules/i18n/dropdown.js +4 -2
  27. package/dist/modules/tenant/TenantDropdown.js +14 -17
  28. package/dist/modules/tenant/service.js +6 -4
  29. package/dist/screens/SuspenseScreen.js +1 -2
  30. package/dist/screens/UnauthorizedAccessScreen.js +2 -2
  31. package/dist/services/AttentionRequiredService.js +3 -2
  32. package/dist/services/HeaderService.js +4 -2
  33. package/dist/services/ReduxService.js +3 -8
  34. package/dist/services/TitleService.js +3 -3
  35. package/dist/theme/ThemeButton.js +8 -14
  36. package/dist/theme/ThemeReducer.js +2 -2
  37. package/dist/theme/ThemeService.js +4 -3
  38. package/package.json +5 -7
  39. package/dist/containers/Header/Preview/PreviewFlag.js +0 -35
  40. package/dist/containers/Header/Preview/PreviewService.js +0 -23
package/dist/actions.js CHANGED
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.SET_SUBTITLE = exports.SET_ROUTES = exports.SET_NAVIGATION_ITEMS = exports.SET_HELP_PATH = exports.SET_HEADER_NAVIGATION_ITEMS = exports.SET_FULLSCREEN_MODE = exports.SET_FLAG = exports.SET_ATTENTION_REQUIRED_BEACON = exports.SET_ADVANCED_MODE = exports.DEL_TOAST = exports.DEL_ALERT = exports.COLLAPSE_SIDEBAR = exports.CHANGE_CONFIG = exports.ADD_TOAST = exports.ADD_ALERT = exports.ACK_ALERT = void 0;
6
+ exports.SET_SUBTITLE = exports.SET_ROUTES = exports.SET_NAVIGATION_ITEMS = exports.SET_HELP_PATH = exports.SET_HEADER_NAVIGATION_ITEMS = exports.SET_FULLSCREEN_MODE = exports.SET_ATTENTION_REQUIRED_BEACON = exports.SET_ADVANCED_MODE = exports.DEL_TOAST = exports.DEL_ALERT = exports.COLLAPSE_SIDEBAR = exports.CHANGE_CONFIG = exports.ADD_TOAST = exports.ADD_ALERT = exports.ACK_ALERT = void 0;
7
7
  var ADD_ALERT = exports.ADD_ALERT = "asab/addAlert";
8
8
  var ACK_ALERT = exports.ACK_ALERT = "asab/ackAlert";
9
9
  var DEL_ALERT = exports.DEL_ALERT = "asab/delAlert";
@@ -11,7 +11,6 @@ var ADD_TOAST = exports.ADD_TOAST = "asab/addToast";
11
11
  var DEL_TOAST = exports.DEL_TOAST = "asab/delToast";
12
12
  var SET_HELP_PATH = exports.SET_HELP_PATH = "asab/setHelpContent";
13
13
  var SET_SUBTITLE = exports.SET_SUBTITLE = "asab/setSubtitle";
14
- var SET_FLAG = exports.SET_FLAG = "asab/setFlag";
15
14
  var SET_ADVANCED_MODE = exports.SET_ADVANCED_MODE = "asab/setAdvancedMode";
16
15
  var SET_FULLSCREEN_MODE = exports.SET_FULLSCREEN_MODE = "asab/setFullscreenMode";
17
16
  var CHANGE_CONFIG = exports.CHANGE_CONFIG = "asab/changeConfig";
@@ -29,11 +29,11 @@ Then, if selected configuration's brand image is not complete (e.g. minimized va
29
29
  ```javascript
30
30
  import { useState, useEffect } from 'react';
31
31
  import { getBrandImage } from 'asab_webui_shell';
32
- import { useSelector } from 'react-redux';
32
+ import { useAppSelector } from 'asab_webui_components';
33
33
 
34
34
  const YourCode = (props) => {
35
35
  const [ brandImage, setBrandImage ] = useState({});
36
- const theme = useSelector(state => state.theme);
36
+ const theme = useAppSelector(state => state.theme);
37
37
 
38
38
  useEffect(() => {
39
39
  setBrandImage(getBrandImage(props, theme));
@@ -83,8 +83,8 @@ class ConfigService extends _asab_webui_components.Service {
83
83
  // Dispatch customs to config store
84
84
  if (Object.keys(dynamicConfig).length > 0) {
85
85
  this.Config._dynamic_config = dynamicConfig;
86
- if (this.App.Store !== undefined) {
87
- this.Config.dispatch(this.App.Store);
86
+ if (this.App.AppStore) {
87
+ this.Config.dispatch(this.App.AppStore);
88
88
  } else {
89
89
  console.warn('Dynamic configuration has not been dispatched to application store');
90
90
  }
@@ -104,7 +104,11 @@ class ConfigService extends _asab_webui_components.Service {
104
104
  this.Config._defaults[key] = defaults[key];
105
105
  }
106
106
  }
107
- this.Config.dispatch(this.App.Store);
107
+ if (this.App.AppStore) {
108
+ this.Config.dispatch(this.App.AppStore);
109
+ } else {
110
+ console.warn('Default configuration has not been dispatched to application store');
111
+ }
108
112
  }
109
113
  }
110
114
  exports.default = ConfigService;
@@ -127,7 +131,7 @@ class Config {
127
131
 
128
132
  // Then check the local config
129
133
  if (this._local_config[key] != undefined) {
130
- this._local_config[key];
134
+ return this._local_config[key];
131
135
  }
132
136
  ;
133
137
 
@@ -139,8 +143,9 @@ class Config {
139
143
  return undefined;
140
144
  }
141
145
  dispatch(store) {
146
+ var _store$dispatch;
142
147
  var config = Object.assign({}, this._defaults, this._local_config, this._dynamic_config);
143
- store.dispatch({
148
+ store === null || store === void 0 || (_store$dispatch = store.dispatch) === null || _store$dispatch === void 0 || _store$dispatch.call(store, {
144
149
  type: _actions.CHANGE_CONFIG,
145
150
  config: config
146
151
  });
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = AlertsComponent;
7
7
  var _react = _interopRequireWildcard(require("react"));
8
- var _reactRedux = require("react-redux");
8
+ var _asab_webui_components = require("asab_webui_components");
9
9
  var _reactstrap = require("reactstrap");
10
10
  var _actions = require("../../actions");
11
11
  var _reactI18next = require("react-i18next");
@@ -13,8 +13,8 @@ require("./alerts.scss");
13
13
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
14
14
  function AlertsComponent(props) {
15
15
  var [seconds, setSeconds] = (0, _react.useState)(0);
16
- var store = props.app.Store;
17
- var alerts = (0, _reactRedux.useSelector)(state => state.alerts.alerts);
16
+ var store = props.app.AppStore;
17
+ var alerts = (0, _asab_webui_components.useAppSelector)(state => state.alerts.alerts);
18
18
  var {
19
19
  t
20
20
  } = (0, _reactI18next.useTranslation)();
@@ -30,12 +30,14 @@ function AlertsComponent(props) {
30
30
  var alert = alerts[i];
31
31
  if (alert.expire < now) {
32
32
  if (alert.acked) {
33
- store.dispatch({
33
+ var _store$dispatch;
34
+ store === null || store === void 0 || (_store$dispatch = store.dispatch) === null || _store$dispatch === void 0 || _store$dispatch.call(store, {
34
35
  type: _actions.DEL_ALERT,
35
36
  key: alert.key
36
37
  });
37
38
  } else {
38
- store.dispatch({
39
+ var _store$dispatch2;
40
+ store === null || store === void 0 || (_store$dispatch2 = store.dispatch) === null || _store$dispatch2 === void 0 || _store$dispatch2.call(store, {
39
41
  type: _actions.ACK_ALERT,
40
42
  key: alert.key
41
43
  });
@@ -57,10 +59,13 @@ function AlertsComponent(props) {
57
59
  className: "shadow alerts-style d-print-none",
58
60
  fade: true,
59
61
  isOpen: !alert.acked,
60
- toggle: () => store.dispatch({
61
- type: _actions.ACK_ALERT,
62
- key: alert.key
63
- })
62
+ toggle: () => {
63
+ var _store$dispatch3;
64
+ return store === null || store === void 0 || (_store$dispatch3 = store.dispatch) === null || _store$dispatch3 === void 0 ? void 0 : _store$dispatch3.call(store, {
65
+ type: _actions.ACK_ALERT,
66
+ key: alert.key
67
+ });
68
+ }
64
69
  }, alert.shouldBeTranslated ? t(alert.message) : alert.message);
65
70
  } else {
66
71
  return alert.component(alert, store);
@@ -8,8 +8,6 @@ exports.default = void 0;
8
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
10
  var _react = _interopRequireWildcard(require("react"));
11
- var _reactRedux = require("react-redux");
12
- var _redux = require("redux");
13
11
  var _axios = _interopRequireDefault(require("axios"));
14
12
  var _asab_webui_components = require("asab_webui_components");
15
13
  var _Header = _interopRequireDefault(require("./Header"));
@@ -36,7 +34,6 @@ var _ThemeService = _interopRequireDefault(require("../theme/ThemeService"));
36
34
  var _BrandingService = _interopRequireDefault(require("../services/BrandingService"));
37
35
  var _TitleService = _interopRequireDefault(require("../services/TitleService"));
38
36
  var _HelpService = _interopRequireDefault(require("./Header/Help/HelpService"));
39
- var _PreviewService = _interopRequireDefault(require("./Header/Preview/PreviewService"));
40
37
  var _AccessDeniedCard = _interopRequireDefault(require("../modules/tenant/access/AccessDeniedCard"));
41
38
  var _ApplicationRouter = _interopRequireDefault(require("./Router/ApplicationRouter"));
42
39
  var _SuspenseScreen = _interopRequireDefault(require("../screens/SuspenseScreen"));
@@ -84,11 +81,37 @@ class Application extends _react.Component {
84
81
 
85
82
  constructor(props) {
86
83
  super(props);
84
+
85
+ // Global AppStore variables
86
+ var appStore = {
87
+ state: null,
88
+ dispatch: null
89
+ }; // Create the store object (fields stays writable so the provider can update them)
90
+ Object.seal(appStore); // Lock the shape, so no adding/removing properties (but existing fields remain writable)
91
+ Object.defineProperty(this, 'AppStore', {
92
+ value: appStore,
93
+ writable: false,
94
+ // Can't reassign this.AppStore
95
+ configurable: false,
96
+ // Can't redefine/delete the property
97
+ enumerable: true // Makes it show up in Object.keys/console
98
+ }); // Define a read-only, non-configurable property on the instance
99
+
87
100
  this.Modules = [];
88
101
  this.Services = {};
89
102
  this.ReduxService = new _ReduxService.default(this, "ReduxService");
90
103
  this.ConfigService = new _ConfigService.default(this, "ConfigService");
91
104
  this.Config = this.ConfigService.Config;
105
+
106
+ // Register reducers which are not part of any app service
107
+ this.ReduxService.addReducer("attentionrequired", _reducer8.default);
108
+ this.ReduxService.addReducer("alerts", _reducer.default);
109
+ this.ReduxService.addReducer("advmode", _reducer7.default);
110
+ this.ReduxService.addReducer("fullscreenmode", _reducer6.default);
111
+ this.ReduxService.addReducer("header", _reducer3.default);
112
+ this.ReduxService.addReducer("sidebar", _reducer2.default);
113
+ this.ReduxService.addReducer("navigation", _reducer4.default);
114
+ this.ReduxService.addReducer("router", _reducer5.default);
92
115
  this.Router = new _Router.default(this);
93
116
  this.Navigation = new _Navigation.default(this);
94
117
  this.SplashscreenRequestors = new Set(); // If not empty, the splash screen will be rendered
@@ -100,15 +123,6 @@ class Application extends _react.Component {
100
123
  this.BrandingService = new _BrandingService.default(this, "BrandingService");
101
124
  this.TitleService = new _TitleService.default(this, "TitleService");
102
125
  this.HelpService = new _HelpService.default(this, "HelpService");
103
- this.PreviewService = new _PreviewService.default(this, "PreviewService");
104
- this.ReduxService.addReducer("attentionrequired", _reducer8.default);
105
- this.ReduxService.addReducer("alerts", _reducer.default);
106
- this.ReduxService.addReducer("advmode", _reducer7.default);
107
- this.ReduxService.addReducer("fullscreenmode", _reducer6.default);
108
- this.ReduxService.addReducer("header", _reducer3.default);
109
- this.ReduxService.addReducer("sidebar", _reducer2.default);
110
- this.ReduxService.addReducer("navigation", _reducer4.default);
111
- this.ReduxService.addReducer("router", _reducer5.default);
112
126
 
113
127
  // The application can provide a list of keys that should be automatically parsed as BigInt, when received from the server in Axios call
114
128
  // This is important to preserve 64bit numbers from the server such as IP addresses, timestamps etc.
@@ -119,10 +133,7 @@ class Application extends _react.Component {
119
133
  // If more than zero, some networking activity is happening
120
134
  splashscreenRequestors: 0
121
135
  };
122
- var composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || _redux.compose;
123
- this.Store = (0, _redux.createStore)((0, _redux.combineReducers)(this.ReduxService.Reducers), composeEnhancers((0, _redux.applyMiddleware)()));
124
136
  this.ConfigService.addDefaults(props.configdefaults);
125
- this.Config.dispatch(this.Store);
126
137
  this.addSplashScreenRequestor(this);
127
138
  this.state.splashscreenRequestors = this.SplashscreenRequestors.size;
128
139
  var that = this;
@@ -164,8 +175,6 @@ class Application extends _react.Component {
164
175
  var _mod = new modloaded.default(that); // We expect 'export default class ...Module extends Module'
165
176
  that.Modules.push(_mod);
166
177
  }
167
- that.Store.replaceReducer((0, _redux.combineReducers)(that.ReduxService.Reducers));
168
- that.Config.dispatch(that.Store);
169
178
  }
170
179
 
171
180
  // Initialize statically imported modules
@@ -180,9 +189,6 @@ class Application extends _react.Component {
180
189
  return _modules_init.apply(this, arguments);
181
190
  }
182
191
  modules_init().then(/*#__PURE__*/(0, _asyncToGenerator2.default)(function* () {
183
- that.Store.replaceReducer((0, _redux.combineReducers)(that.ReduxService.Reducers));
184
- that.Config.dispatch(that.Store);
185
-
186
192
  // Initialize all services
187
193
  for (var i in that.Services) {
188
194
  var ret = that.Services[i].initialize();
@@ -190,7 +196,6 @@ class Application extends _react.Component {
190
196
  // Transform result in the promise
191
197
  // It unifies synchronous and asynchronous `initialize()` calls
192
198
  yield Promise.resolve(ret);
193
- that.Config.dispatch(that.Store);
194
199
  }
195
200
  that.removeSplashScreenRequestor(that);
196
201
  }));
@@ -518,10 +523,11 @@ class Application extends _react.Component {
518
523
  * success
519
524
  */
520
525
  addAlert(level, message) {
526
+ var _this$AppStore$dispat, _this$AppStore;
521
527
  var expire = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 5;
522
528
  var shouldBeTranslated = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
523
529
  var component = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;
524
- this.Store.dispatch({
530
+ (_this$AppStore$dispat = (_this$AppStore = this.AppStore).dispatch) === null || _this$AppStore$dispat === void 0 || _this$AppStore$dispat.call(_this$AppStore, {
525
531
  type: _actions.ADD_ALERT,
526
532
  level: level,
527
533
  message: message,
@@ -543,7 +549,7 @@ class Application extends _react.Component {
543
549
  addAlertFromException will always use "danger" color as its background and the full exception will be printed into the console
544
550
  */
545
551
  addAlertFromException(exception, message) {
546
- var _exception$response;
552
+ var _exception$response, _this$AppStore$dispat2, _this$AppStore2;
547
553
  var expire = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 30;
548
554
  var shouldBeTranslated = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
549
555
  var component = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;
@@ -580,7 +586,7 @@ class Application extends _react.Component {
580
586
  }, exception.message));
581
587
  }
582
588
  }
583
- this.Store.dispatch({
589
+ (_this$AppStore$dispat2 = (_this$AppStore2 = this.AppStore).dispatch) === null || _this$AppStore$dispat2 === void 0 || _this$AppStore$dispat2.call(_this$AppStore2, {
584
590
  type: _actions.ADD_ALERT,
585
591
  level: "danger",
586
592
  message: exceptionMessage,
@@ -590,11 +596,13 @@ class Application extends _react.Component {
590
596
  });
591
597
  }
592
598
  setAdvancedMode(enabled) {
599
+ var _this$AppStore$dispat3, _this$AppStore3;
593
600
  if (enabled === 0) {
594
- var state = this.Store.getState();
595
- enabled = !state.advmode.enabled;
601
+ var _state$advmode;
602
+ var state = this.AppStore.state;
603
+ enabled = !(state !== null && state !== void 0 && (_state$advmode = state.advmode) !== null && _state$advmode !== void 0 && _state$advmode.enabled);
596
604
  }
597
- this.Store.dispatch({
605
+ (_this$AppStore$dispat3 = (_this$AppStore3 = this.AppStore).dispatch) === null || _this$AppStore$dispat3 === void 0 || _this$AppStore$dispat3.call(_this$AppStore3, {
598
606
  type: _actions.SET_ADVANCED_MODE,
599
607
  enabled: enabled
600
608
  });
@@ -610,11 +618,12 @@ class Application extends _react.Component {
610
618
  It takes a parameter called "status" to indicate whether to turn the full-screen mode on or off.
611
619
  */
612
620
  setFullScreenMode(status) {
613
- var state = this.Store.getState();
614
- if (status === 'on' && state.fullscreenmode.status === 'on') {
621
+ var _state$fullscreenmode, _this$AppStore$dispat4, _this$AppStore4;
622
+ var state = this.AppStore.state;
623
+ if (status === 'on' && (state === null || state === void 0 || (_state$fullscreenmode = state.fullscreenmode) === null || _state$fullscreenmode === void 0 ? void 0 : _state$fullscreenmode.status) === 'on') {
615
624
  status = 'off';
616
625
  }
617
- this.Store.dispatch({
626
+ (_this$AppStore$dispat4 = (_this$AppStore4 = this.AppStore).dispatch) === null || _this$AppStore$dispat4 === void 0 || _this$AppStore$dispat4.call(_this$AppStore4, {
618
627
  type: _actions.SET_FULLSCREEN_MODE,
619
628
  status: status
620
629
  });
@@ -626,29 +635,15 @@ class Application extends _react.Component {
626
635
  this.addAlert('info', 'ASABApplicationContainer|Fullscreen mode turned off', 30, true);
627
636
  }
628
637
  }
629
- setFlag(name) {
630
- (0, _react.useEffect)(() => {
631
- this.Store.dispatch({
632
- type: _actions.SET_FLAG,
633
- flag: name
634
- });
635
- return () => {
636
- this.Store.dispatch({
637
- type: _actions.SET_FLAG,
638
- flag: undefined
639
- });
640
- };
641
- }, [name]);
642
- }
643
638
  render() {
644
639
  if (this.state.splashscreenRequestors > 0) return (
645
640
  /*#__PURE__*/
646
641
  // When splashscreenRequestors is requested, the application is not rendered.
647
642
  // This prevents race conditions during application init time.
648
- _react.default.createElement(_asab_webui_components.PubSubProvider, {
643
+ _react.default.createElement(_asab_webui_components.AppStoreProvider, {
644
+ app: this
645
+ }, /*#__PURE__*/_react.default.createElement(_asab_webui_components.PubSubProvider, {
649
646
  app: this
650
- }, /*#__PURE__*/_react.default.createElement(_reactRedux.Provider, {
651
- store: this.Store
652
647
  }, /*#__PURE__*/_react.default.createElement(_react.Suspense, {
653
648
  fallback: /*#__PURE__*/_react.default.createElement("div", null)
654
649
  }, /*#__PURE__*/_react.default.createElement(_Alerts.default, {
@@ -659,10 +654,10 @@ class Application extends _react.Component {
659
654
  app: this
660
655
  })))))
661
656
  );
662
- return /*#__PURE__*/_react.default.createElement(_asab_webui_components.PubSubProvider, {
657
+ return /*#__PURE__*/_react.default.createElement(_asab_webui_components.AppStoreProvider, {
658
+ app: this
659
+ }, /*#__PURE__*/_react.default.createElement(_asab_webui_components.PubSubProvider, {
663
660
  app: this
664
- }, /*#__PURE__*/_react.default.createElement(_reactRedux.Provider, {
665
- store: this.Store
666
661
  }, /*#__PURE__*/_react.default.createElement(_react.Suspense, {
667
662
  fallback: /*#__PURE__*/_react.default.createElement("div", null)
668
663
  }, /*#__PURE__*/_react.default.createElement("div", {
@@ -5,17 +5,17 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
  var _react = _interopRequireWildcard(require("react"));
8
- var _reactRedux = require("react-redux");
9
8
  var _reactI18next = require("react-i18next");
9
+ var _asab_webui_components = require("asab_webui_components");
10
10
  require("./ApplicationScreenTitle.scss");
11
11
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
12
12
  var ApplicationScreenTitle = props => {
13
13
  var _props$routes;
14
- var subtitle = (0, _reactRedux.useSelector)(state => {
14
+ var subtitle = (0, _asab_webui_components.useAppSelector)(state => {
15
15
  var _state$header;
16
16
  return (_state$header = state.header) === null || _state$header === void 0 ? void 0 : _state$header.subtitle;
17
17
  });
18
- var title = (0, _reactRedux.useSelector)(state => {
18
+ var title = (0, _asab_webui_components.useAppSelector)(state => {
19
19
  var _state$config;
20
20
  return (_state$config = state.config) === null || _state$config === void 0 ? void 0 : _state$config.title;
21
21
  });
@@ -6,13 +6,13 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.default = void 0;
8
8
  var _react = _interopRequireDefault(require("react"));
9
- var _reactRedux = require("react-redux");
9
+ var _asab_webui_components = require("asab_webui_components");
10
10
  var _reactRouterDom = require("react-router-dom");
11
11
  var _ApplicationScreenTitle = _interopRequireDefault(require("./ApplicationScreenTitle"));
12
12
  var ApplicationTitleRouter = props => {
13
- var routes = (0, _reactRedux.useSelector)(state => {
13
+ var routes = (0, _asab_webui_components.useAppSelector)(state => {
14
14
  var _state$router;
15
- return (_state$router = state.router) === null || _state$router === void 0 ? void 0 : _state$router.routes;
15
+ return ((_state$router = state.router) === null || _state$router === void 0 ? void 0 : _state$router.routes) || [];
16
16
  });
17
17
  var filteredRoutes = filterRoutesByMatch(routes);
18
18
  return /*#__PURE__*/_react.default.createElement(_ApplicationScreenTitle.default, {
@@ -6,9 +6,8 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = HelpButton;
7
7
  var _react = _interopRequireWildcard(require("react"));
8
8
  var _reactI18next = require("react-i18next");
9
- var _reactRedux = require("react-redux");
10
- var _reactstrap = require("reactstrap");
11
9
  var _asab_webui_components = require("asab_webui_components");
10
+ var _reactstrap = require("reactstrap");
12
11
  require("./HelpButton.scss");
13
12
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
14
13
  function HelpButton() {
@@ -17,7 +16,10 @@ function HelpButton() {
17
16
  } = (0, _reactI18next.useTranslation)();
18
17
  var [modal, setModal] = (0, _react.useState)(false);
19
18
  var [isIframeLoading, setIsIframeLoading] = (0, _react.useState)(true);
20
- var path = (0, _reactRedux.useSelector)(state => state === null || state === void 0 ? void 0 : state.header.helpPath);
19
+ var path = (0, _asab_webui_components.useAppSelector)(state => {
20
+ var _state$header;
21
+ return state === null || state === void 0 || (_state$header = state.header) === null || _state$header === void 0 ? void 0 : _state$header.helpPath;
22
+ });
21
23
  if (path == undefined) return null;
22
24
  var toggle = () => {
23
25
  setModal(prev => {
@@ -8,13 +8,13 @@ exports.default = Header;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
9
  var _react = _interopRequireDefault(require("react"));
10
10
  var _reactstrap = require("reactstrap");
11
- var _reactRedux = require("react-redux");
11
+ var _asab_webui_components = require("asab_webui_components");
12
12
  var _ApplicationScreenTitle = _interopRequireDefault(require("./ApplicationScreenTitle"));
13
13
  require("./header.scss");
14
14
  function Header(props) {
15
- var headerNavItems = (0, _reactRedux.useSelector)(state => {
15
+ var headerNavItems = (0, _asab_webui_components.useAppSelector)(state => {
16
16
  var _state$header;
17
- return (_state$header = state.header) === null || _state$header === void 0 ? void 0 : _state$header.headerNavItems;
17
+ return state === null || state === void 0 || (_state$header = state.header) === null || _state$header === void 0 ? void 0 : _state$header.headerNavItems;
18
18
  });
19
19
  return /*#__PURE__*/_react.default.createElement("header", {
20
20
  id: "app-header"
@@ -12,7 +12,6 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
12
12
  var initialState = {
13
13
  helpPath: undefined,
14
14
  subtitle: undefined,
15
- flag: undefined,
16
15
  headerNavItems: []
17
16
  };
18
17
  var _default = exports.default = function _default() {
@@ -27,10 +26,6 @@ var _default = exports.default = function _default() {
27
26
  return _objectSpread(_objectSpread({}, state), {}, {
28
27
  subtitle: action.subtitle
29
28
  });
30
- case _actions.SET_FLAG:
31
- return _objectSpread(_objectSpread({}, state), {}, {
32
- flag: action.flag
33
- });
34
29
  case _actions.SET_HEADER_NAVIGATION_ITEMS:
35
30
  // Sort the navigation items
36
31
  action.headerNavItems.sort((a, b) => {
@@ -37,10 +37,13 @@ class Navigation extends _react.Component {
37
37
  // If no existing item, push the new item
38
38
  this.Items.push(item);
39
39
  }
40
- this.App.Store.dispatch({
41
- type: _actions.SET_NAVIGATION_ITEMS,
42
- navItems: this.Items
43
- });
40
+ if (this.App.AppStore) {
41
+ var _this$App$AppStore$di, _this$App$AppStore;
42
+ (_this$App$AppStore$di = (_this$App$AppStore = this.App.AppStore).dispatch) === null || _this$App$AppStore$di === void 0 || _this$App$AppStore$di.call(_this$App$AppStore, {
43
+ type: _actions.SET_NAVIGATION_ITEMS,
44
+ navItems: this.Items
45
+ });
46
+ }
44
47
  }
45
48
  }
46
49
  exports.default = Navigation;
@@ -7,8 +7,8 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.default = ApplicationRouter;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
9
  var _react = _interopRequireWildcard(require("react"));
10
- var _reactRedux = require("react-redux");
11
10
  var _reactRouterDom = require("react-router-dom");
11
+ var _asab_webui_components = require("asab_webui_components");
12
12
  var _actions = require("../../actions");
13
13
  var _RouteErrorHandler = _interopRequireDefault(require("../RouteErrorHandler"));
14
14
  var _UnauthorizedAccessScreen = _interopRequireDefault(require("../../screens/UnauthorizedAccessScreen"));
@@ -17,7 +17,7 @@ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r
17
17
  // TODO: properly isolate authorization screen from the Application (should be injected when needed and only when AuthModule is enabled)
18
18
 
19
19
  function ApplicationRouter(props) {
20
- var routes = (0, _reactRedux.useSelector)(state => {
20
+ var routes = (0, _asab_webui_components.useAppSelector)(state => {
21
21
  var _state$router;
22
22
  return (_state$router = state.router) === null || _state$router === void 0 ? void 0 : _state$router.routes;
23
23
  });
@@ -42,11 +42,13 @@ function ApplicationRouter(props) {
42
42
  }));
43
43
  }
44
44
  function RouteRenderer(props) {
45
- var resources = (0, _reactRedux.useSelector)(state => {
45
+ var resources = (0, _asab_webui_components.useAppSelector)(state => {
46
46
  var _state$auth;
47
47
  return (_state$auth = state.auth) !== null && _state$auth !== void 0 && _state$auth.resources ? state.auth.resources : [];
48
48
  });
49
- var dispatch = (0, _reactRedux.useDispatch)();
49
+ var {
50
+ dispatch
51
+ } = (0, _asab_webui_components.useAppStore)();
50
52
  var defaultHelp = props.app.Config.get("help");
51
53
 
52
54
  // Set up and dispatch help content
@@ -25,10 +25,13 @@ class Router extends _react.Component {
25
25
  }
26
26
  */
27
27
  this.Routes.push(route);
28
- this.App.Store.dispatch({
29
- type: _actions.SET_ROUTES,
30
- routes: this.Routes
31
- });
28
+ if (this.App.AppStore) {
29
+ var _this$App$AppStore$di, _this$App$AppStore;
30
+ (_this$App$AppStore$di = (_this$App$AppStore = this.App.AppStore).dispatch) === null || _this$App$AppStore$di === void 0 || _this$App$AppStore$di.call(_this$App$AppStore, {
31
+ type: _actions.SET_ROUTES,
32
+ routes: this.Routes
33
+ });
34
+ }
32
35
  }
33
36
  }
34
37
  exports.default = Router;
@@ -5,19 +5,19 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
  var _react = _interopRequireWildcard(require("react"));
8
- var _reactRedux = require("react-redux");
9
8
  var _reactRouterDom = require("react-router-dom");
10
9
  var _BrandImage = require("../../components/branding/BrandImage");
10
+ var _asab_webui_components = require("asab_webui_components");
11
11
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
12
12
  var NavbarBrand = props => {
13
13
  var _brandImage$href;
14
14
  var [brandImage, setBrandImage] = (0, _react.useState)({});
15
- var theme = (0, _reactRedux.useSelector)(state => state.theme);
16
- var title = (0, _reactRedux.useSelector)(state => {
15
+ var theme = (0, _asab_webui_components.useAppSelector)(state => state.theme);
16
+ var title = (0, _asab_webui_components.useAppSelector)(state => {
17
17
  var _state$config;
18
18
  return (_state$config = state.config) === null || _state$config === void 0 ? void 0 : _state$config.title;
19
19
  });
20
- var isSidebarCollapsed = (0, _reactRedux.useSelector)(state => {
20
+ var isSidebarCollapsed = (0, _asab_webui_components.useAppSelector)(state => {
21
21
  var _state$sidebar;
22
22
  return (_state$sidebar = state.sidebar) === null || _state$sidebar === void 0 ? void 0 : _state$sidebar.isSidebarCollapsed;
23
23
  });
@@ -8,17 +8,22 @@ exports.default = void 0;
8
8
  var _react = _interopRequireDefault(require("react"));
9
9
  var _reactRouterDom = require("react-router-dom");
10
10
  var _reactI18next = require("react-i18next");
11
- var _reactRedux = require("react-redux");
11
+ var _asab_webui_components = require("asab_webui_components");
12
12
  var _actions = require("../../actions");
13
13
  var SidebarBottomItem = _ref => {
14
14
  var {
15
15
  sidebarLogo
16
16
  } = _ref;
17
- var isSidebarCollapsed = (0, _reactRedux.useSelector)(state => state.sidebar.isSidebarCollapsed);
17
+ var isSidebarCollapsed = (0, _asab_webui_components.useAppSelector)(state => {
18
+ var _state$sidebar;
19
+ return state === null || state === void 0 || (_state$sidebar = state.sidebar) === null || _state$sidebar === void 0 ? void 0 : _state$sidebar.isSidebarCollapsed;
20
+ });
18
21
  var {
19
22
  t
20
23
  } = (0, _reactI18next.useTranslation)();
21
- var dispatch = (0, _reactRedux.useDispatch)();
24
+ var {
25
+ dispatch
26
+ } = (0, _asab_webui_components.useAppStore)();
22
27
 
23
28
  // Handle toggle of the sidebar's collapsed state
24
29
  var onCollapse = event => {
@@ -9,7 +9,6 @@ var _react = _interopRequireWildcard(require("react"));
9
9
  var _reactRouter = require("react-router");
10
10
  var _reactRouterDom = require("react-router-dom");
11
11
  var _reactI18next = require("react-i18next");
12
- var _reactRedux = require("react-redux");
13
12
  var _reactstrap = require("reactstrap");
14
13
  var _asab_webui_components = require("asab_webui_components");
15
14
  var _SidebarIcon = _interopRequireDefault(require("./SidebarIcon"));
@@ -28,11 +27,11 @@ var SidebarItem = _ref => {
28
27
  var {
29
28
  t
30
29
  } = (0, _reactI18next.useTranslation)();
31
- var isSidebarCollapsed = (0, _reactRedux.useSelector)(state => {
30
+ var isSidebarCollapsed = (0, _asab_webui_components.useAppSelector)(state => {
32
31
  var _state$sidebar;
33
32
  return (_state$sidebar = state.sidebar) === null || _state$sidebar === void 0 ? void 0 : _state$sidebar.isSidebarCollapsed;
34
33
  });
35
- var attentionRequired = (0, _reactRedux.useSelector)(state => {
34
+ var attentionRequired = (0, _asab_webui_components.useAppSelector)(state => {
36
35
  var _state$attentionrequi;
37
36
  return (_state$attentionrequi = state.attentionrequired) === null || _state$attentionrequi === void 0 ? void 0 : _state$attentionrequi.beacon;
38
37
  });
@@ -41,6 +40,7 @@ var SidebarItem = _ref => {
41
40
  // Attention requred flag
42
41
  var itemBeacon = beacon ? beacon["beacon.".concat(lowercasedItemName)] : attentionRequired["beacon.".concat(lowercasedItemName)];
43
42
  (0, _react.useEffect)(() => {
43
+ // TODO: refactor the handling of active and open states, since it does not behave as expected in some cases
44
44
  if (isOpen && !isActive) {
45
45
  setOpen(false);
46
46
  }
@@ -88,11 +88,11 @@ var SidebarCollapsibleItem = _ref2 => {
88
88
  var {
89
89
  t
90
90
  } = (0, _reactI18next.useTranslation)();
91
- var isSidebarCollapsed = (0, _reactRedux.useSelector)(state => {
91
+ var isSidebarCollapsed = (0, _asab_webui_components.useAppSelector)(state => {
92
92
  var _state$sidebar2;
93
93
  return (_state$sidebar2 = state.sidebar) === null || _state$sidebar2 === void 0 ? void 0 : _state$sidebar2.isSidebarCollapsed;
94
94
  });
95
- var attentionRequired = (0, _reactRedux.useSelector)(state => {
95
+ var attentionRequired = (0, _asab_webui_components.useAppSelector)(state => {
96
96
  var _state$attentionrequi2;
97
97
  return (_state$attentionrequi2 = state.attentionrequired) === null || _state$attentionrequi2 === void 0 ? void 0 : _state$attentionrequi2.beacon;
98
98
  });