summaryrefslogtreecommitdiff
path: root/src/core/plugins/syntax-highlighting/wrap-components/SyntaxHighlighter.jsx
blob: a505d1b8039cbe2291d8afeb5b78d356bddd1ba5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/**
 * @prettier
 */
import React from "react"
import PropTypes from "prop-types"

const SyntaxHighlighterWrapper = (Original, system) => {
  const SyntaxHighlighter = ({ renderPlainText, children, ...rest }) => {
    const canSyntaxHighlight = system.getConfigs().syntaxHighlight.activated
    const PlainTextViewer = system.getComponent("PlainTextViewer")

    if (!canSyntaxHighlight && typeof renderPlainText === "function") {
      return renderPlainText({ children, PlainTextViewer })
    }
    if (!canSyntaxHighlight) {
      return <PlainTextViewer>{children}</PlainTextViewer>
    }

    return <Original {...rest}>{children}</Original>
  }

  SyntaxHighlighter.propTypes = {
    ...Original.propTypes,
    renderPlainText: PropTypes.func,
    children: PropTypes.string.isRequired,
  }

  return SyntaxHighlighter
}

export default SyntaxHighlighterWrapper