payload
Version:
Node, React, Headless CMS and Application Framework built on Next.js
86 lines (85 loc) • 2.56 kB
JavaScript
// @ts-strict-ignore
import { deleteHandler } from './requestHandlers/delete.js';
import { findByIDHandler } from './requestHandlers/findOne.js';
import { updateHandler } from './requestHandlers/update.js';
const preferenceAccess = ({ req })=>{
if (!req.user) {
return false;
}
return {
'user.value': {
equals: req?.user?.id
}
};
};
export const preferencesCollectionSlug = 'payload-preferences';
export const getPreferencesCollection = (config)=>({
slug: preferencesCollectionSlug,
access: {
delete: preferenceAccess,
read: preferenceAccess
},
admin: {
hidden: true
},
endpoints: [
{
handler: findByIDHandler,
method: 'get',
path: '/:key'
},
{
handler: deleteHandler,
method: 'delete',
path: '/:key'
},
{
handler: updateHandler,
method: 'post',
path: '/:key'
}
],
fields: [
{
name: 'user',
type: 'relationship',
hooks: {
beforeValidate: [
({ req })=>{
if (!req?.user) {
return null;
}
return {
relationTo: req?.user.collection,
value: req?.user.id
};
}
]
},
index: true,
relationTo: config.collections.filter((collectionConfig)=>collectionConfig.auth).map((collectionConfig)=>collectionConfig.slug),
required: true
},
{
name: 'key',
type: 'text',
index: true
},
{
name: 'value',
type: 'json',
validate: (value)=>{
if (value) {
try {
JSON.parse(JSON.stringify(value));
} catch {
return 'Invalid JSON';
}
}
return true;
}
}
],
lockDocuments: false
});
//# sourceMappingURL=config.js.map