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.
- package/CHANGELOG.md +218 -0
- package/LICENSE +28 -0
- package/README.md +3 -0
- package/dist/actions.js +22 -0
- package/dist/components/branding/BrandImage.js +72 -0
- package/dist/components/locationReplace.js +51 -0
- package/dist/config/ConfigReducer.js +22 -0
- package/dist/config/ConfigService.js +169 -0
- package/dist/containers/AdvancedMode/reducer.js +28 -0
- package/dist/containers/Alerts/alerts.scss +9 -0
- package/dist/containers/Alerts/index.js +81 -0
- package/dist/containers/Alerts/reducer.js +68 -0
- package/dist/containers/Application.js +773 -0
- package/dist/containers/Application.scss +104 -0
- package/dist/containers/AttentionRequired/reducer.js +30 -0
- package/dist/containers/FullscreenMode/reducer.js +28 -0
- package/dist/containers/Header/ApplicationScreenTitle/ApplicationScreenTitle.js +47 -0
- package/dist/containers/Header/ApplicationScreenTitle/ApplicationScreenTitle.scss +8 -0
- package/dist/containers/Header/ApplicationScreenTitle/index.js +31 -0
- package/dist/containers/Header/Help/HelpButton.js +58 -0
- package/dist/containers/Header/Help/HelpButton.scss +15 -0
- package/dist/containers/Header/Help/HelpService.js +34 -0
- package/dist/containers/Header/Preview/PreviewFlag.js +34 -0
- package/dist/containers/Header/Preview/PreviewService.js +34 -0
- package/dist/containers/Header/header.scss +24 -0
- package/dist/containers/Header/index.js +39 -0
- package/dist/containers/Header/reducer.js +53 -0
- package/dist/containers/Navigation/index.js +66 -0
- package/dist/containers/Navigation/reducer.js +56 -0
- package/dist/containers/RouteErrorHandler/ErrorContainer.js +46 -0
- package/dist/containers/RouteErrorHandler/index.js +80 -0
- package/dist/containers/Router/ApplicationRouter.js +78 -0
- package/dist/containers/Router/index.js +50 -0
- package/dist/containers/Router/reducer.js +28 -0
- package/dist/containers/Sidebar/NavbarBrand.js +59 -0
- package/dist/containers/Sidebar/SidebarBottomItem.js +55 -0
- package/dist/containers/Sidebar/SidebarIcon.js +21 -0
- package/dist/containers/Sidebar/SidebarItem.js +209 -0
- package/dist/containers/Sidebar/SidebarItemRenderer.js +30 -0
- package/dist/containers/Sidebar/index.js +86 -0
- package/dist/containers/Sidebar/reducer.js +35 -0
- package/dist/containers/Sidebar/sidebar.scss +176 -0
- package/dist/containers/Sidepanel/Sidepanel.js +60 -0
- package/dist/containers/Sidepanel/Sidepanel.scss +20 -0
- package/dist/containers/Toast/ToastComponent.js +31 -0
- package/dist/containers/Toast/ToastComponent.jsx +28 -0
- package/dist/containers/Toast/ToastContainer.js +80 -0
- package/dist/containers/Toast/ToastContainer.jsx +59 -0
- package/dist/containers/Toast/reducer.js +55 -0
- package/dist/containers/Toast/reducer.jsx +45 -0
- package/dist/index.js +48 -0
- package/dist/modules/about/AboutScreen.js +84 -0
- package/dist/modules/about/index.js +41 -0
- package/dist/modules/auth/actions.js +11 -0
- package/dist/modules/auth/api.js +214 -0
- package/dist/modules/auth/components/SessionExpirationAlert.js +35 -0
- package/dist/modules/auth/header.js +109 -0
- package/dist/modules/auth/header.scss +9 -0
- package/dist/modules/auth/index.js +761 -0
- package/dist/modules/auth/reducer.js +36 -0
- package/dist/modules/auth/screens/AccessControlScreen.js +78 -0
- package/dist/modules/auth/screens/InvitationScreen.js +161 -0
- package/dist/modules/i18n/actions.js +7 -0
- package/dist/modules/i18n/dropdown.js +77 -0
- package/dist/modules/i18n/index.js +44 -0
- package/dist/modules/i18n/reducer.js +26 -0
- package/dist/modules/i18n/service.js +158 -0
- package/dist/modules/tenant/TenantDropdown.js +53 -0
- package/dist/modules/tenant/access/AccessDeniedCard.js +107 -0
- package/dist/modules/tenant/access/AccessDeniedCard.scss +6 -0
- package/dist/modules/tenant/actions.js +10 -0
- package/dist/modules/tenant/index.js +41 -0
- package/dist/modules/tenant/reducer.js +26 -0
- package/dist/modules/tenant/service.js +228 -0
- package/dist/screens/InvalidRouteScreen.js +30 -0
- package/dist/screens/InvalidRouteScreen.scss +19 -0
- package/dist/screens/SuspenseScreen.js +43 -0
- package/dist/screens/SuspenseScreen.scss +9 -0
- package/dist/screens/UnauthorizedAccessScreen.js +79 -0
- package/dist/screens/UnauthorizedAccessScreen.scss +19 -0
- package/dist/services/AttentionRequiredService.js +169 -0
- package/dist/services/BrandingService.js +104 -0
- package/dist/services/HeaderService.js +84 -0
- package/dist/services/ReduxService.js +25 -0
- package/dist/services/TitleService.js +45 -0
- package/dist/theme/ThemeButton.js +39 -0
- package/dist/theme/ThemeReducer.js +20 -0
- package/dist/theme/ThemeService.js +52 -0
- package/dist/theme/actions.js +7 -0
- package/package.json +41 -0
|
@@ -0,0 +1,209 @@
|
|
|
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.SidebarItem = exports.SidebarCollapsibleItem = void 0;
|
|
9
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
10
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
12
|
+
var _reactRouter = require("react-router");
|
|
13
|
+
var _reactRouterDom = require("react-router-dom");
|
|
14
|
+
var _reactI18next = require("react-i18next");
|
|
15
|
+
var _reactRedux = require("react-redux");
|
|
16
|
+
var _reactstrap = require("reactstrap");
|
|
17
|
+
var _asab_webui_components = require("asab_webui_components");
|
|
18
|
+
var _SidebarIcon = _interopRequireDefault(require("./SidebarIcon"));
|
|
19
|
+
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); }
|
|
20
|
+
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; }
|
|
21
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
22
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
23
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
24
|
+
var SidebarItem = exports.SidebarItem = function SidebarItem(_ref) {
|
|
25
|
+
var _item$name;
|
|
26
|
+
var item = _ref.item,
|
|
27
|
+
disabled = _ref.disabled,
|
|
28
|
+
isOpen = _ref.isOpen,
|
|
29
|
+
setOpen = _ref.setOpen,
|
|
30
|
+
isSmallResolution = _ref.isSmallResolution,
|
|
31
|
+
_ref$beacon = _ref.beacon,
|
|
32
|
+
beacon = _ref$beacon === void 0 ? undefined : _ref$beacon;
|
|
33
|
+
var location = (0, _reactRouter.useLocation)();
|
|
34
|
+
var _useTranslation = (0, _reactI18next.useTranslation)(),
|
|
35
|
+
t = _useTranslation.t;
|
|
36
|
+
var isSidebarCollapsed = (0, _reactRedux.useSelector)(function (state) {
|
|
37
|
+
var _state$sidebar;
|
|
38
|
+
return (_state$sidebar = state.sidebar) === null || _state$sidebar === void 0 ? void 0 : _state$sidebar.isSidebarCollapsed;
|
|
39
|
+
});
|
|
40
|
+
var attentionRequired = (0, _reactRedux.useSelector)(function (state) {
|
|
41
|
+
var _state$attentionrequi;
|
|
42
|
+
return (_state$attentionrequi = state.attentionrequired) === null || _state$attentionrequi === void 0 ? void 0 : _state$attentionrequi.beacon;
|
|
43
|
+
});
|
|
44
|
+
var _useState = (0, _react.useState)(false),
|
|
45
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
46
|
+
isActive = _useState2[0],
|
|
47
|
+
setActive = _useState2[1];
|
|
48
|
+
var lowercasedItemName = item === null || item === void 0 || (_item$name = item.name) === null || _item$name === void 0 ? void 0 : _item$name.toLowerCase();
|
|
49
|
+
// Attention requred flag
|
|
50
|
+
var itemBeacon = beacon ? beacon["beacon.".concat(lowercasedItemName)] : attentionRequired["beacon.".concat(lowercasedItemName)];
|
|
51
|
+
(0, _react.useEffect)(function () {
|
|
52
|
+
if (isOpen && !isActive) {
|
|
53
|
+
setOpen(false);
|
|
54
|
+
}
|
|
55
|
+
setActive(item.url && (location.pathname === item.url || location.pathname.startsWith(item.url + '/')) ? true : false);
|
|
56
|
+
}, [location]);
|
|
57
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
58
|
+
className: "nav-item"
|
|
59
|
+
}, /*#__PURE__*/_react["default"].createElement(_reactRouterDom.Link, {
|
|
60
|
+
disabled: disabled,
|
|
61
|
+
to: item.url,
|
|
62
|
+
title: t("Sidebar|".concat(item.name)),
|
|
63
|
+
className: "nav-link" + (isActive ? " active" : "")
|
|
64
|
+
}, !isSidebarCollapsed || isSmallResolution ?
|
|
65
|
+
/*#__PURE__*/
|
|
66
|
+
//hide item.name if sidebar is collapsed
|
|
67
|
+
_react["default"].createElement("div", {
|
|
68
|
+
className: "d-flex align-items-center"
|
|
69
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
70
|
+
className: "sidebar-item-name d-flex align-items-center flex-grow-1"
|
|
71
|
+
}, /*#__PURE__*/_react["default"].createElement(_SidebarIcon["default"], {
|
|
72
|
+
icon: item.icon,
|
|
73
|
+
className: "pe-2"
|
|
74
|
+
}), /*#__PURE__*/_react["default"].createElement("span", {
|
|
75
|
+
className: "sidebar-item-name"
|
|
76
|
+
}, t("Sidebar|".concat(item.name)))), itemBeacon && /*#__PURE__*/_react["default"].createElement(_asab_webui_components.AttentionBadge, {
|
|
77
|
+
className: "sidebar-badge-collapsed",
|
|
78
|
+
content: itemBeacon
|
|
79
|
+
})) : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_SidebarIcon["default"], {
|
|
80
|
+
icon: item.icon,
|
|
81
|
+
className: "pe-2"
|
|
82
|
+
}), itemBeacon && /*#__PURE__*/_react["default"].createElement(_asab_webui_components.AttentionBadge, {
|
|
83
|
+
className: "sidebar-badge-collapsed",
|
|
84
|
+
content: itemBeacon
|
|
85
|
+
}))));
|
|
86
|
+
};
|
|
87
|
+
var SidebarCollapsibleItem = exports.SidebarCollapsibleItem = function SidebarCollapsibleItem(_ref2) {
|
|
88
|
+
var item = _ref2.item,
|
|
89
|
+
disabled = _ref2.disabled,
|
|
90
|
+
isSmallResolution = _ref2.isSmallResolution;
|
|
91
|
+
var _useState3 = (0, _react.useState)(false),
|
|
92
|
+
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
|
93
|
+
isOpen = _useState4[0],
|
|
94
|
+
setOpen = _useState4[1];
|
|
95
|
+
var location = (0, _reactRouter.useLocation)();
|
|
96
|
+
var _useTranslation2 = (0, _reactI18next.useTranslation)(),
|
|
97
|
+
t = _useTranslation2.t;
|
|
98
|
+
var isSidebarCollapsed = (0, _reactRedux.useSelector)(function (state) {
|
|
99
|
+
var _state$sidebar2;
|
|
100
|
+
return (_state$sidebar2 = state.sidebar) === null || _state$sidebar2 === void 0 ? void 0 : _state$sidebar2.isSidebarCollapsed;
|
|
101
|
+
});
|
|
102
|
+
var attentionRequired = (0, _reactRedux.useSelector)(function (state) {
|
|
103
|
+
var _state$attentionrequi2;
|
|
104
|
+
return (_state$attentionrequi2 = state.attentionrequired) === null || _state$attentionrequi2 === void 0 ? void 0 : _state$attentionrequi2.beacon;
|
|
105
|
+
});
|
|
106
|
+
var lowercasedItemName = item.name.toLowerCase();
|
|
107
|
+
|
|
108
|
+
// Attention required flag
|
|
109
|
+
var itemsBeacon = parentBeacon(attentionRequired, "beacon.".concat(lowercasedItemName), lowercasedItemName);
|
|
110
|
+
// Summarize parent beacon count based on children
|
|
111
|
+
var beaconCount = itemsBeacon && Object.keys(itemsBeacon).length > 0 ? Object.values(itemsBeacon).reduce(function (sum, current) {
|
|
112
|
+
return sum + (current.count || 0); // Ensure we sum only valid count values
|
|
113
|
+
}, 0) : 0;
|
|
114
|
+
|
|
115
|
+
// Should collapsed item uncollapse
|
|
116
|
+
(0, _react.useEffect)(function () {
|
|
117
|
+
if (item.children && !isOpen) {
|
|
118
|
+
var _iterator = _createForOfIteratorHelper(item.children),
|
|
119
|
+
_step;
|
|
120
|
+
try {
|
|
121
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
122
|
+
var child = _step.value;
|
|
123
|
+
if (location.pathname.includes(child.url)) {
|
|
124
|
+
setOpen(true);
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
} catch (err) {
|
|
129
|
+
_iterator.e(err);
|
|
130
|
+
} finally {
|
|
131
|
+
_iterator.f();
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}, [isOpen]);
|
|
135
|
+
var onClickOpen = function onClickOpen(e) {
|
|
136
|
+
e.preventDefault();
|
|
137
|
+
setOpen(!isOpen);
|
|
138
|
+
};
|
|
139
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("div", {
|
|
140
|
+
className: "nav-item sidebar-collapsible" + (isOpen ? " open" : "")
|
|
141
|
+
}, /*#__PURE__*/_react["default"].createElement("a", {
|
|
142
|
+
onClick: onClickOpen,
|
|
143
|
+
title: t("Sidebar|".concat(item.name)),
|
|
144
|
+
className: "d-flex align-items-center nav-link" + (isOpen ? " open" : ""),
|
|
145
|
+
href: "#"
|
|
146
|
+
}, !isSidebarCollapsed || isSmallResolution ? /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("span", {
|
|
147
|
+
className: "d-flex flex-column justify-content-center align-items-center pe-2"
|
|
148
|
+
}, /*#__PURE__*/_react["default"].createElement(_SidebarIcon["default"], {
|
|
149
|
+
icon: item.icon
|
|
150
|
+
}), /*#__PURE__*/_react["default"].createElement("i", {
|
|
151
|
+
className: "bi bi-chevron-down"
|
|
152
|
+
})), /*#__PURE__*/_react["default"].createElement("span", {
|
|
153
|
+
className: "sidebar-item-name"
|
|
154
|
+
}, t("Sidebar|".concat(item.name))), /*#__PURE__*/_react["default"].createElement("div", {
|
|
155
|
+
className: "ms-auto"
|
|
156
|
+
}, " ", beaconCount > 0 && /*#__PURE__*/_react["default"].createElement(_asab_webui_components.AttentionBadge, {
|
|
157
|
+
className: "sidebar-badge-collapsed",
|
|
158
|
+
content: {
|
|
159
|
+
count: beaconCount
|
|
160
|
+
}
|
|
161
|
+
}))) : /*#__PURE__*/_react["default"].createElement("div", {
|
|
162
|
+
className: "d-flex flex-column justify-content-center align-items-center"
|
|
163
|
+
}, /*#__PURE__*/_react["default"].createElement("span", {
|
|
164
|
+
className: "d-flex flex-column justify-content-center align-items-center"
|
|
165
|
+
}, /*#__PURE__*/_react["default"].createElement(_SidebarIcon["default"], {
|
|
166
|
+
icon: item.icon
|
|
167
|
+
}), /*#__PURE__*/_react["default"].createElement("i", {
|
|
168
|
+
className: "bi bi-chevron-down"
|
|
169
|
+
}), " "), beaconCount > 0 && /*#__PURE__*/_react["default"].createElement("div", {
|
|
170
|
+
className: "mt-1 w-100 justify-content-center d-flex"
|
|
171
|
+
}, /*#__PURE__*/_react["default"].createElement(_asab_webui_components.AttentionBadge, {
|
|
172
|
+
className: "sidebar-badge-collapsed",
|
|
173
|
+
content: {
|
|
174
|
+
count: beaconCount
|
|
175
|
+
}
|
|
176
|
+
}))))), /*#__PURE__*/_react["default"].createElement(_reactstrap.Collapse, {
|
|
177
|
+
isOpen: isOpen,
|
|
178
|
+
className: "sidebar-collapse"
|
|
179
|
+
}, item.children.map(function (child, idx) {
|
|
180
|
+
var _child$name;
|
|
181
|
+
return /*#__PURE__*/_react["default"].createElement(SidebarItem, {
|
|
182
|
+
key: idx,
|
|
183
|
+
item: child,
|
|
184
|
+
disabled: disabled,
|
|
185
|
+
isOpen: isOpen,
|
|
186
|
+
setOpen: setOpen,
|
|
187
|
+
isSmallResolution: isSmallResolution,
|
|
188
|
+
beacon: itemsBeacon["beacon.".concat(child === null || child === void 0 || (_child$name = child.name) === null || _child$name === void 0 ? void 0 : _child$name.toLowerCase())] && childBeacon(itemsBeacon, "beacon.".concat(child.name.toLowerCase()))
|
|
189
|
+
});
|
|
190
|
+
})));
|
|
191
|
+
};
|
|
192
|
+
|
|
193
|
+
// Filter beacon for the parent
|
|
194
|
+
var parentBeacon = function parentBeacon(data, prefix, itemName) {
|
|
195
|
+
if (!data) {
|
|
196
|
+
return {};
|
|
197
|
+
}
|
|
198
|
+
return Object.keys(data).filter(function (key) {
|
|
199
|
+
return key.startsWith(prefix);
|
|
200
|
+
}).reduce(function (result, key) {
|
|
201
|
+
result[key.replace(".".concat(itemName), '')] = data[key];
|
|
202
|
+
return result;
|
|
203
|
+
}, {});
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
// Filter beacon for the children
|
|
207
|
+
var childBeacon = function childBeacon(data, key) {
|
|
208
|
+
return data[key] ? (0, _defineProperty2["default"])({}, key, data[key]) : {};
|
|
209
|
+
};
|
|
@@ -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.SidebarItemRenderer = void 0;
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
var _SidebarItem = require("./SidebarItem");
|
|
10
|
+
var SidebarItemRenderer = exports.SidebarItemRenderer = function SidebarItemRenderer(_ref) {
|
|
11
|
+
var sidebarItems = _ref.sidebarItems,
|
|
12
|
+
sessionExpired = _ref.sessionExpired,
|
|
13
|
+
_ref$isSmallResolutio = _ref.isSmallResolution,
|
|
14
|
+
isSmallResolution = _ref$isSmallResolutio === void 0 ? undefined : _ref$isSmallResolutio;
|
|
15
|
+
return /*#__PURE__*/_react["default"].createElement("nav", {
|
|
16
|
+
className: "nav flex-column"
|
|
17
|
+
}, sidebarItems.map(function (item, idx) {
|
|
18
|
+
return item.children ? /*#__PURE__*/_react["default"].createElement(_SidebarItem.SidebarCollapsibleItem, {
|
|
19
|
+
key: idx,
|
|
20
|
+
item: item,
|
|
21
|
+
disabled: sessionExpired,
|
|
22
|
+
isSmallResolution: isSmallResolution
|
|
23
|
+
}) : /*#__PURE__*/_react["default"].createElement(_SidebarItem.SidebarItem, {
|
|
24
|
+
key: idx,
|
|
25
|
+
item: item,
|
|
26
|
+
disabled: sessionExpired,
|
|
27
|
+
isSmallResolution: isSmallResolution
|
|
28
|
+
});
|
|
29
|
+
}));
|
|
30
|
+
};
|
|
@@ -0,0 +1,86 @@
|
|
|
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"] = Sidebar;
|
|
9
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
10
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
+
var _reactRedux = require("react-redux");
|
|
12
|
+
var _reactstrap = require("reactstrap");
|
|
13
|
+
var _SidebarBottomItem = _interopRequireDefault(require("./SidebarBottomItem"));
|
|
14
|
+
var _actions = require("../../actions");
|
|
15
|
+
var _BrandImage = require("../../components/branding/BrandImage");
|
|
16
|
+
require("./sidebar.scss");
|
|
17
|
+
var _SidebarItemRenderer = require("./SidebarItemRenderer");
|
|
18
|
+
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); }
|
|
19
|
+
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; }
|
|
20
|
+
function Sidebar(props) {
|
|
21
|
+
var _useState = (0, _react.useState)(false),
|
|
22
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
23
|
+
isSmallResolution = _useState2[0],
|
|
24
|
+
setIsSmallResolution = _useState2[1];
|
|
25
|
+
var _useState3 = (0, _react.useState)({}),
|
|
26
|
+
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
|
27
|
+
sidebarBottomBranding = _useState4[0],
|
|
28
|
+
setSidebarBottomBranding = _useState4[1];
|
|
29
|
+
var _useState5 = (0, _react.useState)(window.innerWidth),
|
|
30
|
+
_useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
|
|
31
|
+
windowWidth = _useState6[0],
|
|
32
|
+
setWindowWidth = _useState6[1];
|
|
33
|
+
var sidebarItems = (0, _reactRedux.useSelector)(function (state) {
|
|
34
|
+
var _state$navigation;
|
|
35
|
+
return (_state$navigation = state.navigation) === null || _state$navigation === void 0 ? void 0 : _state$navigation.navItems;
|
|
36
|
+
});
|
|
37
|
+
var sessionExpired = (0, _reactRedux.useSelector)(function (state) {
|
|
38
|
+
var _state$auth;
|
|
39
|
+
return (_state$auth = state.auth) === null || _state$auth === void 0 ? void 0 : _state$auth.sessionExpired;
|
|
40
|
+
});
|
|
41
|
+
var theme = (0, _reactRedux.useSelector)(function (state) {
|
|
42
|
+
return state.theme;
|
|
43
|
+
});
|
|
44
|
+
var dispatch = (0, _reactRedux.useDispatch)();
|
|
45
|
+
(0, _react.useEffect)(function () {
|
|
46
|
+
// Collapse sidebar if innerWidth is smaller or equal to 944px on page initialization
|
|
47
|
+
if (window.innerWidth <= 944) {
|
|
48
|
+
dispatch({
|
|
49
|
+
type: _actions.COLLAPSE_SIDEBAR,
|
|
50
|
+
isSidebarCollapsed: true
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}, []);
|
|
54
|
+
(0, _react.useEffect)(function () {
|
|
55
|
+
setSidebarBottomBranding((0, _BrandImage.getBrandImage)(props, theme, 'sidebarLogo'));
|
|
56
|
+
}, [theme]);
|
|
57
|
+
var toggleSidebarModal = function toggleSidebarModal() {
|
|
58
|
+
return setIsSmallResolution(!isSmallResolution);
|
|
59
|
+
};
|
|
60
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, windowWidth <= 768 ? /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("div", {
|
|
61
|
+
onClick: toggleSidebarModal
|
|
62
|
+
}, /*#__PURE__*/_react["default"].createElement("i", {
|
|
63
|
+
className: "bi ms-2 bi-list text-primary fs-1"
|
|
64
|
+
})), /*#__PURE__*/_react["default"].createElement(_reactstrap.Modal, {
|
|
65
|
+
isOpen: isSmallResolution,
|
|
66
|
+
toggle: toggleSidebarModal,
|
|
67
|
+
className: "left"
|
|
68
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
69
|
+
className: "sidebar-modal"
|
|
70
|
+
}, /*#__PURE__*/_react["default"].createElement(_SidebarItemRenderer.SidebarItemRenderer, {
|
|
71
|
+
sidebarItems: sidebarItems,
|
|
72
|
+
sessionExpired: sessionExpired,
|
|
73
|
+
isSmallResolution: isSmallResolution
|
|
74
|
+
})))) : /*#__PURE__*/_react["default"].createElement("div", {
|
|
75
|
+
className: "h-100",
|
|
76
|
+
id: "app-sidebar"
|
|
77
|
+
}, /*#__PURE__*/_react["default"].createElement(_SidebarItemRenderer.SidebarItemRenderer, {
|
|
78
|
+
sidebarItems: sidebarItems,
|
|
79
|
+
sessionExpired: sessionExpired
|
|
80
|
+
}), /*#__PURE__*/_react["default"].createElement("div", {
|
|
81
|
+
className: "flex-fill"
|
|
82
|
+
}, "\xA0"), /*#__PURE__*/_react["default"].createElement(_SidebarBottomItem["default"], {
|
|
83
|
+
sidebarLogo: sidebarBottomBranding,
|
|
84
|
+
disabled: sessionExpired
|
|
85
|
+
})));
|
|
86
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
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
|
+
isSidebarCollapsed: false
|
|
14
|
+
};
|
|
15
|
+
var _default = exports["default"] = function _default() {
|
|
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.COLLAPSE_SIDEBAR:
|
|
20
|
+
{
|
|
21
|
+
if (action.isSidebarCollapsed) {
|
|
22
|
+
document.getElementById('app').classList.add('sidebar-collapsed');
|
|
23
|
+
} else {
|
|
24
|
+
document.getElementById('app').classList.remove('sidebar-collapsed');
|
|
25
|
+
}
|
|
26
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
27
|
+
isSidebarCollapsed: action.isSidebarCollapsed
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
default:
|
|
31
|
+
{
|
|
32
|
+
return state;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
};
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
$sidebar-item-border-width: 1px;
|
|
2
|
+
$sidebar-item-spacing: 0.5rem;
|
|
3
|
+
|
|
4
|
+
$sidebar-transition-timing-function: cubic-bezier(0.6, 0.6, 0, 1);
|
|
5
|
+
|
|
6
|
+
#app-sidebar {
|
|
7
|
+
display: flex;
|
|
8
|
+
flex-direction: column;
|
|
9
|
+
background-color: var(--bs-body-bg);
|
|
10
|
+
overflow-y: auto; // The sidebar is scrollable when it doesn't fit the screen
|
|
11
|
+
overflow-x: hidden;
|
|
12
|
+
min-height: 100%;
|
|
13
|
+
flex-wrap: nowrap;
|
|
14
|
+
|
|
15
|
+
& .nav-item {
|
|
16
|
+
width: 150px;
|
|
17
|
+
|
|
18
|
+
transition: width 0.2s $sidebar-transition-timing-function;
|
|
19
|
+
|
|
20
|
+
&:not(:last-child) {
|
|
21
|
+
margin-bottom: $sidebar-item-spacing;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
& .nav-link {
|
|
26
|
+
padding: 0.75rem 0 0.75rem 8px;
|
|
27
|
+
|
|
28
|
+
transition: color 0.2s $sidebar-transition-timing-function, background-color 0.2s $sidebar-transition-timing-function;
|
|
29
|
+
|
|
30
|
+
&:hover {
|
|
31
|
+
color: var(--bs-nav-link-hover-color);
|
|
32
|
+
background-color: var(--bs-element-bg-color);
|
|
33
|
+
|
|
34
|
+
transition: color 0.1s $sidebar-transition-timing-function, background-color 0.1s $sidebar-transition-timing-function;
|
|
35
|
+
cursor: pointer;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
&.active {
|
|
39
|
+
color: var(--bs-white);
|
|
40
|
+
background-color: var(--bs-primary);
|
|
41
|
+
|
|
42
|
+
transition: color 0.2s $sidebar-transition-timing-function, background-color 0.2s $sidebar-transition-timing-function;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
& i {
|
|
46
|
+
font-size: 22px; // Make the icon a bit larger
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
& .sidebar-item-name {
|
|
50
|
+
overflow: hidden;
|
|
51
|
+
white-space: nowrap;
|
|
52
|
+
text-overflow: ellipsis;
|
|
53
|
+
vertical-align: 3px; // To center the text to a larger icon
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
& .sidebar-badge-collapsed {
|
|
57
|
+
margin-left: 2px;
|
|
58
|
+
margin-right: 0.3rem;
|
|
59
|
+
vertical-align: 3px; // To center the text to a larger icon
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.sidebar-collapsible {
|
|
64
|
+
transition: transform 0.1s $sidebar-transition-timing-function;
|
|
65
|
+
&:hover {
|
|
66
|
+
span .bi-chevron-down {
|
|
67
|
+
transform: translateY(3px);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
&.open {
|
|
72
|
+
margin-bottom: 0;
|
|
73
|
+
background-color: rgba(var(--bs-primary-rgb), 0.2);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
& .bi-chevron-down {
|
|
77
|
+
margin-top: -1rem; //moving chevron closer to item icon
|
|
78
|
+
margin-bottom: -1rem;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.sidebar-collapse {
|
|
83
|
+
&.collapsing,
|
|
84
|
+
&.collapse.show {
|
|
85
|
+
background-color: rgba(var(--bs-primary-rgb), 0.1);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
#app-sidebar-logo {
|
|
90
|
+
display: inline-block;
|
|
91
|
+
width: 124px;
|
|
92
|
+
height: 50px;
|
|
93
|
+
|
|
94
|
+
background-repeat: no-repeat;
|
|
95
|
+
background-position: 5px;
|
|
96
|
+
background-position-y: center;
|
|
97
|
+
|
|
98
|
+
text-decoration: none;
|
|
99
|
+
|
|
100
|
+
transition: background-image 0.2s $sidebar-transition-timing-function;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
#app-sidebar-collapse {
|
|
104
|
+
cursor: pointer;
|
|
105
|
+
|
|
106
|
+
transition: color 0.2s $sidebar-transition-timing-function, background-color 0.2s $sidebar-transition-timing-function;
|
|
107
|
+
|
|
108
|
+
&:hover {
|
|
109
|
+
color: var(--bs-nav-link-hover-color);
|
|
110
|
+
transition: color 0.1s $sidebar-transition-timing-function, background-color 0.1s $sidebar-transition-timing-function;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.sidebar-modal {
|
|
116
|
+
& .bi-chevron-down {
|
|
117
|
+
margin-top: -0.6rem;
|
|
118
|
+
margin-bottom: 0;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
#app.sidebar-collapsed {
|
|
123
|
+
grid-template-columns: 40px 1fr;
|
|
124
|
+
|
|
125
|
+
transition: all 0.2s linear; // This is speed of sidebar collapsing
|
|
126
|
+
|
|
127
|
+
& #app-sidebar {
|
|
128
|
+
width: 3rem;
|
|
129
|
+
|
|
130
|
+
> nav {
|
|
131
|
+
& .nav-item {
|
|
132
|
+
|
|
133
|
+
transition: width 0.2s $sidebar-transition-timing-function;
|
|
134
|
+
|
|
135
|
+
& .sidebar-item-name {
|
|
136
|
+
visibility: hidden;
|
|
137
|
+
|
|
138
|
+
transition: visibility 0.2s $sidebar-transition-timing-function;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
& .sidebar-badge-collapsed {
|
|
142
|
+
display: block;
|
|
143
|
+
position: absolute;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
& .nav-link {
|
|
148
|
+
text-overflow: unset;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
#app-sidebar-logo {
|
|
154
|
+
width: 40px;
|
|
155
|
+
background-size: 28px;
|
|
156
|
+
|
|
157
|
+
transition: width 0.2s $sidebar-transition-timing-function;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
#app-brandimage {
|
|
162
|
+
padding: 5px 0 5px 5px;
|
|
163
|
+
|
|
164
|
+
> a {
|
|
165
|
+
display: block;
|
|
166
|
+
width: 100%;
|
|
167
|
+
height: 100%;
|
|
168
|
+
|
|
169
|
+
background-repeat: no-repeat;
|
|
170
|
+
background-position: center;
|
|
171
|
+
|
|
172
|
+
text-decoration: none;
|
|
173
|
+
|
|
174
|
+
transition: background-image 0.2s $sidebar-transition-timing-function;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
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"] = Sidepanel;
|
|
9
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
10
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
+
var _reactstrap = require("reactstrap");
|
|
12
|
+
var _asab_webui_components = require("asab_webui_components");
|
|
13
|
+
require("./Sidepanel.scss");
|
|
14
|
+
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); }
|
|
15
|
+
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; }
|
|
16
|
+
// Application sidepanel
|
|
17
|
+
function Sidepanel(props) {
|
|
18
|
+
var _usePubSub = (0, _asab_webui_components.usePubSub)(),
|
|
19
|
+
publish = _usePubSub.publish,
|
|
20
|
+
subscribe = _usePubSub.subscribe;
|
|
21
|
+
var _useState = (0, _react.useState)(undefined),
|
|
22
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
23
|
+
sidepanelContent = _useState2[0],
|
|
24
|
+
setSidepanelContent = _useState2[1];
|
|
25
|
+
(0, _react.useEffect)(function () {
|
|
26
|
+
var handleEvent = function handleEvent(message) {
|
|
27
|
+
if (message.mode === 'close') {
|
|
28
|
+
setSidepanelContent(undefined);
|
|
29
|
+
} else {
|
|
30
|
+
setSidepanelContent(message.mode);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
// Subscription to Application.panel!
|
|
34
|
+
var subscriptionSidepanel = subscribe('Application.panel!', handleEvent);
|
|
35
|
+
// Clean up subscription on component unmount
|
|
36
|
+
return function () {
|
|
37
|
+
subscriptionSidepanel();
|
|
38
|
+
};
|
|
39
|
+
}, []);
|
|
40
|
+
|
|
41
|
+
// TODO: think of how to automatically close the sidepanel on screen leave
|
|
42
|
+
return /*#__PURE__*/_react["default"].createElement(_reactstrap.Collapse, {
|
|
43
|
+
id: "app-sidepanel",
|
|
44
|
+
isOpen: sidepanelContent != undefined ? true : false,
|
|
45
|
+
horizontal: true
|
|
46
|
+
}, /*#__PURE__*/_react["default"].createElement(_reactstrap.Card, {
|
|
47
|
+
className: "app-sidepanel-card h-100"
|
|
48
|
+
}, /*#__PURE__*/_react["default"].createElement(_reactstrap.CardBody, {
|
|
49
|
+
className: "w-100 h-100 app-sidepanel-card-body"
|
|
50
|
+
}, sidepanelContent), /*#__PURE__*/_react["default"].createElement("div", {
|
|
51
|
+
className: "app-sidepanel-chevron-wrapper"
|
|
52
|
+
}, /*#__PURE__*/_react["default"].createElement("i", {
|
|
53
|
+
className: "app-sidepanel-chevron bi bi-chevron-right",
|
|
54
|
+
onClick: function onClick() {
|
|
55
|
+
return publish('Application.panel!', {
|
|
56
|
+
mode: 'close'
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}))));
|
|
60
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
.app-sidepanel-card {
|
|
2
|
+
width: 300px;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.app-sidepanel-card-body {
|
|
6
|
+
overflow-y: auto;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.app-sidepanel-chevron-wrapper {
|
|
10
|
+
padding: 10px;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.app-sidepanel-chevron {
|
|
14
|
+
font-size: 21px;
|
|
15
|
+
color: var(--bs-primary);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.app-sidepanel-chevron:hover {
|
|
19
|
+
cursor: pointer;
|
|
20
|
+
}
|
|
@@ -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.ToastComponent = ToastComponent;
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
var _reactstrap = require("reactstrap");
|
|
10
|
+
var _actions = require("../../actions");
|
|
11
|
+
// import { timeToString } from 'asab_webui_components';
|
|
12
|
+
|
|
13
|
+
// Component for displaying Toast messages
|
|
14
|
+
function ToastComponent(_ref) {
|
|
15
|
+
var app = _ref.app,
|
|
16
|
+
content = _ref.content,
|
|
17
|
+
dispatch = _ref.dispatch;
|
|
18
|
+
return /*#__PURE__*/_react["default"].createElement(_reactstrap.Toast, {
|
|
19
|
+
fade: true,
|
|
20
|
+
className: "toast d-print-none"
|
|
21
|
+
}, /*#__PURE__*/_react["default"].createElement(_reactstrap.ToastHeader, {
|
|
22
|
+
toggle: function toggle() {
|
|
23
|
+
return dispatch({
|
|
24
|
+
type: _actions.DEL_TOAST,
|
|
25
|
+
key: content.key
|
|
26
|
+
});
|
|
27
|
+
},
|
|
28
|
+
className: "toast-header",
|
|
29
|
+
icon: content !== null && content !== void 0 && content.level ? "".concat(content.level) : 'secondary'
|
|
30
|
+
}, content !== null && content !== void 0 && content.title ? content.title : ':-('), /*#__PURE__*/_react["default"].createElement(_reactstrap.ToastBody, null, content !== null && content !== void 0 && content.message ? content.message : 'Ooops, mistake is on our side. Message has not been defined!'));
|
|
31
|
+
}
|