import { and, count, desc, eq, like, or } from "drizzle-orm"; import { Package } from "lucide-react"; import { getTranslations } from "next-intl/server"; import { AdminPageShell } from "@/components/admin/admin-page-shell"; import { fetchAdminList } from "@/lib/admin-list"; import { db, ItemsBase } from "@/lib/db"; import { canAccess, PERMS } from "@/lib/permissions"; import { type ItemsBaseRow, ItemsTable } from "./items-table"; export default async function ItemsBasePage({ params: paramsPromise, searchParams, }: { params: Promise<{ locale: string }>; searchParams: Promise>; }) { const result = await fetchAdminList( { permission: PERMS.CATALOG_VIEW, fetch: async ({ search, page, perPage, rawParams }) => { const conditions = []; if (search) { const ors = [ like(ItemsBase.itemName, `%${search}%`), like(ItemsBase.publicName, `%${search}%`), ]; const asId = Number(search); if (Number.isFinite(asId) && asId > 0) { ors.push(eq(ItemsBase.id, asId)); } conditions.push(or(...ors)); } if (rawParams.filter_type) { conditions.push(eq(ItemsBase.type, rawParams.filter_type)); } const where = conditions.length > 0 ? and(...conditions) : undefined; const [rows, totals] = await Promise.all([ db .select({ id: ItemsBase.id, spriteId: ItemsBase.spriteId, publicName: ItemsBase.publicName, itemName: ItemsBase.itemName, type: ItemsBase.type, interactionType: ItemsBase.interactionType, width: ItemsBase.width, length: ItemsBase.length, }) .from(ItemsBase) .where(where) .orderBy(desc(ItemsBase.id)) .limit(perPage) .offset((page - 1) * perPage), db.select({ total: count() }).from(ItemsBase).where(where), ]); return { rows: rows.map((r) => ({ id: r.id, spriteId: r.spriteId, publicName: r.publicName || "", itemName: r.itemName || "", type: r.type || "s", interactionType: r.interactionType || "default", width: r.width, length: r.length, })), total: totals[0]?.total ?? 0, }; }, }, paramsPromise, searchParams, ); const t = await getTranslations("pages.admin.items"); const canEdit = canAccess( result.permissions, PERMS.CATALOG_EDIT, result.rank, ); return (

{t("total", { count: result.total })}

); }