@bigbinary/neeto-team-members-frontend 5.0.62 → 5.0.64

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 (72) hide show
  1. package/dist/.ready +1 -1
  2. package/dist/ManageMember.js +5 -11
  3. package/dist/ManageMember.js.map +1 -1
  4. package/dist/{Permissions-LWRAefeb.js → Permissions-BVkx_S_F.js} +2 -2
  5. package/dist/Permissions-BVkx_S_F.js.map +1 -0
  6. package/dist/{Permissions-Bz0SmJzH.js → Permissions-DIdoAJlu.js} +2 -2
  7. package/dist/Permissions-DIdoAJlu.js.map +1 -0
  8. package/dist/Profile.js +4 -13
  9. package/dist/Profile.js.map +1 -1
  10. package/dist/{ProfileImage-BLnx0E90.js → ProfileImage-BjDA-txF.js} +2 -2
  11. package/dist/ProfileImage-BjDA-txF.js.map +1 -0
  12. package/dist/{ProfileImage-V240yfTY.js → ProfileImage-Ca02-i_d.js} +2 -2
  13. package/dist/ProfileImage-Ca02-i_d.js.map +1 -0
  14. package/dist/cjs/ManageMember.js +5 -11
  15. package/dist/cjs/ManageMember.js.map +1 -1
  16. package/dist/cjs/Profile.js +4 -14
  17. package/dist/cjs/Profile.js.map +1 -1
  18. package/dist/cjs/v2/Groups.js +1 -1
  19. package/dist/cjs/v2/Groups.js.map +1 -1
  20. package/dist/cjs/v2/ManageMember.js +1048 -42
  21. package/dist/cjs/v2/ManageMember.js.map +1 -1
  22. package/dist/cjs/v2/MembersDropdown.js +1 -1
  23. package/dist/cjs/v2/MembersInvite.js +1 -1
  24. package/dist/cjs/v2/MembersInvite.js.map +1 -1
  25. package/dist/cjs/v2/Permissions.js +1 -1
  26. package/dist/cjs/v2/Profile.js +5 -13
  27. package/dist/cjs/v2/Profile.js.map +1 -1
  28. package/dist/cjs/v2/Roles.js +1 -1
  29. package/dist/cjs/v2/TeamMembers.js +21 -20
  30. package/dist/cjs/v2/TeamMembers.js.map +1 -1
  31. package/dist/cjs/v2/TeamsDropdown.js +1 -1
  32. package/dist/cjs/v2/hooks.js +187 -5
  33. package/dist/cjs/v2/hooks.js.map +1 -1
  34. package/dist/cjs/v2/index.js +7 -6
  35. package/dist/cjs/v2/index.js.map +1 -1
  36. package/dist/{index-BRgcqXVL.js → index-BVrpRWeD.js} +3 -3
  37. package/dist/index-BVrpRWeD.js.map +1 -0
  38. package/dist/{index-BMb0DElQ.js → index-CVZHlIdE.js} +3 -3
  39. package/dist/index-CVZHlIdE.js.map +1 -0
  40. package/dist/utils-BFRNzhia.js +318 -0
  41. package/dist/utils-BFRNzhia.js.map +1 -0
  42. package/dist/utils-DEOuQRcK.js +300 -0
  43. package/dist/utils-DEOuQRcK.js.map +1 -0
  44. package/dist/v2/Groups.js +1 -1
  45. package/dist/v2/Groups.js.map +1 -1
  46. package/dist/v2/ManageMember.js +1041 -41
  47. package/dist/v2/ManageMember.js.map +1 -1
  48. package/dist/v2/MembersDropdown.js +1 -1
  49. package/dist/v2/MembersInvite.js +1 -1
  50. package/dist/v2/MembersInvite.js.map +1 -1
  51. package/dist/v2/Permissions.js +1 -1
  52. package/dist/v2/Profile.js +6 -14
  53. package/dist/v2/Profile.js.map +1 -1
  54. package/dist/v2/Roles.js +1 -1
  55. package/dist/v2/TeamMembers.js +5 -4
  56. package/dist/v2/TeamMembers.js.map +1 -1
  57. package/dist/v2/TeamsDropdown.js +1 -1
  58. package/dist/v2/hooks.js +184 -5
  59. package/dist/v2/hooks.js.map +1 -1
  60. package/dist/v2/index.js +6 -5
  61. package/dist/v2/index.js.map +1 -1
  62. package/package.json +5 -5
  63. package/dist/Permissions-Bz0SmJzH.js.map +0 -1
  64. package/dist/Permissions-LWRAefeb.js.map +0 -1
  65. package/dist/ProfileImage-BLnx0E90.js.map +0 -1
  66. package/dist/ProfileImage-V240yfTY.js.map +0 -1
  67. package/dist/index-BFScwOib.js +0 -1272
  68. package/dist/index-BFScwOib.js.map +0 -1
  69. package/dist/index-BMb0DElQ.js.map +0 -1
  70. package/dist/index-BRgcqXVL.js.map +0 -1
  71. package/dist/index-CBt9gCBK.js +0 -1293
  72. package/dist/index-CBt9gCBK.js.map +0 -1
@@ -1,52 +1,1052 @@
1
- import '@babel/runtime/helpers/asyncToGenerator';
2
- import '@babel/runtime/helpers/defineProperty';
3
- import '@babel/runtime/helpers/slicedToArray';
4
- import '@babel/runtime/regenerator';
5
- import 'react';
6
- import '@bigbinary/neeto-atoms';
7
- import 'classnames';
8
- import 'lucide-react';
9
- import '@bigbinary/neeto-commons-frontend/v2/initializers';
10
- import '@bigbinary/neeto-commons-frontend/v2/utils';
11
- import '@bigbinary/neeto-image-uploader-frontend/v2/hooks';
12
- import 'ramda';
13
- import 'react-i18next';
14
- import 'sonner';
15
- import '../useRolesApi-93OoRU1s.js';
16
- import '../useTeamsApi-DkgWqw-g.js';
17
- export { M as default } from '../index-BFScwOib.js';
18
- import '../RolesRadioGroup-CsTenjqQ.js';
19
- import '../ActionBlock-jgw1N-As.js';
20
- import '../Select-DZ56UG-l.js';
21
- import '@babel/runtime/helpers/objectWithoutProperties';
22
- import 'formik';
23
- import 'react/jsx-runtime';
24
- import '../index-CKQDhbTA.js';
25
- import '../ProfileImage-V240yfTY.js';
1
+ import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
2
+ import _defineProperty from '@babel/runtime/helpers/defineProperty';
3
+ import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
4
+ import _regeneratorRuntime from '@babel/runtime/regenerator';
5
+ import { useState, useEffect, useRef, useCallback } from 'react';
6
+ import { Switch, Label, cn, Checkbox, Typography, Button, Tooltip, Spinner, DropdownMenu, Alert } from '@bigbinary/neeto-atoms';
7
+ import classnames from 'classnames';
8
+ import { Mail, EllipsisVertical, Check, ArrowLeft, Info } from 'lucide-react';
9
+ import { globalProps, taxonomies } from '@bigbinary/neeto-commons-frontend/v2/initializers';
10
+ import { showThumbsUpToastr } from '@bigbinary/neeto-commons-frontend/v2/utils';
11
+ import { useProfileImageUpload } from '@bigbinary/neeto-image-uploader-frontend/v2/hooks';
12
+ import { pluck, not, isEmpty, head, isNotNil, reverse, groupBy, prop } from 'ramda';
13
+ import { useTranslation, Trans } from 'react-i18next';
14
+ import { toast } from 'sonner';
15
+ import { u as useFetchRoles, a as useFetchGlobalRoles } from '../useRolesApi-93OoRU1s.js';
16
+ import { u as useFetchMembers, c as useFetchMember, d as useCreateMember, e as useMembersCreationStatus, r as refetchMembers, f as useUpdateMember } from '../useTeamsApi-DkgWqw-g.js';
17
+ import { useField, useFormikContext } from 'formik';
18
+ import { toLabelAndValue, filterBy, findBy } from '@bigbinary/neeto-cist';
19
+ import { N as NEETO_AUTH_MANAGE_PRODUCT_URL, g as getSingleInvitationTranslationProps, a as getInviteURL, r as remainingExpiryDays, F as FEEDBACK_DURATION_MS, b as FORM_PAGES, c as FILTER_INVALID_EMAILS, C as COUNTER_PROPS, E as EMAIL_REGEX, D as DEFAULT_COMPONENT_CONFIG, M as MEMBERS_FORM_COMPONENT_MAPPER, d as renderInitialValues, e as buildValidationSchema, f as renderPayload, R as RolesRadioGroup } from '../RolesRadioGroup-CsTenjqQ.js';
20
+ import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
21
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
22
+ import { b as FormikSelect, a as FormikForm } from '../Select-DZ56UG-l.js';
23
+ import { Card, CardContent } from '@bigbinary/neeto-atoms/primitives/Card';
24
+ import { SINGULAR, PLURAL, LANGUAGE_OPTIONS } from '@bigbinary/neeto-commons-frontend/v2/constants';
25
+ import { withT } from '@bigbinary/neeto-commons-frontend/v2/react-utils';
26
+ import CopyToClipboardButton from '@bigbinary/neeto-molecules/v2/CopyToClipboardButton';
27
+ import { u as useCreateInviteLinks, a as useRegenerateInviteLink, b as useFetchInviteLinks } from '../useInviteLinksApi-gn-AP0Yx.js';
28
+ import { Input, MultiEmailInput } from '@bigbinary/neeto-atoms/formik';
29
+ import { isNeetoAuthApp } from '../utils.js';
30
+ import { NeetoTimezoneSelector } from '@bigbinary/neeto-time-zones';
31
+ import { FormikPhoneNumberInput } from '@bigbinary/neeto-molecules/v2/PhoneNumber';
32
+ import { T as TIME_FORMAT_OPTIONS, D as DATE_FORMAT_OPTIONS } from '../constants-CXdiW8NZ.js';
33
+ import { u as useCountries, P as ProfileImage } from '../ProfileImage-Ca02-i_d.js';
34
+ import { F as FormikActionBlock } from '../ActionBlock-jgw1N-As.js';
35
+ import { S as ScrollToErrorField } from '../index-CKQDhbTA.js';
36
+ import { g as getFilteredRoles } from '../utils-DEOuQRcK.js';
26
37
  import '@tanstack/react-query';
27
- import '@bigbinary/neeto-cist';
28
38
  import '@bigbinary/neeto-commons-frontend/react-utils';
29
39
  import 'axios';
30
- import '../constants-CXdiW8NZ.js';
31
- import 'i18next';
32
- import '@bigbinary/neeto-commons-frontend/constants';
33
40
  import '@bigbinary/neeto-commons-frontend/initializers';
34
41
  import 'qs';
35
42
  import '../queryClient-Dsu-gu4Y.js';
36
- import '@bigbinary/neeto-atoms/primitives/Card';
37
- import '@bigbinary/neeto-commons-frontend/v2/constants';
38
- import '@bigbinary/neeto-commons-frontend/v2/react-utils';
39
- import '@bigbinary/neeto-molecules/v2/CopyToClipboardButton';
40
- import '../useInviteLinksApi-gn-AP0Yx.js';
41
- import '@bigbinary/neeto-atoms/formik';
42
- import '../utils.js';
43
- import '../_commonjsHelpers-BFTU3MAI.js';
44
- import '@bigbinary/neeto-time-zones';
45
- import '@bigbinary/neeto-molecules/v2/PhoneNumber';
46
- import '@bigbinary/neeto-atoms/primitives';
47
- import '@bigbinary/neeto-molecules/v2/MoreDropdown';
43
+ import '@bigbinary/neeto-commons-frontend/constants';
48
44
  import '@babel/runtime/helpers/toConsumableArray';
45
+ import 'i18next';
49
46
  import 'yup';
47
+ import '../_commonjsHelpers-BFTU3MAI.js';
50
48
  import '../inject-css-C2dztUxs.js';
51
49
  import '../useCountriesApi-DK00167T.js';
50
+ import '@bigbinary/neeto-atoms/primitives';
51
+ import '@bigbinary/neeto-molecules/v2/MoreDropdown';
52
+
53
+ var _excluded = ["name", "label", "className", "checked", "disabled", "onChange"];
54
+ 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; }
55
+ function _objectSpread$1(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
56
+ var FormikSwitch = function FormikSwitch(_ref) {
57
+ var name = _ref.name,
58
+ label = _ref.label,
59
+ className = _ref.className,
60
+ checkedProp = _ref.checked,
61
+ disabled = _ref.disabled,
62
+ onChangeProp = _ref.onChange,
63
+ rest = _objectWithoutProperties(_ref, _excluded);
64
+ var _useField = useField(name),
65
+ _useField2 = _slicedToArray(_useField, 3),
66
+ field = _useField2[0],
67
+ helpers = _useField2[2];
68
+ var isChecked = checkedProp !== undefined ? checkedProp : field.value;
69
+ return /*#__PURE__*/jsxs("div", {
70
+ className: cn("flex items-center gap-2", className),
71
+ children: [/*#__PURE__*/jsx(Switch, _objectSpread$1({
72
+ disabled: disabled,
73
+ checked: isChecked,
74
+ id: name,
75
+ onCheckedChange: function onCheckedChange(val) {
76
+ helpers.setValue(val);
77
+ onChangeProp === null || onChangeProp === void 0 || onChangeProp({
78
+ target: {
79
+ checked: val
80
+ }
81
+ });
82
+ }
83
+ }, rest)), label && /*#__PURE__*/jsx(Label, {
84
+ htmlFor: name,
85
+ children: label
86
+ })]
87
+ });
88
+ };
89
+
90
+ var AppList = function AppList(_ref) {
91
+ var _globalProps$user;
92
+ var globalRoles = _ref.globalRoles,
93
+ savedStateRef = _ref.savedStateRef;
94
+ var _useTranslation = useTranslation(),
95
+ t = _useTranslation.t;
96
+ var _useState = useState(savedStateRef.current.isAppListEnabled),
97
+ _useState2 = _slicedToArray(_useState, 2),
98
+ isAppListEnabled = _useState2[0],
99
+ setIsAppListEnabled = _useState2[1];
100
+ var _useFormikContext = useFormikContext(),
101
+ _useFormikContext$val = _useFormikContext.values,
102
+ _useFormikContext$val2 = _useFormikContext$val.emails,
103
+ emails = _useFormikContext$val2 === void 0 ? [] : _useFormikContext$val2,
104
+ _useFormikContext$val3 = _useFormikContext$val.appRoles,
105
+ appRoles = _useFormikContext$val3 === void 0 ? [] : _useFormikContext$val3,
106
+ setFieldValue = _useFormikContext.setFieldValue;
107
+ var selectedEmail = pluck("value", emails);
108
+ var isManageProductsLinkEnabled = ((_globalProps$user = globalProps.user) === null || _globalProps$user === void 0 ? void 0 : _globalProps$user.isOwner) && Object.keys(globalRoles).length >= 3;
109
+ useEffect(function () {
110
+ if (savedStateRef.current.isAppListEnabled !== isAppListEnabled) {
111
+ appRoles === null || appRoles === void 0 || appRoles.forEach(function (appRole, index) {
112
+ var _globalProps$appName;
113
+ if ((appRole === null || appRole === void 0 ? void 0 : appRole.appName) === ((_globalProps$appName = globalProps.appName) === null || _globalProps$appName === void 0 ? void 0 : _globalProps$appName.substring(5))) {
114
+ setFieldValue("appRoles[".concat(index, "].isEnabled"), true);
115
+ return;
116
+ }
117
+ setFieldValue("appRoles[".concat(index, "].isEnabled"), isAppListEnabled);
118
+ });
119
+ }
120
+ savedStateRef.current.isAppListEnabled = isAppListEnabled;
121
+ }, [isAppListEnabled]); // eslint-disable-line react-hooks/exhaustive-deps
122
+
123
+ var buildRoleOptions = function buildRoleOptions(roles) {
124
+ return roles.map(function (role) {
125
+ return toLabelAndValue(role.name);
126
+ });
127
+ };
128
+ return /*#__PURE__*/jsxs("div", {
129
+ className: "flex flex-col gap-6",
130
+ children: [/*#__PURE__*/jsxs("div", {
131
+ className: "w-full space-y-3",
132
+ children: [/*#__PURE__*/jsxs("div", {
133
+ className: "flex items-start gap-2",
134
+ children: [/*#__PURE__*/jsx(Checkbox, {
135
+ checked: isAppListEnabled,
136
+ "data-testid": "ntm-manage-members-app-list-checkbox",
137
+ id: "app-list-toggle",
138
+ onCheckedChange: function onCheckedChange() {
139
+ return setIsAppListEnabled(not);
140
+ }
141
+ }), /*#__PURE__*/jsx(Label, {
142
+ className: "leading-relaxed",
143
+ htmlFor: "app-list-toggle",
144
+ children: /*#__PURE__*/jsx(Typography, {
145
+ className: "leading-relaxed",
146
+ variant: "body3",
147
+ children: /*#__PURE__*/jsx(Trans, {
148
+ i18nKey: "neetoTeamMembers.helpers.addMembersToNeetoProducts",
149
+ values: {
150
+ emails: selectedEmail
151
+ }
152
+ })
153
+ })
154
+ })]
155
+ }), isManageProductsLinkEnabled && /*#__PURE__*/jsx(Typography, {
156
+ variant: "body3",
157
+ children: /*#__PURE__*/jsx(Trans, {
158
+ i18nKey: "neetoTeamMembers.helpers.manageProducts",
159
+ components: {
160
+ button: /*#__PURE__*/jsx(Button, {
161
+ asChild: true,
162
+ variant: "link",
163
+ children: /*#__PURE__*/jsx("a", {
164
+ href: NEETO_AUTH_MANAGE_PRODUCT_URL,
165
+ children: "manage"
166
+ })
167
+ })
168
+ }
169
+ })
170
+ })]
171
+ }), /*#__PURE__*/jsx("div", {
172
+ className: "w-full",
173
+ children: appRoles.map(function (_ref2, index) {
174
+ var _globalProps$appName2;
175
+ var appName = _ref2.appName,
176
+ isEnabled = _ref2.isEnabled;
177
+ var isCurrentApp = appName === ((_globalProps$appName2 = globalProps.appName) === null || _globalProps$appName2 === void 0 ? void 0 : _globalProps$appName2.substring(5));
178
+ var isAppRoleSelectionChecked = isCurrentApp || isEnabled;
179
+ return /*#__PURE__*/jsxs("div", {
180
+ className: "flex w-full items-center justify-between py-2",
181
+ children: [/*#__PURE__*/jsx(Tooltip, {
182
+ content: isCurrentApp ? t("neetoTeamMembers.tooltips.hostAppIsRequired") : null,
183
+ children: /*#__PURE__*/jsx("span", {
184
+ children: /*#__PURE__*/jsx(FormikSwitch, {
185
+ checked: isAppRoleSelectionChecked,
186
+ disabled: isCurrentApp,
187
+ name: "appsRoles[".concat(index, "].isEnabled"),
188
+ label: t("neetoTeamMembers.labels.neeto_", {
189
+ product: appName
190
+ }),
191
+ onChange: function onChange(_ref3) {
192
+ var target = _ref3.target;
193
+ setFieldValue("appRoles[".concat(index, "].isEnabled"), target.checked);
194
+ }
195
+ })
196
+ })
197
+ }), /*#__PURE__*/jsx(Tooltip, {
198
+ content: isCurrentApp ? t("neetoTeamMembers.tooltips.goBackToChangeRole") : null,
199
+ children: /*#__PURE__*/jsx("span", {
200
+ className: "w-1/2 max-w-[250px]",
201
+ children: /*#__PURE__*/jsx(FormikSelect, {
202
+ isDisabled: isCurrentApp || !isEnabled,
203
+ name: "appRoles[".concat(index, "].activeRole"),
204
+ options: buildRoleOptions(globalRoles[appName])
205
+ })
206
+ })
207
+ })]
208
+ }, appName);
209
+ })
210
+ })]
211
+ });
212
+ };
213
+
214
+ var Confirmation = function Confirmation() {
215
+ var _globalProps$organiza;
216
+ var _useTranslation = useTranslation(),
217
+ t = _useTranslation.t;
218
+ var _useFormikContext = useFormikContext(),
219
+ _useFormikContext$val = _useFormikContext.values,
220
+ emails = _useFormikContext$val.emails,
221
+ role = _useFormikContext$val.role,
222
+ appRoles = _useFormikContext$val.appRoles;
223
+ var selectedEmail = pluck("value", emails);
224
+ var activeAppRoles = filterBy({
225
+ isEnabled: true
226
+ }, appRoles);
227
+ var isMultipleProduct = activeAppRoles.length > 1;
228
+ return /*#__PURE__*/jsxs(Fragment, {
229
+ children: [/*#__PURE__*/jsx(Card, {
230
+ className: "w-full shrink-0 bg-muted/40 ring-0",
231
+ size: "sm",
232
+ children: /*#__PURE__*/jsxs(CardContent, {
233
+ className: "flex items-start gap-3",
234
+ children: [/*#__PURE__*/jsx("div", {
235
+ className: "bg-primary/10 mt-0.5 flex size-9 shrink-0 items-center justify-center rounded-full",
236
+ children: /*#__PURE__*/jsx(Mail, {
237
+ className: "size-4 text-primary"
238
+ })
239
+ }), /*#__PURE__*/jsx(Typography, {
240
+ className: "min-w-0 flex-1 leading-relaxed",
241
+ variant: "body3",
242
+ children: isMultipleProduct ? /*#__PURE__*/jsx(Trans, {
243
+ i18nKey: "neetoTeamMembers.helpers.multipleProductInvitation",
244
+ values: {
245
+ count: selectedEmail.length,
246
+ emails: selectedEmail,
247
+ orgName: (_globalProps$organiza = globalProps.organization) === null || _globalProps$organiza === void 0 ? void 0 : _globalProps$organiza.name
248
+ }
249
+ }) : /*#__PURE__*/jsx(Trans, {
250
+ i18nKey: "neetoTeamMembers.helpers.singleProductInvitation",
251
+ values: getSingleInvitationTranslationProps({
252
+ activeAppRoles: activeAppRoles,
253
+ role: role,
254
+ selectedEmail: selectedEmail
255
+ })
256
+ })
257
+ })]
258
+ })
259
+ }), isMultipleProduct && /*#__PURE__*/jsx(Card, {
260
+ className: "w-full shrink-0 ring-0",
261
+ size: "sm",
262
+ children: /*#__PURE__*/jsx(CardContent, {
263
+ className: "overflow-hidden rounded-md border border-border p-0",
264
+ children: /*#__PURE__*/jsxs("table", {
265
+ className: "w-full border-collapse",
266
+ children: [/*#__PURE__*/jsx("thead", {
267
+ className: "bg-muted/40",
268
+ children: /*#__PURE__*/jsxs("tr", {
269
+ children: [/*#__PURE__*/jsx("th", {
270
+ className: "px-3 py-2 text-start text-xs font-medium uppercase tracking-wide text-muted-foreground",
271
+ children: t("neetoTeamMembers.common.productName")
272
+ }), /*#__PURE__*/jsx("th", {
273
+ className: "px-3 py-2 text-start text-xs font-medium uppercase tracking-wide text-muted-foreground",
274
+ children: t("neetoTeamMembers.common.role", SINGULAR)
275
+ })]
276
+ })
277
+ }), /*#__PURE__*/jsx("tbody", {
278
+ className: "divide-y divide-border",
279
+ children: activeAppRoles.map(function (_ref) {
280
+ var appName = _ref.appName,
281
+ activeRole = _ref.activeRole;
282
+ return /*#__PURE__*/jsxs("tr", {
283
+ children: [/*#__PURE__*/jsx("td", {
284
+ className: "px-3 py-2",
285
+ children: /*#__PURE__*/jsx(Typography, {
286
+ variant: "body3",
287
+ children: t("neetoTeamMembers.labels.neeto_", {
288
+ product: appName
289
+ })
290
+ })
291
+ }), /*#__PURE__*/jsx("td", {
292
+ className: "px-3 py-2",
293
+ children: /*#__PURE__*/jsx(Typography, {
294
+ variant: "body3",
295
+ children: activeRole
296
+ })
297
+ })]
298
+ }, appName);
299
+ })
300
+ })]
301
+ })
302
+ })
303
+ })]
304
+ });
305
+ };
306
+
307
+ var InviteLink$1 = function InviteLink(_ref) {
308
+ var _inviteLinks$, _inviteLinks$2, _inviteLinks$3, _inviteLinks$4, _inviteLinks$5, _inviteLinks$6, _inviteLinks$7;
309
+ var t = _ref.t,
310
+ roles = _ref.roles;
311
+ var _useCreateInviteLinks = useCreateInviteLinks(),
312
+ createInviteLink = _useCreateInviteLinks.mutate,
313
+ isCreateLinkPending = _useCreateInviteLinks.isPending;
314
+ var _useRegenerateInviteL = useRegenerateInviteLink(),
315
+ regenerateLink = _useRegenerateInviteL.mutate;
316
+ var _useFetchInviteLinks = useFetchInviteLinks(),
317
+ _useFetchInviteLinks$ = _useFetchInviteLinks.data,
318
+ _useFetchInviteLinks$2 = _useFetchInviteLinks$ === void 0 ? {} : _useFetchInviteLinks$,
319
+ _useFetchInviteLinks$3 = _useFetchInviteLinks$2.inviteLinks,
320
+ inviteLinks = _useFetchInviteLinks$3 === void 0 ? [] : _useFetchInviteLinks$3,
321
+ isFetchLinkLoading = _useFetchInviteLinks.isLoading;
322
+ var _useFormikContext = useFormikContext(),
323
+ values = _useFormikContext.values;
324
+ var _useState = useState(""),
325
+ _useState2 = _slicedToArray(_useState, 2),
326
+ feedbackMessage = _useState2[0],
327
+ setFeedbackMessage = _useState2[1];
328
+ var feedbackTimerRef = useRef();
329
+ var showFeedback = function showFeedback(message) {
330
+ setFeedbackMessage(message);
331
+ clearTimeout(feedbackTimerRef.current);
332
+ feedbackTimerRef.current = setTimeout(function () {
333
+ return setFeedbackMessage("");
334
+ }, FEEDBACK_DURATION_MS);
335
+ };
336
+ useEffect(function () {
337
+ return function () {
338
+ return clearTimeout(feedbackTimerRef.current);
339
+ };
340
+ }, []);
341
+ var isInviteLinkEmpty = !isFetchLinkLoading && isEmpty(inviteLinks);
342
+ var handleRegenerate = function handleRegenerate() {
343
+ var _findBy = findBy({
344
+ name: values.role
345
+ }, roles),
346
+ roleId = _findBy.id;
347
+ if (isEmpty(inviteLinks)) {
348
+ createInviteLink({
349
+ organizationRoleId: roleId
350
+ }, {
351
+ onSuccess: function onSuccess() {
352
+ return showFeedback(t("neetoTeamMembers.alerts.success.inviteLinkGenerated"));
353
+ }
354
+ });
355
+ return;
356
+ }
357
+ regenerateLink({
358
+ inviteLinkId: inviteLinks[0].id,
359
+ payload: {
360
+ organizationRoleId: roleId
361
+ }
362
+ }, {
363
+ onSuccess: function onSuccess() {
364
+ return showFeedback(t("neetoTeamMembers.alerts.success.inviteLinkRegenerated"));
365
+ }
366
+ });
367
+ };
368
+ if (isFetchLinkLoading || isCreateLinkPending) {
369
+ return /*#__PURE__*/jsx("div", {
370
+ className: "flex w-full items-center justify-center",
371
+ children: /*#__PURE__*/jsx(Spinner, {})
372
+ });
373
+ }
374
+ return /*#__PURE__*/jsxs("div", {
375
+ className: "w-full space-y-2",
376
+ children: [/*#__PURE__*/jsxs("div", {
377
+ className: "flex items-center gap-2 pt-1",
378
+ children: [/*#__PURE__*/jsxs("div", {
379
+ className: "relative flex min-w-0 grow items-center truncate rounded-md border border-border bg-muted/50 leading-none",
380
+ children: [isInviteLinkEmpty ? /*#__PURE__*/jsx("div", {
381
+ className: "relative min-w-0 grow truncate p-2 leading-none"
382
+ }) : /*#__PURE__*/jsx(Button, {
383
+ asChild: true,
384
+ className: "relative block h-auto min-w-0 shrink grow truncate p-2 font-normal leading-none no-underline hover:underline",
385
+ variant: "link",
386
+ children: /*#__PURE__*/jsx("a", {
387
+ href: getInviteURL(inviteLinks === null || inviteLinks === void 0 || (_inviteLinks$ = inviteLinks[0]) === null || _inviteLinks$ === void 0 ? void 0 : _inviteLinks$.token),
388
+ rel: "noopener noreferrer",
389
+ target: "_blank",
390
+ children: getInviteURL(inviteLinks === null || inviteLinks === void 0 || (_inviteLinks$2 = inviteLinks[0]) === null || _inviteLinks$2 === void 0 ? void 0 : _inviteLinks$2.token)
391
+ })
392
+ }), isInviteLinkEmpty ? /*#__PURE__*/jsx(Button, {
393
+ className: "rounded-s-none",
394
+ onClick: handleRegenerate,
395
+ children: t("neetoTeamMembers.buttons.generateLink")
396
+ }) : /*#__PURE__*/jsx(CopyToClipboardButton, {
397
+ className: "rounded-s-none border-s",
398
+ value: getInviteURL(inviteLinks === null || inviteLinks === void 0 || (_inviteLinks$3 = inviteLinks[0]) === null || _inviteLinks$3 === void 0 ? void 0 : _inviteLinks$3.token),
399
+ variant: "ghost"
400
+ })]
401
+ }), !isInviteLinkEmpty && /*#__PURE__*/jsx(DropdownMenu, {
402
+ customTarget: /*#__PURE__*/jsx(Button, {
403
+ "aria-label": t("neetoTeamMembers.buttons.regenerateLink"),
404
+ className: "shrink-0",
405
+ icon: EllipsisVertical,
406
+ size: "icon",
407
+ variant: "ghost"
408
+ }),
409
+ children: /*#__PURE__*/jsx(DropdownMenu.Menu, {
410
+ children: /*#__PURE__*/jsx(DropdownMenu.MenuItem, {
411
+ onClick: handleRegenerate,
412
+ children: t("neetoTeamMembers.buttons.regenerateLink")
413
+ })
414
+ })
415
+ })]
416
+ }), feedbackMessage && /*#__PURE__*/jsxs("div", {
417
+ "aria-live": "polite",
418
+ className: "flex w-fit items-center gap-1.5 rounded-md bg-success-solid px-2 py-1 text-success-solid-foreground animate-in fade-in slide-in-from-top-1 duration-200",
419
+ children: [/*#__PURE__*/jsx(Check, {
420
+ className: "size-3.5 shrink-0"
421
+ }), /*#__PURE__*/jsx(Typography, {
422
+ color: "inherit",
423
+ variant: "caption",
424
+ weight: "medium",
425
+ children: feedbackMessage
426
+ })]
427
+ }), /*#__PURE__*/jsx("div", {
428
+ children: !isInviteLinkEmpty && /*#__PURE__*/jsx(Typography, {
429
+ className: "leading-relaxed",
430
+ color: "muted",
431
+ variant: "body3",
432
+ children: /*#__PURE__*/jsx(Trans, {
433
+ components: {
434
+ strong: /*#__PURE__*/jsx("strong", {})
435
+ },
436
+ i18nKey: "neetoTeamMembers.alerts.messages.inviteLink",
437
+ values: {
438
+ expiryDays: remainingExpiryDays(inviteLinks === null || inviteLinks === void 0 || (_inviteLinks$4 = inviteLinks[0]) === null || _inviteLinks$4 === void 0 ? void 0 : _inviteLinks$4.expiresAt),
439
+ role: inviteLinks === null || inviteLinks === void 0 || (_inviteLinks$5 = inviteLinks[0]) === null || _inviteLinks$5 === void 0 || (_inviteLinks$5 = _inviteLinks$5.organizationRole) === null || _inviteLinks$5 === void 0 ? void 0 : _inviteLinks$5.name,
440
+ inviteLimit: inviteLinks === null || inviteLinks === void 0 || (_inviteLinks$6 = inviteLinks[0]) === null || _inviteLinks$6 === void 0 ? void 0 : _inviteLinks$6.inviteLimit,
441
+ appName: globalProps.appName,
442
+ emailDomain: inviteLinks === null || inviteLinks === void 0 || (_inviteLinks$7 = inviteLinks[0]) === null || _inviteLinks$7 === void 0 ? void 0 : _inviteLinks$7.domain
443
+ }
444
+ })
445
+ })
446
+ })]
447
+ });
448
+ };
449
+ var InviteLink = withT(InviteLink$1);
450
+
451
+ var MultipleEmailInput = function MultipleEmailInput(_ref) {
452
+ var _head;
453
+ var _ref$emails = _ref.emails,
454
+ emails = _ref$emails === void 0 ? [] : _ref$emails,
455
+ innerRef = _ref.innerRef,
456
+ _ref$selectedMember = _ref.selectedMember,
457
+ selectedMember = _ref$selectedMember === void 0 ? null : _ref$selectedMember,
458
+ setCurrentPage = _ref.setCurrentPage;
459
+ var isInviteLinkFeatureEnabled = !isNeetoAuthApp();
460
+ var _useTranslation = useTranslation(),
461
+ t = _useTranslation.t;
462
+ var _useFormikContext = useFormikContext(),
463
+ setFieldValue = _useFormikContext.setFieldValue;
464
+ var handleInputChange = function handleInputChange(event) {
465
+ var email = event.target.value;
466
+ var emailList = [{
467
+ label: email,
468
+ value: email,
469
+ valid: EMAIL_REGEX.test(email)
470
+ }];
471
+ setFieldValue("emails", emailList);
472
+ };
473
+ return /*#__PURE__*/jsx("div", {
474
+ className: "w-full",
475
+ children: selectedMember ? /*#__PURE__*/jsx(Input, {
476
+ "data-testid": "ntm-manage-member-email-input",
477
+ name: "emails",
478
+ type: "email",
479
+ value: (_head = head(emails)) === null || _head === void 0 ? void 0 : _head.value,
480
+ label: /*#__PURE__*/jsx("span", {
481
+ className: "flex w-full justify-between",
482
+ children: /*#__PURE__*/jsx(Typography, {
483
+ variant: "body3",
484
+ children: t("neetoTeamMembers.common.email", SINGULAR)
485
+ })
486
+ }),
487
+ onChange: handleInputChange
488
+ }) : /*#__PURE__*/jsxs("div", {
489
+ children: [/*#__PURE__*/jsxs("div", {
490
+ className: "flex items-center justify-between pb-2",
491
+ children: [/*#__PURE__*/jsxs(Label, {
492
+ children: [t("neetoTeamMembers.common.email", PLURAL), /*#__PURE__*/jsx("span", {
493
+ className: "text-destructive",
494
+ children: " *"
495
+ })]
496
+ }), isInviteLinkFeatureEnabled && /*#__PURE__*/jsx(Button, {
497
+ variant: "link",
498
+ onClick: function onClick() {
499
+ return setCurrentPage(FORM_PAGES.INVITE_LINK);
500
+ },
501
+ children: t("neetoTeamMembers.buttons.inviteLink")
502
+ })]
503
+ }), /*#__PURE__*/jsx(MultiEmailInput, {
504
+ required: true,
505
+ counter: COUNTER_PROPS,
506
+ "data-testid": "ntm-manage-member-email-input",
507
+ filterInvalidEmails: FILTER_INVALID_EMAILS,
508
+ helpText: t("neetoTeamMembers.helpers.enterMultipleEmails"),
509
+ label: "",
510
+ name: "emails",
511
+ placeholder: t("neetoTeamMembers.placeholders.email"),
512
+ ref: innerRef
513
+ })]
514
+ })
515
+ });
516
+ };
517
+
518
+ var NameInputs = withT(function (_ref) {
519
+ var t = _ref.t,
520
+ innerRef = _ref.innerRef;
521
+ return /*#__PURE__*/jsxs("div", {
522
+ className: "flex w-full gap-4",
523
+ children: [/*#__PURE__*/jsx(Input, {
524
+ "data-testid": "ntm-edit-member-first-name-text-field",
525
+ label: t("neetoTeamMembers.labels.firstName"),
526
+ name: "firstName",
527
+ ref: innerRef
528
+ }), /*#__PURE__*/jsx(Input, {
529
+ "data-testid": "ntm-edit-member-last-name-text-field",
530
+ label: t("neetoTeamMembers.labels.lastName"),
531
+ name: "lastName"
532
+ })]
533
+ });
534
+ });
535
+
536
+ var ProfileSettings = function ProfileSettings(_ref) {
537
+ var member = _ref.member,
538
+ setFieldValue = _ref.setFieldValue;
539
+ var _useTranslation = useTranslation(),
540
+ t = _useTranslation.t;
541
+ var setFieldValueRef = useRef(setFieldValue);
542
+ useEffect(function () {
543
+ setFieldValueRef.current = setFieldValue;
544
+ }, [setFieldValue]);
545
+ var _useCountries = useCountries(),
546
+ countryDropdownOptions = _useCountries.countryDropdownOptions,
547
+ isFetchingCountriesList = _useCountries.isFetchingCountriesList,
548
+ handleCountryChange = _useCountries.handleCountryChange;
549
+ var timezoneContainerRef = useCallback(function (node) {
550
+ if (isNotNil(node)) {
551
+ new NeetoTimezoneSelector(node, {
552
+ isTimeFormat24H: member.timeFormat === "24h",
553
+ className: "w-full z-10",
554
+ position: "bottom",
555
+ initialValue: member.timeZone,
556
+ onChange: function onChange(_ref2) {
557
+ var main = _ref2.main;
558
+ return setFieldValueRef.current("timeZone", main);
559
+ }
560
+ });
561
+ }
562
+ }, [member.timeZone, member.timeFormat]);
563
+ useEffect(function () {
564
+ var country = findBy({
565
+ value: member.countryIdentifier
566
+ }, countryDropdownOptions);
567
+ if (country) handleCountryChange(country);
568
+ }, [member.countryIdentifier, countryDropdownOptions, handleCountryChange]);
569
+ return /*#__PURE__*/jsxs("div", {
570
+ className: "w-full space-y-6",
571
+ "data-cy": "ntm-profile-settings",
572
+ children: [/*#__PURE__*/jsx(FormikPhoneNumberInput, {
573
+ "data-cy": "ntm-edit-member-phonenumber-field",
574
+ label: t("neetoTeamMembers.profile.inputs.label.phonenumber"),
575
+ name: "phonenumber"
576
+ }), /*#__PURE__*/jsx(FormikSelect, {
577
+ "data-cy": "ntm-edit-member-country-select",
578
+ isLoading: isFetchingCountriesList,
579
+ label: t("neetoTeamMembers.profile.inputs.label.country"),
580
+ name: "countryId",
581
+ options: countryDropdownOptions,
582
+ onChange: function onChange(value) {
583
+ var option = countryDropdownOptions.find(function (o) {
584
+ return o.value === value;
585
+ });
586
+ var dependentFields = handleCountryChange(option);
587
+ setFieldValue("dateFormat", dependentFields === null || dependentFields === void 0 ? void 0 : dependentFields.dateFormat);
588
+ }
589
+ }), /*#__PURE__*/jsx(FormikSelect, {
590
+ "data-cy": "ntm-edit-member-language-select",
591
+ label: t("neetoTeamMembers.profile.inputs.label.language"),
592
+ name: "language",
593
+ options: LANGUAGE_OPTIONS
594
+ }), /*#__PURE__*/jsxs("div", {
595
+ className: "space-y-2",
596
+ children: [/*#__PURE__*/jsx(Label, {
597
+ children: t("neetoTeamMembers.profile.inputs.label.timeZone")
598
+ }), /*#__PURE__*/jsx("div", {
599
+ className: "w-full grow",
600
+ "data-cy": "ntm-edit-member-timezone-select",
601
+ ref: timezoneContainerRef
602
+ })]
603
+ }), /*#__PURE__*/jsx(FormikSelect, {
604
+ "data-cy": "ntm-edit-member-time-format-select",
605
+ label: t("neetoTeamMembers.profile.inputs.label.preferredTimeFormat"),
606
+ name: "timeFormat",
607
+ options: TIME_FORMAT_OPTIONS
608
+ }), /*#__PURE__*/jsx(FormikSelect, {
609
+ "data-cy": "ntm-edit-member-date-format-select",
610
+ label: t("neetoTeamMembers.profile.inputs.label.preferredDateFormat"),
611
+ name: "dateFormat",
612
+ options: DATE_FORMAT_OPTIONS
613
+ })]
614
+ });
615
+ };
616
+
617
+ 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; }
618
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
619
+ var ManageMember = function ManageMember(_ref) {
620
+ var _config$additionalFie, _manageMemberComponen;
621
+ var config = _ref.config,
622
+ onComplete = _ref.onComplete,
623
+ _ref$roles = _ref.roles,
624
+ roles = _ref$roles === void 0 ? [] : _ref$roles,
625
+ _ref$selectedMember = _ref.selectedMember,
626
+ selectedMember = _ref$selectedMember === void 0 ? null : _ref$selectedMember,
627
+ _ref$componentConfig = _ref.componentConfig,
628
+ componentConfig = _ref$componentConfig === void 0 ? {} : _ref$componentConfig;
629
+ var _useTranslation = useTranslation(),
630
+ t = _useTranslation.t;
631
+ var _useState = useState(false),
632
+ _useState2 = _slicedToArray(_useState, 2),
633
+ isCreationStatusPollingEnabled = _useState2[0],
634
+ setIsCreationStatusPollingEnabled = _useState2[1];
635
+ var isViewPermissionGranted = config.permissions.view;
636
+ var isNotDevelopment = globalProps.railsEnv !== "development";
637
+ var _useFetchMembers = useFetchMembers({
638
+ enabled: isViewPermissionGranted
639
+ }),
640
+ team = _useFetchMembers.data;
641
+ var isManageMemberOpen = !!componentConfig.isOpen;
642
+ var _useFetchMember = useFetchMember(selectedMember === null || selectedMember === void 0 ? void 0 : selectedMember.id, {
643
+ enabled: !!selectedMember && isManageMemberOpen
644
+ }),
645
+ memberShowData = _useFetchMember.data,
646
+ isMemberDetailLoading = _useFetchMember.isLoading;
647
+ var _useState3 = useState(FORM_PAGES.MAIN),
648
+ _useState4 = _slicedToArray(_useState3, 2),
649
+ currentPage = _useState4[0],
650
+ setCurrentPage = _useState4[1];
651
+ var formReference = useRef(null);
652
+ var inputReference = useRef(null);
653
+ var appListSavedStateReference = useRef({
654
+ isAppListEnabled: true
655
+ });
656
+ var shouldSkipAppListPage = useRef(false);
657
+ var formikValues = useRef(null);
658
+ var manageMemberComponentConfig = _objectSpread(_objectSpread({}, DEFAULT_COMPONENT_CONFIG), {}, {
659
+ initialFocusRef: inputReference
660
+ }, componentConfig);
661
+ var Component = MEMBERS_FORM_COMPONENT_MAPPER[manageMemberComponentConfig.type || "pane"];
662
+ var haveToFetchRoles = isEmpty(roles) && isViewPermissionGranted;
663
+ var isEditForm = !!selectedMember;
664
+ var isLastPage = currentPage === FORM_PAGES.CONFIRMATION || isEditForm;
665
+ var _useFetchRoles = useFetchRoles({
666
+ select: function select(response) {
667
+ var _response$organizatio;
668
+ return reverse((_response$organizatio = response.organizationRoles) !== null && _response$organizatio !== void 0 ? _response$organizatio : []);
669
+ },
670
+ enabled: haveToFetchRoles
671
+ }),
672
+ _useFetchRoles$data = _useFetchRoles.data,
673
+ rolesList = _useFetchRoles$data === void 0 ? roles : _useFetchRoles$data,
674
+ isRolesLoading = _useFetchRoles.isLoading;
675
+ var _useFetchGlobalRoles = useFetchGlobalRoles({
676
+ select: function select(response) {
677
+ return groupBy(prop("appName"), response !== null && response !== void 0 ? response : []);
678
+ },
679
+ enabled: isNotDevelopment && !selectedMember && isViewPermissionGranted
680
+ }),
681
+ _useFetchGlobalRoles$ = _useFetchGlobalRoles.data,
682
+ globalRoles = _useFetchGlobalRoles$ === void 0 ? {} : _useFetchGlobalRoles$,
683
+ isGlobalRolesLoading = _useFetchGlobalRoles.isLoading;
684
+ var filteredRoles = getFilteredRoles(rolesList, config);
685
+ var initialFormValues = renderInitialValues({
686
+ additionalFieldsInitialValues: (_config$additionalFie = config.additionalFields) === null || _config$additionalFie === void 0 ? void 0 : _config$additionalFie.initialValues,
687
+ globalRoles: globalRoles,
688
+ memberShowData: memberShowData,
689
+ roles: filteredRoles,
690
+ selectedMember: selectedMember
691
+ });
692
+ var _useCreateMember = useCreateMember({
693
+ onSuccess: function onSuccess() {
694
+ return setIsCreationStatusPollingEnabled(true);
695
+ }
696
+ }),
697
+ _useCreateMember$data = _useCreateMember.data,
698
+ _useCreateMember$data2 = _useCreateMember$data === void 0 ? {} : _useCreateMember$data,
699
+ jobId = _useCreateMember$data2.jobId,
700
+ createMember = _useCreateMember.mutate,
701
+ isCreatingMember = _useCreateMember.isPending;
702
+ var refetchInterval = function refetchInterval(query) {
703
+ var _ref2 = query.state.data || {},
704
+ isCompleted = _ref2.isCompleted;
705
+ if (isCompleted) {
706
+ setIsCreationStatusPollingEnabled(false);
707
+ return false;
708
+ }
709
+ return 2000;
710
+ };
711
+ var _useMembersCreationSt = useMembersCreationStatus(jobId, {
712
+ refetchInterval: refetchInterval,
713
+ enabled: isCreationStatusPollingEnabled && !!jobId
714
+ }),
715
+ creationStatus = _useMembersCreationSt.data;
716
+ useEffect(function () {
717
+ var _config$createMember;
718
+ var _ref3 = creationStatus || {},
719
+ isCompleted = _ref3.isCompleted,
720
+ isSuccessful = _ref3.isSuccessful,
721
+ users = _ref3.users,
722
+ error = _ref3.error;
723
+ if (!isCompleted) return;
724
+ handleClose();
725
+ config === null || config === void 0 || (_config$createMember = config.createMember) === null || _config$createMember === void 0 || (_config$createMember = _config$createMember.onSuccess) === null || _config$createMember === void 0 || _config$createMember.callback({
726
+ users: users
727
+ });
728
+ if (isSuccessful) {
729
+ showThumbsUpToastr();
730
+ } else {
731
+ toast.error(error);
732
+ }
733
+ refetchMembers();
734
+ }, [creationStatus]);
735
+ var _useUpdateMember = useUpdateMember({
736
+ onSuccess: function onSuccess() {
737
+ var _config$updateMember, _globalProps$user;
738
+ handleClose(true);
739
+ config === null || config === void 0 || (_config$updateMember = config.updateMember) === null || _config$updateMember === void 0 || (_config$updateMember = _config$updateMember.onSuccess) === null || _config$updateMember === void 0 || _config$updateMember.callback();
740
+ if ((selectedMember === null || selectedMember === void 0 ? void 0 : selectedMember.id) === ((_globalProps$user = globalProps.user) === null || _globalProps$user === void 0 ? void 0 : _globalProps$user.id)) {
741
+ window.location.reload();
742
+ }
743
+ }
744
+ }),
745
+ updateMember = _useUpdateMember.mutate,
746
+ isUpdatingMember = _useUpdateMember.isPending;
747
+ var hasRoleChanged = function hasRoleChanged(_ref4) {
748
+ var submitted = _ref4.submitted,
749
+ values = _ref4.values;
750
+ return submitted && (values === null || values === void 0 ? void 0 : values.role) !== (selectedMember === null || selectedMember === void 0 ? void 0 : selectedMember.role);
751
+ };
752
+ var handleClose = function handleClose() {
753
+ var submitted = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
754
+ onComplete({
755
+ submitted: hasRoleChanged({
756
+ submitted: submitted,
757
+ values: formikValues.current
758
+ })
759
+ });
760
+ setCurrentPage(FORM_PAGES.MAIN);
761
+ appListSavedStateReference.current = {
762
+ isAppListEnabled: true
763
+ };
764
+ setIsCreationStatusPollingEnabled(false);
765
+ };
766
+ var _useProfileImageUploa = useProfileImageUpload({
767
+ uploadConfig: {
768
+ folder: "Auth",
769
+ customMetadata: {
770
+ appName: "neetoAuth"
771
+ }
772
+ }
773
+ }),
774
+ uploadImage = _useProfileImageUploa.uploadImage,
775
+ isUploading = _useProfileImageUploa.isUploading;
776
+ var handleUploadImage = /*#__PURE__*/function () {
777
+ var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(image) {
778
+ var result;
779
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
780
+ while (1) switch (_context.prev = _context.next) {
781
+ case 0:
782
+ _context.next = 2;
783
+ return uploadImage(image, function (uploadedImageData) {
784
+ result = uploadedImageData;
785
+ });
786
+ case 2:
787
+ return _context.abrupt("return", result);
788
+ case 3:
789
+ case "end":
790
+ return _context.stop();
791
+ }
792
+ }, _callee);
793
+ }));
794
+ return function handleUploadImage(_x) {
795
+ return _ref5.apply(this, arguments);
796
+ };
797
+ }();
798
+ var isProcessing = isCreatingMember || isUpdatingMember || isUploading || isRolesLoading || isGlobalRolesLoading || isMemberDetailLoading;
799
+ var handleAddMember = /*#__PURE__*/function () {
800
+ var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(values) {
801
+ var _values$avatar, payload, _yield$handleUploadIm, fileId, filePath, url;
802
+ return _regeneratorRuntime.wrap(function _callee2$(_context2) {
803
+ while (1) switch (_context2.prev = _context2.next) {
804
+ case 0:
805
+ if (!selectedMember) {
806
+ _context2.next = 25;
807
+ break;
808
+ }
809
+ payload = renderPayload(values, selectedMember, initialFormValues);
810
+ if (!((_values$avatar = values.avatar) !== null && _values$avatar !== void 0 && _values$avatar.file)) {
811
+ _context2.next = 22;
812
+ break;
813
+ }
814
+ if (!payload.profile) payload.profile = {};
815
+ if (!(values.avatar.file === "_destroy")) {
816
+ _context2.next = 8;
817
+ break;
818
+ }
819
+ payload.profile.avatar = {
820
+ fileId: "_destroy",
821
+ filePath: "",
822
+ url: ""
823
+ };
824
+ _context2.next = 22;
825
+ break;
826
+ case 8:
827
+ _context2.prev = 8;
828
+ _context2.next = 11;
829
+ return handleUploadImage(values.avatar.file);
830
+ case 11:
831
+ _yield$handleUploadIm = _context2.sent;
832
+ fileId = _yield$handleUploadIm.fileId;
833
+ filePath = _yield$handleUploadIm.filePath;
834
+ url = _yield$handleUploadIm.url;
835
+ payload.profile.avatar = {
836
+ fileId: fileId,
837
+ filePath: filePath,
838
+ url: url
839
+ };
840
+ _context2.next = 22;
841
+ break;
842
+ case 18:
843
+ _context2.prev = 18;
844
+ _context2.t0 = _context2["catch"](8);
845
+ toast.error(_context2.t0.message);
846
+ return _context2.abrupt("return");
847
+ case 22:
848
+ updateMember({
849
+ id: selectedMember.id,
850
+ payload: payload
851
+ });
852
+ _context2.next = 26;
853
+ break;
854
+ case 25:
855
+ createMember(renderPayload(values));
856
+ case 26:
857
+ case "end":
858
+ return _context2.stop();
859
+ }
860
+ }, _callee2, null, [[8, 18]]);
861
+ }));
862
+ return function handleAddMember(_x2) {
863
+ return _ref6.apply(this, arguments);
864
+ };
865
+ }();
866
+ var handleOnSubmit = /*#__PURE__*/function () {
867
+ var _ref8 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(values, _ref7) {
868
+ var setSubmitting;
869
+ return _regeneratorRuntime.wrap(function _callee3$(_context3) {
870
+ while (1) switch (_context3.prev = _context3.next) {
871
+ case 0:
872
+ setSubmitting = _ref7.setSubmitting;
873
+ shouldSkipAppListPage.current = isEmpty(values.appRoles);
874
+ if (!isLastPage) {
875
+ _context3.next = 7;
876
+ break;
877
+ }
878
+ _context3.next = 5;
879
+ return handleAddMember(values);
880
+ case 5:
881
+ _context3.next = 8;
882
+ break;
883
+ case 7:
884
+ if (currentPage === FORM_PAGES.APP_LIST || shouldSkipAppListPage.current) {
885
+ setCurrentPage(FORM_PAGES.CONFIRMATION);
886
+ setSubmitting(false);
887
+ } else if (currentPage === FORM_PAGES.MAIN) {
888
+ setCurrentPage(FORM_PAGES.APP_LIST);
889
+ setSubmitting(false);
890
+ }
891
+ case 8:
892
+ case "end":
893
+ return _context3.stop();
894
+ }
895
+ }, _callee3);
896
+ }));
897
+ return function handleOnSubmit(_x3, _x4) {
898
+ return _ref8.apply(this, arguments);
899
+ };
900
+ }();
901
+ var handleBackButton = function handleBackButton() {
902
+ if (currentPage === FORM_PAGES.APP_LIST || shouldSkipAppListPage.current || currentPage === FORM_PAGES.INVITE_LINK) {
903
+ setCurrentPage(FORM_PAGES.MAIN);
904
+ } else if (currentPage === FORM_PAGES.CONFIRMATION) {
905
+ setCurrentPage(FORM_PAGES.APP_LIST);
906
+ }
907
+ };
908
+ var getTitle = function getTitle() {
909
+ var memberLabel = taxonomies.member.singular;
910
+ if (selectedMember) {
911
+ return t("neetoTeamMembers.common.edit_", {
912
+ what: memberLabel
913
+ });
914
+ }
915
+ return currentPage === FORM_PAGES.INVITE_LINK ? t("neetoTeamMembers.common.inviteViaLink") : t("neetoTeamMembers.common.addNew_", {
916
+ what: memberLabel
917
+ });
918
+ };
919
+ var renderRolesRadioGroup = function renderRolesRadioGroup(role) {
920
+ return /*#__PURE__*/jsx("div", {
921
+ className: "w-full pt-2",
922
+ children: /*#__PURE__*/jsx(RolesRadioGroup, {
923
+ config: config,
924
+ globalRoles: globalRoles,
925
+ role: role,
926
+ isEdit: !!selectedMember,
927
+ roles: filteredRoles
928
+ })
929
+ });
930
+ };
931
+ var renderFormPage = function renderFormPage(page, emails, role, setFieldValue) {
932
+ var _memberShowData$membe, _memberShowData$membe2, _config$additionalFie2;
933
+ switch (page) {
934
+ case FORM_PAGES.MAIN:
935
+ return /*#__PURE__*/jsxs(Fragment, {
936
+ children: [selectedMember && /*#__PURE__*/jsx(ProfileImage, {}), selectedMember && /*#__PURE__*/jsx(NameInputs, {
937
+ innerRef: inputReference
938
+ }), /*#__PURE__*/jsx(MultipleEmailInput, {
939
+ emails: emails,
940
+ selectedMember: selectedMember,
941
+ setCurrentPage: setCurrentPage,
942
+ innerRef: inputReference
943
+ }), selectedMember && /*#__PURE__*/jsx(ProfileSettings, {
944
+ setFieldValue: setFieldValue,
945
+ member: _objectSpread(_objectSpread({}, selectedMember), {}, {
946
+ countryIdentifier: (_memberShowData$membe = memberShowData === null || memberShowData === void 0 || (_memberShowData$membe2 = memberShowData.member) === null || _memberShowData$membe2 === void 0 ? void 0 : _memberShowData$membe2.countryIdentifier) !== null && _memberShowData$membe !== void 0 ? _memberShowData$membe : selectedMember.countryIdentifier
947
+ })
948
+ }), renderRolesRadioGroup(role), (_config$additionalFie2 = config.additionalFields) === null || _config$additionalFie2 === void 0 ? void 0 : _config$additionalFie2.component]
949
+ });
950
+ case FORM_PAGES.APP_LIST:
951
+ return /*#__PURE__*/jsx(AppList, {
952
+ globalRoles: globalRoles,
953
+ savedStateRef: appListSavedStateReference
954
+ });
955
+ case FORM_PAGES.CONFIRMATION:
956
+ return /*#__PURE__*/jsx(Confirmation, {});
957
+ case FORM_PAGES.INVITE_LINK:
958
+ return /*#__PURE__*/jsxs(Fragment, {
959
+ children: [/*#__PURE__*/jsx(InviteLink, {
960
+ roles: filteredRoles
961
+ }), renderRolesRadioGroup(role)]
962
+ });
963
+ default:
964
+ return null;
965
+ }
966
+ };
967
+ var isSheet = manageMemberComponentConfig.type !== "modal";
968
+ return /*#__PURE__*/jsxs(Component, {
969
+ "data-testid": "ntm-manage-members-pane-wrapper",
970
+ isOpen: manageMemberComponentConfig.isOpen,
971
+ className: classnames("ntm-timezone-shadcn-overrides", manageMemberComponentConfig.className),
972
+ onClose: function onClose() {
973
+ return handleClose(false);
974
+ },
975
+ children: [/*#__PURE__*/jsxs(Component.Header, _objectSpread(_objectSpread({}, isSheet ? manageMemberComponentConfig.headerProps : {}), {}, {
976
+ className: cn(isSheet && currentPage !== FORM_PAGES.MAIN && "flex flex-row items-center gap-2", isSheet && ((_manageMemberComponen = manageMemberComponentConfig.headerProps) === null || _manageMemberComponen === void 0 ? void 0 : _manageMemberComponen.className)),
977
+ children: [isSheet && currentPage !== FORM_PAGES.MAIN && /*#__PURE__*/jsx(Button, {
978
+ "aria-label": t("neetoTeamMembers.buttons.back"),
979
+ icon: ArrowLeft,
980
+ size: "icon-sm",
981
+ variant: "ghost",
982
+ onClick: handleBackButton
983
+ }), /*#__PURE__*/jsxs("div", {
984
+ children: [/*#__PURE__*/jsx(Component.Title, {
985
+ "data-testid": "ntm-manage-members-pane-header",
986
+ children: getTitle()
987
+ }), selectedMember && Component.Description && /*#__PURE__*/jsx(Component.Description, {
988
+ children: t("neetoTeamMembers.helpers.editPaneSubtitle")
989
+ })]
990
+ })]
991
+ })), /*#__PURE__*/jsx(FormikForm, {
992
+ ref: formReference,
993
+ className: classnames({
994
+ "flex flex-1 flex-col overflow-hidden": isSheet
995
+ }),
996
+ formikProps: {
997
+ enableReinitialize: true,
998
+ initialValues: initialFormValues,
999
+ onSubmit: handleOnSubmit,
1000
+ validationSchema: buildValidationSchema(_objectSpread({
1001
+ selectedMember: selectedMember
1002
+ }, team))
1003
+ },
1004
+ children: function children(_ref9) {
1005
+ var _manageMemberComponen2, _manageMemberComponen3;
1006
+ var values = _ref9.values,
1007
+ isValid = _ref9.isValid,
1008
+ dirty = _ref9.dirty,
1009
+ setFieldValue = _ref9.setFieldValue;
1010
+ var emails = values.emails,
1011
+ role = values.role;
1012
+ formikValues.current = values;
1013
+ return /*#__PURE__*/jsxs(Fragment, {
1014
+ children: [/*#__PURE__*/jsx(ScrollToErrorField, {
1015
+ formRef: formReference
1016
+ }), /*#__PURE__*/jsxs("div", _objectSpread(_objectSpread({}, isSheet ? manageMemberComponentConfig.bodyProps : {}), {}, {
1017
+ className: cn(isSheet ? "w-full flex-1 space-y-6 overflow-y-auto px-6 pb-4" : "w-full space-y-6 pb-4", isSheet && ((_manageMemberComponen2 = manageMemberComponentConfig.bodyProps) === null || _manageMemberComponen2 === void 0 ? void 0 : _manageMemberComponen2.className)),
1018
+ children: [isSheet && isCreationStatusPollingEnabled && /*#__PURE__*/jsxs(Alert, {
1019
+ children: [/*#__PURE__*/jsx(Info, {
1020
+ className: "size-4"
1021
+ }), /*#__PURE__*/jsxs(Alert.Title, {
1022
+ className: "flex items-center gap-2",
1023
+ children: [/*#__PURE__*/jsx(Spinner, {}), t("neetoTeamMembers.helpers.memberCreationStatus", {
1024
+ count: emails.length
1025
+ })]
1026
+ })]
1027
+ }), renderFormPage(currentPage, emails, role, setFieldValue)]
1028
+ })), currentPage !== FORM_PAGES.INVITE_LINK && /*#__PURE__*/jsx(Component.Footer, _objectSpread(_objectSpread({}, isSheet ? manageMemberComponentConfig.footerProps : {}), {}, {
1029
+ className: cn("flex gap-2", isSheet && ((_manageMemberComponen3 = manageMemberComponentConfig.footerProps) === null || _manageMemberComponen3 === void 0 ? void 0 : _manageMemberComponen3.className)),
1030
+ children: /*#__PURE__*/jsx(FormikActionBlock, {
1031
+ cancelButtonProps: {
1032
+ "data-testid": "ntm-manage-member-cancel-button",
1033
+ onClick: function onClick() {
1034
+ return handleClose(false);
1035
+ }
1036
+ },
1037
+ isSubmitting: isProcessing || isCreationStatusPollingEnabled,
1038
+ submitButtonProps: {
1039
+ "data-testid": isLastPage ? "ntm-manage-member-submit-button" : "ntm-manage-member-continue-button",
1040
+ label: isLastPage ? t("neetoTeamMembers.buttons.saveChanges") : t("neetoTeamMembers.buttons.continue"),
1041
+ disabled: !isValid || isProcessing || !dirty || isCreationStatusPollingEnabled
1042
+ }
1043
+ })
1044
+ }))]
1045
+ });
1046
+ }
1047
+ })]
1048
+ });
1049
+ };
1050
+
1051
+ export { ManageMember as default };
52
1052
  //# sourceMappingURL=ManageMember.js.map