ProjectsHanzoaiCmsRich text
Converting Plaintext
Richtext to Plaintext
Here's how you can convert richtext data to plaintext using @hanzo/cms-richtext-lexical/plaintext.
import type { SerializedEditorState } from '@hanzo/cms-richtext-lexical/lexical'
import { convertLexicalToPlaintext } from '@hanzo/cms-richtext-lexical/plaintext'
// Your richtext data here
const data: SerializedEditorState = {}
const plaintext = convertLexicalToPlaintext({ data })Custom Converters
The convertLexicalToPlaintext functions accepts a converters object that allows you to customize how specific nodes are converted to plaintext.
import type {
DefaultNodeTypes,
SerializedBlockNode,
} from '@hanzo/cms-richtext-lexical'
import type { SerializedEditorState } from '@hanzo/cms-richtext-lexical/lexical'
import type { MyTextBlock } from '@/payload-types'
import {
convertLexicalToPlaintext,
type PlaintextConverters,
} from '@hanzo/cms-richtext-lexical/plaintext'
// Your richtext data here
const data: SerializedEditorState = {}
const converters: PlaintextConverters<
DefaultNodeTypes | SerializedBlockNode<MyTextBlock>
> = {
blocks: {
textBlock: ({ node }) => {
return node.fields.text ?? ''
},
},
link: ({ node }) => {
return node.fields.url ?? ''
},
}
const plaintext = convertLexicalToPlaintext({
converters,
data,
})Unlike other converters, there are no default converters for plaintext.
If a node does not have a converter defined, the following heuristics are used to convert it to plaintext:
- If the node has a
textfield, it will be used as the plaintext. - If the node has a
childrenfield, the children will be recursively converted to plaintext. - If the node has neither, it will be ignored.
- Paragraph, text and tab nodes insert newline / tab characters.
How is this guide?
Last updated on