"use client"; import { useState } from "react"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { useAuth } from "@/contexts/AuthContext"; import { profileUpdateSchema, ProfileUpdateFormData } from "@/lib/validations"; import { Input } from "@/components/ui/Input"; import { Badge } from "@/components/ui/Badge"; import { userService } from "@/services/user.service"; import toast from "react-hot-toast"; import { useRouter } from "next/navigation"; import { formatDate } from "@/utils/helpers"; interface QuickAction { label: string; route: string; variant: 'primary' | 'secondary'; } interface ProfilePageProps { role: 'admin' | 'employee'; roleLabel: string; badgeVariant: 'danger' | 'warning' | 'info' | 'success'; primaryColor: 'blue' | 'green'; quickActions: QuickAction[]; } /** * Shared profile page component for admin and employee */ export default function ProfilePage({ role, roleLabel, badgeVariant, primaryColor, quickActions, }: ProfilePageProps) { const { user, refreshUser } = useAuth(); const router = useRouter(); const [isEditing, setIsEditing] = useState(false); const [isSubmitting, setIsSubmitting] = useState(false); const colorClasses = { blue: { primaryBtn: 'bg-blue-600 hover:bg-blue-700', secondaryBtn: 'border-blue-600 text-blue-600 hover:bg-blue-600', }, green: { primaryBtn: 'bg-green-600 hover:bg-green-700', secondaryBtn: 'border-green-600 text-green-600 hover:bg-green-600', }, }; const { register, handleSubmit, reset, formState: { errors }, } = useForm({ resolver: zodResolver(profileUpdateSchema), defaultValues: { firstName: user?.firstName || "", lastName: user?.lastName || "", phone: user?.phone || "", }, }); if (!user) { return null; } const onSubmit = async (data: ProfileUpdateFormData) => { setIsSubmitting(true); try { await userService.updateProfile(data); await refreshUser(); toast.success("Profil mis à jour avec succès"); setIsEditing(false); } catch (error: any) { toast.error(error.message || "Erreur lors de la mise à jour du profil"); } finally { setIsSubmitting(false); } }; const handleCancel = () => { reset({ firstName: user?.firstName || "", lastName: user?.lastName || "", phone: user?.phone || "", }); setIsEditing(false); }; const colors = colorClasses[primaryColor]; return (

Mon profil

{/* Profile Info Card */}

Informations personnelles

{!isEditing ? (
Prénom
{user.firstName}
Nom
{user.lastName}
Email
{user.email}
Téléphone
{user.phone || "Non renseigné"}
Rôle
{roleLabel}
) : (
)}
{/* Account Status Card */}

Statut du compte

Membre depuis
{formatDate(user.createdAt)}
{/* Quick Actions Card */}

Actions rapides

{quickActions.map((action, index) => ( ))}
); }