asab_webui_shell 25.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 (90) hide show
  1. package/CHANGELOG.md +218 -0
  2. package/LICENSE +28 -0
  3. package/README.md +3 -0
  4. package/dist/actions.js +22 -0
  5. package/dist/components/branding/BrandImage.js +72 -0
  6. package/dist/components/locationReplace.js +51 -0
  7. package/dist/config/ConfigReducer.js +22 -0
  8. package/dist/config/ConfigService.js +169 -0
  9. package/dist/containers/AdvancedMode/reducer.js +28 -0
  10. package/dist/containers/Alerts/alerts.scss +9 -0
  11. package/dist/containers/Alerts/index.js +81 -0
  12. package/dist/containers/Alerts/reducer.js +68 -0
  13. package/dist/containers/Application.js +773 -0
  14. package/dist/containers/Application.scss +104 -0
  15. package/dist/containers/AttentionRequired/reducer.js +30 -0
  16. package/dist/containers/FullscreenMode/reducer.js +28 -0
  17. package/dist/containers/Header/ApplicationScreenTitle/ApplicationScreenTitle.js +47 -0
  18. package/dist/containers/Header/ApplicationScreenTitle/ApplicationScreenTitle.scss +8 -0
  19. package/dist/containers/Header/ApplicationScreenTitle/index.js +31 -0
  20. package/dist/containers/Header/Help/HelpButton.js +58 -0
  21. package/dist/containers/Header/Help/HelpButton.scss +15 -0
  22. package/dist/containers/Header/Help/HelpService.js +34 -0
  23. package/dist/containers/Header/Preview/PreviewFlag.js +34 -0
  24. package/dist/containers/Header/Preview/PreviewService.js +34 -0
  25. package/dist/containers/Header/header.scss +24 -0
  26. package/dist/containers/Header/index.js +39 -0
  27. package/dist/containers/Header/reducer.js +53 -0
  28. package/dist/containers/Navigation/index.js +66 -0
  29. package/dist/containers/Navigation/reducer.js +56 -0
  30. package/dist/containers/RouteErrorHandler/ErrorContainer.js +46 -0
  31. package/dist/containers/RouteErrorHandler/index.js +80 -0
  32. package/dist/containers/Router/ApplicationRouter.js +78 -0
  33. package/dist/containers/Router/index.js +50 -0
  34. package/dist/containers/Router/reducer.js +28 -0
  35. package/dist/containers/Sidebar/NavbarBrand.js +59 -0
  36. package/dist/containers/Sidebar/SidebarBottomItem.js +55 -0
  37. package/dist/containers/Sidebar/SidebarIcon.js +21 -0
  38. package/dist/containers/Sidebar/SidebarItem.js +209 -0
  39. package/dist/containers/Sidebar/SidebarItemRenderer.js +30 -0
  40. package/dist/containers/Sidebar/index.js +86 -0
  41. package/dist/containers/Sidebar/reducer.js +35 -0
  42. package/dist/containers/Sidebar/sidebar.scss +176 -0
  43. package/dist/containers/Sidepanel/Sidepanel.js +60 -0
  44. package/dist/containers/Sidepanel/Sidepanel.scss +20 -0
  45. package/dist/containers/Toast/ToastComponent.js +31 -0
  46. package/dist/containers/Toast/ToastComponent.jsx +28 -0
  47. package/dist/containers/Toast/ToastContainer.js +80 -0
  48. package/dist/containers/Toast/ToastContainer.jsx +59 -0
  49. package/dist/containers/Toast/reducer.js +55 -0
  50. package/dist/containers/Toast/reducer.jsx +45 -0
  51. package/dist/index.js +48 -0
  52. package/dist/modules/about/AboutScreen.js +84 -0
  53. package/dist/modules/about/index.js +41 -0
  54. package/dist/modules/auth/actions.js +11 -0
  55. package/dist/modules/auth/api.js +214 -0
  56. package/dist/modules/auth/components/SessionExpirationAlert.js +35 -0
  57. package/dist/modules/auth/header.js +109 -0
  58. package/dist/modules/auth/header.scss +9 -0
  59. package/dist/modules/auth/index.js +761 -0
  60. package/dist/modules/auth/reducer.js +36 -0
  61. package/dist/modules/auth/screens/AccessControlScreen.js +78 -0
  62. package/dist/modules/auth/screens/InvitationScreen.js +161 -0
  63. package/dist/modules/i18n/actions.js +7 -0
  64. package/dist/modules/i18n/dropdown.js +77 -0
  65. package/dist/modules/i18n/index.js +44 -0
  66. package/dist/modules/i18n/reducer.js +26 -0
  67. package/dist/modules/i18n/service.js +158 -0
  68. package/dist/modules/tenant/TenantDropdown.js +53 -0
  69. package/dist/modules/tenant/access/AccessDeniedCard.js +107 -0
  70. package/dist/modules/tenant/access/AccessDeniedCard.scss +6 -0
  71. package/dist/modules/tenant/actions.js +10 -0
  72. package/dist/modules/tenant/index.js +41 -0
  73. package/dist/modules/tenant/reducer.js +26 -0
  74. package/dist/modules/tenant/service.js +228 -0
  75. package/dist/screens/InvalidRouteScreen.js +30 -0
  76. package/dist/screens/InvalidRouteScreen.scss +19 -0
  77. package/dist/screens/SuspenseScreen.js +43 -0
  78. package/dist/screens/SuspenseScreen.scss +9 -0
  79. package/dist/screens/UnauthorizedAccessScreen.js +79 -0
  80. package/dist/screens/UnauthorizedAccessScreen.scss +19 -0
  81. package/dist/services/AttentionRequiredService.js +169 -0
  82. package/dist/services/BrandingService.js +104 -0
  83. package/dist/services/HeaderService.js +84 -0
  84. package/dist/services/ReduxService.js +25 -0
  85. package/dist/services/TitleService.js +45 -0
  86. package/dist/theme/ThemeButton.js +39 -0
  87. package/dist/theme/ThemeReducer.js +20 -0
  88. package/dist/theme/ThemeService.js +52 -0
  89. package/dist/theme/actions.js +7 -0
  90. package/package.json +41 -0
@@ -0,0 +1,104 @@
1
+ #app {
2
+ height: 100vh;
3
+ overflow: hidden; /* This disable visible scroll of the whole app container for some browsers (Chrome, etc.) - Dont remove it unless handled different way */
4
+
5
+ display: grid;
6
+ grid-template-columns: 150px 1fr;
7
+ grid-template-rows: 65px 1fr;
8
+ grid-column-gap: 0px;
9
+ grid-row-gap: 0px;
10
+
11
+ transition: all 0.2s linear; // This is speed of sidebar collapsing
12
+
13
+ > #app-brandimage {
14
+ grid-area: 1 / 1 / 2 / 2;
15
+ }
16
+
17
+ > #app-header {
18
+ grid-area: 1 / 2 / 2 / 4;
19
+ }
20
+
21
+ > #app-sidebar {
22
+ grid-area: 2 / 1 / 3 / 2;
23
+ }
24
+
25
+ > #app-main {
26
+ grid-area: 2 / 2 / 4 / 3;
27
+ overflow: auto;
28
+ }
29
+
30
+ > #app-sidepanel {
31
+ grid-area: 2/ 3 / 4 / 4;
32
+ }
33
+
34
+ #app-networking-indicator {
35
+ position: fixed;
36
+ z-index: 2000;
37
+
38
+ width: 100%;
39
+ height: 7px;
40
+ transition: all 0.1s linear;
41
+
42
+ opacity: 100%;
43
+
44
+ &.transparent {
45
+ opacity: 0%;
46
+ }
47
+ }
48
+ }
49
+
50
+ body {
51
+ &.fullscreen {
52
+ #app-header > ul > li:not(.fullscreen-visible) {
53
+ display: none;
54
+ }
55
+
56
+ #app-sidebar {
57
+ opacity: 0;
58
+ transform: translateX(-100%);
59
+ }
60
+
61
+ #app-main {
62
+ grid-area: 2/1/4/4 !important;
63
+ }
64
+ }
65
+
66
+ #app-sidebar {
67
+ transition: opacity 0.5s ease, transform 0.5s ease;
68
+ opacity: 1;
69
+ transform: translateX(0);
70
+ }
71
+ }
72
+
73
+ // This is for printing
74
+
75
+ @media print {
76
+
77
+ #app {
78
+ grid-template-columns: 0px 1fr;
79
+ grid-template-rows: 0px 1fr;
80
+ grid-column-gap: 0px;
81
+ grid-row-gap: 0px;
82
+
83
+ // No brand image when printing
84
+ > #app-brandimage {
85
+ display: none;
86
+ }
87
+
88
+ // No header when printing
89
+ > #app-header {
90
+ display: none;
91
+ }
92
+
93
+ // No sidebar when printing
94
+ > #app-sidebar {
95
+ display: none;
96
+ }
97
+
98
+ > #app-main {
99
+ overflow-y: visible; // We want the full content to be displayed
100
+ }
101
+
102
+ }
103
+
104
+ }
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports["default"] = attentionRequiredReducer;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var _actions = require("../../actions");
10
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
11
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
12
+ var initialState = {
13
+ beacon: {}
14
+ };
15
+
16
+ // Reducer for attention required, returning beacon
17
+ function attentionRequiredReducer() {
18
+ var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
19
+ var action = arguments.length > 1 ? arguments[1] : undefined;
20
+ switch (action.type) {
21
+ case _actions.SET_ATTENTION_REQUIRED_BEACON:
22
+ {
23
+ return _objectSpread(_objectSpread({}, state), {}, {
24
+ beacon: action.beacon
25
+ });
26
+ }
27
+ default:
28
+ return state;
29
+ }
30
+ }
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports["default"] = fullscreenModeReducer;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var _actions = require("../../actions");
10
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
11
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
12
+ var initialState = {
13
+ status: 'off'
14
+ };
15
+ function fullscreenModeReducer() {
16
+ var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
17
+ var action = arguments.length > 1 ? arguments[1] : undefined;
18
+ switch (action.type) {
19
+ case _actions.SET_FULLSCREEN_MODE:
20
+ {
21
+ return _objectSpread(_objectSpread({}, state), {}, {
22
+ status: action.status
23
+ });
24
+ }
25
+ default:
26
+ return state;
27
+ }
28
+ }
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+
3
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports["default"] = void 0;
8
+ var _react = _interopRequireWildcard(require("react"));
9
+ var _reactRedux = require("react-redux");
10
+ var _reactI18next = require("react-i18next");
11
+ require("./ApplicationScreenTitle.scss");
12
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
13
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
14
+ var ApplicationScreenTitle = function ApplicationScreenTitle(props) {
15
+ var _props$routes;
16
+ var subtitle = (0, _reactRedux.useSelector)(function (state) {
17
+ var _state$header;
18
+ return (_state$header = state.header) === null || _state$header === void 0 ? void 0 : _state$header.subtitle;
19
+ });
20
+ var title = (0, _reactRedux.useSelector)(function (state) {
21
+ var _state$config;
22
+ return (_state$config = state.config) === null || _state$config === void 0 ? void 0 : _state$config.title;
23
+ });
24
+ var _useTranslation = (0, _reactI18next.useTranslation)(),
25
+ t = _useTranslation.t;
26
+ var route = (_props$routes = props.routes) === null || _props$routes === void 0 ? void 0 : _props$routes[0];
27
+ var routeName = (0, _react.useMemo)(function () {
28
+ if (route && route.name) {
29
+ return route.name;
30
+ } else {
31
+ return title;
32
+ }
33
+ }, [route]);
34
+ (0, _react.useEffect)(function () {
35
+ document.title = title && routeName ? "".concat(title, " | ").concat(routeName) : title;
36
+ }, [routeName, t]);
37
+ return /*#__PURE__*/_react["default"].createElement("div", {
38
+ className: "application-screen-title text-primary"
39
+ }, /*#__PURE__*/_react["default"].createElement("h4", {
40
+ className: "m-0"
41
+ }, t("ApplicationScreenTitle|".concat(routeName))), subtitle && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("span", {
42
+ className: "px-2 subtitle-separator"
43
+ }, "|"), /*#__PURE__*/_react["default"].createElement("h5", {
44
+ className: "m-0"
45
+ }, subtitle)));
46
+ };
47
+ var _default = exports["default"] = ApplicationScreenTitle;
@@ -0,0 +1,8 @@
1
+ .application-screen-title {
2
+ display: flex;
3
+ align-items: center;
4
+ }
5
+
6
+ .subtitle-separator {
7
+ font-size: 16px;
8
+ }
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports["default"] = void 0;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _reactRedux = require("react-redux");
10
+ var _reactRouterDom = require("react-router-dom");
11
+ var _ApplicationScreenTitle = _interopRequireDefault(require("./ApplicationScreenTitle"));
12
+ var ApplicationTitleRouter = function ApplicationTitleRouter(props) {
13
+ var routes = (0, _reactRedux.useSelector)(function (state) {
14
+ var _state$router;
15
+ return (_state$router = state.router) === null || _state$router === void 0 ? void 0 : _state$router.routes;
16
+ });
17
+ var filteredRoutes = filterRoutesByMatch(routes);
18
+ return /*#__PURE__*/_react["default"].createElement(_ApplicationScreenTitle["default"], {
19
+ app: props.app,
20
+ routes: filteredRoutes
21
+ });
22
+ };
23
+ var _default = exports["default"] = ApplicationTitleRouter;
24
+ function filterRoutesByMatch(routes) {
25
+ return routes.filter(function (route) {
26
+ var match = (0, _reactRouterDom.useMatch)({
27
+ path: "".concat(route.path)
28
+ });
29
+ return match;
30
+ });
31
+ }
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = HelpButton;
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
+ var _react = _interopRequireWildcard(require("react"));
11
+ var _reactI18next = require("react-i18next");
12
+ var _reactRedux = require("react-redux");
13
+ var _reactstrap = require("reactstrap");
14
+ require("./HelpButton.scss");
15
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
16
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
17
+ function HelpButton() {
18
+ var _useTranslation = (0, _reactI18next.useTranslation)(),
19
+ t = _useTranslation.t;
20
+ var _useState = (0, _react.useState)(false),
21
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
22
+ modal = _useState2[0],
23
+ setModal = _useState2[1];
24
+ var path = (0, _reactRedux.useSelector)(function (state) {
25
+ return state === null || state === void 0 ? void 0 : state.header.helpPath;
26
+ });
27
+ if (path == undefined) return null;
28
+ var toggle = function toggle() {
29
+ return setModal(!modal);
30
+ };
31
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_reactstrap.NavLink, {
32
+ className: "help-nav-link",
33
+ onClick: toggle,
34
+ title: t("HelpButton|Show help info")
35
+ }, t("HelpButton|Help")), /*#__PURE__*/_react["default"].createElement(_reactstrap.Modal, {
36
+ isOpen: modal,
37
+ toggle: toggle,
38
+ className: "help-modal-dialog"
39
+ }, /*#__PURE__*/_react["default"].createElement(_reactstrap.Card, {
40
+ className: "help-card"
41
+ }, /*#__PURE__*/_react["default"].createElement(_reactstrap.CardHeader, {
42
+ className: "card-header-flex"
43
+ }, /*#__PURE__*/_react["default"].createElement("div", {
44
+ className: "flex-fill"
45
+ }, /*#__PURE__*/_react["default"].createElement("h3", null, /*#__PURE__*/_react["default"].createElement("i", {
46
+ className: "bi bi-question-circle pe-2"
47
+ }), t("HelpButton|Help"))), /*#__PURE__*/_react["default"].createElement(_reactstrap.Button, {
48
+ outline: true,
49
+ type: "button",
50
+ onClick: toggle,
51
+ color: "primary"
52
+ }, /*#__PURE__*/_react["default"].createElement("i", {
53
+ className: "bi bi-x-lg"
54
+ }))), /*#__PURE__*/_react["default"].createElement(_reactstrap.CardBody, null, /*#__PURE__*/_react["default"].createElement("iframe", {
55
+ className: "help-iframe",
56
+ src: path
57
+ })))));
58
+ }
@@ -0,0 +1,15 @@
1
+ .help-modal-dialog {
2
+
3
+ max-width: 960px;
4
+
5
+ .help-iframe {
6
+ width: 100%;
7
+ height: 80vh;
8
+ overflow: hidden;
9
+ border: 0;
10
+ }
11
+ }
12
+
13
+ .help-nav-link {
14
+ cursor: pointer;
15
+ }
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports["default"] = void 0;
8
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
9
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
11
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
12
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
13
+ var _asab_webui_components = require("asab_webui_components");
14
+ var _HelpButton = _interopRequireDefault(require("./HelpButton"));
15
+ function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
16
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
17
+ var HelpService = exports["default"] = /*#__PURE__*/function (_Service) {
18
+ function HelpService(app) {
19
+ var serviceName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "HelpService";
20
+ (0, _classCallCheck2["default"])(this, HelpService);
21
+ return _callSuper(this, HelpService, [app, serviceName]);
22
+ }
23
+ (0, _inherits2["default"])(HelpService, _Service);
24
+ return (0, _createClass2["default"])(HelpService, [{
25
+ key: "initialize",
26
+ value: function initialize() {
27
+ var headerService = this.App.locateService("HeaderService");
28
+ headerService.addComponent({
29
+ component: _HelpButton["default"],
30
+ order: 300
31
+ });
32
+ }
33
+ }]);
34
+ }(_asab_webui_components.Service);
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports["default"] = PreviewFlag;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _reactI18next = require("react-i18next");
10
+ var _reactRedux = require("react-redux");
11
+ var _reactstrap = require("reactstrap");
12
+ function PreviewFlag() {
13
+ var _name;
14
+ var _useTranslation = (0, _reactI18next.useTranslation)(),
15
+ t = _useTranslation.t;
16
+ var name = (0, _reactRedux.useSelector)(function (state) {
17
+ var _state$header;
18
+ return state === null || state === void 0 || (_state$header = state.header) === null || _state$header === void 0 ? void 0 : _state$header.flag;
19
+ });
20
+ var lowercasedName = (_name = name) === null || _name === void 0 ? void 0 : _name.toLowerCase();
21
+ if (lowercasedName === "preview") {
22
+ name = t("General|Feature preview");
23
+ } else if (lowercasedName === "alpha") {
24
+ name = t("Alpha");
25
+ } else if (lowercasedName === "beta") {
26
+ name = t("Beta");
27
+ } else {
28
+ return null;
29
+ }
30
+ return /*#__PURE__*/_react["default"].createElement(_reactstrap.Badge, {
31
+ className: "mx-2",
32
+ color: "primary"
33
+ }, name);
34
+ }
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports["default"] = void 0;
8
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
9
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
11
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
12
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
13
+ var _asab_webui_components = require("asab_webui_components");
14
+ var _PreviewFlag = _interopRequireDefault(require("./PreviewFlag"));
15
+ function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
16
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
17
+ var PreviewService = exports["default"] = /*#__PURE__*/function (_Service) {
18
+ function PreviewService(app) {
19
+ var serviceName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "PreviewService";
20
+ (0, _classCallCheck2["default"])(this, PreviewService);
21
+ return _callSuper(this, PreviewService, [app, serviceName]);
22
+ }
23
+ (0, _inherits2["default"])(PreviewService, _Service);
24
+ return (0, _createClass2["default"])(PreviewService, [{
25
+ key: "initialize",
26
+ value: function initialize() {
27
+ var headerService = this.App.locateService("HeaderService");
28
+ headerService.addComponent({
29
+ component: _PreviewFlag["default"],
30
+ order: 100
31
+ });
32
+ }
33
+ }]);
34
+ }(_asab_webui_components.Service);
@@ -0,0 +1,24 @@
1
+ #app-header {
2
+
3
+ .nav-link, .btn {
4
+ // Font is larger in header items
5
+ font-size: 16px;
6
+ }
7
+ }
8
+
9
+ [data-bs-theme=light] {
10
+ #app-header .nav-link:hover {
11
+ filter: brightness(0.75);
12
+ }
13
+ }
14
+
15
+ [data-bs-theme=dark] {
16
+ #app-header {
17
+ .nav-link:active, .nav-link:focus {
18
+ color: var(--bs-link-color)
19
+ }
20
+ .nav-link:hover {
21
+ color: var(--bs-link-hover-color);
22
+ }
23
+ }
24
+ }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports["default"] = Header;
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+ var _react = _interopRequireDefault(require("react"));
10
+ var _reactstrap = require("reactstrap");
11
+ var _reactRedux = require("react-redux");
12
+ var _ApplicationScreenTitle = _interopRequireDefault(require("./ApplicationScreenTitle"));
13
+ require("./header.scss");
14
+ function Header(props) {
15
+ var headerNavItems = (0, _reactRedux.useSelector)(function (state) {
16
+ var _state$header;
17
+ return (_state$header = state.header) === null || _state$header === void 0 ? void 0 : _state$header.headerNavItems;
18
+ });
19
+ return /*#__PURE__*/_react["default"].createElement("header", {
20
+ id: "app-header"
21
+ }, /*#__PURE__*/_react["default"].createElement(_reactstrap.Nav, {
22
+ className: "d-flex flex-row nav w-100 h-100 align-items-center"
23
+ }, /*#__PURE__*/_react["default"].createElement(_reactstrap.NavItem, {
24
+ className: "mx-1 fullscreen-visible"
25
+ }, /*#__PURE__*/_react["default"].createElement(_ApplicationScreenTitle["default"], {
26
+ app: props.app
27
+ })), /*#__PURE__*/_react["default"].createElement("div", {
28
+ className: "flex-fill"
29
+ }, "\xA0"), headerNavItems.map(function (item, idx) {
30
+ return /*#__PURE__*/_react["default"].createElement(_reactstrap.NavItem, {
31
+ className: "mx-1 ".concat(item.fullscreenVisible == true ? 'fullscreen-visible' : ''),
32
+ key: idx
33
+ }, /*#__PURE__*/_react["default"].createElement(item.component, (0, _extends2["default"])({
34
+ key: item
35
+ }, item.componentProps, {
36
+ app: props.app
37
+ })));
38
+ })));
39
+ }
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports["default"] = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var _actions = require("../../actions");
10
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
11
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
12
+ var initialState = {
13
+ helpPath: "https://docs.teskalabs.com/logman.io/user/",
14
+ subtitle: undefined,
15
+ flag: undefined,
16
+ headerNavItems: []
17
+ };
18
+ var _default = exports["default"] = function _default() {
19
+ var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
20
+ var action = arguments.length > 1 ? arguments[1] : undefined;
21
+ switch (action.type) {
22
+ case _actions.SET_HELP_PATH:
23
+ return _objectSpread(_objectSpread({}, state), {}, {
24
+ helpPath: action.helpPath
25
+ });
26
+ case _actions.SET_SUBTITLE:
27
+ return _objectSpread(_objectSpread({}, state), {}, {
28
+ subtitle: action.subtitle
29
+ });
30
+ case _actions.SET_FLAG:
31
+ return _objectSpread(_objectSpread({}, state), {}, {
32
+ flag: action.flag
33
+ });
34
+ case _actions.SET_HEADER_NAVIGATION_ITEMS:
35
+ // Sort the navigation items
36
+ action.headerNavItems.sort(function (a, b) {
37
+ if (a.order == undefined && b.order == undefined) {
38
+ return 0; // No order specified for both, keep order unchanged
39
+ } else if (a.order == undefined) {
40
+ return 1; // Move items without order to the end
41
+ } else if (b.order == undefined) {
42
+ return -1; // Move items without order to the end
43
+ } else {
44
+ return a.order - b.order; // Sort by order
45
+ }
46
+ });
47
+ return _objectSpread(_objectSpread({}, state), {}, {
48
+ headerNavItems: action.headerNavItems
49
+ });
50
+ default:
51
+ return state;
52
+ }
53
+ };
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = void 0;
9
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
10
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
11
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
12
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
13
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
14
+ var _react = _interopRequireWildcard(require("react"));
15
+ var _actions = require("../../actions");
16
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
17
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
18
+ function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
19
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
20
+ var Navigation = exports["default"] = /*#__PURE__*/function (_Component) {
21
+ function Navigation(app) {
22
+ var _this;
23
+ (0, _classCallCheck2["default"])(this, Navigation);
24
+ _this = _callSuper(this, Navigation, [app]);
25
+ _this.App = app;
26
+ _this.Items = [];
27
+ return _this;
28
+ }
29
+ (0, _inherits2["default"])(Navigation, _Component);
30
+ return (0, _createClass2["default"])(Navigation, [{
31
+ key: "addItem",
32
+ value: function addItem(item) {
33
+ /* Example item:
34
+ {
35
+ path: '/some/path', // Url path
36
+ end: true, // Whether path must be matched exactly
37
+ name: 'Some Name', // Route name
38
+ component: ReactComponent // Component to be rendered
39
+ }
40
+ */
41
+
42
+ // Find an existing item with the same name
43
+ var existingItem = this.Items.find(function (existing) {
44
+ return existing.name === item.name;
45
+ });
46
+ if (existingItem) {
47
+ // If found, merge the children (concatenate arrays while avoiding duplicates based on a name)
48
+ var existingChildrenNames = new Set(existingItem.children.map(function (child) {
49
+ return child.name;
50
+ }));
51
+ item.children.forEach(function (child) {
52
+ if (!existingChildrenNames.has(child.name)) {
53
+ existingItem.children.push(child);
54
+ }
55
+ });
56
+ } else {
57
+ // If no existing item, push the new item
58
+ this.Items.push(item);
59
+ }
60
+ this.App.Store.dispatch({
61
+ type: _actions.SET_NAVIGATION_ITEMS,
62
+ navItems: this.Items
63
+ });
64
+ }
65
+ }]);
66
+ }(_react.Component);