Files
roblox/components/loggedInHeader.tsx
2025-07-24 00:48:27 +03:00

58 lines
1.5 KiB
TypeScript

"use client";
import {
getLoggedInUser,
getUserByUserId,
UserProfileDetails
} from "@/lib/profile";
import React, { useEffect, useState } from "react";
import LazyLoadedImage from "./lazyLoadedImage";
import { loadThumbnails } from "@/lib/thumbnailLoader";
import { PremiumIconSmall, VerifiedIcon } from "./RobloxIcons";
export const HomeLoggedInHeader = React.memo(function HomeLoggedInHeader() {
const [profileDetails, setProfileDetails] =
useState<UserProfileDetails | null>(null);
useEffect(() => {
(async () => {
const authed = await getLoggedInUser();
setProfileDetails(await getUserByUserId(authed.id.toString()));
})();
}, []);
if (!profileDetails) {
return <></>;
}
loadThumbnails([
{
type: "AvatarHeadShot",
targetId: profileDetails.id,
format: "webp",
size: "720x720"
}
]).catch((a) => {});
return (
<div className="flex items-center gap-6 bg-base rounded-xl px-8 py-6 w-fit mt-8 ml-0">
<LazyLoadedImage
imgId={`AvatarHeadShot_${profileDetails.id}`}
alt=""
className="w-28 h-28 rounded-full shadow-2xl"
/>
<div className="flex flex-col justify-center">
<span className="text-3xl font-bold text-text flex items-center gap-2">
Hello, {profileDetails.displayName}
{/* TODO: Fetch the User's Roblox Premium subscription state */}
<PremiumIconSmall className="w-6 h-6 fill-transparent" />
<VerifiedIcon className="w-6 h-6 fill-blue text-base" />
</span>
<span className="text-base font-mono text-subtext0 mt-1">
@{profileDetails.name}
</span>
</div>
</div>
);
});