UNPKG

@20minutes/draft-convert

Version:

Extensibly serialize & deserialize Draft.js ContentState

33 lines (32 loc) 1.25 kB
import React from 'react'; import ReactDOMServer from 'react-dom/server'; import invariant from 'tiny-invariant'; import splitReactElement from './splitReactElement.mjs'; function hasChildren(element) { return /*#__PURE__*/ React.isValidElement(element) && React.Children.count(element.props.children) > 0; } export default function getElementHTML(element, text = null) { if (element === undefined || element === null) { return element; } if (typeof element === 'string') { return element; } if (/*#__PURE__*/ React.isValidElement(element)) { if (hasChildren(element)) { return ReactDOMServer.renderToStaticMarkup(element); } const tags = splitReactElement(element); if (text !== null && typeof tags === 'object') { const { start, end } = tags; return start + text + end; } return tags; } invariant(Object.hasOwn(element, 'start') && Object.hasOwn(element, 'end'), 'convertToHTML: received conversion data without either an HTML string, ReactElement or an object with start/end tags'); if (text !== null) { const { start, end } = element; return start + text + end; } return element; }