'use client' import * as Prism from 'prismjs' import * as React from 'react' import { getBlockValue, isAdmin } from 'react-bricks/rsc' import { useVisualEdit } from 'react-bricks/rsc/client' import { LayoutProps } from '../../LayoutSideProps' import Container from '../../shared/components/Container' import Section from '../../shared/components/Section' import PrismCode from './PrismCode' import Editor from './SimpleCodeEditor' import Styles from './Styles' require('prismjs/components/prism-typescript') require('prismjs/components/prism-bash') require('prismjs/components/prism-jsx') require('prismjs/components/prism-tsx') require('prismjs/plugins/line-numbers/prism-line-numbers.js') require('prismjs/plugins/show-language/prism-show-language.js') require('prismjs/plugins/line-highlight/prism-line-highlight.js') export interface CodeProps extends LayoutProps { language: string dataline?: string showLineNumbers: boolean } const CodeClient: React.FC = ({ backgroundColor, borderTop, borderBottom, paddingTop, paddingBottom, width, language = 'javascript', dataline = '', showLineNumbers = false, }) => { const [value, setValue] = React.useState('') const [hasMount, setHasMount] = React.useState(false) const [valueVisualEdit, onChange, isReadOnly] = useVisualEdit('code') const code = getBlockValue('code') React.useEffect(() => { setHasMount(true) }, []) React.useEffect(() => { if (isAdmin()) { setValue(valueVisualEdit) } else { setValue(code) } // eslint-disable-next-line react-hooks/exhaustive-deps }, [valueVisualEdit]) const plugins = [] if (showLineNumbers) { plugins.push('line-numbers') } if (dataline !== '') { plugins.push('line-highlight') } if (!hasMount) { return null } if (isReadOnly) { return (
) } return (
          
             {
                return Prism.highlight(
                  code || '',
                  Prism.languages[language],
                  `${language}`
                )
              }}
              padding={10}
              textareaId="codeArea"
              className={showLineNumbers ? 'editor-line-number' : ''}
            />
          
        
) } export default CodeClient