From 368dd2c1674cd104c290dcf918aad4a0d4eb7861 Mon Sep 17 00:00:00 2001 From: Alessio Gravili Date: Fri, 28 Jun 2024 16:35:51 -0400 Subject: [PATCH] feat(richtext-lexical): simplify schemaMap handling (#6980) --- .../src/features/blocks/feature.server.ts | 14 +------------- .../src/features/link/feature.server.ts | 15 +-------------- .../src/features/upload/feature.server.ts | 12 +----------- .../src/utilities/generateSchemaMap.ts | 11 +++++++++++ .../src/utilities/buildFieldSchemaMap/index.ts | 4 ---- .../buildFieldSchemaMap/traverseFields.ts | 18 +++--------------- 6 files changed, 17 insertions(+), 57 deletions(-) diff --git a/packages/richtext-lexical/src/features/blocks/feature.server.ts b/packages/richtext-lexical/src/features/blocks/feature.server.ts index 364967b94..0fac3395b 100644 --- a/packages/richtext-lexical/src/features/blocks/feature.server.ts +++ b/packages/richtext-lexical/src/features/blocks/feature.server.ts @@ -1,6 +1,5 @@ import type { Block, BlockField, Config, Field } from 'payload' -import { traverseFields } from '@payloadcms/ui/utilities/buildFieldSchemaMap/traverseFields' import { baseBlockFields, fieldsToJSONSchema, formatLabels, sanitizeFields } from 'payload' import type { BlocksFeatureClientProps } from './feature.client.js' @@ -57,9 +56,7 @@ export const BlocksFeature = createServerFeature< return { ClientFeature: BlocksFeatureClient, clientFeatureProps: clientProps, - generateSchemaMap: ({ config, i18n, props }) => { - const validRelationships = config.collections.map((c) => c.slug) || [] - + generateSchemaMap: ({ props }) => { /** * Add sub-fields to the schemaMap. E.g. if you have an array field as part of the block, and it runs addRow, it will request these * sub-fields from the component map. Thus, we need to put them in the component map here. @@ -68,15 +65,6 @@ export const BlocksFeature = createServerFeature< for (const block of props.blocks) { schemaMap.set(block.slug, block.fields || []) - - traverseFields({ - config, - fields: block.fields, - i18n, - schemaMap, - schemaPath: block.slug, - validRelationships, - }) } return schemaMap diff --git a/packages/richtext-lexical/src/features/link/feature.server.ts b/packages/richtext-lexical/src/features/link/feature.server.ts index 0302a83ae..3aaa978b1 100644 --- a/packages/richtext-lexical/src/features/link/feature.server.ts +++ b/packages/richtext-lexical/src/features/link/feature.server.ts @@ -1,6 +1,5 @@ import type { CollectionSlug, Config, Field, FieldAffectingData, SanitizedConfig } from 'payload' -import { traverseFields } from '@payloadcms/ui/utilities/buildFieldSchemaMap/traverseFields' import { sanitizeFields } from 'payload' import { deepCopyObject } from 'payload/shared' @@ -101,26 +100,14 @@ export const LinkFeature = createServerFeature< disabledCollections: props.disabledCollections, enabledCollections: props.enabledCollections, } as ExclusiveLinkCollectionsProps, - generateSchemaMap: ({ config, i18n }) => { + generateSchemaMap: () => { if (!sanitizedFields || !Array.isArray(sanitizedFields) || sanitizedFields.length === 0) { return null } const schemaMap = new Map() - - const validRelationships = config.collections.map((c) => c.slug) || [] - schemaMap.set('fields', sanitizedFields) - traverseFields({ - config, - fields: sanitizedFields, - i18n, - schemaMap, - schemaPath: 'fields', - validRelationships, - }) - return schemaMap }, i18n, diff --git a/packages/richtext-lexical/src/features/upload/feature.server.ts b/packages/richtext-lexical/src/features/upload/feature.server.ts index 02e6169a9..a404769ff 100644 --- a/packages/richtext-lexical/src/features/upload/feature.server.ts +++ b/packages/richtext-lexical/src/features/upload/feature.server.ts @@ -8,7 +8,6 @@ import type { TypeWithID, } from 'payload' -import { traverseFields } from '@payloadcms/ui/utilities/buildFieldSchemaMap/traverseFields' import { sanitizeFields } from 'payload' import type { UploadFeaturePropsClient } from './feature.client.js' @@ -82,23 +81,14 @@ export const UploadFeature = createServerFeature< return { ClientFeature: UploadFeatureClient, clientFeatureProps: clientProps, - generateSchemaMap: ({ config, i18n, props }) => { + generateSchemaMap: ({ props }) => { if (!props?.collections) return null const schemaMap = new Map() - const validRelationships = config.collections.map((c) => c.slug) || [] for (const collection in props.collections) { if (props.collections[collection].fields?.length) { schemaMap.set(collection, props.collections[collection].fields) - traverseFields({ - config, - fields: props.collections[collection].fields, - i18n, - schemaMap, - schemaPath: collection, - validRelationships, - }) } } diff --git a/packages/richtext-lexical/src/utilities/generateSchemaMap.ts b/packages/richtext-lexical/src/utilities/generateSchemaMap.ts index 6683cd75c..baba1be5a 100644 --- a/packages/richtext-lexical/src/utilities/generateSchemaMap.ts +++ b/packages/richtext-lexical/src/utilities/generateSchemaMap.ts @@ -1,5 +1,7 @@ import type { RichTextAdapter } from 'payload' +import { traverseFields } from '@payloadcms/ui/utilities/buildFieldSchemaMap/traverseFields' + import type { ResolvedServerFeatureMap } from '../features/typesServer.js' export const getGenerateSchemaMap = @@ -22,6 +24,15 @@ export const getGenerateSchemaMap = if (schemas) { for (const [schemaKey, fields] of schemas.entries()) { + // generate schema map entries for sub-fields using traverseFields + traverseFields({ + config, + fields, + i18n, + schemaMap: schemas, + schemaPath: schemaKey, + }) + schemaMap.set(`${schemaPath}.feature.${featureKey}.${schemaKey}`, fields) } } diff --git a/packages/ui/src/utilities/buildFieldSchemaMap/index.ts b/packages/ui/src/utilities/buildFieldSchemaMap/index.ts index 1718fd18b..7096565e6 100644 --- a/packages/ui/src/utilities/buildFieldSchemaMap/index.ts +++ b/packages/ui/src/utilities/buildFieldSchemaMap/index.ts @@ -13,8 +13,6 @@ export const buildFieldSchemaMap = (args: { const result: FieldSchemaMap = new Map() - const validRelationships = config.collections.map((c) => c.slug) || [] - config.collections.forEach((collection) => { traverseFields({ config, @@ -22,7 +20,6 @@ export const buildFieldSchemaMap = (args: { i18n, schemaMap: result, schemaPath: collection.slug, - validRelationships, }) }) @@ -33,7 +30,6 @@ export const buildFieldSchemaMap = (args: { i18n, schemaMap: result, schemaPath: global.slug, - validRelationships, }) }) diff --git a/packages/ui/src/utilities/buildFieldSchemaMap/traverseFields.ts b/packages/ui/src/utilities/buildFieldSchemaMap/traverseFields.ts index 3ac8599b8..e0dc789dd 100644 --- a/packages/ui/src/utilities/buildFieldSchemaMap/traverseFields.ts +++ b/packages/ui/src/utilities/buildFieldSchemaMap/traverseFields.ts @@ -12,18 +12,10 @@ type Args = { i18n: I18n schemaMap: FieldSchemaMap schemaPath: string - validRelationships: string[] } -export const traverseFields = ({ - config, - fields, - i18n, - schemaMap, - schemaPath, - validRelationships, -}: Args) => { - fields.map((field) => { +export const traverseFields = ({ config, fields, i18n, schemaMap, schemaPath }: Args) => { + for (const field of fields) { switch (field.type) { case 'group': case 'array': @@ -35,7 +27,6 @@ export const traverseFields = ({ i18n, schemaMap, schemaPath: `${schemaPath}.${field.name}`, - validRelationships, }) break @@ -47,7 +38,6 @@ export const traverseFields = ({ i18n, schemaMap, schemaPath, - validRelationships, }) break @@ -63,7 +53,6 @@ export const traverseFields = ({ i18n, schemaMap, schemaPath: blockSchemaPath, - validRelationships, }) }) break @@ -101,10 +90,9 @@ export const traverseFields = ({ i18n, schemaMap, schemaPath: tabSchemaPath, - validRelationships, }) }) break } - }) + } }