31 lines
989 B
TypeScript
31 lines
989 B
TypeScript
import type { CollectionConfig } from 'payload';
|
|||
|
|
|
||
|
|
/**
|
||
|
|
* Uploads land on a Docker named volume mounted at /app/media. The path is
|
||
|
|
* absolute because Payload 3 requires it, and it must match the payload_media
|
||
|
|
* mount in docker-compose.portainer.yml exactly — a mismatch writes into the
|
||
|
|
* container's own filesystem, where the next redeploy silently discards it.
|
||
|
|
*/
|
||
|
|
export const Media: CollectionConfig = {
|
||
|
|
slug: 'media',
|
||
|
|
access: { read: () => true },
|
||
|
|
upload: {
|
||
|
|
staticDir: '/app/media',
|
||
|
|
mimeTypes: ['image/*'],
|
||
|
|
imageSizes: [
|
||
|
|
{ name: 'thumbnail', width: 400 },
|
||
|
|
{ name: 'hero', width: 1200 },
|
||
|
|
],
|
||
|
|
adminThumbnail: 'thumbnail',
|
||
|
|
},
|
||
|
|
fields: [
|
||
|
|
{
|
||
|
|
name: 'alt',
|
||
|
|
type: 'text',
|
||
|
|
required: true,
|
||
|
|
// Required rather than optional: a decorative-by-default image is an
|
||
|
|
// accessibility regression on a site parents use under time pressure.
|
||
|
|
admin: { description: 'Describe the image for screen readers.' },
|
||
|
|
},
|
||
|
|
],
|
||
|
|
};
|