Added protecting hooks
This commit is contained in:
+31
@@ -0,0 +1,31 @@
|
||||
import { APIError } from 'payload';
|
||||
/**
|
||||
* Field hook for a System Page role relationship in SiteSettings: ensures a page
|
||||
* isn't assigned to two roles at once (e.g. the same page as both homepage and
|
||||
* privacyPolicy), which would make routing ambiguous.
|
||||
*
|
||||
* Attach to each role field's beforeValidate. `siblingFields` are the OTHER role
|
||||
* field names to check against.
|
||||
*
|
||||
* hooks: { beforeValidate: [buildValidateUniqueRole({
|
||||
* siblingFields: ['privacyPolicy', 'cookiePolicy', 'termsOfService'],
|
||||
* })] }
|
||||
*/ export function buildValidateUniqueRole(args) {
|
||||
return ({ field, siblingData, value })=>{
|
||||
if (value == null) {
|
||||
return value;
|
||||
}
|
||||
const thisId = typeof value === 'object' ? value.id : value;
|
||||
for (const sibling of args.siblingFields){
|
||||
const other = siblingData?.[sibling];
|
||||
const otherId = other && typeof other === 'object' ? other.id : other;
|
||||
if (otherId != null && String(otherId) === String(thisId)) {
|
||||
const name = typeof field === 'object' && 'name' in field ? field.name : 'ta rola';
|
||||
throw new APIError(`Ta sama strona jest przypisana do "${name}" i "${sibling}". ` + `Każda rola systemowa musi wskazywać inną stronę.`, 400);
|
||||
}
|
||||
}
|
||||
return value;
|
||||
};
|
||||
}
|
||||
|
||||
//# sourceMappingURL=validateUniqueRole.js.map
|
||||
Reference in New Issue
Block a user