fix(richtext-lexical): get sub-block-lexical fields to work 4 out of 5 times
This commit is contained in:
@@ -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": {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
})
|
||||
|
||||
|
||||
@@ -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,
|
||||
})
|
||||
|
||||
|
||||
@@ -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" }]
|
||||
}
|
||||
|
||||
@@ -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
3
pnpm-lock.yaml
generated
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user