{user.displayName || user.username}
@{user.username}
{user.bio}
This user hasn't posted any thoughts yet.
)}import { getMe, getUserProfile, getUserThoughts } from "@/lib/api"; import { UserAvatar } from "@/components/user-avatar"; import { ThoughtCard } from "@/components/thought-card"; import { Calendar } from "lucide-react"; import { Card } from "@/components/ui/card"; import { notFound } from "next/navigation"; import { cookies } from "next/headers"; import { FollowButton } from "@/components/follow-button"; import { TopFriends } from "@/components/top-friends"; interface ProfilePageProps { params: { username: string }; } export default async function ProfilePage({ params }: ProfilePageProps) { const { username } = params; const token = (await cookies()).get("auth_token")?.value ?? null; // Fetch data in parallel const userProfilePromise = getUserProfile(username, token); const thoughtsPromise = getUserThoughts(username, token); // Fetch the logged-in user's data (if they exist) const mePromise = token ? getMe(token) : Promise.resolve(null); const [userResult, thoughtsResult, meResult] = await Promise.allSettled([ userProfilePromise, thoughtsPromise, mePromise, ]); if (userResult.status === "rejected") { notFound(); } const user = userResult.value; const thoughts = thoughtsResult.status === "fulfilled" ? thoughtsResult.value.thoughts : []; const me = meResult.status === "fulfilled" ? meResult.value : null; // *** SIMPLIFIED LOGIC *** // The follow status is now directly available from the `me` object. const isOwnProfile = me?.username === user.username; const isFollowing = me?.following?.some( (followedUser) => followedUser.username === user.username ) || false; return (
@{user.username}
{user.bio}
This user hasn't posted any thoughts yet.
)}