Files
anouma/collections/EventRegistrations.ts
T

83 lines
2.3 KiB
TypeScript

import type { CollectionConfig } from "payload";
import { isAdmin } from "@/access";
export const EventRegistrations: CollectionConfig = {
slug: "event-registrations",
labels: {
singular: "Anmeldung",
plural: "Anmeldungen",
},
admin: {
useAsTitle: "name",
defaultColumns: ["name", "email", "event", "status", "registeredAt"],
group: "Inhalte",
description: "Anmeldungen zu Terminen - wird beim öffentlichen Anmeldeformular befüllt.",
},
access: {
// Public registrations must go through /api/meetings/[slug]/register,
// which verifies publication/registrationRequired, normalizes the email,
// and enforces the capacity check. The Local API used by that route
// intentionally overrides this access rule after those checks.
create: () => false,
read: isAdmin,
update: isAdmin,
delete: isAdmin,
},
fields: [
{
name: "event",
type: "relationship",
relationTo: "events",
label: "Termin",
required: true,
index: true,
},
{
type: "row",
fields: [
{ name: "name", type: "text", label: "Name", required: true, admin: { width: "50%" } },
{ name: "email", type: "email", label: "E-Mail", required: true, admin: { width: "50%" } },
],
},
{
name: "status",
type: "select",
label: "Status",
required: true,
defaultValue: "registered",
options: [
{ label: "Angemeldet", value: "registered" },
{ label: "Storniert", value: "cancelled" },
{ label: "Teilgenommen", value: "attended" },
],
},
{
name: "registeredAt",
type: "date",
label: "Registriert am",
defaultValue: () => new Date().toISOString(),
admin: { position: "sidebar", date: { pickerAppearance: "dayAndTime" } },
},
{
type: "row",
admin: { position: "sidebar" },
fields: [
{
name: "reminder60Sent",
type: "checkbox",
label: "Erinnerung 60 Min. gesendet",
defaultValue: false,
admin: { width: "50%" },
},
{
name: "reminder30Sent",
type: "checkbox",
label: "Erinnerung 30 Min. gesendet",
defaultValue: false,
admin: { width: "50%" },
},
],
},
],
};