From 284bb7ac71815223be440a83b77691ff1ff2ef60 Mon Sep 17 00:00:00 2001 From: Joel Date: Thu, 5 Dec 2024 10:15:21 +0800 Subject: [PATCH] fix: ref attribute in markdown causes page crash (#11369) Co-authored-by: crazywoola <427733928@qq.com> --- .../components/base/image-gallery/index.tsx | 3 +- web/app/components/base/markdown.tsx | 32 +++---------------- 2 files changed, 5 insertions(+), 30 deletions(-) diff --git a/web/app/components/base/image-gallery/index.tsx b/web/app/components/base/image-gallery/index.tsx index dc52251df9..58813900a7 100644 --- a/web/app/components/base/image-gallery/index.tsx +++ b/web/app/components/base/image-gallery/index.tsx @@ -53,8 +53,7 @@ const ImageGallery: FC = ({ imagePreviewUrl && ( setImagePreviewUrl('')} - /> + onCancel={() => setImagePreviewUrl('')} title={''} /> ) } diff --git a/web/app/components/base/markdown.tsx b/web/app/components/base/markdown.tsx index b19c2b5b65..d978c2895c 100644 --- a/web/app/components/base/markdown.tsx +++ b/web/app/components/base/markdown.tsx @@ -8,8 +8,7 @@ import RemarkGfm from 'remark-gfm' import RehypeRaw from 'rehype-raw' import SyntaxHighlighter from 'react-syntax-highlighter' import { atelierHeathLight } from 'react-syntax-highlighter/dist/esm/styles/hljs' -import type { RefObject } from 'react' -import { Component, memo, useEffect, useMemo, useRef, useState } from 'react' +import { Component, memo, useMemo, useRef, useState } from 'react' import type { CodeComponent } from 'react-markdown/lib/ast-to-react' import cn from '@/utils/classnames' import CopyBtn from '@/app/components/base/copy-btn' @@ -77,29 +76,6 @@ export function PreCode(props: { children: any }) { ) } -// eslint-disable-next-line unused-imports/no-unused-vars -const useLazyLoad = (ref: RefObject): boolean => { - const [isIntersecting, setIntersecting] = useState(false) - - useEffect(() => { - const observer = new IntersectionObserver(([entry]) => { - if (entry.isIntersecting) { - setIntersecting(true) - observer.disconnect() - } - }) - - if (ref.current) - observer.observe(ref.current) - - return () => { - observer.disconnect() - } - }, [ref]) - - return isIntersecting -} - // **Add code block // Avoid error #185 (Maximum update depth exceeded. // This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. @@ -123,7 +99,7 @@ const CodeBlock: CodeComponent = memo(({ inline, className, children, ...props } try { return JSON.parse(String(children).replace(/\n$/, '')) } - catch (error) {} + catch (error) { } } return JSON.parse('{"title":{"text":"ECharts error - Wrong JSON format."}}') }, [language, children]) @@ -181,7 +157,7 @@ const CodeBlock: CodeComponent = memo(({ inline, className, children, ...props } >
{languageShowName}
- {(['mermaid', 'svg']).includes(language!) && } + {(['mermaid', 'svg']).includes(language!) && } { return (tree) => { const iterate = (node: any) => { - if (node.type === 'element' && !node.properties?.src && node.properties?.ref && node.properties.ref.startsWith('{') && node.properties.ref.endsWith('}')) + if (node.type === 'element' && node.properties?.ref) delete node.properties.ref if (node.children)