Files
ipal-kit/dist/modules/hooks/preventDeleteSystemPage.js
T

37 lines
1.5 KiB
JavaScript

import { APIError } from 'payload';
/**
* Blocks deletion of a page assigned a System Page role (homepage,
* privacyPolicy, cookiePolicy, termsOfService). An editor deleting the privacy
* policy or homepage by accident would break routing and compliance links; this
* stops it with a clear error. They must unassign the role first (deliberate).
*
* Reads the role assignments from SiteSettings (which page holds which role).
*
* hooks: { beforeDelete: [buildPreventDeleteSystemPage({ settingsSlug: 'site-settings' })] }
*/ export function buildPreventDeleteSystemPage(args = {}) {
const settingsSlug = args.settingsSlug ?? 'site-settings';
const roleFields = args.roleFields ?? [
'homepage',
'privacyPolicy',
'cookiePolicy',
'termsOfService'
];
return async ({ id, req })=>{
const settings = await req.payload.findGlobal({
slug: settingsSlug,
depth: 0
}).catch(()=>null);
if (!settings) {
return;
}
for (const field of roleFields){
const assigned = settings[field];
const assignedId = assigned && typeof assigned === 'object' ? assigned.id : assigned;
if (assignedId != null && String(assignedId) === String(id)) {
throw new APIError(`Nie można usunąć strony przypisanej do roli systemowej "${field}". ` + `Najpierw odłącz rolę w Site Settings.`, 400);
}
}
};
}
//# sourceMappingURL=preventDeleteSystemPage.js.map