@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.
- package/dist/.ready +1 -1
- package/dist/ManageMember.js +2 -2
- package/dist/Profile.js +1 -1
- package/dist/{ProfileImage-DIc2wajv.js → ProfileImage-BVGvRQVx.js} +4 -4
- package/dist/ProfileImage-BVGvRQVx.js.map +1 -0
- package/dist/{ProfileImage-7HtCnKc-.js → ProfileImage-D6FlUbTV.js} +5 -5
- package/dist/ProfileImage-D6FlUbTV.js.map +1 -0
- package/dist/{ProfileImage-BXsTglvo.js → ProfileImage-DLWJaZ0H.js} +23 -9
- package/dist/ProfileImage-DLWJaZ0H.js.map +1 -0
- package/dist/{ProfileImage-DbLwreG6.js → ProfileImage-g_BVBsn6.js} +25 -11
- package/dist/ProfileImage-g_BVBsn6.js.map +1 -0
- package/dist/TeamMembers.js +2 -2
- package/dist/cjs/ManageMember.js +2 -2
- package/dist/cjs/Profile.js +1 -1
- package/dist/cjs/TeamMembers.js +2 -2
- package/dist/cjs/index.js +2 -2
- package/dist/cjs/v2/ManageMember.js +2 -2
- package/dist/cjs/v2/Profile.js +1 -1
- package/dist/cjs/v2/TeamMembers.js +2 -2
- package/dist/cjs/v2/index.js +2 -2
- package/dist/{index-CHvbZfMI.js → index-BUDkqcf9.js} +2 -2
- package/dist/{index-CHvbZfMI.js.map → index-BUDkqcf9.js.map} +1 -1
- package/dist/{index-D_6vJd6A.js → index-CCrDkOrb.js} +2 -2
- package/dist/{index-D_6vJd6A.js.map → index-CCrDkOrb.js.map} +1 -1
- package/dist/{index-BpVod2uP.js → index-DkYQBe1V.js} +2 -2
- package/dist/{index-BpVod2uP.js.map → index-DkYQBe1V.js.map} +1 -1
- package/dist/{index-venWfbj6.js → index-i205PvB5.js} +2 -2
- package/dist/{index-venWfbj6.js.map → index-i205PvB5.js.map} +1 -1
- package/dist/index.js +2 -2
- package/dist/v2/ManageMember.js +2 -2
- package/dist/v2/Profile.js +1 -1
- package/dist/v2/TeamMembers.js +2 -2
- package/dist/v2/index.js +2 -2
- package/package.json +1 -1
- package/dist/ProfileImage-7HtCnKc-.js.map +0 -1
- package/dist/ProfileImage-BXsTglvo.js.map +0 -1
- package/dist/ProfileImage-DIc2wajv.js.map +0 -1
- package/dist/ProfileImage-DbLwreG6.js.map +0 -1
package/dist/.ready
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Built at 2026-09-
|
|
1
|
+
Built at 2026-09-24T14:51:47.620Z
|
package/dist/ManageMember.js
CHANGED
|
@@ -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-
|
|
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-
|
|
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-
|
|
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:
|
|
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-
|
|
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:
|
|
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-
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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: "
|
|
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: "
|
|
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-
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKO,IAAMA,yBAAyB,GAAGC,cAAG,CAACC,MAAM,EAAE,CAACC,KAAK,CAAC;AAC1DC,EAAAA,SAAS,EAAEH,cAAG,CACXI,MAAM,EAAE,CACRC,IAAI,EAAE,CACNC,QAAQ,CAACC,SAAC,CAAC,oDAAoD,CAAC,CAAC,CACjEC,OAAO,CACN,qySAAiC,EACjCD,SAAC,CAAC,2CAA2C,CAC/C,CAAC,CACAC,OAAO,CAAC,UAAU,EAAED,SAAC,CAAC,8CAA8C,CAAC,CAAC;AACzEE,EAAAA,QAAQ,EAAET,cAAG,CACVI,MAAM,EAAE,CACRC,IAAI,EAAE,CACNC,QAAQ,CAACC,SAAC,CAAC,mDAAmD,CAAC,CAAC,CAChEC,OAAO,CACN,qySAAiC,EACjCD,SAAC,CAAC,2CAA2C,CAC/C,CAAC,CACAC,OAAO,CAAC,UAAU,EAAED,SAAC,CAAC,8CAA8C,CAAC,CAAC;EACzEG,WAAW,EAAEC,sBAAqB,CAChCJ,SAAC,CAAC,kDAAkD,CACtD,CAAC,CAACK,QAAQ,EAAE;AACZC,EAAAA,UAAU,EAAEb,cAAG,CACZI,MAAM,EAAE,CACRE,QAAQ,CAACC,SAAC,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,wBAAW,CAACC,gCAAgC,GAAG,IAAI,GAAG,IAAI;AAErD,IAAMC,iBAAiB,GAAG;AAC/BC,EAAAA,YAAY,EAAEd,SAAC,CAAC,iDAAiD,CAAC;AAClEe,EAAAA,cAAc,EAAEf,SAAC,CAAC,yCAAyC,CAAC;AAC5DgB,EAAAA,mBAAmB,EAAEhB,SAAC,CAAC,6CAA6C,EAAE;IACpEiB,OAAO,EAAEN,wBAAW,CAACC;GACtB;AACH,CAAC;;ACxCD,IAAMM,YAAY,GAAG,SAAfA,YAAYA,GAAS;AACzB,EAAA,IAAAC,SAAA,GAA0DC,cAAQ,CAAC,IAAI,CAAC;IAAAC,UAAA,GAAAC,+BAAA,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,iCAAiB,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,aAAO,CACpC,YAAA;AAAA,IAAA,OAAMT,SAAS,CAACU,GAAG,CAACR,mBAAmB,CAAC;EAAA,CAAA,EACxC,CAACF,SAAS,CACZ,CAAC;AAED,EAAA,IAAMW,mBAAmB,GAAGC,iBAAW,CACrC,UAAAC,aAAa,EAAI;IACfpB,wBAAwB,CAACoB,aAAa,KAAA,IAAA,IAAbA,aAAa,cAAbA,aAAa,GAAI,IAAI,CAAC;AAE/C,IAAA,IAAMC,eAAe,GAAGC,kBAAQ,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,yBAAQ,CAA3BD,IAAI;EAAEE,QAAQ,GAAKD,yBAAQ,CAArBC,QAAQ;AAEtB,IAAMC,YAAY,GAAG,SAAfA,YAAYA,GAAS;AAAA,EAAA,IAAAC,YAAA;AACzB,EAAA,IAAAC,eAAA,GAAcC,2BAAc,EAAE;IAAtBtD,CAAC,GAAAqD,eAAA,CAADrD,CAAC;AACT,EAAA,IAAMuD,YAAY,GAAGC,YAAM,CAAC,IAAI,CAAC;AACjC,EAAA,IAAMC,UAAU,GAAGD,YAAM,CAAC,IAAI,CAAC;AAE/B,EAAA,IAAAE,SAAA,GAA4BC,eAAQ,CAAC,QAAQ,CAAC;IAAAC,UAAA,GAAAtC,+BAAA,CAAAoC,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,IAAAI,iBAAA,GAAmBC,uBAAgB,EAAE;IAA7BC,MAAM,GAAAF,iBAAA,CAANE,MAAM;AACd,EAAA,IAAQC,QAAQ,GAAKJ,OAAO,CAApBI,QAAQ;AAEhB,EAAA,IAAMC,aAAa,GAAG;AACpBhC,IAAAA,IAAI,EAAE,CAAC8B,MAAM,CAACtE,SAAS,EAAEsE,MAAM,CAAChE,QAAQ,CAAC,CAACmE,MAAM,CAACC,OAAO,CAAC,CAACC,IAAI,CAAC,GAAG,CAAC;IACnEC,QAAQ,EAAA,CAAApB,YAAA,GAAES,KAAK,CAACxB,KAAK,MAAA,IAAA,IAAAe,YAAA,KAAA,MAAA,GAAA,MAAA,GAAXA,YAAA,CAAaoB;GACxB;AAEDC,EAAAA,eAAS,CACP,YAAA;AAAA,IAAA,OAAM,YAAM;MACV,IAAIhB,UAAU,CAACiB,OAAO,EAAEC,GAAG,CAACC,eAAe,CAACnB,UAAU,CAACiB,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,uBAAM,CAACC,KAAK,CAACH,eAAe,CAAC;AAE7B,MAAA,OAAOA,eAAe;AACxB,IAAA;IAEA,IAAIzB,UAAU,CAACiB,OAAO,EAAEC,GAAG,CAACC,eAAe,CAACnB,UAAU,CAACiB,OAAO,CAAC;IAC/DjB,UAAU,CAACiB,OAAO,GAAGC,GAAG,CAACW,eAAe,CAACP,SAAS,CAAC;AAEnD,IAAA,OAAOZ,QAAQ,CAAC;MACdK,QAAQ,EAAEf,UAAU,CAACiB,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,GAASlC,YAAY,CAACmB,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,IAAIlC,UAAU,CAACiB,OAAO,EAAE;AACtBC,MAAAA,GAAG,CAACC,eAAe,CAACnB,UAAU,CAACiB,OAAO,CAAC;MACvCjB,UAAU,CAACiB,OAAO,GAAG,IAAI;AAC3B,IAAA;AACAP,IAAAA,QAAQ,CAAC;AAAEK,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,CAACpF,gCAAgC,CAACqF,QAAQ,CAACF,IAAI,CAAC,EAAE;MACpD,OAAO/E,iBAAiB,CAACC,YAAY;AACvC,IAAA;AAEA,IAAA,IAAI+E,IAAI,KAAK,CAAC,EAAE,OAAOhF,iBAAiB,CAACE,cAAc;IAEvD,IAAI8E,IAAI,GAAGnF,sCAAsC,EAAE;MACjD,OAAOG,iBAAiB,CAACG,mBAAmB;AAC9C,IAAA;AAEA,IAAA,OAAO,IAAI;EACb,CAAC;AAED,EAAA,oBACE+E,eAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,uCAAuC;AAAAC,IAAAA,QAAA,gBACpDF,eAAA,CAAA,KAAA,EAAA;AAAKC,MAAAA,SAAS,EAAC,mBAAmB;AAAAC,MAAAA,QAAA,gBAChCC,cAAA,CAAA,KAAA,EAAA;AAAKF,QAAAA,SAAS,EAAC,8BAA8B;QAAAC,QAAA,eAC3CC,cAAA,CAACjD,yBAAQ,EAAA;AACPkD,UAAAA,WAAW,EAAE;AAAEH,YAAAA,SAAS,EAAE;WAAiB;AAC3CI,UAAAA,UAAU,EAAC,OAAO;AAClBC,UAAAA,WAAW,EAAC,UAAU;AACtBC,UAAAA,IAAI,EAAEC,qBAAK;UAAAN,QAAA,eAEXF,eAAA,CAAC/C,IAAI,EAAA;AAAAiD,YAAAA,QAAA,EAAA,cACHC,cAAA,CAAChD,QAAQ,CAACsD,MAAM,EAAA;AACd,cAAA,aAAA,EAAY,6BAA6B;AACzCC,cAAAA,OAAO,EAAEjB,iBAAkB;AAAAS,cAAAA,QAAA,EAE1B7B,aAAa,KAAA,IAAA,IAAbA,aAAa,KAAA,MAAA,IAAbA,aAAa,CAAEI,QAAQ,GACpBxE,CAAC,CAAC,sDAAsD,CAAC,GACzDA,CAAC,CAAC,sDAAsD;AAAC,aAC9C,CAAC,eAClBkG,cAAA,CAAChD,QAAQ,CAACsD,MAAM,EAAA;AACd,cAAA,aAAA,EAAY,6BAA6B;AACzCC,cAAAA,OAAO,EAAEd,iBAAkB;cAAAM,QAAA,EAE1BjG,CAAC,CAAC,iCAAiC;AAAC,aACtB,CAAC;WACd;SACE;AAAC,OACR,CAAC,eACNkG,cAAA,CAACQ,uBAAM,EAAA;AAACb,QAAAA,IAAI,EAAC,YAAY;AAACc,QAAAA,IAAI,EAAEvC;AAAc,OAAE,CAAC;KAC9C,CAAC,eACN2B,eAAA,CAAA,KAAA,EAAA;AAAKC,MAAAA,SAAS,EAAC,4BAA4B;MAAAC,QAAA,EAAA,cACzCC,cAAA,CAACU,2BAAU,EAAA;AACTZ,QAAAA,SAAS,EAAC,oCAAoC;AAC9Ca,QAAAA,KAAK,EAAC,OAAO;QAAAZ,QAAA,eAEbC,cAAA,CAACY,kBAAK,EAAA;AACJC,UAAAA,OAAO,EAAC,6DAA6D;AACrE7C,UAAAA,MAAM,EAAE;YACN8C,KAAK,EAAErG,wBAAW,CAACC;AACrB;SACD;OACS,CAAC,eACbsF,cAAA,CAAA,OAAA,EAAA;QACEe,MAAM,EAAA,IAAA;AACNC,QAAAA,MAAM,EAAEzG,gCAAgC,CAAC8D,IAAI,CAAC,GAAG,CAAE;AACnD,QAAA,aAAA,EAAY,iCAAiC;AAC7CjC,QAAAA,EAAE,EAAC,oBAAoB;AAEvBF,QAAAA,IAAI,EAAC,oBAAoB;AACzB+E,QAAAA,GAAG,EAAE5D,YAAa;AAClBqC,QAAAA,IAAI,EAAC,MAAM;AACXwB,QAAAA,QAAQ,EAAEvC;AAAqB,OAAA,EAJ1BT,aAAa,KAAA,IAAA,IAAbA,aAAa,uBAAbA,aAAa,CAAEI,QAKrB,CAAC;AAAA,KACC,CAAC;AAAA,GACH,CAAC;AAEV;;;;;;;;"}
|
|
@@ -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
|
-
|
|
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:
|
|
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
|
-
|
|
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: "
|
|
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: "
|
|
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-
|
|
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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"}
|
package/dist/TeamMembers.js
CHANGED
|
@@ -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-
|
|
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-
|
|
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';
|
package/dist/cjs/ManageMember.js
CHANGED
|
@@ -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-
|
|
24
|
+
require('../ProfileImage-DLWJaZ0H.js');
|
|
25
25
|
require('../useRolesApi-DuL4eCuF.js');
|
|
26
26
|
require('../useTeamsApi-ClWGPxNW.js');
|
|
27
|
-
var ManageMember = require('../index-
|
|
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');
|
package/dist/cjs/Profile.js
CHANGED
|
@@ -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-
|
|
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');
|
package/dist/cjs/TeamMembers.js
CHANGED
|
@@ -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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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');
|
package/dist/cjs/v2/Profile.js
CHANGED
|
@@ -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-
|
|
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-
|
|
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-
|
|
58
|
+
require('../../ProfileImage-BVGvRQVx.js');
|
|
59
59
|
require('../../inject-css-B6qYtOJe.js');
|
|
60
60
|
require('../../useCountriesApi-CjhrbnjK.js');
|
|
61
61
|
require('../../ActionBlock-DjypCjju.js');
|
package/dist/cjs/v2/index.js
CHANGED
|
@@ -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-
|
|
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-
|
|
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-
|
|
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-
|
|
1280
|
+
//# sourceMappingURL=index-BUDkqcf9.js.map
|