43 lines
1.2 KiB
TypeScript
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",
|
|
);
|