import { motion } from "framer-motion"; import { Link } from "wouter"; import { ArrowLeft, Trophy, Star, Lock, Loader2 } from "lucide-react"; import { useQuery } from "@tanstack/react-query"; import { useAuth } from "@/lib/auth"; import gridBg from '@assets/generated_images/dark_subtle_digital_grid_texture.png'; export default function Achievements() { const { user } = useAuth(); const { data: profile, isLoading: profileLoading } = useQuery({ queryKey: ["/api/me/profile"], enabled: !!user }); const { data: userAchievements, isLoading: achievementsLoading } = useQuery({ queryKey: ["/api/me/achievements"], enabled: !!user }); const { data: allAchievements, isLoading: allLoading } = useQuery({ queryKey: ["/api/achievements"], enabled: !!user }); const isLoading = profileLoading || achievementsLoading || allLoading; if (!user) { return (

Please log in to view achievements

); } // Create a set of unlocked achievement IDs const unlockedIds = new Set((userAchievements || []).map((a: any) => a.achievement_id || a.id)); // Separate unlocked and locked achievements const unlocked = userAchievements || []; const locked = (allAchievements || []).filter((a: any) => !unlockedIds.has(a.id)); return (
{/* Background */}
{/* Header */}

Achievements

Total XP: {(profile as any)?.total_xp?.toLocaleString() || 0} ยท Unlocked: {unlocked.length} / {allAchievements?.length || 0}

{isLoading ? (
Loading achievements...
) : (
{/* Unlocked Achievements */} {unlocked.length > 0 && (

Unlocked ({unlocked.length})

{unlocked.map((achievement: any, index: number) => (

{achievement.title}

{achievement.description && (

{achievement.description}

)}
+{achievement.xp_reward || 0} XP {achievement.earned_at && ( {new Date(achievement.earned_at).toLocaleDateString()} )}
))}
)} {/* Locked Achievements */} {locked.length > 0 && (

Locked ({locked.length})

{locked.map((achievement: any, index: number) => (

{achievement.title}

{achievement.description && (

{achievement.description}

)}
+{achievement.xp_reward || 0} XP
))}
)} {unlocked.length === 0 && locked.length === 0 && (

No achievements available yet.

Start building to earn your first achievement!

)}
)}
); }