|
|
@@ -604,16 +604,15 @@ const CodeBlock = memo(
|
|
|
|
|
|
return (
|
|
|
<CodeBlockContainer ref={codeBlockRef}>
|
|
|
- <StyledPre
|
|
|
- ref={preRef}
|
|
|
+ <MemoizedStyledPre
|
|
|
+ preRef={preRef}
|
|
|
preStyle={preStyle}
|
|
|
- wordwrap={wordWrap ? "true" : "false"}
|
|
|
- windowshade={windowShade ? "true" : "false"}
|
|
|
+ wordWrap={wordWrap}
|
|
|
+ windowShade={windowShade}
|
|
|
collapsedHeight={collapsedHeight}
|
|
|
- onMouseDown={() => updateCodeBlockButtonPosition(true)}
|
|
|
- onMouseUp={() => updateCodeBlockButtonPosition(false)}>
|
|
|
- <div dangerouslySetInnerHTML={{ __html: highlightedCode }} />
|
|
|
- </StyledPre>
|
|
|
+ highlightedCode={highlightedCode}
|
|
|
+ updateCodeBlockButtonPosition={updateCodeBlockButtonPosition}
|
|
|
+ />
|
|
|
{!isSelecting && (
|
|
|
<CodeBlockButtonWrapper
|
|
|
ref={copyButtonWrapperRef}
|
|
|
@@ -718,4 +717,39 @@ const CodeBlock = memo(
|
|
|
},
|
|
|
)
|
|
|
|
|
|
+// Memoized content component to prevent unnecessary re-renders of highlighted code
|
|
|
+const MemoizedCodeContent = memo(({ html }: { html: string }) => <div dangerouslySetInnerHTML={{ __html: html }} />)
|
|
|
+
|
|
|
+// Memoized StyledPre component
|
|
|
+const MemoizedStyledPre = memo(
|
|
|
+ ({
|
|
|
+ preRef,
|
|
|
+ preStyle,
|
|
|
+ wordWrap,
|
|
|
+ windowShade,
|
|
|
+ collapsedHeight,
|
|
|
+ highlightedCode,
|
|
|
+ updateCodeBlockButtonPosition,
|
|
|
+ }: {
|
|
|
+ preRef: React.RefObject<HTMLDivElement>
|
|
|
+ preStyle?: React.CSSProperties
|
|
|
+ wordWrap: boolean
|
|
|
+ windowShade: boolean
|
|
|
+ collapsedHeight?: number
|
|
|
+ highlightedCode: string
|
|
|
+ updateCodeBlockButtonPosition: (forceHide?: boolean) => void
|
|
|
+ }) => (
|
|
|
+ <StyledPre
|
|
|
+ ref={preRef}
|
|
|
+ preStyle={preStyle}
|
|
|
+ wordwrap={wordWrap ? "true" : "false"}
|
|
|
+ windowshade={windowShade ? "true" : "false"}
|
|
|
+ collapsedHeight={collapsedHeight}
|
|
|
+ onMouseDown={() => updateCodeBlockButtonPosition(true)}
|
|
|
+ onMouseUp={() => updateCodeBlockButtonPosition(false)}>
|
|
|
+ <MemoizedCodeContent html={highlightedCode} />
|
|
|
+ </StyledPre>
|
|
|
+ ),
|
|
|
+)
|
|
|
+
|
|
|
export default CodeBlock
|