UNPKG

@websolutespa/payload-plugin-bowl

Version:

Bowl PayloadCms plugin of the BOM Repository

126 lines (125 loc) 4.58 kB
import { isObject } from '@websolutespa/bom-core'; import { deepMerge, withCollectionHook } from '@websolutespa/payload-utils'; import { options } from '../../options'; import { roles } from '../../types'; import { isPageRole, isRole } from '../access'; import { beforeOperationHook } from '../api/collection.service'; import { afterPageChangeHook, afterPageDeleteHook, afterPageOperationHook, afterPageReadHook, pageDetailGet, pageIndexGet } from '../api/page.service'; import { withCategoryRequired, withIsDefault, withMarkets, withMedia, withSlug, withTemplate, withTitleRequired } from '../fields'; import { withOrder } from '../fields/withOrder'; import { translateCollection } from '../translations'; import { getPreviewURL, mergeFields } from '../utils'; export const PageDefault = { access: { create: isRole(roles.Admin, roles.Contributor, roles.Editor), read: isRole(roles.Admin, roles.Contributor, roles.Editor, roles.Guest, roles.User), // readVersions: isRole(roles.Admin, roles.Contributor, roles.Editor, roles.Guest, roles.User), update: isRole(roles.Admin, roles.Contributor, roles.Editor), delete: isRole(roles.Admin, roles.Contributor, roles.Editor) }, admin: { group: options.group.content, useAsTitle: 'title', defaultColumns: [ 'title', 'slug', 'template', 'createdAt', '_status' ], preview: (doc, { locale, req, token })=>{ return getPreviewURL(doc, locale, token || undefined); } }, /* // !!! hook removed on v3 hooks: { beforeDuplicate: beforeDuplicateCollectionHook, }, */ // defaultSort: 'order', versions: { drafts: true } }; /** * * @param {CollectionConfig} config * @returns {CollectionConfig} Return a `CollectionConfig` with inherited fields: `id`, `title`, `slug`, `category`, `markets`, `template`, `meta`, `status`, `createdAt`, `updatedAt`. */ export const withPage = (config)=>{ const pageConfig = deepMerge(PageDefault, config); if (!config.access?.read && isObject(pageConfig.versions) && pageConfig.versions.drafts) { pageConfig.access = pageConfig.access || {}; pageConfig.access.read = isPageRole(roles.Admin, roles.Contributor, roles.Editor, roles.Guest, roles.User); } const defaultFields = [ withTitleRequired(), // sidebar withSlug({ fieldToUse: 'title', admin: { position: 'sidebar', condition: (data, siblingData)=>{ return siblingData.isDefault !== true; } } }), withIsDefault({ admin: { position: 'sidebar', description: (data)=>{ if (data.value) { return 'Default documents inherit their slug from the parent category.'; } else { return ''; } } } }), { name: 'useSplat', type: 'checkbox', defaultValue: false, admin: { position: 'sidebar' } }, withCategoryRequired({ admin: { position: 'sidebar' } }), withTemplate({ slugToUse: config.slug, admin: { position: 'sidebar' } }), withOrder({ slug: config.slug, admin: { position: 'sidebar' } }), withMarkets({ admin: { position: 'sidebar' } }), withMedia() ]; pageConfig.fields = mergeFields(defaultFields, config.fields); pageConfig.endpoints = [ ...pageConfig.endpoints || [], pageIndexGet(pageConfig.slug), pageDetailGet(pageConfig.slug) ]; withCollectionHook(pageConfig, 'beforeOperation', beforeOperationHook); // withCollectionHook(pageConfig, 'beforeValidate', beforeValidateHook); withCollectionHook(pageConfig, 'afterChange', afterPageChangeHook); withCollectionHook(pageConfig, 'afterDelete', afterPageDeleteHook); withCollectionHook(pageConfig, 'afterOperation', afterPageOperationHook(pageConfig)); withCollectionHook(pageConfig, 'afterRead', afterPageReadHook(pageConfig)); translateCollection(pageConfig); return pageConfig; }; //# sourceMappingURL=withPage.js.map