Files
klz-cables.com/.pnpm-store/v10/files/3f/284cb2b84f45f175d2756cdacdb101117c566c554e5fe4e1ce7090b70d08d687b96ac748c9311d36eeca3f033edc1c2e2403b5f02dd0f200140aa0a27342ad
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

207 lines
5.2 KiB
Plaintext

import { getBlockSelect, getDefaultValue, stripUnselectedFields } from 'payload';
import { fieldAffectsData, tabHasName } from 'payload/shared';
import { iterateFields } from './iterateFields.js';
// TODO: Make this works for rich text subfields
export const defaultValuePromise = async ({
id,
data,
field,
locale,
req,
select,
selectMode,
siblingData,
user
}) => {
const shouldContinue = stripUnselectedFields({
field,
select,
selectMode,
siblingDoc: siblingData
});
if (!shouldContinue) {
return;
}
if (fieldAffectsData(field)) {
if (typeof siblingData[field.name] === 'undefined' && typeof field.defaultValue !== 'undefined') {
try {
siblingData[field.name] = await getDefaultValue({
defaultValue: field.defaultValue,
locale,
req,
user,
value: siblingData[field.name]
});
} catch (err) {
req.payload.logger.error({
err,
msg: `Error calculating default value for field: ${field.name}`
});
}
}
}
// Traverse subfields
switch (field.type) {
case 'array':
{
const rows = siblingData[field.name];
if (Array.isArray(rows)) {
const promises = [];
const arraySelect = select?.[field.name];
rows.forEach(row => {
promises.push(iterateFields({
id,
data,
fields: field.fields,
locale,
req,
select: typeof arraySelect === 'object' ? arraySelect : undefined,
selectMode,
siblingData: row,
user
}));
});
await Promise.all(promises);
}
break;
}
case 'blocks':
{
const rows = siblingData[field.name];
if (Array.isArray(rows)) {
const promises = [];
rows.forEach(row => {
const blockTypeToMatch = row.blockType;
const block = req.payload.blocks[blockTypeToMatch] ?? (field.blockReferences ?? field.blocks).find(blockType => typeof blockType !== 'string' && blockType.slug === blockTypeToMatch);
const {
blockSelect,
blockSelectMode
} = getBlockSelect({
block,
select: select?.[field.name],
selectMode
});
if (block) {
row.blockType = blockTypeToMatch;
promises.push(iterateFields({
id,
data,
fields: block.fields,
locale,
req,
select: typeof blockSelect === 'object' ? blockSelect : undefined,
selectMode: blockSelectMode,
siblingData: row,
user
}));
}
});
await Promise.all(promises);
}
break;
}
case 'collapsible':
case 'row':
{
await iterateFields({
id,
data,
fields: field.fields,
locale,
req,
select,
selectMode,
siblingData,
user
});
break;
}
case 'group':
{
if (fieldAffectsData(field)) {
if (typeof siblingData[field.name] !== 'object') {
siblingData[field.name] = {};
}
const groupData = siblingData[field.name];
const groupSelect = select?.[field.name];
await iterateFields({
id,
data,
fields: field.fields,
locale,
req,
select: typeof groupSelect === 'object' ? groupSelect : undefined,
selectMode,
siblingData: groupData,
user
});
} else {
await iterateFields({
id,
data,
fields: field.fields,
locale,
req,
select,
selectMode,
siblingData,
user
});
}
break;
}
case 'tab':
{
let tabSiblingData;
const isNamedTab = tabHasName(field);
let tabSelect;
if (isNamedTab) {
if (typeof siblingData[field.name] !== 'object') {
siblingData[field.name] = {};
}
tabSiblingData = siblingData[field.name];
if (typeof select?.[field.name] === 'object') {
tabSelect = select?.[field.name];
}
} else {
tabSiblingData = siblingData;
tabSelect = select;
}
await iterateFields({
id,
data,
fields: field.fields,
locale,
req,
select: tabSelect,
selectMode,
siblingData: tabSiblingData,
user
});
break;
}
case 'tabs':
{
await iterateFields({
id,
data,
fields: field.tabs.map(tab => ({
...tab,
type: 'tab'
})),
locale,
req,
select,
selectMode,
siblingData,
user
});
break;
}
default:
{
break;
}
}
};
//# sourceMappingURL=promise.js.map