Files
mrp-qrcode/app/admin/projects/[id]/assemblies/[assemblyId]/page.tsx
T
jason bc3b78aa33
Build and Push Docker Image / build (push) Successful in 1m6s
fixes
2026-04-21 20:59:55 -05:00

73 lines
1.9 KiB
TypeScript

import { notFound } from "next/navigation";
import { prisma } from "@/lib/prisma";
import AssemblyDetailClient from "./AssemblyDetailClient";
export const dynamic = "force-dynamic";
export default async function AdminAssemblyDetailPage({
params,
}: {
params: Promise<{ id: string; assemblyId: string }>;
}) {
const { id, assemblyId } = await params;
const assembly = await prisma.assembly.findFirst({
where: { id: assemblyId, projectId: id },
include: {
project: { select: { id: true, code: true, name: true } },
stepFile: true,
drawingFile: true,
cutFile: true,
parts: {
orderBy: { code: "asc" },
include: {
_count: { select: { operations: true } },
stepFile: { select: { id: true } },
drawingFile: { select: { id: true } },
cutFile: { select: { id: true } },
thumbnailFile: { select: { id: true } },
},
},
},
});
if (!assembly) notFound();
const fileView = (f: typeof assembly.stepFile) =>
f
? {
id: f.id,
originalName: f.originalName,
sizeBytes: f.sizeBytes,
kind: f.kind,
mimeType: f.mimeType,
}
: null;
return (
<AssemblyDetailClient
project={assembly.project}
assembly={{
id: assembly.id,
code: assembly.code,
name: assembly.name,
qty: assembly.qty,
notes: assembly.notes,
stepFile: fileView(assembly.stepFile),
drawingFile: fileView(assembly.drawingFile),
cutFile: fileView(assembly.cutFile),
}}
parts={assembly.parts.map((p) => ({
id: p.id,
code: p.code,
name: p.name,
material: p.material,
qty: p.qty,
hasStep: !!p.stepFile,
hasDrawing: !!p.drawingFile,
hasCut: !!p.cutFile,
thumbnailFileId: p.thumbnailFile?.id ?? null,
operationCount: p._count.operations,
}))}
/>
);
}