import { useEffect, useState } from 'react' import { Activity } from 'lucide-react' import { statsAPI, type TopUserEntry } from '../api/stats' import type { User } from '../types' // ActiveUsersStrip 在用户管理页顶部展示播放次数最多的几个账号。 // // 只做展示与定位,不做筛选:管理员关心的是「谁在用」,点一下滚动到该用户 // 行即可继续原来的操作。非管理员拿到 403 时静默隐藏,避免出现红色报错条。 export function ActiveUsersStrip({ users }: { users: User[] }) { const [top, setTop] = useState([]) useEffect(() => { let cancelled = false statsAPI .topUsers(5) .then((rows) => { if (!cancelled) setTop(rows) }) .catch(() => { if (!cancelled) setTop([]) }) return () => { cancelled = true } }, []) if (top.length === 0) return null const knownIDs = new Set(users.map((u) => u.id)) const focusUser = (userID: string) => { const row = document.getElementById(`admin-user-${userID}`) if (row) { row.scrollIntoView({ behavior: 'smooth', block: 'center' }) } } return (
活跃用户 Top {top.length}
{top.map((entry) => { // 已删除的账号仍会出现在历史统计里,此时不可点击。 const exists = knownIDs.has(entry.user_id) return ( ) })}
) }