'use client'; import { useEffect, useMemo, useState } from 'react'; import Link from 'next/link'; import Sidebar from '@/components/Sidebar'; import MessageContent from '@/components/MessageContent'; import { AtSign, ChevronRight, Search } from 'lucide-react'; type MentionItem = { chatroom_id: string; chat_name: string; local_id: number; sender: string; content: string; time: string; timestamp: number; seen: number; }; type MentionsResp = { ok: boolean; total: number; items: MentionItem[]; }; function dateOf(time: string) { return time?.slice(0, 10) || ''; } export default function MentionsPage() { const [data, setData] = useState(null); const [q, setQ] = useState(''); useEffect(() => { let cancelled = false; (async () => { try { const r = await fetch('/api/mentions?limit=5000'); const j = (await r.json()) as MentionsResp; if (!cancelled && j.ok) setData(j); } catch {} })(); return () => { cancelled = true; }; }, []); const filtered = useMemo(() => { const items = data?.items ?? []; const keyword = q.trim().toLowerCase(); if (!keyword) return items; return items.filter((item) => { const haystack = `${item.chat_name} ${item.sender} ${item.content}`.toLowerCase(); return haystack.includes(keyword); }); }, [data, q]); return (
@ 我的消息
{data ? `${filtered.length} / ${data.total} 条` : '加载中…'}
setQ(e.target.value)} placeholder="搜索群名、发送人或内容…" className="w-72 bg-transparent text-[12px] outline-none placeholder:text-[var(--text-3)]" />
{!data ? (
加载中…
) : filtered.length === 0 ? (
没有匹配的 @ 消息
) : (
{filtered.map((item) => { const date = dateOf(item.time); return (
{item.chat_name} {' · '} {item.sender || '未知发送人'}
{item.time || '未知时间'}
查看群记录
); })}
)}
); }