@payloadcms/plugin-import-export
Version:
Import-Export plugin for Payload
70 lines (69 loc) • 2.91 kB
JavaScript
export const getFlattenedFieldKeys = (fields, prefix = '')=>{
const keys = [];
fields.forEach((field)=>{
const fieldHasToCSVFunction = 'custom' in field && typeof field.custom === 'object' && 'plugin-import-export' in field.custom && field.custom['plugin-import-export']?.toCSV;
const name = 'name' in field && typeof field.name === 'string' ? field.name : undefined;
const fullKey = name && prefix ? `${prefix}_${name}` : name ?? prefix;
switch(field.type){
case 'array':
{
const subKeys = getFlattenedFieldKeys(field.fields, `${fullKey}_0`);
keys.push(...subKeys);
break;
}
case 'blocks':
{
field.blocks.forEach((block)=>{
const blockPrefix = `${fullKey}_0_${block.slug}`;
keys.push(`${blockPrefix}_blockType`);
keys.push(`${blockPrefix}_id`);
keys.push(...getFlattenedFieldKeys(block.fields, blockPrefix));
});
break;
}
case 'collapsible':
case 'group':
case 'row':
keys.push(...getFlattenedFieldKeys(field.fields, fullKey));
break;
case 'relationship':
if (field.hasMany) {
if (Array.isArray(field.relationTo)) {
// hasMany polymorphic
keys.push(`${fullKey}_0_relationTo`, `${fullKey}_0_id`);
} else {
// hasMany monomorphic
keys.push(`${fullKey}_0_id`);
}
} else {
if (Array.isArray(field.relationTo)) {
// hasOne polymorphic
keys.push(`${fullKey}_relationTo`, `${fullKey}_id`);
} else {
// hasOne monomorphic
keys.push(fullKey);
}
}
break;
case 'tabs':
field.tabs?.forEach((tab)=>{
const tabPrefix = tab.name ? `${fullKey}_${tab.name}` : fullKey;
keys.push(...getFlattenedFieldKeys(tab.fields || [], tabPrefix));
});
break;
default:
if (!name || fieldHasToCSVFunction) {
break;
}
if ('hasMany' in field && field.hasMany) {
// Push placeholder for first index
keys.push(`${fullKey}_0`);
} else {
keys.push(fullKey);
}
break;
}
});
return keys;
};
//# sourceMappingURL=getFlattenedFieldKeys.js.map