import { DoorOpen, Eye, Globe, Lock, Pencil, Sofa, Users } from "lucide-react"; import Link from "next/link"; import { redirect } from "next/navigation"; import { AdminBreadcrumb } from "@/components/admin/admin-breadcrumb"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Card, CardContent } from "@/components/ui/card"; import { canAccess, getAdminContext, PERMS } from "@/lib/permissions"; import { loadRoom } from "../../_lib/load-room"; // TODO: Cache Components adoption. Refactor this route so this opt-out can be removed. // See: https://nextjs.org/docs/app/guides/migrating-to-cache-components export const instant = false; const stateVariants: Record< string, "default" | "secondary" | "destructive" | "outline" > = { open: "default", locked: "secondary", password: "destructive", invisible: "outline", }; export default async function RoomShowPage({ params, }: { params: Promise<{ locale: string; id: string }>; }) { const { id } = await params; const { session, permissions } = await getAdminContext(); if (!canAccess(permissions, PERMS.ROOMS_VIEW, session.user.rank)) redirect("/admin"); const room = await loadRoom(id); const canEdit = canAccess(permissions, PERMS.ROOMS_EDIT, session.user.rank); return (
{/* Hero */}

{room.name}

#{room.id} {room.state}
{room.description && (

{room.description}

)}
{room.users} /{" "} {room.usersMax} users {room.owner ? ( Owner: {room.owner.username} ) : ( Owner: {room.ownerName} )}
{canEdit && ( )}
{/* Info grid */}

{room.users} / {room.usersMax}

Current Users

{room.state}

Access State

{room.score}

Score

{room.category}

Category

); }