Files
klz-cables.com/.pnpm-store/v10/files/5f/9c737bbe0e645441054ae7912bba3b2a8e2cd49c9f54bc226e2f8831777f18fb7c6519d97820a31926e4ed29055e4d2f7b3140d034d6a9a8b705836ec7f470
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

67 lines
2.5 KiB
Plaintext

import { fieldAffectsData, fieldIsPresentationalOnly, fieldShouldBeLocalized, flattenTopLevelFields } from 'payload/shared';
export const generateLabelFromValue = async ({
field,
locale,
parentIsLocalized,
req,
value
}) => {
let relatedDoc;
let relationTo = field.relationTo;
let valueToReturn = '';
if (typeof value === 'object' && 'relationTo' in value) {
relatedDoc = value.value;
relationTo = value.relationTo;
} else {
// Non-polymorphic relationship or deleted document
relatedDoc = value;
}
const relatedCollection = req.payload.collections[relationTo].config;
const useAsTitle = relatedCollection?.admin?.useAsTitle;
const flattenedRelatedCollectionFields = flattenTopLevelFields(relatedCollection.fields, {
moveSubFieldsToTop: true
});
const useAsTitleField = flattenedRelatedCollectionFields.find(f => fieldAffectsData(f) && !fieldIsPresentationalOnly(f) && f.name === useAsTitle);
let titleFieldIsLocalized = false;
if (useAsTitleField && fieldAffectsData(useAsTitleField)) {
titleFieldIsLocalized = fieldShouldBeLocalized({
field: useAsTitleField,
parentIsLocalized
});
}
if (typeof relatedDoc?.[useAsTitle] !== 'undefined') {
valueToReturn = relatedDoc[useAsTitle];
} else if (typeof relatedDoc === 'string' || typeof relatedDoc === 'number') {
// When relatedDoc is just an ID (due to maxDepth: 0), fetch the document to get the title
try {
const fetchedDoc = await req.payload.findByID({
id: relatedDoc,
collection: relationTo,
depth: 0,
locale: titleFieldIsLocalized ? locale : undefined,
req,
select: {
[useAsTitle]: true
}
});
if (fetchedDoc?.[useAsTitle]) {
valueToReturn = fetchedDoc[useAsTitle];
} else {
valueToReturn = `${req.i18n.t('general:untitled')} - ID: ${relatedDoc}`;
}
} catch (error) {
// Document might have been deleted or user doesn't have access
valueToReturn = `${req.i18n.t('general:untitled')} - ID: ${relatedDoc}`;
}
} else {
valueToReturn = String(typeof relatedDoc === 'object' ? relatedDoc.id : relatedDoc);
}
if (typeof valueToReturn === 'object' && valueToReturn && titleFieldIsLocalized && valueToReturn?.[locale]) {
valueToReturn = valueToReturn[locale];
}
if (valueToReturn && typeof valueToReturn === 'object' && valueToReturn !== null || typeof valueToReturn !== 'string') {
valueToReturn = JSON.stringify(valueToReturn);
}
return valueToReturn;
};
//# sourceMappingURL=generateLabelFromValue.js.map