"use client" import { useMemo, useState } from "react" import Link from "next/link" import { Mail, MailOpen, Plus, Send, Inbox } from "lucide-react" import { Badge } from "@/shared/components/ui/badge" import { Button } from "@/shared/components/ui/button" import { Card, CardContent, CardHeader } from "@/shared/components/ui/card" import { EmptyState } from "@/shared/components/ui/empty-state" import { Tabs, TabsList, TabsTrigger } from "@/shared/components/ui/tabs" import { cn, formatDate } from "@/shared/lib/utils" import { usePermission } from "@/shared/hooks/use-permission" import { Permissions } from "@/shared/types/permissions" import type { Message, MessageType } from "../types" type Tab = "inbox" | "sent" export function MessageList({ messages, currentUserId, initialType = "inbox", }: { messages: Message[] currentUserId: string initialType?: MessageType }) { const [tab, setTab] = useState(initialType === "sent" ? "sent" : "inbox") const { hasPermission } = usePermission() const canSend = hasPermission(Permissions.MESSAGE_SEND) const filtered = useMemo(() => { if (tab === "inbox") return messages.filter((m) => m.receiverId === currentUserId) return messages.filter((m) => m.senderId === currentUserId) }, [messages, tab, currentUserId]) return (
setTab(v as Tab)}> Inbox Sent {canSend ? ( ) : null}
{filtered.length === 0 ? ( ) : (
{filtered.map((m) => { const isReceived = m.receiverId === currentUserId const counterpart = isReceived ? m.senderName : m.receiverName const unread = isReceived && !m.isRead return (
{unread ? ( ) : ( )} {m.subject ?? "(no subject)"} {unread ? New : null}

{isReceived ? "From" : "To"}: {counterpart ?? "Unknown"}

{formatDate(m.createdAt)}

{m.content}

) })}
)}
) }