"use client"; import { useEffect, useState } from "react"; import Image from "next/image"; import Link from "next/link"; import SessionCoverImage from "./SessionCoverImage"; import AddressLink from "./AddressLink"; import { getSessionsWithDates, RECENT_JOINERS } from "@/config/home.config"; const MOCK_JOINERS = RECENT_JOINERS.slice(0, 3); export default function HeroSection() { const sessions = getSessionsWithDates(); const mainSession = sessions[0]; const [stats, setStats] = useState<{ count: number; joiners: { nickname: string }[] } | null>(null); useEffect(() => { if (!mainSession) return; fetch("/api/join/stats") .then((r) => r.json()) .then((d) => d?.stats?.[mainSession.id] && setStats(d.stats[mainSession.id])) .catch(() => {}); }, [mainSession?.id]); return (

周末2小时 认识更多有趣的人

深圳 · 4–8 人小圈子

公开场地 · 填表申请 · 茶歇 · 不尬聊

立即报名
{mainSession && (
{/* 图片区 - 左侧/上方 */}
{mainSession.coverImage ? ( ) : (
)}
{["周末", "4人成行"].map((tag) => ( {tag} ))}
{/* 内容区 - 右侧/下方 */}

本周场次

{mainSession.title}

日期 {mainSession.date}

时间 {mainSession.time}

地点

{(stats?.joiners?.length ? stats.joiners : MOCK_JOINERS).slice(0, 5).map((j, i) => { const nickname = "name" in j ? (j as { name: string }).name : (j as { nickname: string }).nickname; const avatar = "avatar" in j ? (j as { avatar: string }).avatar : (j as { avatar?: string }).avatar; const xhUrl = (j as { xiaohongshu_url?: string }).xiaohongshu_url; const showAvatar = avatar && avatar.length > 0; return ( { e.preventDefault(); e.stopPropagation(); if (xhUrl) window.open(xhUrl, "_blank", "noopener,noreferrer"); }} > {showAvatar ? ( ) : ( {nickname.slice(0, 1) || "?"} )} ); })}
{stats?.count ? `${stats.count} 人已报名` : "有人报名中"}
报名
)}
); }