From b37ba0f71d6c07546c75f1d1fafca056097dfe6c Mon Sep 17 00:00:00 2001 From: bourquecharles Date: Wed, 21 Jul 2021 14:18:58 -0400 Subject: [PATCH] Edits to user functions, new avatar preview --- package-lock.json | 4 +- package.json | 2 +- src/components/Avatar/index.js | 42 ++++++++++++++ src/components/EditMyProfile/index.js | 61 +++++++++++++++++++- src/components/ImgWithFallback/index.js | 24 -------- src/components/NotesTable/index.js | 1 + src/components/UserListTable/index.js | 76 ++++++++++++------------- src/index.js | 1 + src/layout/Header/index.js | 7 +-- 9 files changed, 146 insertions(+), 72 deletions(-) create mode 100644 src/components/Avatar/index.js delete mode 100644 src/components/ImgWithFallback/index.js 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'}>