@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,1317 @@
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 } from 'react';
6
+ import { Switch, Label, cn, Avatar, Typography, Checkbox, Button, Tooltip, Spinner, DropdownMenu, Callout } from '@bigbinary/neeto-atoms';
7
+ import classnames from 'classnames';
8
+ import { EllipsisVertical, ArrowLeft, Info } from 'lucide-react';
9
+ import { taxonomies, globalProps } from '@bigbinary/neeto-commons-frontend/initializers';
10
+ import { getQueryParams, buildUrl, hyphenize, showThumbsUpToastr } from '@bigbinary/neeto-commons-frontend/utils';
11
+ import { useProfileImageUpload } from '@bigbinary/neeto-image-uploader-frontend/hooks';
12
+ import { clamp, curry, filter, identical, mergeLeft, assoc, not, pluck, isEmpty, head, reverse, groupBy, prop } from 'ramda';
13
+ import { Trans, useTranslation } from 'react-i18next';
14
+ import { toast } from 'sonner';
15
+ import { F as FormikActionBlock } from './ActionBlock-jgw1N-As.js';
16
+ import { b as FormikSelect, a as FormikForm } from './Select-DZ56UG-l.js';
17
+ import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
18
+ import { useField, useFormikContext } from 'formik';
19
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
20
+ import { u as useFetchRoles, a as useFetchGlobalRoles, S as ScrollToErrorField } from './index-C6ph58Vg.js';
21
+ import { C as CopyToClipboardButton, u as useCountries, P as ProfileImage } from './useCountries-DePOPtue.js';
22
+ import { u as useFetchMembers, f as useFetchMember, g as useCreateMember, h as useMembersCreationStatus, r as refetchMembers, e as useUpdateMember } from './useTeamsApi-CWp4G7JZ.js';
23
+ import { toLabelAndValue, isNotEmpty, filterBy, findBy } from '@bigbinary/neeto-cist';
24
+ import { N as NEETO_AUTH_MANAGE_PRODUCT_URL, g as getSingleInvitationTranslationProps, a as getInviteURL, r as remainingExpiryDays, F as FORM_PAGES, b as FILTER_INVALID_EMAILS, C as COUNTER_PROPS, E as EMAIL_REGEX, D as DEFAULT_COMPONENT_CONFIG, M as MEMBERS_FORM_COMPONENT_MAPPER, c as buildValidationSchema, d as renderInitialValues, e as renderPayload, R as RolesRadioGroup } from './RolesRadioGroup-tSNC-Wtu.js';
25
+ import { DEFAULT_PAGE_SIZE, DEFAULT_PAGE_INDEX, SINGULAR, PLURAL, LANGUAGE_OPTIONS } from '@bigbinary/neeto-commons-frontend/constants';
26
+ import { useMutationWithInvalidation, withT } from '@bigbinary/neeto-commons-frontend/react-utils';
27
+ import { useQuery } from '@tanstack/react-query';
28
+ import axios from 'axios';
29
+ import { B as BASE_URL, Q as QUERY_KEYS, T as TIME_FORMAT_OPTIONS, D as DATE_FORMAT_OPTIONS } from './constants-B1L6arSR.js';
30
+ import { Input, MultiEmailInput } from '@bigbinary/neeto-atoms/formik';
31
+ import { isNeetoAuthApp } from './v2/utils.js';
32
+ import { NeetoTimezoneSelector } from '@bigbinary/neeto-time-zones';
33
+ import { DropdownMenuItem } from '@bigbinary/neeto-atoms/primitives';
34
+ import i18next from 'i18next';
35
+ import MoreDropdown from '@bigbinary/neeto-molecules/v2/MoreDropdown';
36
+
37
+ var _excluded = ["name", "label", "className", "checked", "disabled", "onChange"];
38
+ function ownKeys$3(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; }
39
+ function _objectSpread$3(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$3(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$3(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
40
+ var FormikSwitch = function FormikSwitch(_ref) {
41
+ var name = _ref.name,
42
+ label = _ref.label,
43
+ className = _ref.className,
44
+ checkedProp = _ref.checked,
45
+ disabled = _ref.disabled,
46
+ onChangeProp = _ref.onChange,
47
+ rest = _objectWithoutProperties(_ref, _excluded);
48
+ var _useField = useField(name),
49
+ _useField2 = _slicedToArray(_useField, 3),
50
+ field = _useField2[0],
51
+ helpers = _useField2[2];
52
+ var isChecked = checkedProp !== undefined ? checkedProp : field.value;
53
+ return /*#__PURE__*/jsxs("div", {
54
+ className: cn("flex items-center gap-2", className),
55
+ children: [/*#__PURE__*/jsx(Switch, _objectSpread$3({
56
+ disabled: disabled,
57
+ checked: isChecked,
58
+ id: name,
59
+ onCheckedChange: function onCheckedChange(val) {
60
+ helpers.setValue(val);
61
+ onChangeProp === null || onChangeProp === void 0 || onChangeProp({
62
+ target: {
63
+ checked: val
64
+ }
65
+ });
66
+ }
67
+ }, rest)), label && /*#__PURE__*/jsx(Label, {
68
+ htmlFor: name,
69
+ children: label
70
+ })]
71
+ });
72
+ };
73
+
74
+ var _getQueryParams = getQueryParams(),
75
+ page = _getQueryParams.page,
76
+ pageSize = _getQueryParams.pageSize;
77
+ var DEFAULT_RADIX = 10;
78
+ var DEFAULT_IS_OPEN_VALUES = {
79
+ menuBar: false,
80
+ manageMember: false,
81
+ alert: false
82
+ };
83
+ var DEFAULT_FILTER_VALUES = {
84
+ page: clamp(1, Infinity, parseInt(page)) || DEFAULT_PAGE_INDEX,
85
+ pageSize: clamp(10, 100, parseInt(pageSize)) || DEFAULT_PAGE_SIZE,
86
+ sortBy: "",
87
+ orderBy: "",
88
+ neetoFilters: []
89
+ };
90
+ var DEFAULT_SELECTED_ROWS = {
91
+ active: [],
92
+ emails: [],
93
+ keys: [],
94
+ displayNames: []
95
+ };
96
+
97
+ function ownKeys$2(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; }
98
+ function _objectSpread$2(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$2(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$2(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
99
+ var renderNameColumn = function renderNameColumn(_ref) {
100
+ var config = _ref.config,
101
+ handleUpdateRole = _ref.handleUpdateRole,
102
+ handleUpdateStatus = _ref.handleUpdateStatus,
103
+ tableData = _ref.tableData;
104
+ var name = tableData.displayName,
105
+ imageUrl = tableData.profileImageUrl;
106
+ return /*#__PURE__*/jsxs("div", {
107
+ className: "flex w-full justify-between gap-3",
108
+ children: [/*#__PURE__*/jsxs("div", {
109
+ className: "flex items-center gap-2",
110
+ children: [/*#__PURE__*/jsx(Avatar, {
111
+ className: "size-8",
112
+ user: {
113
+ name: name,
114
+ imageUrl: imageUrl
115
+ }
116
+ }), /*#__PURE__*/jsx(Typography, {
117
+ className: "whitespace-normal text-sm",
118
+ "data-testid": "ntm-member-name-".concat(hyphenize(name)),
119
+ children: name
120
+ })]
121
+ }), renderDropdownButton({
122
+ config: config,
123
+ handleUpdateRole: handleUpdateRole,
124
+ handleUpdateStatus: handleUpdateStatus,
125
+ tableData: tableData
126
+ })]
127
+ });
128
+ };
129
+ var renderDropdownButton = function renderDropdownButton(_ref2) {
130
+ var _config$table, _config$table$dropdow;
131
+ var config = _ref2.config,
132
+ handleUpdateRole = _ref2.handleUpdateRole,
133
+ handleUpdateStatus = _ref2.handleUpdateStatus,
134
+ tableData = _ref2.tableData;
135
+ return /*#__PURE__*/jsx(MoreDropdown, {
136
+ dropdownProps: {
137
+ appendTo: function appendTo() {
138
+ return document.body;
139
+ },
140
+ strategy: "fixed"
141
+ },
142
+ isDisabled: not(config.permissions.update),
143
+ dropdownButtonProps: {
144
+ className: "me-1 my-1",
145
+ "data-testid": "ntm-members-table-row-dropdown-button",
146
+ tooltipProps: {
147
+ content: i18next.t("neetoTeamMembers.tooltips.noPermissionToEditMembers"),
148
+ disabled: config.permissions.update,
149
+ position: "top"
150
+ }
151
+ },
152
+ menuTopChildren: /*#__PURE__*/jsxs(Fragment, {
153
+ children: [/*#__PURE__*/jsx(DropdownMenuItem, {
154
+ className: "cursor-pointer",
155
+ "data-testid": "ntm-edit-member-button",
156
+ onClick: function onClick() {
157
+ return handleUpdateRole(tableData);
158
+ },
159
+ children: i18next.t("neetoTeamMembers.common.edit")
160
+ }), config === null || config === void 0 || (_config$table = config.table) === null || _config$table === void 0 || (_config$table$dropdow = _config$table.dropdownProps) === null || _config$table$dropdow === void 0 ? void 0 : _config$table$dropdow.call(_config$table, tableData), /*#__PURE__*/jsx(DropdownMenuItem, {
161
+ className: "cursor-pointer",
162
+ "data-testid": "ntm-deactivate-member-button",
163
+ onClick: function onClick() {
164
+ return handleUpdateStatus(tableData);
165
+ },
166
+ children: i18next.t("neetoTeamMembers.common.remove")
167
+ })]
168
+ })
169
+ });
170
+ };
171
+ var getDefaultAlertTitle = function getDefaultAlertTitle(_ref3) {
172
+ var member = _ref3.member;
173
+ return member !== null && member !== void 0 && member.active ? i18next.t("neetoTeamMembers.common.remove_", {
174
+ what: taxonomies.member.singular
175
+ }) : i18next.t("neetoTeamMembers.common.activate_", {
176
+ what: taxonomies.member.singular
177
+ });
178
+ };
179
+ var getDefaultAlertMessage = function getDefaultAlertMessage(_ref4) {
180
+ var member = _ref4.member;
181
+ return /*#__PURE__*/jsx(Trans, {
182
+ i18nKey: "neetoTeamMembers.alerts.messages.removeMember",
183
+ values: _objectSpread$2(_objectSpread$2({}, SINGULAR), {}, {
184
+ person: member === null || member === void 0 ? void 0 : member.displayName
185
+ })
186
+ });
187
+ };
188
+ var getDefaultColumns = function getDefaultColumns(_ref5) {
189
+ var config = _ref5.config,
190
+ handleUpdateRole = _ref5.handleUpdateRole,
191
+ handleUpdateStatus = _ref5.handleUpdateStatus,
192
+ otherColumns = _ref5.otherColumns,
193
+ isSize = _ref5.isSize;
194
+ return [{
195
+ accessorKey: "name",
196
+ id: "name",
197
+ size: 300,
198
+ enablePinning: isNotEmpty(otherColumns) && !isSize("mobile"),
199
+ cell: function cell(_ref6) {
200
+ var row = _ref6.row;
201
+ return renderNameColumn({
202
+ config: config,
203
+ handleUpdateRole: handleUpdateRole,
204
+ handleUpdateStatus: handleUpdateStatus,
205
+ tableData: row.original
206
+ });
207
+ },
208
+ enableSorting: true,
209
+ header: i18next.t("neetoTeamMembers.common.name"),
210
+ enableHiding: false
211
+ }, {
212
+ accessorKey: "email",
213
+ id: "email",
214
+ enableSorting: true,
215
+ size: 350,
216
+ header: i18next.t("neetoTeamMembers.common.email", SINGULAR)
217
+ }, {
218
+ accessorKey: "role",
219
+ id: "organization_role",
220
+ enableSorting: true,
221
+ size: 200,
222
+ header: i18next.t("neetoTeamMembers.common.role", SINGULAR)
223
+ }];
224
+ };
225
+ var removeExcludedRole = curry(function (excludedRoles, role) {
226
+ return !(excludedRoles !== null && excludedRoles !== void 0 && excludedRoles.includes(role === null || role === void 0 ? void 0 : role.name));
227
+ });
228
+ var getColumnData = function getColumnData(_ref7) {
229
+ var _config$otherColumns;
230
+ var config = _ref7.config,
231
+ handleUpdateRole = _ref7.handleUpdateRole,
232
+ handleUpdateStatus = _ref7.handleUpdateStatus,
233
+ isSize = _ref7.isSize;
234
+ var otherColumns = (_config$otherColumns = config === null || config === void 0 ? void 0 : config.otherColumns) !== null && _config$otherColumns !== void 0 ? _config$otherColumns : [];
235
+ var defaultColumns = getDefaultColumns({
236
+ config: config,
237
+ handleUpdateRole: handleUpdateRole,
238
+ handleUpdateStatus: handleUpdateStatus,
239
+ otherColumns: otherColumns,
240
+ isSize: isSize
241
+ });
242
+ var columns = defaultColumns.map(function (column) {
243
+ var otherColumn = otherColumns.find(function (col) {
244
+ return identical(col.accessorKey || col.id, column.accessorKey || column.id);
245
+ });
246
+ return otherColumn || column;
247
+ });
248
+ otherColumns.forEach(function (otherColumn) {
249
+ var key = otherColumn.accessorKey || otherColumn.id;
250
+ var exists = columns.find(function (col) {
251
+ return identical(col.accessorKey || col.id, key);
252
+ });
253
+ if (!exists) columns.push(otherColumn);
254
+ });
255
+ return columns;
256
+ };
257
+ var renderUpdateAlert = function renderUpdateAlert(field, props) {
258
+ var _config$alert;
259
+ var config = props.config,
260
+ member = props.member;
261
+ if (config !== null && config !== void 0 && (_config$alert = config.alert) !== null && _config$alert !== void 0 && _config$alert[field]) {
262
+ var _config$alert2;
263
+ return (_config$alert2 = config.alert) === null || _config$alert2 === void 0 ? void 0 : _config$alert2[field]({
264
+ active: member === null || member === void 0 ? void 0 : member.active,
265
+ id: member === null || member === void 0 ? void 0 : member.id,
266
+ name: member === null || member === void 0 ? void 0 : member.displayName
267
+ });
268
+ }
269
+ return field === "title" ? getDefaultAlertTitle(props) : getDefaultAlertMessage(props);
270
+ };
271
+ var handlePageChange = function handlePageChange(setFilters, history) {
272
+ return function (page, pageSize) {
273
+ var searchParams = getQueryParams({
274
+ toCamelCase: false
275
+ });
276
+ history.replace(buildUrl(window.location.pathname, mergeLeft({
277
+ page: page,
278
+ page_size: pageSize
279
+ }, searchParams)));
280
+ setFilters(mergeLeft({
281
+ page: page,
282
+ pageSize: pageSize
283
+ }));
284
+ };
285
+ };
286
+ var defaultNeetoFiltersColumns = function defaultNeetoFiltersColumns() {
287
+ return [{
288
+ key: "email",
289
+ label: i18next.t("neetoTeamMembers.common.email", SINGULAR),
290
+ model: "User",
291
+ node: "email",
292
+ showRuleSelector: true,
293
+ type: "text"
294
+ }, {
295
+ key: "name",
296
+ label: i18next.t("neetoTeamMembers.common.name"),
297
+ model: "User",
298
+ node: "first_name,last_name",
299
+ type: "text",
300
+ values: ""
301
+ }, {
302
+ key: "role",
303
+ label: i18next.t("neetoTeamMembers.common.role", SINGULAR),
304
+ model: "OrganizationRole",
305
+ node: "organization_role.name",
306
+ type: "multi_option",
307
+ values: []
308
+ }];
309
+ };
310
+ var buildFilterColumns = function buildFilterColumns(_ref8) {
311
+ var _ref8$options = _ref8.options,
312
+ _ref8$options$emails = _ref8$options.emails,
313
+ emails = _ref8$options$emails === void 0 ? [] : _ref8$options$emails,
314
+ _ref8$options$organiz = _ref8$options.organizationRoles,
315
+ organizationRoles = _ref8$options$organiz === void 0 ? [] : _ref8$options$organiz,
316
+ _ref8$emailConfig = _ref8.emailConfig,
317
+ setSearchTerm = _ref8$emailConfig.setSearchTerm,
318
+ isLoading = _ref8$emailConfig.isLoading;
319
+ var columnValues = {
320
+ email: emails.map(toLabelAndValue),
321
+ role: organizationRoles.map(toLabelAndValue)
322
+ };
323
+ return defaultNeetoFiltersColumns().map(function (column) {
324
+ var values = columnValues[column.key];
325
+ if (column.key === "role") return assoc("values", values, column);
326
+ var emailConfig = {
327
+ values: values,
328
+ isLoading: isLoading,
329
+ onInputChange: setSearchTerm
330
+ };
331
+ return mergeLeft(emailConfig, column);
332
+ });
333
+ };
334
+ var getFilteredRoles = function getFilteredRoles() {
335
+ var roles = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
336
+ var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
337
+ return filter(removeExcludedRole(config === null || config === void 0 ? void 0 : config.excludedRoles), roles);
338
+ };
339
+ var generateNoDataContent = function generateNoDataContent(_ref9) {
340
+ var buttonProps = _ref9.buttonProps;
341
+ var disabled = buttonProps.disabled,
342
+ onClick = buttonProps.onClick;
343
+ var noDataTitleTranslationKey = "notFound_";
344
+ var noDataTitle = i18next.t("neetoTeamMembers.common.".concat(noDataTitleTranslationKey), {
345
+ what: taxonomies.member.plural
346
+ });
347
+ var noDataButtonProps = {
348
+ "data-testid": "ntm-add-member-button",
349
+ disabled: disabled,
350
+ label: i18next.t("neetoTeamMembers.common.addNew_", {
351
+ what: taxonomies.member.singular
352
+ }),
353
+ onClick: onClick
354
+ };
355
+ return {
356
+ noDataTitle: noDataTitle,
357
+ noDataButtonProps: noDataButtonProps
358
+ };
359
+ };
360
+
361
+ var AppList = function AppList(_ref) {
362
+ var _globalProps$user;
363
+ var globalRoles = _ref.globalRoles,
364
+ savedStateRef = _ref.savedStateRef;
365
+ var _useTranslation = useTranslation(),
366
+ t = _useTranslation.t;
367
+ var _useState = useState(savedStateRef.current.isAppListEnabled),
368
+ _useState2 = _slicedToArray(_useState, 2),
369
+ isAppListEnabled = _useState2[0],
370
+ setIsAppListEnabled = _useState2[1];
371
+ var _useFormikContext = useFormikContext(),
372
+ _useFormikContext$val = _useFormikContext.values,
373
+ _useFormikContext$val2 = _useFormikContext$val.emails,
374
+ emails = _useFormikContext$val2 === void 0 ? [] : _useFormikContext$val2,
375
+ _useFormikContext$val3 = _useFormikContext$val.appRoles,
376
+ appRoles = _useFormikContext$val3 === void 0 ? [] : _useFormikContext$val3,
377
+ setFieldValue = _useFormikContext.setFieldValue;
378
+ var selectedEmail = pluck("value", emails);
379
+ var isManageProductsLinkEnabled = ((_globalProps$user = globalProps.user) === null || _globalProps$user === void 0 ? void 0 : _globalProps$user.isOwner) && Object.keys(globalRoles).length >= 3;
380
+ useEffect(function () {
381
+ if (savedStateRef.current.isAppListEnabled !== isAppListEnabled) {
382
+ appRoles === null || appRoles === void 0 || appRoles.forEach(function (appRole, index) {
383
+ var _globalProps$appName;
384
+ 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))) {
385
+ setFieldValue("appRoles[".concat(index, "].isEnabled"), true);
386
+ return;
387
+ }
388
+ setFieldValue("appRoles[".concat(index, "].isEnabled"), isAppListEnabled);
389
+ });
390
+ }
391
+ savedStateRef.current.isAppListEnabled = isAppListEnabled;
392
+ }, [isAppListEnabled]); // eslint-disable-line react-hooks/exhaustive-deps
393
+
394
+ var buildRoleOptions = function buildRoleOptions(roles) {
395
+ return roles.map(function (role) {
396
+ return toLabelAndValue(role.name);
397
+ });
398
+ };
399
+ return /*#__PURE__*/jsxs("div", {
400
+ className: "flex flex-col gap-6",
401
+ children: [/*#__PURE__*/jsxs("div", {
402
+ className: "w-full space-y-3",
403
+ children: [/*#__PURE__*/jsxs("div", {
404
+ className: "flex items-start gap-2",
405
+ children: [/*#__PURE__*/jsx(Checkbox, {
406
+ checked: isAppListEnabled,
407
+ "data-testid": "ntm-manage-members-app-list-checkbox",
408
+ id: "app-list-toggle",
409
+ onCheckedChange: function onCheckedChange() {
410
+ return setIsAppListEnabled(not);
411
+ }
412
+ }), /*#__PURE__*/jsx(Label, {
413
+ className: "leading-relaxed",
414
+ htmlFor: "app-list-toggle",
415
+ children: /*#__PURE__*/jsx(Typography, {
416
+ className: "text-sm leading-relaxed",
417
+ children: /*#__PURE__*/jsx(Trans, {
418
+ i18nKey: "neetoTeamMembers.helpers.addMembersToNeetoProducts",
419
+ values: {
420
+ emails: selectedEmail
421
+ }
422
+ })
423
+ })
424
+ })]
425
+ }), isManageProductsLinkEnabled && /*#__PURE__*/jsx(Typography, {
426
+ className: "text-sm",
427
+ children: /*#__PURE__*/jsx(Trans, {
428
+ i18nKey: "neetoTeamMembers.helpers.manageProducts",
429
+ components: {
430
+ button: /*#__PURE__*/jsx(Button, {
431
+ asChild: true,
432
+ variant: "link",
433
+ children: /*#__PURE__*/jsx("a", {
434
+ href: NEETO_AUTH_MANAGE_PRODUCT_URL,
435
+ children: "manage"
436
+ })
437
+ })
438
+ }
439
+ })
440
+ })]
441
+ }), /*#__PURE__*/jsx("div", {
442
+ className: "w-full",
443
+ children: appRoles.map(function (_ref2, index) {
444
+ var _globalProps$appName2;
445
+ var appName = _ref2.appName,
446
+ isEnabled = _ref2.isEnabled;
447
+ var isCurrentApp = appName === ((_globalProps$appName2 = globalProps.appName) === null || _globalProps$appName2 === void 0 ? void 0 : _globalProps$appName2.substring(5));
448
+ var isAppRoleSelectionChecked = isCurrentApp || isEnabled;
449
+ return /*#__PURE__*/jsxs("div", {
450
+ className: "flex w-full items-center justify-between py-2",
451
+ children: [/*#__PURE__*/jsx(Tooltip, {
452
+ content: isCurrentApp ? t("neetoTeamMembers.tooltips.hostAppIsRequired") : null,
453
+ children: /*#__PURE__*/jsx("span", {
454
+ children: /*#__PURE__*/jsx(FormikSwitch, {
455
+ checked: isAppRoleSelectionChecked,
456
+ disabled: isCurrentApp,
457
+ name: "appsRoles[".concat(index, "].isEnabled"),
458
+ label: t("neetoTeamMembers.labels.neeto_", {
459
+ product: appName
460
+ }),
461
+ onChange: function onChange(_ref3) {
462
+ var target = _ref3.target;
463
+ setFieldValue("appRoles[".concat(index, "].isEnabled"), target.checked);
464
+ }
465
+ })
466
+ })
467
+ }), /*#__PURE__*/jsx(Tooltip, {
468
+ content: isCurrentApp ? t("neetoTeamMembers.tooltips.goBackToChangeRole") : null,
469
+ children: /*#__PURE__*/jsx("span", {
470
+ className: "w-1/2 max-w-[250px]",
471
+ children: /*#__PURE__*/jsx(FormikSelect, {
472
+ isDisabled: isCurrentApp || !isEnabled,
473
+ name: "appRoles[".concat(index, "].activeRole"),
474
+ options: buildRoleOptions(globalRoles[appName]),
475
+ onChange: function onChange(_ref4) {
476
+ var value = _ref4.value;
477
+ setFieldValue("appRoles[".concat(index, "].activeRole"), value);
478
+ }
479
+ })
480
+ })
481
+ })]
482
+ }, appName);
483
+ })
484
+ })]
485
+ });
486
+ };
487
+
488
+ var Confirmation = function Confirmation() {
489
+ var _globalProps$organiza;
490
+ var _useTranslation = useTranslation(),
491
+ t = _useTranslation.t;
492
+ var _useFormikContext = useFormikContext(),
493
+ _useFormikContext$val = _useFormikContext.values,
494
+ emails = _useFormikContext$val.emails,
495
+ role = _useFormikContext$val.role,
496
+ appRoles = _useFormikContext$val.appRoles;
497
+ var selectedEmail = pluck("value", emails);
498
+ var activeAppRoles = filterBy({
499
+ isEnabled: true
500
+ }, appRoles);
501
+ return activeAppRoles.length > 1 ? /*#__PURE__*/jsxs("div", {
502
+ className: "flex flex-col gap-6",
503
+ children: [/*#__PURE__*/jsx("div", {
504
+ className: "w-full",
505
+ children: /*#__PURE__*/jsx(Typography, {
506
+ className: "text-sm leading-relaxed",
507
+ children: /*#__PURE__*/jsx(Trans, {
508
+ i18nKey: "neetoTeamMembers.helpers.multipleProductInvitation",
509
+ values: {
510
+ count: selectedEmail.length,
511
+ emails: selectedEmail,
512
+ orgName: (_globalProps$organiza = globalProps.organization) === null || _globalProps$organiza === void 0 ? void 0 : _globalProps$organiza.name
513
+ }
514
+ })
515
+ })
516
+ }), /*#__PURE__*/jsxs("table", {
517
+ className: "w-full border-collapse",
518
+ children: [/*#__PURE__*/jsx("thead", {
519
+ children: /*#__PURE__*/jsxs("tr", {
520
+ children: [/*#__PURE__*/jsx("th", {
521
+ className: "border border-border p-2 text-start text-xs font-bold uppercase text-muted-foreground",
522
+ children: t("neetoTeamMembers.common.productName")
523
+ }), /*#__PURE__*/jsx("th", {
524
+ className: "border border-border p-2 text-start text-xs font-bold uppercase text-muted-foreground",
525
+ children: t("neetoTeamMembers.common.role", SINGULAR)
526
+ })]
527
+ })
528
+ }), /*#__PURE__*/jsx("tbody", {
529
+ children: activeAppRoles.map(function (_ref) {
530
+ var appName = _ref.appName,
531
+ activeRole = _ref.activeRole;
532
+ return /*#__PURE__*/jsxs("tr", {
533
+ children: [/*#__PURE__*/jsx("td", {
534
+ className: "border border-border p-2",
535
+ children: /*#__PURE__*/jsx(Typography, {
536
+ className: "text-sm leading-relaxed",
537
+ children: t("neetoTeamMembers.labels.neeto_", {
538
+ product: appName
539
+ })
540
+ })
541
+ }), /*#__PURE__*/jsx("td", {
542
+ className: "border border-border p-2",
543
+ children: /*#__PURE__*/jsx(Typography, {
544
+ className: "text-sm leading-relaxed",
545
+ children: activeRole
546
+ })
547
+ })]
548
+ }, appName);
549
+ })
550
+ })]
551
+ })]
552
+ }) : /*#__PURE__*/jsx(Typography, {
553
+ className: "text-sm leading-relaxed",
554
+ children: /*#__PURE__*/jsx(Trans, {
555
+ i18nKey: "neetoTeamMembers.helpers.singleProductInvitation",
556
+ values: getSingleInvitationTranslationProps({
557
+ activeAppRoles: activeAppRoles,
558
+ role: role,
559
+ selectedEmail: selectedEmail
560
+ })
561
+ })
562
+ });
563
+ };
564
+
565
+ // eslint-disable-next-line @bigbinary/neeto/no-axios-import-outside-apis
566
+ var fetch = function fetch() {
567
+ return axios.get("".concat(BASE_URL, "/api/v1/invite_links"));
568
+ };
569
+ var create = function create(payload) {
570
+ return axios.post("".concat(BASE_URL, "/api/v1/invite_links"), {
571
+ inviteLink: payload
572
+ });
573
+ };
574
+ var regenerate = function regenerate(inviteLinkId, payload) {
575
+ return axios.put("".concat(BASE_URL, "/api/v1/invite_links/").concat(inviteLinkId), {
576
+ inviteLink: payload
577
+ });
578
+ };
579
+ var inviteLinksApi = {
580
+ fetch: fetch,
581
+ create: create,
582
+ regenerate: regenerate
583
+ };
584
+
585
+ 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; }
586
+ 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; }
587
+ var useFetchInviteLinks = function useFetchInviteLinks() {
588
+ return useQuery({
589
+ queryKey: [QUERY_KEYS.INVITATION_LINK],
590
+ queryFn: function queryFn() {
591
+ return inviteLinksApi.fetch();
592
+ }
593
+ });
594
+ };
595
+ var useCreateInviteLinks = function useCreateInviteLinks() {
596
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
597
+ return useMutationWithInvalidation(function (payload) {
598
+ return inviteLinksApi.create(payload);
599
+ }, _objectSpread$1({
600
+ keysToInvalidate: [[QUERY_KEYS.INVITATION_LINK]]
601
+ }, options));
602
+ };
603
+ var useRegenerateInviteLink = function useRegenerateInviteLink() {
604
+ return useMutationWithInvalidation(function (_ref) {
605
+ var inviteLinkId = _ref.inviteLinkId,
606
+ payload = _ref.payload;
607
+ return inviteLinksApi.regenerate(inviteLinkId, payload);
608
+ }, {
609
+ keysToInvalidate: [[QUERY_KEYS.INVITATION_LINK]]
610
+ });
611
+ };
612
+
613
+ var InviteLink$1 = function InviteLink(_ref) {
614
+ var _inviteLinks$, _inviteLinks$2, _inviteLinks$3, _inviteLinks$4, _inviteLinks$5, _inviteLinks$6;
615
+ var t = _ref.t,
616
+ roles = _ref.roles;
617
+ var _useCreateInviteLinks = useCreateInviteLinks(),
618
+ createInviteLink = _useCreateInviteLinks.mutate,
619
+ isCreateLinkPending = _useCreateInviteLinks.isPending;
620
+ var _useRegenerateInviteL = useRegenerateInviteLink(),
621
+ regenerateLink = _useRegenerateInviteL.mutate;
622
+ var _useFetchInviteLinks = useFetchInviteLinks(),
623
+ _useFetchInviteLinks$ = _useFetchInviteLinks.data,
624
+ _useFetchInviteLinks$2 = _useFetchInviteLinks$ === void 0 ? {} : _useFetchInviteLinks$,
625
+ _useFetchInviteLinks$3 = _useFetchInviteLinks$2.inviteLinks,
626
+ inviteLinks = _useFetchInviteLinks$3 === void 0 ? [] : _useFetchInviteLinks$3,
627
+ isFetchLinkLoading = _useFetchInviteLinks.isLoading;
628
+ var _useFormikContext = useFormikContext(),
629
+ values = _useFormikContext.values;
630
+ var isInviteLinkEmpty = !isFetchLinkLoading && isEmpty(inviteLinks);
631
+ var handleRegenerate = function handleRegenerate() {
632
+ var _findBy = findBy({
633
+ name: values.role
634
+ }, roles),
635
+ roleId = _findBy.id;
636
+ if (isEmpty(inviteLinks)) {
637
+ createInviteLink({
638
+ organizationRoleId: roleId
639
+ });
640
+ return;
641
+ }
642
+ regenerateLink({
643
+ inviteLinkId: inviteLinks[0].id,
644
+ payload: {
645
+ organizationRoleId: roleId
646
+ }
647
+ });
648
+ };
649
+ if (isFetchLinkLoading || isCreateLinkPending) {
650
+ return /*#__PURE__*/jsx("div", {
651
+ className: "flex w-full items-center justify-center",
652
+ children: /*#__PURE__*/jsx(Spinner, {})
653
+ });
654
+ }
655
+ return /*#__PURE__*/jsxs("div", {
656
+ className: "w-full space-y-2",
657
+ children: [/*#__PURE__*/jsxs("div", {
658
+ className: "flex items-center gap-2 pt-1",
659
+ children: [/*#__PURE__*/jsxs("div", {
660
+ className: "relative flex min-w-0 grow items-center truncate neeto-ui-rounded-md border border-border bg-muted/50 leading-none",
661
+ children: [/*#__PURE__*/jsx("div", {
662
+ className: "relative min-w-0 grow truncate p-2 leading-none",
663
+ children: !isInviteLinkEmpty && getInviteURL(inviteLinks === null || inviteLinks === void 0 || (_inviteLinks$ = inviteLinks[0]) === null || _inviteLinks$ === void 0 ? void 0 : _inviteLinks$.token)
664
+ }), isInviteLinkEmpty ? /*#__PURE__*/jsx(Button, {
665
+ className: "rounded-s-none",
666
+ onClick: handleRegenerate,
667
+ children: t("neetoTeamMembers.buttons.generateLink")
668
+ }) : /*#__PURE__*/jsx(CopyToClipboardButton, {
669
+ className: "rounded-s-none",
670
+ value: getInviteURL(inviteLinks === null || inviteLinks === void 0 || (_inviteLinks$2 = inviteLinks[0]) === null || _inviteLinks$2 === void 0 ? void 0 : _inviteLinks$2.token),
671
+ children: t("neetoTeamMembers.buttons.copyLink")
672
+ })]
673
+ }), !isInviteLinkEmpty && /*#__PURE__*/jsx(DropdownMenu, {
674
+ buttonStyle: "text",
675
+ className: "shrink-0",
676
+ icon: EllipsisVertical,
677
+ children: /*#__PURE__*/jsx(DropdownMenu.Menu, {
678
+ children: /*#__PURE__*/jsx(DropdownMenu.MenuItem, {
679
+ children: /*#__PURE__*/jsx(DropdownMenu.MenuItem.Button, {
680
+ onClick: handleRegenerate,
681
+ children: t("neetoTeamMembers.buttons.regenerateLink")
682
+ })
683
+ })
684
+ })
685
+ })]
686
+ }), /*#__PURE__*/jsx("div", {
687
+ children: !isInviteLinkEmpty && /*#__PURE__*/jsx(Typography, {
688
+ className: "text-xs leading-relaxed text-muted-foreground",
689
+ children: /*#__PURE__*/jsx(Trans, {
690
+ components: {
691
+ strong: /*#__PURE__*/jsx("strong", {})
692
+ },
693
+ i18nKey: "neetoTeamMembers.alerts.messages.inviteLink",
694
+ values: {
695
+ expiryDays: remainingExpiryDays(inviteLinks === null || inviteLinks === void 0 || (_inviteLinks$3 = inviteLinks[0]) === null || _inviteLinks$3 === void 0 ? void 0 : _inviteLinks$3.expiresAt),
696
+ role: inviteLinks === null || inviteLinks === void 0 || (_inviteLinks$4 = inviteLinks[0]) === null || _inviteLinks$4 === void 0 || (_inviteLinks$4 = _inviteLinks$4.organizationRole) === null || _inviteLinks$4 === void 0 ? void 0 : _inviteLinks$4.name,
697
+ inviteLimit: inviteLinks === null || inviteLinks === void 0 || (_inviteLinks$5 = inviteLinks[0]) === null || _inviteLinks$5 === void 0 ? void 0 : _inviteLinks$5.inviteLimit,
698
+ appName: globalProps.appName,
699
+ emailDomain: inviteLinks === null || inviteLinks === void 0 || (_inviteLinks$6 = inviteLinks[0]) === null || _inviteLinks$6 === void 0 ? void 0 : _inviteLinks$6.domain
700
+ }
701
+ })
702
+ })
703
+ })]
704
+ });
705
+ };
706
+ var InviteLink = withT(InviteLink$1);
707
+
708
+ var MultipleEmailInput = function MultipleEmailInput(_ref) {
709
+ var _head;
710
+ var _ref$emails = _ref.emails,
711
+ emails = _ref$emails === void 0 ? [] : _ref$emails,
712
+ innerRef = _ref.innerRef,
713
+ _ref$selectedMember = _ref.selectedMember,
714
+ selectedMember = _ref$selectedMember === void 0 ? null : _ref$selectedMember,
715
+ setCurrentPage = _ref.setCurrentPage;
716
+ var isInviteLinkFeatureEnabled = !isNeetoAuthApp();
717
+ var _useTranslation = useTranslation(),
718
+ t = _useTranslation.t;
719
+ var _useFormikContext = useFormikContext(),
720
+ setFieldValue = _useFormikContext.setFieldValue;
721
+ var handleInputChange = function handleInputChange(event) {
722
+ var email = event.target.value;
723
+ var emailList = [{
724
+ label: email,
725
+ value: email,
726
+ valid: EMAIL_REGEX.test(email)
727
+ }];
728
+ setFieldValue("emails", emailList);
729
+ };
730
+ return /*#__PURE__*/jsx("div", {
731
+ className: "w-full",
732
+ children: selectedMember ? /*#__PURE__*/jsx(Input, {
733
+ "data-testid": "ntm-manage-member-email-input",
734
+ name: "emails",
735
+ type: "email",
736
+ value: (_head = head(emails)) === null || _head === void 0 ? void 0 : _head.value,
737
+ label: /*#__PURE__*/jsx("span", {
738
+ className: "flex w-full justify-between",
739
+ children: /*#__PURE__*/jsx(Typography, {
740
+ className: "text-sm",
741
+ children: t("neetoTeamMembers.common.email", SINGULAR)
742
+ })
743
+ }),
744
+ onChange: handleInputChange
745
+ }) : /*#__PURE__*/jsxs("div", {
746
+ children: [/*#__PURE__*/jsxs("div", {
747
+ className: "flex items-center justify-between pb-2",
748
+ children: [/*#__PURE__*/jsxs(Label, {
749
+ children: [t("neetoTeamMembers.common.email", PLURAL), /*#__PURE__*/jsx("span", {
750
+ className: "text-destructive",
751
+ children: " *"
752
+ })]
753
+ }), isInviteLinkFeatureEnabled && /*#__PURE__*/jsx(Button, {
754
+ variant: "link",
755
+ onClick: function onClick() {
756
+ return setCurrentPage(FORM_PAGES.INVITE_LINK);
757
+ },
758
+ children: t("neetoTeamMembers.buttons.inviteLink")
759
+ })]
760
+ }), /*#__PURE__*/jsx(MultiEmailInput, {
761
+ required: true,
762
+ counter: COUNTER_PROPS,
763
+ "data-testid": "ntm-manage-member-email-input",
764
+ filterInvalidEmails: FILTER_INVALID_EMAILS,
765
+ helpText: t("neetoTeamMembers.helpers.enterMultipleEmails"),
766
+ label: "",
767
+ name: "emails",
768
+ placeholder: t("neetoTeamMembers.placeholders.email"),
769
+ ref: innerRef
770
+ })]
771
+ })
772
+ });
773
+ };
774
+
775
+ var NameInputs = withT(function (_ref) {
776
+ var t = _ref.t,
777
+ innerRef = _ref.innerRef;
778
+ return /*#__PURE__*/jsxs("div", {
779
+ className: "flex w-full gap-4",
780
+ children: [/*#__PURE__*/jsx(Input, {
781
+ "data-testid": "ntm-edit-member-first-name-text-field",
782
+ label: t("neetoTeamMembers.labels.firstName"),
783
+ name: "firstName",
784
+ ref: innerRef
785
+ }), /*#__PURE__*/jsx(Input, {
786
+ "data-testid": "ntm-edit-member-last-name-text-field",
787
+ label: t("neetoTeamMembers.labels.lastName"),
788
+ name: "lastName"
789
+ })]
790
+ });
791
+ });
792
+
793
+ var ProfileSettings = function ProfileSettings(_ref) {
794
+ var member = _ref.member,
795
+ setFieldValue = _ref.setFieldValue,
796
+ isTimezoneFieldDisabled = _ref.isTimezoneFieldDisabled;
797
+ var _useTranslation = useTranslation(),
798
+ t = _useTranslation.t;
799
+ var setFieldValueRef = useRef(setFieldValue);
800
+ useEffect(function () {
801
+ setFieldValueRef.current = setFieldValue;
802
+ }, [setFieldValue]);
803
+ var _useCountries = useCountries(),
804
+ countryDropdownOptions = _useCountries.countryDropdownOptions,
805
+ isFetchingCountriesList = _useCountries.isFetchingCountriesList,
806
+ handleCountryChange = _useCountries.handleCountryChange;
807
+ var timezoneContainerRef = useRef(null);
808
+ useEffect(function () {
809
+ var node = timezoneContainerRef.current;
810
+ if (!node) return undefined;
811
+ new NeetoTimezoneSelector(node, {
812
+ isTimeFormat24H: member.timeFormat === "24h",
813
+ className: "w-full z-10",
814
+ position: "bottom",
815
+ initialValue: member.timeZone,
816
+ onChange: function onChange(_ref2) {
817
+ var main = _ref2.main;
818
+ return setFieldValueRef.current("timeZone", main);
819
+ },
820
+ disabled: isTimezoneFieldDisabled
821
+ });
822
+ return function () {
823
+ node.innerHTML = "";
824
+ };
825
+ }, [member.timeZone, member.timeFormat, isTimezoneFieldDisabled]);
826
+ useEffect(function () {
827
+ var country = findBy({
828
+ value: member.countryIdentifier
829
+ }, countryDropdownOptions);
830
+ if (country) handleCountryChange(country);
831
+ }, [member.countryIdentifier, countryDropdownOptions, handleCountryChange]);
832
+ return /*#__PURE__*/jsxs("div", {
833
+ className: "w-full space-y-4",
834
+ "data-cy": "ntm-profile-settings",
835
+ children: [/*#__PURE__*/jsx(FormikSelect, {
836
+ "data-cy": "ntm-edit-member-country-select",
837
+ isLoading: isFetchingCountriesList,
838
+ label: t("neetoTeamMembers.profile.inputs.label.country"),
839
+ name: "countryId",
840
+ options: countryDropdownOptions,
841
+ onChange: function onChange(value) {
842
+ var option = countryDropdownOptions.find(function (o) {
843
+ return o.value === value;
844
+ });
845
+ var dependentFields = handleCountryChange(option);
846
+ setFieldValue("dateFormat", dependentFields === null || dependentFields === void 0 ? void 0 : dependentFields.dateFormat);
847
+ }
848
+ }), /*#__PURE__*/jsx(FormikSelect, {
849
+ "data-cy": "ntm-edit-member-language-select",
850
+ label: t("neetoTeamMembers.profile.inputs.label.language"),
851
+ name: "language",
852
+ options: LANGUAGE_OPTIONS
853
+ }), /*#__PURE__*/jsxs("div", {
854
+ className: "space-y-2",
855
+ children: [/*#__PURE__*/jsx(Label, {
856
+ children: t("neetoTeamMembers.profile.inputs.label.timeZone")
857
+ }), /*#__PURE__*/jsx("div", {
858
+ "data-cy": "ntm-edit-member-timezone-select",
859
+ ref: timezoneContainerRef,
860
+ className: cn("w-full grow", {
861
+ "pointer-events-none bg-muted": isTimezoneFieldDisabled
862
+ })
863
+ })]
864
+ }), /*#__PURE__*/jsx(FormikSelect, {
865
+ "data-cy": "ntm-edit-member-time-format-select",
866
+ label: t("neetoTeamMembers.profile.inputs.label.preferredTimeFormat"),
867
+ name: "timeFormat",
868
+ options: TIME_FORMAT_OPTIONS
869
+ }), /*#__PURE__*/jsx(FormikSelect, {
870
+ "data-cy": "ntm-edit-member-date-format-select",
871
+ label: t("neetoTeamMembers.profile.inputs.label.preferredDateFormat"),
872
+ name: "dateFormat",
873
+ options: DATE_FORMAT_OPTIONS
874
+ })]
875
+ });
876
+ };
877
+
878
+ 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; }
879
+ 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; }
880
+ var ManageMember = function ManageMember(_ref) {
881
+ var _manageMemberComponen, _config$additionalFie2;
882
+ var config = _ref.config,
883
+ onComplete = _ref.onComplete,
884
+ _ref$roles = _ref.roles,
885
+ roles = _ref$roles === void 0 ? [] : _ref$roles,
886
+ _ref$selectedMember = _ref.selectedMember,
887
+ selectedMember = _ref$selectedMember === void 0 ? null : _ref$selectedMember,
888
+ _ref$componentConfig = _ref.componentConfig,
889
+ componentConfig = _ref$componentConfig === void 0 ? {} : _ref$componentConfig;
890
+ var _useTranslation = useTranslation(),
891
+ t = _useTranslation.t;
892
+ var _useState = useState(false),
893
+ _useState2 = _slicedToArray(_useState, 2),
894
+ isCreationStatusPollingEnabled = _useState2[0],
895
+ setIsCreationStatusPollingEnabled = _useState2[1];
896
+ var isViewPermissionGranted = config.permissions.view;
897
+ var isNotDevelopment = globalProps.railsEnv !== "development";
898
+ var _useFetchMembers = useFetchMembers({
899
+ enabled: isViewPermissionGranted
900
+ }),
901
+ team = _useFetchMembers.data;
902
+ var _useFetchMember = useFetchMember(selectedMember === null || selectedMember === void 0 ? void 0 : selectedMember.id, {
903
+ enabled: !!selectedMember
904
+ }),
905
+ memberShowData = _useFetchMember.data,
906
+ isMemberDetailLoading = _useFetchMember.isLoading;
907
+ var isTimezoneFieldDisabled = selectedMember && memberShowData && !selectedMember.isOwner && !memberShowData.timezoneChangeEnabled;
908
+ var _useState3 = useState(FORM_PAGES.MAIN),
909
+ _useState4 = _slicedToArray(_useState3, 2),
910
+ currentPage = _useState4[0],
911
+ setCurrentPage = _useState4[1];
912
+ var formReference = useRef(null);
913
+ var inputReference = useRef(null);
914
+ var appListSavedStateReference = useRef({
915
+ isAppListEnabled: true
916
+ });
917
+ var shouldSkipAppListPage = useRef(false);
918
+ var formikValues = useRef(null);
919
+ var manageMemberComponentConfig = _objectSpread(_objectSpread({}, DEFAULT_COMPONENT_CONFIG), {}, {
920
+ initialFocusRef: inputReference
921
+ }, componentConfig);
922
+ var Component = MEMBERS_FORM_COMPONENT_MAPPER[manageMemberComponentConfig.type || "pane"];
923
+ var haveToFetchRoles = isEmpty(roles) && isViewPermissionGranted;
924
+ var isEditForm = !!selectedMember;
925
+ var isLastPage = currentPage === FORM_PAGES.CONFIRMATION || isEditForm;
926
+ var _useFetchRoles = useFetchRoles({
927
+ select: function select(response) {
928
+ var _response$organizatio;
929
+ return reverse((_response$organizatio = response.organizationRoles) !== null && _response$organizatio !== void 0 ? _response$organizatio : []);
930
+ },
931
+ enabled: haveToFetchRoles
932
+ }),
933
+ _useFetchRoles$data = _useFetchRoles.data,
934
+ rolesList = _useFetchRoles$data === void 0 ? roles : _useFetchRoles$data,
935
+ isRolesLoading = _useFetchRoles.isLoading;
936
+ var _useFetchGlobalRoles = useFetchGlobalRoles({
937
+ select: function select(response) {
938
+ return groupBy(prop("appName"), response !== null && response !== void 0 ? response : []);
939
+ },
940
+ enabled: isNotDevelopment && !selectedMember && isViewPermissionGranted
941
+ }),
942
+ _useFetchGlobalRoles$ = _useFetchGlobalRoles.data,
943
+ globalRoles = _useFetchGlobalRoles$ === void 0 ? {} : _useFetchGlobalRoles$,
944
+ isGlobalRolesLoading = _useFetchGlobalRoles.isLoading;
945
+ var filteredRoles = getFilteredRoles(rolesList, config);
946
+ var _useCreateMember = useCreateMember({
947
+ onSuccess: function onSuccess() {
948
+ return setIsCreationStatusPollingEnabled(true);
949
+ }
950
+ }),
951
+ _useCreateMember$data = _useCreateMember.data,
952
+ _useCreateMember$data2 = _useCreateMember$data === void 0 ? {} : _useCreateMember$data,
953
+ jobId = _useCreateMember$data2.jobId,
954
+ createMember = _useCreateMember.mutate,
955
+ isCreatingMember = _useCreateMember.isPending;
956
+ var refetchInterval = function refetchInterval(query) {
957
+ var _ref2 = query.state.data || {},
958
+ isCompleted = _ref2.isCompleted;
959
+ if (isCompleted) {
960
+ setIsCreationStatusPollingEnabled(false);
961
+ return false;
962
+ }
963
+ return 2000;
964
+ };
965
+ var _useMembersCreationSt = useMembersCreationStatus(jobId, {
966
+ refetchInterval: refetchInterval,
967
+ enabled: isCreationStatusPollingEnabled
968
+ }),
969
+ creationStatus = _useMembersCreationSt.data;
970
+ useEffect(function () {
971
+ var _config$createMember;
972
+ var _ref3 = creationStatus || {},
973
+ isCompleted = _ref3.isCompleted,
974
+ isSuccessful = _ref3.isSuccessful,
975
+ users = _ref3.users,
976
+ error = _ref3.error;
977
+ if (!isCompleted) return;
978
+ handleClose();
979
+ 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({
980
+ users: users
981
+ });
982
+ if (isSuccessful) {
983
+ showThumbsUpToastr();
984
+ } else {
985
+ toast.error(error);
986
+ }
987
+ refetchMembers();
988
+ }, [creationStatus]);
989
+ var _useUpdateMember = useUpdateMember({
990
+ onSuccess: function onSuccess() {
991
+ var _config$updateMember;
992
+ handleClose(true);
993
+ 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();
994
+ }
995
+ }),
996
+ updateMember = _useUpdateMember.mutate,
997
+ isUpdatingMember = _useUpdateMember.isPending;
998
+ var hasRoleChanged = function hasRoleChanged(_ref4) {
999
+ var submitted = _ref4.submitted,
1000
+ values = _ref4.values;
1001
+ return submitted && (values === null || values === void 0 ? void 0 : values.role) !== (selectedMember === null || selectedMember === void 0 ? void 0 : selectedMember.role);
1002
+ };
1003
+ var handleClose = function handleClose() {
1004
+ var submitted = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
1005
+ onComplete({
1006
+ submitted: hasRoleChanged({
1007
+ submitted: submitted,
1008
+ values: formikValues.current
1009
+ })
1010
+ });
1011
+ setCurrentPage(FORM_PAGES.MAIN);
1012
+ appListSavedStateReference.current = {
1013
+ isAppListEnabled: true
1014
+ };
1015
+ setIsCreationStatusPollingEnabled(false);
1016
+ };
1017
+ var _useProfileImageUploa = useProfileImageUpload({
1018
+ uploadConfig: {
1019
+ folder: "Auth",
1020
+ customMetadata: {
1021
+ appName: "neetoAuth"
1022
+ }
1023
+ }
1024
+ }),
1025
+ uploadImage = _useProfileImageUploa.uploadImage,
1026
+ isUploading = _useProfileImageUploa.isUploading;
1027
+ var handleUploadImage = /*#__PURE__*/function () {
1028
+ var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(image) {
1029
+ var result, didUpload;
1030
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
1031
+ while (1) switch (_context.prev = _context.next) {
1032
+ case 0:
1033
+ didUpload = false;
1034
+ _context.next = 3;
1035
+ return uploadImage(image, function (uploadedImageData) {
1036
+ didUpload = true;
1037
+ result = uploadedImageData;
1038
+ });
1039
+ case 3:
1040
+ if (didUpload) {
1041
+ _context.next = 5;
1042
+ break;
1043
+ }
1044
+ throw new Error(t("neetoTeamMembers.common.imageUploadFailed"));
1045
+ case 5:
1046
+ return _context.abrupt("return", result);
1047
+ case 6:
1048
+ case "end":
1049
+ return _context.stop();
1050
+ }
1051
+ }, _callee);
1052
+ }));
1053
+ return function handleUploadImage(_x) {
1054
+ return _ref5.apply(this, arguments);
1055
+ };
1056
+ }();
1057
+ var isProcessing = isCreatingMember || isUpdatingMember || isUploading || isRolesLoading || isGlobalRolesLoading || isMemberDetailLoading;
1058
+ var handleAddMember = /*#__PURE__*/function () {
1059
+ var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(values) {
1060
+ var _values$avatar, payload, _yield$handleUploadIm, fileId, filePath, url;
1061
+ return _regeneratorRuntime.wrap(function _callee2$(_context2) {
1062
+ while (1) switch (_context2.prev = _context2.next) {
1063
+ case 0:
1064
+ if (!selectedMember) {
1065
+ _context2.next = 25;
1066
+ break;
1067
+ }
1068
+ payload = renderPayload(values, selectedMember);
1069
+ if (!((_values$avatar = values.avatar) !== null && _values$avatar !== void 0 && _values$avatar.file)) {
1070
+ _context2.next = 22;
1071
+ break;
1072
+ }
1073
+ if (!payload.profile) payload.profile = {};
1074
+ if (!(values.avatar.file === "_destroy")) {
1075
+ _context2.next = 8;
1076
+ break;
1077
+ }
1078
+ payload.profile.avatar = {
1079
+ fileId: "_destroy",
1080
+ filePath: "",
1081
+ url: ""
1082
+ };
1083
+ _context2.next = 22;
1084
+ break;
1085
+ case 8:
1086
+ _context2.prev = 8;
1087
+ _context2.next = 11;
1088
+ return handleUploadImage(values.avatar.file);
1089
+ case 11:
1090
+ _yield$handleUploadIm = _context2.sent;
1091
+ fileId = _yield$handleUploadIm.fileId;
1092
+ filePath = _yield$handleUploadIm.filePath;
1093
+ url = _yield$handleUploadIm.url;
1094
+ payload.profile.avatar = {
1095
+ fileId: fileId,
1096
+ filePath: filePath,
1097
+ url: url
1098
+ };
1099
+ _context2.next = 22;
1100
+ break;
1101
+ case 18:
1102
+ _context2.prev = 18;
1103
+ _context2.t0 = _context2["catch"](8);
1104
+ toast.error(_context2.t0.message);
1105
+ return _context2.abrupt("return");
1106
+ case 22:
1107
+ updateMember({
1108
+ id: selectedMember.id,
1109
+ payload: payload
1110
+ });
1111
+ _context2.next = 26;
1112
+ break;
1113
+ case 25:
1114
+ createMember(renderPayload(values));
1115
+ case 26:
1116
+ case "end":
1117
+ return _context2.stop();
1118
+ }
1119
+ }, _callee2, null, [[8, 18]]);
1120
+ }));
1121
+ return function handleAddMember(_x2) {
1122
+ return _ref6.apply(this, arguments);
1123
+ };
1124
+ }();
1125
+ var handleOnSubmit = /*#__PURE__*/function () {
1126
+ var _ref8 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(values, _ref7) {
1127
+ var setSubmitting;
1128
+ return _regeneratorRuntime.wrap(function _callee3$(_context3) {
1129
+ while (1) switch (_context3.prev = _context3.next) {
1130
+ case 0:
1131
+ setSubmitting = _ref7.setSubmitting;
1132
+ shouldSkipAppListPage.current = isEmpty(values.appRoles);
1133
+ if (!isLastPage) {
1134
+ _context3.next = 7;
1135
+ break;
1136
+ }
1137
+ _context3.next = 5;
1138
+ return handleAddMember(values);
1139
+ case 5:
1140
+ _context3.next = 8;
1141
+ break;
1142
+ case 7:
1143
+ if (currentPage === FORM_PAGES.APP_LIST || shouldSkipAppListPage.current) {
1144
+ setCurrentPage(FORM_PAGES.CONFIRMATION);
1145
+ setSubmitting(false);
1146
+ } else if (currentPage === FORM_PAGES.MAIN) {
1147
+ setCurrentPage(FORM_PAGES.APP_LIST);
1148
+ setSubmitting(false);
1149
+ }
1150
+ case 8:
1151
+ case "end":
1152
+ return _context3.stop();
1153
+ }
1154
+ }, _callee3);
1155
+ }));
1156
+ return function handleOnSubmit(_x3, _x4) {
1157
+ return _ref8.apply(this, arguments);
1158
+ };
1159
+ }();
1160
+ var handleBackButton = function handleBackButton() {
1161
+ if (currentPage === FORM_PAGES.APP_LIST || shouldSkipAppListPage.current || currentPage === FORM_PAGES.INVITE_LINK) {
1162
+ setCurrentPage(FORM_PAGES.MAIN);
1163
+ } else if (currentPage === FORM_PAGES.CONFIRMATION) {
1164
+ setCurrentPage(FORM_PAGES.APP_LIST);
1165
+ }
1166
+ };
1167
+ var getTitle = function getTitle() {
1168
+ var memberLabel = taxonomies.member.singular;
1169
+ if (selectedMember) {
1170
+ return t("neetoTeamMembers.common.edit_", {
1171
+ what: memberLabel
1172
+ });
1173
+ }
1174
+ return currentPage === FORM_PAGES.INVITE_LINK ? t("neetoTeamMembers.common.inviteViaLink") : t("neetoTeamMembers.common.addNew_", {
1175
+ what: memberLabel
1176
+ });
1177
+ };
1178
+ var renderRolesRadioGroup = function renderRolesRadioGroup(role) {
1179
+ return /*#__PURE__*/jsx("div", {
1180
+ className: "w-full pt-2",
1181
+ children: /*#__PURE__*/jsx(RolesRadioGroup, {
1182
+ config: config,
1183
+ globalRoles: globalRoles,
1184
+ role: role,
1185
+ isEdit: !!selectedMember,
1186
+ roles: filteredRoles
1187
+ })
1188
+ });
1189
+ };
1190
+ var renderFormPage = function renderFormPage(page, emails, role, setFieldValue) {
1191
+ var _config$additionalFie;
1192
+ switch (page) {
1193
+ case FORM_PAGES.MAIN:
1194
+ return /*#__PURE__*/jsxs(Fragment, {
1195
+ children: [selectedMember && /*#__PURE__*/jsx(ProfileImage, {}), selectedMember && /*#__PURE__*/jsx(NameInputs, {
1196
+ innerRef: inputReference
1197
+ }), /*#__PURE__*/jsx(MultipleEmailInput, {
1198
+ emails: emails,
1199
+ selectedMember: selectedMember,
1200
+ setCurrentPage: setCurrentPage,
1201
+ innerRef: inputReference
1202
+ }), selectedMember && /*#__PURE__*/jsx(ProfileSettings, {
1203
+ isTimezoneFieldDisabled: isTimezoneFieldDisabled,
1204
+ setFieldValue: setFieldValue,
1205
+ member: selectedMember
1206
+ }), renderRolesRadioGroup(role), (_config$additionalFie = config.additionalFields) === null || _config$additionalFie === void 0 ? void 0 : _config$additionalFie.component]
1207
+ });
1208
+ case FORM_PAGES.APP_LIST:
1209
+ return /*#__PURE__*/jsx(AppList, {
1210
+ globalRoles: globalRoles,
1211
+ savedStateRef: appListSavedStateReference
1212
+ });
1213
+ case FORM_PAGES.CONFIRMATION:
1214
+ return /*#__PURE__*/jsx(Confirmation, {});
1215
+ case FORM_PAGES.INVITE_LINK:
1216
+ return /*#__PURE__*/jsxs(Fragment, {
1217
+ children: [/*#__PURE__*/jsx(InviteLink, {
1218
+ roles: filteredRoles
1219
+ }), renderRolesRadioGroup(role)]
1220
+ });
1221
+ default:
1222
+ return null;
1223
+ }
1224
+ };
1225
+ var isSheet = manageMemberComponentConfig.type !== "modal";
1226
+ return /*#__PURE__*/jsxs(Component, {
1227
+ className: manageMemberComponentConfig.className,
1228
+ "data-testid": "ntm-manage-members-pane-wrapper",
1229
+ isOpen: manageMemberComponentConfig.isOpen,
1230
+ onClose: function onClose() {
1231
+ return handleClose(false);
1232
+ },
1233
+ children: [/*#__PURE__*/jsxs(Component.Header, _objectSpread(_objectSpread({}, isSheet ? manageMemberComponentConfig.headerProps : {}), {}, {
1234
+ className: cn(isSheet && currentPage !== FORM_PAGES.MAIN && "flex flex-row items-start gap-2", isSheet && ((_manageMemberComponen = manageMemberComponentConfig.headerProps) === null || _manageMemberComponen === void 0 ? void 0 : _manageMemberComponen.className)),
1235
+ children: [isSheet && currentPage !== FORM_PAGES.MAIN && /*#__PURE__*/jsx(Button, {
1236
+ "aria-label": "Back",
1237
+ size: "icon-sm",
1238
+ variant: "ghost",
1239
+ onClick: handleBackButton,
1240
+ children: /*#__PURE__*/jsx(ArrowLeft, {
1241
+ className: "size-4"
1242
+ })
1243
+ }), /*#__PURE__*/jsxs("div", {
1244
+ children: [/*#__PURE__*/jsx(Component.Title, {
1245
+ "data-testid": "ntm-manage-members-pane-header",
1246
+ children: getTitle()
1247
+ }), selectedMember && Component.Description && /*#__PURE__*/jsx(Component.Description, {
1248
+ children: t("neetoTeamMembers.helpers.editPaneSubtitle")
1249
+ })]
1250
+ })]
1251
+ })), /*#__PURE__*/jsx(FormikForm, {
1252
+ ref: formReference,
1253
+ className: classnames({
1254
+ "flex flex-1 flex-col overflow-hidden": isSheet,
1255
+ undefined: !isSheet
1256
+ }),
1257
+ formikProps: {
1258
+ enableReinitialize: true,
1259
+ initialValues: renderInitialValues({
1260
+ additionalFieldsInitialValues: (_config$additionalFie2 = config.additionalFields) === null || _config$additionalFie2 === void 0 ? void 0 : _config$additionalFie2.initialValues,
1261
+ globalRoles: globalRoles,
1262
+ roles: filteredRoles,
1263
+ selectedMember: selectedMember
1264
+ }),
1265
+ onSubmit: handleOnSubmit,
1266
+ validationSchema: buildValidationSchema(_objectSpread({
1267
+ selectedMember: selectedMember
1268
+ }, team))
1269
+ },
1270
+ children: function children(_ref9) {
1271
+ var _manageMemberComponen2, _manageMemberComponen3;
1272
+ var values = _ref9.values,
1273
+ isValid = _ref9.isValid,
1274
+ dirty = _ref9.dirty,
1275
+ setFieldValue = _ref9.setFieldValue;
1276
+ var emails = values.emails,
1277
+ role = values.role;
1278
+ formikValues.current = values;
1279
+ return /*#__PURE__*/jsxs(Fragment, {
1280
+ children: [/*#__PURE__*/jsx(ScrollToErrorField, {
1281
+ formRef: formReference
1282
+ }), /*#__PURE__*/jsxs("div", _objectSpread(_objectSpread({}, isSheet ? manageMemberComponentConfig.bodyProps : {}), {}, {
1283
+ className: cn(isSheet ? "w-full flex-1 space-y-4 overflow-y-auto px-4 pb-4" : "w-full space-y-4 pb-4", isSheet && ((_manageMemberComponen2 = manageMemberComponentConfig.bodyProps) === null || _manageMemberComponen2 === void 0 ? void 0 : _manageMemberComponen2.className)),
1284
+ children: [isSheet && isCreationStatusPollingEnabled && /*#__PURE__*/jsx(Callout, {
1285
+ icon: Info,
1286
+ title: /*#__PURE__*/jsxs("span", {
1287
+ className: "flex items-center gap-2",
1288
+ children: [/*#__PURE__*/jsx(Spinner, {}), t("neetoTeamMembers.helpers.memberCreationStatus", {
1289
+ count: emails.length
1290
+ })]
1291
+ })
1292
+ }), renderFormPage(currentPage, emails, role, setFieldValue)]
1293
+ })), currentPage !== FORM_PAGES.INVITE_LINK && /*#__PURE__*/jsx(Component.Footer, _objectSpread(_objectSpread({}, isSheet ? manageMemberComponentConfig.footerProps : {}), {}, {
1294
+ className: cn("flex gap-2", isSheet && ((_manageMemberComponen3 = manageMemberComponentConfig.footerProps) === null || _manageMemberComponen3 === void 0 ? void 0 : _manageMemberComponen3.className)),
1295
+ children: /*#__PURE__*/jsx(FormikActionBlock, {
1296
+ cancelButtonProps: {
1297
+ "data-testid": "ntm-manage-member-cancel-button",
1298
+ onClick: function onClick() {
1299
+ return handleClose(false);
1300
+ }
1301
+ },
1302
+ isSubmitting: isProcessing || isCreationStatusPollingEnabled,
1303
+ submitButtonProps: {
1304
+ "data-testid": isLastPage ? "ntm-manage-member-submit-button" : "ntm-manage-member-continue-button",
1305
+ label: isLastPage ? t("neetoTeamMembers.buttons.saveChanges") : t("neetoTeamMembers.buttons.continue"),
1306
+ disabled: !isValid || isProcessing || !dirty || isCreationStatusPollingEnabled
1307
+ }
1308
+ })
1309
+ }))]
1310
+ });
1311
+ }
1312
+ })]
1313
+ });
1314
+ };
1315
+
1316
+ export { DEFAULT_FILTER_VALUES as D, ManageMember as M, DEFAULT_IS_OPEN_VALUES as a, buildFilterColumns as b, DEFAULT_SELECTED_ROWS as c, defaultNeetoFiltersColumns as d, getColumnData as e, generateNoDataContent as f, getFilteredRoles as g, handlePageChange as h, DEFAULT_RADIX as i, renderUpdateAlert as r };
1317
+ //# sourceMappingURL=index-DgxgaCRt.js.map