@atlaskit/renderer
Version:
Renderer component
72 lines • 3.19 kB
JavaScript
/**
* @jsxRuntime classic
* @jsx jsx
*/
import { Fragment, lazy, memo, Suspense, useState } from 'react';
/* eslint-disable @typescript-eslint/consistent-type-imports, @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766; jsx required at runtime for @jsxRuntime classic */
import { jsx } from '@emotion/react';
import { CodeBlockSharedCssClassName } from '@atlaskit/editor-common/styles';
import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
import { useInViewport } from '../../hooks/use-in-viewport';
import { useBidiWarnings } from '../../hooks/use-bidi-warnings';
import LightWeightCodeBlock from './components/lightWeightCodeBlock';
import CodeBlockContainer from './components/codeBlockContainer';
const LazyAkCodeBlock = /*#__PURE__*/lazy(
// Ignored via go/ees005
// eslint-disable-next-line require-await
async () => import( /* webpackChunkName: "@atlaskit-internal_renderer-codeBlock" */
'@atlaskit/code/block'));
const joinWithSpaces = (...strs) => strs.join(' ');
const MemoizedLightWeightCodeBlock = /*#__PURE__*/memo(LightWeightCodeBlock);
const WindowedCodeBlock = ({
text,
language,
allowCopyToClipboard,
allowWrapCodeBlock = false,
codeBidiWarningTooltipEnabled,
hideLineNumbers = false,
className: rootClassName,
wrap
}) => {
const {
warningLabel
} = useBidiWarnings({
enableWarningTooltip: codeBidiWarningTooltipEnabled
});
const {
isInViewport,
trackingRef
} = useInViewport();
const className = joinWithSpaces(CodeBlockSharedCssClassName.CODEBLOCK_CONTAINER, rootClassName);
const memoizedLightWeightCodeBlock = jsx(MemoizedLightWeightCodeBlock, {
ref: trackingRef,
text: text,
codeBidiWarningTooltipEnabled: codeBidiWarningTooltipEnabled,
hideLineNumbers: expValEquals('platform_editor_code_block_q4_lovability', 'isEnabled', true) && hideLineNumbers
// eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
,
className: rootClassName
});
const [wrapLongLines, setWrapLongLines] = useState(() => expValEquals('platform_editor_code_block_q4_lovability', 'isEnabled', true) && Boolean(wrap));
return isInViewport ? jsx(Fragment, null, jsx(Suspense, {
fallback: memoizedLightWeightCodeBlock
}, jsx(CodeBlockContainer, {
allowCopyToClipboard: allowCopyToClipboard,
allowWrapCodeBlock: allowWrapCodeBlock
// eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
,
className: className,
setWrapLongLines: setWrapLongLines,
text: text,
wrapLongLines: wrapLongLines
}, jsx(LazyAkCodeBlock, {
language: language,
text: text,
codeBidiWarningLabel: warningLabel,
codeBidiWarningTooltipEnabled: codeBidiWarningTooltipEnabled,
shouldWrapLongLines: allowWrapCodeBlock && wrapLongLines,
shouldShowLineNumbers: !(expValEquals('platform_editor_code_block_q4_lovability', 'isEnabled', true) && hideLineNumbers),
hasBidiWarnings: expValEquals('platform_editor_remove_bidi_char_warning', 'isEnabled', true) ? false : undefined
})))) : memoizedLightWeightCodeBlock;
};
export default WindowedCodeBlock;