Some checks failed
ci / changes (push) Has been cancelled
ci / lint (push) Has been cancelled
ci / build (push) Has been cancelled
ci / tests-unit (push) Has been cancelled
ci / tests-types (push) Has been cancelled
ci / int-cosmosdb (push) Has been cancelled
ci / int-documentdb (push) Has been cancelled
ci / int-firestore (push) Has been cancelled
ci / int-mongodb (push) Has been cancelled
ci / int-postgres (push) Has been cancelled
ci / int-postgres-custom-schema (push) Has been cancelled
ci / int-postgres-uuid (push) Has been cancelled
ci / int-sqlite (push) Has been cancelled
ci / int-sqlite-uuid (push) Has been cancelled
ci / int-supabase (push) Has been cancelled
ci / e2e-_community (push) Has been cancelled
ci / e2e-access-control (push) Has been cancelled
ci / e2e-admin-bar (push) Has been cancelled
ci / e2e-admin-root (push) Has been cancelled
ci / e2e-admin__e2e__document-view (push) Has been cancelled
ci / e2e-admin__e2e__general (push) Has been cancelled
ci / e2e-admin__e2e__list-view (push) Has been cancelled
ci / e2e-auth (push) Has been cancelled
ci / e2e-auth-basic (push) Has been cancelled
ci / e2e-bulk-edit (push) Has been cancelled
ci / e2e-field-error-states (push) Has been cancelled
ci / e2e-fields-relationship (push) Has been cancelled
ci / e2e-fields__collections__Array (push) Has been cancelled
ci / e2e-fields__collections__Blocks#config.blockreferences.ts (push) Has been cancelled
ci / e2e-fields__collections__Blocks (push) Has been cancelled
ci / e2e-fields__collections__Checkbox (push) Has been cancelled
ci / e2e-fields__collections__Collapsible (push) Has been cancelled
ci / e2e-fields__collections__ConditionalLogic (push) Has been cancelled
ci / e2e-fields__collections__CustomID (push) Has been cancelled
ci / e2e-fields__collections__Date (push) Has been cancelled
ci / e2e-fields__collections__Email (push) Has been cancelled
ci / e2e-fields__collections__Indexed (push) Has been cancelled
ci / e2e-fields__collections__JSON (push) Has been cancelled
ci / e2e-fields__collections__Number (push) Has been cancelled
ci / e2e-fields__collections__Point (push) Has been cancelled
ci / e2e-fields__collections__Radio (push) Has been cancelled
ci / e2e-fields__collections__Relationship (push) Has been cancelled
ci / e2e-fields__collections__Row (push) Has been cancelled
ci / e2e-fields__collections__Select (push) Has been cancelled
ci / e2e-fields__collections__Tabs (push) Has been cancelled
ci / e2e-fields__collections__Tabs2 (push) Has been cancelled
ci / e2e-fields__collections__Text (push) Has been cancelled
ci / e2e-fields__collections__UI (push) Has been cancelled
ci / e2e-fields__collections__Upload (push) Has been cancelled
ci / e2e-folders (push) Has been cancelled
ci / e2e-form-state (push) Has been cancelled
ci / e2e-group-by (push) Has been cancelled
ci / e2e-hooks (push) Has been cancelled
ci / e2e-i18n (push) Has been cancelled
ci / e2e-joins (push) Has been cancelled
ci / e2e-lexical__collections__LexicalHeadingFeature (push) Has been cancelled
ci / e2e-lexical__collections__LexicalJSXConverter (push) Has been cancelled
ci / e2e-lexical__collections__LexicalLinkFeature (push) Has been cancelled
ci / e2e-lexical__collections__Lexical__e2e__blocks#config.blockreferences.ts (push) Has been cancelled
ci / e2e-lexical__collections__Lexical__e2e__blocks (push) Has been cancelled
ci / e2e-lexical__collections__Lexical__e2e__main (push) Has been cancelled
ci / e2e-lexical__collections__OnDemandForm (push) Has been cancelled
ci / e2e-lexical__collections__RichText (push) Has been cancelled
ci / e2e-lexical__collections___LexicalFullyFeatured (push) Has been cancelled
ci / e2e-lexical__collections___LexicalFullyFeatured__db (push) Has been cancelled
ci / e2e-live-preview (push) Has been cancelled
ci / e2e-localization (push) Has been cancelled
ci / e2e-locked-documents (push) Has been cancelled
ci / e2e-plugin-cloud-storage (push) Has been cancelled
ci / e2e-plugin-form-builder (push) Has been cancelled
ci / e2e-plugin-import-export (push) Has been cancelled
ci / e2e-plugin-multi-tenant (push) Has been cancelled
ci / e2e-plugin-nested-docs (push) Has been cancelled
ci / e2e-plugin-seo (push) Has been cancelled
ci / e2e-query-presets (push) Has been cancelled
ci / e2e-sort (push) Has been cancelled
ci / e2e-trash (push) Has been cancelled
ci / e2e-uploads (push) Has been cancelled
ci / e2e-versions (push) Has been cancelled
ci / e2e-turbo-_community (push) Has been cancelled
ci / e2e-turbo-access-control (push) Has been cancelled
ci / e2e-turbo-admin-bar (push) Has been cancelled
ci / e2e-turbo-admin-root (push) Has been cancelled
ci / e2e-turbo-admin__e2e__document-view (push) Has been cancelled
ci / e2e-turbo-admin__e2e__general (push) Has been cancelled
ci / e2e-turbo-admin__e2e__list-view (push) Has been cancelled
ci / e2e-turbo-auth (push) Has been cancelled
ci / e2e-turbo-auth-basic (push) Has been cancelled
ci / e2e-turbo-bulk-edit (push) Has been cancelled
ci / e2e-turbo-field-error-states (push) Has been cancelled
ci / e2e-turbo-fields-relationship (push) Has been cancelled
ci / e2e-turbo-fields__collections__Array (push) Has been cancelled
ci / e2e-turbo-fields__collections__Blocks#config.blockreferences.ts (push) Has been cancelled
ci / e2e-turbo-fields__collections__Blocks (push) Has been cancelled
ci / e2e-turbo-fields__collections__Checkbox (push) Has been cancelled
ci / e2e-turbo-fields__collections__Collapsible (push) Has been cancelled
ci / e2e-turbo-fields__collections__ConditionalLogic (push) Has been cancelled
ci / e2e-turbo-fields__collections__CustomID (push) Has been cancelled
ci / e2e-turbo-fields__collections__Date (push) Has been cancelled
ci / e2e-turbo-fields__collections__Email (push) Has been cancelled
ci / e2e-turbo-fields__collections__Indexed (push) Has been cancelled
ci / e2e-turbo-fields__collections__JSON (push) Has been cancelled
ci / e2e-turbo-fields__collections__Number (push) Has been cancelled
ci / e2e-turbo-fields__collections__Point (push) Has been cancelled
ci / e2e-turbo-fields__collections__Radio (push) Has been cancelled
ci / e2e-turbo-fields__collections__Relationship (push) Has been cancelled
ci / e2e-turbo-fields__collections__Row (push) Has been cancelled
ci / e2e-turbo-fields__collections__Select (push) Has been cancelled
ci / e2e-turbo-fields__collections__Tabs (push) Has been cancelled
ci / e2e-turbo-fields__collections__Tabs2 (push) Has been cancelled
ci / e2e-turbo-fields__collections__Text (push) Has been cancelled
ci / e2e-turbo-fields__collections__UI (push) Has been cancelled
ci / e2e-turbo-fields__collections__Upload (push) Has been cancelled
ci / e2e-turbo-folders (push) Has been cancelled
ci / e2e-turbo-form-state (push) Has been cancelled
ci / e2e-turbo-group-by (push) Has been cancelled
ci / e2e-turbo-hooks (push) Has been cancelled
ci / e2e-turbo-i18n (push) Has been cancelled
ci / e2e-turbo-joins (push) Has been cancelled
ci / e2e-turbo-lexical__collections__LexicalHeadingFeature (push) Has been cancelled
ci / e2e-turbo-lexical__collections__LexicalJSXConverter (push) Has been cancelled
ci / e2e-turbo-lexical__collections__LexicalLinkFeature (push) Has been cancelled
ci / e2e-turbo-lexical__collections__Lexical__e2e__blocks#config.blockreferences.ts (push) Has been cancelled
ci / e2e-turbo-lexical__collections__Lexical__e2e__blocks (push) Has been cancelled
ci / e2e-turbo-lexical__collections__Lexical__e2e__main (push) Has been cancelled
ci / e2e-turbo-lexical__collections__OnDemandForm (push) Has been cancelled
ci / e2e-turbo-lexical__collections__RichText (push) Has been cancelled
ci / e2e-turbo-lexical__collections___LexicalFullyFeatured (push) Has been cancelled
ci / e2e-turbo-lexical__collections___LexicalFullyFeatured__db (push) Has been cancelled
ci / e2e-turbo-live-preview (push) Has been cancelled
ci / e2e-turbo-localization (push) Has been cancelled
ci / e2e-turbo-locked-documents (push) Has been cancelled
ci / e2e-turbo-plugin-cloud-storage (push) Has been cancelled
ci / e2e-turbo-plugin-form-builder (push) Has been cancelled
ci / e2e-turbo-plugin-import-export (push) Has been cancelled
ci / e2e-turbo-plugin-multi-tenant (push) Has been cancelled
ci / e2e-turbo-plugin-nested-docs (push) Has been cancelled
ci / e2e-turbo-plugin-seo (push) Has been cancelled
ci / e2e-turbo-query-presets (push) Has been cancelled
ci / e2e-turbo-sort (push) Has been cancelled
ci / e2e-turbo-trash (push) Has been cancelled
ci / e2e-turbo-uploads (push) Has been cancelled
ci / e2e-turbo-versions (push) Has been cancelled
ci / build-template-blank-mongodb (push) Has been cancelled
ci / build-template-website-mongodb (push) Has been cancelled
ci / build-template-with-payload-cloud-mongodb (push) Has been cancelled
ci / build-template-with-vercel-mongodb-mongodb (push) Has been cancelled
ci / build-template-plugin- (push) Has been cancelled
ci / build-template-with-postgres-postgres (push) Has been cancelled
ci / build-template-with-vercel-postgres-postgres (push) Has been cancelled
ci / tests-type-generation (push) Has been cancelled
ci / All Green (push) Has been cancelled
ci / Publish Canary (push) Has been cancelled
ci / analyze (push) Has been cancelled
publish-prerelease / publish-prerelease-${{ github.ref_name }}-${{ github.sha }} (push) Has been cancelled
lock-issues / lock_issues (push) Has been cancelled
stale / stale (push) Has been cancelled
audit-dependencies / audit (push) Has been cancelled
activity-notifications / run (push) Has been cancelled
234 lines
6.7 KiB
TypeScript
234 lines
6.7 KiB
TypeScript
import type { Field, FlattenedBlock, PayloadRequest, PopulateType } from 'tbsh-cms'
|
|
|
|
import { fieldAffectsData, fieldHasSubFields, fieldIsArrayType, tabHasName } from 'tbsh-cms/shared'
|
|
|
|
import { populate } from './populate.js'
|
|
import { recurseRichText } from './richTextRelationshipPromise.js'
|
|
|
|
type NestedRichTextFieldsArgs = {
|
|
currentDepth?: number
|
|
data: unknown
|
|
depth: number
|
|
draft: boolean
|
|
fields: Field[]
|
|
overrideAccess: boolean
|
|
populateArg?: PopulateType
|
|
populationPromises: Promise<void>[]
|
|
req: PayloadRequest
|
|
showHiddenFields: boolean
|
|
}
|
|
|
|
export const recurseNestedFields = ({
|
|
currentDepth = 0,
|
|
data,
|
|
depth,
|
|
draft,
|
|
fields,
|
|
overrideAccess = false,
|
|
populateArg,
|
|
populationPromises,
|
|
req,
|
|
showHiddenFields,
|
|
}: NestedRichTextFieldsArgs): void => {
|
|
fields.forEach((field) => {
|
|
if (field.type === 'relationship' || field.type === 'upload') {
|
|
if (field.type === 'relationship') {
|
|
if (field.hasMany && Array.isArray(data[field.name])) {
|
|
if (Array.isArray(field.relationTo)) {
|
|
data[field.name].forEach(({ relationTo, value }, i) => {
|
|
const collection = req.payload.collections[relationTo]
|
|
if (collection) {
|
|
populationPromises.push(
|
|
populate({
|
|
id: value,
|
|
collection,
|
|
currentDepth,
|
|
data: data[field.name],
|
|
depth,
|
|
draft,
|
|
field,
|
|
key: i,
|
|
overrideAccess,
|
|
req,
|
|
select:
|
|
populateArg?.[collection.config.slug] ?? collection.config.defaultPopulate,
|
|
showHiddenFields,
|
|
}),
|
|
)
|
|
}
|
|
})
|
|
} else {
|
|
data[field.name].forEach((id, i) => {
|
|
const collection = req.payload.collections[field.relationTo as string]
|
|
if (collection) {
|
|
populationPromises.push(
|
|
populate({
|
|
id,
|
|
collection,
|
|
currentDepth,
|
|
data: data[field.name],
|
|
depth,
|
|
draft,
|
|
field,
|
|
key: i,
|
|
overrideAccess,
|
|
req,
|
|
select:
|
|
populateArg?.[collection.config.slug] ?? collection.config.defaultPopulate,
|
|
showHiddenFields,
|
|
}),
|
|
)
|
|
}
|
|
})
|
|
}
|
|
} else if (
|
|
Array.isArray(field.relationTo) &&
|
|
data[field.name]?.value &&
|
|
data[field.name]?.relationTo
|
|
) {
|
|
if (!('hasMany' in field) || !field.hasMany) {
|
|
const collection = req.payload.collections[data[field.name].relationTo]
|
|
populationPromises.push(
|
|
populate({
|
|
id: data[field.name].value,
|
|
collection,
|
|
currentDepth,
|
|
data: data[field.name],
|
|
depth,
|
|
draft,
|
|
field,
|
|
key: 'value',
|
|
overrideAccess,
|
|
req,
|
|
select: populateArg?.[collection.config.slug] ?? collection.config.defaultPopulate,
|
|
showHiddenFields,
|
|
}),
|
|
)
|
|
}
|
|
}
|
|
}
|
|
if (typeof data[field.name] !== 'undefined' && typeof field.relationTo === 'string') {
|
|
const collection = req.payload.collections[field.relationTo]
|
|
populationPromises.push(
|
|
populate({
|
|
id: data[field.name],
|
|
collection,
|
|
currentDepth,
|
|
data,
|
|
depth,
|
|
draft,
|
|
field,
|
|
key: field.name,
|
|
overrideAccess,
|
|
req,
|
|
select: populateArg?.[collection.config.slug] ?? collection.config.defaultPopulate,
|
|
showHiddenFields,
|
|
}),
|
|
)
|
|
}
|
|
} else if (fieldHasSubFields(field) && !fieldIsArrayType(field)) {
|
|
if (fieldAffectsData(field) && typeof data[field.name] === 'object') {
|
|
recurseNestedFields({
|
|
currentDepth,
|
|
data: data[field.name],
|
|
depth,
|
|
draft,
|
|
fields: field.fields,
|
|
overrideAccess,
|
|
populateArg,
|
|
populationPromises,
|
|
req,
|
|
showHiddenFields,
|
|
})
|
|
} else {
|
|
recurseNestedFields({
|
|
currentDepth,
|
|
data,
|
|
depth,
|
|
draft,
|
|
fields: field.fields,
|
|
overrideAccess,
|
|
populateArg,
|
|
populationPromises,
|
|
req,
|
|
showHiddenFields,
|
|
})
|
|
}
|
|
} else if (field.type === 'tabs') {
|
|
field.tabs.forEach((tab) => {
|
|
recurseNestedFields({
|
|
currentDepth,
|
|
data: tabHasName(tab) ? data[tab.name] : data,
|
|
depth,
|
|
draft,
|
|
fields: tab.fields,
|
|
overrideAccess,
|
|
populateArg,
|
|
populationPromises,
|
|
req,
|
|
showHiddenFields,
|
|
})
|
|
})
|
|
} else if (Array.isArray(data[field.name])) {
|
|
if (field.type === 'blocks') {
|
|
data[field.name].forEach((row, i) => {
|
|
const block =
|
|
req.payload.blocks[row?.blockType] ??
|
|
((field.blockReferences ?? field.blocks).find(
|
|
(block) => typeof block !== 'string' && block.slug === row?.blockType,
|
|
) as FlattenedBlock | undefined)
|
|
if (block) {
|
|
recurseNestedFields({
|
|
currentDepth,
|
|
data: data[field.name][i],
|
|
depth,
|
|
draft,
|
|
fields: block.fields,
|
|
overrideAccess,
|
|
populateArg,
|
|
populationPromises,
|
|
req,
|
|
showHiddenFields,
|
|
})
|
|
}
|
|
})
|
|
}
|
|
|
|
if (field.type === 'array') {
|
|
data[field.name].forEach((_, i) => {
|
|
recurseNestedFields({
|
|
currentDepth,
|
|
data: data[field.name][i],
|
|
depth,
|
|
draft,
|
|
fields: field.fields,
|
|
overrideAccess,
|
|
populateArg,
|
|
populationPromises,
|
|
req,
|
|
showHiddenFields,
|
|
})
|
|
})
|
|
}
|
|
}
|
|
|
|
if (field.type === 'richText' && Array.isArray(data[field.name])) {
|
|
data[field.name].forEach((node) => {
|
|
if (Array.isArray(node.children)) {
|
|
recurseRichText({
|
|
children: node.children,
|
|
currentDepth,
|
|
depth,
|
|
draft,
|
|
field,
|
|
overrideAccess,
|
|
populationPromises,
|
|
req,
|
|
showHiddenFields,
|
|
})
|
|
}
|
|
})
|
|
}
|
|
})
|
|
}
|