carpa_turborepo/apps/cms/src/collections/Media.ts

43 lines
1.2 KiB
TypeScript

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",
);