Reapply "Add missing admin action files and navigation links"

This reverts commit 4d515bc400.
This commit is contained in:
Simo committed 2026-07-11 20:52:56 +02:00
1 parent 96ed768f14
commit 5b4228261a
338 files changed
+28143 -5948

No files matched your search

+84
View File
@@ -0,0 +1,84 @@
import { redirect } from 'next/navigation'
import { AdminBreadcrumb } from '@/components/admin/admin-breadcrumb'
import { canAccess, getAdminContext, PERMS } from '@/lib/permissions'
import { prisma } from '@/lib/prisma'
import { loadRoom } from '../../_lib/load-room'
import { FurniClient } from './furni-client'
export default async function RoomFurniPage({
params,
}: {
params: Promise<{ id: string; locale: 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)
// Load items in this room. items.item_id → items_base.id
const items = await prisma.item.findMany({
where: { roomId: room.id },
orderBy: { id: 'desc' },
})
// Resolve item bases
const baseIds = Array.from(new Set(items.map((i) => i.itemId)))
const bases = baseIds.length
? await prisma.itemsBase.findMany({
where: { id: { in: baseIds } },
select: { id: true, itemName: true, publicName: true, type: true },
})
: []
const baseMap = new Map(bases.map((b) => [b.id, b]))
// Resolve owner usernames
const userIds = Array.from(new Set(items.map((i) => i.userId).filter((u) => u > 0)))
const users = userIds.length
? await prisma.user.findMany({
where: { id: { in: userIds } },
select: { id: true, username: true },
})
: []
const userMap = new Map(users.map((u) => [u.id, u.username]))
const rows = items.map((i) => {
const base = baseMap.get(i.itemId)
return {
id: i.id,
baseId: i.itemId,
name: base?.publicName || base?.itemName || `#${i.itemId}`,
itemName: base?.itemName ?? '',
type: base?.type ?? '?',
x: i.x,
y: i.y,
z: i.z,
rot: i.rot,
wallPos: i.wallPos,
userId: i.userId,
ownerUsername: userMap.get(i.userId) ?? null,
extraData: i.extraData,
}
})
return (
<div className="space-y-6">
<AdminBreadcrumb
items={[
{ label: 'Rooms', href: '/admin/rooms' },
{ label: room.name, href: `/admin/rooms/show/${room.id}` },
{ label: 'Furniture' },
]}
/>
<FurniClient
room={{
id: room.id,
name: room.name,
ownerUsername: room.owner?.username ?? room.owner_name,
}}
items={rows}
canEdit={session.user.rank >= 4}
/>
</div>
)
}