chore: separates graphql package out for schema generation
This commit is contained in:
81
packages/graphql/src/schema/recursivelyBuildNestedPaths.ts
Normal file
81
packages/graphql/src/schema/recursivelyBuildNestedPaths.ts
Normal file
@@ -0,0 +1,81 @@
|
||||
import type { FieldWithSubFields, TabsField } from 'payload/types'
|
||||
|
||||
import { fieldAffectsData, fieldIsPresentationalOnly } from 'payload/types'
|
||||
import fieldToSchemaMap from './fieldToWhereInputSchemaMap'
|
||||
|
||||
type Args = {
|
||||
field: FieldWithSubFields | TabsField
|
||||
nestedFieldName2: string
|
||||
parentName: string
|
||||
}
|
||||
|
||||
const recursivelyBuildNestedPaths = ({ field, nestedFieldName2, parentName }: Args) => {
|
||||
const fieldName = fieldAffectsData(field) ? field.name : undefined
|
||||
const nestedFieldName = fieldName || nestedFieldName2
|
||||
|
||||
if (field.type === 'tabs') {
|
||||
// if the tab has a name, treat it as a group
|
||||
// otherwise, treat it as a row
|
||||
return field.tabs.reduce((tabSchema, tab: any) => {
|
||||
tabSchema.push(
|
||||
...recursivelyBuildNestedPaths({
|
||||
field: {
|
||||
...tab,
|
||||
type: 'name' in tab ? 'group' : 'row',
|
||||
},
|
||||
nestedFieldName2: nestedFieldName,
|
||||
parentName,
|
||||
}),
|
||||
)
|
||||
return tabSchema
|
||||
}, [])
|
||||
}
|
||||
|
||||
const nestedPaths = field.fields.reduce((nestedFields, nestedField) => {
|
||||
if (!fieldIsPresentationalOnly(nestedField)) {
|
||||
if (!fieldAffectsData(nestedField)) {
|
||||
return [
|
||||
...nestedFields,
|
||||
...recursivelyBuildNestedPaths({
|
||||
field: nestedField,
|
||||
nestedFieldName2: nestedFieldName,
|
||||
parentName,
|
||||
}),
|
||||
]
|
||||
}
|
||||
|
||||
const nestedPathName = fieldAffectsData(nestedField)
|
||||
? `${nestedFieldName ? `${nestedFieldName}__` : ''}${nestedField.name}`
|
||||
: undefined
|
||||
const getFieldSchema = fieldToSchemaMap({
|
||||
nestedFieldName,
|
||||
parentName,
|
||||
})[nestedField.type]
|
||||
|
||||
if (getFieldSchema) {
|
||||
const fieldSchema = getFieldSchema({
|
||||
...nestedField,
|
||||
name: nestedPathName,
|
||||
})
|
||||
|
||||
if (Array.isArray(fieldSchema)) {
|
||||
return [...nestedFields, ...fieldSchema]
|
||||
}
|
||||
|
||||
return [
|
||||
...nestedFields,
|
||||
{
|
||||
key: nestedPathName,
|
||||
type: fieldSchema,
|
||||
},
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
return nestedFields
|
||||
}, [])
|
||||
|
||||
return nestedPaths
|
||||
}
|
||||
|
||||
export default recursivelyBuildNestedPaths
|
||||
Reference in New Issue
Block a user