Lexical 转换器
Richtext 字段以 JSON 格式存储数据 - 这种格式既便于存储又具有灵活性,同时可以轻松转换为其他格式:
获取编辑器配置
某些转换器需要访问 Lexical 编辑器配置,该配置定义了可用功能和行为。Payload 通过 @payloadcms/richtext-lexical
中的 editorConfigFactory
提供了多种获取编辑器配置的方式。
导入工厂函数
首先导入必要的工具:
import type { SanitizedConfig } from 'payload'
import { editorConfigFactory } from '@payloadcms/richtext-lexical'
// 需要获取你的 Payload 配置才能检索默认编辑器配置
const config: SanitizedConfig = {} as SanitizedConfig
选项 1:默认编辑器配置
如果需要获取默认编辑器配置:
const defaultEditorConfig = await editorConfigFactory.default({ config })
选项 2:从 Lexical 字段提取
当有可用的 lexical 字段配置时,可以直接从中提取编辑器配置:
const fieldEditorConfig = editorConfigFactory.fromField({
field: config.collections[0].fields[1],
})
选项 3:创建自定义编辑器配置
你可以通过指定额外功能来创建自定义编辑器配置:
import { FixedToolbarFeature } from '@payloadcms/richtext-lexical'
const customEditorConfig = await editorConfigFactory.fromFeatures({
config,
features: ({ defaultFeatures }) => [
...defaultFeatures,
FixedToolbarFeature(),
],
})
选项4:从已实例化的编辑器中提取
如果你已经创建了一个全局或可复用的 Lexical 编辑器实例,你可以访问其配置。这种方法通常效率较低,不建议使用:
const editor = lexicalEditor({
features: ({ defaultFeatures }) => [
...defaultFeatures,
FixedToolbarFeature(),
],
})
const instantiatedEditorConfig = await editorConfigFactory.fromEditor({
config,
editor,
})
为了获得更好的效率,建议将 features
提取到一个单独的变量中,并使用 fromFeatures
方法替代此方式。
示例 - 从现有字段中获取编辑器配置
如果你可以访问已清理的 collection 配置,你可以获取 lexical 清理后的编辑器配置,因为每个 lexical richText 字段都会返回它。以下是一个如何从另一个字段的 afterRead 钩子中获取它的示例:
import type { CollectionConfig, RichTextField } from 'payload'
import {
editorConfigFactory,
getEnabledNodes,
lexicalEditor,
} from '@payloadcms/richtext-lexical'
export const MyCollection: CollectionConfig = {
slug: 'slug',
fields: [
{
name: 'text',
type: 'text',
hooks: {
afterRead: [
({ siblingFields, value }) => {
const field: RichTextField = siblingFields.find(
(field) => 'name' in field && field.name === 'richText',
) as RichTextField
const editorConfig = editorConfigFactory.fromField({
field,
})
// 现在你可以使用编辑器配置了
return value
},
],
},
},
{
name: 'richText',
type: 'richText',
editor: lexicalEditor(),
},
],
}