"use client" import { Badge } from "@/components/ui/badge" import { EmptyState } from "@/components/ui/empty-state" import { getPlayerById, listOrders } from "@/lib/api" import { isActiveOrder } from "@/lib/domain/order-filters" import type { UserRole } from "@/lib/types" import { useAuthStore } from "@/store/auth" import { MessageSquare } from "lucide-react" import Link from "next/link" import { useEffect, useState } from "react" type ChatEntry = { orderId: string targetUserId: string title: string description: string } function orderRole(role: UserRole): "consumer" | "player" | undefined { if (role === "consumer" || role === "player") return role return undefined } export default function ChatListPage() { const currentRole = useAuthStore((state) => state.currentRole) const role = orderRole(currentRole) const [entries, setEntries] = useState([]) const [loading, setLoading] = useState(true) useEffect(() => { let cancelled = false void (async () => { if (!role) { setEntries([]) setLoading(false) return } setLoading(true) try { const orders = (await listOrders({ role })).filter((order) => isActiveOrder(order.status)) const nextEntries = await Promise.all( orders.map(async (order) => { if (role === "consumer") { const player = await getPlayerById(String(order.playerId)) if (!player) return null return { orderId: String(order.id), targetUserId: player.user.id, title: player.user.nickname, description: order.service.title, } } return { orderId: String(order.id), targetUserId: String(order.consumerId), title: `客户 ${order.consumerId}`, description: order.service.title, } }), ) if (!cancelled) setEntries(nextEntries.filter((entry): entry is ChatEntry => entry !== null)) } catch { if (!cancelled) setEntries([]) } finally { if (!cancelled) setLoading(false) } })() return () => { cancelled = true } }, [role]) return (

消息

{entries.length > 0 ? (
{entries.map((entry) => (
{entry.title} 订单

{entry.description}

))}
) : ( )}
) }