Files
klz-cables.com/.pnpm-store/v10/files/35/9a43724b195a3c235275b1a069231660fb4ac15dbab402c3d85611426ef03d986592bc2adc800f547b5a541ec7aec98d51915780ca161c501d4c5417306450
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

121 lines
4.1 KiB
Plaintext

import { deepMergeSimple } from '@payloadcms/translations/utilities';
import { getSelectMode } from './getSelectMode.js';
// Transform post.title -> post, post.category.title -> post
const stripVirtualPathToCurrentCollection = ({ fields, path, versions })=>{
const resultSegments = [];
if (versions) {
resultSegments.push('version');
const versionField = fields.find((each)=>each.name === 'version');
if (versionField && versionField.type === 'group') {
fields = versionField.flattenedFields;
}
}
for (const segment of path.split('.')){
const field = fields.find((each)=>each.name === segment);
if (!field) {
continue;
}
resultSegments.push(segment);
if (field.type === 'relationship' || field.type === 'upload') {
return resultSegments.join('.');
}
}
return resultSegments.join('.');
};
const getAllVirtualRelations = ({ fields })=>{
const result = [];
for (const field of fields){
if ('virtual' in field && typeof field.virtual === 'string') {
result.push(field.virtual);
} else if (field.type === 'group' || field.type === 'tab') {
const nestedResult = getAllVirtualRelations({
fields: field.flattenedFields
});
for (const nestedItem of nestedResult){
result.push(nestedItem);
}
}
}
return result;
};
const resolveVirtualRelationsToSelect = ({ fields, selectValue, topLevelFields, versions })=>{
const result = [];
if (selectValue === true) {
for (const item of getAllVirtualRelations({
fields
})){
result.push(stripVirtualPathToCurrentCollection({
fields: topLevelFields,
path: item,
versions
}));
}
} else {
for(const fieldName in selectValue){
const field = fields.find((each)=>each.name === fieldName);
if (!field) {
continue;
}
if ('virtual' in field && typeof field.virtual === 'string') {
result.push(stripVirtualPathToCurrentCollection({
fields: topLevelFields,
path: field.virtual,
versions
}));
} else if (field.type === 'group' || field.type === 'tab') {
for (const item of resolveVirtualRelationsToSelect({
fields: field.flattenedFields,
selectValue: selectValue[fieldName],
topLevelFields,
versions
})){
result.push(stripVirtualPathToCurrentCollection({
fields: topLevelFields,
path: item,
versions
}));
}
}
}
}
return result;
};
export const sanitizeSelect = ({ fields, forceSelect, select, versions })=>{
if (!select) {
return select;
}
const selectMode = getSelectMode(select);
if (selectMode === 'exclude') {
return select;
}
if (forceSelect) {
select = deepMergeSimple(select, forceSelect);
}
if (select) {
const virtualRelations = resolveVirtualRelationsToSelect({
fields,
selectValue: select,
topLevelFields: fields,
versions: versions ?? false
});
for (const path of virtualRelations){
let currentRef = select;
const segments = path.split('.');
for(let i = 0; i < segments.length; i++){
const isLast = segments.length - 1 === i;
const segment = segments[i];
if (isLast) {
currentRef[segment] = true;
} else {
if (!(segment in currentRef)) {
currentRef[segment] = {};
currentRef = currentRef[segment];
}
}
}
}
}
return select;
};
//# sourceMappingURL=sanitizeSelect.js.map