@bigbinary/neeto-team-members-frontend 5.0.28 → 5.0.30
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/app/javascript/src/translations/ar.json +6 -4
- package/app/javascript/src/translations/bg.json +6 -4
- package/app/javascript/src/translations/ca.json +8 -6
- package/app/javascript/src/translations/cs.json +4 -2
- package/app/javascript/src/translations/da.json +4 -2
- package/app/javascript/src/translations/de.json +4 -2
- package/app/javascript/src/translations/en.json +8 -6
- package/app/javascript/src/translations/es-MX.json +8 -6
- package/app/javascript/src/translations/es.json +8 -6
- package/app/javascript/src/translations/et.json +6 -4
- package/app/javascript/src/translations/fi.json +4 -2
- package/app/javascript/src/translations/fil.json +9 -7
- package/app/javascript/src/translations/fr.json +5 -3
- package/app/javascript/src/translations/he.json +5 -3
- package/app/javascript/src/translations/hi.json +7 -5
- package/app/javascript/src/translations/hr.json +4 -2
- package/app/javascript/src/translations/hu.json +4 -2
- package/app/javascript/src/translations/id.json +10 -8
- package/app/javascript/src/translations/it.json +8 -6
- package/app/javascript/src/translations/ja.json +6 -4
- package/app/javascript/src/translations/ko.json +4 -2
- package/app/javascript/src/translations/nl.json +7 -5
- package/app/javascript/src/translations/pl.json +5 -3
- package/app/javascript/src/translations/pt-BR.json +10 -8
- package/app/javascript/src/translations/pt.json +10 -8
- package/app/javascript/src/translations/ro.json +9 -7
- package/app/javascript/src/translations/ru.json +5 -3
- package/app/javascript/src/translations/sk.json +6 -4
- package/app/javascript/src/translations/sl.json +7 -5
- package/app/javascript/src/translations/sv.json +4 -2
- package/app/javascript/src/translations/th.json +5 -3
- package/app/javascript/src/translations/tr.json +10 -8
- package/app/javascript/src/translations/uk.json +7 -5
- package/app/javascript/src/translations/vi.json +7 -5
- package/app/javascript/src/translations/zh-CN.json +6 -4
- package/app/javascript/src/translations/zh-TW.json +5 -3
- package/dist/.ready +1 -1
- package/dist/ActionBlock-C9Iy0jGZ.js +53 -0
- package/dist/ActionBlock-C9Iy0jGZ.js.map +1 -0
- package/dist/ActionBlock-jgw1N-As.js +46 -0
- package/dist/ActionBlock-jgw1N-As.js.map +1 -0
- package/dist/Groups.js +1 -0
- package/dist/Groups.js.map +1 -1
- package/dist/InviteLinkError-AphtWLhe.js +63 -0
- package/dist/InviteLinkError-AphtWLhe.js.map +1 -0
- package/dist/InviteLinkError-C6OLGrD0.js +41 -0
- package/dist/InviteLinkError-C6OLGrD0.js.map +1 -0
- package/dist/ManageMember.js +3 -2
- package/dist/ManageMember.js.map +1 -1
- package/dist/MembersInvite.js +1 -38
- package/dist/MembersInvite.js.map +1 -1
- package/dist/Permissions-Bd6kLoPt.js +233 -0
- package/dist/Permissions-Bd6kLoPt.js.map +1 -0
- package/dist/Permissions-Bn862irP.js +244 -0
- package/dist/Permissions-Bn862irP.js.map +1 -0
- package/dist/Profile.js +125 -106
- package/dist/Profile.js.map +1 -1
- package/dist/{ProfileImage-Cpprgo-V.js → ProfileImage-QeSzsfzl.js} +1 -7
- package/dist/{ProfileImage-B_gfcE6b.js.map → ProfileImage-QeSzsfzl.js.map} +1 -1
- package/dist/{ProfileImage-B_gfcE6b.js → ProfileImage-Ypf3HreX.js} +2 -7
- package/dist/{ProfileImage-Cpprgo-V.js.map → ProfileImage-Ypf3HreX.js.map} +1 -1
- package/dist/Roles.js +3 -1398
- package/dist/Roles.js.map +1 -1
- package/dist/RolesRadioGroup-fBmS68cW.js +393 -0
- package/dist/RolesRadioGroup-fBmS68cW.js.map +1 -0
- package/dist/RolesRadioGroup-tSNC-Wtu.js +352 -0
- package/dist/RolesRadioGroup-tSNC-Wtu.js.map +1 -0
- package/dist/Select-CshPoN2b.js +119 -0
- package/dist/Select-CshPoN2b.js.map +1 -0
- package/dist/Select-DZ56UG-l.js +109 -0
- package/dist/Select-DZ56UG-l.js.map +1 -0
- package/dist/TeamMembers.js +3 -2
- package/dist/TeamMembers.js.map +1 -1
- package/dist/cjs/Groups.js +1 -0
- package/dist/cjs/Groups.js.map +1 -1
- package/dist/cjs/ManageMember.js +3 -2
- package/dist/cjs/ManageMember.js.map +1 -1
- package/dist/cjs/MembersInvite.js +2 -39
- package/dist/cjs/MembersInvite.js.map +1 -1
- package/dist/cjs/Profile.js +125 -104
- package/dist/cjs/Profile.js.map +1 -1
- package/dist/cjs/Roles.js +6 -1402
- package/dist/cjs/Roles.js.map +1 -1
- package/dist/cjs/TeamMembers.js +3 -2
- package/dist/cjs/TeamMembers.js.map +1 -1
- package/dist/cjs/index.js +6 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/utils.js +3 -512
- package/dist/cjs/utils.js.map +1 -1
- package/dist/cjs/v2/Groups.js +781 -0
- package/dist/cjs/v2/Groups.js.map +1 -0
- package/dist/cjs/v2/ManageMember.js +49 -0
- package/dist/cjs/v2/ManageMember.js.map +1 -0
- package/dist/cjs/v2/MembersDropdown.js +200 -0
- package/dist/cjs/v2/MembersDropdown.js.map +1 -0
- package/dist/cjs/v2/MembersInvite.js +270 -0
- package/dist/cjs/v2/MembersInvite.js.map +1 -0
- package/dist/cjs/v2/Permissions.js +19 -0
- package/dist/cjs/v2/Permissions.js.map +1 -0
- package/dist/cjs/v2/Profile.js +686 -0
- package/dist/cjs/v2/Profile.js.map +1 -0
- package/dist/cjs/v2/Roles.js +1258 -0
- package/dist/cjs/v2/Roles.js.map +1 -0
- package/dist/cjs/v2/RolesRadioGroup.js +26 -0
- package/dist/cjs/v2/RolesRadioGroup.js.map +1 -0
- package/dist/cjs/v2/TeamMembers.js +949 -0
- package/dist/cjs/v2/TeamMembers.js.map +1 -0
- package/dist/cjs/v2/TeamsAndMembersDropdown.js +438 -0
- package/dist/cjs/v2/TeamsAndMembersDropdown.js.map +1 -0
- package/dist/cjs/v2/TeamsDropdown.js +112 -0
- package/dist/cjs/v2/TeamsDropdown.js.map +1 -0
- package/dist/cjs/v2/constants.js +28 -0
- package/dist/cjs/v2/constants.js.map +1 -0
- package/dist/cjs/v2/hooks.js +33 -0
- package/dist/cjs/v2/hooks.js.map +1 -0
- package/dist/cjs/v2/utils.js +34 -0
- package/dist/cjs/v2/utils.js.map +1 -0
- package/dist/constants-B1L6arSR.js +49 -0
- package/dist/constants-B1L6arSR.js.map +1 -0
- package/dist/constants-CMNbKvoF.js +61 -0
- package/dist/constants-CMNbKvoF.js.map +1 -0
- package/dist/index-BkEJugj1.js +184 -0
- package/dist/index-BkEJugj1.js.map +1 -0
- package/dist/index-C6ph58Vg.js +169 -0
- package/dist/index-C6ph58Vg.js.map +1 -0
- package/dist/{index-C26Vdbk5.js → index-DFFRcH_S.js} +2 -2
- package/dist/{index-C26Vdbk5.js.map → index-DFFRcH_S.js.map} +1 -1
- package/dist/{index-CeAVMlhg.js → index-DTONHIze.js} +2 -2
- package/dist/{index-CeAVMlhg.js.map → index-DTONHIze.js.map} +1 -1
- package/dist/index-DeYRFiJy.js +119 -0
- package/dist/index-DeYRFiJy.js.map +1 -0
- package/dist/index-DgxgaCRt.js +1317 -0
- package/dist/index-DgxgaCRt.js.map +1 -0
- package/dist/index-DqqXniGT.js +126 -0
- package/dist/index-DqqXniGT.js.map +1 -0
- package/dist/index-Dus0cbgo.js +1407 -0
- package/dist/index-Dus0cbgo.js.map +1 -0
- package/dist/index-aJIUa1Bd.js +1342 -0
- package/dist/index-aJIUa1Bd.js.map +1 -0
- package/dist/index-ureO6U2w.js +1401 -0
- package/dist/index-ureO6U2w.js.map +1 -0
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/pluralize-BoSEafiC.js +514 -0
- package/dist/pluralize-BoSEafiC.js.map +1 -0
- package/dist/pluralize-CFlSRsRn.js +516 -0
- package/dist/pluralize-CFlSRsRn.js.map +1 -0
- package/dist/queryClient-B-JFya8X.js +16 -0
- package/dist/queryClient-B-JFya8X.js.map +1 -0
- package/dist/queryClient-BncpekSV.js +14 -0
- package/dist/queryClient-BncpekSV.js.map +1 -0
- package/dist/useCountries-CQdvJz0R.js +249 -0
- package/dist/useCountries-CQdvJz0R.js.map +1 -0
- package/dist/useCountries-DePOPtue.js +235 -0
- package/dist/useCountries-DePOPtue.js.map +1 -0
- package/dist/useTeamsApi-CWp4G7JZ.js +179 -0
- package/dist/useTeamsApi-CWp4G7JZ.js.map +1 -0
- package/dist/useTeamsApi-Ch5sHR2_.js +197 -0
- package/dist/useTeamsApi-Ch5sHR2_.js.map +1 -0
- package/dist/utils.js +2 -511
- package/dist/utils.js.map +1 -1
- package/dist/v2/Groups.js +749 -0
- package/dist/v2/Groups.js.map +1 -0
- package/dist/v2/ManageMember.js +43 -0
- package/dist/v2/ManageMember.js.map +1 -0
- package/dist/v2/MembersDropdown.js +193 -0
- package/dist/v2/MembersDropdown.js.map +1 -0
- package/dist/v2/MembersInvite.js +242 -0
- package/dist/v2/MembersInvite.js.map +1 -0
- package/dist/v2/Permissions.js +13 -0
- package/dist/v2/Permissions.js.map +1 -0
- package/dist/v2/Profile.js +656 -0
- package/dist/v2/Profile.js.map +1 -0
- package/dist/v2/Roles.js +1242 -0
- package/dist/v2/Roles.js.map +1 -0
- package/dist/v2/RolesRadioGroup.js +20 -0
- package/dist/v2/RolesRadioGroup.js.map +1 -0
- package/dist/v2/TeamMembers.js +937 -0
- package/dist/v2/TeamMembers.js.map +1 -0
- package/dist/v2/TeamsAndMembersDropdown.js +430 -0
- package/dist/v2/TeamsAndMembersDropdown.js.map +1 -0
- package/dist/v2/TeamsDropdown.js +106 -0
- package/dist/v2/TeamsDropdown.js.map +1 -0
- package/dist/v2/constants.js +21 -0
- package/dist/v2/constants.js.map +1 -0
- package/dist/v2/hooks.js +29 -0
- package/dist/v2/hooks.js.map +1 -0
- package/dist/v2/utils.js +30 -0
- package/dist/v2/utils.js.map +1 -0
- package/dist/withReactQuery-CSuiy5RK.js +20 -0
- package/dist/withReactQuery-CSuiy5RK.js.map +1 -0
- package/dist/withReactQuery-DvSkXhEx.js +26 -0
- package/dist/withReactQuery-DvSkXhEx.js.map +1 -0
- package/package.json +31 -17
package/dist/v2/Roles.js
ADDED
|
@@ -0,0 +1,1242 @@
|
|
|
1
|
+
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
2
|
+
import { useRef, useEffect, Fragment as Fragment$1, memo, useCallback, useState, useMemo, createElement } from 'react';
|
|
3
|
+
import { Tooltip, Button, Sheet, Checkbox, Typography, Alert, Empty, Spinner } from '@bigbinary/neeto-atoms';
|
|
4
|
+
import { d as distExports } from '../index-ureO6U2w.js';
|
|
5
|
+
import i18next, { t } from 'i18next';
|
|
6
|
+
import { isNotEmpty, isPresent, hyphenate, noop } from '@bigbinary/neeto-cist';
|
|
7
|
+
import { PLURAL } from '@bigbinary/neeto-commons-frontend/constants';
|
|
8
|
+
import { useQueryParams, withTitle } from '@bigbinary/neeto-commons-frontend/react-utils';
|
|
9
|
+
import Container from '@bigbinary/neeto-molecules/v2/Container';
|
|
10
|
+
import { not, map, prop, identical, includes, __, groupBy, pluck, isEmpty, filter } from 'ramda';
|
|
11
|
+
import { w as withReactQuery } from '../withReactQuery-CSuiy5RK.js';
|
|
12
|
+
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
13
|
+
import { useQuery } from '@tanstack/react-query';
|
|
14
|
+
import axios from 'axios';
|
|
15
|
+
import { B as BASE_URL, Q as QUERY_KEYS, A as ADMIN_ROLES } from '../constants-B1L6arSR.js';
|
|
16
|
+
import { b as useCreateRole, c as useUpdateRole, S as ScrollToErrorField, d as useDestroyRole, u as useFetchRoles, e as useBulkUpdateRoles } from '../index-C6ph58Vg.js';
|
|
17
|
+
import NeetoHeader from '@bigbinary/neeto-molecules/v2/Header';
|
|
18
|
+
import { useTranslation, Trans } from 'react-i18next';
|
|
19
|
+
import { taxonomies } from '@bigbinary/neeto-commons-frontend/initializers';
|
|
20
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
21
|
+
import { Input, Textarea } from '@bigbinary/neeto-atoms/formik';
|
|
22
|
+
import { F as FormikActionBlock } from '../ActionBlock-jgw1N-As.js';
|
|
23
|
+
import { a as FormikForm } from '../Select-DZ56UG-l.js';
|
|
24
|
+
import '@babel/runtime/helpers/objectWithoutProperties';
|
|
25
|
+
import 'formik';
|
|
26
|
+
import { object, string } from 'yup';
|
|
27
|
+
import { P as Permissions, g as getChildrenRemovedFromRoot, s as sortPermissionsBySequence, a as getPermissionGroups, b as getModifiedPermissions } from '../Permissions-Bd6kLoPt.js';
|
|
28
|
+
import classnames from 'classnames';
|
|
29
|
+
import '@babel/runtime/helpers/toConsumableArray';
|
|
30
|
+
import _typeof from '@babel/runtime/helpers/typeof';
|
|
31
|
+
import { Info, ChevronUp, ChevronDown } from 'lucide-react';
|
|
32
|
+
import HelpPopover from '@bigbinary/neeto-molecules/v2/HelpPopover';
|
|
33
|
+
import MoreDropdown from '@bigbinary/neeto-molecules/v2/MoreDropdown';
|
|
34
|
+
import Search from '@bigbinary/neeto-molecules/v2/Search';
|
|
35
|
+
import { n } from '../inject-css-C2dztUxs.js';
|
|
36
|
+
import '../_commonjsHelpers-BFTU3MAI.js';
|
|
37
|
+
import '../queryClient-BncpekSV.js';
|
|
38
|
+
|
|
39
|
+
// eslint-disable-next-line @bigbinary/neeto/no-axios-import-outside-apis
|
|
40
|
+
var fetch = function fetch() {
|
|
41
|
+
return axios.get("".concat(BASE_URL, "/permissions"));
|
|
42
|
+
};
|
|
43
|
+
var permissionsApi = {
|
|
44
|
+
fetch: fetch
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
function ownKeys$1(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; }
|
|
48
|
+
function _objectSpread$1(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
49
|
+
var useFetchPermissions = function useFetchPermissions() {
|
|
50
|
+
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
51
|
+
return useQuery(_objectSpread$1({
|
|
52
|
+
queryKey: [QUERY_KEYS.PERMISSIONS],
|
|
53
|
+
queryFn: permissionsApi.fetch,
|
|
54
|
+
select: function select(response) {
|
|
55
|
+
return response === null || response === void 0 ? void 0 : response.permissions;
|
|
56
|
+
}
|
|
57
|
+
}, options));
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
var renderSearchProps = function renderSearchProps() {
|
|
61
|
+
return {
|
|
62
|
+
"data-testid": "ntm-search-roles-input",
|
|
63
|
+
placeholder: t("neetoTeamMembers.placeholders.searchRole", PLURAL)
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
var renderBreadcrumbs = function renderBreadcrumbs(breadcrumbs) {
|
|
67
|
+
return breadcrumbs !== null && breadcrumbs !== void 0 ? breadcrumbs : [{
|
|
68
|
+
text: taxonomies.member.plural,
|
|
69
|
+
link: "/members"
|
|
70
|
+
}];
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
var AddRoleButton = function AddRoleButton(_ref) {
|
|
74
|
+
var config = _ref.config,
|
|
75
|
+
onClick = _ref.onClick;
|
|
76
|
+
var _useTranslation = useTranslation(),
|
|
77
|
+
t = _useTranslation.t;
|
|
78
|
+
var isCreatePermissionGranted = config.permissions.create;
|
|
79
|
+
return /*#__PURE__*/jsx(Tooltip, {
|
|
80
|
+
position: "bottom",
|
|
81
|
+
content: !isCreatePermissionGranted ? t("neetoTeamMembers.tooltips.noPermissionToAddRole") : null,
|
|
82
|
+
children: /*#__PURE__*/jsx("span", {
|
|
83
|
+
children: /*#__PURE__*/jsx(Button, {
|
|
84
|
+
onClick: onClick,
|
|
85
|
+
"data-testid": "ntm-add-role-button",
|
|
86
|
+
disabled: !isCreatePermissionGranted,
|
|
87
|
+
children: t("neetoTeamMembers.labels.addNewRole")
|
|
88
|
+
})
|
|
89
|
+
})
|
|
90
|
+
});
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
var Header = function Header(_ref) {
|
|
94
|
+
var _config$header, _config$header$titleH, _config$header2;
|
|
95
|
+
var config = _ref.config,
|
|
96
|
+
handleReset = _ref.handleReset,
|
|
97
|
+
handleSubmit = _ref.handleSubmit,
|
|
98
|
+
_ref$isDirty = _ref.isDirty,
|
|
99
|
+
isDirty = _ref$isDirty === void 0 ? false : _ref$isDirty,
|
|
100
|
+
setIsNewRolePaneOpen = _ref.setIsNewRolePaneOpen,
|
|
101
|
+
roles = _ref.roles;
|
|
102
|
+
var _useTranslation = useTranslation(),
|
|
103
|
+
t = _useTranslation.t;
|
|
104
|
+
var isUpdatePermissionGranted = config.permissions.update;
|
|
105
|
+
return /*#__PURE__*/jsx(NeetoHeader, {
|
|
106
|
+
breadcrumbs: renderBreadcrumbs(config === null || config === void 0 || (_config$header = config.header) === null || _config$header === void 0 ? void 0 : _config$header.breadcrumbs),
|
|
107
|
+
className: "ntm-roles-header",
|
|
108
|
+
searchProps: isNotEmpty(roles) ? renderSearchProps() : null,
|
|
109
|
+
title: t("neetoTeamMembers.common.role", PLURAL),
|
|
110
|
+
titleHelpPopoverProps: (_config$header$titleH = config === null || config === void 0 || (_config$header2 = config.header) === null || _config$header2 === void 0 ? void 0 : _config$header2.titleHelpPopoverProps) !== null && _config$header$titleH !== void 0 ? _config$header$titleH : {},
|
|
111
|
+
actionBlock: isDirty ? /*#__PURE__*/jsxs("div", {
|
|
112
|
+
className: "flex items-center gap-2",
|
|
113
|
+
children: [/*#__PURE__*/jsx(Tooltip, {
|
|
114
|
+
position: "bottom",
|
|
115
|
+
content: !isUpdatePermissionGranted ? t("neetoTeamMembers.tooltips.noPermissionToEditRoles") : null,
|
|
116
|
+
children: /*#__PURE__*/jsx("span", {
|
|
117
|
+
children: /*#__PURE__*/jsx(Button, {
|
|
118
|
+
"data-testid": "ntm-role-submission-button",
|
|
119
|
+
disabled: !isUpdatePermissionGranted,
|
|
120
|
+
type: "submit",
|
|
121
|
+
onClick: handleSubmit,
|
|
122
|
+
children: t("neetoTeamMembers.buttons.saveChanges")
|
|
123
|
+
})
|
|
124
|
+
})
|
|
125
|
+
}), /*#__PURE__*/jsx(Button, {
|
|
126
|
+
"data-testid": "ntm-role-reset-button",
|
|
127
|
+
type: "reset",
|
|
128
|
+
variant: "ghost",
|
|
129
|
+
onClick: handleReset,
|
|
130
|
+
children: t("neetoTeamMembers.buttons.reset")
|
|
131
|
+
})]
|
|
132
|
+
}) : /*#__PURE__*/jsx(AddRoleButton, {
|
|
133
|
+
config: config,
|
|
134
|
+
onClick: function onClick() {
|
|
135
|
+
return setIsNewRolePaneOpen(true);
|
|
136
|
+
}
|
|
137
|
+
})
|
|
138
|
+
});
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
var ROLE_NAME_MAX_LENGTH = 40;
|
|
142
|
+
var ROLE_DESCRIPTION_MAX_LENGTH = 255;
|
|
143
|
+
var ADD_ROLE_FORM_VALIDATION_SCHEMA = object({
|
|
144
|
+
name: string().trim().max(ROLE_NAME_MAX_LENGTH,
|
|
145
|
+
// @ts-ignore
|
|
146
|
+
t("neetoTeamMembers.validations.nameLimitExceeded", {
|
|
147
|
+
limit: ROLE_NAME_MAX_LENGTH
|
|
148
|
+
}))
|
|
149
|
+
// @ts-ignore
|
|
150
|
+
.required(t("neetoTeamMembers.validations.enterRoleName")),
|
|
151
|
+
description: string().nullable().trim().max(ROLE_DESCRIPTION_MAX_LENGTH,
|
|
152
|
+
// @ts-ignore
|
|
153
|
+
t("neetoTeamMembers.validations.descriptionLimitExceeded", {
|
|
154
|
+
limit: ROLE_DESCRIPTION_MAX_LENGTH
|
|
155
|
+
}))
|
|
156
|
+
});
|
|
157
|
+
var ADD_ROLE_FORM_INITIAL_VALUES = {
|
|
158
|
+
name: "",
|
|
159
|
+
description: "",
|
|
160
|
+
permissionIds: []
|
|
161
|
+
};
|
|
162
|
+
var ROLE_FORMIK_PROPS = {
|
|
163
|
+
validationSchema: ADD_ROLE_FORM_VALIDATION_SCHEMA
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
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; }
|
|
167
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), true).forEach(function (r) { _defineProperty(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; }
|
|
168
|
+
var ManageRoles = function ManageRoles(_ref) {
|
|
169
|
+
var _selectedRole$permiss;
|
|
170
|
+
var config = _ref.config,
|
|
171
|
+
_ref$isOpen = _ref.isOpen,
|
|
172
|
+
isOpen = _ref$isOpen === void 0 ? false : _ref$isOpen,
|
|
173
|
+
onClose = _ref.onClose,
|
|
174
|
+
_ref$permissions = _ref.permissions,
|
|
175
|
+
permissions = _ref$permissions === void 0 ? [] : _ref$permissions,
|
|
176
|
+
_ref$selectedRole = _ref.selectedRole,
|
|
177
|
+
selectedRole = _ref$selectedRole === void 0 ? {} : _ref$selectedRole,
|
|
178
|
+
_ref$scrollTo = _ref.scrollTo,
|
|
179
|
+
scrollTo = _ref$scrollTo === void 0 ? null : _ref$scrollTo;
|
|
180
|
+
var _useTranslation = useTranslation(),
|
|
181
|
+
t = _useTranslation.t;
|
|
182
|
+
var formReference = useRef(null);
|
|
183
|
+
var inputReference = useRef(null);
|
|
184
|
+
var lastScrollKeyRef = useRef(null);
|
|
185
|
+
var _useCreateRole = useCreateRole({
|
|
186
|
+
onSuccess: onClose
|
|
187
|
+
}),
|
|
188
|
+
createRole = _useCreateRole.mutate,
|
|
189
|
+
isCreatingRole = _useCreateRole.isPending;
|
|
190
|
+
var _useUpdateRole = useUpdateRole({
|
|
191
|
+
onSuccess: onClose
|
|
192
|
+
}),
|
|
193
|
+
updateRole = _useUpdateRole.mutate,
|
|
194
|
+
isUpdatingRole = _useUpdateRole.isPending;
|
|
195
|
+
var isEdit = isPresent(selectedRole);
|
|
196
|
+
var isSubmitting = isCreatingRole || isUpdatingRole;
|
|
197
|
+
var handleSubmit = function handleSubmit(formValues) {
|
|
198
|
+
var payload = {
|
|
199
|
+
organizationRole: _objectSpread(_objectSpread({}, formValues), {}, {
|
|
200
|
+
name: formValues.name.trim(),
|
|
201
|
+
description: formValues.description.trim()
|
|
202
|
+
})
|
|
203
|
+
};
|
|
204
|
+
isEdit ? updateRole({
|
|
205
|
+
payload: payload,
|
|
206
|
+
id: selectedRole.id
|
|
207
|
+
}) : createRole(payload);
|
|
208
|
+
};
|
|
209
|
+
var initialValues = isEdit ? _objectSpread(_objectSpread({}, selectedRole), {}, {
|
|
210
|
+
permissionIds: (_selectedRole$permiss = selectedRole.permissionIds) === null || _selectedRole$permiss === void 0 ? void 0 : _selectedRole$permiss.sort(),
|
|
211
|
+
description: selectedRole.description || ""
|
|
212
|
+
}) : ADD_ROLE_FORM_INITIAL_VALUES;
|
|
213
|
+
var formikProps = _objectSpread(_objectSpread({}, ROLE_FORMIK_PROPS), {}, {
|
|
214
|
+
initialValues: initialValues,
|
|
215
|
+
onSubmit: handleSubmit
|
|
216
|
+
});
|
|
217
|
+
var isReadOnly = selectedRole.kind === "system";
|
|
218
|
+
var isDisabled = ADMIN_ROLES.includes(selectedRole.name) && isReadOnly;
|
|
219
|
+
useEffect(function () {
|
|
220
|
+
var _selectedRole$id, _ref2, _scrollTo$permissionI;
|
|
221
|
+
var activeClassName = "ntm-roles-permission-category-card--active";
|
|
222
|
+
var blinkClassName = "ntm-roles-permission__card--blink";
|
|
223
|
+
var getScrollableParent = function getScrollableParent(node) {
|
|
224
|
+
var current = node === null || node === void 0 ? void 0 : node.parentElement;
|
|
225
|
+
while (current) {
|
|
226
|
+
var style = getComputedStyle(current);
|
|
227
|
+
var overflowY = style.overflowY;
|
|
228
|
+
var isScrollable = (overflowY === "auto" || overflowY === "scroll") && current.scrollHeight > current.clientHeight;
|
|
229
|
+
if (isScrollable) return current;
|
|
230
|
+
current = current.parentElement;
|
|
231
|
+
}
|
|
232
|
+
return document.scrollingElement || document.documentElement;
|
|
233
|
+
};
|
|
234
|
+
if (!isOpen) {
|
|
235
|
+
lastScrollKeyRef.current = null;
|
|
236
|
+
document.querySelectorAll(".".concat(activeClassName)).forEach(function (node) {
|
|
237
|
+
return node.classList.remove(activeClassName);
|
|
238
|
+
});
|
|
239
|
+
document.querySelectorAll(".".concat(blinkClassName)).forEach(function (node) {
|
|
240
|
+
return node.classList.remove(blinkClassName);
|
|
241
|
+
});
|
|
242
|
+
return function () {};
|
|
243
|
+
}
|
|
244
|
+
if (!scrollTo) return function () {};
|
|
245
|
+
var key = "".concat((_selectedRole$id = selectedRole === null || selectedRole === void 0 ? void 0 : selectedRole.id) !== null && _selectedRole$id !== void 0 ? _selectedRole$id : "new", ":").concat(scrollTo.type, ":").concat((_ref2 = (_scrollTo$permissionI = scrollTo.permissionId) !== null && _scrollTo$permissionI !== void 0 ? _scrollTo$permissionI : scrollTo.category) !== null && _ref2 !== void 0 ? _ref2 : "");
|
|
246
|
+
if (lastScrollKeyRef.current === key) return function () {};
|
|
247
|
+
lastScrollKeyRef.current = key;
|
|
248
|
+
var timeoutId;
|
|
249
|
+
var highlightTimeoutId;
|
|
250
|
+
var blinkTimeoutId;
|
|
251
|
+
var scrollEndTimeoutId;
|
|
252
|
+
var attempts = 0;
|
|
253
|
+
var highlightedCard = null;
|
|
254
|
+
var blinkedPermissionCard = null;
|
|
255
|
+
var _attemptScroll = function attemptScroll() {
|
|
256
|
+
attempts += 1;
|
|
257
|
+
var elementId = scrollTo.type === "permission" ? "ntm-role-permission-".concat(scrollTo.permissionId) : "ntm-role-permission-category-".concat(hyphenate(scrollTo.category || ""));
|
|
258
|
+
var el = document.getElementById(elementId);
|
|
259
|
+
if (el) {
|
|
260
|
+
el.scrollIntoView({
|
|
261
|
+
behavior: "smooth",
|
|
262
|
+
block: "center"
|
|
263
|
+
});
|
|
264
|
+
var categoryCard = scrollTo.type === "permission" ? el.closest(".ntm-roles-permission-category-card") : el.querySelector(".ntm-roles-permission-category-card");
|
|
265
|
+
var scrollContainer = getScrollableParent(el);
|
|
266
|
+
var startHighlight = function startHighlight() {
|
|
267
|
+
if (!categoryCard) return;
|
|
268
|
+
document.querySelectorAll(".".concat(activeClassName)).forEach(function (node) {
|
|
269
|
+
return node.classList.remove(activeClassName);
|
|
270
|
+
});
|
|
271
|
+
categoryCard.classList.add(activeClassName);
|
|
272
|
+
highlightedCard = categoryCard;
|
|
273
|
+
clearTimeout(highlightTimeoutId);
|
|
274
|
+
highlightTimeoutId = setTimeout(function () {
|
|
275
|
+
categoryCard.classList.remove(activeClassName);
|
|
276
|
+
}, 3000);
|
|
277
|
+
};
|
|
278
|
+
if (scrollTo.type === "permission") {
|
|
279
|
+
var animationDurationMs = 600;
|
|
280
|
+
var animationIterations = 3;
|
|
281
|
+
var totalDurationMs = animationDurationMs * animationIterations + 100;
|
|
282
|
+
var startBlink = function startBlink() {
|
|
283
|
+
document.querySelectorAll(".".concat(blinkClassName)).forEach(function (node) {
|
|
284
|
+
return node.classList.remove(blinkClassName);
|
|
285
|
+
});
|
|
286
|
+
el.classList.remove(blinkClassName);
|
|
287
|
+
// Restart animation if the class was already present
|
|
288
|
+
void el.offsetWidth;
|
|
289
|
+
el.classList.add(blinkClassName);
|
|
290
|
+
blinkedPermissionCard = el;
|
|
291
|
+
clearTimeout(blinkTimeoutId);
|
|
292
|
+
blinkTimeoutId = setTimeout(function () {
|
|
293
|
+
el.classList.remove(blinkClassName);
|
|
294
|
+
}, totalDurationMs);
|
|
295
|
+
};
|
|
296
|
+
|
|
297
|
+
// Start animation only after scroll settles (or after a max wait).
|
|
298
|
+
var started = false;
|
|
299
|
+
var maxWaitTimeoutId = setTimeout(function () {
|
|
300
|
+
if (started) return;
|
|
301
|
+
started = true;
|
|
302
|
+
startHighlight();
|
|
303
|
+
startBlink();
|
|
304
|
+
scrollContainer.removeEventListener("scroll", _scheduleStart);
|
|
305
|
+
}, 1200);
|
|
306
|
+
var _scheduleStart = function scheduleStart() {
|
|
307
|
+
clearTimeout(scrollEndTimeoutId);
|
|
308
|
+
scrollEndTimeoutId = setTimeout(function () {
|
|
309
|
+
if (started) return;
|
|
310
|
+
started = true;
|
|
311
|
+
startHighlight();
|
|
312
|
+
startBlink();
|
|
313
|
+
scrollContainer.removeEventListener("scroll", _scheduleStart);
|
|
314
|
+
clearTimeout(maxWaitTimeoutId);
|
|
315
|
+
}, 150);
|
|
316
|
+
};
|
|
317
|
+
scrollContainer.addEventListener("scroll", _scheduleStart, {
|
|
318
|
+
passive: true
|
|
319
|
+
});
|
|
320
|
+
_scheduleStart();
|
|
321
|
+
} else {
|
|
322
|
+
// Highlight should also start only after scroll settles.
|
|
323
|
+
var _started = false;
|
|
324
|
+
var _maxWaitTimeoutId = setTimeout(function () {
|
|
325
|
+
if (_started) return;
|
|
326
|
+
_started = true;
|
|
327
|
+
startHighlight();
|
|
328
|
+
scrollContainer.removeEventListener("scroll", _scheduleStart2);
|
|
329
|
+
}, 1200);
|
|
330
|
+
var _scheduleStart2 = function scheduleStart() {
|
|
331
|
+
clearTimeout(scrollEndTimeoutId);
|
|
332
|
+
scrollEndTimeoutId = setTimeout(function () {
|
|
333
|
+
if (_started) return;
|
|
334
|
+
_started = true;
|
|
335
|
+
startHighlight();
|
|
336
|
+
scrollContainer.removeEventListener("scroll", _scheduleStart2);
|
|
337
|
+
clearTimeout(_maxWaitTimeoutId);
|
|
338
|
+
}, 150);
|
|
339
|
+
};
|
|
340
|
+
scrollContainer.addEventListener("scroll", _scheduleStart2, {
|
|
341
|
+
passive: true
|
|
342
|
+
});
|
|
343
|
+
_scheduleStart2();
|
|
344
|
+
}
|
|
345
|
+
return;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
// Sheet content can mount after open animation; retry briefly.
|
|
349
|
+
if (attempts < 5) timeoutId = setTimeout(_attemptScroll, 100);
|
|
350
|
+
};
|
|
351
|
+
timeoutId = setTimeout(_attemptScroll, 0);
|
|
352
|
+
return function () {
|
|
353
|
+
var _highlightedCard, _blinkedPermissionCar;
|
|
354
|
+
clearTimeout(timeoutId);
|
|
355
|
+
clearTimeout(highlightTimeoutId);
|
|
356
|
+
clearTimeout(blinkTimeoutId);
|
|
357
|
+
clearTimeout(scrollEndTimeoutId);
|
|
358
|
+
(_highlightedCard = highlightedCard) === null || _highlightedCard === void 0 || _highlightedCard.classList.remove(activeClassName);
|
|
359
|
+
(_blinkedPermissionCar = blinkedPermissionCard) === null || _blinkedPermissionCar === void 0 || _blinkedPermissionCar.classList.remove(blinkClassName);
|
|
360
|
+
};
|
|
361
|
+
}, [isOpen, scrollTo, selectedRole === null || selectedRole === void 0 ? void 0 : selectedRole.id]);
|
|
362
|
+
return /*#__PURE__*/jsxs(Sheet, {
|
|
363
|
+
isOpen: isOpen,
|
|
364
|
+
onClose: onClose,
|
|
365
|
+
size: "large",
|
|
366
|
+
children: [/*#__PURE__*/jsx(Sheet.Header, {
|
|
367
|
+
children: /*#__PURE__*/jsx(Sheet.Title, {
|
|
368
|
+
"data-testid": "ntm-add-role-title",
|
|
369
|
+
children: isEdit ? t("neetoTeamMembers.labels.editRole") : t("neetoTeamMembers.labels.addNewRole")
|
|
370
|
+
})
|
|
371
|
+
}), /*#__PURE__*/jsx(FormikForm, {
|
|
372
|
+
formikProps: formikProps,
|
|
373
|
+
className: "flex min-h-0 flex-1 flex-col",
|
|
374
|
+
ref: formReference,
|
|
375
|
+
children: function children(_ref3) {
|
|
376
|
+
var _config$permissionRel;
|
|
377
|
+
var dirty = _ref3.dirty;
|
|
378
|
+
return /*#__PURE__*/jsxs(Fragment, {
|
|
379
|
+
children: [/*#__PURE__*/jsx(ScrollToErrorField, {
|
|
380
|
+
formRef: formReference
|
|
381
|
+
}), /*#__PURE__*/jsx(Sheet.Body, {
|
|
382
|
+
children: /*#__PURE__*/jsxs("div", {
|
|
383
|
+
className: "mb-6 w-full space-y-6",
|
|
384
|
+
children: [/*#__PURE__*/jsxs("div", {
|
|
385
|
+
className: "space-y-4",
|
|
386
|
+
children: [/*#__PURE__*/jsx(Input, {
|
|
387
|
+
required: true,
|
|
388
|
+
"data-testid": "ntm-add-role-name-text-field",
|
|
389
|
+
label: t("neetoTeamMembers.common.name"),
|
|
390
|
+
maxLength: ROLE_NAME_MAX_LENGTH,
|
|
391
|
+
name: "name",
|
|
392
|
+
placeholder: t("neetoTeamMembers.placeholders.enterName"),
|
|
393
|
+
readOnly: isReadOnly,
|
|
394
|
+
ref: !isEdit ? inputReference : undefined
|
|
395
|
+
}), /*#__PURE__*/jsx(Textarea, {
|
|
396
|
+
"data-testid": "ntm-add-role-description-text-field",
|
|
397
|
+
label: t("neetoTeamMembers.common.description"),
|
|
398
|
+
maxLength: ROLE_DESCRIPTION_MAX_LENGTH,
|
|
399
|
+
name: "description",
|
|
400
|
+
readOnly: isDisabled,
|
|
401
|
+
placeholder: t("neetoTeamMembers.placeholders.enterDescription")
|
|
402
|
+
})]
|
|
403
|
+
}), /*#__PURE__*/jsx(Permissions, {
|
|
404
|
+
isDisabled: isDisabled,
|
|
405
|
+
permissions: permissions,
|
|
406
|
+
permissionRelationConfig: (_config$permissionRel = config === null || config === void 0 ? void 0 : config.permissionRelation) !== null && _config$permissionRel !== void 0 ? _config$permissionRel : {}
|
|
407
|
+
})]
|
|
408
|
+
})
|
|
409
|
+
}), /*#__PURE__*/jsx(Sheet.Footer, {
|
|
410
|
+
children: /*#__PURE__*/jsx(FormikActionBlock, {
|
|
411
|
+
isSubmitting: isSubmitting,
|
|
412
|
+
className: "flex gap-2",
|
|
413
|
+
cancelButtonProps: {
|
|
414
|
+
"data-testid": "ntm-add-role-cancel-button",
|
|
415
|
+
onClick: onClose
|
|
416
|
+
},
|
|
417
|
+
submitButtonProps: {
|
|
418
|
+
"data-testid": "ntm-add-role-submit-button",
|
|
419
|
+
disabled: isSubmitting || isDisabled || !dirty
|
|
420
|
+
}
|
|
421
|
+
})
|
|
422
|
+
})]
|
|
423
|
+
});
|
|
424
|
+
}
|
|
425
|
+
})]
|
|
426
|
+
});
|
|
427
|
+
};
|
|
428
|
+
|
|
429
|
+
var DEFAULT_MANAGE_ROLE_VALUES = {
|
|
430
|
+
isDelete: false,
|
|
431
|
+
isEdit: false,
|
|
432
|
+
selectedRole: {},
|
|
433
|
+
scrollTo: null
|
|
434
|
+
};
|
|
435
|
+
var MENU_ITEMS = {
|
|
436
|
+
EDIT: "edit",
|
|
437
|
+
DELETE: "delete"
|
|
438
|
+
};
|
|
439
|
+
var SIDEBAR_CELL_SELECTOR = ".ntm-roles-table-sidebar__list-item-cell";
|
|
440
|
+
var COLUMN_ROW_SELECTOR = ".ntm-roles-table__rows > div[data-testid], .ntm-roles-table__empty-row";
|
|
441
|
+
|
|
442
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: true } : { done: false, 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 = true, u = false; 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 = true, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
443
|
+
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; } }
|
|
444
|
+
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; }
|
|
445
|
+
var _deepClone = function deepClone(object) {
|
|
446
|
+
if (!object || true === object) {
|
|
447
|
+
//this also handles boolean as true and false
|
|
448
|
+
return object;
|
|
449
|
+
}
|
|
450
|
+
var objectType = _typeof(object);
|
|
451
|
+
if ("number" === objectType || "string" === objectType) {
|
|
452
|
+
// add your immutables here
|
|
453
|
+
return object;
|
|
454
|
+
}
|
|
455
|
+
var result = null;
|
|
456
|
+
if (Array.isArray(object)) {
|
|
457
|
+
result = [];
|
|
458
|
+
} else if (!object.constructor) {
|
|
459
|
+
result = {};
|
|
460
|
+
} else {
|
|
461
|
+
result = new object.constructor();
|
|
462
|
+
}
|
|
463
|
+
if (object instanceof Map) {
|
|
464
|
+
var _iterator = _createForOfIteratorHelper(object.keys()),
|
|
465
|
+
_step;
|
|
466
|
+
try {
|
|
467
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
468
|
+
var key = _step.value;
|
|
469
|
+
result.set(key, _deepClone(object.get(key)));
|
|
470
|
+
}
|
|
471
|
+
} catch (err) {
|
|
472
|
+
_iterator.e(err);
|
|
473
|
+
} finally {
|
|
474
|
+
_iterator.f();
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
Object.keys(object).forEach(function (key) {
|
|
478
|
+
if (Object.prototype.hasOwnProperty.call(object, key)) {
|
|
479
|
+
result[key] = _deepClone(object[key]);
|
|
480
|
+
}
|
|
481
|
+
});
|
|
482
|
+
return result;
|
|
483
|
+
};
|
|
484
|
+
var renderRolesTooltipContent = function renderRolesTooltipContent(roleName) {
|
|
485
|
+
return Object.is(roleName, "Admin") || Object.is(roleName, "Owner") ? t("neetoTeamMembers.tooltips.adminMustHaveAccess", {
|
|
486
|
+
roleName: roleName
|
|
487
|
+
}) : t("neetoTeamMembers.tooltips.noPermissionToEditRoles");
|
|
488
|
+
};
|
|
489
|
+
var updatePermissionVisibility = function updatePermissionVisibility(categoryName, permissions) {
|
|
490
|
+
var category = permissions.get(categoryName);
|
|
491
|
+
var isPermissionVisible = category.get("isPermissionVisible");
|
|
492
|
+
category.set("isPermissionVisible", !isPermissionVisible);
|
|
493
|
+
return new Map(permissions.set(categoryName, category));
|
|
494
|
+
};
|
|
495
|
+
var filterPermissionsBySearch = function filterPermissionsBySearch(searchTerm, permissionGroups) {
|
|
496
|
+
var newValue = _deepClone(permissionGroups);
|
|
497
|
+
newValue.forEach(function (value) {
|
|
498
|
+
var permissions = value.get("permissions");
|
|
499
|
+
var filteredPermissions = permissions.filter(function (permission) {
|
|
500
|
+
var _permission$descripti;
|
|
501
|
+
return permission === null || permission === void 0 || (_permission$descripti = permission.description) === null || _permission$descripti === void 0 || (_permission$descripti = _permission$descripti.toLowerCase()) === null || _permission$descripti === void 0 || (_permission$descripti = _permission$descripti.trim()) === null || _permission$descripti === void 0 ? void 0 : _permission$descripti.includes(searchTerm.toLowerCase().trim());
|
|
502
|
+
});
|
|
503
|
+
value.set("permissions", filteredPermissions);
|
|
504
|
+
});
|
|
505
|
+
return newValue;
|
|
506
|
+
};
|
|
507
|
+
var getMenuItems = function getMenuItems(_ref) {
|
|
508
|
+
var isDeletePermissionGranted = _ref.isDeletePermissionGranted,
|
|
509
|
+
isUpdatePermissionGranted = _ref.isUpdatePermissionGranted,
|
|
510
|
+
role = _ref.role,
|
|
511
|
+
setManageRole = _ref.setManageRole,
|
|
512
|
+
isSystemRole = _ref.isSystemRole;
|
|
513
|
+
return [{
|
|
514
|
+
key: MENU_ITEMS.EDIT,
|
|
515
|
+
className: "ntm-dropdown__button",
|
|
516
|
+
"data-testid": "ntm-roles-table-edit-role-button",
|
|
517
|
+
isDisabled: not(isUpdatePermissionGranted),
|
|
518
|
+
size: "small",
|
|
519
|
+
tooltipProps: {
|
|
520
|
+
content: t("neetoTeamMembers.tooltips.noPermissionToEditRoles"),
|
|
521
|
+
disabled: isUpdatePermissionGranted,
|
|
522
|
+
position: "left"
|
|
523
|
+
},
|
|
524
|
+
label: t("neetoTeamMembers.common.edit"),
|
|
525
|
+
onClick: function onClick() {
|
|
526
|
+
return setManageRole({
|
|
527
|
+
isEdit: true,
|
|
528
|
+
selectedRole: role,
|
|
529
|
+
scrollTo: null
|
|
530
|
+
});
|
|
531
|
+
}
|
|
532
|
+
}, {
|
|
533
|
+
key: MENU_ITEMS.DELETE,
|
|
534
|
+
className: "ntm-dropdown__button",
|
|
535
|
+
"data-testid": "ntm-roles-table-delete-role-button",
|
|
536
|
+
isDisabled: not(isDeletePermissionGranted),
|
|
537
|
+
size: "small",
|
|
538
|
+
isVisible: not(isSystemRole),
|
|
539
|
+
tooltipProps: {
|
|
540
|
+
content: t("neetoTeamMembers.tooltips.noPermissionToRemoveRoles"),
|
|
541
|
+
disabled: isDeletePermissionGranted,
|
|
542
|
+
position: "left"
|
|
543
|
+
},
|
|
544
|
+
label: t("neetoTeamMembers.common.delete"),
|
|
545
|
+
onClick: function onClick() {
|
|
546
|
+
return setManageRole({
|
|
547
|
+
isDelete: true,
|
|
548
|
+
selectedRole: role,
|
|
549
|
+
scrollTo: null
|
|
550
|
+
});
|
|
551
|
+
}
|
|
552
|
+
}];
|
|
553
|
+
};
|
|
554
|
+
|
|
555
|
+
var Row = function Row(_ref) {
|
|
556
|
+
var _ref$allPermissionsOf = _ref.allPermissionsOfCategory,
|
|
557
|
+
allPermissionsOfCategory = _ref$allPermissionsOf === void 0 ? null : _ref$allPermissionsOf,
|
|
558
|
+
_ref$category = _ref.category,
|
|
559
|
+
category = _ref$category === void 0 ? "" : _ref$category,
|
|
560
|
+
config = _ref.config,
|
|
561
|
+
_ref$permission = _ref.permission,
|
|
562
|
+
permission = _ref$permission === void 0 ? null : _ref$permission,
|
|
563
|
+
roles = _ref.roles,
|
|
564
|
+
_ref$setManageRole = _ref.setManageRole,
|
|
565
|
+
setManageRole = _ref$setManageRole === void 0 ? noop : _ref$setManageRole;
|
|
566
|
+
var isUpdatePermissionGranted = config.permissions.update;
|
|
567
|
+
var permissions = (allPermissionsOfCategory === null || allPermissionsOfCategory === void 0 ? void 0 : allPermissionsOfCategory.get("permissions")) || [];
|
|
568
|
+
var allPermissionIdsOfCategory = map(prop("id"), permissions);
|
|
569
|
+
var handleSubmit = function handleSubmit(role) {
|
|
570
|
+
var scrollTo = permission !== null && permission !== void 0 && permission.id ? {
|
|
571
|
+
type: "permission",
|
|
572
|
+
permissionId: permission.id
|
|
573
|
+
} : {
|
|
574
|
+
type: "category",
|
|
575
|
+
category: category
|
|
576
|
+
};
|
|
577
|
+
setManageRole({
|
|
578
|
+
isEdit: true,
|
|
579
|
+
selectedRole: role,
|
|
580
|
+
scrollTo: scrollTo
|
|
581
|
+
});
|
|
582
|
+
};
|
|
583
|
+
var isCheckboxChecked = function isCheckboxChecked(role) {
|
|
584
|
+
return !allPermissionsOfCategory ? includes(permission === null || permission === void 0 ? void 0 : permission.id, role.permissionIds) : allPermissionIdsOfCategory.every(includes(__, role.permissionIds));
|
|
585
|
+
};
|
|
586
|
+
return /*#__PURE__*/jsx("div", {
|
|
587
|
+
className: classnames("ntm-roles-table__row", {
|
|
588
|
+
"ntm-roles-table__row--highlighted": !!allPermissionsOfCategory
|
|
589
|
+
}),
|
|
590
|
+
children: roles.map(function (role) {
|
|
591
|
+
return /*#__PURE__*/jsx("div", {
|
|
592
|
+
className: "ntm-roles-table__cell",
|
|
593
|
+
"data-testid": "".concat(hyphenate(role.name), "-role-cell"),
|
|
594
|
+
children: /*#__PURE__*/jsx(Tooltip, {
|
|
595
|
+
position: "top",
|
|
596
|
+
content: !(isUpdatePermissionGranted && !identical(role.name, "Admin") && !identical(role.name, "Owner")) ? renderRolesTooltipContent(role.name) : null,
|
|
597
|
+
children: /*#__PURE__*/jsx("div", {
|
|
598
|
+
className: "absolute z-10 m-auto size-4",
|
|
599
|
+
children: /*#__PURE__*/jsx(Checkbox, {
|
|
600
|
+
checked: isCheckboxChecked(role),
|
|
601
|
+
className: "ntm-roles-table-cell__checkbox z-10",
|
|
602
|
+
"data-testid": "ntm-roles-table-permission-checkbox",
|
|
603
|
+
disabled: identical(role.name, "Admin") || identical(role.name, "Owner") || !isUpdatePermissionGranted,
|
|
604
|
+
onCheckedChange: function onCheckedChange() {
|
|
605
|
+
return handleSubmit(role);
|
|
606
|
+
}
|
|
607
|
+
})
|
|
608
|
+
})
|
|
609
|
+
})
|
|
610
|
+
}, role.id);
|
|
611
|
+
})
|
|
612
|
+
});
|
|
613
|
+
};
|
|
614
|
+
|
|
615
|
+
var isOverflown = function isOverflown(_ref) {
|
|
616
|
+
var clientWidth = _ref.clientWidth,
|
|
617
|
+
clientHeight = _ref.clientHeight,
|
|
618
|
+
scrollWidth = _ref.scrollWidth,
|
|
619
|
+
scrollHeight = _ref.scrollHeight;
|
|
620
|
+
return scrollHeight > clientHeight || scrollWidth > clientWidth;
|
|
621
|
+
};
|
|
622
|
+
var getScrollBarWidth = function getScrollBarWidth() {
|
|
623
|
+
var innerElement = document.createElement("p");
|
|
624
|
+
innerElement.classList.add("ntm-scrollbar__inner");
|
|
625
|
+
var outerElement = document.createElement("div");
|
|
626
|
+
outerElement.classList.add("ntm-scrollbar__outer");
|
|
627
|
+
outerElement.appendChild(innerElement);
|
|
628
|
+
document.body.appendChild(outerElement);
|
|
629
|
+
var w1 = innerElement.offsetWidth;
|
|
630
|
+
outerElement.style.overflow = "scroll";
|
|
631
|
+
var w2 = innerElement.offsetWidth;
|
|
632
|
+
if (w1 === w2) w2 = outerElement.clientWidth;
|
|
633
|
+
document.body.removeChild(outerElement);
|
|
634
|
+
return w1 - w2;
|
|
635
|
+
};
|
|
636
|
+
|
|
637
|
+
var _renderDescription = function renderDescription(permissions, filteredPermissions) {
|
|
638
|
+
var permissionTooltip = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
639
|
+
return permissions === null || permissions === void 0 ? void 0 : permissions.map(function (_ref) {
|
|
640
|
+
var id = _ref.id,
|
|
641
|
+
name = _ref.name,
|
|
642
|
+
description = _ref.description,
|
|
643
|
+
children = _ref.children;
|
|
644
|
+
var tooltipContent = permissionTooltip[name];
|
|
645
|
+
return /*#__PURE__*/jsxs(Fragment$1, {
|
|
646
|
+
children: [filteredPermissions.includes(id) && /*#__PURE__*/jsxs("div", {
|
|
647
|
+
className: "ntm-roles-table-sidebar__list-item flex min-h-[var(--ntm-roles-table-cell-height)] flex-row items-center gap-1 whitespace-normal break-words",
|
|
648
|
+
"data-name": description,
|
|
649
|
+
children: [/*#__PURE__*/jsx(Typography, {
|
|
650
|
+
className: "text-[0.9375rem] font-medium leading-normal",
|
|
651
|
+
"data-testid": "ntm-permission-category-description",
|
|
652
|
+
children: description
|
|
653
|
+
}), tooltipContent && /*#__PURE__*/jsx(HelpPopover, {
|
|
654
|
+
description: tooltipContent,
|
|
655
|
+
icon: Info,
|
|
656
|
+
size: "default"
|
|
657
|
+
})]
|
|
658
|
+
}), /*#__PURE__*/jsx("div", {
|
|
659
|
+
className: "ntm-roles-table-sidebar__sub-blocks relative pl-6",
|
|
660
|
+
children: _renderDescription(children, filteredPermissions, permissionTooltip)
|
|
661
|
+
})]
|
|
662
|
+
}, id);
|
|
663
|
+
});
|
|
664
|
+
};
|
|
665
|
+
var getSearchWrapperStyle = function getSearchWrapperStyle() {
|
|
666
|
+
var scrollBarWidth = getScrollBarWidth();
|
|
667
|
+
document.documentElement.style.setProperty("--ntm-roles-table-default-scroll", "".concat(scrollBarWidth, "px"));
|
|
668
|
+
return {
|
|
669
|
+
marginBottom: "".concat(scrollBarWidth, "px")
|
|
670
|
+
};
|
|
671
|
+
};
|
|
672
|
+
var getFilteredCategories = function getFilteredCategories(filteredGroupPermissions) {
|
|
673
|
+
return Array.from((filteredGroupPermissions === null || filteredGroupPermissions === void 0 ? void 0 : filteredGroupPermissions.keys()) || []).filter(function (category) {
|
|
674
|
+
var groupedPermissions = filteredGroupPermissions.get(category);
|
|
675
|
+
var permissions = groupedPermissions.get("permissions") || [];
|
|
676
|
+
return permissions.length > 0;
|
|
677
|
+
});
|
|
678
|
+
};
|
|
679
|
+
|
|
680
|
+
var TableHeader$1 = function TableHeader(_ref) {
|
|
681
|
+
var config = _ref.config,
|
|
682
|
+
roles = _ref.roles,
|
|
683
|
+
setManageRole = _ref.setManageRole,
|
|
684
|
+
setIsScrollPresent = _ref.setIsScrollPresent;
|
|
685
|
+
var isUpdatePermissionGranted = config.permissions.update;
|
|
686
|
+
var isDeletePermissionGranted = config.permissions["delete"];
|
|
687
|
+
var scrollSyncElement = useRef(null);
|
|
688
|
+
var getOverflowStatus = useCallback(function () {
|
|
689
|
+
if (!scrollSyncElement.current) return;
|
|
690
|
+
var headerElement = scrollSyncElement.current.node;
|
|
691
|
+
var isScrollBarPresent = isOverflown(headerElement);
|
|
692
|
+
setIsScrollPresent(isScrollBarPresent);
|
|
693
|
+
}, [setIsScrollPresent]);
|
|
694
|
+
useEffect(function () {
|
|
695
|
+
addEventListener("resize", getOverflowStatus);
|
|
696
|
+
return function () {
|
|
697
|
+
return removeEventListener("resize", getOverflowStatus);
|
|
698
|
+
};
|
|
699
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
700
|
+
}, []);
|
|
701
|
+
useEffect(getOverflowStatus, [getOverflowStatus, scrollSyncElement, roles]);
|
|
702
|
+
return /*#__PURE__*/jsx(distExports.ScrollSyncPane, {
|
|
703
|
+
group: "horizontal",
|
|
704
|
+
ref: scrollSyncElement,
|
|
705
|
+
children: /*#__PURE__*/jsx("div", {
|
|
706
|
+
className: "ntm-roles-table__header",
|
|
707
|
+
"data-testid": "ntm-roles-table-header",
|
|
708
|
+
children: roles === null || roles === void 0 ? void 0 : roles.map(function (role, index) {
|
|
709
|
+
var isSystemRole = identical("system", role.kind);
|
|
710
|
+
var isAdminRole = ADMIN_ROLES.includes(role.name) && isSystemRole;
|
|
711
|
+
return /*#__PURE__*/jsx("div", {
|
|
712
|
+
className: "ntm-roles-table__cell",
|
|
713
|
+
children: /*#__PURE__*/jsxs("div", {
|
|
714
|
+
className: "flex w-full items-center justify-between overflow-hidden",
|
|
715
|
+
"data-testid": "ntm-roles-table-role-header",
|
|
716
|
+
children: [/*#__PURE__*/jsx(Typography, {
|
|
717
|
+
className: "w-full overflow-hidden text-ellipsis whitespace-nowrap text-center text-sm font-semibold leading-normal",
|
|
718
|
+
"data-testid": "ntm-roles-table-header-role-title",
|
|
719
|
+
children: role.name
|
|
720
|
+
}), !isAdminRole && /*#__PURE__*/jsx(MoreDropdown, {
|
|
721
|
+
dropdownProps: {
|
|
722
|
+
autoWidth: true
|
|
723
|
+
},
|
|
724
|
+
dropdownButtonProps: {
|
|
725
|
+
className: "m-0.5 shrink-0",
|
|
726
|
+
"data-testid": "ntm-roles-table-header-role-dropdown-button"
|
|
727
|
+
},
|
|
728
|
+
menuItems: getMenuItems({
|
|
729
|
+
isDeletePermissionGranted: isDeletePermissionGranted,
|
|
730
|
+
isUpdatePermissionGranted: isUpdatePermissionGranted,
|
|
731
|
+
role: role,
|
|
732
|
+
setManageRole: setManageRole,
|
|
733
|
+
isSystemRole: isSystemRole
|
|
734
|
+
})
|
|
735
|
+
})]
|
|
736
|
+
})
|
|
737
|
+
}, "ntm-roles-".concat(index));
|
|
738
|
+
})
|
|
739
|
+
})
|
|
740
|
+
});
|
|
741
|
+
};
|
|
742
|
+
var TableHeader = /*#__PURE__*/memo(TableHeader$1);
|
|
743
|
+
|
|
744
|
+
var Delete = function Delete(_ref) {
|
|
745
|
+
var isOpen = _ref.isOpen,
|
|
746
|
+
onClose = _ref.onClose,
|
|
747
|
+
selectedRole = _ref.selectedRole,
|
|
748
|
+
roles = _ref.roles;
|
|
749
|
+
var _useTranslation = useTranslation(),
|
|
750
|
+
t = _useTranslation.t;
|
|
751
|
+
var _useDestroyRole = useDestroyRole({
|
|
752
|
+
onSuccess: onClose
|
|
753
|
+
}),
|
|
754
|
+
deleteRole = _useDestroyRole.mutate,
|
|
755
|
+
isDeleting = _useDestroyRole.isPending;
|
|
756
|
+
var handleDelete = function handleDelete() {
|
|
757
|
+
var _roles$find;
|
|
758
|
+
var id = selectedRole.id;
|
|
759
|
+
var payload = {
|
|
760
|
+
newRoleId: (_roles$find = roles.find(function (role) {
|
|
761
|
+
return role.id !== id;
|
|
762
|
+
})) === null || _roles$find === void 0 ? void 0 : _roles$find.id
|
|
763
|
+
};
|
|
764
|
+
deleteRole({
|
|
765
|
+
id: id,
|
|
766
|
+
payload: payload
|
|
767
|
+
});
|
|
768
|
+
};
|
|
769
|
+
return /*#__PURE__*/jsx(Alert, {
|
|
770
|
+
isOpen: isOpen,
|
|
771
|
+
onClose: onClose,
|
|
772
|
+
cancelButtonLabel: t("neetoTeamMembers.buttons.cancel"),
|
|
773
|
+
isSubmitting: isDeleting,
|
|
774
|
+
submitButtonLabel: t("neetoTeamMembers.buttons.delete"),
|
|
775
|
+
title: t("neetoTeamMembers.labels.deleteRole"),
|
|
776
|
+
message: /*#__PURE__*/jsx(Trans, {
|
|
777
|
+
i18nKey: "neetoTeamMembers.alerts.messages.deletingRole",
|
|
778
|
+
values: {
|
|
779
|
+
name: selectedRole === null || selectedRole === void 0 ? void 0 : selectedRole.name
|
|
780
|
+
}
|
|
781
|
+
}),
|
|
782
|
+
onSubmit: handleDelete
|
|
783
|
+
});
|
|
784
|
+
};
|
|
785
|
+
|
|
786
|
+
var Columns = function Columns(_ref) {
|
|
787
|
+
var config = _ref.config,
|
|
788
|
+
filteredGroupPermissions = _ref.filteredGroupPermissions,
|
|
789
|
+
filteredRoles = _ref.filteredRoles,
|
|
790
|
+
permissions = _ref.permissions,
|
|
791
|
+
roles = _ref.roles,
|
|
792
|
+
setIsScrollPresent = _ref.setIsScrollPresent;
|
|
793
|
+
var _useState = useState(DEFAULT_MANAGE_ROLE_VALUES),
|
|
794
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
795
|
+
manageRole = _useState2[0],
|
|
796
|
+
setManageRole = _useState2[1];
|
|
797
|
+
var categories = useMemo(function () {
|
|
798
|
+
return getFilteredCategories(filteredGroupPermissions);
|
|
799
|
+
}, [filteredGroupPermissions]);
|
|
800
|
+
var onClose = function onClose() {
|
|
801
|
+
return setManageRole(DEFAULT_MANAGE_ROLE_VALUES);
|
|
802
|
+
};
|
|
803
|
+
return /*#__PURE__*/jsxs("div", {
|
|
804
|
+
className: "ntm-roles-table__columns",
|
|
805
|
+
children: [/*#__PURE__*/jsx(TableHeader, {
|
|
806
|
+
config: config,
|
|
807
|
+
setIsScrollPresent: setIsScrollPresent,
|
|
808
|
+
setManageRole: setManageRole,
|
|
809
|
+
roles: filteredRoles
|
|
810
|
+
}), /*#__PURE__*/jsx(distExports.ScrollSyncPane, {
|
|
811
|
+
group: ["horizontal", "vertical"],
|
|
812
|
+
children: /*#__PURE__*/jsx("div", {
|
|
813
|
+
className: "ntm-roles-table__rows",
|
|
814
|
+
children: categories.length === 0 ? /*#__PURE__*/jsx("div", {
|
|
815
|
+
className: "ntm-roles-table__empty-row",
|
|
816
|
+
children: /*#__PURE__*/jsx("div", {
|
|
817
|
+
className: "ntm-roles-table__row",
|
|
818
|
+
children: /*#__PURE__*/jsx("div", {
|
|
819
|
+
className: "ntm-roles-table__cell",
|
|
820
|
+
children: /*#__PURE__*/jsx("div", {
|
|
821
|
+
children: "\xA0"
|
|
822
|
+
})
|
|
823
|
+
})
|
|
824
|
+
})
|
|
825
|
+
}) : categories.map(function (category, index) {
|
|
826
|
+
var groupedPermissions = filteredGroupPermissions.get(category);
|
|
827
|
+
var isPermissionVisible = groupedPermissions.get("isPermissionVisible");
|
|
828
|
+
var permissions = groupedPermissions.get("permissions");
|
|
829
|
+
return /*#__PURE__*/jsxs("div", {
|
|
830
|
+
"data-testid": "".concat(hyphenate(category), "-permission-card"),
|
|
831
|
+
children: [/*#__PURE__*/jsx(Row, {
|
|
832
|
+
category: category,
|
|
833
|
+
config: config,
|
|
834
|
+
setManageRole: setManageRole,
|
|
835
|
+
allPermissionsOfCategory: groupedPermissions,
|
|
836
|
+
roles: filteredRoles
|
|
837
|
+
}), isPermissionVisible && permissions.map(function (permission) {
|
|
838
|
+
return /*#__PURE__*/createElement(Row, {
|
|
839
|
+
config: config,
|
|
840
|
+
permission: permission,
|
|
841
|
+
setManageRole: setManageRole,
|
|
842
|
+
"data-testid": "".concat(hyphenate(permission), "-permission-row"),
|
|
843
|
+
key: permission.id,
|
|
844
|
+
roles: filteredRoles
|
|
845
|
+
});
|
|
846
|
+
})]
|
|
847
|
+
}, index);
|
|
848
|
+
})
|
|
849
|
+
})
|
|
850
|
+
}), /*#__PURE__*/jsx(ManageRoles, {
|
|
851
|
+
config: config,
|
|
852
|
+
onClose: onClose,
|
|
853
|
+
permissions: permissions,
|
|
854
|
+
isOpen: manageRole.isEdit,
|
|
855
|
+
scrollTo: manageRole.scrollTo,
|
|
856
|
+
selectedRole: manageRole.selectedRole
|
|
857
|
+
}), /*#__PURE__*/jsx(Delete, {
|
|
858
|
+
onClose: onClose,
|
|
859
|
+
roles: roles,
|
|
860
|
+
isOpen: manageRole.isDelete,
|
|
861
|
+
selectedRole: manageRole.selectedRole
|
|
862
|
+
})]
|
|
863
|
+
});
|
|
864
|
+
};
|
|
865
|
+
|
|
866
|
+
var ToggleDropdown = function ToggleDropdown(_ref) {
|
|
867
|
+
var isVisible = _ref.isVisible;
|
|
868
|
+
return isVisible ? /*#__PURE__*/jsx(ChevronUp, {
|
|
869
|
+
className: "ntm-roles-table-sidebar__drop-down-button cursor-pointer text-muted-foreground",
|
|
870
|
+
"data-testid": "ntm-permission-category-hide-button",
|
|
871
|
+
size: 16,
|
|
872
|
+
strokeWidth: 2
|
|
873
|
+
}) : /*#__PURE__*/jsx(ChevronDown, {
|
|
874
|
+
className: "ntm-roles-table-sidebar__drop-down-button cursor-pointer text-muted-foreground",
|
|
875
|
+
"data-testid": "ntm-permission-category-show-button",
|
|
876
|
+
size: 16,
|
|
877
|
+
strokeWidth: 2
|
|
878
|
+
});
|
|
879
|
+
};
|
|
880
|
+
|
|
881
|
+
var Sidebar = function Sidebar(_ref) {
|
|
882
|
+
var filteredGroupPermissions = _ref.filteredGroupPermissions,
|
|
883
|
+
toggleDropdown = _ref.toggleDropdown,
|
|
884
|
+
isScrollPresent = _ref.isScrollPresent,
|
|
885
|
+
_ref$permissions = _ref.permissions,
|
|
886
|
+
permissions = _ref$permissions === void 0 ? [] : _ref$permissions,
|
|
887
|
+
_ref$permissionRelati = _ref.permissionRelationConfig,
|
|
888
|
+
permissionRelationConfig = _ref$permissionRelati === void 0 ? {} : _ref$permissionRelati,
|
|
889
|
+
_ref$permissionToolti = _ref.permissionTooltip,
|
|
890
|
+
permissionTooltip = _ref$permissionToolti === void 0 ? {} : _ref$permissionToolti;
|
|
891
|
+
var _useTranslation = useTranslation(),
|
|
892
|
+
t = _useTranslation.t;
|
|
893
|
+
var categories = useMemo(function () {
|
|
894
|
+
return getFilteredCategories(filteredGroupPermissions);
|
|
895
|
+
}, [filteredGroupPermissions]);
|
|
896
|
+
var searchWrapperStyle = isScrollPresent ? getSearchWrapperStyle() : {};
|
|
897
|
+
var permissionsNameMap = groupBy(prop("name"))(permissions);
|
|
898
|
+
var groupedPermissionsWithChildren = useMemo(function () {
|
|
899
|
+
var childrenRemovedFromRoot = getChildrenRemovedFromRoot({
|
|
900
|
+
permissions: permissions,
|
|
901
|
+
permissionsNameMap: permissionsNameMap,
|
|
902
|
+
permissionRelationConfig: permissionRelationConfig
|
|
903
|
+
});
|
|
904
|
+
return groupBy(prop("category"))(childrenRemovedFromRoot);
|
|
905
|
+
}, [permissions]); // eslint-disable-line react-hooks/exhaustive-deps
|
|
906
|
+
|
|
907
|
+
return /*#__PURE__*/jsxs("div", {
|
|
908
|
+
className: "ntm-roles-table__sidebar",
|
|
909
|
+
children: [/*#__PURE__*/jsx("div", {
|
|
910
|
+
className: "ntm-roles-table-sidebar__search",
|
|
911
|
+
style: searchWrapperStyle,
|
|
912
|
+
children: /*#__PURE__*/jsx(Search, {
|
|
913
|
+
enableUrlSync: true,
|
|
914
|
+
"data-testid": "ntm-search-permissions-input",
|
|
915
|
+
searchParamName: "permission_search_term",
|
|
916
|
+
placeholder: t("neetoTeamMembers.placeholders.searchPermission", PLURAL)
|
|
917
|
+
})
|
|
918
|
+
}), /*#__PURE__*/jsx(distExports.ScrollSyncPane, {
|
|
919
|
+
group: "vertical",
|
|
920
|
+
children: /*#__PURE__*/jsx("div", {
|
|
921
|
+
className: "ntm-roles-table-sidebar__list",
|
|
922
|
+
children: categories.length === 0 ? /*#__PURE__*/jsx("div", {
|
|
923
|
+
className: "ntm-roles-table-sidebar__list-item-cell",
|
|
924
|
+
children: /*#__PURE__*/jsx("div", {
|
|
925
|
+
className: "ntm-roles-table-sidebar__list-item ntm-roles-table-sidebar__list-item--highlighted",
|
|
926
|
+
children: /*#__PURE__*/jsx(Typography, {
|
|
927
|
+
className: "text-sm font-semibold leading-normal",
|
|
928
|
+
"data-testid": "ntm-empty-category-row",
|
|
929
|
+
children: t("neetoTeamMembers.labels.permissionsNotFound")
|
|
930
|
+
})
|
|
931
|
+
})
|
|
932
|
+
}) : categories.map(function (category, index) {
|
|
933
|
+
var groupedPermissions = filteredGroupPermissions.get(category);
|
|
934
|
+
var isPermissionVisible = groupedPermissions.get("isPermissionVisible");
|
|
935
|
+
return /*#__PURE__*/jsxs("div", {
|
|
936
|
+
className: "ntm-roles-table-sidebar__list-item-cell",
|
|
937
|
+
children: [/*#__PURE__*/jsxs("div", {
|
|
938
|
+
className: "ntm-roles-table-sidebar__list-item ntm-roles-table-sidebar__list-item--highlighted flex cursor-pointer items-center justify-between border-t border-border bg-muted px-6 py-2.5",
|
|
939
|
+
onClick: function onClick() {
|
|
940
|
+
return toggleDropdown(category);
|
|
941
|
+
},
|
|
942
|
+
children: [/*#__PURE__*/jsx(Typography, {
|
|
943
|
+
className: "text-sm font-semibold leading-normal",
|
|
944
|
+
"data-testid": "ntm-permission-category-title",
|
|
945
|
+
children: category
|
|
946
|
+
}), /*#__PURE__*/jsx(ToggleDropdown, {
|
|
947
|
+
isVisible: isPermissionVisible
|
|
948
|
+
})]
|
|
949
|
+
}), isPermissionVisible && /*#__PURE__*/jsx("div", {
|
|
950
|
+
className: "ntm-roles-table-sidebar__list-item-spacing-handler ms-3 px-6",
|
|
951
|
+
children: _renderDescription(groupedPermissionsWithChildren[category], pluck("id", filteredGroupPermissions.get(category).get("permissions") || []), permissionTooltip)
|
|
952
|
+
})]
|
|
953
|
+
}, index);
|
|
954
|
+
})
|
|
955
|
+
})
|
|
956
|
+
})]
|
|
957
|
+
});
|
|
958
|
+
};
|
|
959
|
+
|
|
960
|
+
var syncRowHeights = function syncRowHeights() {
|
|
961
|
+
var sidebarCells = document.querySelectorAll(SIDEBAR_CELL_SELECTOR);
|
|
962
|
+
var columnRows = document.querySelectorAll(COLUMN_ROW_SELECTOR);
|
|
963
|
+
var count = Math.min(sidebarCells.length, columnRows.length);
|
|
964
|
+
for (var i = 0; i < count; i++) {
|
|
965
|
+
// Reset heights so we can measure natural size
|
|
966
|
+
sidebarCells[i].style.height = "auto";
|
|
967
|
+
var sidebarChildren = sidebarCells[i].children;
|
|
968
|
+
for (var j = 0; j < sidebarChildren.length; j++) {
|
|
969
|
+
sidebarChildren[j].style.height = "auto";
|
|
970
|
+
}
|
|
971
|
+
var columnChildren = columnRows[i].children;
|
|
972
|
+
for (var _j = 0; _j < columnChildren.length; _j++) {
|
|
973
|
+
var cells = columnChildren[_j].querySelectorAll(".ntm-roles-table__cell");
|
|
974
|
+
cells.forEach(function (cell) {
|
|
975
|
+
cell.style.height = "auto";
|
|
976
|
+
});
|
|
977
|
+
}
|
|
978
|
+
}
|
|
979
|
+
|
|
980
|
+
// Force reflow before measuring
|
|
981
|
+
|
|
982
|
+
document.body.offsetHeight;
|
|
983
|
+
var _loop = function _loop() {
|
|
984
|
+
// For each row group (category header + its permission rows),
|
|
985
|
+
// sync the sidebar cell block with the column row block.
|
|
986
|
+
var sidebarBlock = sidebarCells[_i];
|
|
987
|
+
var columnBlock = columnRows[_i];
|
|
988
|
+
|
|
989
|
+
// Sync the category header row (first child of each block)
|
|
990
|
+
var sidebarHeader = sidebarBlock.querySelector(".ntm-roles-table-sidebar__list-item--highlighted");
|
|
991
|
+
var columnHeader = columnBlock.querySelector(".ntm-roles-table__row--highlighted");
|
|
992
|
+
if (sidebarHeader && columnHeader) {
|
|
993
|
+
var _columnHeaderCells$;
|
|
994
|
+
var columnHeaderCells = columnHeader.querySelectorAll(".ntm-roles-table__cell");
|
|
995
|
+
var sidebarH = sidebarHeader.getBoundingClientRect().height;
|
|
996
|
+
var columnH = ((_columnHeaderCells$ = columnHeaderCells[0]) === null || _columnHeaderCells$ === void 0 ? void 0 : _columnHeaderCells$.getBoundingClientRect().height) || 0;
|
|
997
|
+
var maxH = Math.max(sidebarH, columnH);
|
|
998
|
+
sidebarHeader.style.height = "".concat(maxH, "px");
|
|
999
|
+
columnHeaderCells.forEach(function (cell) {
|
|
1000
|
+
cell.style.height = "".concat(maxH, "px");
|
|
1001
|
+
});
|
|
1002
|
+
}
|
|
1003
|
+
|
|
1004
|
+
// Sync individual permission rows
|
|
1005
|
+
var sidebarItems = sidebarBlock.querySelectorAll(".ntm-roles-table-sidebar__list-item:not(.ntm-roles-table-sidebar__list-item--highlighted)");
|
|
1006
|
+
var columnPermRows = columnBlock.querySelectorAll(".ntm-roles-table__row:not(.ntm-roles-table__row--highlighted)");
|
|
1007
|
+
var permCount = Math.min(sidebarItems.length, columnPermRows.length);
|
|
1008
|
+
var _loop2 = function _loop2() {
|
|
1009
|
+
var _columnCells$;
|
|
1010
|
+
var sidebarH = sidebarItems[_j2].getBoundingClientRect().height;
|
|
1011
|
+
var columnCells = columnPermRows[_j2].querySelectorAll(".ntm-roles-table__cell");
|
|
1012
|
+
var columnH = ((_columnCells$ = columnCells[0]) === null || _columnCells$ === void 0 ? void 0 : _columnCells$.getBoundingClientRect().height) || 0;
|
|
1013
|
+
var maxH = Math.max(sidebarH, columnH);
|
|
1014
|
+
sidebarItems[_j2].style.height = "".concat(maxH, "px");
|
|
1015
|
+
columnCells.forEach(function (cell) {
|
|
1016
|
+
cell.style.height = "".concat(maxH, "px");
|
|
1017
|
+
});
|
|
1018
|
+
};
|
|
1019
|
+
for (var _j2 = 0; _j2 < permCount; _j2++) {
|
|
1020
|
+
_loop2();
|
|
1021
|
+
}
|
|
1022
|
+
};
|
|
1023
|
+
for (var _i = 0; _i < count; _i++) {
|
|
1024
|
+
_loop();
|
|
1025
|
+
}
|
|
1026
|
+
};
|
|
1027
|
+
var useRowHeightSync = function useRowHeightSync(filteredGroupPermissions) {
|
|
1028
|
+
var sync = useCallback(function () {
|
|
1029
|
+
requestAnimationFrame(syncRowHeights);
|
|
1030
|
+
}, []);
|
|
1031
|
+
useEffect(function () {
|
|
1032
|
+
sync();
|
|
1033
|
+
}, [filteredGroupPermissions, sync]);
|
|
1034
|
+
useEffect(function () {
|
|
1035
|
+
var observer = new ResizeObserver(sync);
|
|
1036
|
+
var container = document.querySelector(".ntm-roles-table__container");
|
|
1037
|
+
if (container) observer.observe(container);
|
|
1038
|
+
window.addEventListener("resize", sync);
|
|
1039
|
+
return function () {
|
|
1040
|
+
observer.disconnect();
|
|
1041
|
+
window.removeEventListener("resize", sync);
|
|
1042
|
+
};
|
|
1043
|
+
}, [sync]);
|
|
1044
|
+
};
|
|
1045
|
+
|
|
1046
|
+
var Table = function Table(_ref) {
|
|
1047
|
+
var _config$permissionRel, _config$permissionToo;
|
|
1048
|
+
var config = _ref.config,
|
|
1049
|
+
filteredRoles = _ref.filteredRoles,
|
|
1050
|
+
roles = _ref.roles,
|
|
1051
|
+
permissionGroups = _ref.permissionGroups,
|
|
1052
|
+
permissions = _ref.permissions,
|
|
1053
|
+
setModifiedRoles = _ref.setModifiedRoles,
|
|
1054
|
+
setIsNewRolePaneOpen = _ref.setIsNewRolePaneOpen;
|
|
1055
|
+
var _useTranslation = useTranslation(),
|
|
1056
|
+
t = _useTranslation.t;
|
|
1057
|
+
var _useQueryParams = useQueryParams(),
|
|
1058
|
+
_useQueryParams$permi = _useQueryParams.permissionSearchTerm,
|
|
1059
|
+
permissionSearchTerm = _useQueryParams$permi === void 0 ? "" : _useQueryParams$permi;
|
|
1060
|
+
var isCreatePermissionGranted = config.permissions.create;
|
|
1061
|
+
var _useState = useState(permissionGroups),
|
|
1062
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
1063
|
+
filteredGroupPermissions = _useState2[0],
|
|
1064
|
+
setFilteredGroupPermissions = _useState2[1];
|
|
1065
|
+
var _useState3 = useState(false),
|
|
1066
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
1067
|
+
isScrollPresent = _useState4[0],
|
|
1068
|
+
setIsScrollPresent = _useState4[1];
|
|
1069
|
+
var _useState5 = useState(undefined),
|
|
1070
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
1071
|
+
selectedRole = _useState6[0],
|
|
1072
|
+
setSelectedRole = _useState6[1];
|
|
1073
|
+
var _useState7 = useState(false),
|
|
1074
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
1075
|
+
isDeleteAlertOpen = _useState8[0],
|
|
1076
|
+
setIsDeleteAlertOpen = _useState8[1];
|
|
1077
|
+
var _useState9 = useState(false),
|
|
1078
|
+
_useState10 = _slicedToArray(_useState9, 2),
|
|
1079
|
+
isEditPaneOpen = _useState10[0],
|
|
1080
|
+
setIsEditPaneOpen = _useState10[1];
|
|
1081
|
+
var toggleDropdown = function toggleDropdown(category) {
|
|
1082
|
+
var permissions = updatePermissionVisibility(category, filteredGroupPermissions);
|
|
1083
|
+
setFilteredGroupPermissions(permissions);
|
|
1084
|
+
};
|
|
1085
|
+
useRowHeightSync(filteredGroupPermissions);
|
|
1086
|
+
useEffect(function () {
|
|
1087
|
+
var newValue = filterPermissionsBySearch(permissionSearchTerm, permissionGroups);
|
|
1088
|
+
setFilteredGroupPermissions(newValue);
|
|
1089
|
+
}, [permissionGroups, permissionSearchTerm]);
|
|
1090
|
+
return /*#__PURE__*/jsxs(Fragment, {
|
|
1091
|
+
children: [/*#__PURE__*/jsx("div", {
|
|
1092
|
+
className: "ntm-roles-table__wrapper",
|
|
1093
|
+
children: /*#__PURE__*/jsx("div", {
|
|
1094
|
+
className: "ntm-roles-table__container",
|
|
1095
|
+
children: isEmpty(filteredRoles) ? /*#__PURE__*/jsx("div", {
|
|
1096
|
+
className: "flex h-full w-full items-center justify-center",
|
|
1097
|
+
children: /*#__PURE__*/jsx(Empty, {
|
|
1098
|
+
title: t("neetoTeamMembers.labels.roleNotFound", PLURAL),
|
|
1099
|
+
children: /*#__PURE__*/jsx(Button, {
|
|
1100
|
+
"data-testid": "ntm-add-role-button",
|
|
1101
|
+
disabled: !isCreatePermissionGranted,
|
|
1102
|
+
onClick: function onClick() {
|
|
1103
|
+
return setIsNewRolePaneOpen(true);
|
|
1104
|
+
},
|
|
1105
|
+
children: t("neetoTeamMembers.labels.addNewRole")
|
|
1106
|
+
})
|
|
1107
|
+
})
|
|
1108
|
+
}) : /*#__PURE__*/jsxs(Fragment, {
|
|
1109
|
+
children: [/*#__PURE__*/jsx(Sidebar, {
|
|
1110
|
+
filteredGroupPermissions: filteredGroupPermissions,
|
|
1111
|
+
isScrollPresent: isScrollPresent,
|
|
1112
|
+
permissions: permissions,
|
|
1113
|
+
toggleDropdown: toggleDropdown,
|
|
1114
|
+
permissionRelationConfig: (_config$permissionRel = config === null || config === void 0 ? void 0 : config.permissionRelation) !== null && _config$permissionRel !== void 0 ? _config$permissionRel : {},
|
|
1115
|
+
permissionTooltip: (_config$permissionToo = config === null || config === void 0 ? void 0 : config.permissionTooltip) !== null && _config$permissionToo !== void 0 ? _config$permissionToo : {}
|
|
1116
|
+
}), /*#__PURE__*/jsx(Columns, {
|
|
1117
|
+
config: config,
|
|
1118
|
+
filteredGroupPermissions: filteredGroupPermissions,
|
|
1119
|
+
filteredRoles: filteredRoles,
|
|
1120
|
+
permissions: permissions,
|
|
1121
|
+
roles: roles,
|
|
1122
|
+
setIsScrollPresent: setIsScrollPresent,
|
|
1123
|
+
setModifiedRoles: setModifiedRoles
|
|
1124
|
+
})]
|
|
1125
|
+
})
|
|
1126
|
+
})
|
|
1127
|
+
}), /*#__PURE__*/jsx(ManageRoles, {
|
|
1128
|
+
config: config,
|
|
1129
|
+
permissions: permissions,
|
|
1130
|
+
selectedRole: selectedRole,
|
|
1131
|
+
isOpen: isEditPaneOpen,
|
|
1132
|
+
onClose: function onClose() {
|
|
1133
|
+
setSelectedRole(undefined);
|
|
1134
|
+
setIsEditPaneOpen(false);
|
|
1135
|
+
}
|
|
1136
|
+
}), /*#__PURE__*/jsx(Delete, {
|
|
1137
|
+
roles: roles,
|
|
1138
|
+
selectedRole: selectedRole,
|
|
1139
|
+
isOpen: isDeleteAlertOpen,
|
|
1140
|
+
onClose: function onClose() {
|
|
1141
|
+
setSelectedRole(undefined);
|
|
1142
|
+
setIsDeleteAlertOpen(false);
|
|
1143
|
+
}
|
|
1144
|
+
})]
|
|
1145
|
+
});
|
|
1146
|
+
};
|
|
1147
|
+
|
|
1148
|
+
var css = ":root{--ntm-roles-table-default-scroll:0.9375rem;--ntm-roles-table-cell-height:3rem;--ntm-roles-sidebar-width:480px;--ntm-roles-table-header-height:3rem}.ntm-scrollbar__inner{height:12.5rem;width:100%}.ntm-scrollbar__outer{height:9.375rem;inset-inline-start:0;overflow:hidden;position:absolute;top:0;visibility:hidden;width:12.5rem}.ntm-empty-state{align-items:center;display:flex;height:100%;justify-content:center;width:100%}.ntm-roles-pane__body{margin-bottom:1.5rem;width:100%}.ntm-roles-pane__body-wrapper>*+*{margin-top:1rem}.ntm-roles-pane__body>*+*{margin-top:1.5rem}.ntm-roles-pane__footer{display:flex;gap:.5rem}.ntm-roles-permission__heading{padding-top:.5rem}.ntm-roles-permission__card{background-color:var(--background);display:flex;flex-direction:column;gap:.75rem;padding:.4rem 0;position:relative}.ntm-roles-permission__card:after{background-color:var(--border);content:\"\";height:1px;inset-inline-start:-.9375rem;position:absolute;top:.875rem;width:.625rem}.ntm-roles-permission__card--description{flex-grow:1}.ntm-roles-permission__card--checkbox{padding:0 .5rem}.ntm-roles-permission__sub-blocks{position:relative}.ntm-roles-permission__sub-blocks:before{background-color:var(--border);content:\"\";height:calc(100% - .875rem);inset-inline-start:.5rem;position:absolute;top:0;width:.0625rem}.ntm-roles-permission__sub-blocks:empty{display:none}.ntm-roles-permission-category-card{border:1px solid var(--border);border-radius:.375rem;border-radius:var(--radius,.375rem);padding:.625rem 1.25rem;transition:all .3s}.ntm-roles-permission-category-card--active{background-color:color-mix(in oklch,var(--primary) 10%,transparent);border-color:var(--primary);outline:1px solid var(--primary)}.ntm-roles-permission-category-card--active .ntm-roles-permission__card{background-color:transparent}.ntm-roles-permission-category-card>.ntm-roles-permission__card:after{display:none}@keyframes ntm-roles-permission-blink{0%,to{color:inherit}50%{color:var(--primary);font-weight:700}}.ntm-roles-permission__card--blink label{animation:ntm-roles-permission-blink .6s ease-in-out 0s 3}.ntm-roles-table__wrapper{padding:0 2.5rem;width:100%}.ntm-roles-table__container{border:1px solid var(--border);border-radius:.5rem;border-radius:var(--radius-lg,.5rem);display:flex;max-height:calc(100vh - var(--neeto-molecules-main-header-with-breadcrumbs-height) - 28px);overflow:hidden}.ntm-roles-table__container>*{max-height:inherit}.ntm-roles-table__sidebar{min-width:480px;min-width:var(--ntm-roles-sidebar-width);width:480px;width:var(--ntm-roles-sidebar-width)}.ntm-roles-table-sidebar__search{background-color:var(--muted);border-bottom:thin solid var(--border);border-right:thin solid var(--border);height:3rem;height:var(--ntm-roles-table-header-height);padding:.5rem 1rem}.ntm-roles-table-sidebar__list{border-right:thin solid var(--border);max-height:calc(100vh - var(--neeto-molecules-main-header-with-breadcrumbs-height) - 3rem - 30px);max-height:calc(100vh - var(--neeto-molecules-main-header-with-breadcrumbs-height) - var(--ntm-roles-table-header-height) - 30px);overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.ntm-roles-table-sidebar__list::-webkit-scrollbar{height:0;width:0}.ntm-roles-table-sidebar__list-item{display:flex;flex-direction:column;min-height:3rem;min-height:var(--ntm-roles-table-cell-height);overflow-wrap:break-word;position:relative;white-space:normal}.ntm-roles-table-sidebar__list-item:after{background-color:var(--border);content:\"\";height:.0625rem;inset-inline-start:-1.125rem;position:absolute;top:1.4375rem;width:.875rem}.ntm-roles-table-sidebar__list-item.ntm-roles-table-sidebar__list-item--highlighted{align-items:center;background-color:var(--muted);border-bottom:thin solid var(--border);border-top:thin solid var(--border);flex-direction:row;justify-content:space-between;min-height:3rem;min-height:var(--ntm-roles-table-cell-height);padding:.6875rem 1.5rem}.ntm-roles-table__columns{flex-grow:1;overflow:hidden}.ntm-roles-table__cell{align-items:center;border-inline-end:thin solid var(--border);display:flex;height:3rem;height:var(--ntm-roles-table-cell-height);justify-content:center;min-height:3rem;min-height:var(--ntm-roles-table-cell-height);min-width:200px;padding:.75rem .5rem;width:100%}.ntm-roles-table__cell:last-child{border-inline-end:none}.ntm-roles-table-cell__checkbox-wrapper{height:1rem;margin:auto;position:absolute;width:1rem;z-index:10}.ntm-roles-table-cell__checkbox{z-index:10}.ntm-roles-table__header{align-items:center;display:flex;overflow-x:auto}.ntm-roles-table__header .ntm-roles-table__cell{background-color:var(--muted);border-bottom:thin solid var(--border);height:3rem;height:var(--ntm-roles-table-header-height)}.ntm-roles-table-header-cell__container{align-items:center;display:flex;justify-content:space-between;overflow:hidden;width:100%}.ntm-roles-table-header__dropdown{flex-shrink:0;margin:.1875rem}.ntm-roles-table-header__role-name{overflow:hidden;text-align:center;text-overflow:ellipsis;white-space:nowrap;width:100%}.ntm-roles-table__rows{max-height:calc(100vh - var(--neeto-molecules-main-header-with-breadcrumbs-height) - 3rem - 30px);max-height:calc(100vh - var(--neeto-molecules-main-header-with-breadcrumbs-height) - var(--ntm-roles-table-header-height) - 30px);overflow-y:auto;scrollbar-width:none;width:100%}.ntm-roles-table__rows::-webkit-scrollbar{height:0;width:0}.ntm-roles-table__rows::-webkit-scrollbar-thumb{background:var(--border);border-radius:3.125rem}.ntm-roles-table__rows::-webkit-scrollbar-thumb:hover{border-radius:3.125rem}.ntm-roles-table__rows::-webkit-scrollbar-track{background:var(--border)}.ntm-roles-table__row{align-items:center;display:flex}.ntm-roles-table__row .ntm-roles-table__cell{border-top:thin solid var(--border);overflow:hidden;position:relative}.ntm-roles-table__row--highlighted+.ntm-roles-table__row .ntm-roles-table__cell{border-top:none}.ntm-roles-table__row .ntm-roles-table__cell p{min-width:340px;opacity:0;width:340px}.ntm-roles-table__row.ntm-roles-table__row--highlighted .ntm-roles-table__cell{background-color:var(--muted);border-bottom:thin solid var(--border)}.ntm-roles-table-sidebar__drop-down-button{color:var(--muted-foreground);cursor:pointer}.ntm-roles-modal__body>*+*{margin-top:1rem}.ntm-roles-modal__footer{display:flex;gap:.5rem}.ntm-roles-help-url-wrapper{align-items:center;display:flex;justify-content:center;padding:1rem 0;width:100%}.ntm-roles-table-sidebar__list-item-spacing-handler>.ntm-roles-table-sidebar__list-item .neeto-ui-text-body2{font-size:.9375rem;font-weight:500}.ntm-roles-table-sidebar__list-item-spacing-handler>.ntm-roles-table-sidebar__list-item:after,.ntm-roles-table-sidebar__list-item-spacing-handler>.ntm-roles-table-sidebar__list-item:before{display:none}.ntm-roles-table-sidebar__list-item-spacing-handler .ntm-roles-table-sidebar__list-item{align-items:center;flex-direction:row;gap:.25rem}.ntm-roles-table-sidebar__sub-blocks{position:relative}.ntm-roles-table-sidebar__sub-blocks:before{background-color:var(--border);content:\"\";height:calc(100% - 1.5rem);inset-inline-start:.375rem;position:absolute;top:0;width:.0625rem}.ntm-roles-table-sidebar__sub-blocks:empty{display:none}@media screen and (max-width:1024px){.ntm-roles-table__wrapper{--neeto-molecules-main-header-with-breadcrumbs-height:216px}.ntm-roles-table__sidebar{--ntm-roles-sidebar-width:260px;height:100%}}@media screen and (max-width:768px){.ntm-roles-table__wrapper{--neeto-molecules-main-header-with-breadcrumbs-height:186px;overflow:hidden;padding:0 1.25rem}.ntm-roles-table__container{height:auto;overflow-y:auto}.ntm-roles-table__sidebar{height:100%}.ntm-roles-table__columns,.ntm-roles-table__header{overflow:visible;overflow:initial}}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwcC9qYXZhc2NyaXB0L3NyYy9jb21wb25lbnRzL3YyL3N0eWxlcy9yb290LmNzcyIsImFwcC9qYXZhc2NyaXB0L3NyYy9jb21wb25lbnRzL3YyL3N0eWxlcy9iYXNlLmNzcyIsImFwcC9qYXZhc2NyaXB0L3NyYy9jb21wb25lbnRzL3YyL3N0eWxlcy9lbXB0eS1zdGF0ZS5jc3MiLCJhcHAvamF2YXNjcmlwdC9zcmMvY29tcG9uZW50cy92Mi9zdHlsZXMvcm9sZXMtcGVybWlzc2lvbnMuY3NzIiwiYXBwL2phdmFzY3JpcHQvc3JjL2NvbXBvbmVudHMvdjIvc3R5bGVzL3JvbGVzLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUNFLDBDQUEyQyxDQUMzQyxrQ0FBbUMsQ0FDbkMsK0JBQWdDLENBQ2hDLG9DQUNGLENDTEEsc0JBRUUsY0FBZSxDQURmLFVBRUYsQ0FFQSxzQkFLRSxlQUFnQixDQUZoQixvQkFBdUIsQ0FHdkIsZUFBZ0IsQ0FMaEIsaUJBQWtCLENBQ2xCLEtBQVEsQ0FLUixpQkFBa0IsQ0FIbEIsYUFJRixDQ2JBLGlCQUlFLGtCQUFtQixDQURuQixZQUFhLENBRGIsV0FBWSxDQUdaLHNCQUF1QixDQUp2QixVQUtGLENDTkEsc0JBRUUsb0JBQXFCLENBRHJCLFVBRUYsQ0FFQSxrQ0FDRSxlQUNGLENBRUEsMEJBQ0UsaUJBQ0YsQ0FFQSx3QkFDRSxZQUFhLENBQ2IsU0FDRixDQUVBLCtCQUNFLGlCQUNGLENBRUEsNEJBQ0Usa0NBQW1DLENBRW5DLFlBQWEsQ0FDYixxQkFBc0IsQ0FDdEIsVUFBWSxDQUNaLGVBQWlCLENBSmpCLGlCQUtGLENBRUEsa0NBQ0UsOEJBQStCLENBQy9CLFVBQVcsQ0FDWCxVQUFXLENBQ1gsNEJBQThCLENBQzlCLGlCQUFrQixDQUNsQixXQUFhLENBQ2IsYUFDRixDQUVBLHlDQUNFLFdBQ0YsQ0FFQSxzQ0FDRSxlQUNGLENBRUEsa0NBQ0UsaUJBQ0YsQ0FFQSx5Q0FDRSw4QkFBK0IsQ0FFL0IsVUFBVyxDQUNYLDJCQUE2QixDQUM3Qix3QkFBMEIsQ0FDMUIsaUJBQWtCLENBSmxCLEtBQU0sQ0FLTixjQUNGLENBRUEsd0NBQ0UsWUFDRixDQUVBLG9DQUdFLDhCQUErQixDQUQvQixxQkFBc0MsQ0FBdEMsbUNBQXNDLENBRHRDLHVCQUF5QixDQUd6QixrQkFDRixDQUVBLDRDQUdFLG1FQUFzRSxDQUZ0RSwyQkFBNEIsQ0FDNUIsZ0NBRUYsQ0FFQSx3RUFDRSw0QkFDRixDQUVBLHNFQUNFLFlBQ0YsQ0FFQSxzQ0FFRSxNQUVFLGFBQ0YsQ0FFQSxJQUNFLG9CQUFxQixDQUNyQixlQUNGLENBQ0YsQ0FFQSx5Q0FDRSx5REFDRixDQ2xHQSwwQkFFRSxnQkFBaUIsQ0FEakIsVUFFRixDQUVBLDRCQUtFLDhCQUErQixDQUQvQixtQkFBdUMsQ0FBdkMsb0NBQXVDLENBSHZDLFlBQWEsQ0FDYiwwRkFBMkYsQ0FDM0YsZUFHRixDQUVBLDhCQUNFLGtCQUNGLENBRUEsMEJBRUUsZUFBeUMsQ0FBekMsd0NBQXlDLENBRHpDLFdBQXFDLENBQXJDLG9DQUVGLENBRUEsaUNBS0UsNkJBQThCLENBRDlCLHNDQUF1QyxDQUR2QyxxQ0FBc0MsQ0FEdEMsV0FBNEMsQ0FBNUMsMkNBQTRDLENBRDVDLGtCQUtGLENBRUEsK0JBSUUscUNBQXNDLENBRHRDLGlHQUFrSSxDQUFsSSxpSUFBa0ksQ0FEbEksaUJBQWtCLENBRGxCLGVBQWdCLENBSWhCLG9CQUNGLENBRUEsa0RBRUUsUUFBVyxDQURYLE9BRUYsQ0FFQSxvQ0FDRSxZQUFhLENBQ2IscUJBQXNCLENBQ3RCLGVBQThDLENBQTlDLDZDQUE4QyxDQUc5Qyx3QkFBeUIsQ0FGekIsaUJBQWtCLENBQ2xCLGtCQUVGLENBRUEsMENBQ0UsOEJBQStCLENBQy9CLFVBQVcsQ0FDWCxlQUFpQixDQUNqQiw0QkFBNkIsQ0FDN0IsaUJBQWtCLENBQ2xCLGFBQWMsQ0FDZCxhQUNGLENBRUEsb0ZBR0Usa0JBQW1CLENBQ25CLDZCQUE4QixDQUk5QixzQ0FBdUMsQ0FEdkMsbUNBQW9DLENBTnBDLGtCQUFtQixDQUNuQiw2QkFBOEIsQ0FHOUIsZUFBOEMsQ0FBOUMsNkNBQThDLENBQzlDLHVCQUdGLENBRUEsMEJBQ0UsV0FBWSxDQUNaLGVBQ0YsQ0FFQSx1QkFRRSxrQkFBbUIsQ0FDbkIsMENBQTJDLENBSDNDLFlBQWEsQ0FIYixXQUEwQyxDQUExQyx5Q0FBMEMsQ0FJMUMsc0JBQXVCLENBSHZCLGVBQThDLENBQTlDLDZDQUE4QyxDQUY5QyxlQUFnQixDQUdoQixvQkFBdUIsQ0FKdkIsVUFTRixDQUVBLGtDQUNFLHNCQUNGLENBRUEsd0NBRUUsV0FBWSxDQUVaLFdBQVksQ0FIWixpQkFBa0IsQ0FFbEIsVUFBVyxDQUVYLFVBQ0YsQ0FFQSxnQ0FDRSxVQUNGLENBRUEseUJBRUUsa0JBQW1CLENBRG5CLFlBQWEsQ0FFYixlQUNGLENBRUEsZ0RBR0UsNkJBQThCLENBRDlCLHNDQUF1QyxDQUR2QyxXQUE0QyxDQUE1QywyQ0FHRixDQUVBLHdDQUdFLGtCQUFtQixDQUZuQixZQUFhLENBQ2IsNkJBQThCLENBRzlCLGVBQWdCLENBRGhCLFVBRUYsQ0FFQSxrQ0FFRSxhQUFjLENBRGQsZUFFRixDQUVBLG1DQUNFLGVBQWdCLENBR2hCLGlCQUFrQixDQUZsQixzQkFBdUIsQ0FDdkIsa0JBQW1CLENBRW5CLFVBQ0YsQ0FFQSx1QkFFRSxpR0FBa0ksQ0FBbEksaUlBQWtJLENBQ2xJLGVBQWdCLENBQ2hCLG9CQUFxQixDQUhyQixVQUlGLENBRUEsMENBRUUsUUFBVyxDQURYLE9BRUYsQ0FFQSxnREFDRSx3QkFBeUIsQ0FDekIsc0JBQ0YsQ0FFQSxzREFDRSxzQkFDRixDQUVBLGdEQUNFLHdCQUNGLENBR0Esc0JBRUUsa0JBQW1CLENBRG5CLFlBRUYsQ0FFQSw2Q0FHRSxtQ0FBb0MsQ0FGcEMsZUFBZ0IsQ0FDaEIsaUJBRUYsQ0FFQSxnRkFDRSxlQUNGLENBRUEsK0NBR0UsZUFBZ0IsQ0FGaEIsU0FBVSxDQUNWLFdBRUYsQ0FFQSwrRUFDRSw2QkFBOEIsQ0FDOUIsc0NBQ0YsQ0FFQSwyQ0FDRSw2QkFBOEIsQ0FDOUIsY0FDRixDQUVBLDJCQUNFLGVBQ0YsQ0FFQSx5QkFDRSxZQUFhLENBQ2IsU0FDRixDQUVBLDRCQUdFLGtCQUFtQixDQUZuQixZQUFhLENBR2Isc0JBQXVCLENBQ3ZCLGNBQWUsQ0FIZixVQUlGLENBRUEsNkdBQ0Usa0JBQW9CLENBQ3BCLGVBQ0YsQ0FNQSw2TEFDRSxZQUNGLENBRUEsd0ZBRUUsa0JBQW1CLENBRG5CLGtCQUFtQixDQUVuQixVQUNGLENBRUEscUNBQ0UsaUJBQ0YsQ0FFQSw0Q0FDRSw4QkFBK0IsQ0FFL0IsVUFBVyxDQUNYLDBCQUEyQixDQUMzQiwwQkFBNEIsQ0FDNUIsaUJBQWtCLENBSmxCLEtBQU0sQ0FLTixjQUNGLENBRUEsMkNBQ0UsWUFDRixDQUdBLHFDQUNFLDBCQUNFLDJEQUNGLENBRUEsMEJBQ0UsK0JBQWdDLENBQ2hDLFdBQ0YsQ0FDRixDQUVBLG9DQUNFLDBCQUNFLDJEQUE0RCxDQUU1RCxlQUFnQixDQURoQixpQkFFRixDQUVBLDRCQUVFLFdBQVksQ0FEWixlQUVGLENBRUEsMEJBQ0UsV0FDRixDQU1BLG1EQUNFLGdCQUFlLENBQWYsZ0JBQ0YsQ0FDRiIsInNvdXJjZXNDb250ZW50IjpbIjpyb290IHtcbiAgLS1udG0tcm9sZXMtdGFibGUtZGVmYXVsdC1zY3JvbGw6IDAuOTM3NXJlbTtcbiAgLS1udG0tcm9sZXMtdGFibGUtY2VsbC1oZWlnaHQ6IDNyZW07XG4gIC0tbnRtLXJvbGVzLXNpZGViYXItd2lkdGg6IDQ4MHB4O1xuICAtLW50bS1yb2xlcy10YWJsZS1oZWFkZXItaGVpZ2h0OiAzcmVtO1xufVxuIiwiLm50bS1zY3JvbGxiYXJfX2lubmVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTIuNXJlbTtcbn1cblxuLm50bS1zY3JvbGxiYXJfX291dGVyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDBweDtcbiAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwcHg7XG4gIHdpZHRoOiAxMi41cmVtO1xuICBoZWlnaHQ6IDkuMzc1cmVtO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG59XG4iLCIubnRtLWVtcHR5LXN0YXRlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG4iLCIubnRtLXJvbGVzLXBhbmVfX2JvZHkge1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luLWJvdHRvbTogMS41cmVtO1xufVxuXG4ubnRtLXJvbGVzLXBhbmVfX2JvZHktd3JhcHBlcj4qKyoge1xuICBtYXJnaW4tdG9wOiAxcmVtO1xufVxuXG4ubnRtLXJvbGVzLXBhbmVfX2JvZHk+KisqIHtcbiAgbWFyZ2luLXRvcDogMS41cmVtO1xufVxuXG4ubnRtLXJvbGVzLXBhbmVfX2Zvb3RlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGdhcDogMC41cmVtO1xufVxuXG4ubnRtLXJvbGVzLXBlcm1pc3Npb25fX2hlYWRpbmcge1xuICBwYWRkaW5nLXRvcDogMC41cmVtO1xufVxuXG4ubnRtLXJvbGVzLXBlcm1pc3Npb25fX2NhcmQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iYWNrZ3JvdW5kKTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IDAuNzVyZW07XG4gIHBhZGRpbmc6IDAuNHJlbSAwO1xufVxuXG4ubnRtLXJvbGVzLXBlcm1pc3Npb25fX2NhcmQ6OmFmdGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYm9yZGVyKTtcbiAgY29udGVudDogXCJcIjtcbiAgaGVpZ2h0OiAxcHg7XG4gIGluc2V0LWlubGluZS1zdGFydDogLTAuOTM3NXJlbTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDAuODc1cmVtO1xuICB3aWR0aDogMC42MjVyZW07XG59XG5cbi5udG0tcm9sZXMtcGVybWlzc2lvbl9fY2FyZC0tZGVzY3JpcHRpb24ge1xuICBmbGV4LWdyb3c6IDE7XG59XG5cbi5udG0tcm9sZXMtcGVybWlzc2lvbl9fY2FyZC0tY2hlY2tib3gge1xuICBwYWRkaW5nOiAwIDAuNXJlbTtcbn1cblxuLm50bS1yb2xlcy1wZXJtaXNzaW9uX19zdWItYmxvY2tzIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4ubnRtLXJvbGVzLXBlcm1pc3Npb25fX3N1Yi1ibG9ja3M6OmJlZm9yZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJvcmRlcik7XG4gIHRvcDogMDtcbiAgY29udGVudDogXCJcIjtcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAwLjg3NXJlbSk7XG4gIGluc2V0LWlubGluZS1zdGFydDogMC41cmVtO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiAwLjA2MjVyZW07XG59XG5cbi5udG0tcm9sZXMtcGVybWlzc2lvbl9fc3ViLWJsb2NrczplbXB0eSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5udG0tcm9sZXMtcGVybWlzc2lvbi1jYXRlZ29yeS1jYXJkIHtcbiAgcGFkZGluZzogMC42MjVyZW0gMS4yNXJlbTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLCAwLjM3NXJlbSk7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7XG4gIHRyYW5zaXRpb246IGFsbCAwLjNzO1xufVxuXG4ubnRtLXJvbGVzLXBlcm1pc3Npb24tY2F0ZWdvcnktY2FyZC0tYWN0aXZlIHtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wcmltYXJ5KTtcbiAgb3V0bGluZTogMXB4IHNvbGlkIHZhcigtLXByaW1hcnkpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBjb2xvci1taXgoaW4gb2tsY2gsIHZhcigtLXByaW1hcnkpIDEwJSwgdHJhbnNwYXJlbnQpO1xufVxuXG4ubnRtLXJvbGVzLXBlcm1pc3Npb24tY2F0ZWdvcnktY2FyZC0tYWN0aXZlIC5udG0tcm9sZXMtcGVybWlzc2lvbl9fY2FyZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG4ubnRtLXJvbGVzLXBlcm1pc3Npb24tY2F0ZWdvcnktY2FyZD4ubnRtLXJvbGVzLXBlcm1pc3Npb25fX2NhcmQ6OmFmdGVyIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuQGtleWZyYW1lcyBudG0tcm9sZXMtcGVybWlzc2lvbi1ibGluayB7XG5cbiAgMCUsXG4gIDEwMCUge1xuICAgIGNvbG9yOiBpbmhlcml0O1xuICB9XG5cbiAgNTAlIHtcbiAgICBjb2xvcjogdmFyKC0tcHJpbWFyeSk7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIH1cbn1cblxuLm50bS1yb2xlcy1wZXJtaXNzaW9uX19jYXJkLS1ibGluayBsYWJlbCB7XG4gIGFuaW1hdGlvbjogbnRtLXJvbGVzLXBlcm1pc3Npb24tYmxpbmsgNjAwbXMgZWFzZS1pbi1vdXQgMHMgMztcbn1cbiIsIkBpbXBvcnQgJy4vcm9vdC5jc3MnO1xuQGltcG9ydCAnLi9iYXNlLmNzcyc7XG5AaW1wb3J0ICcuL2VtcHR5LXN0YXRlLmNzcyc7XG5AaW1wb3J0ICcuL3JvbGVzLXBlcm1pc3Npb25zLmNzcyc7XG5cbi5udG0tcm9sZXMtdGFibGVfX3dyYXBwZXIge1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogMCAyLjVyZW07XG59XG5cbi5udG0tcm9sZXMtdGFibGVfX2NvbnRhaW5lciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSB2YXIoLS1uZWV0by1tb2xlY3VsZXMtbWFpbi1oZWFkZXItd2l0aC1icmVhZGNydW1icy1oZWlnaHQpIC0gMjhweCk7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZywgMC41cmVtKTtcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTtcbn1cblxuLm50bS1yb2xlcy10YWJsZV9fY29udGFpbmVyID4gKiB7XG4gIG1heC1oZWlnaHQ6IGluaGVyaXQ7XG59XG5cbi5udG0tcm9sZXMtdGFibGVfX3NpZGViYXIge1xuICB3aWR0aDogdmFyKC0tbnRtLXJvbGVzLXNpZGViYXItd2lkdGgpO1xuICBtaW4td2lkdGg6IHZhcigtLW50bS1yb2xlcy1zaWRlYmFyLXdpZHRoKTtcbn1cblxuLm50bS1yb2xlcy10YWJsZS1zaWRlYmFyX19zZWFyY2gge1xuICBwYWRkaW5nOiAwLjVyZW0gMXJlbTtcbiAgaGVpZ2h0OiB2YXIoLS1udG0tcm9sZXMtdGFibGUtaGVhZGVyLWhlaWdodCk7XG4gIGJvcmRlci1yaWdodDogdGhpbiBzb2xpZCB2YXIoLS1ib3JkZXIpO1xuICBib3JkZXItYm90dG9tOiB0aGluIHNvbGlkIHZhcigtLWJvcmRlcik7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW11dGVkKTtcbn1cblxuLm50bS1yb2xlcy10YWJsZS1zaWRlYmFyX19saXN0IHtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICBtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gdmFyKC0tbmVldG8tbW9sZWN1bGVzLW1haW4taGVhZGVyLXdpdGgtYnJlYWRjcnVtYnMtaGVpZ2h0KSAtIHZhcigtLW50bS1yb2xlcy10YWJsZS1oZWFkZXItaGVpZ2h0KSAtIDMwcHgpO1xuICBib3JkZXItcmlnaHQ6IHRoaW4gc29saWQgdmFyKC0tYm9yZGVyKTtcbiAgc2Nyb2xsYmFyLXdpZHRoOiBub25lO1xufVxuXG4ubnRtLXJvbGVzLXRhYmxlLXNpZGViYXJfX2xpc3Q6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgd2lkdGg6IDBweDtcbiAgaGVpZ2h0OiAwcHg7XG59XG5cbi5udG0tcm9sZXMtdGFibGUtc2lkZWJhcl9fbGlzdC1pdGVtIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgbWluLWhlaWdodDogdmFyKC0tbnRtLXJvbGVzLXRhYmxlLWNlbGwtaGVpZ2h0KTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkO1xufVxuXG4ubnRtLXJvbGVzLXRhYmxlLXNpZGViYXJfX2xpc3QtaXRlbTo6YWZ0ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ib3JkZXIpO1xuICBjb250ZW50OiBcIlwiO1xuICBoZWlnaHQ6IDAuMDYyNXJlbTtcbiAgaW5zZXQtaW5saW5lLXN0YXJ0OiAtMS4xMjVyZW07XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAxLjQzNzVyZW07XG4gIHdpZHRoOiAwLjg3NXJlbTtcbn1cblxuLm50bS1yb2xlcy10YWJsZS1zaWRlYmFyX19saXN0LWl0ZW0ubnRtLXJvbGVzLXRhYmxlLXNpZGViYXJfX2xpc3QtaXRlbS0taGlnaGxpZ2h0ZWQge1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW11dGVkKTtcbiAgbWluLWhlaWdodDogdmFyKC0tbnRtLXJvbGVzLXRhYmxlLWNlbGwtaGVpZ2h0KTtcbiAgcGFkZGluZzogMC42ODc1cmVtIDEuNXJlbTtcbiAgYm9yZGVyLXRvcDogdGhpbiBzb2xpZCB2YXIoLS1ib3JkZXIpO1xuICBib3JkZXItYm90dG9tOiB0aGluIHNvbGlkIHZhcigtLWJvcmRlcik7XG59XG5cbi5udG0tcm9sZXMtdGFibGVfX2NvbHVtbnMge1xuICBmbGV4LWdyb3c6IDE7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5udG0tcm9sZXMtdGFibGVfX2NlbGwge1xuICB3aWR0aDogMTAwJTtcbiAgbWluLXdpZHRoOiAyMDBweDtcbiAgaGVpZ2h0OiB2YXIoLS1udG0tcm9sZXMtdGFibGUtY2VsbC1oZWlnaHQpO1xuICBtaW4taGVpZ2h0OiB2YXIoLS1udG0tcm9sZXMtdGFibGUtY2VsbC1oZWlnaHQpO1xuICBwYWRkaW5nOiAwLjc1cmVtIDAuNXJlbTtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJvcmRlci1pbmxpbmUtZW5kOiB0aGluIHNvbGlkIHZhcigtLWJvcmRlcik7XG59XG5cbi5udG0tcm9sZXMtdGFibGVfX2NlbGw6bGFzdC1jaGlsZCB7XG4gIGJvcmRlci1pbmxpbmUtZW5kOiBub25lO1xufVxuXG4ubnRtLXJvbGVzLXRhYmxlLWNlbGxfX2NoZWNrYm94LXdyYXBwZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGhlaWdodDogMXJlbTtcbiAgd2lkdGg6IDFyZW07XG4gIG1hcmdpbjogYXV0bztcbiAgei1pbmRleDogMTA7XG59XG5cbi5udG0tcm9sZXMtdGFibGUtY2VsbF9fY2hlY2tib3gge1xuICB6LWluZGV4OiAxMDtcbn1cblxuLm50bS1yb2xlcy10YWJsZV9faGVhZGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgb3ZlcmZsb3cteDogYXV0bztcbn1cblxuLm50bS1yb2xlcy10YWJsZV9faGVhZGVyIC5udG0tcm9sZXMtdGFibGVfX2NlbGwge1xuICBoZWlnaHQ6IHZhcigtLW50bS1yb2xlcy10YWJsZS1oZWFkZXItaGVpZ2h0KTtcbiAgYm9yZGVyLWJvdHRvbTogdGhpbiBzb2xpZCB2YXIoLS1ib3JkZXIpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tdXRlZCk7XG59XG5cbi5udG0tcm9sZXMtdGFibGUtaGVhZGVyLWNlbGxfX2NvbnRhaW5lciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgd2lkdGg6IDEwMCU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5udG0tcm9sZXMtdGFibGUtaGVhZGVyX19kcm9wZG93biB7XG4gIG1hcmdpbjogMC4xODc1cmVtO1xuICBmbGV4LXNocmluazogMDtcbn1cblxuLm50bS1yb2xlcy10YWJsZS1oZWFkZXJfX3JvbGUtbmFtZSB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4ubnRtLXJvbGVzLXRhYmxlX19yb3dzIHtcbiAgd2lkdGg6IDEwMCU7XG4gIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSB2YXIoLS1uZWV0by1tb2xlY3VsZXMtbWFpbi1oZWFkZXItd2l0aC1icmVhZGNydW1icy1oZWlnaHQpIC0gdmFyKC0tbnRtLXJvbGVzLXRhYmxlLWhlYWRlci1oZWlnaHQpIC0gMzBweCk7XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIHNjcm9sbGJhci13aWR0aDogbm9uZTtcbn1cblxuLm50bS1yb2xlcy10YWJsZV9fcm93czo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICB3aWR0aDogMHB4O1xuICBoZWlnaHQ6IDBweDtcbn1cblxuLm50bS1yb2xlcy10YWJsZV9fcm93czo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1ib3JkZXIpO1xuICBib3JkZXItcmFkaXVzOiAzLjEyNXJlbTtcbn1cblxuLm50bS1yb2xlcy10YWJsZV9fcm93czo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIge1xuICBib3JkZXItcmFkaXVzOiAzLjEyNXJlbTtcbn1cblxuLm50bS1yb2xlcy10YWJsZV9fcm93czo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1ib3JkZXIpO1xufVxuXG5cbi5udG0tcm9sZXMtdGFibGVfX3JvdyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5udG0tcm9sZXMtdGFibGVfX3JvdyAubnRtLXJvbGVzLXRhYmxlX19jZWxsIHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBib3JkZXItdG9wOiB0aGluIHNvbGlkIHZhcigtLWJvcmRlcik7XG59XG5cbi5udG0tcm9sZXMtdGFibGVfX3Jvdy0taGlnaGxpZ2h0ZWQgKyAubnRtLXJvbGVzLXRhYmxlX19yb3cgLm50bS1yb2xlcy10YWJsZV9fY2VsbCB7XG4gIGJvcmRlci10b3A6IG5vbmU7XG59XG5cbi5udG0tcm9sZXMtdGFibGVfX3JvdyAubnRtLXJvbGVzLXRhYmxlX19jZWxsIHAge1xuICBvcGFjaXR5OiAwO1xuICB3aWR0aDogMzQwcHg7XG4gIG1pbi13aWR0aDogMzQwcHg7XG59XG5cbi5udG0tcm9sZXMtdGFibGVfX3Jvdy5udG0tcm9sZXMtdGFibGVfX3Jvdy0taGlnaGxpZ2h0ZWQgLm50bS1yb2xlcy10YWJsZV9fY2VsbCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW11dGVkKTtcbiAgYm9yZGVyLWJvdHRvbTogdGhpbiBzb2xpZCB2YXIoLS1ib3JkZXIpO1xufVxuXG4ubnRtLXJvbGVzLXRhYmxlLXNpZGViYXJfX2Ryb3AtZG93bi1idXR0b24ge1xuICBjb2xvcjogdmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCk7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLm50bS1yb2xlcy1tb2RhbF9fYm9keT4qKyoge1xuICBtYXJnaW4tdG9wOiAxcmVtO1xufVxuXG4ubnRtLXJvbGVzLW1vZGFsX19mb290ZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6IDAuNXJlbTtcbn1cblxuLm50bS1yb2xlcy1oZWxwLXVybC13cmFwcGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgd2lkdGg6IDEwMCU7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBwYWRkaW5nOiAxcmVtIDA7XG59XG5cbi5udG0tcm9sZXMtdGFibGUtc2lkZWJhcl9fbGlzdC1pdGVtLXNwYWNpbmctaGFuZGxlcj4ubnRtLXJvbGVzLXRhYmxlLXNpZGViYXJfX2xpc3QtaXRlbSAubmVldG8tdWktdGV4dC1ib2R5MiB7XG4gIGZvbnQtc2l6ZTogMC45Mzc1cmVtO1xuICBmb250LXdlaWdodDogNTAwO1xufVxuXG4ubnRtLXJvbGVzLXRhYmxlLXNpZGViYXJfX2xpc3QtaXRlbS1zcGFjaW5nLWhhbmRsZXI+Lm50bS1yb2xlcy10YWJsZS1zaWRlYmFyX19saXN0LWl0ZW06OmJlZm9yZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5udG0tcm9sZXMtdGFibGUtc2lkZWJhcl9fbGlzdC1pdGVtLXNwYWNpbmctaGFuZGxlcj4ubnRtLXJvbGVzLXRhYmxlLXNpZGViYXJfX2xpc3QtaXRlbTo6YWZ0ZXIge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4ubnRtLXJvbGVzLXRhYmxlLXNpZGViYXJfX2xpc3QtaXRlbS1zcGFjaW5nLWhhbmRsZXIgLm50bS1yb2xlcy10YWJsZS1zaWRlYmFyX19saXN0LWl0ZW0ge1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDAuMjVyZW07XG59XG5cbi5udG0tcm9sZXMtdGFibGUtc2lkZWJhcl9fc3ViLWJsb2NrcyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLm50bS1yb2xlcy10YWJsZS1zaWRlYmFyX19zdWItYmxvY2tzOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ib3JkZXIpO1xuICB0b3A6IDA7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIGhlaWdodDogY2FsYygxMDAlIC0gMS41cmVtKTtcbiAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwLjM3NXJlbTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMC4wNjI1cmVtO1xufVxuXG4ubnRtLXJvbGVzLXRhYmxlLXNpZGViYXJfX3N1Yi1ibG9ja3M6ZW1wdHkge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG5cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDEwMjRweCkge1xuICAubnRtLXJvbGVzLXRhYmxlX193cmFwcGVyIHtcbiAgICAtLW5lZXRvLW1vbGVjdWxlcy1tYWluLWhlYWRlci13aXRoLWJyZWFkY3J1bWJzLWhlaWdodDogMjE2cHg7XG4gIH1cblxuICAubnRtLXJvbGVzLXRhYmxlX19zaWRlYmFyIHtcbiAgICAtLW50bS1yb2xlcy1zaWRlYmFyLXdpZHRoOiAyNjBweDtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gIH1cbn1cblxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgLm50bS1yb2xlcy10YWJsZV9fd3JhcHBlciB7XG4gICAgLS1uZWV0by1tb2xlY3VsZXMtbWFpbi1oZWFkZXItd2l0aC1icmVhZGNydW1icy1oZWlnaHQ6IDE4NnB4O1xuICAgIHBhZGRpbmc6IDAgMS4yNXJlbTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICB9XG5cbiAgLm50bS1yb2xlcy10YWJsZV9fY29udGFpbmVyIHtcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgIGhlaWdodDogYXV0bztcbiAgfVxuXG4gIC5udG0tcm9sZXMtdGFibGVfX3NpZGViYXIge1xuICAgIGhlaWdodDogMTAwJTtcbiAgfVxuXG4gIC5udG0tcm9sZXMtdGFibGVfX2NvbHVtbnMge1xuICAgIG92ZXJmbG93OiB1bnNldDtcbiAgfVxuXG4gIC5udG0tcm9sZXMtdGFibGVfX2hlYWRlciB7XG4gICAgb3ZlcmZsb3c6IHVuc2V0O1xuICB9XG59XG4iXX0= */";
|
|
1149
|
+
n(css,{});
|
|
1150
|
+
|
|
1151
|
+
var Roles = function Roles(_ref) {
|
|
1152
|
+
var config = _ref.config;
|
|
1153
|
+
var isViewPermissionGranted = config.permissions.view;
|
|
1154
|
+
var isUpdatePermissionGranted = config.permissions.update;
|
|
1155
|
+
var _useState = useState([]),
|
|
1156
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
1157
|
+
modifiedRoles = _useState2[0],
|
|
1158
|
+
setModifiedRoles = _useState2[1];
|
|
1159
|
+
var _useState3 = useState(false),
|
|
1160
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
1161
|
+
isNewRolePaneOpen = _useState4[0],
|
|
1162
|
+
setIsNewRolePaneOpen = _useState4[1];
|
|
1163
|
+
var _useFetchRoles = useFetchRoles({
|
|
1164
|
+
enabled: isViewPermissionGranted
|
|
1165
|
+
}),
|
|
1166
|
+
_useFetchRoles$data = _useFetchRoles.data,
|
|
1167
|
+
roles = _useFetchRoles$data === void 0 ? [] : _useFetchRoles$data,
|
|
1168
|
+
isRolesLoading = _useFetchRoles.isLoading,
|
|
1169
|
+
status = _useFetchRoles.status;
|
|
1170
|
+
var _useQueryParams = useQueryParams(),
|
|
1171
|
+
_useQueryParams$searc = _useQueryParams.searchTerm,
|
|
1172
|
+
searchTerm = _useQueryParams$searc === void 0 ? "" : _useQueryParams$searc;
|
|
1173
|
+
var _useFetchPermissions = useFetchPermissions({
|
|
1174
|
+
enabled: isViewPermissionGranted
|
|
1175
|
+
}),
|
|
1176
|
+
permissionData = _useFetchPermissions.data,
|
|
1177
|
+
isPermissionsLoading = _useFetchPermissions.isLoading;
|
|
1178
|
+
var _useBulkUpdateRoles = useBulkUpdateRoles({
|
|
1179
|
+
enabled: isUpdatePermissionGranted
|
|
1180
|
+
}),
|
|
1181
|
+
bulkUpdate = _useBulkUpdateRoles.mutate;
|
|
1182
|
+
var permissions = sortPermissionsBySequence(permissionData);
|
|
1183
|
+
var permissionGroups = getPermissionGroups(permissions);
|
|
1184
|
+
var filteredRoles = filter(function (_ref2) {
|
|
1185
|
+
var name = _ref2.name;
|
|
1186
|
+
return includes(searchTerm.toLowerCase().trim(), name.toLowerCase().trim());
|
|
1187
|
+
}, isNotEmpty(modifiedRoles) ? modifiedRoles : roles);
|
|
1188
|
+
var handleSubmit = function handleSubmit() {
|
|
1189
|
+
var updatedRoles = getModifiedPermissions(roles, modifiedRoles);
|
|
1190
|
+
bulkUpdate({
|
|
1191
|
+
organizationRoles: {
|
|
1192
|
+
updatedRoles: updatedRoles
|
|
1193
|
+
}
|
|
1194
|
+
});
|
|
1195
|
+
};
|
|
1196
|
+
var handleReset = function handleReset() {
|
|
1197
|
+
return setModifiedRoles(roles);
|
|
1198
|
+
};
|
|
1199
|
+
useEffect(function () {
|
|
1200
|
+
if (status !== "success") return;
|
|
1201
|
+
setModifiedRoles(roles);
|
|
1202
|
+
}, [roles, status]);
|
|
1203
|
+
if (isRolesLoading || isPermissionsLoading) {
|
|
1204
|
+
return /*#__PURE__*/jsx("div", {
|
|
1205
|
+
className: "flex h-full min-h-screen w-full items-center justify-center",
|
|
1206
|
+
children: /*#__PURE__*/jsx(Spinner, {})
|
|
1207
|
+
});
|
|
1208
|
+
}
|
|
1209
|
+
return /*#__PURE__*/jsxs(Fragment, {
|
|
1210
|
+
children: [/*#__PURE__*/jsx(distExports.ScrollSync, {
|
|
1211
|
+
children: /*#__PURE__*/jsxs(Container, {
|
|
1212
|
+
isHeaderFixed: true,
|
|
1213
|
+
children: [/*#__PURE__*/jsx(Header, {
|
|
1214
|
+
config: config,
|
|
1215
|
+
handleReset: handleReset,
|
|
1216
|
+
handleSubmit: handleSubmit,
|
|
1217
|
+
roles: roles,
|
|
1218
|
+
setIsNewRolePaneOpen: setIsNewRolePaneOpen
|
|
1219
|
+
}), /*#__PURE__*/jsx(Table, {
|
|
1220
|
+
config: config,
|
|
1221
|
+
filteredRoles: filteredRoles,
|
|
1222
|
+
permissionGroups: permissionGroups,
|
|
1223
|
+
permissions: permissions,
|
|
1224
|
+
roles: roles,
|
|
1225
|
+
setIsNewRolePaneOpen: setIsNewRolePaneOpen,
|
|
1226
|
+
setModifiedRoles: setModifiedRoles
|
|
1227
|
+
})]
|
|
1228
|
+
})
|
|
1229
|
+
}), /*#__PURE__*/jsx(ManageRoles, {
|
|
1230
|
+
config: config,
|
|
1231
|
+
permissions: permissions,
|
|
1232
|
+
isOpen: isNewRolePaneOpen,
|
|
1233
|
+
onClose: function onClose() {
|
|
1234
|
+
return setIsNewRolePaneOpen(false);
|
|
1235
|
+
}
|
|
1236
|
+
})]
|
|
1237
|
+
});
|
|
1238
|
+
};
|
|
1239
|
+
var index = withTitle(withReactQuery(Roles), i18next.t("neetoTeamMembers.common.role", PLURAL));
|
|
1240
|
+
|
|
1241
|
+
export { index as default };
|
|
1242
|
+
//# sourceMappingURL=Roles.js.map
|