From 9b8ec34bba33d2a15c161132d7aaf7fbfda08b81 Mon Sep 17 00:00:00 2001 From: swve Date: Sat, 20 Jan 2024 02:27:09 +0100 Subject: [PATCH] feat: avatar edition & new avatar component --- .../(withmenu)/course/[courseuuid]/course.tsx | 5 +- apps/web/components/Dashboard/UI/LeftMenu.tsx | 10 +- .../User/UserEditGeneral/UserEditGeneral.tsx | 217 ++++++++++++------ .../Objects/Activities/AI/AIActivityAsk.tsx | 14 +- apps/web/components/Objects/Editor/Editor.tsx | 3 +- .../components/Objects/Menu/ProfileArea.tsx | 3 +- apps/web/components/Objects/UserAvatar.tsx | 63 +++++ .../components/Security/HeaderProfileBox.tsx | 6 +- apps/web/public/ai_avatar.png | Bin 0 -> 11942 bytes apps/web/public/empty_avatar.png | Bin 0 -> 9297 bytes apps/web/services/media/media.ts | 27 ++- apps/web/services/users/users.ts | 10 +- 12 files changed, 260 insertions(+), 98 deletions(-) create mode 100644 apps/web/components/Objects/UserAvatar.tsx create mode 100644 apps/web/public/ai_avatar.png create mode 100644 apps/web/public/empty_avatar.png diff --git a/apps/web/app/orgs/[orgslug]/(withmenu)/course/[courseuuid]/course.tsx b/apps/web/app/orgs/[orgslug]/(withmenu)/course/[courseuuid]/course.tsx index d7d16a7b..d3f1189a 100644 --- a/apps/web/app/orgs/[orgslug]/(withmenu)/course/[courseuuid]/course.tsx +++ b/apps/web/app/orgs/[orgslug]/(withmenu)/course/[courseuuid]/course.tsx @@ -13,6 +13,7 @@ import { ArrowRight, Check, File, Sparkles, Star, Video } from "lucide-react"; import Avvvatars from "avvvatars-react"; import { getUser } from "@services/users/users"; import { useOrg } from "@components/Contexts/OrgContext"; +import UserAvatar from "@components/Objects/UserAvatar"; const CourseClient = (props: any) => { const [user, setUser] = useState({}); @@ -192,9 +193,7 @@ const CourseClient = (props: any) => {
{user &&
-
- -
+
Author
diff --git a/apps/web/components/Dashboard/UI/LeftMenu.tsx b/apps/web/components/Dashboard/UI/LeftMenu.tsx index e55225f9..bd780e3e 100644 --- a/apps/web/components/Dashboard/UI/LeftMenu.tsx +++ b/apps/web/components/Dashboard/UI/LeftMenu.tsx @@ -4,12 +4,12 @@ import { useSession } from '@components/Contexts/SessionContext'; import ToolTip from '@components/StyledElements/Tooltip/Tooltip' import LearnHouseDashboardLogo from '@public/dashLogo.png'; import { logout } from '@services/auth/auth'; -import Avvvatars from 'avvvatars-react'; import { ArrowLeft, Book, BookCopy, Home, LogOut, School, Settings } from 'lucide-react' import Image from 'next/image'; import Link from 'next/link' import { useRouter } from 'next/navigation'; import React, { use, useEffect } from 'react' +import UserAvatar from '../../Objects/UserAvatar'; function LeftMenu() { const org = useOrg() as any; @@ -72,10 +72,10 @@ function LeftMenu() {
- -
- -
+ +
+ +
diff --git a/apps/web/components/Dashboard/User/UserEditGeneral/UserEditGeneral.tsx b/apps/web/components/Dashboard/User/UserEditGeneral/UserEditGeneral.tsx index 165e34d7..8c5726ca 100644 --- a/apps/web/components/Dashboard/User/UserEditGeneral/UserEditGeneral.tsx +++ b/apps/web/components/Dashboard/User/UserEditGeneral/UserEditGeneral.tsx @@ -2,11 +2,33 @@ import { updateProfile } from '@services/settings/profile'; import React, { useEffect } from 'react' import { Formik, Form, Field, ErrorMessage } from 'formik'; import { useSession } from '@components/Contexts/SessionContext'; +import { ArrowBigUpDash, Check, FileWarning, Info, UploadCloud } from 'lucide-react'; +import UserAvatar from '@components/Objects/UserAvatar'; +import { updateUserAvatar } from '@services/users/users'; function UserEditGeneral() { const session = useSession() as any; + const [localAvatar, setLocalAvatar] = React.useState(null) as any; + const [isLoading, setIsLoading] = React.useState(false) as any; + const [error, setError] = React.useState() as any; + const [success, setSuccess] = React.useState('') as any; + + const handleFileChange = async (event: any) => { + const file = event.target.files[0]; + setLocalAvatar(file); + setIsLoading(true); + const res = await updateUserAvatar(session.user.user_uuid, file) + // wait for 1 second to show loading animation + await new Promise(r => setTimeout(r, 1500)); + if (res.success === false) { + setError(res.HTTPmessage); + } else { + setIsLoading(false); + setError(''); + setSuccess('Avatar Updated'); + } + }; - useEffect(() => { } , [session, session.user]) @@ -15,83 +37,142 @@ function UserEditGeneral() {
{session.user && ( { - setTimeout(() => { + enableReinitialize + initialValues={{ + username: session.user.username, + first_name: session.user.first_name, + last_name: session.user.last_name, + email: session.user.email, + bio: session.user.bio, + }} + onSubmit={(values, { setSubmitting }) => { + setTimeout(() => { - setSubmitting(false); - updateProfile(values,session.user.id) - }, 400); - }} - > - {({ isSubmitting }) => ( -
- - + setSubmitting(false); + updateProfile(values, session.user.id) + }, 400); + }} + > + {({ isSubmitting }) => ( +
+ + + + + - - + + - + - + - + - + - + - - - + /> + + +
+ + {error && ( +
+ +
{error}
+
+ )} + {success && ( +
+ +
{success}
+
+ )} +
+ +
+ +
+ + {localAvatar ? ( + - )} - + ) : ( + + )} +
+ {isLoading ? (
+ +
+ + Uploading +
+
) : ( +
+ + +
)} +
+
+

Recommended size 100x100

+
+
+
+ +
+ + )} +
)}
) diff --git a/apps/web/components/Objects/Activities/AI/AIActivityAsk.tsx b/apps/web/components/Objects/Activities/AI/AIActivityAsk.tsx index a1fcff3d..82299393 100644 --- a/apps/web/components/Objects/Activities/AI/AIActivityAsk.tsx +++ b/apps/web/components/Objects/Activities/AI/AIActivityAsk.tsx @@ -1,6 +1,6 @@ import { useSession } from '@components/Contexts/SessionContext' import { sendActivityAIChatMessage, startActivityAIChatSession } from '@services/ai/ai'; -import { AlertTriangle, BadgeInfo, NotebookTabs } from 'lucide-react'; +import { AlertTriangle, BadgeInfo, NotebookTabs, User } from 'lucide-react'; import Avvvatars from 'avvvatars-react'; import { motion, AnimatePresence } from 'framer-motion'; import { FlaskConical, Keyboard, MessageCircle, MessageSquareIcon, Sparkle, Sparkles, X } from 'lucide-react' @@ -13,6 +13,7 @@ import { AIChatBotStateTypes, useAIChatBot, useAIChatBotDispatch } from '@compon import FeedbackModal from '@components/Objects/Modals/Feedback/Feedback'; import Modal from '@components/StyledElements/Modal/Modal'; import useGetAIFeatures from '../../../AI/Hooks/useGetAIFeatures'; +import UserAvatar from '@components/Objects/UserAvatar'; type AIActivityAskProps = { @@ -204,7 +205,7 @@ function ActivityChatMessageBox(props: ActivityChatMessageBoxProps) { }
- +
@@ -235,7 +236,11 @@ function AIMessage(props: AIMessageProps) { return (
- + {props.message.sender == 'ai' ? ( + + ) : ( + + )}

@@ -277,7 +282,8 @@ const AIMessagePlaceHolder = (props: { activity_uuid: string, sendMessage: any }

Hello - + + {session.user.username}, how can we help today ? diff --git a/apps/web/components/Objects/Editor/Editor.tsx b/apps/web/components/Objects/Editor/Editor.tsx index 586f78e0..4e369682 100644 --- a/apps/web/components/Objects/Editor/Editor.tsx +++ b/apps/web/components/Objects/Editor/Editor.tsx @@ -42,6 +42,7 @@ import { CourseProvider } from "@components/Contexts/CourseContext"; import { useSession } from "@components/Contexts/SessionContext"; import AIEditorToolkit from "./AI/AIEditorToolkit"; import useGetAIFeatures from "@components/AI/Hooks/useGetAIFeatures"; +import UserAvatar from "../UserAvatar"; interface Editor { @@ -207,7 +208,7 @@ function Editor(props: Editor) { {!session.isAuthenticated && Loading} - {session.isAuthenticated && } + {session.isAuthenticated && } diff --git a/apps/web/components/Objects/Menu/ProfileArea.tsx b/apps/web/components/Objects/Menu/ProfileArea.tsx index bffc5e9f..e96f3945 100644 --- a/apps/web/components/Objects/Menu/ProfileArea.tsx +++ b/apps/web/components/Objects/Menu/ProfileArea.tsx @@ -9,6 +9,7 @@ import { usePathname } from "next/navigation"; import { useRouter } from "next/router"; import path from "path"; import { Settings } from "lucide-react"; +import UserAvatar from "@components/Objects/UserAvatar"; export interface Auth { access_token: string; @@ -91,7 +92,7 @@ function ProfileArea() {

{auth.userInfo.user_object.username}
- +
diff --git a/apps/web/components/Objects/UserAvatar.tsx b/apps/web/components/Objects/UserAvatar.tsx new file mode 100644 index 00000000..7b1d6bd3 --- /dev/null +++ b/apps/web/components/Objects/UserAvatar.tsx @@ -0,0 +1,63 @@ +import { useSession } from '@components/Contexts/SessionContext'; +import emptyAvatar from '@public/empty_avatar.png'; +import aiAvatar from '@public/ai_avatar.png'; +import Image from 'next/image'; +import React, { use, useEffect } from 'react' +import { getUriWithOrg } from '@services/config/config'; +import { useOrg } from '@components/Contexts/OrgContext'; +import { useParams } from 'next/navigation'; +import { getUserAvatarMediaDirectory } from '@services/media/media'; + +type UserAvatarProps = { + width?: number + avatar_url?: string + use_with_session?: boolean + rounded?: 'rounded-md' | 'rounded-xl' | 'rounded-lg' | 'rounded-full' | 'rounded' + border?: 'border-2' | 'border-4' | 'border-8' + predefined_avatar?: 'ai' +} + +function UserAvatar(props: UserAvatarProps) { + const session = useSession() as any; + const params = useParams() as any; + + const predefinedAvatar = props.predefined_avatar === 'ai' ? getUriWithOrg(params.orgslug,'/ai_avatar.png') : null; + const emptyAvatar = getUriWithOrg(params.orgslug,'/empty_avatar.png') as any; + const uploadedAvatar = getUserAvatarMediaDirectory(session.user.user_uuid,session.user.avatar_image) as any; + + const useAvatar = () => { + if (props.predefined_avatar) { + return predefinedAvatar + } else { + if (props.avatar_url) { + return props.avatar_url + } + else { + if (session.user.avatar_image) { + return uploadedAvatar + } + else { + return emptyAvatar + } + } + } + } + + + useEffect(() => { + console.log('params', params) + } + , [session]) + + return ( + User Avatar + ) +} + +export default UserAvatar \ No newline at end of file diff --git a/apps/web/components/Security/HeaderProfileBox.tsx b/apps/web/components/Security/HeaderProfileBox.tsx index 5d1e5464..dabf6212 100644 --- a/apps/web/components/Security/HeaderProfileBox.tsx +++ b/apps/web/components/Security/HeaderProfileBox.tsx @@ -6,6 +6,7 @@ import Avvvatars from "avvvatars-react"; import { GearIcon } from "@radix-ui/react-icons"; import { Settings } from "lucide-react"; import { useSession } from "@components/Contexts/SessionContext"; +import UserAvatar from "@components/Objects/UserAvatar"; export const HeaderProfileBox = () => { const session = useSession() as any; @@ -33,9 +34,7 @@ export const HeaderProfileBox = () => {
{session.user.username}
-
- -
+
@@ -51,7 +50,6 @@ const AccountArea = styled.div` img { width: 29px; - border-radius: 19px; } `; diff --git a/apps/web/public/ai_avatar.png b/apps/web/public/ai_avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..6c1dea2feb6ab2b420d1dfbe2db6546a7f237663 GIT binary patch literal 11942 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 literal 0 HcmV?d00001 diff --git a/apps/web/services/media/media.ts b/apps/web/services/media/media.ts index b17191a2..dfa728fe 100644 --- a/apps/web/services/media/media.ts +++ b/apps/web/services/media/media.ts @@ -9,38 +9,43 @@ function getMediaUrl() { } } -export function getCourseThumbnailMediaDirectory(orgId: string, courseId: string, fileId: string) { - let uri = `${getMediaUrl()}content/${orgId}/courses/${courseId}/thumbnails/${fileId}`; +export function getCourseThumbnailMediaDirectory(orgUUID: string, courseId: string, fileId: string) { + let uri = `${getMediaUrl()}content/orgs/${orgUUID}/courses/${courseId}/thumbnails/${fileId}`; return uri; } -export function getActivityBlockMediaDirectory(orgId: string, courseId: string, activityId: string, blockId: any, fileId: any, type: string) { +export function getUserAvatarMediaDirectory(userUUID: string, fileId: string) { + let uri = `${getMediaUrl()}content/users/${userUUID}/avatars/${fileId}`; + return uri; +} + +export function getActivityBlockMediaDirectory(orgUUID: string, courseId: string, activityId: string, blockId: any, fileId: any, type: string) { if (type == "pdfBlock") { - let uri = `${getMediaUrl()}content/${orgId}/courses/${courseId}/activities/${activityId}/dynamic/blocks/pdfBlock/${blockId}/${fileId}`; + let uri = `${getMediaUrl()}content/${orgUUID}/courses/${courseId}/activities/${activityId}/dynamic/blocks/pdfBlock/${blockId}/${fileId}`; return uri; } if (type == "videoBlock") { - let uri = `${getMediaUrl()}content/${orgId}/courses/${courseId}/activities/${activityId}/dynamic/blocks/videoBlock/${blockId}/${fileId}`; + let uri = `${getMediaUrl()}content/${orgUUID}/courses/${courseId}/activities/${activityId}/dynamic/blocks/videoBlock/${blockId}/${fileId}`; return uri; } if (type == "imageBlock") { - let uri = `${getMediaUrl()}content/${orgId}/courses/${courseId}/activities/${activityId}/dynamic/blocks/imageBlock/${blockId}/${fileId}`; + let uri = `${getMediaUrl()}content/${orgUUID}/courses/${courseId}/activities/${activityId}/dynamic/blocks/imageBlock/${blockId}/${fileId}`; return uri; } } -export function getActivityMediaDirectory(orgId: string, courseId: string, activityId: string, fileId: string, activityType: string) { +export function getActivityMediaDirectory(orgUUID: string, courseId: string, activityId: string, fileId: string, activityType: string) { if (activityType == "video") { - let uri = `${getMediaUrl()}content/${orgId}/courses/${courseId}/activities/${activityId}/video/${fileId}`; + let uri = `${getMediaUrl()}content/${orgUUID}/courses/${courseId}/activities/${activityId}/video/${fileId}`; return uri; } if (activityType == "documentpdf") { - let uri = `${getMediaUrl()}content/${orgId}/courses/${courseId}/activities/${activityId}/documentpdf/${fileId}`; + let uri = `${getMediaUrl()}content/${orgUUID}/courses/${courseId}/activities/${activityId}/documentpdf/${fileId}`; return uri; } } -export function getOrgLogoMediaDirectory(orgId: string, fileId: string) { - let uri = `${getMediaUrl()}content/${orgId}/logos/${fileId}`; +export function getOrgLogoMediaDirectory(orgUUID: string, fileId: string) { + let uri = `${getMediaUrl()}content/${orgUUID}/logos/${fileId}`; return uri; } diff --git a/apps/web/services/users/users.ts b/apps/web/services/users/users.ts index 798079ab..b267412b 100644 --- a/apps/web/services/users/users.ts +++ b/apps/web/services/users/users.ts @@ -1,8 +1,16 @@ import { getAPIUrl } from "@services/config/config"; -import { RequestBody, errorHandling } from "@services/utils/ts/requests"; +import { RequestBody, RequestBodyForm, errorHandling, getResponseMetadata } from "@services/utils/ts/requests"; export async function getUser(user_id: string) { const result = await fetch(`${getAPIUrl()}users/user_id/${user_id}`, RequestBody("GET", null, null)); const res = await errorHandling(result); return res; +} + +export async function updateUserAvatar(user_uuid: any, avatar_file: any) { + const formData = new FormData(); + formData.append("avatar_file", avatar_file); + const result: any = await fetch(`${getAPIUrl()}users/update_avatar/${user_uuid}`, RequestBodyForm("PUT", formData, null)); + const res = await getResponseMetadata(result); + return res; } \ No newline at end of file