import {useContext, useEffect, useState} from "react"; import styles from "./ProfilePage.module.css"; import {AuthContext} from "../../contexts/Auth/AuthContext"; import formatDate from "../../utils/date/formatDate"; import Task from "../../components/Task/Task"; import SettingsModal from "./components/SettingsModal/SettingsModal"; import {useParams} from "react-router"; import {useNavigate} from "react-router"; import {useRef} from "react"; import getUserById from "../../utils/users/getUserById"; import ManageMember from "./components/ManageMember/ManageMember.jsx"; import uploadProfilePhoto from "../../utils/users/uploadProfilePhoto"; import deleteProfilePhoto from "../../utils/users/deleteProfilePhoto.js"; interface TaskType { id: number; name: string; description: string; location: string; start: string; end: string; max_participants: number; events_id: number; created_at: string; updated_at: string; pivot: { user_id: number; task_id: number; }; } interface User { id: number; name: string; lastname: string; role: string; email: string; phone: string | null; created_at: string; isAdmin: boolean; tasks: TaskType[]; profile_photo_path?: string | null; } interface AuthContextType { user: User | null; update: () => void; } function ProfilePage() { const navigate = useNavigate(); const { id } = useParams(); const { user, update } = useContext(AuthContext) as AuthContextType; const [profileUser, setProfileUser] = useState(null); const [profilePicture, setProfilePicture] = useState(null); const fileInputRef = useRef(null); const isOwnProfile = !id || user?.id.toString() === id; useEffect(() => { (async () => { console.log(JSON.stringify(import.meta.env.VITE_API_URL)); if (!isOwnProfile && id) { const res = await getUserById(Number(id)); if (res.status === 404) { navigate("/404"); return; } if (res.status !== 200) { console.log("Erreur lors du chargement du profil", res); return; } setProfileUser(res.data); } else { setProfileUser(user); if (user?.profile_photo_path) { setProfilePicture(`${import.meta.env.VITE_API_URL}/storage/${user.profile_photo_path}`); } } })(); }, [user, id]); const handleEditPictureClick = () => { if (fileInputRef.current) { fileInputRef.current.click(); } }; const handleFileChange = async (e: React.ChangeEvent) => { const file = e.target.files?.[0]; if (!file) return; try { const res = await uploadProfilePhoto(file); if (res.ok) { setProfilePicture(`${import.meta.env.VITE_API_URL}/storage/${res.data.profile_photo_path}`); console.log("Photo mise à jour") await update(); } else { console.log(res.data?.message || res.error || "Erreur lors de l'upload."); } } catch (err) { console.log("Erreur réseau."); } }; const handleDeletePicture = async () => { await deleteProfilePhoto(); setProfilePicture(null); }; return (
Photo de profil {isOwnProfile && (
Modifier
)}

{profileUser?.name} {profileUser?.lastname}

{user?.isAdmin && profileUser && !isOwnProfile && ( )}

Role : {profileUser?.role}

Membre depuis : {profileUser && formatDate(profileUser.created_at)}

Mail : {profileUser?.email}

Téléphone : {profileUser?.phone ?? "Non renseigné"}

{isOwnProfile && (
)}

Tâches :

{profileUser?.tasks.length ? ( profileUser.tasks.map((task) => ) ) : (

Aucune tâche.

)}
); } export default ProfilePage;