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