asab_webui_shell 25.1.11 → 25.1.13
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/dist/components/locationReplace.js +4 -16
- package/dist/config/ConfigReducer.js +1 -1
- package/dist/config/ConfigService.js +116 -137
- package/dist/containers/AdvancedMode/reducer.js +2 -2
- package/dist/containers/Alerts/index.js +18 -30
- package/dist/containers/Alerts/reducer.js +5 -6
- package/dist/containers/Application.js +531 -663
- package/dist/containers/AttentionRequired/reducer.js +2 -2
- package/dist/containers/FullscreenMode/reducer.js +2 -2
- package/dist/containers/Header/ApplicationScreenTitle/ApplicationScreenTitle.js +15 -16
- package/dist/containers/Header/ApplicationScreenTitle/index.js +6 -6
- package/dist/containers/Header/Help/HelpButton.js +17 -27
- package/dist/containers/Header/Help/HelpService.js +13 -24
- package/dist/containers/Header/Preview/PreviewFlag.js +6 -5
- package/dist/containers/Header/Preview/PreviewService.js +13 -24
- package/dist/containers/Header/index.js +15 -17
- package/dist/containers/Header/reducer.js +4 -4
- package/dist/containers/Navigation/index.js +35 -55
- package/dist/containers/Navigation/reducer.js +7 -13
- package/dist/containers/RouteErrorHandler/ErrorContainer.js +17 -19
- package/dist/containers/RouteErrorHandler/index.js +28 -44
- package/dist/containers/Router/ApplicationRouter.js +14 -16
- package/dist/containers/Router/index.js +26 -42
- package/dist/containers/Router/reducer.js +3 -3
- package/dist/containers/Sidebar/NavbarBrand.js +14 -23
- package/dist/containers/Sidebar/SidebarBottomItem.js +16 -15
- package/dist/containers/Sidebar/SidebarIcon.js +9 -7
- package/dist/containers/Sidebar/SidebarItem.js +70 -85
- package/dist/containers/Sidebar/SidebarItemRenderer.js +20 -20
- package/dist/containers/Sidebar/index.js +20 -36
- package/dist/containers/Sidebar/reducer.js +3 -3
- package/dist/containers/Sidepanel/Sidepanel.js +18 -26
- package/dist/containers/Toast/ToastComponent.js +12 -12
- package/dist/containers/Toast/ToastContainer.js +19 -30
- package/dist/containers/Toast/reducer.js +3 -6
- package/dist/index.js +5 -5
- package/dist/modules/about/AboutScreen.js +30 -38
- package/dist/modules/about/index.js +8 -26
- package/dist/modules/auth/api.js +110 -156
- package/dist/modules/auth/components/SessionExpirationAlert.js +10 -9
- package/dist/modules/auth/header.js +25 -23
- package/dist/modules/auth/index.js +440 -692
- package/dist/modules/auth/reducer.js +2 -2
- package/dist/modules/auth/screens/AccessControlScreen.js +24 -25
- package/dist/modules/auth/screens/InvitationScreen.js +89 -128
- package/dist/modules/i18n/dropdown.js +24 -23
- package/dist/modules/i18n/index.js +20 -33
- package/dist/modules/i18n/reducer.js +2 -2
- package/dist/modules/i18n/service.js +48 -102
- package/dist/modules/tenant/TenantDropdown.js +28 -27
- package/dist/modules/tenant/access/AccessDeniedCard.js +28 -54
- package/dist/modules/tenant/index.js +16 -29
- package/dist/modules/tenant/reducer.js +1 -1
- package/dist/modules/tenant/service.js +123 -207
- package/dist/screens/InvalidRouteScreen.js +10 -9
- package/dist/screens/SuspenseScreen.js +11 -20
- package/dist/screens/UnauthorizedAccessScreen.js +18 -21
- package/dist/services/AttentionRequiredService.js +117 -142
- package/dist/services/BrandingService.js +63 -80
- package/dist/services/HeaderService.js +47 -66
- package/dist/services/ReduxService.js +11 -17
- package/dist/services/TitleService.js +13 -24
- package/dist/theme/ThemeButton.js +13 -10
- package/dist/theme/ThemeReducer.js +1 -1
- package/dist/theme/ThemeService.js +25 -38
- package/package.json +1 -1
|
@@ -4,11 +4,11 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports
|
|
7
|
+
exports.default = reducer;
|
|
8
8
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
9
|
var _actions = require("./actions");
|
|
10
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
|
|
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
12
|
var initialState = {
|
|
13
13
|
userinfo: null,
|
|
14
14
|
resources: [],
|
|
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports
|
|
7
|
+
exports.default = void 0;
|
|
8
8
|
var _react = _interopRequireDefault(require("react"));
|
|
9
9
|
var _reactI18next = require("react-i18next");
|
|
10
10
|
var _reactRedux = require("react-redux");
|
|
@@ -28,51 +28,50 @@ var _reactstrap = require("reactstrap");
|
|
|
28
28
|
*/
|
|
29
29
|
|
|
30
30
|
function AccessControlScreen(props) {
|
|
31
|
-
return /*#__PURE__*/_react
|
|
31
|
+
return /*#__PURE__*/_react.default.createElement(_reactstrap.Container, null, /*#__PURE__*/_react.default.createElement(_reactstrap.Row, {
|
|
32
32
|
className: "justify-content-center pt-5"
|
|
33
|
-
}, /*#__PURE__*/_react
|
|
33
|
+
}, /*#__PURE__*/_react.default.createElement(_reactstrap.Col, {
|
|
34
34
|
md: "6"
|
|
35
|
-
}, /*#__PURE__*/_react
|
|
35
|
+
}, /*#__PURE__*/_react.default.createElement(AccessControlCard, null))));
|
|
36
36
|
}
|
|
37
|
-
var _default = exports
|
|
37
|
+
var _default = exports.default = AccessControlScreen;
|
|
38
38
|
function AccessControlCard(props) {
|
|
39
39
|
var _useSelector;
|
|
40
|
-
var
|
|
41
|
-
t
|
|
42
|
-
i18n
|
|
43
|
-
|
|
40
|
+
var {
|
|
41
|
+
t,
|
|
42
|
+
i18n
|
|
43
|
+
} = (0, _reactI18next.useTranslation)();
|
|
44
|
+
var tenant = (0, _reactRedux.useSelector)(state => {
|
|
44
45
|
var _state$tenant;
|
|
45
46
|
return (_state$tenant = state.tenant) === null || _state$tenant === void 0 ? void 0 : _state$tenant.current;
|
|
46
47
|
});
|
|
47
|
-
var userinfo = (0, _reactRedux.useSelector)(
|
|
48
|
+
var userinfo = (0, _reactRedux.useSelector)(state => {
|
|
48
49
|
var _state$auth;
|
|
49
50
|
return (_state$auth = state.auth) === null || _state$auth === void 0 ? void 0 : _state$auth.userinfo;
|
|
50
51
|
});
|
|
51
|
-
var resources = ((_useSelector = (0, _reactRedux.useSelector)(
|
|
52
|
+
var resources = ((_useSelector = (0, _reactRedux.useSelector)(state => {
|
|
52
53
|
var _state$auth2;
|
|
53
54
|
return (_state$auth2 = state.auth) === null || _state$auth2 === void 0 ? void 0 : _state$auth2.resources;
|
|
54
55
|
})) === null || _useSelector === void 0 ? void 0 : _useSelector.sort()) || [];
|
|
55
|
-
return /*#__PURE__*/_react
|
|
56
|
+
return /*#__PURE__*/_react.default.createElement(_reactstrap.Card, null, /*#__PURE__*/_react.default.createElement(_reactstrap.CardHeader, {
|
|
56
57
|
className: "card-header-flex"
|
|
57
|
-
}, /*#__PURE__*/_react
|
|
58
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
58
59
|
className: "flex-fill"
|
|
59
|
-
}, /*#__PURE__*/_react
|
|
60
|
+
}, /*#__PURE__*/_react.default.createElement("h3", null, t('AccessControlScreen|Access control')))), /*#__PURE__*/_react.default.createElement("ul", {
|
|
60
61
|
className: "list-group list-group-flush"
|
|
61
|
-
}, (userinfo === null || userinfo === void 0 ? void 0 : userinfo.username) && /*#__PURE__*/_react
|
|
62
|
+
}, (userinfo === null || userinfo === void 0 ? void 0 : userinfo.username) && /*#__PURE__*/_react.default.createElement("li", {
|
|
62
63
|
className: "list-group-item"
|
|
63
|
-
}, /*#__PURE__*/_react
|
|
64
|
+
}, /*#__PURE__*/_react.default.createElement(_reactstrap.Row, null, /*#__PURE__*/_react.default.createElement(_reactstrap.Col, {
|
|
64
65
|
className: "col-6"
|
|
65
|
-
}, t('AccessControlScreen|Username')), /*#__PURE__*/_react
|
|
66
|
+
}, t('AccessControlScreen|Username')), /*#__PURE__*/_react.default.createElement(_reactstrap.Col, null, userinfo.username))), tenant && /*#__PURE__*/_react.default.createElement("li", {
|
|
66
67
|
className: "list-group-item"
|
|
67
|
-
}, /*#__PURE__*/_react
|
|
68
|
+
}, /*#__PURE__*/_react.default.createElement(_reactstrap.Row, null, /*#__PURE__*/_react.default.createElement(_reactstrap.Col, {
|
|
68
69
|
className: "col-6"
|
|
69
|
-
}, t('AccessControlScreen|Tenant')), /*#__PURE__*/_react
|
|
70
|
+
}, t('AccessControlScreen|Tenant')), /*#__PURE__*/_react.default.createElement(_reactstrap.Col, null, tenant))), resources && /*#__PURE__*/_react.default.createElement("li", {
|
|
70
71
|
className: "list-group-item"
|
|
71
|
-
}, /*#__PURE__*/_react
|
|
72
|
+
}, /*#__PURE__*/_react.default.createElement(_reactstrap.Row, null, /*#__PURE__*/_react.default.createElement(_reactstrap.Col, {
|
|
72
73
|
className: "col-6"
|
|
73
|
-
}, t('AccessControlScreen|Resources')), /*#__PURE__*/_react
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
}, resource);
|
|
77
|
-
}))))));
|
|
74
|
+
}, t('AccessControlScreen|Resources')), /*#__PURE__*/_react.default.createElement(_reactstrap.Col, null, resources.map(resource => /*#__PURE__*/_react.default.createElement("div", {
|
|
75
|
+
key: resource
|
|
76
|
+
}, resource)))))));
|
|
78
77
|
}
|
|
@@ -1,216 +1,177 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
|
-
exports
|
|
9
|
-
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
7
|
+
exports.default = InvitationScreen;
|
|
10
8
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
11
|
-
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
12
9
|
var _react = _interopRequireWildcard(require("react"));
|
|
13
10
|
var _reactI18next = require("react-i18next");
|
|
14
11
|
var _reactRedux = require("react-redux");
|
|
15
12
|
var _asab_webui_components = require("asab_webui_components");
|
|
16
13
|
var _reactRouterDom = require("react-router-dom");
|
|
17
14
|
var _reactstrap = require("reactstrap");
|
|
18
|
-
function
|
|
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; }
|
|
15
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
20
16
|
// Component that handles user invitation
|
|
21
17
|
function InvitationScreen(props) {
|
|
22
|
-
var
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
var
|
|
27
|
-
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
|
28
|
-
isInvitationSuccessful = _useState4[0],
|
|
29
|
-
setIsInvitationSuccessful = _useState4[1];
|
|
30
|
-
var _useState5 = (0, _react.useState)(undefined),
|
|
31
|
-
_useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
|
|
32
|
-
registrationUrl = _useState6[0],
|
|
33
|
-
setRegistrationUrl = _useState6[1];
|
|
34
|
-
var _useState7 = (0, _react.useState)(undefined),
|
|
35
|
-
_useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
|
|
36
|
-
urlCopied = _useState8[0],
|
|
37
|
-
setUrlCopied = _useState8[1];
|
|
38
|
-
var tenant = (0, _reactRedux.useSelector)(function (state) {
|
|
18
|
+
var [emailValue, setEmailValue] = (0, _react.useState)('');
|
|
19
|
+
var [isInvitationSuccessful, setIsInvitationSuccessful] = (0, _react.useState)(undefined);
|
|
20
|
+
var [registrationUrl, setRegistrationUrl] = (0, _react.useState)(undefined);
|
|
21
|
+
var [urlCopied, setUrlCopied] = (0, _react.useState)(undefined);
|
|
22
|
+
var tenant = (0, _reactRedux.useSelector)(state => {
|
|
39
23
|
var _state$tenant;
|
|
40
24
|
return (_state$tenant = state.tenant) === null || _state$tenant === void 0 ? void 0 : _state$tenant.current;
|
|
41
25
|
});
|
|
42
|
-
var
|
|
43
|
-
t
|
|
26
|
+
var {
|
|
27
|
+
t
|
|
28
|
+
} = (0, _reactI18next.useTranslation)();
|
|
44
29
|
var navigate = (0, _reactRouterDom.useNavigate)();
|
|
45
30
|
var SeaCatAuthAPI = props.app.axiosCreate('seacat-auth');
|
|
46
31
|
|
|
47
32
|
// Copy registration URL if there is any
|
|
48
|
-
var copyRegistrationUrl =
|
|
33
|
+
var copyRegistrationUrl = () => {
|
|
49
34
|
if (!registrationUrl) {
|
|
50
35
|
console.error('No registration URL to copy.');
|
|
51
36
|
return;
|
|
52
37
|
}
|
|
53
|
-
navigator.clipboard.writeText(registrationUrl).then(
|
|
38
|
+
navigator.clipboard.writeText(registrationUrl).then(() => {
|
|
54
39
|
setUrlCopied(true);
|
|
55
|
-
var timeoutId = setTimeout(
|
|
56
|
-
|
|
57
|
-
}, 3000);
|
|
58
|
-
return function () {
|
|
40
|
+
var timeoutId = setTimeout(() => setUrlCopied(false), 3000);
|
|
41
|
+
return () => {
|
|
59
42
|
clearTimeout(timeoutId);
|
|
60
43
|
};
|
|
61
|
-
})
|
|
44
|
+
}).catch(error => {
|
|
62
45
|
console.error('Failed to copy registration URL: ', error);
|
|
63
46
|
});
|
|
64
47
|
};
|
|
65
48
|
|
|
66
49
|
// Validate email input
|
|
67
|
-
var emailValidation =
|
|
50
|
+
var emailValidation = e => {
|
|
68
51
|
e.preventDefault();
|
|
69
52
|
setEmailValue(e.target.value);
|
|
70
53
|
};
|
|
71
54
|
|
|
72
55
|
// Send invitation to the specified email
|
|
73
56
|
var sendInvitation = /*#__PURE__*/function () {
|
|
74
|
-
var _ref = (0, _asyncToGenerator2
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
_context.next = 17;
|
|
102
|
-
break;
|
|
103
|
-
case 13:
|
|
104
|
-
_context.prev = 13;
|
|
105
|
-
_context.t0 = _context["catch"](2);
|
|
106
|
-
setIsInvitationSuccessful(false);
|
|
107
|
-
if (_context.t0 !== null && _context.t0 !== void 0 && (_e$response = _context.t0.response) !== null && _e$response !== void 0 && (_e$response = _e$response.data) !== null && _e$response !== void 0 && _e$response.registration_url) {
|
|
108
|
-
setRegistrationUrl(_context.t0 === null || _context.t0 === void 0 || (_e$response2 = _context.t0.response) === null || _e$response2 === void 0 || (_e$response2 = _e$response2.data) === null || _e$response2 === void 0 ? void 0 : _e$response2.registration_url);
|
|
109
|
-
} else {
|
|
110
|
-
setRegistrationUrl(undefined);
|
|
111
|
-
}
|
|
112
|
-
case 17:
|
|
113
|
-
case "end":
|
|
114
|
-
return _context.stop();
|
|
57
|
+
var _ref = (0, _asyncToGenerator2.default)(function* (e) {
|
|
58
|
+
e.preventDefault();
|
|
59
|
+
var body = {
|
|
60
|
+
email: emailValue
|
|
61
|
+
};
|
|
62
|
+
try {
|
|
63
|
+
var _response$data, _response$data2;
|
|
64
|
+
var response = yield SeaCatAuthAPI.post("/account/".concat(tenant, "/invite"), body);
|
|
65
|
+
if ((response === null || response === void 0 || (_response$data = response.data) === null || _response$data === void 0 ? void 0 : _response$data.result) !== 'OK') {
|
|
66
|
+
throw new Error('Invitation has not been sent');
|
|
67
|
+
}
|
|
68
|
+
setIsInvitationSuccessful(true);
|
|
69
|
+
setEmailValue('');
|
|
70
|
+
if (response !== null && response !== void 0 && (_response$data2 = response.data) !== null && _response$data2 !== void 0 && _response$data2.registration_url) {
|
|
71
|
+
var _response$data3;
|
|
72
|
+
setRegistrationUrl(response === null || response === void 0 || (_response$data3 = response.data) === null || _response$data3 === void 0 ? void 0 : _response$data3.registration_url);
|
|
73
|
+
} else {
|
|
74
|
+
setRegistrationUrl(undefined);
|
|
75
|
+
}
|
|
76
|
+
} catch (e) {
|
|
77
|
+
var _e$response;
|
|
78
|
+
setIsInvitationSuccessful(false);
|
|
79
|
+
if (e !== null && e !== void 0 && (_e$response = e.response) !== null && _e$response !== void 0 && (_e$response = _e$response.data) !== null && _e$response !== void 0 && _e$response.registration_url) {
|
|
80
|
+
var _e$response2;
|
|
81
|
+
setRegistrationUrl(e === null || e === void 0 || (_e$response2 = e.response) === null || _e$response2 === void 0 || (_e$response2 = _e$response2.data) === null || _e$response2 === void 0 ? void 0 : _e$response2.registration_url);
|
|
82
|
+
} else {
|
|
83
|
+
setRegistrationUrl(undefined);
|
|
115
84
|
}
|
|
116
|
-
}
|
|
117
|
-
})
|
|
85
|
+
}
|
|
86
|
+
});
|
|
118
87
|
return function sendInvitation(_x) {
|
|
119
88
|
return _ref.apply(this, arguments);
|
|
120
89
|
};
|
|
121
90
|
}();
|
|
122
91
|
|
|
123
92
|
// Component that displays the registration URL with a copy button
|
|
124
|
-
var CopyableRegistrationUrl =
|
|
125
|
-
var
|
|
126
|
-
|
|
93
|
+
var CopyableRegistrationUrl = _ref2 => {
|
|
94
|
+
var {
|
|
95
|
+
registrationUrl
|
|
96
|
+
} = _ref2;
|
|
97
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_reactstrap.FormText, null, t('InvitationScreen|If you want to invite the user manually, message them the registration URL below:')), /*#__PURE__*/_react.default.createElement(_reactstrap.InputGroup, null, /*#__PURE__*/_react.default.createElement(_reactstrap.Input, {
|
|
127
98
|
readOnly: true,
|
|
128
99
|
value: registrationUrl
|
|
129
|
-
}), /*#__PURE__*/_react
|
|
100
|
+
}), /*#__PURE__*/_react.default.createElement(_reactstrap.Button, {
|
|
130
101
|
outline: true,
|
|
131
102
|
color: "primary",
|
|
132
103
|
className: "text-nowrap",
|
|
133
104
|
onClick: copyRegistrationUrl
|
|
134
|
-
}, /*#__PURE__*/_react
|
|
105
|
+
}, /*#__PURE__*/_react.default.createElement("i", {
|
|
135
106
|
className: urlCopied ? 'bi bi-clipboard-check pe-2' : 'bi bi-clipboard pe-2',
|
|
136
107
|
title: t('InvitationScreen|Copy to clipboard')
|
|
137
108
|
}), urlCopied ? t('InvitationScreen|Copied!') : t('InvitationScreen|Copy URL'))));
|
|
138
109
|
};
|
|
139
110
|
|
|
140
111
|
// Display for successful invitation
|
|
141
|
-
var SuccessfulInvitationCardBody =
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
color: "primary",
|
|
151
|
-
size: "lg"
|
|
152
|
-
}, t('General|Continue'))));
|
|
153
|
-
};
|
|
112
|
+
var SuccessfulInvitationCardBody = () => /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("h6", null, t('InvitationScreen|Invitation was sent successfully')), registrationUrl && /*#__PURE__*/_react.default.createElement(CopyableRegistrationUrl, {
|
|
113
|
+
registrationUrl: registrationUrl
|
|
114
|
+
}), /*#__PURE__*/_react.default.createElement("div", {
|
|
115
|
+
className: "mt-2"
|
|
116
|
+
}, /*#__PURE__*/_react.default.createElement(_reactstrap.Button, {
|
|
117
|
+
onClick: () => navigate('/auth/credentials'),
|
|
118
|
+
color: "primary",
|
|
119
|
+
size: "lg"
|
|
120
|
+
}, t('General|Continue'))));
|
|
154
121
|
|
|
155
122
|
// Display for unsuccessful invitation
|
|
156
|
-
var UnsuccessfulInvitationCardBody =
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
size: "lg"
|
|
167
|
-
}, t('General|Back'))));
|
|
168
|
-
};
|
|
169
|
-
return /*#__PURE__*/_react["default"].createElement(_reactstrap.Container, {
|
|
123
|
+
var UnsuccessfulInvitationCardBody = () => /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("h6", null, t('InvitationScreen|Invitation was not sent')), registrationUrl ? /*#__PURE__*/_react.default.createElement(CopyableRegistrationUrl, {
|
|
124
|
+
registrationUrl: registrationUrl
|
|
125
|
+
}) : /*#__PURE__*/_react.default.createElement(_reactstrap.FormText, null, t('InvitationScreen|The user could not be invited')), /*#__PURE__*/_react.default.createElement("div", {
|
|
126
|
+
className: "mt-2"
|
|
127
|
+
}, /*#__PURE__*/_react.default.createElement(_reactstrap.Button, {
|
|
128
|
+
onClick: () => setIsInvitationSuccessful(undefined),
|
|
129
|
+
color: "primary",
|
|
130
|
+
size: "lg"
|
|
131
|
+
}, t('General|Back'))));
|
|
132
|
+
return /*#__PURE__*/_react.default.createElement(_reactstrap.Container, {
|
|
170
133
|
fluid: true,
|
|
171
134
|
className: isInvitationSuccessful == undefined ? '' : 'h-100'
|
|
172
|
-
}, isInvitationSuccessful != undefined ? /*#__PURE__*/_react
|
|
135
|
+
}, isInvitationSuccessful != undefined ? /*#__PURE__*/_react.default.createElement(_asab_webui_components.ResultCard, {
|
|
173
136
|
isSuccessful: isInvitationSuccessful ? true : false,
|
|
174
|
-
body: isInvitationSuccessful ? /*#__PURE__*/_react
|
|
175
|
-
}) : /*#__PURE__*/_react
|
|
137
|
+
body: isInvitationSuccessful ? /*#__PURE__*/_react.default.createElement(SuccessfulInvitationCardBody, null) : /*#__PURE__*/_react.default.createElement(UnsuccessfulInvitationCardBody, null)
|
|
138
|
+
}) : /*#__PURE__*/_react.default.createElement(_reactstrap.Row, {
|
|
176
139
|
className: "justify-content-center pt-5"
|
|
177
|
-
}, /*#__PURE__*/_react
|
|
140
|
+
}, /*#__PURE__*/_react.default.createElement(_reactstrap.Col, {
|
|
178
141
|
md: "4"
|
|
179
|
-
}, /*#__PURE__*/_react
|
|
180
|
-
onSubmit:
|
|
142
|
+
}, /*#__PURE__*/_react.default.createElement(_reactstrap.Form, {
|
|
143
|
+
onSubmit: e => {
|
|
181
144
|
sendInvitation(e);
|
|
182
145
|
}
|
|
183
|
-
}, /*#__PURE__*/_react
|
|
146
|
+
}, /*#__PURE__*/_react.default.createElement(_reactstrap.Card, {
|
|
184
147
|
className: "invite-card"
|
|
185
|
-
}, /*#__PURE__*/_react
|
|
148
|
+
}, /*#__PURE__*/_react.default.createElement(_reactstrap.CardHeader, {
|
|
186
149
|
className: "card-header-flex"
|
|
187
|
-
}, /*#__PURE__*/_react
|
|
150
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
188
151
|
className: "flex-fill"
|
|
189
|
-
}, /*#__PURE__*/_react
|
|
152
|
+
}, /*#__PURE__*/_react.default.createElement("h3", null, /*#__PURE__*/_react.default.createElement("i", {
|
|
190
153
|
className: "bi bi-person-plus pe-2"
|
|
191
|
-
}), t('InvitationScreen|Invite other users')))), /*#__PURE__*/_react
|
|
154
|
+
}), t('InvitationScreen|Invite other users')))), /*#__PURE__*/_react.default.createElement(_reactstrap.CardBody, null, /*#__PURE__*/_react.default.createElement(_reactstrap.Label, null, t('InvitationScreen|Enter the user\'s email address')), /*#__PURE__*/_react.default.createElement(_reactstrap.InputGroup, null, /*#__PURE__*/_react.default.createElement(_reactstrap.InputGroupText, null, /*#__PURE__*/_react.default.createElement("i", {
|
|
192
155
|
className: "bi bi-envelope-at"
|
|
193
|
-
})), /*#__PURE__*/_react
|
|
156
|
+
})), /*#__PURE__*/_react.default.createElement(_reactstrap.Input, {
|
|
194
157
|
name: "email",
|
|
195
158
|
type: "email",
|
|
196
159
|
autoComplete: "email",
|
|
197
160
|
autoFocus: true,
|
|
198
161
|
value: emailValue,
|
|
199
|
-
onChange:
|
|
162
|
+
onChange: e => {
|
|
200
163
|
emailValidation(e);
|
|
201
164
|
}
|
|
202
|
-
}))), /*#__PURE__*/_react
|
|
165
|
+
}))), /*#__PURE__*/_react.default.createElement(_reactstrap.CardFooter, {
|
|
203
166
|
className: "card-footer-flex"
|
|
204
|
-
}, /*#__PURE__*/_react
|
|
167
|
+
}, /*#__PURE__*/_react.default.createElement(_reactstrap.Button, {
|
|
205
168
|
outline: true,
|
|
206
169
|
color: "primary",
|
|
207
170
|
type: "button",
|
|
208
|
-
onClick:
|
|
209
|
-
|
|
210
|
-
}
|
|
211
|
-
}, t('General|Cancel')), /*#__PURE__*/_react["default"].createElement("div", {
|
|
171
|
+
onClick: () => navigate(-1)
|
|
172
|
+
}, t('General|Cancel')), /*#__PURE__*/_react.default.createElement("div", {
|
|
212
173
|
className: "flex-fill"
|
|
213
|
-
}, "\xA0"), /*#__PURE__*/_react
|
|
174
|
+
}, "\xA0"), /*#__PURE__*/_react.default.createElement(_reactstrap.Button, {
|
|
214
175
|
color: "primary",
|
|
215
176
|
disabled: emailValue === '' // Disable button if input is empty
|
|
216
177
|
}, t('InvitationScreen|Invite'))))))));
|
|
@@ -1,28 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
4
3
|
Object.defineProperty(exports, "__esModule", {
|
|
5
4
|
value: true
|
|
6
5
|
});
|
|
7
|
-
exports
|
|
6
|
+
exports.default = LanguageDropdown;
|
|
8
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
9
8
|
var _reactI18next = require("react-i18next");
|
|
10
9
|
var _actions = require("./actions");
|
|
11
10
|
var _reactRedux = require("react-redux");
|
|
12
11
|
var _reactstrap = require("reactstrap");
|
|
13
|
-
function
|
|
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; }
|
|
12
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
15
13
|
function LanguageDropdown(props) {
|
|
16
|
-
var
|
|
17
|
-
t
|
|
18
|
-
i18n
|
|
19
|
-
|
|
20
|
-
|
|
14
|
+
var {
|
|
15
|
+
t,
|
|
16
|
+
i18n
|
|
17
|
+
} = (0, _reactI18next.useTranslation)();
|
|
18
|
+
var changeLanguage = language => {
|
|
19
|
+
i18n.changeLanguage(language).then(() => {
|
|
21
20
|
// if the hard refresh is needed: window.location.reload(false);
|
|
22
21
|
});
|
|
23
22
|
};
|
|
24
23
|
var dispatch = (0, _reactRedux.useDispatch)();
|
|
25
|
-
(0, _react.useEffect)(
|
|
24
|
+
(0, _react.useEffect)(() => {
|
|
26
25
|
var _i18n$language;
|
|
27
26
|
dispatch({
|
|
28
27
|
type: _actions.CHANGE_LANGUAGE,
|
|
@@ -34,29 +33,29 @@ function LanguageDropdown(props) {
|
|
|
34
33
|
if (i18n.options.supportedLngs == null || i18n.options.supportedLngs == false) {
|
|
35
34
|
return null;
|
|
36
35
|
}
|
|
37
|
-
return /*#__PURE__*/_react
|
|
36
|
+
return /*#__PURE__*/_react.default.createElement(_reactstrap.UncontrolledDropdown, {
|
|
38
37
|
direction: "down"
|
|
39
|
-
}, /*#__PURE__*/_react
|
|
38
|
+
}, /*#__PURE__*/_react.default.createElement(_reactstrap.DropdownToggle, {
|
|
40
39
|
nav: true,
|
|
41
40
|
caret: true
|
|
42
|
-
}, /*#__PURE__*/_react
|
|
41
|
+
}, /*#__PURE__*/_react.default.createElement(LanguageFlag, {
|
|
43
42
|
language: i18n.language,
|
|
44
43
|
style: {
|
|
45
44
|
width: '24px'
|
|
46
45
|
}
|
|
47
|
-
})), /*#__PURE__*/_react
|
|
46
|
+
})), /*#__PURE__*/_react.default.createElement(_reactstrap.DropdownMenu, {
|
|
48
47
|
className: "shadow"
|
|
49
|
-
}, /*#__PURE__*/_react
|
|
48
|
+
}, /*#__PURE__*/_react.default.createElement(_reactstrap.DropdownItem, {
|
|
50
49
|
header: true
|
|
51
|
-
}, t('i18n|Language')), i18n.options.supportedLngs.map(
|
|
50
|
+
}, t('i18n|Language')), i18n.options.supportedLngs.map((language, i) => {
|
|
52
51
|
if (language == 'cimode') return null;
|
|
53
|
-
return /*#__PURE__*/_react
|
|
52
|
+
return /*#__PURE__*/_react.default.createElement(_reactstrap.DropdownItem, {
|
|
54
53
|
key: language,
|
|
55
54
|
title: language,
|
|
56
|
-
onClick:
|
|
55
|
+
onClick: () => {
|
|
57
56
|
changeLanguage(language);
|
|
58
57
|
}
|
|
59
|
-
}, /*#__PURE__*/_react
|
|
58
|
+
}, /*#__PURE__*/_react.default.createElement(LanguageFlag, {
|
|
60
59
|
language: language,
|
|
61
60
|
className: "pe-2",
|
|
62
61
|
style: {
|
|
@@ -66,10 +65,12 @@ function LanguageDropdown(props) {
|
|
|
66
65
|
})));
|
|
67
66
|
}
|
|
68
67
|
function LanguageFlag(_ref) {
|
|
69
|
-
var
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
68
|
+
var {
|
|
69
|
+
language,
|
|
70
|
+
className,
|
|
71
|
+
style
|
|
72
|
+
} = _ref;
|
|
73
|
+
return /*#__PURE__*/_react.default.createElement("img", {
|
|
73
74
|
className: className,
|
|
74
75
|
src: "media/locale/".concat(language, ".svg"),
|
|
75
76
|
style: style
|
|
@@ -4,41 +4,28 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports
|
|
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"));
|
|
7
|
+
exports.default = void 0;
|
|
13
8
|
var _asab_webui_components = require("asab_webui_components");
|
|
14
9
|
var _service = _interopRequireDefault(require("./service.js"));
|
|
15
10
|
var _dropdown = _interopRequireDefault(require("./dropdown.js"));
|
|
16
11
|
var _reducer = _interopRequireDefault(require("./reducer.js"));
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
(
|
|
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;
|
|
12
|
+
class I18nModule extends _asab_webui_components.Module {
|
|
13
|
+
constructor(app, name, props) {
|
|
14
|
+
super(app, "I18nModule");
|
|
15
|
+
this.App = app;
|
|
16
|
+
this.I18nService = new _service.default(app, "I18nService");
|
|
17
|
+
this.App.ReduxService.addReducer("language", _reducer.default);
|
|
28
18
|
}
|
|
29
|
-
(
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
}
|
|
43
|
-
}]);
|
|
44
|
-
}(_asab_webui_components.Module);
|
|
19
|
+
initialize() {
|
|
20
|
+
var headerService = this.App.locateService("HeaderService");
|
|
21
|
+
headerService.addComponent({
|
|
22
|
+
component: _dropdown.default,
|
|
23
|
+
componentProps: {
|
|
24
|
+
children: "LanguageDropdown"
|
|
25
|
+
},
|
|
26
|
+
order: 500,
|
|
27
|
+
fullscreenVisible: true
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
exports.default = I18nModule;
|
|
@@ -4,11 +4,11 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports
|
|
7
|
+
exports.default = languageReducer;
|
|
8
8
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
9
|
var _actions = require("./actions");
|
|
10
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
|
|
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
12
|
var initialValue = {
|
|
13
13
|
language: 'en'
|
|
14
14
|
};
|