@bigbinary/neeto-team-members-frontend 5.1.0 → 5.1.1-beta1

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 (50) hide show
  1. package/dist/.ready +1 -1
  2. package/dist/{ActionBlock-jgw1N-As.js → ActionBlock-BfQKysEx.js} +3 -1
  3. package/dist/ActionBlock-BfQKysEx.js.map +1 -0
  4. package/dist/{ActionBlock-C9Iy0jGZ.js → ActionBlock-DjypCjju.js} +3 -1
  5. package/dist/ActionBlock-DjypCjju.js.map +1 -0
  6. package/dist/ManageMember.js +2 -2
  7. package/dist/Profile.js +1 -1
  8. package/dist/{ProfileImage-DbLwreG6.js → ProfileImage-D1kCXp4a.js} +19 -9
  9. package/dist/ProfileImage-D1kCXp4a.js.map +1 -0
  10. package/dist/{ProfileImage-BXsTglvo.js → ProfileImage-DSnU8nqZ.js} +18 -8
  11. package/dist/ProfileImage-DSnU8nqZ.js.map +1 -0
  12. package/dist/TeamMembers.js +2 -2
  13. package/dist/cjs/ManageMember.js +2 -2
  14. package/dist/cjs/Profile.js +1 -1
  15. package/dist/cjs/TeamMembers.js +2 -2
  16. package/dist/cjs/index.js +2 -2
  17. package/dist/cjs/v2/Groups.js +1 -1
  18. package/dist/cjs/v2/ManageMember.js +2 -2
  19. package/dist/cjs/v2/MembersInvite.js +1 -1
  20. package/dist/cjs/v2/Profile.js +1 -1
  21. package/dist/cjs/v2/Roles.js +1 -1
  22. package/dist/cjs/v2/TeamMembers.js +4 -3
  23. package/dist/cjs/v2/TeamMembers.js.map +1 -1
  24. package/dist/cjs/v2/TeamsAndMembersDropdown.js +5 -1
  25. package/dist/cjs/v2/TeamsAndMembersDropdown.js.map +1 -1
  26. package/dist/cjs/v2/index.js +2 -2
  27. package/dist/{index-BpVod2uP.js → index-BcPx2-z8.js} +2 -2
  28. package/dist/{index-BpVod2uP.js.map → index-BcPx2-z8.js.map} +1 -1
  29. package/dist/{index-B3Cx1asZ.js → index-CHvbZfMI.js} +2 -2
  30. package/dist/{index-B3Cx1asZ.js.map → index-CHvbZfMI.js.map} +1 -1
  31. package/dist/{index-D_6vJd6A.js → index-D8lgteE5.js} +2 -2
  32. package/dist/{index-D_6vJd6A.js.map → index-D8lgteE5.js.map} +1 -1
  33. package/dist/{index-C8tkWNTW.js → index-venWfbj6.js} +2 -2
  34. package/dist/{index-C8tkWNTW.js.map → index-venWfbj6.js.map} +1 -1
  35. package/dist/index.js +2 -2
  36. package/dist/v2/Groups.js +1 -1
  37. package/dist/v2/ManageMember.js +2 -2
  38. package/dist/v2/MembersInvite.js +1 -1
  39. package/dist/v2/Profile.js +1 -1
  40. package/dist/v2/Roles.js +1 -1
  41. package/dist/v2/TeamMembers.js +4 -3
  42. package/dist/v2/TeamMembers.js.map +1 -1
  43. package/dist/v2/TeamsAndMembersDropdown.js +5 -1
  44. package/dist/v2/TeamsAndMembersDropdown.js.map +1 -1
  45. package/dist/v2/index.js +2 -2
  46. package/package.json +9 -9
  47. package/dist/ActionBlock-C9Iy0jGZ.js.map +0 -1
  48. package/dist/ActionBlock-jgw1N-As.js.map +0 -1
  49. package/dist/ProfileImage-BXsTglvo.js.map +0 -1
  50. package/dist/ProfileImage-DbLwreG6.js.map +0 -1
package/dist/.ready CHANGED
@@ -1 +1 @@
1
- Built at 2026-09-15T05:40:37.852Z
1
+ Built at 2026-09-24T13:28:01.846Z
@@ -28,12 +28,14 @@ var FormikActionBlock = function FormikActionBlock(_ref) {
28
28
  className: cn("flex items-center gap-2", className),
29
29
  children: [/*#__PURE__*/jsx(Button, _objectSpread(_objectSpread({
30
30
  className: submitClassName,
31
+ "data-testid": "save-changes-button",
31
32
  disabled: isSubmitting || submitDisabled,
32
33
  type: "submit"
33
34
  }, submitRest), {}, {
34
35
  children: submitLabel || t("neetoTeamMembers.buttons.saveChanges")
35
36
  })), /*#__PURE__*/jsx(Button, _objectSpread(_objectSpread({
36
37
  className: cancelClassName,
38
+ "data-testid": "cancel-button",
37
39
  type: "button",
38
40
  variant: "outline"
39
41
  }, cancelRest), {}, {
@@ -43,4 +45,4 @@ var FormikActionBlock = function FormikActionBlock(_ref) {
43
45
  };
44
46
 
45
47
  export { FormikActionBlock as F };
46
- //# sourceMappingURL=ActionBlock-jgw1N-As.js.map
48
+ //# sourceMappingURL=ActionBlock-BfQKysEx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActionBlock-BfQKysEx.js","sources":["../app/javascript/src/v2/components/Common/formik/ActionBlock.jsx"],"sourcesContent":["import { Button, cn } from \"@bigbinary/neeto-atoms\";\nimport { useTranslation } from \"react-i18next\";\n\nconst FormikActionBlock = ({\n isSubmitting,\n cancelButtonProps = {},\n submitButtonProps = {},\n className,\n}) => {\n const { t } = useTranslation();\n\n const {\n label: cancelLabel,\n className: cancelClassName,\n ...cancelRest\n } = cancelButtonProps;\n\n const {\n label: submitLabel,\n className: submitClassName,\n disabled: submitDisabled,\n ...submitRest\n } = submitButtonProps;\n\n return (\n <div className={cn(\"flex items-center gap-2\", className)}>\n <Button\n className={submitClassName}\n data-testid=\"save-changes-button\"\n disabled={isSubmitting || submitDisabled}\n type=\"submit\"\n {...submitRest}\n >\n {submitLabel || t(\"neetoTeamMembers.buttons.saveChanges\")}\n </Button>\n <Button\n className={cancelClassName}\n data-testid=\"cancel-button\"\n type=\"button\"\n variant=\"outline\"\n {...cancelRest}\n >\n {cancelLabel || t(\"neetoTeamMembers.buttons.cancel\")}\n </Button>\n </div>\n );\n};\n\nexport default FormikActionBlock;\n"],"names":["FormikActionBlock","_ref","isSubmitting","_ref$cancelButtonProp","cancelButtonProps","_ref$submitButtonProp","submitButtonProps","className","_useTranslation","useTranslation","t","cancelLabel","label","cancelClassName","cancelRest","_objectWithoutProperties","_excluded","submitLabel","submitClassName","submitDisabled","disabled","submitRest","_excluded2","_jsxs","cn","children","_jsx","Button","_objectSpread","type","variant"],"mappings":";;;;;;;;;;AAGA,IAAMA,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAAC,IAAA,EAKjB;AAAA,EAAA,IAJJC,YAAY,GAAAD,IAAA,CAAZC,YAAY;IAAAC,qBAAA,GAAAF,IAAA,CACZG,iBAAiB;AAAjBA,IAAAA,iBAAiB,GAAAD,qBAAA,KAAA,MAAA,GAAG,EAAE,GAAAA,qBAAA;IAAAE,qBAAA,GAAAJ,IAAA,CACtBK,iBAAiB;AAAjBA,IAAAA,iBAAiB,GAAAD,qBAAA,KAAA,MAAA,GAAG,EAAE,GAAAA,qBAAA;IACtBE,SAAS,GAAAN,IAAA,CAATM,SAAS;AAET,EAAA,IAAAC,eAAA,GAAcC,cAAc,EAAE;IAAtBC,CAAC,GAAAF,eAAA,CAADE,CAAC;AAET,EAAA,IACSC,WAAW,GAGhBP,iBAAiB,CAHnBQ,KAAK;IACMC,eAAe,GAExBT,iBAAiB,CAFnBG,SAAS;AACNO,IAAAA,UAAU,GAAAC,wBAAA,CACXX,iBAAiB,EAAAY,SAAA,CAAA;AAErB,EAAA,IACSC,WAAW,GAIhBX,iBAAiB,CAJnBM,KAAK;IACMM,eAAe,GAGxBZ,iBAAiB,CAHnBC,SAAS;IACCY,cAAc,GAEtBb,iBAAiB,CAFnBc,QAAQ;AACLC,IAAAA,UAAU,GAAAN,wBAAA,CACXT,iBAAiB,EAAAgB,UAAA,CAAA;AAErB,EAAA,oBACEC,IAAA,CAAA,KAAA,EAAA;AAAKhB,IAAAA,SAAS,EAAEiB,EAAE,CAAC,yBAAyB,EAAEjB,SAAS,CAAE;AAAAkB,IAAAA,QAAA,gBACvDC,GAAA,CAACC,MAAM,EAAAC,aAAA,CAAAA,aAAA,CAAA;AACLrB,MAAAA,SAAS,EAAEW,eAAgB;AAC3B,MAAA,aAAA,EAAY,qBAAqB;MACjCE,QAAQ,EAAElB,YAAY,IAAIiB,cAAe;AACzCU,MAAAA,IAAI,EAAC;AAAQ,KAAA,EACTR,UAAU,CAAA,EAAA,EAAA,EAAA;AAAAI,MAAAA,QAAA,EAEbR,WAAW,IAAIP,CAAC,CAAC,sCAAsC;KAAC,CACnD,CAAC,eACTgB,GAAA,CAACC,MAAM,EAAAC,aAAA,CAAAA,aAAA,CAAA;AACLrB,MAAAA,SAAS,EAAEM,eAAgB;AAC3B,MAAA,aAAA,EAAY,eAAe;AAC3BgB,MAAAA,IAAI,EAAC,QAAQ;AACbC,MAAAA,OAAO,EAAC;AAAS,KAAA,EACbhB,UAAU,CAAA,EAAA,EAAA,EAAA;AAAAW,MAAAA,QAAA,EAEbd,WAAW,IAAID,CAAC,CAAC,iCAAiC;AAAC,KAAA,CAC9C,CAAC;AAAA,GACN,CAAC;AAEV;;;;"}
@@ -35,12 +35,14 @@ var FormikActionBlock = function FormikActionBlock(_ref) {
35
35
  className: neetoAtoms.cn("flex items-center gap-2", className),
36
36
  children: [/*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Button, _objectSpread(_objectSpread({
37
37
  className: submitClassName,
38
+ "data-testid": "save-changes-button",
38
39
  disabled: isSubmitting || submitDisabled,
39
40
  type: "submit"
40
41
  }, submitRest), {}, {
41
42
  children: submitLabel || t("neetoTeamMembers.buttons.saveChanges")
42
43
  })), /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Button, _objectSpread(_objectSpread({
43
44
  className: cancelClassName,
45
+ "data-testid": "cancel-button",
44
46
  type: "button",
45
47
  variant: "outline"
46
48
  }, cancelRest), {}, {
@@ -50,4 +52,4 @@ var FormikActionBlock = function FormikActionBlock(_ref) {
50
52
  };
51
53
 
52
54
  exports.FormikActionBlock = FormikActionBlock;
53
- //# sourceMappingURL=ActionBlock-C9Iy0jGZ.js.map
55
+ //# sourceMappingURL=ActionBlock-DjypCjju.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActionBlock-DjypCjju.js","sources":["../app/javascript/src/v2/components/Common/formik/ActionBlock.jsx"],"sourcesContent":["import { Button, cn } from \"@bigbinary/neeto-atoms\";\nimport { useTranslation } from \"react-i18next\";\n\nconst FormikActionBlock = ({\n isSubmitting,\n cancelButtonProps = {},\n submitButtonProps = {},\n className,\n}) => {\n const { t } = useTranslation();\n\n const {\n label: cancelLabel,\n className: cancelClassName,\n ...cancelRest\n } = cancelButtonProps;\n\n const {\n label: submitLabel,\n className: submitClassName,\n disabled: submitDisabled,\n ...submitRest\n } = submitButtonProps;\n\n return (\n <div className={cn(\"flex items-center gap-2\", className)}>\n <Button\n className={submitClassName}\n data-testid=\"save-changes-button\"\n disabled={isSubmitting || submitDisabled}\n type=\"submit\"\n {...submitRest}\n >\n {submitLabel || t(\"neetoTeamMembers.buttons.saveChanges\")}\n </Button>\n <Button\n className={cancelClassName}\n data-testid=\"cancel-button\"\n type=\"button\"\n variant=\"outline\"\n {...cancelRest}\n >\n {cancelLabel || t(\"neetoTeamMembers.buttons.cancel\")}\n </Button>\n </div>\n );\n};\n\nexport default FormikActionBlock;\n"],"names":["FormikActionBlock","_ref","isSubmitting","_ref$cancelButtonProp","cancelButtonProps","_ref$submitButtonProp","submitButtonProps","className","_useTranslation","useTranslation","t","cancelLabel","label","cancelClassName","cancelRest","_objectWithoutProperties","_excluded","submitLabel","submitClassName","submitDisabled","disabled","submitRest","_excluded2","_jsxs","cn","children","_jsx","Button","_objectSpread","type","variant"],"mappings":";;;;;;;;;;;;;;;;;AAGA,IAAMA,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAAC,IAAA,EAKjB;AAAA,EAAA,IAJJC,YAAY,GAAAD,IAAA,CAAZC,YAAY;IAAAC,qBAAA,GAAAF,IAAA,CACZG,iBAAiB;AAAjBA,IAAAA,iBAAiB,GAAAD,qBAAA,KAAA,MAAA,GAAG,EAAE,GAAAA,qBAAA;IAAAE,qBAAA,GAAAJ,IAAA,CACtBK,iBAAiB;AAAjBA,IAAAA,iBAAiB,GAAAD,qBAAA,KAAA,MAAA,GAAG,EAAE,GAAAA,qBAAA;IACtBE,SAAS,GAAAN,IAAA,CAATM,SAAS;AAET,EAAA,IAAAC,eAAA,GAAcC,2BAAc,EAAE;IAAtBC,CAAC,GAAAF,eAAA,CAADE,CAAC;AAET,EAAA,IACSC,WAAW,GAGhBP,iBAAiB,CAHnBQ,KAAK;IACMC,eAAe,GAExBT,iBAAiB,CAFnBG,SAAS;AACNO,IAAAA,UAAU,GAAAC,yCAAA,CACXX,iBAAiB,EAAAY,SAAA,CAAA;AAErB,EAAA,IACSC,WAAW,GAIhBX,iBAAiB,CAJnBM,KAAK;IACMM,eAAe,GAGxBZ,iBAAiB,CAHnBC,SAAS;IACCY,cAAc,GAEtBb,iBAAiB,CAFnBc,QAAQ;AACLC,IAAAA,UAAU,GAAAN,yCAAA,CACXT,iBAAiB,EAAAgB,UAAA,CAAA;AAErB,EAAA,oBACEC,eAAA,CAAA,KAAA,EAAA;AAAKhB,IAAAA,SAAS,EAAEiB,aAAE,CAAC,yBAAyB,EAAEjB,SAAS,CAAE;AAAAkB,IAAAA,QAAA,gBACvDC,cAAA,CAACC,iBAAM,EAAAC,aAAA,CAAAA,aAAA,CAAA;AACLrB,MAAAA,SAAS,EAAEW,eAAgB;AAC3B,MAAA,aAAA,EAAY,qBAAqB;MACjCE,QAAQ,EAAElB,YAAY,IAAIiB,cAAe;AACzCU,MAAAA,IAAI,EAAC;AAAQ,KAAA,EACTR,UAAU,CAAA,EAAA,EAAA,EAAA;AAAAI,MAAAA,QAAA,EAEbR,WAAW,IAAIP,CAAC,CAAC,sCAAsC;KAAC,CACnD,CAAC,eACTgB,cAAA,CAACC,iBAAM,EAAAC,aAAA,CAAAA,aAAA,CAAA;AACLrB,MAAAA,SAAS,EAAEM,eAAgB;AAC3B,MAAA,aAAA,EAAY,eAAe;AAC3BgB,MAAAA,IAAI,EAAC,QAAQ;AACbC,MAAAA,OAAO,EAAC;AAAS,KAAA,EACbhB,UAAU,CAAA,EAAA,EAAA,EAAA;AAAAW,MAAAA,QAAA,EAEbd,WAAW,IAAID,CAAC,CAAC,iCAAiC;AAAC,KAAA,CAC9C,CAAC;AAAA,GACN,CAAC;AAEV;;;;"}
@@ -19,10 +19,10 @@ import '@bigbinary/neetoui/formik/Form';
19
19
  import 'ramda';
20
20
  import 'react-i18next';
21
21
  import './index-BISwUwuE.js';
22
- import './ProfileImage-DbLwreG6.js';
22
+ import './ProfileImage-D1kCXp4a.js';
23
23
  import './useRolesApi-93OoRU1s.js';
24
24
  import './useTeamsApi-CGY9oJqn.js';
25
- export { M as default } from './index-BpVod2uP.js';
25
+ export { M as default } from './index-BcPx2-z8.js';
26
26
  import './RolesRadioGroup-BefORc9L.js';
27
27
  import 'react/jsx-runtime';
28
28
  import '@babel/runtime/helpers/toConsumableArray';
package/dist/Profile.js CHANGED
@@ -24,7 +24,7 @@ import ActionBlock from '@bigbinary/neetoui/formik/ActionBlock';
24
24
  import { isNotNil, isNil, is, trim } from 'ramda';
25
25
  import { D as DATE_FORMAT_OPTIONS, T as TIME_FORMAT_OPTIONS } from './constants-CXdiW8NZ.js';
26
26
  import { u as useFetchProfile, a as useUpdateProfileMutation } from './useProfileApi-Dkt6sE5p.js';
27
- import { u as useCountries, P as PROFILE_VALIDATION_SCHEMA, a as ProfileImage, M as MANAGE_BILLING_PATH, U as UPDATE_EMAIL_PATH } from './ProfileImage-DbLwreG6.js';
27
+ import { u as useCountries, P as PROFILE_VALIDATION_SCHEMA, a as ProfileImage, M as MANAGE_BILLING_PATH, U as UPDATE_EMAIL_PATH } from './ProfileImage-D1kCXp4a.js';
28
28
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
29
29
  import withImmutableActions from '@bigbinary/neeto-commons-frontend/react-utils/withImmutableActions';
30
30
  import { create } from 'zustand';
@@ -1,5 +1,5 @@
1
1
  import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
2
- import { useState, useMemo, useCallback, useRef } from 'react';
2
+ import { useState, useMemo, useCallback, useRef, useEffect } from 'react';
3
3
  import { findById } from '@bigbinary/neeto-cist';
4
4
  import { u as useFetchCountries } from './useCountriesApi-DK00167T.js';
5
5
  import { useField } from 'formik';
@@ -74,6 +74,7 @@ var ProfileImage = function ProfileImage() {
74
74
  var _useTranslation = useTranslation(),
75
75
  t = _useTranslation.t;
76
76
  var fileInputRef = useRef(null);
77
+ var blobUrlRef = useRef(null);
77
78
  var _useField = useField("avatar"),
78
79
  _useField2 = _slicedToArray(_useField, 3),
79
80
  field = _useField2[0];
@@ -83,6 +84,11 @@ var ProfileImage = function ProfileImage() {
83
84
  var avatarDetails = {
84
85
  imageUrl: field.value.imageUrl
85
86
  };
87
+ useEffect(function () {
88
+ return function () {
89
+ if (blobUrlRef.current) URL.revokeObjectURL(blobUrlRef.current);
90
+ };
91
+ }, []);
86
92
  var onProfileImageChange = function onProfileImageChange(event) {
87
93
  var imageFile = event.target.files[0];
88
94
  var validationError = validateProfileImage(imageFile);
@@ -90,8 +96,10 @@ var ProfileImage = function ProfileImage() {
90
96
  Toastr.error(validationError);
91
97
  return validationError;
92
98
  }
99
+ if (blobUrlRef.current) URL.revokeObjectURL(blobUrlRef.current);
100
+ blobUrlRef.current = URL.createObjectURL(imageFile);
93
101
  return setValue({
94
- imageUrl: URL.createObjectURL(imageFile),
102
+ imageUrl: blobUrlRef.current,
95
103
  file: imageFile
96
104
  });
97
105
  };
@@ -100,7 +108,11 @@ var ProfileImage = function ProfileImage() {
100
108
  return (_fileInputRef$current = fileInputRef.current) === null || _fileInputRef$current === void 0 ? void 0 : _fileInputRef$current.click();
101
109
  };
102
110
  var handleRemoveImage = function handleRemoveImage() {
103
- return setValue({
111
+ if (blobUrlRef.current) {
112
+ URL.revokeObjectURL(blobUrlRef.current);
113
+ blobUrlRef.current = null;
114
+ }
115
+ setValue({
104
116
  imageUrl: "",
105
117
  file: "_destroy"
106
118
  });
@@ -123,9 +135,7 @@ var ProfileImage = function ProfileImage() {
123
135
  className: "relative shrink-0",
124
136
  children: [/*#__PURE__*/jsx("div", {
125
137
  className: "absolute bottom-0 end-0 z-10",
126
- children: /*#__PURE__*/jsx(Dropdown
127
- // eslint-disable-next-line @bigbinary/neeto/use-neetoui-classes
128
- , {
138
+ children: /*#__PURE__*/jsx(Dropdown, {
129
139
  buttonProps: {
130
140
  className: "rounded-full"
131
141
  },
@@ -152,7 +162,7 @@ var ProfileImage = function ProfileImage() {
152
162
  className: "flex flex-col items-center",
153
163
  children: [/*#__PURE__*/jsx(Typography, {
154
164
  className: "neeto-ui-text-gray-600 text-center",
155
- style: "body3",
165
+ style: "body2",
156
166
  children: /*#__PURE__*/jsx(Trans, {
157
167
  i18nKey: "neetoTeamMembers.profile.avatar.profilePictureUploadMessage",
158
168
  values: {
@@ -161,7 +171,7 @@ var ProfileImage = function ProfileImage() {
161
171
  })
162
172
  }), /*#__PURE__*/jsx("input", {
163
173
  hidden: true,
164
- accept: "image/*",
174
+ accept: ALLOWED_PROFILE_IMAGE_MIME_TYPES.join(","),
165
175
  "data-testid": "profile-image-upload-file-field",
166
176
  id: "uploadProfileImage",
167
177
  name: "profile_image_path",
@@ -174,4 +184,4 @@ var ProfileImage = function ProfileImage() {
174
184
  };
175
185
 
176
186
  export { MANAGE_BILLING_PATH as M, PROFILE_VALIDATION_SCHEMA as P, UPDATE_EMAIL_PATH as U, ProfileImage as a, useCountries as u };
177
- //# sourceMappingURL=ProfileImage-DbLwreG6.js.map
187
+ //# sourceMappingURL=ProfileImage-D1kCXp4a.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProfileImage-D1kCXp4a.js","sources":["../app/javascript/src/components/Profile/constants.js","../app/javascript/src/components/Profile/hooks/useCountries.js","../app/javascript/src/components/Profile/ProfileImage.jsx"],"sourcesContent":["import { t } from \"i18next\";\nimport { globalProps } from \"neetocommons/initializers\";\nimport { validation as phoneNumberValidation } from \"neetomolecules/PhoneNumber\";\nimport * as yup from \"yup\";\n\nexport const PROFILE_VALIDATION_SCHEMA = yup.object().shape({\n firstName: yup\n .string()\n .trim()\n .required(t(\"neetoTeamMembers.profile.form.isRequired.firstName\"))\n .matches(\n /^[\\p{L}\\p{N} ,'-áéíóúÁÉÍÓÚ]+$/iu,\n t(\"neetoTeamMembers.profile.form.invalidName\")\n )\n .matches(/^[^.]+$/i, t(\"neetoTeamMembers.profile.form.dotsNotAllowed\")),\n lastName: yup\n .string()\n .trim()\n .required(t(\"neetoTeamMembers.profile.form.isRequired.lastName\"))\n .matches(\n /^[\\p{L}\\p{N} ,'-áéíóúÁÉÍÓÚ]+$/iu,\n t(\"neetoTeamMembers.profile.form.invalidName\")\n )\n .matches(/^[^.]+$/i, t(\"neetoTeamMembers.profile.form.dotsNotAllowed\")),\n phonenumber: phoneNumberValidation(\n t(\"neetoTeamMembers.profile.form.invalidPhoneNumber\")\n ).nullable(),\n dateFormat: yup\n .string()\n .required(t(\"neetoTeamMembers.profile.form.isRequired.dateFormat\")),\n});\n\nexport const UPDATE_EMAIL_PATH = \"/auth/email/edit\";\nexport const MANAGE_BILLING_PATH = \"/auth/billing/edit\";\n\nexport const ALLOWED_PROFILE_IMAGE_MIME_TYPES = [\"image/jpeg\", \"image/png\"];\nexport const IMAGE_DELETE_BUTTON_SIZE = 16;\nexport const STATIC_PROFILE_IMAGE_MAX_SIZE_IN_BYTES =\n globalProps.endUserUploadedFileSizeLimitInMb * 1024 * 1024;\n\nexport const VALIDATION_ERRORS = {\n invalid_type: t(\"neetoTeamMembers.profile.file.invalidType.image\"),\n corrupted_file: t(\"neetoTeamMembers.profile.file.corrupted\"),\n file_limit_exceeded: t(\"neetoTeamMembers.profile.file.limitExceeded\", {\n maxSize: globalProps.endUserUploadedFileSizeLimitInMb,\n }),\n};\n\nexport const DEFAULT_POPOVER_VALUES = {\n preferredDateFormat: {},\n preferredTimeFormat: {},\n timeZone: {},\n};\n","import { useCallback, useMemo, useState } from \"react\";\n\nimport { findById } from \"neetocist\";\n\nimport { useFetchCountries } from \"hooks/profile/useCountriesApi\";\n\nconst useCountries = () => {\n const [selectedCountryOption, setSelectedCountryOption] = useState(null);\n\n const { data: { countries = [] } = {}, isLoading } = useFetchCountries();\n\n const formatCountryOption = country => ({\n label: country?.name,\n value: country?.id,\n });\n\n const countryDropdownOptions = useMemo(\n () => countries.map(formatCountryOption),\n [countries]\n );\n\n const handleCountryChange = useCallback(\n countryOption => {\n setSelectedCountryOption(countryOption ?? null);\n\n const selectedCountry = findById(countryOption?.value, countries);\n\n return { dateFormat: selectedCountry?.dateFormat };\n },\n [countries]\n );\n\n return {\n countryDropdownOptions,\n selectedCountryOption,\n isFetchingCountriesList: isLoading,\n handleCountryChange,\n };\n};\n\nexport default useCountries;\n","import { useEffect, useRef } from \"react\";\n\nimport { useField } from \"formik\";\nimport { globalProps } from \"neetocommons/initializers\";\nimport { Edit } from \"neetoicons\";\nimport { Avatar, Dropdown, Toastr, Typography } from \"neetoui\";\nimport { useTranslation, Trans } from \"react-i18next\";\n\nimport {\n ALLOWED_PROFILE_IMAGE_MIME_TYPES,\n STATIC_PROFILE_IMAGE_MAX_SIZE_IN_BYTES,\n VALIDATION_ERRORS,\n} from \"./constants\";\n\nconst { Menu, MenuItem } = Dropdown;\n\nconst ProfileImage = () => {\n const { t } = useTranslation();\n const fileInputRef = useRef(null);\n const blobUrlRef = useRef(null);\n\n const [field, _, helpers] = useField(\"avatar\");\n const { setValue } = helpers;\n\n const avatarDetails = { imageUrl: field.value.imageUrl };\n\n useEffect(\n () => () => {\n if (blobUrlRef.current) URL.revokeObjectURL(blobUrlRef.current);\n },\n []\n );\n\n const onProfileImageChange = event => {\n const imageFile = event.target.files[0];\n const validationError = validateProfileImage(imageFile);\n\n if (validationError) {\n Toastr.error(validationError);\n\n return validationError;\n }\n\n if (blobUrlRef.current) URL.revokeObjectURL(blobUrlRef.current);\n blobUrlRef.current = URL.createObjectURL(imageFile);\n\n return setValue({\n imageUrl: blobUrlRef.current,\n file: imageFile,\n });\n };\n\n const handleChangeImage = () => fileInputRef.current?.click();\n\n const handleRemoveImage = () => {\n if (blobUrlRef.current) {\n URL.revokeObjectURL(blobUrlRef.current);\n blobUrlRef.current = null;\n }\n setValue({ imageUrl: \"\", file: \"_destroy\" });\n };\n\n const validateProfileImage = imageFile => {\n const { type, size } = imageFile;\n\n if (!ALLOWED_PROFILE_IMAGE_MIME_TYPES.includes(type)) {\n return VALIDATION_ERRORS.invalid_type;\n }\n\n if (size === 0) return VALIDATION_ERRORS.corrupted_file;\n\n if (size > STATIC_PROFILE_IMAGE_MAX_SIZE_IN_BYTES) {\n return VALIDATION_ERRORS.file_limit_exceeded;\n }\n\n return null;\n };\n\n return (\n <div className=\"mb-4 flex flex-col items-center gap-2\">\n <div className=\"relative shrink-0\">\n <div className=\"absolute bottom-0 end-0 z-10\">\n <Dropdown\n buttonProps={{ className: \"rounded-full\" }}\n buttonSize=\"small\"\n buttonStyle=\"tertiary\"\n icon={Edit}\n >\n <Menu>\n <MenuItem.Button\n data-testid=\"profile-image-upload-button\"\n onClick={handleChangeImage}\n >\n {avatarDetails?.imageUrl\n ? t(\"neetoTeamMembers.profile.avatar.changeProfilePicture\")\n : t(\"neetoTeamMembers.profile.avatar.uploadProfilePicture\")}\n </MenuItem.Button>\n <MenuItem.Button\n data-testid=\"profile-image-remove-button\"\n onClick={handleRemoveImage}\n >\n {t(\"neetoTeamMembers.buttons.remove\")}\n </MenuItem.Button>\n </Menu>\n </Dropdown>\n </div>\n <Avatar size=\"extraLarge\" user={avatarDetails} />\n </div>\n <div className=\"flex flex-col items-center\">\n <Typography\n className=\"neeto-ui-text-gray-600 text-center\"\n style=\"body2\"\n >\n <Trans\n i18nKey=\"neetoTeamMembers.profile.avatar.profilePictureUploadMessage\"\n values={{\n limit: globalProps.endUserUploadedFileSizeLimitInMb,\n }}\n />\n </Typography>\n <input\n hidden\n accept={ALLOWED_PROFILE_IMAGE_MIME_TYPES.join(\",\")}\n data-testid=\"profile-image-upload-file-field\"\n id=\"uploadProfileImage\"\n key={avatarDetails?.imageUrl}\n name=\"profile_image_path\"\n ref={fileInputRef}\n type=\"file\"\n onChange={onProfileImageChange}\n />\n </div>\n </div>\n );\n};\n\nexport default ProfileImage;\n"],"names":["PROFILE_VALIDATION_SCHEMA","yup","object","shape","firstName","string","trim","required","t","matches","lastName","phonenumber","phoneNumberValidation","nullable","dateFormat","UPDATE_EMAIL_PATH","MANAGE_BILLING_PATH","ALLOWED_PROFILE_IMAGE_MIME_TYPES","STATIC_PROFILE_IMAGE_MAX_SIZE_IN_BYTES","globalProps","endUserUploadedFileSizeLimitInMb","VALIDATION_ERRORS","invalid_type","corrupted_file","file_limit_exceeded","maxSize","useCountries","_useState","useState","_useState2","_slicedToArray","selectedCountryOption","setSelectedCountryOption","_useFetchCountries","useFetchCountries","_useFetchCountries$da","data","_useFetchCountries$da2","_useFetchCountries$da3","countries","isLoading","formatCountryOption","country","label","name","value","id","countryDropdownOptions","useMemo","map","handleCountryChange","useCallback","countryOption","selectedCountry","findById","isFetchingCountriesList","Menu","Dropdown","MenuItem","ProfileImage","_useTranslation","useTranslation","fileInputRef","useRef","blobUrlRef","_useField","useField","_useField2","field","_","helpers","setValue","avatarDetails","imageUrl","useEffect","current","URL","revokeObjectURL","onProfileImageChange","event","imageFile","target","files","validationError","validateProfileImage","Toastr","error","createObjectURL","file","handleChangeImage","_fileInputRef$current","click","handleRemoveImage","type","size","includes","_jsxs","className","children","_jsx","buttonProps","buttonSize","buttonStyle","icon","Edit","Button","onClick","Avatar","user","Typography","style","Trans","i18nKey","values","limit","hidden","accept","join","ref","onChange"],"mappings":";;;;;;;;;;;;;;;;;AAKO,IAAMA,yBAAyB,GAAGC,GAAG,CAACC,MAAM,EAAE,CAACC,KAAK,CAAC;AAC1DC,EAAAA,SAAS,EAAEH,GAAG,CACXI,MAAM,EAAE,CACRC,IAAI,EAAE,CACNC,QAAQ,CAACC,CAAC,CAAC,oDAAoD,CAAC,CAAC,CACjEC,OAAO,CACN,qySAAiC,EACjCD,CAAC,CAAC,2CAA2C,CAC/C,CAAC,CACAC,OAAO,CAAC,UAAU,EAAED,CAAC,CAAC,8CAA8C,CAAC,CAAC;AACzEE,EAAAA,QAAQ,EAAET,GAAG,CACVI,MAAM,EAAE,CACRC,IAAI,EAAE,CACNC,QAAQ,CAACC,CAAC,CAAC,mDAAmD,CAAC,CAAC,CAChEC,OAAO,CACN,qySAAiC,EACjCD,CAAC,CAAC,2CAA2C,CAC/C,CAAC,CACAC,OAAO,CAAC,UAAU,EAAED,CAAC,CAAC,8CAA8C,CAAC,CAAC;EACzEG,WAAW,EAAEC,UAAqB,CAChCJ,CAAC,CAAC,kDAAkD,CACtD,CAAC,CAACK,QAAQ,EAAE;AACZC,EAAAA,UAAU,EAAEb,GAAG,CACZI,MAAM,EAAE,CACRE,QAAQ,CAACC,CAAC,CAAC,qDAAqD,CAAC;AACtE,CAAC;AAEM,IAAMO,iBAAiB,GAAG;AAC1B,IAAMC,mBAAmB,GAAG;AAE5B,IAAMC,gCAAgC,GAAG,CAAC,YAAY,EAAE,WAAW,CAAC;AAEpE,IAAMC,sCAAsC,GACjDC,WAAW,CAACC,gCAAgC,GAAG,IAAI,GAAG,IAAI;AAErD,IAAMC,iBAAiB,GAAG;AAC/BC,EAAAA,YAAY,EAAEd,CAAC,CAAC,iDAAiD,CAAC;AAClEe,EAAAA,cAAc,EAAEf,CAAC,CAAC,yCAAyC,CAAC;AAC5DgB,EAAAA,mBAAmB,EAAEhB,CAAC,CAAC,6CAA6C,EAAE;IACpEiB,OAAO,EAAEN,WAAW,CAACC;GACtB;AACH,CAAC;;ACxCD,IAAMM,YAAY,GAAG,SAAfA,YAAYA,GAAS;AACzB,EAAA,IAAAC,SAAA,GAA0DC,QAAQ,CAAC,IAAI,CAAC;IAAAC,UAAA,GAAAC,cAAA,CAAAH,SAAA,EAAA,CAAA,CAAA;AAAjEI,IAAAA,qBAAqB,GAAAF,UAAA,CAAA,CAAA,CAAA;AAAEG,IAAAA,wBAAwB,GAAAH,UAAA,CAAA,CAAA,CAAA;AAEtD,EAAA,IAAAI,kBAAA,GAAqDC,iBAAiB,EAAE;IAAAC,qBAAA,GAAAF,kBAAA,CAAhEG,IAAI;AAAAC,IAAAA,sBAAA,GAAAF,qBAAA,KAAA,MAAA,GAAuB,EAAE,GAAAA,qBAAA;IAAAG,sBAAA,GAAAD,sBAAA,CAArBE,SAAS;AAATA,IAAAA,SAAS,GAAAD,sBAAA,KAAA,MAAA,GAAG,EAAE,GAAAA,sBAAA;IAASE,SAAS,GAAAP,kBAAA,CAATO,SAAS;AAEhD,EAAA,IAAMC,mBAAmB,GAAG,SAAtBA,mBAAmBA,CAAGC,OAAO,EAAA;IAAA,OAAK;AACtCC,MAAAA,KAAK,EAAED,OAAO,KAAA,IAAA,IAAPA,OAAO,KAAA,MAAA,GAAA,MAAA,GAAPA,OAAO,CAAEE,IAAI;AACpBC,MAAAA,KAAK,EAAEH,OAAO,KAAA,IAAA,IAAPA,OAAO,KAAA,MAAA,GAAA,MAAA,GAAPA,OAAO,CAAEI;KACjB;EAAA,CAAC;EAEF,IAAMC,sBAAsB,GAAGC,OAAO,CACpC,YAAA;AAAA,IAAA,OAAMT,SAAS,CAACU,GAAG,CAACR,mBAAmB,CAAC;EAAA,CAAA,EACxC,CAACF,SAAS,CACZ,CAAC;AAED,EAAA,IAAMW,mBAAmB,GAAGC,WAAW,CACrC,UAAAC,aAAa,EAAI;IACfpB,wBAAwB,CAACoB,aAAa,KAAA,IAAA,IAAbA,aAAa,cAAbA,aAAa,GAAI,IAAI,CAAC;AAE/C,IAAA,IAAMC,eAAe,GAAGC,QAAQ,CAACF,aAAa,KAAA,IAAA,IAAbA,aAAa,KAAA,MAAA,GAAA,MAAA,GAAbA,aAAa,CAAEP,KAAK,EAAEN,SAAS,CAAC;IAEjE,OAAO;AAAEzB,MAAAA,UAAU,EAAEuC,eAAe,KAAA,IAAA,IAAfA,eAAe,KAAA,MAAA,GAAA,MAAA,GAAfA,eAAe,CAAEvC;KAAY;AACpD,EAAA,CAAC,EACD,CAACyB,SAAS,CACZ,CAAC;EAED,OAAO;AACLQ,IAAAA,sBAAsB,EAAtBA,sBAAsB;AACtBhB,IAAAA,qBAAqB,EAArBA,qBAAqB;AACrBwB,IAAAA,uBAAuB,EAAEf,SAAS;AAClCU,IAAAA,mBAAmB,EAAnBA;GACD;AACH;;ACxBA,IAAQM,IAAI,GAAeC,QAAQ,CAA3BD,IAAI;EAAEE,QAAQ,GAAKD,QAAQ,CAArBC,QAAQ;AAEtB,IAAMC,YAAY,GAAG,SAAfA,YAAYA,GAAS;AACzB,EAAA,IAAAC,eAAA,GAAcC,cAAc,EAAE;IAAtBrD,CAAC,GAAAoD,eAAA,CAADpD,CAAC;AACT,EAAA,IAAMsD,YAAY,GAAGC,MAAM,CAAC,IAAI,CAAC;AACjC,EAAA,IAAMC,UAAU,GAAGD,MAAM,CAAC,IAAI,CAAC;AAE/B,EAAA,IAAAE,SAAA,GAA4BC,QAAQ,CAAC,QAAQ,CAAC;IAAAC,UAAA,GAAArC,cAAA,CAAAmC,SAAA,EAAA,CAAA,CAAA;AAAvCG,IAAAA,KAAK,GAAAD,UAAA,CAAA,CAAA,CAAA;AAAEE,IAACF,UAAA,CAAA,CAAA,CAAA;AAAEG,QAAAA,OAAO,GAAAH,UAAA,CAAA,CAAA;AACxB,EAAA,IAAQI,QAAQ,GAAKD,OAAO,CAApBC,QAAQ;AAEhB,EAAA,IAAMC,aAAa,GAAG;AAAEC,IAAAA,QAAQ,EAAEL,KAAK,CAACvB,KAAK,CAAC4B;GAAU;AAExDC,EAAAA,SAAS,CACP,YAAA;AAAA,IAAA,OAAM,YAAM;MACV,IAAIV,UAAU,CAACW,OAAO,EAAEC,GAAG,CAACC,eAAe,CAACb,UAAU,CAACW,OAAO,CAAC;IACjE,CAAC;AAAA,EAAA,CAAA,EACD,EACF,CAAC;AAED,EAAA,IAAMG,oBAAoB,GAAG,SAAvBA,oBAAoBA,CAAGC,KAAK,EAAI;IACpC,IAAMC,SAAS,GAAGD,KAAK,CAACE,MAAM,CAACC,KAAK,CAAC,CAAC,CAAC;AACvC,IAAA,IAAMC,eAAe,GAAGC,oBAAoB,CAACJ,SAAS,CAAC;AAEvD,IAAA,IAAIG,eAAe,EAAE;AACnBE,MAAAA,MAAM,CAACC,KAAK,CAACH,eAAe,CAAC;AAE7B,MAAA,OAAOA,eAAe;AACxB,IAAA;IAEA,IAAInB,UAAU,CAACW,OAAO,EAAEC,GAAG,CAACC,eAAe,CAACb,UAAU,CAACW,OAAO,CAAC;IAC/DX,UAAU,CAACW,OAAO,GAAGC,GAAG,CAACW,eAAe,CAACP,SAAS,CAAC;AAEnD,IAAA,OAAOT,QAAQ,CAAC;MACdE,QAAQ,EAAET,UAAU,CAACW,OAAO;AAC5Ba,MAAAA,IAAI,EAAER;AACR,KAAC,CAAC;EACJ,CAAC;AAED,EAAA,IAAMS,iBAAiB,GAAG,SAApBA,iBAAiBA,GAAA;AAAA,IAAA,IAAAC,qBAAA;AAAA,IAAA,OAAA,CAAAA,qBAAA,GAAS5B,YAAY,CAACa,OAAO,MAAA,IAAA,IAAAe,qBAAA,KAAA,MAAA,GAAA,MAAA,GAApBA,qBAAA,CAAsBC,KAAK,EAAE;AAAA,EAAA,CAAA;AAE7D,EAAA,IAAMC,iBAAiB,GAAG,SAApBA,iBAAiBA,GAAS;IAC9B,IAAI5B,UAAU,CAACW,OAAO,EAAE;AACtBC,MAAAA,GAAG,CAACC,eAAe,CAACb,UAAU,CAACW,OAAO,CAAC;MACvCX,UAAU,CAACW,OAAO,GAAG,IAAI;AAC3B,IAAA;AACAJ,IAAAA,QAAQ,CAAC;AAAEE,MAAAA,QAAQ,EAAE,EAAE;AAAEe,MAAAA,IAAI,EAAE;AAAW,KAAC,CAAC;EAC9C,CAAC;AAED,EAAA,IAAMJ,oBAAoB,GAAG,SAAvBA,oBAAoBA,CAAGJ,SAAS,EAAI;AACxC,IAAA,IAAQa,IAAI,GAAWb,SAAS,CAAxBa,IAAI;MAAEC,IAAI,GAAKd,SAAS,CAAlBc,IAAI;AAElB,IAAA,IAAI,CAAC7E,gCAAgC,CAAC8E,QAAQ,CAACF,IAAI,CAAC,EAAE;MACpD,OAAOxE,iBAAiB,CAACC,YAAY;AACvC,IAAA;AAEA,IAAA,IAAIwE,IAAI,KAAK,CAAC,EAAE,OAAOzE,iBAAiB,CAACE,cAAc;IAEvD,IAAIuE,IAAI,GAAG5E,sCAAsC,EAAE;MACjD,OAAOG,iBAAiB,CAACG,mBAAmB;AAC9C,IAAA;AAEA,IAAA,OAAO,IAAI;EACb,CAAC;AAED,EAAA,oBACEwE,IAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,uCAAuC;AAAAC,IAAAA,QAAA,gBACpDF,IAAA,CAAA,KAAA,EAAA;AAAKC,MAAAA,SAAS,EAAC,mBAAmB;AAAAC,MAAAA,QAAA,gBAChCC,GAAA,CAAA,KAAA,EAAA;AAAKF,QAAAA,SAAS,EAAC,8BAA8B;QAAAC,QAAA,eAC3CC,GAAA,CAAC1C,QAAQ,EAAA;AACP2C,UAAAA,WAAW,EAAE;AAAEH,YAAAA,SAAS,EAAE;WAAiB;AAC3CI,UAAAA,UAAU,EAAC,OAAO;AAClBC,UAAAA,WAAW,EAAC,UAAU;AACtBC,UAAAA,IAAI,EAAEC,IAAK;UAAAN,QAAA,eAEXF,IAAA,CAACxC,IAAI,EAAA;AAAA0C,YAAAA,QAAA,EAAA,cACHC,GAAA,CAACzC,QAAQ,CAAC+C,MAAM,EAAA;AACd,cAAA,aAAA,EAAY,6BAA6B;AACzCC,cAAAA,OAAO,EAAEjB,iBAAkB;AAAAS,cAAAA,QAAA,EAE1B1B,aAAa,KAAA,IAAA,IAAbA,aAAa,KAAA,MAAA,IAAbA,aAAa,CAAEC,QAAQ,GACpBjE,CAAC,CAAC,sDAAsD,CAAC,GACzDA,CAAC,CAAC,sDAAsD;AAAC,aAC9C,CAAC,eAClB2F,GAAA,CAACzC,QAAQ,CAAC+C,MAAM,EAAA;AACd,cAAA,aAAA,EAAY,6BAA6B;AACzCC,cAAAA,OAAO,EAAEd,iBAAkB;cAAAM,QAAA,EAE1B1F,CAAC,CAAC,iCAAiC;AAAC,aACtB,CAAC;WACd;SACE;AAAC,OACR,CAAC,eACN2F,GAAA,CAACQ,MAAM,EAAA;AAACb,QAAAA,IAAI,EAAC,YAAY;AAACc,QAAAA,IAAI,EAAEpC;AAAc,OAAE,CAAC;KAC9C,CAAC,eACNwB,IAAA,CAAA,KAAA,EAAA;AAAKC,MAAAA,SAAS,EAAC,4BAA4B;MAAAC,QAAA,EAAA,cACzCC,GAAA,CAACU,UAAU,EAAA;AACTZ,QAAAA,SAAS,EAAC,oCAAoC;AAC9Ca,QAAAA,KAAK,EAAC,OAAO;QAAAZ,QAAA,eAEbC,GAAA,CAACY,KAAK,EAAA;AACJC,UAAAA,OAAO,EAAC,6DAA6D;AACrEC,UAAAA,MAAM,EAAE;YACNC,KAAK,EAAE/F,WAAW,CAACC;AACrB;SACD;OACS,CAAC,eACb+E,GAAA,CAAA,OAAA,EAAA;QACEgB,MAAM,EAAA,IAAA;AACNC,QAAAA,MAAM,EAAEnG,gCAAgC,CAACoG,IAAI,CAAC,GAAG,CAAE;AACnD,QAAA,aAAA,EAAY,iCAAiC;AAC7CvE,QAAAA,EAAE,EAAC,oBAAoB;AAEvBF,QAAAA,IAAI,EAAC,oBAAoB;AACzB0E,QAAAA,GAAG,EAAExD,YAAa;AAClB+B,QAAAA,IAAI,EAAC,MAAM;AACX0B,QAAAA,QAAQ,EAAEzC;AAAqB,OAAA,EAJ1BN,aAAa,KAAA,IAAA,IAAbA,aAAa,uBAAbA,aAAa,CAAEC,QAKrB,CAAC;AAAA,KACC,CAAC;AAAA,GACH,CAAC;AAEV;;;;"}
@@ -104,6 +104,7 @@ var ProfileImage = function ProfileImage() {
104
104
  var _useTranslation = reactI18next.useTranslation(),
105
105
  t = _useTranslation.t;
106
106
  var fileInputRef = React.useRef(null);
107
+ var blobUrlRef = React.useRef(null);
107
108
  var _useField = formik.useField("avatar"),
108
109
  _useField2 = _slicedToArray__default.default(_useField, 3),
109
110
  field = _useField2[0];
@@ -113,6 +114,11 @@ var ProfileImage = function ProfileImage() {
113
114
  var avatarDetails = {
114
115
  imageUrl: field.value.imageUrl
115
116
  };
117
+ React.useEffect(function () {
118
+ return function () {
119
+ if (blobUrlRef.current) URL.revokeObjectURL(blobUrlRef.current);
120
+ };
121
+ }, []);
116
122
  var onProfileImageChange = function onProfileImageChange(event) {
117
123
  var imageFile = event.target.files[0];
118
124
  var validationError = validateProfileImage(imageFile);
@@ -120,8 +126,10 @@ var ProfileImage = function ProfileImage() {
120
126
  Toastr__default.default.error(validationError);
121
127
  return validationError;
122
128
  }
129
+ if (blobUrlRef.current) URL.revokeObjectURL(blobUrlRef.current);
130
+ blobUrlRef.current = URL.createObjectURL(imageFile);
123
131
  return setValue({
124
- imageUrl: URL.createObjectURL(imageFile),
132
+ imageUrl: blobUrlRef.current,
125
133
  file: imageFile
126
134
  });
127
135
  };
@@ -130,7 +138,11 @@ var ProfileImage = function ProfileImage() {
130
138
  return (_fileInputRef$current = fileInputRef.current) === null || _fileInputRef$current === void 0 ? void 0 : _fileInputRef$current.click();
131
139
  };
132
140
  var handleRemoveImage = function handleRemoveImage() {
133
- return setValue({
141
+ if (blobUrlRef.current) {
142
+ URL.revokeObjectURL(blobUrlRef.current);
143
+ blobUrlRef.current = null;
144
+ }
145
+ setValue({
134
146
  imageUrl: "",
135
147
  file: "_destroy"
136
148
  });
@@ -153,9 +165,7 @@ var ProfileImage = function ProfileImage() {
153
165
  className: "relative shrink-0",
154
166
  children: [/*#__PURE__*/jsxRuntime.jsx("div", {
155
167
  className: "absolute bottom-0 end-0 z-10",
156
- children: /*#__PURE__*/jsxRuntime.jsx(Dropdown__default.default
157
- // eslint-disable-next-line @bigbinary/neeto/use-neetoui-classes
158
- , {
168
+ children: /*#__PURE__*/jsxRuntime.jsx(Dropdown__default.default, {
159
169
  buttonProps: {
160
170
  className: "rounded-full"
161
171
  },
@@ -182,7 +192,7 @@ var ProfileImage = function ProfileImage() {
182
192
  className: "flex flex-col items-center",
183
193
  children: [/*#__PURE__*/jsxRuntime.jsx(Typography__default.default, {
184
194
  className: "neeto-ui-text-gray-600 text-center",
185
- style: "body3",
195
+ style: "body2",
186
196
  children: /*#__PURE__*/jsxRuntime.jsx(reactI18next.Trans, {
187
197
  i18nKey: "neetoTeamMembers.profile.avatar.profilePictureUploadMessage",
188
198
  values: {
@@ -191,7 +201,7 @@ var ProfileImage = function ProfileImage() {
191
201
  })
192
202
  }), /*#__PURE__*/jsxRuntime.jsx("input", {
193
203
  hidden: true,
194
- accept: "image/*",
204
+ accept: ALLOWED_PROFILE_IMAGE_MIME_TYPES.join(","),
195
205
  "data-testid": "profile-image-upload-file-field",
196
206
  id: "uploadProfileImage",
197
207
  name: "profile_image_path",
@@ -208,4 +218,4 @@ exports.PROFILE_VALIDATION_SCHEMA = PROFILE_VALIDATION_SCHEMA;
208
218
  exports.ProfileImage = ProfileImage;
209
219
  exports.UPDATE_EMAIL_PATH = UPDATE_EMAIL_PATH;
210
220
  exports.useCountries = useCountries;
211
- //# sourceMappingURL=ProfileImage-BXsTglvo.js.map
221
+ //# sourceMappingURL=ProfileImage-DSnU8nqZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProfileImage-DSnU8nqZ.js","sources":["../app/javascript/src/components/Profile/constants.js","../app/javascript/src/components/Profile/hooks/useCountries.js","../app/javascript/src/components/Profile/ProfileImage.jsx"],"sourcesContent":["import { t } from \"i18next\";\nimport { globalProps } from \"neetocommons/initializers\";\nimport { validation as phoneNumberValidation } from \"neetomolecules/PhoneNumber\";\nimport * as yup from \"yup\";\n\nexport const PROFILE_VALIDATION_SCHEMA = yup.object().shape({\n firstName: yup\n .string()\n .trim()\n .required(t(\"neetoTeamMembers.profile.form.isRequired.firstName\"))\n .matches(\n /^[\\p{L}\\p{N} ,'-áéíóúÁÉÍÓÚ]+$/iu,\n t(\"neetoTeamMembers.profile.form.invalidName\")\n )\n .matches(/^[^.]+$/i, t(\"neetoTeamMembers.profile.form.dotsNotAllowed\")),\n lastName: yup\n .string()\n .trim()\n .required(t(\"neetoTeamMembers.profile.form.isRequired.lastName\"))\n .matches(\n /^[\\p{L}\\p{N} ,'-áéíóúÁÉÍÓÚ]+$/iu,\n t(\"neetoTeamMembers.profile.form.invalidName\")\n )\n .matches(/^[^.]+$/i, t(\"neetoTeamMembers.profile.form.dotsNotAllowed\")),\n phonenumber: phoneNumberValidation(\n t(\"neetoTeamMembers.profile.form.invalidPhoneNumber\")\n ).nullable(),\n dateFormat: yup\n .string()\n .required(t(\"neetoTeamMembers.profile.form.isRequired.dateFormat\")),\n});\n\nexport const UPDATE_EMAIL_PATH = \"/auth/email/edit\";\nexport const MANAGE_BILLING_PATH = \"/auth/billing/edit\";\n\nexport const ALLOWED_PROFILE_IMAGE_MIME_TYPES = [\"image/jpeg\", \"image/png\"];\nexport const IMAGE_DELETE_BUTTON_SIZE = 16;\nexport const STATIC_PROFILE_IMAGE_MAX_SIZE_IN_BYTES =\n globalProps.endUserUploadedFileSizeLimitInMb * 1024 * 1024;\n\nexport const VALIDATION_ERRORS = {\n invalid_type: t(\"neetoTeamMembers.profile.file.invalidType.image\"),\n corrupted_file: t(\"neetoTeamMembers.profile.file.corrupted\"),\n file_limit_exceeded: t(\"neetoTeamMembers.profile.file.limitExceeded\", {\n maxSize: globalProps.endUserUploadedFileSizeLimitInMb,\n }),\n};\n\nexport const DEFAULT_POPOVER_VALUES = {\n preferredDateFormat: {},\n preferredTimeFormat: {},\n timeZone: {},\n};\n","import { useCallback, useMemo, useState } from \"react\";\n\nimport { findById } from \"neetocist\";\n\nimport { useFetchCountries } from \"hooks/profile/useCountriesApi\";\n\nconst useCountries = () => {\n const [selectedCountryOption, setSelectedCountryOption] = useState(null);\n\n const { data: { countries = [] } = {}, isLoading } = useFetchCountries();\n\n const formatCountryOption = country => ({\n label: country?.name,\n value: country?.id,\n });\n\n const countryDropdownOptions = useMemo(\n () => countries.map(formatCountryOption),\n [countries]\n );\n\n const handleCountryChange = useCallback(\n countryOption => {\n setSelectedCountryOption(countryOption ?? null);\n\n const selectedCountry = findById(countryOption?.value, countries);\n\n return { dateFormat: selectedCountry?.dateFormat };\n },\n [countries]\n );\n\n return {\n countryDropdownOptions,\n selectedCountryOption,\n isFetchingCountriesList: isLoading,\n handleCountryChange,\n };\n};\n\nexport default useCountries;\n","import { useEffect, useRef } from \"react\";\n\nimport { useField } from \"formik\";\nimport { globalProps } from \"neetocommons/initializers\";\nimport { Edit } from \"neetoicons\";\nimport { Avatar, Dropdown, Toastr, Typography } from \"neetoui\";\nimport { useTranslation, Trans } from \"react-i18next\";\n\nimport {\n ALLOWED_PROFILE_IMAGE_MIME_TYPES,\n STATIC_PROFILE_IMAGE_MAX_SIZE_IN_BYTES,\n VALIDATION_ERRORS,\n} from \"./constants\";\n\nconst { Menu, MenuItem } = Dropdown;\n\nconst ProfileImage = () => {\n const { t } = useTranslation();\n const fileInputRef = useRef(null);\n const blobUrlRef = useRef(null);\n\n const [field, _, helpers] = useField(\"avatar\");\n const { setValue } = helpers;\n\n const avatarDetails = { imageUrl: field.value.imageUrl };\n\n useEffect(\n () => () => {\n if (blobUrlRef.current) URL.revokeObjectURL(blobUrlRef.current);\n },\n []\n );\n\n const onProfileImageChange = event => {\n const imageFile = event.target.files[0];\n const validationError = validateProfileImage(imageFile);\n\n if (validationError) {\n Toastr.error(validationError);\n\n return validationError;\n }\n\n if (blobUrlRef.current) URL.revokeObjectURL(blobUrlRef.current);\n blobUrlRef.current = URL.createObjectURL(imageFile);\n\n return setValue({\n imageUrl: blobUrlRef.current,\n file: imageFile,\n });\n };\n\n const handleChangeImage = () => fileInputRef.current?.click();\n\n const handleRemoveImage = () => {\n if (blobUrlRef.current) {\n URL.revokeObjectURL(blobUrlRef.current);\n blobUrlRef.current = null;\n }\n setValue({ imageUrl: \"\", file: \"_destroy\" });\n };\n\n const validateProfileImage = imageFile => {\n const { type, size } = imageFile;\n\n if (!ALLOWED_PROFILE_IMAGE_MIME_TYPES.includes(type)) {\n return VALIDATION_ERRORS.invalid_type;\n }\n\n if (size === 0) return VALIDATION_ERRORS.corrupted_file;\n\n if (size > STATIC_PROFILE_IMAGE_MAX_SIZE_IN_BYTES) {\n return VALIDATION_ERRORS.file_limit_exceeded;\n }\n\n return null;\n };\n\n return (\n <div className=\"mb-4 flex flex-col items-center gap-2\">\n <div className=\"relative shrink-0\">\n <div className=\"absolute bottom-0 end-0 z-10\">\n <Dropdown\n buttonProps={{ className: \"rounded-full\" }}\n buttonSize=\"small\"\n buttonStyle=\"tertiary\"\n icon={Edit}\n >\n <Menu>\n <MenuItem.Button\n data-testid=\"profile-image-upload-button\"\n onClick={handleChangeImage}\n >\n {avatarDetails?.imageUrl\n ? t(\"neetoTeamMembers.profile.avatar.changeProfilePicture\")\n : t(\"neetoTeamMembers.profile.avatar.uploadProfilePicture\")}\n </MenuItem.Button>\n <MenuItem.Button\n data-testid=\"profile-image-remove-button\"\n onClick={handleRemoveImage}\n >\n {t(\"neetoTeamMembers.buttons.remove\")}\n </MenuItem.Button>\n </Menu>\n </Dropdown>\n </div>\n <Avatar size=\"extraLarge\" user={avatarDetails} />\n </div>\n <div className=\"flex flex-col items-center\">\n <Typography\n className=\"neeto-ui-text-gray-600 text-center\"\n style=\"body2\"\n >\n <Trans\n i18nKey=\"neetoTeamMembers.profile.avatar.profilePictureUploadMessage\"\n values={{\n limit: globalProps.endUserUploadedFileSizeLimitInMb,\n }}\n />\n </Typography>\n <input\n hidden\n accept={ALLOWED_PROFILE_IMAGE_MIME_TYPES.join(\",\")}\n data-testid=\"profile-image-upload-file-field\"\n id=\"uploadProfileImage\"\n key={avatarDetails?.imageUrl}\n name=\"profile_image_path\"\n ref={fileInputRef}\n type=\"file\"\n onChange={onProfileImageChange}\n />\n </div>\n </div>\n );\n};\n\nexport default ProfileImage;\n"],"names":["PROFILE_VALIDATION_SCHEMA","yup","object","shape","firstName","string","trim","required","t","matches","lastName","phonenumber","phoneNumberValidation","nullable","dateFormat","UPDATE_EMAIL_PATH","MANAGE_BILLING_PATH","ALLOWED_PROFILE_IMAGE_MIME_TYPES","STATIC_PROFILE_IMAGE_MAX_SIZE_IN_BYTES","globalProps","endUserUploadedFileSizeLimitInMb","VALIDATION_ERRORS","invalid_type","corrupted_file","file_limit_exceeded","maxSize","useCountries","_useState","useState","_useState2","_slicedToArray","selectedCountryOption","setSelectedCountryOption","_useFetchCountries","useFetchCountries","_useFetchCountries$da","data","_useFetchCountries$da2","_useFetchCountries$da3","countries","isLoading","formatCountryOption","country","label","name","value","id","countryDropdownOptions","useMemo","map","handleCountryChange","useCallback","countryOption","selectedCountry","findById","isFetchingCountriesList","Menu","Dropdown","MenuItem","ProfileImage","_useTranslation","useTranslation","fileInputRef","useRef","blobUrlRef","_useField","useField","_useField2","field","_","helpers","setValue","avatarDetails","imageUrl","useEffect","current","URL","revokeObjectURL","onProfileImageChange","event","imageFile","target","files","validationError","validateProfileImage","Toastr","error","createObjectURL","file","handleChangeImage","_fileInputRef$current","click","handleRemoveImage","type","size","includes","_jsxs","className","children","_jsx","buttonProps","buttonSize","buttonStyle","icon","Edit","Button","onClick","Avatar","user","Typography","style","Trans","i18nKey","values","limit","hidden","accept","join","ref","onChange"],"mappings":"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"}
@@ -23,7 +23,7 @@ import { b as useFetchFilterOptions, c as useBulkUpdateMembers, d as useExportMe
23
23
  import { TABLE_KEYS, EVENTS } from './constants.js';
24
24
  import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
25
25
  import { buildFiltersFromURL } from '@bigbinary/neeto-filters-frontend/utils';
26
- import { d as defaultNeetoFiltersColumns, D as DEFAULT_FILTER_VALUES, b as buildFilterColumns, a as DEFAULT_IS_OPEN_VALUES, c as DEFAULT_SELECTED_ROWS, h as handlePageChange, g as getFilteredRoles, e as getColumnData, f as generateNoDataContent, r as renderPaginationProps, i as DEFAULT_RADIX, M as ManageMember, j as renderUpdateAlert } from './index-BpVod2uP.js';
26
+ import { d as defaultNeetoFiltersColumns, D as DEFAULT_FILTER_VALUES, b as buildFilterColumns, a as DEFAULT_IS_OPEN_VALUES, c as DEFAULT_SELECTED_ROWS, h as handlePageChange, g as getFilteredRoles, e as getColumnData, f as generateNoDataContent, r as renderPaginationProps, i as DEFAULT_RADIX, M as ManageMember, j as renderUpdateAlert } from './index-BcPx2-z8.js';
27
27
  import { n } from './inject-css-C2dztUxs.js';
28
28
  import { noop, isNotEmpty, hyphenate, findBy } from '@bigbinary/neeto-cist';
29
29
  import Button from '@bigbinary/neetoui/Button';
@@ -56,7 +56,7 @@ import '@bigbinary/neetoui/formik/ActionBlock';
56
56
  import '@bigbinary/neetoui/formik/Form';
57
57
  import './index-BISwUwuE.js';
58
58
  import 'formik';
59
- import './ProfileImage-DbLwreG6.js';
59
+ import './ProfileImage-D1kCXp4a.js';
60
60
  import './useCountriesApi-DK00167T.js';
61
61
  import '@bigbinary/neeto-icons/Edit';
62
62
  import '@bigbinary/neetoui/Avatar';
@@ -21,10 +21,10 @@ require('@bigbinary/neetoui/formik/Form');
21
21
  require('ramda');
22
22
  require('react-i18next');
23
23
  require('../index-4wQ9Y7v9.js');
24
- require('../ProfileImage-BXsTglvo.js');
24
+ require('../ProfileImage-DSnU8nqZ.js');
25
25
  require('../useRolesApi-DuL4eCuF.js');
26
26
  require('../useTeamsApi-ClWGPxNW.js');
27
- var ManageMember = require('../index-D_6vJd6A.js');
27
+ var ManageMember = require('../index-D8lgteE5.js');
28
28
  require('../RolesRadioGroup-Y0ye4oSa.js');
29
29
  require('react/jsx-runtime');
30
30
  require('@babel/runtime/helpers/toConsumableArray');
@@ -26,7 +26,7 @@ var ActionBlock = require('@bigbinary/neetoui/formik/ActionBlock');
26
26
  var ramda = require('ramda');
27
27
  var constants = require('../constants-D_H6M1Pm.js');
28
28
  var useProfileApi = require('../useProfileApi-BcuLCyms.js');
29
- var ProfileImage = require('../ProfileImage-BXsTglvo.js');
29
+ var ProfileImage = require('../ProfileImage-DSnU8nqZ.js');
30
30
  var jsxRuntime = require('react/jsx-runtime');
31
31
  var withImmutableActions = require('@bigbinary/neeto-commons-frontend/react-utils/withImmutableActions');
32
32
  var zustand = require('zustand');
@@ -25,7 +25,7 @@ var useTeamsApi = require('../useTeamsApi-ClWGPxNW.js');
25
25
  var constants$1 = require('./constants.js');
26
26
  var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
27
27
  var utils = require('@bigbinary/neeto-filters-frontend/utils');
28
- var ManageMember = require('../index-D_6vJd6A.js');
28
+ var ManageMember = require('../index-D8lgteE5.js');
29
29
  var injectCss = require('../inject-css-B6qYtOJe.js');
30
30
  var neetoCist = require('@bigbinary/neeto-cist');
31
31
  var Button = require('@bigbinary/neetoui/Button');
@@ -58,7 +58,7 @@ require('@bigbinary/neetoui/formik/ActionBlock');
58
58
  require('@bigbinary/neetoui/formik/Form');
59
59
  require('../index-4wQ9Y7v9.js');
60
60
  require('formik');
61
- require('../ProfileImage-BXsTglvo.js');
61
+ require('../ProfileImage-DSnU8nqZ.js');
62
62
  require('../useCountriesApi-CjhrbnjK.js');
63
63
  require('@bigbinary/neeto-icons/Edit');
64
64
  require('@bigbinary/neetoui/Avatar');
package/dist/cjs/index.js CHANGED
@@ -7,7 +7,7 @@ var Profile = require('./Profile.js');
7
7
  var Roles = require('./Roles.js');
8
8
  var Permissions = require('../Permissions-B6RRMTKS.js');
9
9
  var TeamMembers = require('./TeamMembers.js');
10
- var ManageMember = require('../index-D_6vJd6A.js');
10
+ var ManageMember = require('../index-D8lgteE5.js');
11
11
  var RolesRadioGroup = require('../RolesRadioGroup-Y0ye4oSa.js');
12
12
  var TeamsAndMembersDropdown = require('./TeamsAndMembersDropdown.js');
13
13
  var TeamsDropdown = require('./TeamsDropdown.js');
@@ -77,7 +77,7 @@ require('@bigbinary/neetoui/Label');
77
77
  require('@bigbinary/neetoui/Toastr');
78
78
  require('../useProfileApi-BcuLCyms.js');
79
79
  require('../useCountriesApi-CjhrbnjK.js');
80
- require('../ProfileImage-BXsTglvo.js');
80
+ require('../ProfileImage-DSnU8nqZ.js');
81
81
  require('@bigbinary/neeto-icons/Edit');
82
82
  require('@bigbinary/neeto-commons-frontend/react-utils/withImmutableActions');
83
83
  require('zustand');
@@ -20,7 +20,7 @@ var yup = require('yup');
20
20
  var formik = require('formik');
21
21
  var MoreDropdown = require('@bigbinary/neeto-molecules/v2/MoreDropdown');
22
22
  var jsxRuntime = require('react/jsx-runtime');
23
- var ActionBlock = require('../../ActionBlock-C9Iy0jGZ.js');
23
+ var ActionBlock = require('../../ActionBlock-DjypCjju.js');
24
24
  var Select = require('../../Select-CshPoN2b.js');
25
25
  require('@babel/runtime/helpers/objectWithoutProperties');
26
26
  var lucideReact = require('lucide-react');
@@ -16,9 +16,9 @@ require('react-i18next');
16
16
  require('sonner');
17
17
  require('../../useRolesApi-DuL4eCuF.js');
18
18
  require('../../useTeamsApi-ClWGPxNW.js');
19
- var v2_ManageMember = require('../../index-B3Cx1asZ.js');
19
+ var v2_ManageMember = require('../../index-CHvbZfMI.js');
20
20
  require('../../RolesRadioGroup-cRZea-gs.js');
21
- require('../../ActionBlock-C9Iy0jGZ.js');
21
+ require('../../ActionBlock-DjypCjju.js');
22
22
  require('../../Select-CshPoN2b.js');
23
23
  require('@babel/runtime/helpers/objectWithoutProperties');
24
24
  require('formik');
@@ -18,7 +18,7 @@ var constants = require('@bigbinary/neeto-commons-frontend/v2/constants');
18
18
  var yup = require('yup');
19
19
  var jsxRuntime = require('react/jsx-runtime');
20
20
  var utils = require('@bigbinary/neeto-commons-frontend/v2/utils');
21
- var ActionBlock = require('../../ActionBlock-C9Iy0jGZ.js');
21
+ var ActionBlock = require('../../ActionBlock-DjypCjju.js');
22
22
  var Select = require('../../Select-CshPoN2b.js');
23
23
  require('@babel/runtime/helpers/defineProperty');
24
24
  require('@babel/runtime/helpers/objectWithoutProperties');
@@ -24,7 +24,7 @@ var ProfileImage = require('../../ProfileImage-DIc2wajv.js');
24
24
  var i18next = require('i18next');
25
25
  var initializers = require('@bigbinary/neeto-commons-frontend/v2/initializers');
26
26
  var yup = require('yup');
27
- var ActionBlock = require('../../ActionBlock-C9Iy0jGZ.js');
27
+ var ActionBlock = require('../../ActionBlock-DjypCjju.js');
28
28
  var Select = require('../../Select-CshPoN2b.js');
29
29
  require('formik');
30
30
  var jsxRuntime = require('react/jsx-runtime');
@@ -20,7 +20,7 @@ var formik = require('@bigbinary/neeto-atoms/formik');
20
20
  var constants$1 = require('../../constants-D_H6M1Pm.js');
21
21
  var yup = require('yup');
22
22
  var v2_Permissions = require('../../Permissions-BH2pNPMx.js');
23
- var ActionBlock = require('../../ActionBlock-C9Iy0jGZ.js');
23
+ var ActionBlock = require('../../ActionBlock-DjypCjju.js');
24
24
  var Select = require('../../Select-CshPoN2b.js');
25
25
  require('@babel/runtime/helpers/objectWithoutProperties');
26
26
  require('formik');
@@ -25,7 +25,7 @@ var i18next = require('i18next');
25
25
  var jsxRuntime = require('react/jsx-runtime');
26
26
  var constants$2 = require('../../constants-il7hAfM-.js');
27
27
  var NeetoHeader = require('@bigbinary/neeto-molecules/v2/Header');
28
- var v2_ManageMember = require('../../index-B3Cx1asZ.js');
28
+ var v2_ManageMember = require('../../index-CHvbZfMI.js');
29
29
  var withReactQuery = require('../../withReactQuery-DvSkXhEx.js');
30
30
  require('@babel/runtime/helpers/objectWithoutProperties');
31
31
  require('@tanstack/react-query');
@@ -58,7 +58,7 @@ require('@bigbinary/neeto-molecules/v2/PhoneNumber');
58
58
  require('../../ProfileImage-DIc2wajv.js');
59
59
  require('../../inject-css-B6qYtOJe.js');
60
60
  require('../../useCountriesApi-CjhrbnjK.js');
61
- require('../../ActionBlock-C9Iy0jGZ.js');
61
+ require('../../ActionBlock-DjypCjju.js');
62
62
  require('../../index-BOQKf6as.js');
63
63
  require('@bigbinary/neeto-atoms/primitives');
64
64
  require('@bigbinary/neeto-molecules/v2/MoreDropdown');
@@ -162,7 +162,8 @@ var RolesDropdown = function RolesDropdown(_ref) {
162
162
  },
163
163
  label: t("neetoTeamMembers.buttons.changeRole"),
164
164
  triggerProps: {
165
- disabled: !isUpdatingAllowed
165
+ disabled: !isUpdatingAllowed,
166
+ "data-testid": "take-action-dropdown-change-role-button"
166
167
  },
167
168
  children: [isSearchable && /*#__PURE__*/jsxRuntime.jsx("div", {
168
169
  className: "px-3 py-2",