"use client"; import { useEffect, useState } from "react"; import { useParams, useRouter } from "next/navigation"; import { motion } from "framer-motion"; import { Users, Heart, Sparkles, ChevronRight, } from "lucide-react"; import { getUserId } from "@/lib/userId"; import { joinRoom } from "@/lib/room"; import { Skeleton, SkeletonCircle } from "@/components/Skeleton"; import Button from "@/components/Button"; import { getSceneConfig } from "@/lib/sceneConfig"; import type { SceneType } from "@/types"; export default function InvitePage() { const params = useParams<{ id: string }>(); const router = useRouter(); const roomId = params.id; const [status, setStatus] = useState<"loading" | "ready" | "not_found">( "loading", ); const [userCount, setUserCount] = useState(0); const [scene, setScene] = useState("eat"); const [joining, setJoining] = useState(false); const [joinError, setJoinError] = useState(""); const sceneConfig = getSceneConfig(scene); useEffect(() => { fetch(`/api/room/${roomId}`) .then((res) => { if (!res.ok) throw new Error(); return res.json(); }) .then((data) => { setUserCount(data.userCount ?? 0); if (data.scene) setScene(data.scene); setStatus("ready"); }) .catch(() => setStatus("not_found")); }, [roomId]); const handleJoin = async () => { setJoining(true); setJoinError(""); try { await joinRoom(roomId, getUserId()); router.push(`/room/${roomId}`); } catch (e) { setJoinError(e instanceof Error ? e.message : "加入失败,请重试"); setJoining(false); } }; if (status === "loading") { return (
); } if (status === "not_found") { return (

房间不存在

这个房间已过期或不存在,请让朋友重新分享链接

); } return (
{sceneConfig.emoji}

NoWhatever

别说随便

{sceneConfig.inviteText}

{roomId}
{userCount > 0 && (
已有 {userCount} 人在房间
)}
加入房间 和朋友一起
各自滑卡 右滑喜欢的店
匹配结果 滑中同一家就去
{joinError && ( {joinError} )}
); }