import React, { useState, useEffect, useCallback } from "react"; import { Header } from "@/components/dashboard/Header"; import { Sidebar } from "@/components/dashboard/Sidebar"; import { authService } from "@/services/authService"; import { userService } from "@/services/userService"; import { useNavigate } from "react-router-dom"; import { ProfileContent } from "@/components/profile/ProfileContent"; import { User } from "@/services/userService"; import { useToast } from "@/hooks/use-toast"; import { Loader2 } from "lucide-react"; import { useSidebar } from "@/contexts/SidebarContext"; const Profile = () => { // Use shared sidebar state const { sidebarCollapsed, toggleSidebar } = useSidebar(); // Get current user const currentUser = authService.getCurrentUser(); const [userData, setUserData] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const navigate = useNavigate(); const { toast } = useToast(); // Fetch complete user data const fetchUserData = useCallback(async () => { if (!currentUser?.id) { console.error("No current user ID found"); setLoading(false); setError("No user found. Please login again."); return; } try { console.log("Fetching user data for ID:", currentUser.id); const data = await userService.getUser(currentUser.id); console.log("Received user data:", data); if (data) { setUserData(data); setError(null); } else { console.error("No user data returned"); setError("Could not load user data"); toast({ title: "Error", description: "Could not load user data. Please try again later.", variant: "destructive", }); } } catch (error) { const errorMessage = error instanceof Error ? error.message : "Unknown error"; console.error("Failed to load user data:", error); setError(errorMessage); toast({ title: "Error", description: "Failed to load user profile. Please try again later.", variant: "destructive", }); } finally { setLoading(false); } }, [currentUser?.id, toast]); useEffect(() => { fetchUserData(); }, [fetchUserData]); // Handle logout const handleLogout = () => { authService.logout(); navigate("/login"); }; // Redirect if not authenticated useEffect(() => { if (!authService.isAuthenticated()) { navigate("/login"); } }, [navigate]); if (!currentUser) { return (

Please login to view your profile

); } return (
{loading ? (
Loading user data...
) : error ? (

{error}

) : ( )}
); }; export default Profile;