From 88d4cd0bc984ba97314ed38ff9839ed492f1d867 Mon Sep 17 00:00:00 2001 From: "Builder.io" Date: Wed, 1 Oct 2025 00:56:56 +0000 Subject: [PATCH] Simplify passport data loading and remove local fallbacks cgen-c30a0808dd3a4b12bc7d2c8dd39c86b8 --- client/pages/ProfilePassport.tsx | 101 +++++++++++-------------------- 1 file changed, 34 insertions(+), 67 deletions(-) diff --git a/client/pages/ProfilePassport.tsx b/client/pages/ProfilePassport.tsx index 6984beb6..0887a8f9 100644 --- a/client/pages/ProfilePassport.tsx +++ b/client/pages/ProfilePassport.tsx @@ -44,7 +44,7 @@ const formatDate = (value?: string | null) => { const ProfilePassport = () => { const params = useParams<{ id?: string }>(); const navigate = useNavigate(); - const { user, linkedProviders, profile: authProfile } = useAuth(); + const { user, linkedProviders } = useAuth(); const [profile, setProfile] = useState< (AethexUserProfile & { email?: string | null }) | null @@ -74,79 +74,47 @@ const ProfilePassport = () => { } const loadProfile = async () => { + setLoading(true); try { - setLoading(true); + const isViewingSelf = params.id === "me" || !params.id; + + const profilePromise = isViewingSelf + ? aethexUserService.getCurrentUser() + : aethexUserService.getProfileById(targetUserId); + const [profileData, achievementList, interestList, projectList] = await Promise.all([ - params.id === "me" && profile && profile.id === targetUserId - ? Promise.resolve(profile) - : aethexUserService.getProfileById(targetUserId), - aethexAchievementService.getUserAchievements(targetUserId), - aethexUserService.getUserInterests(targetUserId), - aethexProjectService.getUserProjects(targetUserId).catch(() => []), + profilePromise, + aethexAchievementService + .getUserAchievements(targetUserId) + .catch((error) => { + console.error("Failed to load achievements", error); + return [] as AethexAchievement[]; + }), + aethexUserService.getUserInterests(targetUserId).catch((error) => { + console.error("Failed to load interests", error); + return [] as string[]; + }), + aethexProjectService + .getUserProjects(targetUserId) + .catch((error) => { + console.error("Failed to load projects", error); + return [] as ProjectPreview[]; + }), ]); - let resolvedProfile = profileData as - | (AethexUserProfile & { email?: string | null }) - | null; - - const isViewingSelf = params.id === "me" && user?.id === targetUserId; - - if (!resolvedProfile && isViewingSelf) { - resolvedProfile = (authProfile as any) ?? null; - } - - if ( - !resolvedProfile && - isViewingSelf && - typeof window !== "undefined" - ) { - try { - const stored = localStorage.getItem(`demo_profile_${targetUserId}`); - if (stored) { - resolvedProfile = JSON.parse(stored); - } - } catch {} - } - - if (!resolvedProfile && isViewingSelf && user) { - resolvedProfile = { - id: user.id, - username: user.email?.split("@")[0] || `user_${Date.now()}`, - full_name: - (authProfile as any)?.full_name || user.email || "AeThex Creator", - email: user.email, - user_type: - ((authProfile as any)?.user_type as any) || - ("community_member" as any), - experience_level: - ((authProfile as any)?.experience_level as any) || - ("beginner" as any), - level: (authProfile as any)?.level ?? 1, - total_xp: (authProfile as any)?.total_xp ?? 0, - loyalty_points: (authProfile as any)?.loyalty_points ?? 0, - created_at: - (authProfile as any)?.created_at || new Date().toISOString(), - updated_at: - (authProfile as any)?.updated_at || new Date().toISOString(), - } as AethexUserProfile; - } - - if (resolvedProfile && isViewingSelf && typeof window !== "undefined") { - try { - localStorage.setItem( - `demo_profile_${targetUserId}`, - JSON.stringify(resolvedProfile), - ); - } catch {} - } - - if (!resolvedProfile) { + if (!profileData) { setNotFound(true); return; } - setProfile(resolvedProfile as any); + const resolvedProfile = { + ...profileData, + email: + (profileData as any)?.email ?? (isViewingSelf ? user?.email ?? null : null), + } as AethexUserProfile & { email?: string | null }; + + setProfile(resolvedProfile); setAchievements(achievementList ?? []); setInterests(interestList ?? []); setProjects( @@ -168,9 +136,8 @@ const ProfilePassport = () => { }; loadProfile(); - // We intentionally exclude profile from dependencies to avoid refetch loops when local state updates // eslint-disable-next-line react-hooks/exhaustive-deps - }, [targetUserId, params.id]); + }, [targetUserId, params.id, user?.email]); if (loading) { return ;