UNPKG

payload

Version:

Node, React, Headless CMS and Application Framework built on Next.js

119 lines (118 loc) 3.81 kB
import { defaultAccess } from '../auth/defaultAccess.js'; import { buildFolderField } from './buildFolderField.js'; import { foldersSlug } from './constants.js'; import { deleteSubfoldersBeforeDelete } from './hooks/deleteSubfoldersAfterDelete.js'; import { dissasociateAfterDelete } from './hooks/dissasociateAfterDelete.js'; import { ensureSafeCollectionsChange } from './hooks/ensureSafeCollectionsChange.js'; import { reparentChildFolder } from './hooks/reparentChildFolder.js'; export const createFolderCollection = ({ slug, collectionSpecific, debug, folderEnabledCollections, folderFieldName })=>{ const { collectionOptions, collectionSlugs } = folderEnabledCollections.reduce((acc, collection)=>{ acc.collectionSlugs.push(collection.slug); acc.collectionOptions.push({ label: collection.labels?.plural || collection.slug, value: collection.slug }); return acc; }, { collectionOptions: [], collectionSlugs: [] }); return { slug, access: { create: defaultAccess, delete: defaultAccess, read: defaultAccess, readVersions: defaultAccess, update: defaultAccess }, admin: { hidden: !debug, useAsTitle: 'name' }, fields: [ { name: 'name', type: 'text', index: true, required: true }, buildFolderField({ collectionSpecific, folderFieldName, folderSlug: slug, overrides: { admin: { hidden: !debug } } }), { name: 'documentsAndFolders', type: 'join', admin: { hidden: !debug }, collection: [ slug, ...collectionSlugs ], hasMany: true, on: folderFieldName }, ...collectionSpecific ? [ { name: 'folderType', type: 'select', admin: { components: { Field: { clientProps: { options: collectionOptions }, path: '@payloadcms/ui#FolderTypeField' } }, position: 'sidebar' }, hasMany: true, options: collectionOptions } ] : [] ], hooks: { afterChange: [ reparentChildFolder({ folderFieldName }) ], afterDelete: [ dissasociateAfterDelete({ collectionSlugs, folderFieldName }) ], beforeDelete: [ deleteSubfoldersBeforeDelete({ folderFieldName, folderSlug: slug }) ], beforeValidate: [ ...collectionSpecific ? [ ensureSafeCollectionsChange({ foldersSlug }) ] : [] ] }, labels: { plural: 'Folders', singular: 'Folder' }, typescript: { interface: 'FolderInterface' } }; }; //# sourceMappingURL=createFolderCollection.js.map