"use client"; import React, { useState } from "react"; import { Card } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Badge } from "@/components/ui/badge"; import { Mail, Search, Send, Archive, Star, Trash2, Reply, Forward, MoreVertical, Paperclip, Clock, } from "lucide-react"; import Link from "next/link"; /** * Page principale de la messagerie - Boîte de réception * Affiche tous les messages reçus avec filtrage et recherche */ export default function MessagesPage() { const [selectedMessages, setSelectedMessages] = useState([]); const [searchTerm, setSearchTerm] = useState(""); const [filterStatus, setFilterStatus] = useState<"all" | "unread" | "starred">( "all" ); // Messages mockés pour démonstration const messages = [ { id: "1", from: "Jean Dupont", fromEmail: "jean.dupont@btpxpress.fr", subject: "Demande de devis pour chantier Lyon", preview: "Bonjour, je souhaiterais obtenir un devis pour la construction d'un immeuble...", date: "2025-10-30T10:30:00", isRead: false, isStarred: true, hasAttachment: true, }, { id: "2", from: "Marie Martin", fromEmail: "marie.martin@client.fr", subject: "Validation planning chantier", preview: "Le planning que vous avez envoyé me convient parfaitement...", date: "2025-10-30T09:15:00", isRead: true, isStarred: false, hasAttachment: false, }, { id: "3", from: "Pierre Leblanc", fromEmail: "p.leblanc@entreprise.com", subject: "Question sur facture #2024-103", preview: "J'ai une question concernant la facture que j'ai reçue...", date: "2025-10-29T16:45:00", isRead: false, isStarred: false, hasAttachment: true, }, { id: "4", from: "Sophie Bernard", fromEmail: "sophie.b@construction.fr", subject: "Proposition de collaboration", preview: "Nous sommes intéressés par une collaboration sur plusieurs projets...", date: "2025-10-29T14:20:00", isRead: true, isStarred: true, hasAttachment: false, }, ]; const filteredMessages = messages.filter((message) => { const matchesSearch = message.from.toLowerCase().includes(searchTerm.toLowerCase()) || message.subject.toLowerCase().includes(searchTerm.toLowerCase()); const matchesFilter = filterStatus === "all" || (filterStatus === "unread" && !message.isRead) || (filterStatus === "starred" && message.isStarred); return matchesSearch && matchesFilter; }); const toggleSelectMessage = (id: string) => { setSelectedMessages((prev) => prev.includes(id) ? prev.filter((msgId) => msgId !== id) : [...prev, id] ); }; const formatDate = (dateString: string) => { const date = new Date(dateString); const now = new Date(); const diffInHours = (now.getTime() - date.getTime()) / (1000 * 60 * 60); if (diffInHours < 24) { return date.toLocaleTimeString("fr-FR", { hour: "2-digit", minute: "2-digit", }); } else if (diffInHours < 48) { return "Hier"; } else { return date.toLocaleDateString("fr-FR", { day: "2-digit", month: "short", }); } }; const unreadCount = messages.filter((m) => !m.isRead).length; return (
{/* En-tête */}

Messagerie

{unreadCount} message{unreadCount > 1 ? "s" : ""} non lu {unreadCount > 1 ? "s" : ""}

{/* Navigation */}
{/* Barre de recherche et filtres */}
setSearchTerm(e.target.value)} />
{/* Actions groupées */} {selectedMessages.length > 0 && (
{selectedMessages.length} message{selectedMessages.length > 1 ? "s" : ""}{" "} sélectionné{selectedMessages.length > 1 ? "s" : ""}
)} {/* Liste des messages */}
{filteredMessages.length > 0 ? ( filteredMessages.map((message) => (
toggleSelectMessage(message.id)} >
{/* Checkbox */} toggleSelectMessage(message.id)} className="mt-1" onClick={(e) => e.stopPropagation()} /> {/* Star */} {/* Contenu du message */}

{message.from}

{message.hasAttachment && ( )}

{message.subject}

{message.preview}

{formatDate(message.date)}
)) ) : (

Aucun message trouvé

)}
{/* Statistiques */}

{messages.length}

Messages reçus

{unreadCount}

Non lus

{messages.filter((m) => m.isStarred).length}

Favoris

12

Envoyés

); }