UNPKG

payloadcms-import-export-plugin

Version:

A comprehensive Payload CMS plugin that enables seamless import and export of collection data with support for CSV and JSON formats, featuring advanced field mapping, duplicate handling, and batch processing capabilities.

71 lines (70 loc) 2.85 kB
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; if (!('name' in field) || typeof field.name !== 'string' || fieldHasToCSVFunction) { return; } const name = prefix ? `${prefix}_${field.name}` : field.name; switch(field.type){ case 'array': { const subKeys = getFlattenedFieldKeys(field.fields, `${name}_0`); keys.push(...subKeys); break; } case 'blocks': field.blocks.forEach((block)=>{ const blockKeys = getFlattenedFieldKeys(block.fields, `${name}_0`); keys.push(...blockKeys); }); break; case 'collapsible': case 'group': case 'row': keys.push(...getFlattenedFieldKeys(field.fields, name)); break; case 'relationship': if (field.hasMany) { if (Array.isArray(field.relationTo)) { // hasMany polymorphic keys.push(`${name}_0_relationTo`, `${name}_0_id`); } else { // hasMany monomorphic keys.push(`${name}_0`); } } else { if (Array.isArray(field.relationTo)) { // hasOne polymorphic keys.push(`${name}_relationTo`, `${name}_id`); } else { // hasOne monomorphic keys.push(name); } } break; case 'tabs': if (field.tabs) { field.tabs.forEach((tab)=>{ if (tab.name) { const tabPrefix = prefix ? `${prefix}_${tab.name}` : tab.name; keys.push(...getFlattenedFieldKeys(tab.fields, tabPrefix)); } else { keys.push(...getFlattenedFieldKeys(tab.fields, prefix)); } }); } break; default: if ('hasMany' in field && field.hasMany) { // Push placeholder for first index keys.push(`${name}_0`); } else { keys.push(name); } break; } }); return keys; }; //# sourceMappingURL=getFlattenedFieldKeys.js.map