diff --git a/package-lock.json b/package-lock.json
index 0ce6eb9..c592762 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "ucentral-libs",
- "version": "0.8.17",
+ "version": "0.8.18",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "ucentral-libs",
- "version": "0.8.17",
+ "version": "0.8.18",
"devDependencies": {
"@babel/core": "^7.14.6",
"@babel/plugin-proposal-class-properties": "^7.14.5",
diff --git a/package.json b/package.json
index dee4cfe..54dba39 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "ucentral-libs",
- "version": "0.8.17",
+ "version": "0.8.18",
"main": "dist/index.js",
"source": "src/index.js",
"engines": {
diff --git a/src/components/Avatar/index.js b/src/components/Avatar/index.js
new file mode 100644
index 0000000..0e284bf
--- /dev/null
+++ b/src/components/Avatar/index.js
@@ -0,0 +1,42 @@
+import React, { useState, useEffect } from 'react';
+import PropTypes from 'prop-types';
+import { CImg } from '@coreui/react';
+import { emailToName } from '../../utils/formatting';
+
+const Avatar = ({ src, fallback }) => {
+ const [error, setError] = useState(false);
+
+ useEffect(() => {
+ if (src && src !== '' && src !== 'data:;base64,') {
+ setError(false);
+ }
+ }, [src]);
+
+ if (!src || src === '' || src === 'data:;base64,' || error) {
+ return (
+
+
+ {fallback === 'N/A' ? fallback : emailToName(fallback)}
+
+
+ );
+ }
+
+ return (
+
+ setError(true)} />
+
+ );
+};
+
+Avatar.propTypes = {
+ src: PropTypes.string,
+ fallback: PropTypes.string,
+};
+
+Avatar.defaultProps = {
+ src: '',
+ fallback: 'N/A',
+};
+
+export default React.memo(Avatar);
diff --git a/src/components/EditMyProfile/index.js b/src/components/EditMyProfile/index.js
index 67ebd9e..aa1cfe7 100644
--- a/src/components/EditMyProfile/index.js
+++ b/src/components/EditMyProfile/index.js
@@ -19,6 +19,7 @@ import PropTypes from 'prop-types';
import CIcon from '@coreui/icons-react';
import NotesTable from '../NotesTable';
import LoadingButton from '../LoadingButton';
+import Avatar from '../Avatar';
const EditMyProfile = ({
t,
@@ -29,6 +30,10 @@ const EditMyProfile = ({
policies,
addNote,
uploadAvatar,
+ avatar,
+ newAvatar,
+ deleteAvatar,
+ showPreview,
}) => {
const [showPassword, setShowPassword] = useState(false);
@@ -109,10 +114,53 @@ const EditMyProfile = ({
/>
- {t('user.avatar_file')}
+ {t('user.avatar')}
-
+
+
+ {t('common.current')}
+ Preview
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -152,6 +200,15 @@ EditMyProfile.propTypes = {
policies: PropTypes.instanceOf(Object).isRequired,
addNote: PropTypes.func.isRequired,
uploadAvatar: PropTypes.func.isRequired,
+ avatar: PropTypes.string,
+ newAvatar: PropTypes.string,
+ showPreview: PropTypes.func.isRequired,
+ deleteAvatar: PropTypes.func.isRequired,
+};
+
+EditMyProfile.defaultProps = {
+ avatar: '',
+ newAvatar: '',
};
export default React.memo(EditMyProfile);
diff --git a/src/components/ImgWithFallback/index.js b/src/components/ImgWithFallback/index.js
deleted file mode 100644
index b1da7a4..0000000
--- a/src/components/ImgWithFallback/index.js
+++ /dev/null
@@ -1,24 +0,0 @@
-import React, { useState } from 'react';
-import PropTypes from 'prop-types';
-import { CImg } from '@coreui/react';
-
-const ImgWithFallback = ({ src, fallback }) => {
- const [error, setError] = useState(false);
-
- if (src === '' || error) {
- return {fallback()}
;
- }
-
- return setError(true)} />;
-};
-
-ImgWithFallback.propTypes = {
- src: PropTypes.string,
- fallback: PropTypes.func.isRequired,
-};
-
-ImgWithFallback.defaultProps = {
- src: '',
-};
-
-export default React.memo(ImgWithFallback);
diff --git a/src/components/NotesTable/index.js b/src/components/NotesTable/index.js
index fa2876f..465a6f9 100644
--- a/src/components/NotesTable/index.js
+++ b/src/components/NotesTable/index.js
@@ -46,6 +46,7 @@ const NotesTable = ({ t, notes, addNote, loading, size }) => {
+
-
-
-
-
- setUsersPerPage(e.target.value)}
- disabled={loading}
- >
-
-
-
-
-
-
-
-
-
- {t('user.create')}
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+ setUsersPerPage(e.target.value)}
+ disabled={loading}
+ >
+
+
+
+
+
+
+
+
+
+ {t('user.create')}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
emailToName(user.email)} />
-
+
'/myprofile'}>