fix(richtext-lexical): get sub-block-lexical fields to work 4 out of 5 times

This commit is contained in:
Alessio Gravili
2024-03-14 16:42:08 -04:00
parent 2dc98f682f
commit ca27748799
7 changed files with 33 additions and 18 deletions

View File

@@ -48,11 +48,13 @@
"@types/react-dom": "18.2.7",
"payload": "workspace:*",
"@payloadcms/translations": "workspace:*",
"@payloadcms/ui": "workspace:*"
"@payloadcms/ui": "workspace:*",
"@payloadcms/next": "workspace:*"
},
"peerDependencies": {
"@payloadcms/translations": "workspace:*",
"@payloadcms/ui": "workspace:*",
"@payloadcms/next": "workspace:*",
"payload": "workspace:*"
},
"exports": {

View File

@@ -55,23 +55,13 @@ export const BlocksFeature: FeatureProviderProviderServer<
return {
ClientComponent: BlocksFeatureClientComponent,
clientFeatureProps: clientProps,
generateSchemaMap: ({ config, props }) => {
const validRelationships = config.collections.map((c) => c.slug) || []
generateSchemaMap: ({ props }) => {
const schemaMap: {
[key: string]: Field[]
} = {}
for (const block of props.blocks) {
const unSanitizedFormSchema = block.fields || []
const formSchema = sanitizeFields({
config,
fields: unSanitizedFormSchema,
validRelationships,
})
schemaMap[block.slug] = formSchema
schemaMap[block.slug] = block.fields || []
}
return schemaMap

View File

@@ -1,5 +1,6 @@
import type { RichTextAdapter } from 'payload/types'
import { DefaultCell } from '@payloadcms/next/views/List/Default/Cell/index.js'
import { mapFields } from '@payloadcms/ui/utilities'
import { sanitizeFields } from 'payload/config'
import React from 'react'
@@ -7,6 +8,8 @@ import React from 'react'
import type { ResolvedServerFeatureMap } from './field/features/types.js'
import type { GeneratedFeatureProviderComponent } from './types.js'
import { cloneDeep } from './field/lexical/utils/cloneDeep.js'
export const getGenerateComponentMap =
(args: {
resolvedFeatureMap: ResolvedServerFeatureMap
@@ -75,13 +78,16 @@ export const getGenerateComponentMap =
const sanitizedFields = sanitizeFields({
config,
fields,
fields: cloneDeep(fields),
validRelationships,
})
const mappedFields = mapFields({
DefaultCell,
config,
disableAddingID: true,
fieldSchema: sanitizedFields,
parentPath: `${schemaPath}.feature.${featureKey}.fields.${schemaKey}`,
readOnly: false,
})

View File

@@ -4,6 +4,8 @@ import { sanitizeFields } from 'payload/config'
import type { ResolvedServerFeatureMap } from './field/features/types.js'
import { cloneDeep } from './field/lexical/utils/cloneDeep.js'
export const getGenerateSchemaMap =
(args: { resolvedFeatureMap: ResolvedServerFeatureMap }): RichTextAdapter['generateSchemaMap'] =>
({ config, schemaMap, schemaPath }) => {
@@ -28,7 +30,7 @@ export const getGenerateSchemaMap =
const sanitizedFields = sanitizeFields({
config,
fields,
fields: cloneDeep(fields),
validRelationships,
})

View File

@@ -21,5 +21,5 @@
"src/**/*.spec.tsx"
],
"include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.d.ts", "src/**/*.json"],
"references": [{ "path": "../payload" }, { "path": "../translations" }, { "path": "../ui" }]
"references": [{ "path": "../payload" }, { "path": "../translations" }, { "path": "../ui" }, { "path": "../next" }]
}

View File

@@ -19,12 +19,24 @@ import { fieldTypes } from '../../forms/fields/index.js'
export const mapFields = (args: {
DefaultCell?: React.FC<any>
config: SanitizedConfig
/**
* If mapFields is used outside of collections, you might not want it to add an id field
*/
disableAddingID?: boolean
fieldSchema: FieldWithPath[]
filter?: (field: Field) => boolean
parentPath?: string
readOnly?: boolean
}): FieldMap => {
const { DefaultCell, config, fieldSchema, filter, parentPath, readOnly: readOnlyOverride } = args
const {
DefaultCell,
config,
disableAddingID,
fieldSchema,
filter,
parentPath,
readOnly: readOnlyOverride,
} = args
const result: FieldMap = fieldSchema.reduce((acc, field): FieldMap => {
const fieldIsPresentational = fieldIsPresentationalOnly(field)
@@ -355,7 +367,7 @@ export const mapFields = (args: {
const hasID =
result.findIndex(({ name, isFieldAffectingData }) => isFieldAffectingData && name === 'id') > -1
if (!hasID) {
if (!disableAddingID && !hasID) {
result.push({
name: 'id',
type: 'text',

3
pnpm-lock.yaml generated
View File

@@ -1224,6 +1224,9 @@ importers:
'@payloadcms/eslint-config':
specifier: workspace:*
version: link:../eslint-config-payload
'@payloadcms/next':
specifier: workspace:*
version: link:../next
'@payloadcms/translations':
specifier: workspace:*
version: link:../translations