@websolutespa/payload-plugin-bowl
Version:
Bowl PayloadCms plugin of the BOM Repository
90 lines (89 loc) • 2.94 kB
JavaScript
import { RedirectReason } from '@websolutespa/bom-core';
import { hasRole, isRole } from '../core';
import { roles } from '../types';
export const RedirectStatusOptions = Object.entries(RedirectReason).map(([k, v])=>({
value: v,
label: `${v} - ${k}`
}));
export const Redirect = (options)=>({
type: 'withCollection',
slug: options.slug.redirect,
admin: {
group: options.group.nav,
useAsTitle: 'from',
defaultColumns: [
'from',
'to',
'status',
'name',
'order',
'isActive'
],
components: {
afterList: [
'@websolutespa/payload-plugin-bowl/client#ImportExportRedirect'
]
},
hidden: (args)=>!hasRole(args.user, roles.Admin, roles.Contributor)
},
access: {
create: isRole(roles.Admin, roles.Contributor),
read: isRole(),
update: isRole(roles.Admin, roles.Contributor),
delete: isRole(roles.Admin, roles.Contributor)
},
fields: [
// inherited fields: id, createdAt, updatedAt
{
type: 'withSelect',
name: 'status',
required: true,
options: RedirectStatusOptions
},
{
type: 'text',
name: 'from',
required: true,
unique: true,
index: true
},
{
type: 'text',
name: 'to',
validate: (value, { siblingData })=>{
// console.log(value, siblingData);
if (!siblingData.status) {
return 'please select a status code';
}
if (!value && parseInt(siblingData.status) < 400) {
return 'a redirect path is required for status codes 300';
}
if (value && siblingData.from === value) {
return 'from and to values should differs';
}
return true;
},
admin: {
condition: (_, siblingData)=>siblingData.status && parseInt(siblingData.status) !== 410
}
},
{
type: 'text',
name: 'name'
},
{
type: 'withOrder',
slug: options.slug.redirect,
admin: {
position: 'sidebar'
}
},
{
type: 'withIsActive',
admin: {
position: 'sidebar'
}
}
]
});
//# sourceMappingURL=Redirect.js.map