@bigbinary/neeto-team-members-frontend 5.1.1 → 5.1.2-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 (38) hide show
  1. package/dist/.ready +1 -1
  2. package/dist/ManageMember.js +2 -2
  3. package/dist/Profile.js +1 -1
  4. package/dist/{ProfileImage-DIc2wajv.js → ProfileImage-BVGvRQVx.js} +4 -4
  5. package/dist/ProfileImage-BVGvRQVx.js.map +1 -0
  6. package/dist/{ProfileImage-7HtCnKc-.js → ProfileImage-D6FlUbTV.js} +5 -5
  7. package/dist/ProfileImage-D6FlUbTV.js.map +1 -0
  8. package/dist/{ProfileImage-BXsTglvo.js → ProfileImage-DLWJaZ0H.js} +23 -9
  9. package/dist/ProfileImage-DLWJaZ0H.js.map +1 -0
  10. package/dist/{ProfileImage-DbLwreG6.js → ProfileImage-g_BVBsn6.js} +25 -11
  11. package/dist/ProfileImage-g_BVBsn6.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/ManageMember.js +2 -2
  18. package/dist/cjs/v2/Profile.js +1 -1
  19. package/dist/cjs/v2/TeamMembers.js +2 -2
  20. package/dist/cjs/v2/index.js +2 -2
  21. package/dist/{index-CHvbZfMI.js → index-BUDkqcf9.js} +2 -2
  22. package/dist/{index-CHvbZfMI.js.map → index-BUDkqcf9.js.map} +1 -1
  23. package/dist/{index-D_6vJd6A.js → index-CCrDkOrb.js} +2 -2
  24. package/dist/{index-D_6vJd6A.js.map → index-CCrDkOrb.js.map} +1 -1
  25. package/dist/{index-BpVod2uP.js → index-DkYQBe1V.js} +2 -2
  26. package/dist/{index-BpVod2uP.js.map → index-DkYQBe1V.js.map} +1 -1
  27. package/dist/{index-venWfbj6.js → index-i205PvB5.js} +2 -2
  28. package/dist/{index-venWfbj6.js.map → index-i205PvB5.js.map} +1 -1
  29. package/dist/index.js +2 -2
  30. package/dist/v2/ManageMember.js +2 -2
  31. package/dist/v2/Profile.js +1 -1
  32. package/dist/v2/TeamMembers.js +2 -2
  33. package/dist/v2/index.js +2 -2
  34. package/package.json +1 -1
  35. package/dist/ProfileImage-7HtCnKc-.js.map +0 -1
  36. package/dist/ProfileImage-BXsTglvo.js.map +0 -1
  37. package/dist/ProfileImage-DIc2wajv.js.map +0 -1
  38. package/dist/ProfileImage-DbLwreG6.js.map +0 -1
package/dist/.ready CHANGED
@@ -1 +1 @@
1
- Built at 2026-09-24T13:09:50.263Z
1
+ Built at 2026-09-24T14:51:47.620Z
@@ -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-g_BVBsn6.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-DkYQBe1V.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-g_BVBsn6.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';
@@ -8,7 +8,6 @@ var useCountriesApi = require('./useCountriesApi-CjhrbnjK.js');
8
8
  var neetoAtoms = require('@bigbinary/neeto-atoms');
9
9
  var formik = require('formik');
10
10
  var lucideReact = require('lucide-react');
11
- var initializers = require('@bigbinary/neeto-commons-frontend/v2/initializers');
12
11
  var reactI18next = require('react-i18next');
13
12
  var sonner = require('sonner');
14
13
  var jsxRuntime = require('react/jsx-runtime');
@@ -56,13 +55,14 @@ var useCountries = function useCountries() {
56
55
  };
57
56
 
58
57
  var ProfileImage = function ProfileImage() {
59
- var _globalProps$user;
60
58
  var _useTranslation = reactI18next.useTranslation(),
61
59
  t = _useTranslation.t;
62
60
  var _useField = formik.useField("avatar"),
63
61
  _useField2 = _slicedToArray__default.default(_useField, 3),
64
62
  field = _useField2[0],
65
63
  helpers = _useField2[2];
64
+ var _useFormikContext = formik.useFormikContext(),
65
+ values = _useFormikContext.values;
66
66
  var fileInputRef = React.useRef(null);
67
67
  var _ref = field.value || {},
68
68
  imageUrl = _ref.imageUrl,
@@ -94,7 +94,7 @@ var ProfileImage = function ProfileImage() {
94
94
  children: [/*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Avatar, {
95
95
  size: "xl",
96
96
  user: {
97
- name: (_globalProps$user = initializers.globalProps.user) === null || _globalProps$user === void 0 ? void 0 : _globalProps$user.name,
97
+ name: [values.firstName, values.lastName].filter(Boolean).join(" "),
98
98
  imageUrl: displayUrl
99
99
  }
100
100
  }), /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.DropdownMenu, {
@@ -133,4 +133,4 @@ var ProfileImage = function ProfileImage() {
133
133
 
134
134
  exports.ProfileImage = ProfileImage;
135
135
  exports.useCountries = useCountries;
136
- //# sourceMappingURL=ProfileImage-DIc2wajv.js.map
136
+ //# sourceMappingURL=ProfileImage-BVGvRQVx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProfileImage-BVGvRQVx.js","sources":["../app/javascript/src/v2/components/Profile/hooks/useCountries.js","../app/javascript/src/v2/components/Profile/ProfileImage.jsx"],"sourcesContent":["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","/* eslint-disable @bigbinary/neeto/no-missing-localization */\n// v2 ProfileImage — placeholder, full implementation in Phase 3.5\n// Used by ManageMember for member avatar editing\nimport { useRef } from \"react\";\n\nimport { Avatar, Button, DropdownMenu } from \"@bigbinary/neeto-atoms\";\nimport { useField, useFormikContext } from \"formik\";\nimport { Pencil } from \"lucide-react\";\nimport { useTranslation } from \"react-i18next\";\nimport { toast } from \"sonner\";\n\nconst ProfileImage = () => {\n const { t } = useTranslation();\n const [field, , helpers] = useField(\"avatar\");\n const { values } = useFormikContext();\n const fileInputRef = useRef(null);\n\n const { imageUrl, file } = field.value || {};\n const displayUrl =\n file && file !== \"_destroy\" ? URL.createObjectURL(file) : imageUrl;\n\n const handleFileSelect = event => {\n const selectedFile = event.target.files[0];\n if (!selectedFile) return;\n\n const maxSize = 5 * 1024 * 1024;\n if (selectedFile.size > maxSize) {\n toast.error(\n t(\n \"neetoTeamMembers.common.fileSizeTooLarge\",\n \"File size must be less than 5MB\"\n )\n );\n\n return;\n }\n\n helpers.setValue({ imageUrl, file: selectedFile });\n };\n\n const handleRemove = () => {\n helpers.setValue({ imageUrl: \"\", file: \"_destroy\" });\n };\n\n return (\n <div className=\"flex items-center gap-4\">\n <div className=\"relative\">\n <Avatar\n size=\"xl\"\n user={{\n name: [values.firstName, values.lastName].filter(Boolean).join(\" \"),\n imageUrl: displayUrl,\n }}\n />\n <DropdownMenu\n customTarget={\n <Button\n className=\"absolute -bottom-1 -right-1 rounded-full\"\n icon={Pencil}\n size=\"icon-xs\"\n variant=\"outline\"\n aria-label={t(\n \"neetoTeamMembers.common.changeProfileImage\",\n \"Change profile image\"\n )}\n />\n }\n >\n <DropdownMenu.Menu>\n <DropdownMenu.MenuItem\n data-testid=\"profile-image-upload-button\"\n onClick={() => fileInputRef.current?.click()}\n >\n {t(\"neetoTeamMembers.common.upload\", \"Upload\")}\n </DropdownMenu.MenuItem>\n {displayUrl && (\n <DropdownMenu.MenuItem\n data-testid=\"profile-image-remove-button\"\n onClick={handleRemove}\n >\n {t(\"neetoTeamMembers.common.remove\")}\n </DropdownMenu.MenuItem>\n )}\n </DropdownMenu.Menu>\n </DropdownMenu>\n </div>\n <input\n accept=\"image/*\"\n className=\"hidden\"\n data-testid=\"profile-image-upload-file-field\"\n ref={fileInputRef}\n type=\"file\"\n onChange={handleFileSelect}\n />\n </div>\n );\n};\n\nexport default ProfileImage;\n"],"names":["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","dateFormat","isFetchingCountriesList","ProfileImage","_useTranslation","useTranslation","t","_useField","useField","_useField2","field","helpers","_useFormikContext","useFormikContext","values","fileInputRef","useRef","_ref","imageUrl","file","displayUrl","URL","createObjectURL","handleFileSelect","event","selectedFile","target","files","maxSize","size","toast","error","setValue","handleRemove","_jsxs","className","children","_jsx","Avatar","user","firstName","lastName","filter","Boolean","join","DropdownMenu","customTarget","Button","icon","Pencil","variant","Menu","MenuItem","onClick","_fileInputRef$current","current","click","accept","ref","type","onChange"],"mappings":"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"}
@@ -4,9 +4,8 @@ import { useState, useMemo, useCallback, useRef } from 'react';
4
4
  import { findById } from '@bigbinary/neeto-cist';
5
5
  import { u as useFetchCountries } from './useCountriesApi-DK00167T.js';
6
6
  import { Avatar, DropdownMenu, Button } from '@bigbinary/neeto-atoms';
7
- import { useField } from 'formik';
7
+ import { useField, useFormikContext } from 'formik';
8
8
  import { Pencil } from 'lucide-react';
9
- import { globalProps } from '@bigbinary/neeto-commons-frontend/v2/initializers';
10
9
  import { useTranslation } from 'react-i18next';
11
10
  import { toast } from 'sonner';
12
11
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -50,13 +49,14 @@ var useCountries = function useCountries() {
50
49
  };
51
50
 
52
51
  var ProfileImage = function ProfileImage() {
53
- var _globalProps$user;
54
52
  var _useTranslation = useTranslation(),
55
53
  t = _useTranslation.t;
56
54
  var _useField = useField("avatar"),
57
55
  _useField2 = _slicedToArray(_useField, 3),
58
56
  field = _useField2[0],
59
57
  helpers = _useField2[2];
58
+ var _useFormikContext = useFormikContext(),
59
+ values = _useFormikContext.values;
60
60
  var fileInputRef = useRef(null);
61
61
  var _ref = field.value || {},
62
62
  imageUrl = _ref.imageUrl,
@@ -88,7 +88,7 @@ var ProfileImage = function ProfileImage() {
88
88
  children: [/*#__PURE__*/jsx(Avatar, {
89
89
  size: "xl",
90
90
  user: {
91
- name: (_globalProps$user = globalProps.user) === null || _globalProps$user === void 0 ? void 0 : _globalProps$user.name,
91
+ name: [values.firstName, values.lastName].filter(Boolean).join(" "),
92
92
  imageUrl: displayUrl
93
93
  }
94
94
  }), /*#__PURE__*/jsx(DropdownMenu, {
@@ -126,4 +126,4 @@ var ProfileImage = function ProfileImage() {
126
126
  };
127
127
 
128
128
  export { ProfileImage as P, useCountries as u };
129
- //# sourceMappingURL=ProfileImage-7HtCnKc-.js.map
129
+ //# sourceMappingURL=ProfileImage-D6FlUbTV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProfileImage-D6FlUbTV.js","sources":["../app/javascript/src/v2/components/Profile/hooks/useCountries.js","../app/javascript/src/v2/components/Profile/ProfileImage.jsx"],"sourcesContent":["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","/* eslint-disable @bigbinary/neeto/no-missing-localization */\n// v2 ProfileImage — placeholder, full implementation in Phase 3.5\n// Used by ManageMember for member avatar editing\nimport { useRef } from \"react\";\n\nimport { Avatar, Button, DropdownMenu } from \"@bigbinary/neeto-atoms\";\nimport { useField, useFormikContext } from \"formik\";\nimport { Pencil } from \"lucide-react\";\nimport { useTranslation } from \"react-i18next\";\nimport { toast } from \"sonner\";\n\nconst ProfileImage = () => {\n const { t } = useTranslation();\n const [field, , helpers] = useField(\"avatar\");\n const { values } = useFormikContext();\n const fileInputRef = useRef(null);\n\n const { imageUrl, file } = field.value || {};\n const displayUrl =\n file && file !== \"_destroy\" ? URL.createObjectURL(file) : imageUrl;\n\n const handleFileSelect = event => {\n const selectedFile = event.target.files[0];\n if (!selectedFile) return;\n\n const maxSize = 5 * 1024 * 1024;\n if (selectedFile.size > maxSize) {\n toast.error(\n t(\n \"neetoTeamMembers.common.fileSizeTooLarge\",\n \"File size must be less than 5MB\"\n )\n );\n\n return;\n }\n\n helpers.setValue({ imageUrl, file: selectedFile });\n };\n\n const handleRemove = () => {\n helpers.setValue({ imageUrl: \"\", file: \"_destroy\" });\n };\n\n return (\n <div className=\"flex items-center gap-4\">\n <div className=\"relative\">\n <Avatar\n size=\"xl\"\n user={{\n name: [values.firstName, values.lastName].filter(Boolean).join(\" \"),\n imageUrl: displayUrl,\n }}\n />\n <DropdownMenu\n customTarget={\n <Button\n className=\"absolute -bottom-1 -right-1 rounded-full\"\n icon={Pencil}\n size=\"icon-xs\"\n variant=\"outline\"\n aria-label={t(\n \"neetoTeamMembers.common.changeProfileImage\",\n \"Change profile image\"\n )}\n />\n }\n >\n <DropdownMenu.Menu>\n <DropdownMenu.MenuItem\n data-testid=\"profile-image-upload-button\"\n onClick={() => fileInputRef.current?.click()}\n >\n {t(\"neetoTeamMembers.common.upload\", \"Upload\")}\n </DropdownMenu.MenuItem>\n {displayUrl && (\n <DropdownMenu.MenuItem\n data-testid=\"profile-image-remove-button\"\n onClick={handleRemove}\n >\n {t(\"neetoTeamMembers.common.remove\")}\n </DropdownMenu.MenuItem>\n )}\n </DropdownMenu.Menu>\n </DropdownMenu>\n </div>\n <input\n accept=\"image/*\"\n className=\"hidden\"\n data-testid=\"profile-image-upload-file-field\"\n ref={fileInputRef}\n type=\"file\"\n onChange={handleFileSelect}\n />\n </div>\n );\n};\n\nexport default ProfileImage;\n"],"names":["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","dateFormat","isFetchingCountriesList","ProfileImage","_useTranslation","useTranslation","t","_useField","useField","_useField2","field","helpers","_useFormikContext","useFormikContext","values","fileInputRef","useRef","_ref","imageUrl","file","displayUrl","URL","createObjectURL","handleFileSelect","event","selectedFile","target","files","maxSize","size","toast","error","setValue","handleRemove","_jsxs","className","children","_jsx","Avatar","user","firstName","lastName","filter","Boolean","join","DropdownMenu","customTarget","Button","icon","Pencil","variant","Menu","MenuItem","onClick","_fileInputRef$current","current","click","accept","ref","type","onChange"],"mappings":"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"}
@@ -101,18 +101,28 @@ var useCountries = function useCountries() {
101
101
  var Menu = Dropdown__default.default.Menu,
102
102
  MenuItem = Dropdown__default.default.MenuItem;
103
103
  var ProfileImage = function ProfileImage() {
104
+ var _field$value;
104
105
  var _useTranslation = reactI18next.useTranslation(),
105
106
  t = _useTranslation.t;
106
107
  var fileInputRef = React.useRef(null);
108
+ var blobUrlRef = React.useRef(null);
107
109
  var _useField = formik.useField("avatar"),
108
110
  _useField2 = _slicedToArray__default.default(_useField, 3),
109
111
  field = _useField2[0];
110
112
  _useField2[1];
111
113
  var helpers = _useField2[2];
114
+ var _useFormikContext = formik.useFormikContext(),
115
+ values = _useFormikContext.values;
112
116
  var setValue = helpers.setValue;
113
117
  var avatarDetails = {
114
- imageUrl: field.value.imageUrl
118
+ name: [values.firstName, values.lastName].filter(Boolean).join(" "),
119
+ imageUrl: (_field$value = field.value) === null || _field$value === void 0 ? void 0 : _field$value.imageUrl
115
120
  };
121
+ React.useEffect(function () {
122
+ return function () {
123
+ if (blobUrlRef.current) URL.revokeObjectURL(blobUrlRef.current);
124
+ };
125
+ }, []);
116
126
  var onProfileImageChange = function onProfileImageChange(event) {
117
127
  var imageFile = event.target.files[0];
118
128
  var validationError = validateProfileImage(imageFile);
@@ -120,8 +130,10 @@ var ProfileImage = function ProfileImage() {
120
130
  Toastr__default.default.error(validationError);
121
131
  return validationError;
122
132
  }
133
+ if (blobUrlRef.current) URL.revokeObjectURL(blobUrlRef.current);
134
+ blobUrlRef.current = URL.createObjectURL(imageFile);
123
135
  return setValue({
124
- imageUrl: URL.createObjectURL(imageFile),
136
+ imageUrl: blobUrlRef.current,
125
137
  file: imageFile
126
138
  });
127
139
  };
@@ -130,7 +142,11 @@ var ProfileImage = function ProfileImage() {
130
142
  return (_fileInputRef$current = fileInputRef.current) === null || _fileInputRef$current === void 0 ? void 0 : _fileInputRef$current.click();
131
143
  };
132
144
  var handleRemoveImage = function handleRemoveImage() {
133
- return setValue({
145
+ if (blobUrlRef.current) {
146
+ URL.revokeObjectURL(blobUrlRef.current);
147
+ blobUrlRef.current = null;
148
+ }
149
+ setValue({
134
150
  imageUrl: "",
135
151
  file: "_destroy"
136
152
  });
@@ -153,9 +169,7 @@ var ProfileImage = function ProfileImage() {
153
169
  className: "relative shrink-0",
154
170
  children: [/*#__PURE__*/jsxRuntime.jsx("div", {
155
171
  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
- , {
172
+ children: /*#__PURE__*/jsxRuntime.jsx(Dropdown__default.default, {
159
173
  buttonProps: {
160
174
  className: "rounded-full"
161
175
  },
@@ -182,7 +196,7 @@ var ProfileImage = function ProfileImage() {
182
196
  className: "flex flex-col items-center",
183
197
  children: [/*#__PURE__*/jsxRuntime.jsx(Typography__default.default, {
184
198
  className: "neeto-ui-text-gray-600 text-center",
185
- style: "body3",
199
+ style: "body2",
186
200
  children: /*#__PURE__*/jsxRuntime.jsx(reactI18next.Trans, {
187
201
  i18nKey: "neetoTeamMembers.profile.avatar.profilePictureUploadMessage",
188
202
  values: {
@@ -191,7 +205,7 @@ var ProfileImage = function ProfileImage() {
191
205
  })
192
206
  }), /*#__PURE__*/jsxRuntime.jsx("input", {
193
207
  hidden: true,
194
- accept: "image/*",
208
+ accept: ALLOWED_PROFILE_IMAGE_MIME_TYPES.join(","),
195
209
  "data-testid": "profile-image-upload-file-field",
196
210
  id: "uploadProfileImage",
197
211
  name: "profile_image_path",
@@ -208,4 +222,4 @@ exports.PROFILE_VALIDATION_SCHEMA = PROFILE_VALIDATION_SCHEMA;
208
222
  exports.ProfileImage = ProfileImage;
209
223
  exports.UPDATE_EMAIL_PATH = UPDATE_EMAIL_PATH;
210
224
  exports.useCountries = useCountries;
211
- //# sourceMappingURL=ProfileImage-BXsTglvo.js.map
225
+ //# sourceMappingURL=ProfileImage-DLWJaZ0H.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProfileImage-DLWJaZ0H.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, useFormikContext } 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 { values } = useFormikContext();\n const { setValue } = helpers;\n\n const avatarDetails = {\n name: [values.firstName, values.lastName].filter(Boolean).join(\" \"),\n imageUrl: field.value?.imageUrl,\n };\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","_field$value","_useTranslation","useTranslation","fileInputRef","useRef","blobUrlRef","_useField","useField","_useField2","field","_","helpers","_useFormikContext","useFormikContext","values","setValue","avatarDetails","filter","Boolean","join","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","limit","hidden","accept","ref","onChange"],"mappings":"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"}
@@ -1,8 +1,8 @@
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
- import { useField } from 'formik';
5
+ import { useField, useFormikContext } from 'formik';
6
6
  import { globalProps } from '@bigbinary/neeto-commons-frontend/initializers';
7
7
  import Edit from '@bigbinary/neeto-icons/Edit';
8
8
  import Avatar from '@bigbinary/neetoui/Avatar';
@@ -71,18 +71,28 @@ var useCountries = function useCountries() {
71
71
  var Menu = Dropdown.Menu,
72
72
  MenuItem = Dropdown.MenuItem;
73
73
  var ProfileImage = function ProfileImage() {
74
+ var _field$value;
74
75
  var _useTranslation = useTranslation(),
75
76
  t = _useTranslation.t;
76
77
  var fileInputRef = useRef(null);
78
+ var blobUrlRef = useRef(null);
77
79
  var _useField = useField("avatar"),
78
80
  _useField2 = _slicedToArray(_useField, 3),
79
81
  field = _useField2[0];
80
82
  _useField2[1];
81
83
  var helpers = _useField2[2];
84
+ var _useFormikContext = useFormikContext(),
85
+ values = _useFormikContext.values;
82
86
  var setValue = helpers.setValue;
83
87
  var avatarDetails = {
84
- imageUrl: field.value.imageUrl
88
+ name: [values.firstName, values.lastName].filter(Boolean).join(" "),
89
+ imageUrl: (_field$value = field.value) === null || _field$value === void 0 ? void 0 : _field$value.imageUrl
85
90
  };
91
+ useEffect(function () {
92
+ return function () {
93
+ if (blobUrlRef.current) URL.revokeObjectURL(blobUrlRef.current);
94
+ };
95
+ }, []);
86
96
  var onProfileImageChange = function onProfileImageChange(event) {
87
97
  var imageFile = event.target.files[0];
88
98
  var validationError = validateProfileImage(imageFile);
@@ -90,8 +100,10 @@ var ProfileImage = function ProfileImage() {
90
100
  Toastr.error(validationError);
91
101
  return validationError;
92
102
  }
103
+ if (blobUrlRef.current) URL.revokeObjectURL(blobUrlRef.current);
104
+ blobUrlRef.current = URL.createObjectURL(imageFile);
93
105
  return setValue({
94
- imageUrl: URL.createObjectURL(imageFile),
106
+ imageUrl: blobUrlRef.current,
95
107
  file: imageFile
96
108
  });
97
109
  };
@@ -100,7 +112,11 @@ var ProfileImage = function ProfileImage() {
100
112
  return (_fileInputRef$current = fileInputRef.current) === null || _fileInputRef$current === void 0 ? void 0 : _fileInputRef$current.click();
101
113
  };
102
114
  var handleRemoveImage = function handleRemoveImage() {
103
- return setValue({
115
+ if (blobUrlRef.current) {
116
+ URL.revokeObjectURL(blobUrlRef.current);
117
+ blobUrlRef.current = null;
118
+ }
119
+ setValue({
104
120
  imageUrl: "",
105
121
  file: "_destroy"
106
122
  });
@@ -123,9 +139,7 @@ var ProfileImage = function ProfileImage() {
123
139
  className: "relative shrink-0",
124
140
  children: [/*#__PURE__*/jsx("div", {
125
141
  className: "absolute bottom-0 end-0 z-10",
126
- children: /*#__PURE__*/jsx(Dropdown
127
- // eslint-disable-next-line @bigbinary/neeto/use-neetoui-classes
128
- , {
142
+ children: /*#__PURE__*/jsx(Dropdown, {
129
143
  buttonProps: {
130
144
  className: "rounded-full"
131
145
  },
@@ -152,7 +166,7 @@ var ProfileImage = function ProfileImage() {
152
166
  className: "flex flex-col items-center",
153
167
  children: [/*#__PURE__*/jsx(Typography, {
154
168
  className: "neeto-ui-text-gray-600 text-center",
155
- style: "body3",
169
+ style: "body2",
156
170
  children: /*#__PURE__*/jsx(Trans, {
157
171
  i18nKey: "neetoTeamMembers.profile.avatar.profilePictureUploadMessage",
158
172
  values: {
@@ -161,7 +175,7 @@ var ProfileImage = function ProfileImage() {
161
175
  })
162
176
  }), /*#__PURE__*/jsx("input", {
163
177
  hidden: true,
164
- accept: "image/*",
178
+ accept: ALLOWED_PROFILE_IMAGE_MIME_TYPES.join(","),
165
179
  "data-testid": "profile-image-upload-file-field",
166
180
  id: "uploadProfileImage",
167
181
  name: "profile_image_path",
@@ -174,4 +188,4 @@ var ProfileImage = function ProfileImage() {
174
188
  };
175
189
 
176
190
  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
191
+ //# sourceMappingURL=ProfileImage-g_BVBsn6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProfileImage-g_BVBsn6.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, useFormikContext } 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 { values } = useFormikContext();\n const { setValue } = helpers;\n\n const avatarDetails = {\n name: [values.firstName, values.lastName].filter(Boolean).join(\" \"),\n imageUrl: field.value?.imageUrl,\n };\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","_field$value","_useTranslation","useTranslation","fileInputRef","useRef","blobUrlRef","_useField","useField","_useField2","field","_","helpers","_useFormikContext","useFormikContext","values","setValue","avatarDetails","filter","Boolean","join","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","limit","hidden","accept","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-DkYQBe1V.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-g_BVBsn6.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-DLWJaZ0H.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-CCrDkOrb.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-DLWJaZ0H.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-CCrDkOrb.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-DLWJaZ0H.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-CCrDkOrb.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-DLWJaZ0H.js');
81
81
  require('@bigbinary/neeto-icons/Edit');
82
82
  require('@bigbinary/neeto-commons-frontend/react-utils/withImmutableActions');
83
83
  require('zustand');
@@ -16,7 +16,7 @@ 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-CHvbZfMI.js');
19
+ var v2_ManageMember = require('../../index-BUDkqcf9.js');
20
20
  require('../../RolesRadioGroup-cRZea-gs.js');
21
21
  require('../../ActionBlock-DjypCjju.js');
22
22
  require('../../Select-CshPoN2b.js');
@@ -24,7 +24,7 @@ require('@babel/runtime/helpers/objectWithoutProperties');
24
24
  require('formik');
25
25
  require('react/jsx-runtime');
26
26
  require('../../index-BOQKf6as.js');
27
- require('../../ProfileImage-DIc2wajv.js');
27
+ require('../../ProfileImage-BVGvRQVx.js');
28
28
  require('@tanstack/react-query');
29
29
  require('@bigbinary/neeto-cist');
30
30
  require('@bigbinary/neeto-commons-frontend/react-utils');
@@ -20,7 +20,7 @@ var ramda = require('ramda');
20
20
  var sonner = require('sonner');
21
21
  var constants = require('../../constants-D_H6M1Pm.js');
22
22
  var useProfileApi = require('../../useProfileApi-BcuLCyms.js');
23
- var ProfileImage = require('../../ProfileImage-DIc2wajv.js');
23
+ var ProfileImage = require('../../ProfileImage-BVGvRQVx.js');
24
24
  var i18next = require('i18next');
25
25
  var initializers = require('@bigbinary/neeto-commons-frontend/v2/initializers');
26
26
  var yup = require('yup');
@@ -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-CHvbZfMI.js');
28
+ var v2_ManageMember = require('../../index-BUDkqcf9.js');
29
29
  var withReactQuery = require('../../withReactQuery-DvSkXhEx.js');
30
30
  require('@babel/runtime/helpers/objectWithoutProperties');
31
31
  require('@tanstack/react-query');
@@ -55,7 +55,7 @@ require('../utils.js');
55
55
  require('../../_commonjsHelpers-BJu3ubxk.js');
56
56
  require('@bigbinary/neeto-time-zones');
57
57
  require('@bigbinary/neeto-molecules/v2/PhoneNumber');
58
- require('../../ProfileImage-DIc2wajv.js');
58
+ require('../../ProfileImage-BVGvRQVx.js');
59
59
  require('../../inject-css-B6qYtOJe.js');
60
60
  require('../../useCountriesApi-CjhrbnjK.js');
61
61
  require('../../ActionBlock-DjypCjju.js');
@@ -10,7 +10,7 @@ var v2_Profile = require('./Profile.js');
10
10
  var v2_Roles = require('./Roles.js');
11
11
  var v2_Permissions = require('../../Permissions-BH2pNPMx.js');
12
12
  var v2_TeamMembers = require('./TeamMembers.js');
13
- var v2_ManageMember = require('../../index-CHvbZfMI.js');
13
+ var v2_ManageMember = require('../../index-BUDkqcf9.js');
14
14
  var v2_RolesRadioGroup = require('../../RolesRadioGroup-cRZea-gs.js');
15
15
  var v2_TeamsAndMembersDropdown = require('./TeamsAndMembersDropdown.js');
16
16
  var v2_TeamsDropdown = require('./TeamsDropdown.js');
@@ -63,7 +63,7 @@ require('@bigbinary/neeto-molecules/v2/PhoneNumber');
63
63
  require('sonner');
64
64
  require('../../useProfileApi-BcuLCyms.js');
65
65
  require('../../useCountriesApi-CjhrbnjK.js');
66
- require('../../ProfileImage-DIc2wajv.js');
66
+ require('../../ProfileImage-BVGvRQVx.js');
67
67
  require('../../inject-css-B6qYtOJe.js');
68
68
  require('@bigbinary/neeto-commons-frontend/v2/react-utils/withImmutableActions');
69
69
  require('zustand');
@@ -32,7 +32,7 @@ var utils = require('./cjs/utils.js');
32
32
  var neetoTimeZones = require('@bigbinary/neeto-time-zones');
33
33
  var PhoneNumber = require('@bigbinary/neeto-molecules/v2/PhoneNumber');
34
34
  var constants$1 = require('./constants-D_H6M1Pm.js');
35
- var ProfileImage = require('./ProfileImage-DIc2wajv.js');
35
+ var ProfileImage = require('./ProfileImage-BVGvRQVx.js');
36
36
  var ActionBlock = require('./ActionBlock-DjypCjju.js');
37
37
  var index = require('./index-BOQKf6as.js');
38
38
  var primitives = require('@bigbinary/neeto-atoms/primitives');
@@ -1277,4 +1277,4 @@ exports.getColumnData = getColumnData;
1277
1277
  exports.getFilteredRoles = getFilteredRoles;
1278
1278
  exports.handlePageChange = handlePageChange;
1279
1279
  exports.renderUpdateAlert = renderUpdateAlert;
1280
- //# sourceMappingURL=index-CHvbZfMI.js.map
1280
+ //# sourceMappingURL=index-BUDkqcf9.js.map