"use client" import { ClipboardList, Heart, MessageCircle, PenSquare, Pin } from "lucide-react" import Link from "next/link" import { useState } from "react" import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar" import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { Card, CardContent, CardFooter, CardHeader } from "@/components/ui/card" import { listGames, listOrders, listPlayers, listPosts } from "@/lib/api" import { roleLabels } from "@/lib/constants" export default function CommunityPage() { const games = listGames() const posts = listPosts() const orders = listOrders() const players = listPlayers() const [sortMode, setSortMode] = useState<"latest" | "hot">("latest") const [selectedGame, setSelectedGame] = useState(null) const filteredPosts = posts .filter((post) => { if (!selectedGame) return true return post.tags.includes(selectedGame) }) .sort((a, b) => { if (sortMode === "latest") { return new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime() } const scoreA = a.likeCount + a.commentCount const scoreB = b.likeCount + b.commentCount return scoreB - scoreA }) return (

社区

{games.map((game) => ( setSelectedGame(selectedGame === game.name ? null : game.name)} > {game.name} ))}
{filteredPosts.map((post) => (() => { const linkedOrder = post.linkedOrderId ? orders.find((order) => order.id === post.linkedOrderId) : null const linkedPlayer = linkedOrder ? players.find((player) => player.id === linkedOrder.playerId) : null return (
{post.author.nickname[0]}
{post.author.nickname} {roleLabels[post.authorRole]} {post.pinned && }
{new Date(post.createdAt).toLocaleDateString("zh-CN")}

{post.title}

{post.content}

{post.tags.length > 0 && (
{post.tags.map((tag) => ( {tag} ))}
)} {post.linkedOrderId && (
关联订单秀单
{linkedOrder && (

{linkedOrder.service.gameName} · {linkedOrder.service.title}

{linkedOrder.playerName} {linkedPlayer ? ` · ${linkedPlayer.rating}` : ""}

)}
)}
{post.likeCount} {post.commentCount}
) })(), )}
) }