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,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports["default"] = reducer;
|
|
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
|
+
userinfo: null,
|
|
14
|
+
resources: [],
|
|
15
|
+
sessionExpired: false
|
|
16
|
+
};
|
|
17
|
+
function reducer() {
|
|
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.types.AUTH_USERINFO:
|
|
22
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
23
|
+
userinfo: action.payload
|
|
24
|
+
});
|
|
25
|
+
case _actions.types.AUTH_RESOURCES:
|
|
26
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
27
|
+
resources: action.resources
|
|
28
|
+
});
|
|
29
|
+
case _actions.types.AUTH_SESSION_EXPIRATION:
|
|
30
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
31
|
+
sessionExpired: action.sessionExpired
|
|
32
|
+
});
|
|
33
|
+
default:
|
|
34
|
+
return state;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
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 _reactI18next = require("react-i18next");
|
|
10
|
+
var _reactRedux = require("react-redux");
|
|
11
|
+
var _reactstrap = require("reactstrap");
|
|
12
|
+
/*
|
|
13
|
+
|
|
14
|
+
Language localizations for AccessControlScreen can be added to the translation.json files of
|
|
15
|
+
public/locales/en & public/locales/cs of the product where AccessControlScreen component is used.
|
|
16
|
+
|
|
17
|
+
Example:
|
|
18
|
+
|
|
19
|
+
{
|
|
20
|
+
"AccessControlScreen": {
|
|
21
|
+
"Access control": "Access control",
|
|
22
|
+
"Username": "Username",
|
|
23
|
+
"Tenant": "Tenant",
|
|
24
|
+
"Resources": "Resources"
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
function AccessControlScreen(props) {
|
|
31
|
+
return /*#__PURE__*/_react["default"].createElement(_reactstrap.Container, null, /*#__PURE__*/_react["default"].createElement(_reactstrap.Row, {
|
|
32
|
+
className: "justify-content-center pt-5"
|
|
33
|
+
}, /*#__PURE__*/_react["default"].createElement(_reactstrap.Col, {
|
|
34
|
+
md: "6"
|
|
35
|
+
}, /*#__PURE__*/_react["default"].createElement(AccessControlCard, null))));
|
|
36
|
+
}
|
|
37
|
+
var _default = exports["default"] = AccessControlScreen;
|
|
38
|
+
function AccessControlCard(props) {
|
|
39
|
+
var _useSelector;
|
|
40
|
+
var _useTranslation = (0, _reactI18next.useTranslation)(),
|
|
41
|
+
t = _useTranslation.t,
|
|
42
|
+
i18n = _useTranslation.i18n;
|
|
43
|
+
var tenant = (0, _reactRedux.useSelector)(function (state) {
|
|
44
|
+
var _state$tenant;
|
|
45
|
+
return (_state$tenant = state.tenant) === null || _state$tenant === void 0 ? void 0 : _state$tenant.current;
|
|
46
|
+
});
|
|
47
|
+
var userinfo = (0, _reactRedux.useSelector)(function (state) {
|
|
48
|
+
var _state$auth;
|
|
49
|
+
return (_state$auth = state.auth) === null || _state$auth === void 0 ? void 0 : _state$auth.userinfo;
|
|
50
|
+
});
|
|
51
|
+
var resources = ((_useSelector = (0, _reactRedux.useSelector)(function (state) {
|
|
52
|
+
var _state$auth2;
|
|
53
|
+
return (_state$auth2 = state.auth) === null || _state$auth2 === void 0 ? void 0 : _state$auth2.resources;
|
|
54
|
+
})) === null || _useSelector === void 0 ? void 0 : _useSelector.sort()) || [];
|
|
55
|
+
return /*#__PURE__*/_react["default"].createElement(_reactstrap.Card, null, /*#__PURE__*/_react["default"].createElement(_reactstrap.CardHeader, {
|
|
56
|
+
className: "card-header-flex"
|
|
57
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
58
|
+
className: "flex-fill"
|
|
59
|
+
}, /*#__PURE__*/_react["default"].createElement("h3", null, t('AccessControlScreen|Access control')))), /*#__PURE__*/_react["default"].createElement("ul", {
|
|
60
|
+
className: "list-group list-group-flush"
|
|
61
|
+
}, (userinfo === null || userinfo === void 0 ? void 0 : userinfo.username) && /*#__PURE__*/_react["default"].createElement("li", {
|
|
62
|
+
className: "list-group-item"
|
|
63
|
+
}, /*#__PURE__*/_react["default"].createElement(_reactstrap.Row, null, /*#__PURE__*/_react["default"].createElement(_reactstrap.Col, {
|
|
64
|
+
className: "col-6"
|
|
65
|
+
}, t('AccessControlScreen|Username')), /*#__PURE__*/_react["default"].createElement(_reactstrap.Col, null, userinfo.username))), tenant && /*#__PURE__*/_react["default"].createElement("li", {
|
|
66
|
+
className: "list-group-item"
|
|
67
|
+
}, /*#__PURE__*/_react["default"].createElement(_reactstrap.Row, null, /*#__PURE__*/_react["default"].createElement(_reactstrap.Col, {
|
|
68
|
+
className: "col-6"
|
|
69
|
+
}, t('AccessControlScreen|Tenant')), /*#__PURE__*/_react["default"].createElement(_reactstrap.Col, null, tenant))), resources && /*#__PURE__*/_react["default"].createElement("li", {
|
|
70
|
+
className: "list-group-item"
|
|
71
|
+
}, /*#__PURE__*/_react["default"].createElement(_reactstrap.Row, null, /*#__PURE__*/_react["default"].createElement(_reactstrap.Col, {
|
|
72
|
+
className: "col-6"
|
|
73
|
+
}, t('AccessControlScreen|Resources')), /*#__PURE__*/_react["default"].createElement(_reactstrap.Col, null, resources.map(function (resource) {
|
|
74
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
75
|
+
key: resource
|
|
76
|
+
}, resource);
|
|
77
|
+
}))))));
|
|
78
|
+
}
|
|
@@ -0,0 +1,161 @@
|
|
|
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"] = InvitationScreen;
|
|
9
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
10
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
11
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
12
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
13
|
+
var _reactI18next = require("react-i18next");
|
|
14
|
+
var _reactRedux = require("react-redux");
|
|
15
|
+
var _asab_webui_components = require("asab_webui_components");
|
|
16
|
+
var _reactRouterDom = require("react-router-dom");
|
|
17
|
+
var _reactstrap = require("reactstrap");
|
|
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
|
+
// Component that handles user invitation
|
|
21
|
+
function InvitationScreen(props) {
|
|
22
|
+
var _useState = (0, _react.useState)(''),
|
|
23
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
24
|
+
emailValue = _useState2[0],
|
|
25
|
+
setEmailValue = _useState2[1];
|
|
26
|
+
var _useState3 = (0, _react.useState)(undefined),
|
|
27
|
+
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
|
28
|
+
isInvitationSuccessful = _useState4[0],
|
|
29
|
+
setIsInvitationSuccessful = _useState4[1];
|
|
30
|
+
var tenant = (0, _reactRedux.useSelector)(function (state) {
|
|
31
|
+
var _state$tenant;
|
|
32
|
+
return (_state$tenant = state.tenant) === null || _state$tenant === void 0 ? void 0 : _state$tenant.current;
|
|
33
|
+
});
|
|
34
|
+
var _useTranslation = (0, _reactI18next.useTranslation)(),
|
|
35
|
+
t = _useTranslation.t;
|
|
36
|
+
var navigate = (0, _reactRouterDom.useNavigate)();
|
|
37
|
+
var SeaCatAuthAPI = props.app.axiosCreate('seacat-auth');
|
|
38
|
+
|
|
39
|
+
// Validate email input
|
|
40
|
+
var emailValidation = function emailValidation(e) {
|
|
41
|
+
e.preventDefault();
|
|
42
|
+
setEmailValue(e.target.value);
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
// Send invitation to the specified email
|
|
46
|
+
var sendInvitation = /*#__PURE__*/function () {
|
|
47
|
+
var _ref = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee(e) {
|
|
48
|
+
var body, _response$data, response;
|
|
49
|
+
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
50
|
+
while (1) switch (_context.prev = _context.next) {
|
|
51
|
+
case 0:
|
|
52
|
+
e.preventDefault();
|
|
53
|
+
body = {
|
|
54
|
+
email: emailValue
|
|
55
|
+
};
|
|
56
|
+
_context.prev = 2;
|
|
57
|
+
_context.next = 5;
|
|
58
|
+
return SeaCatAuthAPI.post("/account/".concat(tenant, "/invite"), body);
|
|
59
|
+
case 5:
|
|
60
|
+
response = _context.sent;
|
|
61
|
+
if (!((response === null || response === void 0 || (_response$data = response.data) === null || _response$data === void 0 ? void 0 : _response$data.result) !== 'OK')) {
|
|
62
|
+
_context.next = 8;
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
throw new Error('Invitation has not been sent');
|
|
66
|
+
case 8:
|
|
67
|
+
setIsInvitationSuccessful(true);
|
|
68
|
+
setEmailValue('');
|
|
69
|
+
_context.next = 15;
|
|
70
|
+
break;
|
|
71
|
+
case 12:
|
|
72
|
+
_context.prev = 12;
|
|
73
|
+
_context.t0 = _context["catch"](2);
|
|
74
|
+
setIsInvitationSuccessful(false);
|
|
75
|
+
case 15:
|
|
76
|
+
case "end":
|
|
77
|
+
return _context.stop();
|
|
78
|
+
}
|
|
79
|
+
}, _callee, null, [[2, 12]]);
|
|
80
|
+
}));
|
|
81
|
+
return function sendInvitation(_x) {
|
|
82
|
+
return _ref.apply(this, arguments);
|
|
83
|
+
};
|
|
84
|
+
}();
|
|
85
|
+
|
|
86
|
+
// Display for successful invitation
|
|
87
|
+
var SuccessfulInvitationCardBody = function SuccessfulInvitationCardBody() {
|
|
88
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("h6", null, t('InvitationScreen|Invitation has been sent successfully')), /*#__PURE__*/_react["default"].createElement("div", {
|
|
89
|
+
className: "mt-2"
|
|
90
|
+
}, /*#__PURE__*/_react["default"].createElement(_reactstrap.Button, {
|
|
91
|
+
block: true,
|
|
92
|
+
onClick: function onClick() {
|
|
93
|
+
return navigate('/auth/credentials');
|
|
94
|
+
},
|
|
95
|
+
color: "primary",
|
|
96
|
+
size: "lg"
|
|
97
|
+
}, t('General|Continue'))));
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
// Display for unsuccessful invitation
|
|
101
|
+
var UnsuccessfulInvitationCardBody = function UnsuccessfulInvitationCardBody() {
|
|
102
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("h6", null, t('InvitationScreen|Invitation has not been sent')), /*#__PURE__*/_react["default"].createElement(_reactstrap.FormText, null, t('InvitationScreen|The user could not be invited')), /*#__PURE__*/_react["default"].createElement("div", {
|
|
103
|
+
className: "mt-2"
|
|
104
|
+
}, /*#__PURE__*/_react["default"].createElement(_reactstrap.Button, {
|
|
105
|
+
block: true,
|
|
106
|
+
onClick: function onClick() {
|
|
107
|
+
return setIsInvitationSuccessful(undefined);
|
|
108
|
+
},
|
|
109
|
+
color: "primary",
|
|
110
|
+
size: "lg"
|
|
111
|
+
}, t('General|Back'))));
|
|
112
|
+
};
|
|
113
|
+
return /*#__PURE__*/_react["default"].createElement(_reactstrap.Container, {
|
|
114
|
+
fluid: true,
|
|
115
|
+
className: isInvitationSuccessful == undefined ? '' : 'h-100'
|
|
116
|
+
}, isInvitationSuccessful != undefined ? /*#__PURE__*/_react["default"].createElement(_asab_webui_components.ResultCard, {
|
|
117
|
+
isSuccessful: isInvitationSuccessful ? true : false,
|
|
118
|
+
body: isInvitationSuccessful ? /*#__PURE__*/_react["default"].createElement(SuccessfulInvitationCardBody, null) : /*#__PURE__*/_react["default"].createElement(UnsuccessfulInvitationCardBody, null)
|
|
119
|
+
}) : /*#__PURE__*/_react["default"].createElement(_reactstrap.Row, {
|
|
120
|
+
className: "justify-content-center pt-5"
|
|
121
|
+
}, /*#__PURE__*/_react["default"].createElement(_reactstrap.Col, {
|
|
122
|
+
md: "4"
|
|
123
|
+
}, /*#__PURE__*/_react["default"].createElement(_reactstrap.Form, {
|
|
124
|
+
onSubmit: function onSubmit(e) {
|
|
125
|
+
sendInvitation(e);
|
|
126
|
+
}
|
|
127
|
+
}, /*#__PURE__*/_react["default"].createElement(_reactstrap.Card, {
|
|
128
|
+
className: "invite-card"
|
|
129
|
+
}, /*#__PURE__*/_react["default"].createElement(_reactstrap.CardHeader, {
|
|
130
|
+
className: "card-header-flex"
|
|
131
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
132
|
+
className: "flex-fill"
|
|
133
|
+
}, /*#__PURE__*/_react["default"].createElement("h3", null, /*#__PURE__*/_react["default"].createElement("i", {
|
|
134
|
+
className: "bi bi-person-plus pe-2"
|
|
135
|
+
}), t('InvitationScreen|Invite other users')))), /*#__PURE__*/_react["default"].createElement(_reactstrap.CardBody, null, /*#__PURE__*/_react["default"].createElement(_reactstrap.Label, null, t('InvitationScreen|Enter the email to invite a user')), /*#__PURE__*/_react["default"].createElement(_reactstrap.InputGroup, null, /*#__PURE__*/_react["default"].createElement(_reactstrap.InputGroupText, null, /*#__PURE__*/_react["default"].createElement("i", {
|
|
136
|
+
className: "bi bi-envelope-at"
|
|
137
|
+
})), /*#__PURE__*/_react["default"].createElement(_reactstrap.Input, {
|
|
138
|
+
name: "email",
|
|
139
|
+
type: "email",
|
|
140
|
+
autoComplete: "email",
|
|
141
|
+
autoFocus: true,
|
|
142
|
+
value: emailValue,
|
|
143
|
+
onChange: function onChange(e) {
|
|
144
|
+
emailValidation(e);
|
|
145
|
+
}
|
|
146
|
+
}))), /*#__PURE__*/_react["default"].createElement(_reactstrap.CardFooter, {
|
|
147
|
+
className: "card-footer-flex"
|
|
148
|
+
}, /*#__PURE__*/_react["default"].createElement(_reactstrap.Button, {
|
|
149
|
+
outline: true,
|
|
150
|
+
color: "primary",
|
|
151
|
+
type: "button",
|
|
152
|
+
onClick: function onClick() {
|
|
153
|
+
return navigate(-1);
|
|
154
|
+
}
|
|
155
|
+
}, t('General|Cancel')), /*#__PURE__*/_react["default"].createElement("div", {
|
|
156
|
+
className: "flex-fill"
|
|
157
|
+
}, "\xA0"), /*#__PURE__*/_react["default"].createElement(_reactstrap.Button, {
|
|
158
|
+
color: "primary",
|
|
159
|
+
disabled: emailValue === '' // Disable button if input is empty
|
|
160
|
+
}, t('InvitationScreen|Send'))))))));
|
|
161
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports["default"] = LanguageDropdown;
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
var _reactI18next = require("react-i18next");
|
|
10
|
+
var _actions = require("./actions");
|
|
11
|
+
var _reactRedux = require("react-redux");
|
|
12
|
+
var _reactstrap = require("reactstrap");
|
|
13
|
+
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); }
|
|
14
|
+
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; }
|
|
15
|
+
function LanguageDropdown(props) {
|
|
16
|
+
var _useTranslation = (0, _reactI18next.useTranslation)(),
|
|
17
|
+
t = _useTranslation.t,
|
|
18
|
+
i18n = _useTranslation.i18n;
|
|
19
|
+
var changeLanguage = function changeLanguage(language) {
|
|
20
|
+
i18n.changeLanguage(language).then(function () {
|
|
21
|
+
// if the hard refresh is needed: window.location.reload(false);
|
|
22
|
+
});
|
|
23
|
+
};
|
|
24
|
+
var dispatch = (0, _reactRedux.useDispatch)();
|
|
25
|
+
(0, _react.useEffect)(function () {
|
|
26
|
+
var _i18n$language;
|
|
27
|
+
dispatch({
|
|
28
|
+
type: _actions.CHANGE_LANGUAGE,
|
|
29
|
+
language: (_i18n$language = i18n === null || i18n === void 0 ? void 0 : i18n.language) !== null && _i18n$language !== void 0 ? _i18n$language : window.navigator.language
|
|
30
|
+
});
|
|
31
|
+
}, [i18n.language]);
|
|
32
|
+
|
|
33
|
+
// This means that we basically don't know what languages are supported
|
|
34
|
+
if (i18n.options.supportedLngs == null || i18n.options.supportedLngs == false) {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
return /*#__PURE__*/_react["default"].createElement(_reactstrap.UncontrolledDropdown, {
|
|
38
|
+
direction: "down"
|
|
39
|
+
}, /*#__PURE__*/_react["default"].createElement(_reactstrap.DropdownToggle, {
|
|
40
|
+
nav: true,
|
|
41
|
+
caret: true
|
|
42
|
+
}, /*#__PURE__*/_react["default"].createElement(LanguageFlag, {
|
|
43
|
+
language: i18n.language,
|
|
44
|
+
style: {
|
|
45
|
+
width: '24px'
|
|
46
|
+
}
|
|
47
|
+
})), /*#__PURE__*/_react["default"].createElement(_reactstrap.DropdownMenu, {
|
|
48
|
+
className: "shadow"
|
|
49
|
+
}, /*#__PURE__*/_react["default"].createElement(_reactstrap.DropdownItem, {
|
|
50
|
+
header: true
|
|
51
|
+
}, t('i18n|Language')), i18n.options.supportedLngs.map(function (language, i) {
|
|
52
|
+
if (language == 'cimode') return null;
|
|
53
|
+
return /*#__PURE__*/_react["default"].createElement(_reactstrap.DropdownItem, {
|
|
54
|
+
key: language,
|
|
55
|
+
title: language,
|
|
56
|
+
onClick: function onClick() {
|
|
57
|
+
changeLanguage(language);
|
|
58
|
+
}
|
|
59
|
+
}, /*#__PURE__*/_react["default"].createElement(LanguageFlag, {
|
|
60
|
+
language: language,
|
|
61
|
+
className: "pe-2",
|
|
62
|
+
style: {
|
|
63
|
+
width: '32px'
|
|
64
|
+
}
|
|
65
|
+
}), t('i18n|language|' + language));
|
|
66
|
+
})));
|
|
67
|
+
}
|
|
68
|
+
function LanguageFlag(_ref) {
|
|
69
|
+
var language = _ref.language,
|
|
70
|
+
className = _ref.className,
|
|
71
|
+
style = _ref.style;
|
|
72
|
+
return /*#__PURE__*/_react["default"].createElement("img", {
|
|
73
|
+
className: className,
|
|
74
|
+
src: "media/locale/".concat(language, ".svg"),
|
|
75
|
+
style: style
|
|
76
|
+
});
|
|
77
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
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 _service = _interopRequireDefault(require("./service.js"));
|
|
15
|
+
var _dropdown = _interopRequireDefault(require("./dropdown.js"));
|
|
16
|
+
var _reducer = _interopRequireDefault(require("./reducer.js"));
|
|
17
|
+
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)); }
|
|
18
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
19
|
+
var I18nModule = exports["default"] = /*#__PURE__*/function (_Module) {
|
|
20
|
+
function I18nModule(app, name, props) {
|
|
21
|
+
var _this;
|
|
22
|
+
(0, _classCallCheck2["default"])(this, I18nModule);
|
|
23
|
+
_this = _callSuper(this, I18nModule, [app, "I18nModule"]);
|
|
24
|
+
_this.App = app;
|
|
25
|
+
_this.I18nService = new _service["default"](app, "I18nService");
|
|
26
|
+
_this.App.ReduxService.addReducer("language", _reducer["default"]);
|
|
27
|
+
return _this;
|
|
28
|
+
}
|
|
29
|
+
(0, _inherits2["default"])(I18nModule, _Module);
|
|
30
|
+
return (0, _createClass2["default"])(I18nModule, [{
|
|
31
|
+
key: "initialize",
|
|
32
|
+
value: function initialize() {
|
|
33
|
+
var headerService = this.App.locateService("HeaderService");
|
|
34
|
+
headerService.addComponent({
|
|
35
|
+
component: _dropdown["default"],
|
|
36
|
+
componentProps: {
|
|
37
|
+
children: "LanguageDropdown"
|
|
38
|
+
},
|
|
39
|
+
order: 500,
|
|
40
|
+
fullscreenVisible: true
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}]);
|
|
44
|
+
}(_asab_webui_components.Module);
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports["default"] = languageReducer;
|
|
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 initialValue = {
|
|
13
|
+
language: 'en'
|
|
14
|
+
};
|
|
15
|
+
function languageReducer() {
|
|
16
|
+
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialValue;
|
|
17
|
+
var action = arguments.length > 1 ? arguments[1] : undefined;
|
|
18
|
+
switch (action.type) {
|
|
19
|
+
case _actions.CHANGE_LANGUAGE:
|
|
20
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
21
|
+
current: action.language
|
|
22
|
+
});
|
|
23
|
+
default:
|
|
24
|
+
return state;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,158 @@
|
|
|
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 _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
9
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
10
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
11
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
12
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
13
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
14
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
15
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
16
|
+
var _asab_webui_components = require("asab_webui_components");
|
|
17
|
+
var _axios = _interopRequireDefault(require("axios"));
|
|
18
|
+
var _i18next = _interopRequireDefault(require("i18next"));
|
|
19
|
+
var _i18nextBrowserLanguagedetector = _interopRequireDefault(require("i18next-browser-languagedetector"));
|
|
20
|
+
var _reactI18next = require("react-i18next");
|
|
21
|
+
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; }
|
|
22
|
+
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; }
|
|
23
|
+
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)); }
|
|
24
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
25
|
+
var I18nService = exports["default"] = /*#__PURE__*/function (_Service) {
|
|
26
|
+
function I18nService(app) {
|
|
27
|
+
var _this;
|
|
28
|
+
var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "I18nService";
|
|
29
|
+
(0, _classCallCheck2["default"])(this, I18nService);
|
|
30
|
+
_this = _callSuper(this, I18nService, [app, name]);
|
|
31
|
+
app.addSplashScreenRequestor(_this);
|
|
32
|
+
_this.Sources = [];
|
|
33
|
+
var config = _this.App.Config.get('i18n');
|
|
34
|
+
if (config === undefined) {
|
|
35
|
+
config = {
|
|
36
|
+
debug: true
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// config.supportedLngs is not an array but some faked array crap so we need to convert that
|
|
41
|
+
var supportedLngs = [];
|
|
42
|
+
for (var i in config.supportedLngs) {
|
|
43
|
+
supportedLngs.push(config.supportedLngs[i]);
|
|
44
|
+
}
|
|
45
|
+
config.supportedLngs = supportedLngs;
|
|
46
|
+
|
|
47
|
+
// Missing keys are displayed without the namespace
|
|
48
|
+
config.parseMissingKeyHandler = function (key) {
|
|
49
|
+
var n = key.lastIndexOf("|");
|
|
50
|
+
if (n > 0) {
|
|
51
|
+
return key.slice(n + 1);
|
|
52
|
+
}
|
|
53
|
+
return key;
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
// Set default key separator
|
|
57
|
+
config.keySeparator = "|";
|
|
58
|
+
_this.Sources.push(/*#__PURE__*/function () {
|
|
59
|
+
var _ref = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee(language, namespace) {
|
|
60
|
+
var response;
|
|
61
|
+
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
62
|
+
while (1) switch (_context.prev = _context.next) {
|
|
63
|
+
case 0:
|
|
64
|
+
_context.next = 2;
|
|
65
|
+
return _axios["default"].get("locales/".concat(language, "/").concat(namespace, ".json"));
|
|
66
|
+
case 2:
|
|
67
|
+
response = _context.sent;
|
|
68
|
+
return _context.abrupt("return", response.data);
|
|
69
|
+
case 4:
|
|
70
|
+
case "end":
|
|
71
|
+
return _context.stop();
|
|
72
|
+
}
|
|
73
|
+
}, _callee);
|
|
74
|
+
}));
|
|
75
|
+
return function (_x, _x2) {
|
|
76
|
+
return _ref.apply(this, arguments);
|
|
77
|
+
};
|
|
78
|
+
}());
|
|
79
|
+
_this.Backend = {
|
|
80
|
+
type: "backend",
|
|
81
|
+
init: function init(services, backendOptions, i18nextOptions) {},
|
|
82
|
+
read: function read(language, namespace, callback) {
|
|
83
|
+
// Prepare all promises that obtain (downloads) translations for a given language and namespace
|
|
84
|
+
var promises = _this.Sources.flatMap(function (source) {
|
|
85
|
+
return source(language, namespace);
|
|
86
|
+
});
|
|
87
|
+
return new Promise(/*#__PURE__*/function () {
|
|
88
|
+
var _ref2 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2(resolve, reject) {
|
|
89
|
+
var bundles, combined;
|
|
90
|
+
return _regenerator["default"].wrap(function _callee2$(_context2) {
|
|
91
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
92
|
+
case 0:
|
|
93
|
+
_context2.next = 2;
|
|
94
|
+
return Promise.all(promises.map(function (p) {
|
|
95
|
+
return p["catch"](function (err) {
|
|
96
|
+
console.warn("Failed to load locales:", err);
|
|
97
|
+
return {}; // Skip errors
|
|
98
|
+
});
|
|
99
|
+
}));
|
|
100
|
+
case 2:
|
|
101
|
+
bundles = _context2.sent;
|
|
102
|
+
// Combine downloaded bundles into a one
|
|
103
|
+
combined = bundles.reduce(function (accumulator, currentObject) {
|
|
104
|
+
return _objectSpread(_objectSpread({}, accumulator), currentObject);
|
|
105
|
+
}, {}); // Set the combined bundle to i18n
|
|
106
|
+
resolve(callback(null, combined));
|
|
107
|
+
case 5:
|
|
108
|
+
case "end":
|
|
109
|
+
return _context2.stop();
|
|
110
|
+
}
|
|
111
|
+
}, _callee2);
|
|
112
|
+
}));
|
|
113
|
+
return function (_x3, _x4) {
|
|
114
|
+
return _ref2.apply(this, arguments);
|
|
115
|
+
};
|
|
116
|
+
}());
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
_this.i18n = _i18next["default"].use(_this.Backend).use(_reactI18next.initReactI18next).use(_i18nextBrowserLanguagedetector["default"]).init(config, function (err, t) {
|
|
120
|
+
if (err) {
|
|
121
|
+
console.log('Failed to load localizations:', err);
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
return _this;
|
|
125
|
+
}
|
|
126
|
+
(0, _inherits2["default"])(I18nService, _Service);
|
|
127
|
+
return (0, _createClass2["default"])(I18nService, [{
|
|
128
|
+
key: "initialize",
|
|
129
|
+
value: function () {
|
|
130
|
+
var _initialize = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3() {
|
|
131
|
+
return _regenerator["default"].wrap(function _callee3$(_context3) {
|
|
132
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
133
|
+
case 0:
|
|
134
|
+
_context3.next = 2;
|
|
135
|
+
return this.i18n;
|
|
136
|
+
case 2:
|
|
137
|
+
_context3.next = 4;
|
|
138
|
+
return _i18next["default"].reloadResources();
|
|
139
|
+
case 4:
|
|
140
|
+
this.App.removeSplashScreenRequestor(this);
|
|
141
|
+
case 5:
|
|
142
|
+
case "end":
|
|
143
|
+
return _context3.stop();
|
|
144
|
+
}
|
|
145
|
+
}, _callee3, this);
|
|
146
|
+
}));
|
|
147
|
+
function initialize() {
|
|
148
|
+
return _initialize.apply(this, arguments);
|
|
149
|
+
}
|
|
150
|
+
return initialize;
|
|
151
|
+
}()
|
|
152
|
+
}, {
|
|
153
|
+
key: "addSource",
|
|
154
|
+
value: function addSource(promise) {
|
|
155
|
+
this.Sources.push(promise);
|
|
156
|
+
}
|
|
157
|
+
}]);
|
|
158
|
+
}(_asab_webui_components.Service);
|
|
@@ -0,0 +1,53 @@
|
|
|
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
|
+
var _reactstrap = require("reactstrap");
|
|
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
|
+
function TenantDropdown(_ref) {
|
|
15
|
+
var tenants = _ref.tenants,
|
|
16
|
+
current = _ref.current;
|
|
17
|
+
var _useTranslation = (0, _reactI18next.useTranslation)(),
|
|
18
|
+
t = _useTranslation.t;
|
|
19
|
+
return /*#__PURE__*/_react["default"].createElement(_reactstrap.UncontrolledDropdown, {
|
|
20
|
+
direction: "down",
|
|
21
|
+
title: t('tenant|Tenant')
|
|
22
|
+
}, /*#__PURE__*/_react["default"].createElement(_reactstrap.DropdownToggle, {
|
|
23
|
+
nav: true,
|
|
24
|
+
caret: true
|
|
25
|
+
}, /*#__PURE__*/_react["default"].createElement("i", {
|
|
26
|
+
className: "bi bi-house-lock pe-2"
|
|
27
|
+
}), /*#__PURE__*/_react["default"].createElement(TenantLabel, {
|
|
28
|
+
tenant: current
|
|
29
|
+
})), tenants && tenants.length > 0 ? /*#__PURE__*/_react["default"].createElement(_reactstrap.DropdownMenu, {
|
|
30
|
+
className: "shadow"
|
|
31
|
+
}, /*#__PURE__*/_react["default"].createElement(_reactstrap.DropdownItem, {
|
|
32
|
+
header: true
|
|
33
|
+
}, "Tenants"), tenants.map(function (tenant, i) {
|
|
34
|
+
return /*#__PURE__*/_react["default"].createElement(_reactstrap.DropdownItem, {
|
|
35
|
+
key: i,
|
|
36
|
+
tag: "a",
|
|
37
|
+
href: '?tenant=' + tenant + '#/'
|
|
38
|
+
}, /*#__PURE__*/_react["default"].createElement(TenantLabel, {
|
|
39
|
+
tenant: tenant
|
|
40
|
+
}));
|
|
41
|
+
})) : null);
|
|
42
|
+
}
|
|
43
|
+
function TenantLabel(_ref2) {
|
|
44
|
+
var tenant = _ref2.tenant;
|
|
45
|
+
return /*#__PURE__*/_react["default"].createElement("span", null, tenant);
|
|
46
|
+
}
|
|
47
|
+
var mapStateToProps = function mapStateToProps(state) {
|
|
48
|
+
return {
|
|
49
|
+
current: state.tenant.current,
|
|
50
|
+
tenants: state.tenant.tenants
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
var _default = exports["default"] = (0, _reactRedux.connect)(mapStateToProps, null)(TenantDropdown);
|