diff --git a/common/package.json b/common/package.json index 52195398..c652cb69 100644 --- a/common/package.json +++ b/common/package.json @@ -13,6 +13,7 @@ "@tiptap/extension-link": "2.0.0-beta.43", "@tiptap/extension-mention": "2.0.0-beta.102", "@tiptap/starter-kit": "2.0.0-beta.191", + "prosemirror-model": "1.18.1", "lodash": "4.17.21" }, "devDependencies": { diff --git a/common/util/parse.ts b/common/util/parse.ts index 0bbd5cd9..8efd88f6 100644 --- a/common/util/parse.ts +++ b/common/util/parse.ts @@ -1,5 +1,12 @@ import { MAX_TAG_LENGTH } from '../contract' -import { generateText, JSONContent } from '@tiptap/core' +import { + getText, + getTextSerializersFromSchema, + getSchema, + JSONContent, +} from '@tiptap/core' +import { Node as ProseMirrorNode } from 'prosemirror-model' + // Tiptap starter extensions import { Blockquote } from '@tiptap/extension-blockquote' import { Bold } from '@tiptap/extension-bold' @@ -97,7 +104,6 @@ export const exhibitExts = [ Paragraph, Strike, Text, - Image, Link, Mention, @@ -105,6 +111,15 @@ export const exhibitExts = [ TiptapTweet, ] +const exhibitSchema = getSchema(exhibitExts) + export function richTextToString(text?: JSONContent) { - return !text ? '' : generateText(text, exhibitExts) + if (!text) { + return '' + } + const contentNode = ProseMirrorNode.fromJSON(exhibitSchema, text) + return getText(contentNode, { + blockSeparator: '\n\n', + textSerializers: getTextSerializersFromSchema(exhibitSchema), + }) }