Files
klz-cables.com/.pnpm-store/v10/files/0b/fd7bdd37f59ef5808dec15722923d61c6fb4604d27c3ed9522d57b836d152a7f34094a5a0c159ca80f3af6192b88fc8bb18a5b251d9b18dd42f4e2b573c58f
Marc Mintel 5397309103
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Failing after 34s
Build & Deploy / 🏗️ Build (push) Has started running
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Smoke Test (push) Has been cancelled
Build & Deploy / ⚡ Lighthouse (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
fix(products): fix breadcrumbs and product filtering (backport from main)
2026-02-24 16:04:21 +01:00

56 lines
2.1 KiB
Plaintext

import { fieldAffectsData, fieldIsHiddenOrDisabled, fieldIsID } from 'payload/shared';
const shouldSkipField = field => field.type !== 'ui' && fieldIsHiddenOrDisabled(field) && !fieldIsID(field) || field?.admin?.disableListColumn === true;
export const filterFieldsWithPermissions = ({
fieldPermissions,
fields
}) => {
return (fields ?? []).reduce((acc, field) => {
if (shouldSkipField(field)) {
return acc;
}
// handle tabs
if (field.type === 'tabs' && 'tabs' in field) {
const formattedField = {
...field,
tabs: field.tabs.map(tab => ({
...tab,
fields: filterFieldsWithPermissions({
fieldPermissions: typeof fieldPermissions === 'boolean' ? fieldPermissions : 'name' in tab && tab.name ? fieldPermissions[tab.name]?.fields || fieldPermissions[tab.name] : fieldPermissions,
fields: tab.fields
})
}))
};
acc.push(formattedField);
return acc;
}
// handle fields with subfields (row, group, collapsible, etc.)
if ('fields' in field && Array.isArray(field.fields)) {
const formattedField = {
...field,
fields: filterFieldsWithPermissions({
fieldPermissions: typeof fieldPermissions === 'boolean' ? fieldPermissions : 'name' in field && field.name ? fieldPermissions?.[field.name]?.fields || fieldPermissions?.[field.name] : fieldPermissions,
fields: field.fields
})
};
acc.push(formattedField);
return acc;
}
if (fieldPermissions === true) {
acc.push(field);
return acc;
}
if (fieldAffectsData(field)) {
const fieldPermission = fieldPermissions?.[field.name];
// Always allow ID fields, or if explicitly granted (true or { read: true })
// undefined means field is not in permissions object = denied
if (fieldIsID(field) || fieldPermission === true || fieldPermission?.read === true) {
acc.push(field);
}
return acc;
}
// leaf
acc.push(field);
return acc;
}, []);
};
//# sourceMappingURL=filterFieldsWithPermissions.js.map