asab_webui_shell 27.7.2 → 27.7.5-alpha.0

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.
@@ -7,17 +7,25 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.default = TenantDropdown;
8
8
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
9
9
  var _react = _interopRequireWildcard(require("react"));
10
+ var _reactRouter = require("react-router");
10
11
  var _asab_webui_components = require("asab_webui_components");
11
12
  var _reactI18next = require("react-i18next");
13
+ var _seacatAuth = require("asab_webui_components/seacat-auth");
12
14
  var _reactstrap = require("reactstrap");
13
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); }
14
- function TenantDropdown() {
16
+ function TenantDropdown(_ref) {
17
+ var _app$Modules;
18
+ var app = _ref.app;
15
19
  var _useTranslation = (0, _reactI18next.useTranslation)(),
16
20
  t = _useTranslation.t;
17
21
  var _useState = (0, _react.useState)(false),
18
22
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
19
23
  isOpen = _useState2[0],
20
24
  setIsOpen = _useState2[1];
25
+ var _useState3 = (0, _react.useState)(''),
26
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
27
+ searchInput = _useState4[0],
28
+ setSearchInput = _useState4[1];
21
29
  var current = (0, _asab_webui_components.useAppSelector)(state => {
22
30
  var _state$tenant;
23
31
  return state === null || state === void 0 || (_state$tenant = state.tenant) === null || _state$tenant === void 0 ? void 0 : _state$tenant.current;
@@ -26,7 +34,19 @@ function TenantDropdown() {
26
34
  var _state$tenant2;
27
35
  return state === null || state === void 0 || (_state$tenant2 = state.tenant) === null || _state$tenant2 === void 0 ? void 0 : _state$tenant2.tenants;
28
36
  });
29
- var toggle = () => setIsOpen(prev => !prev);
37
+ var canCreateTenant = (app === null || app === void 0 || (_app$Modules = app.Modules) === null || _app$Modules === void 0 ? void 0 : _app$Modules.some(obj => (obj === null || obj === void 0 ? void 0 : obj.Name) === "LmioTrexModule")) && (0, _seacatAuth.isAuthorized)(['lmio:tenant:create'], app);
38
+ var tenantsAvailable = tenants && tenants.length > 0;
39
+ var showDropdown = tenantsAvailable || canCreateTenant;
40
+ var hasSearch = (tenants === null || tenants === void 0 ? void 0 : tenants.length) >= 10; // Display search input if there is >= 10 tenants
41
+ var toggle = () => {
42
+ setIsOpen(prev => !prev);
43
+ hasSearch && setSearchInput('');
44
+ };
45
+ var filteredTenants = (0, _react.useMemo)(() => {
46
+ if (!hasSearch || !searchInput) return tenants;
47
+ var inputLower = searchInput.toLowerCase();
48
+ return tenants.filter(tenant => String(tenant).toLowerCase().includes(inputLower));
49
+ }, [tenants, searchInput, hasSearch]);
30
50
  return /*#__PURE__*/_react.default.createElement(_reactstrap.Dropdown, {
31
51
  isOpen: isOpen,
32
52
  toggle: toggle,
@@ -39,22 +59,33 @@ function TenantDropdown() {
39
59
  className: "bi bi-house-lock pe-2"
40
60
  }), /*#__PURE__*/_react.default.createElement(TenantLabel, {
41
61
  tenant: current
42
- })), isOpen && (tenants === null || tenants === void 0 ? void 0 : tenants.length) > 0 && /*#__PURE__*/_react.default.createElement(_reactstrap.DropdownMenu, {
43
- className: "shadow overflow-y-auto",
62
+ })), isOpen && showDropdown && /*#__PURE__*/_react.default.createElement(_reactstrap.DropdownMenu, {
63
+ className: "shadow overflow-y-auto".concat(hasSearch ? ' pt-0' : ''),
44
64
  style: {
45
65
  maxHeight: '20em'
46
66
  }
47
- }, /*#__PURE__*/_react.default.createElement(_reactstrap.DropdownItem, {
67
+ }, tenantsAvailable && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_reactstrap.DropdownItem, {
48
68
  header: true
49
- }, t('General|Tenants')), tenants.map((tenant, i) => /*#__PURE__*/_react.default.createElement(_reactstrap.DropdownItem, {
69
+ }, t('General|Tenants')), hasSearch && /*#__PURE__*/_react.default.createElement(_reactstrap.Input, {
70
+ value: searchInput,
71
+ className: "px-3",
72
+ onChange: e => setSearchInput(e.target.value),
73
+ type: "text",
74
+ placeholder: t('General|Search')
75
+ }), filteredTenants.map((tenant, i) => /*#__PURE__*/_react.default.createElement(_reactstrap.DropdownItem, {
50
76
  key: i,
51
77
  tag: "a",
52
78
  href: '?tenant=' + tenant + '#/'
53
79
  }, /*#__PURE__*/_react.default.createElement(TenantLabel, {
54
80
  tenant: tenant
55
- })))));
81
+ })))), canCreateTenant && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, tenantsAvailable && /*#__PURE__*/_react.default.createElement(_reactstrap.DropdownItem, {
82
+ divider: true
83
+ }), /*#__PURE__*/_react.default.createElement(_reactstrap.DropdownItem, {
84
+ tag: _reactRouter.Link,
85
+ to: "/config/tenant/!create"
86
+ }, t('TenantDropdown|Create tenant')))));
56
87
  }
57
- function TenantLabel(_ref) {
58
- var tenant = _ref.tenant;
88
+ function TenantLabel(_ref2) {
89
+ var tenant = _ref2.tenant;
59
90
  return /*#__PURE__*/_react.default.createElement("span", null, tenant);
60
91
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "asab_webui_shell",
3
- "version": "27.7.2",
3
+ "version": "27.7.5-alpha.0",
4
4
  "license": "BSD-3-Clause",
5
5
  "description": "TeskaLabs ASAB WebUI Shell Application",
6
6
  "contributors": [