Add commission type example image

This commit is contained in:
2026-01-31 16:37:35 +01:00
parent c712f31759
commit 3e6d045cbd
2 changed files with 50 additions and 10 deletions

View File

@ -399,6 +399,7 @@ model CommissionGuidelines {
updatedAt DateTime @updatedAt updatedAt DateTime @updatedAt
markdown String markdown String
exampleImageUrl String?
isActive Boolean @default(true) isActive Boolean @default(true)
@@index([isActive]) @@index([isActive])

View File

@ -1,21 +1,60 @@
import { CommissionCard } from "@/components/commissions/CommissionCard"; import { CommissionCard } from "@/components/commissions/CommissionCard";
import CommissionGuidelines from "@/components/commissions/CommissionGuidelines"; import CommissionGuidelines from "@/components/commissions/CommissionGuidelines";
import { CommissionOrderForm } from "@/components/commissions/CommissionOrderForm"; import { CommissionOrderForm } from "@/components/commissions/CommissionOrderForm";
import { Button } from "@/components/ui/button";
import {
Dialog,
DialogContent,
DialogHeader,
DialogTitle,
DialogTrigger,
} from "@/components/ui/dialog";
import { prisma } from "@/lib/prisma"; import { prisma } from "@/lib/prisma";
import Image from "next/image";
export default async function CommissionsPage() { export default async function CommissionsPage() {
const commissions = await prisma.commissionType.findMany({ const [commissions, guidelines] = await Promise.all([
prisma.commissionType.findMany({
include: { include: {
options: { include: { option: true }, orderBy: { sortIndex: "asc" } }, options: { include: { option: true }, orderBy: { sortIndex: "asc" } },
extras: { include: { extra: true }, orderBy: { sortIndex: "asc" } }, extras: { include: { extra: true }, orderBy: { sortIndex: "asc" } },
customInputs: { include: { customInput: true }, orderBy: { sortIndex: "asc" } }, customInputs: { include: { customInput: true }, orderBy: { sortIndex: "asc" } },
}, },
orderBy: [{ sortIndex: "asc" }, { name: "asc" }], orderBy: [{ sortIndex: "asc" }, { name: "asc" }],
}) }),
prisma.commissionGuidelines.findFirst({
where: { isActive: true },
orderBy: { createdAt: "desc" },
select: { exampleImageUrl: true },
}),
]);
return ( return (
<div className="mx-auto w-full max-w-6xl px-4 py-8 flex flex-col gap-8"> <div className="mx-auto w-full max-w-6xl px-4 py-8 flex flex-col gap-8">
<div className="flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between">
<h1 className="text-3xl font-bold">Commission Pricing</h1> <h1 className="text-3xl font-bold">Commission Pricing</h1>
{guidelines?.exampleImageUrl ? (
<Dialog>
<DialogTrigger asChild>
<Button variant="secondary">View example</Button>
</DialogTrigger>
<DialogContent className="w-[min(95vw,1200px)] max-w-300 p-4 sm:p-6">
<DialogHeader>
<DialogTitle></DialogTitle>
</DialogHeader>
<div className="relative w-full h-[80vh] max-h-[80vh] overflow-hidden rounded-xl border-2 border-border/60 bg-muted shadow-2xl">
<Image
src={guidelines.exampleImageUrl}
alt="Commission example"
fill
sizes="(max-width: 640px) 95vw, 1200px"
className="object-contain"
/>
</div>
</DialogContent>
</Dialog>
) : null}
</div>
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 items-start"> <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 items-start">
{commissions.map((commission) => ( {commissions.map((commission) => (
<CommissionCard key={commission.id} commission={commission} /> <CommissionCard key={commission.id} commission={commission} />