Hanzo
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 text field, it will be used as the plaintext.
  • If the node has a children field, 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

On this page