Spaces:
Running
Running
| import { useMemo } from "react"; | |
| import { BadgeType } from "@/types/badge"; | |
| import { useUser } from "@/utils/auth"; | |
| import DefaultAvatar from "assets/images/avatars/default-avatar.svg"; | |
| import { Moderator } from "@/components/svg/icons/discord"; | |
| import { Boost2 } from "@/components/svg/icons/discord"; | |
| import { Preview } from "./preview"; | |
| import { DownloadButton } from "./download_button"; | |
| export const UserCard = ({ | |
| badge, | |
| onSave, | |
| }: { | |
| badge: BadgeType; | |
| onSave: (e?: boolean) => void; | |
| }) => { | |
| const { user, loading } = useUser(); | |
| const convertNumberToStringColor = (color: number) => { | |
| if (!color) return "#121212"; | |
| return "#" + color?.toString(16); | |
| }; | |
| const bannerStyle = useMemo(() => { | |
| let style: any = { backgroundColor: "#121212", height: 60 }; | |
| if (user?.id) { | |
| if (user?.banner) { | |
| style.backgroundImage = `url(https://cdn.discordapp.com/banners/${user.id}/${user.banner}.gif?size=1024)`; | |
| style.height = 120; | |
| style.borderLeft = "5px solid #232429"; | |
| style.borderTop = "5px solid #232429"; | |
| style.borderRight = "5px solid #232429"; | |
| } else { | |
| // style.backgroundColor = convertNumberToStringColor(user?.accent_color); | |
| style.backgroundColor = user?.accent_color; | |
| } | |
| } | |
| return style; | |
| }, [user]); | |
| return ( | |
| <div className="bg-dark-500 rounded-lg w-full overflow-hidden"> | |
| <header | |
| className={`w-full rounded-t-lg bg-cover bg-center bg-no-repeat p-6 relative ${ | |
| loading && "animate-pulse" | |
| }`} | |
| style={bannerStyle} | |
| > | |
| <figure | |
| style={{ | |
| backgroundImage: `url(${ | |
| user?.id | |
| ? user.avatar | |
| ? `https://cdn.discordapp.com/avatars/${user.id}/${user.avatar}.png` | |
| : `https://cdn.discordapp.com/embed/avatars/${ | |
| user?.id % 5 | |
| }.png` | |
| : DefaultAvatar.src | |
| })`, | |
| }} | |
| className="w-[80px] h-[80px] rounded-full ring-[6px] ring-dark-500 absolute bottom-0 left-5 translate-y-1/2 bg-cover bg-center" | |
| > | |
| <div className="bg-[#22A55A] w-[16px] h-[16px] rounded-full absolute bottom-1 right-1 ring-[6px] ring-dark-500"></div> | |
| </figure> | |
| </header> | |
| <main className="px-5 pb-5 pt-4 flex flex-col gap-4 items-end"> | |
| <div className="rounded-md bg-[#111214] p-1.5 flex items-center justify-end gap-2"> | |
| <svg | |
| width={16} | |
| height={16} | |
| viewBox="0 0 160 189" | |
| fill="#FFAC32" | |
| style={{ minWidth: 16, minHeight: 16 }} | |
| > | |
| <Moderator /> | |
| </svg> | |
| <svg | |
| width={16} | |
| height={16} | |
| viewBox="0 0 170 144" | |
| fill="#FF73FA" | |
| style={{ minWidth: 16, minHeight: 16 }} | |
| > | |
| <Boost2 /> | |
| </svg> | |
| </div> | |
| <div className="bg-[#111214] rounded-lg px-3 pt-3 pb-4 w-full"> | |
| <p className="text-white font-bold text-xl"> | |
| Captain Astro | |
| </p> | |
| <p className="text-white text-sm"> | |
| captainastro | |
| </p> | |
| <div className="w-full h-[1px] bg-[#2E2F35] my-3" /> | |
| <p className="text-xs uppercase font-bold text-white mb-2"> | |
| About me | |
| </p> | |
| <Preview badge={badge} /> | |
| {/* <p className="text-xs uppercase font-bold text-white mt-3 mb-2"> | |
| Member since | |
| </p> */} | |
| <DownloadButton onSave={onSave} /> | |
| <p className="text-xs text-dark-200 mt-2"> | |
| Image will be split into multiple parts. You will upload them as | |
| server emojis on Discord to use them on your discord Profile. | |
| </p> | |
| </div> | |
| </main> | |
| </div> | |
| ); | |
| }; | |