chore: builds fieldSchemaToJSON utility
This commit is contained in:
80
packages/payload/src/utilities/fieldSchemaToJSON.ts
Normal file
80
packages/payload/src/utilities/fieldSchemaToJSON.ts
Normal file
@@ -0,0 +1,80 @@
|
||||
import type { Field } from '../fields/config/types'
|
||||
|
||||
export const fieldSchemaToJSON = (fields: Field[]): Record<string, unknown>[] => {
|
||||
return fields.reduce((acc, field) => {
|
||||
let result = acc
|
||||
|
||||
switch (field.type) {
|
||||
case 'group':
|
||||
case 'array':
|
||||
acc.push({
|
||||
name: field.name,
|
||||
fields: fieldSchemaToJSON(field.fields),
|
||||
type: field.type,
|
||||
})
|
||||
break
|
||||
|
||||
case 'blocks':
|
||||
acc.push({
|
||||
name: field.name,
|
||||
blocks: field.blocks.reduce((acc, block) => {
|
||||
acc[block.slug] = {
|
||||
fields: fieldSchemaToJSON(block.fields),
|
||||
}
|
||||
|
||||
return acc
|
||||
}, {}),
|
||||
type: field.type,
|
||||
})
|
||||
break
|
||||
|
||||
case 'row':
|
||||
case 'collapsible':
|
||||
result = result.concat(fieldSchemaToJSON(field.fields))
|
||||
|
||||
break
|
||||
|
||||
case 'tabs': {
|
||||
let tabFields = []
|
||||
|
||||
field.tabs.forEach((tab) => {
|
||||
if ('name' in tab) {
|
||||
tabFields.push({
|
||||
name: tab.name,
|
||||
fields: fieldSchemaToJSON(tab.fields),
|
||||
type: 'tab',
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
tabFields = tabFields.concat(fieldSchemaToJSON(tab.fields))
|
||||
})
|
||||
|
||||
result = result.concat(tabFields)
|
||||
|
||||
break
|
||||
}
|
||||
|
||||
case 'relationship':
|
||||
case 'upload':
|
||||
acc.push({
|
||||
name: field.name,
|
||||
hasMany: 'hasMany' in field ? Boolean(field.hasMany) : false, // TODO: type this
|
||||
relationTo: field.relationTo,
|
||||
type: field.type,
|
||||
})
|
||||
|
||||
break
|
||||
|
||||
default:
|
||||
if ('name' in field) {
|
||||
acc.push({
|
||||
name: field.name,
|
||||
type: field.type,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
return result
|
||||
}, [])
|
||||
}
|
||||
Reference in New Issue
Block a user