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
67 lines
2.5 KiB
Plaintext
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 |