import { asc, eq } from "drizzle-orm"; import { ChevronRight } from "lucide-react"; import { notFound, redirect } from "next/navigation"; import { Fragment } from "react"; import Link from "@/components/link"; import { CatalogPages, db } from "@/lib/db"; import { canAccess, getAdminContext, PERMS } from "@/lib/permissions"; import { loadCatalogItemsData } from "@/lib/services/catalog-items-loader"; import { getAncestors } from "@/lib/services/catalog-tree"; import { CatalogDetailTabs } from "./catalog-detail-tabs"; export default async function CatalogEditPage({ params, }: { params: Promise<{ locale: string; id: string }>; }) { const { id } = await params; const { session, permissions } = await getAdminContext(); if (!canAccess(permissions, PERMS.CATALOG_VIEW, session.user.rank)) { redirect("/admin"); } const pageId = parseInt(id, 10); if (Number.isNaN(pageId)) notFound(); const [catalogPage] = await db .select() .from(CatalogPages) .where(eq(CatalogPages.id, pageId)) .limit(1); if (!catalogPage) notFound(); const [children, itemsData, ancestors] = await Promise.all([ db .select({ id: CatalogPages.id, caption: CatalogPages.caption, enabled: CatalogPages.enabled, }) .from(CatalogPages) .where(eq(CatalogPages.parentId, pageId)) .orderBy(asc(CatalogPages.orderNum)), loadCatalogItemsData(pageId), getAncestors(catalogPage.parentId), ]); const { items: catalogItems, baseItems, catalogNameMap, furniDataIdList, furniDescriptionMap, furniRevisionMap, interactionTypes, allPages, gamedataHotel, } = itemsData; const canEdit = canAccess(permissions, PERMS.CATALOG_EDIT, session.user.rank); return (
{/* Breadcrumb */} {/* Title */}

{catalogPage.caption} #{catalogPage.id}

Layout: {catalogPage.pageLayout} · {catalogItems.length} items

{/* Tabs */}
); }