import type { CollectionConfig } from "payload"; /** * Factory for an upload-enabled media collection. We keep separate media * collections per R2 bucket (conferences vs activities) because a single * collection can only be bound to one bucket by the S3 storage plugin. */ export function makeMediaCollection( slug: string, labelSingular: string, labelPlural: string, ): CollectionConfig { return { slug, labels: { singular: labelSingular, plural: labelPlural }, access: { read: () => true, }, fields: [ { name: "alt", type: "text", localized: true }, { name: "caption", type: "text", localized: true }, ], upload: true, }; } /** General-purpose media (Pages/Posts, etc.). Default storage. */ export const Media = makeMediaCollection("media", "Media", "Media"); /** Conference thumbnails/files → the conferences R2 bucket. */ export const ConferenceMedia = makeMediaCollection( "conferenceMedia", "Conference media", "Conference media", ); /** Activity thumbnails/files → the activities R2 bucket. */ export const ActivityMedia = makeMediaCollection( "activityMedia", "Activity media", "Activity media", );