enzostvs's picture
enzostvs HF Staff
Update components/editor-badge/comps/user_card.tsx
a418585 verified
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>
);
};