Files
tm_panel/src/app/(home)/_components/chats-card.tsx
T
AmirReza Jamali e45b96a506 refactor(ChatsCard): enhance layout and styling for better responsiveness
- Updated the ChatsCard component to improve layout and styling, ensuring better responsiveness.
- Adjusted class names for flex properties and truncation to enhance visual presentation of chat details.
- Ensured proper handling of unread message indicators and improved the rendering of last message timestamps.
2026-04-15 13:06:44 +03:30

84 lines
2.8 KiB
TypeScript

import { DotIcon } from "@/assets/icons";
import { formatMessageTime } from "@/lib/format-message-time";
import { cn } from "@/lib/utils";
import Image from "next/image";
import Link from "next/link";
import { getChatsData } from "../fetch";
export async function ChatsCard() {
const data = await getChatsData();
return (
<div className="col-span-12 rounded-[10px] bg-white py-6 shadow-1 dark:bg-gray-dark dark:shadow-card xl:col-span-4">
<h2 className="mb-5.5 px-7.5 text-body-2xlg font-bold text-dark dark:text-white">
Chats
</h2>
<ul>
{data.map((chat, key) => (
<li key={key}>
<Link
href="/"
className="flex items-center gap-4.5 px-7.5 py-3 outline-none hover:bg-gray-2 focus-visible:bg-gray-2 dark:hover:bg-dark-2 dark:focus-visible:bg-dark-2"
>
<div className="relative shrink-0">
<Image
src={chat.profile}
width={56}
height={56}
className="size-14 rounded-full object-cover"
alt={"Avatar for " + chat.name}
/>
<span
className={cn(
"absolute bottom-0 right-0 size-3.5 rounded-full ring-2 ring-white dark:ring-dark-2",
chat.isActive ? "bg-green" : "bg-orange-light",
)}
/>
</div>
<div
className={cn(
"relative flex-grow min-w-0",
chat.unreadCount && "pr-10",
)}
>
<h3 className="truncate font-medium text-dark dark:text-white">
{chat.name}
</h3>
<div className="flex min-w-0 items-center gap-2">
<span
className={cn(
"block min-w-0 flex-1 truncate text-sm font-medium dark:text-dark-5",
chat.unreadCount && "text-dark-4 dark:text-dark-6",
)}
>
{chat.lastMessage.content}
</span>
<DotIcon className="shrink-0" />
<time
className="shrink-0 text-xs"
dateTime={chat.lastMessage.timestamp}
>
{formatMessageTime(chat.lastMessage.timestamp)}
</time>
</div>
{!!chat.unreadCount && (
<div className="pointer-events-none absolute right-0 top-1/2 aspect-square max-w-fit -translate-y-1/2 select-none rounded-full bg-primary px-2 py-0.5 text-sm font-medium text-white">
{chat.unreadCount}
</div>
)}
</div>
</Link>
</li>
))}
</ul>
</div>
);
}