import Image from "next/image"; import Link from "next/link"; import { PageLayout } from "@/components/ui/PageLayout"; import { LinkButton } from "@/design-system/base/button"; import { actionGetUserProfileByUsername } from "@/modules/auth/auth-action"; import { repoGetFoldersWithTotalPairsByUserId } from "@/modules/folder/folder-repository"; import { actionGetFollowStatus } from "@/modules/follow/follow-action"; import { notFound } from "next/navigation"; import { getTranslations } from "next-intl/server"; import { auth } from "@/auth"; import { headers } from "next/headers"; import { FollowStats } from "@/components/follow/FollowStats"; interface UserPageProps { params: Promise<{ username: string; }>; } export default async function UserPage({ params }: UserPageProps) { const { username } = await params; const t = await getTranslations("user_profile"); const session = await auth.api.getSession({ headers: await headers() }); const result = await actionGetUserProfileByUsername({ username }); if (!result.success || !result.data) { notFound(); } const user = result.data; const [folders, followStatus] = await Promise.all([ repoGetFoldersWithTotalPairsByUserId(user.id), actionGetFollowStatus({ targetUserId: user.id }), ]); const isOwnProfile = session?.user?.username === username || session?.user?.email === username; const followersCount = followStatus.success && followStatus.data ? followStatus.data.followersCount : 0; const followingCount = followStatus.success && followStatus.data ? followStatus.data.followingCount : 0; const isFollowing = followStatus.success && followStatus.data ? followStatus.data.isFollowing : false; return (
{isOwnProfile && {t("logout")}}
{user.image ? (
{user.displayUsername
) : (
{(user.displayUsername || user.username || user.email)[0].toUpperCase()}
)}

{user.displayUsername || user.username || t("anonymous")}

{user.username && (

@{user.username}

)} {user.bio && (

{user.bio}

)}
{t("joined")}: {new Date(user.createdAt).toLocaleDateString()} {user.emailVerified && ( {t("verified")} )}

{t("accountInfo")}

{t("userId")}
{user.id}
{t("username")}
{user.username || {t("notSet")}}
{t("displayName")}
{user.displayUsername || {t("notSet")}}
{t("memberSince")}
{new Date(user.createdAt).toLocaleDateString()}

{t("folders.title")}

{folders.length === 0 ? (

{t("folders.noFolders")}

) : (
{folders.map((folder) => ( ))}
{t("folders.folderName")} {t("folders.totalPairs")} {t("folders.createdAt")} {t("folders.actions")}
{folder.name}
ID: {folder.id}
{folder.total}
{new Date(folder.createdAt).toLocaleDateString()} {t("folders.view")}
)}
); }