68 lines
1.8 KiB
TypeScript
68 lines
1.8 KiB
TypeScript
import { asc, eq } from "drizzle-orm";
|
|
import { notFound, redirect } from "next/navigation";
|
|
import { CatalogItemsBc, CatalogPagesBc, db } from "@/lib/db";
|
|
import { canAccess, getAdminContext, PERMS } from "@/lib/permissions";
|
|
import { BcPageDetail } from "../bc-manager";
|
|
|
|
export default async function BcPageDetailPage({
|
|
params: paramsPromise,
|
|
}: {
|
|
params: Promise<{ locale: string; id: string }>;
|
|
}) {
|
|
const { id: idStr } = await paramsPromise;
|
|
const id = parseInt(idStr, 10);
|
|
if (Number.isNaN(id)) notFound();
|
|
|
|
const { session, permissions } = await getAdminContext();
|
|
if (!canAccess(permissions, PERMS.CATALOG_VIEW, session.user.rank)) {
|
|
redirect("/admin");
|
|
}
|
|
|
|
const canEdit = canAccess(permissions, PERMS.CATALOG_EDIT, session.user.rank);
|
|
|
|
const [bcPage] = await db
|
|
.select()
|
|
.from(CatalogPagesBc)
|
|
.where(eq(CatalogPagesBc.id, id))
|
|
.limit(1);
|
|
if (!bcPage) notFound();
|
|
|
|
const bcItems = await db
|
|
.select()
|
|
.from(CatalogItemsBc)
|
|
.where(eq(CatalogItemsBc.pageId, id))
|
|
.orderBy(asc(CatalogItemsBc.orderNumber));
|
|
|
|
return (
|
|
<BcPageDetail
|
|
page={{
|
|
id: bcPage.id,
|
|
parentId: bcPage.parentId,
|
|
caption: bcPage.caption,
|
|
pageLayout: bcPage.pageLayout,
|
|
iconColor: bcPage.iconColor,
|
|
iconImage: bcPage.iconImage,
|
|
orderNum: bcPage.orderNum,
|
|
visible: bcPage.visible,
|
|
enabled: bcPage.enabled,
|
|
pageHeadline: bcPage.pageHeadline,
|
|
pageTeaser: bcPage.pageTeaser,
|
|
pageSpecial: bcPage.pageSpecial ?? "",
|
|
pageText1: bcPage.pageText1 ?? "",
|
|
pageText2: bcPage.pageText2 ?? "",
|
|
pageTextDetails: bcPage.pageTextDetails ?? "",
|
|
pageTextTeaser: bcPage.pageTextTeaser ?? "",
|
|
}}
|
|
items={bcItems.map((i) => ({
|
|
id: i.id,
|
|
pageId: i.pageId,
|
|
itemIds: i.itemIds,
|
|
catalogName: i.catalogName,
|
|
orderNumber: i.orderNumber,
|
|
extradata: i.extradata,
|
|
}))}
|
|
canEdit={canEdit}
|
|
/>
|
|
);
|
|
}
|