From a82c5be593fcb566ffc62d093a44602e927e7cd0 Mon Sep 17 00:00:00 2001 From: Zhang Minghan Date: Sat, 23 Dec 2023 23:26:03 +0800 Subject: [PATCH] update: all in one user avatar --- app/src/assets/ui.less | 14 +++++++++++ app/src/components/Avatar.tsx | 37 +++++++++++++++++++++++++++++ app/src/components/app/NavBar.tsx | 4 ++-- app/src/components/home/SideBar.tsx | 4 ++-- app/src/routes/Sharing.tsx | 4 ++-- auth/auth.go | 6 ++--- 6 files changed, 60 insertions(+), 9 deletions(-) create mode 100644 app/src/components/Avatar.tsx diff --git a/app/src/assets/ui.less b/app/src/assets/ui.less index 6e46082..2340301 100644 --- a/app/src/assets/ui.less +++ b/app/src/assets/ui.less @@ -268,3 +268,17 @@ input[type="number"] { } } } + +.avatar { + display: flex; + width: 2.5rem; + height: 2.5rem; + border-radius: var(--radius); + text-align: center; + + p { + margin: auto; + color: hsl(var(--text)); + transform: translateY(-1px); + } +} diff --git a/app/src/components/Avatar.tsx b/app/src/components/Avatar.tsx new file mode 100644 index 0000000..ebabd69 --- /dev/null +++ b/app/src/components/Avatar.tsx @@ -0,0 +1,37 @@ +import { deeptrainApiEndpoint, useDeeptrain } from "@/utils/env.ts"; +import { ImgHTMLAttributes, useMemo } from "react"; + +export interface AvatarProps extends ImgHTMLAttributes { + username: string; +} + +function Avatar({ username, ...props }: AvatarProps) { + const code = useMemo( + () => (username.length > 0 ? username[0].toUpperCase() : "A"), + [username], + ); + + const color = useMemo(() => { + const colors = [ + "bg-red-500", + "bg-yellow-500", + "bg-green-500", + "bg-blue-500", + "bg-indigo-500", + "bg-purple-500", + "bg-pink-500", + ]; + const index = code.charCodeAt(0) % colors.length; + return colors[index]; + }, [username]); + + return useDeeptrain ? ( + + ) : ( +
+

{code}

+
+ ); +} + +export default Avatar; diff --git a/app/src/components/app/NavBar.tsx b/app/src/components/app/NavBar.tsx index c081825..390f07e 100644 --- a/app/src/components/app/NavBar.tsx +++ b/app/src/components/app/NavBar.tsx @@ -16,8 +16,8 @@ import ModeToggle from "@/components/ThemeProvider.tsx"; import router from "@/router.tsx"; import MenuBar from "./MenuBar.tsx"; import { getMemory } from "@/utils/memory.ts"; -import { deeptrainApiEndpoint } from "@/utils/env.ts"; import { goAuth } from "@/utils/app.ts"; +import Avatar from "@/components/Avatar.tsx"; function NavMenu() { const username = useSelector(selectUsername); @@ -26,7 +26,7 @@ function NavMenu() {
diff --git a/app/src/components/home/SideBar.tsx b/app/src/components/home/SideBar.tsx index 5786e49..dd60f13 100644 --- a/app/src/components/home/SideBar.tsx +++ b/app/src/components/home/SideBar.tsx @@ -41,8 +41,8 @@ import { getSharedLink, shareConversation } from "@/api/sharing.ts"; import { Input } from "@/components/ui/input.tsx"; import MenuBar from "@/components/app/MenuBar.tsx"; import { Separator } from "@/components/ui/separator.tsx"; -import { deeptrainApiEndpoint } from "@/utils/env.ts"; import { goAuth } from "@/utils/app.ts"; +import Avatar from "@/components/Avatar.tsx"; type Operation = { target: ConversationInstance | null; @@ -325,7 +325,7 @@ function SidebarMenu() { diff --git a/app/src/routes/Sharing.tsx b/app/src/routes/Sharing.tsx index ea73aa5..e305c6c 100644 --- a/app/src/routes/Sharing.tsx +++ b/app/src/routes/Sharing.tsx @@ -12,7 +12,7 @@ import router from "@/router.tsx"; import { useToast } from "@/components/ui/use-toast.ts"; import { sharingEvent } from "@/events/sharing.ts"; import { Message } from "@/api/types.ts"; -import { deeptrainApiEndpoint } from "@/utils/env.ts"; +import Avatar from "@/components/Avatar.tsx"; type SharingFormProps = { refer?: string; @@ -33,7 +33,7 @@ function SharingForm({ refer, data }: SharingFormProps) {
- + {data.username}
{data.name}
diff --git a/auth/auth.go b/auth/auth.go index cd9c45d..4514ef1 100644 --- a/auth/auth.go +++ b/auth/auth.go @@ -119,11 +119,11 @@ func SignUp(c *gin.Context, form RegisterForm) (string, error) { return "", errors.New("invalid username/password/email format") } - if !IsUserExist(db, username) { + if IsUserExist(db, username) { return "", fmt.Errorf("username is already taken, please try another one username (your current username: %s)", username) } - if !IsEmailExist(db, email) { + if IsEmailExist(db, email) { return "", fmt.Errorf("email is already taken, please try another one email (your current email: %s)", email) } @@ -170,7 +170,7 @@ func Login(c *gin.Context, form LoginForm) (string, error) { if err := db.QueryRow(` SELECT auth.id, auth.username, auth.password FROM auth WHERE (auth.username = ? OR auth.email = ?) AND auth.password = ? - `, username, hash).Scan(&user.ID, &user.Username, &user.Password); err != nil { + `, username, username, hash).Scan(&user.ID, &user.Username, &user.Password); err != nil { return "", errors.New("invalid username or password") }