UNPKG

@payloadcms/plugin-import-export

Version:

Import-Export plugin for Payload

76 lines (75 loc) 3.92 kB
import { traverseFields } from 'payload'; export const getCustomFieldFunctions = ({ fields })=>{ const result = {}; const buildCustomFunctions = ({ field, parentRef, ref })=>{ // @ts-expect-error ref is untyped ref.prefix = parentRef.prefix || ''; if (field.type === 'group' || field.type === 'tab') { // @ts-expect-error ref is untyped const parentPrefix = parentRef?.prefix ? `${parentRef.prefix}_` : ''; // @ts-expect-error ref is untyped ref.prefix = `${parentPrefix}${field.name}_`; } if (typeof field.custom?.['plugin-import-export']?.toCSV === 'function') { // @ts-expect-error ref is untyped result[`${ref.prefix}${field.name}`] = field.custom['plugin-import-export']?.toCSV; } else if (field.type === 'relationship' || field.type === 'upload') { if (field.hasMany !== true) { if (!Array.isArray(field.relationTo)) { // monomorphic single // @ts-expect-error ref is untyped result[`${ref.prefix}${field.name}`] = ({ value })=>typeof value === 'object' && value && 'id' in value ? value.id : value; } else { // polymorphic single // @ts-expect-error ref is untyped result[`${ref.prefix}${field.name}`] = ({ data, value })=>{ if (value && typeof value === 'object' && 'relationTo' in value && 'value' in value) { const relationTo = value.relationTo; const relatedDoc = value.value; if (relatedDoc && typeof relatedDoc === 'object') { // @ts-expect-error ref is untyped data[`${ref.prefix}${field.name}_id`] = relatedDoc.id; // @ts-expect-error ref is untyped data[`${ref.prefix}${field.name}_relationTo`] = relationTo; } } return undefined // prevents further flattening ; }; } } else { if (!Array.isArray(field.relationTo)) { // monomorphic many // @ts-expect-error ref is untyped result[`${ref.prefix}${field.name}`] = ({ value })=>value.map((val)=>typeof val === 'object' ? val.id : val); } else { // polymorphic many // @ts-expect-error ref is untyped result[`${ref.prefix}${field.name}`] = ({ data, value })=>{ if (Array.isArray(value)) { value.forEach((val, i)=>{ if (val && typeof val === 'object') { const relationTo = val.relationTo; const relatedDoc = val.value; if (relationTo && relatedDoc && typeof relatedDoc === 'object') { // @ts-expect-error ref is untyped data[`${ref.prefix}${field.name}_${i}_id`] = relatedDoc.id; // @ts-expect-error ref is untyped data[`${ref.prefix}${field.name}_${i}_relationTo`] = relationTo; } } }); } return undefined; }; } } } }; traverseFields({ callback: buildCustomFunctions, fields }); return result; }; //# sourceMappingURL=getCustomFieldFunctions.js.map