import { Field } from '../fields/config/types'; import { Config } from '../config/types'; import { CollectionConfig } from '../collections/config/types'; import { mimeTypeValidator } from './mimeTypeValidator'; import { IncomingUploadType } from './types'; type Options = { config: Config collection: CollectionConfig } const getBaseUploadFields = ({ config, collection }: Options): Field[] => { const uploadOptions: IncomingUploadType = typeof collection.upload === 'object' ? collection.upload : {}; const mimeType: Field = { name: 'mimeType', label: 'MIME Type', type: 'text', admin: { readOnly: true, disabled: true, }, }; const url: Field = { name: 'url', label: 'URL', type: 'text', admin: { readOnly: true, disabled: true, }, }; const width: Field = { name: 'width', label: 'Width', type: 'number', admin: { readOnly: true, disabled: true, }, }; const height: Field = { name: 'height', label: 'Height', type: 'number', admin: { readOnly: true, disabled: true, }, }; const filesize: Field = { name: 'filesize', label: 'File Size', type: 'number', admin: { readOnly: true, disabled: true, }, }; const filename: Field = { name: 'filename', label: 'File Name', type: 'text', index: true, unique: true, admin: { readOnly: true, disabled: true, }, }; let uploadFields: Field[] = [ { ...url, hooks: { afterRead: [ ({ data }) => { if (data?.filename) { return `${config.serverURL}${uploadOptions.staticURL}/${data.filename}`; } return undefined; }, ], }, }, filename, mimeType, filesize, ]; if (uploadOptions.mimeTypes) { mimeType.validate = mimeTypeValidator(uploadOptions.mimeTypes); } if (uploadOptions.imageSizes) { uploadFields = uploadFields.concat([ width, height, { name: 'sizes', label: 'Sizes', type: 'group', admin: { disabled: true, }, fields: uploadOptions.imageSizes.map((size) => ({ label: size.name, name: size.name, type: 'group', admin: { disabled: true, }, fields: [ { ...url, hooks: { afterRead: [ ({ data }) => { const sizeFilename = data?.sizes?.[size.name]?.filename; if (sizeFilename) { return `${config.serverURL}${uploadOptions.staticURL}/${sizeFilename}`; } return undefined; }, ], }, }, width, height, mimeType, filesize, filename, ], })), }, ]); } return uploadFields; }; export default getBaseUploadFields;