Files
payloadcms/packages/plugin-nested-docs/src/utilities/getParents.ts
2024-03-10 11:39:41 -04:00

49 lines
1.1 KiB
TypeScript

import type { CollectionConfig } from 'payload/types'
import type { PluginConfig } from '../types.js'
const getParents = async (
req: any,
pluginConfig: PluginConfig,
collection: CollectionConfig,
doc: Record<string, unknown>,
docs: Array<Record<string, unknown>> = [],
): Promise<Array<Record<string, unknown>>> => {
const parentSlug = pluginConfig?.parentFieldSlug || 'parent'
const parent = doc[parentSlug]
let retrievedParent
if (parent) {
// If not auto-populated, and we have an ID
if (typeof parent === 'string' || typeof parent === 'number') {
retrievedParent = await req.payload.findByID({
id: parent,
collection: collection.slug,
depth: 0,
disableErrors: true,
req,
})
}
// If auto-populated
if (typeof parent === 'object') {
retrievedParent = parent
}
if (retrievedParent) {
if (retrievedParent[parentSlug]) {
return getParents(req, pluginConfig, collection, retrievedParent, [
retrievedParent,
...docs,
])
}
return [retrievedParent, ...docs]
}
}
return docs
}
export default getParents