import type { FC } from '../../../lib/teact/teact'; import React, { memo, useCallback, useState } from '../../../lib/teact/teact'; import { ApiMessageEntityTypes } from '../../../api/types'; import buildClassName from '../../../util/buildClassName'; import { getPrettyCodeLanguageName } from '../../../util/prettyCodeLanguageNames'; import useAsync from '../../../hooks/useAsync'; import PeerColorWrapper from '../PeerColorWrapper'; import CodeOverlay from './CodeOverlay'; import './CodeBlock.scss'; export type OwnProps = { text: string; language?: string; noCopy?: boolean; }; const CodeBlock: FC = ({ text, language, noCopy }) => { const [isWordWrap, setWordWrap] = useState(true); const { result: highlighted } = useAsync(() => { if (!language) return Promise.resolve(undefined); return import('../../../util/highlightCode') .then((lib) => lib.default(text, language)); }, [language, text]); const handleWordWrapToggle = useCallback((wrap) => { setWordWrap(wrap); }, []); const blockClass = buildClassName( 'code-block', !isWordWrap && 'no-word-wrap', ); return ( {language && (

{getPrettyCodeLanguageName(language)}

)}
        {highlighted ?? text}
        
      
); }; export default memo(CodeBlock);