@websolutespa/payload-plugin-bowl
Version:
Bowl PayloadCms plugin of the BOM Repository
126 lines (125 loc) • 4.58 kB
JavaScript
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