- {user.displayName || user.username} -
-@{user.username}
++ {user.displayName || user.username} +
++ @{user.username} +
+{user.bio}
diff --git a/thoughts-frontend/app/users/[username]/page.tsx b/thoughts-frontend/app/users/[username]/page.tsx index 066dc41..9741626 100644 --- a/thoughts-frontend/app/users/[username]/page.tsx +++ b/thoughts-frontend/app/users/[username]/page.tsx @@ -1,10 +1,11 @@ -import { getUserProfile, getUserThoughts } from "@/lib/api"; +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"; interface ProfilePageProps { params: { username: string }; @@ -14,22 +15,34 @@ export default async function ProfilePage({ params }: ProfilePageProps) { const { username } = params; const token = (await cookies()).get("auth_token")?.value ?? null; - // Fetch data directly on the server. - // The `loading.tsx` file will be shown to the user during this fetch. - const [userResult, thoughtsResult] = await Promise.allSettled([ - getUserProfile(username, token), - getUserThoughts(username, token), + // 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, ]); - // Handle errors from the server-side fetch if (userResult.status === "rejected") { - // If the user isn't found, render the Next.js 404 page 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.username} +
+{user.bio}