From 4423710a139387276a4c9fe0a4cae164e38c5a6c Mon Sep 17 00:00:00 2001 From: zhujinle <32472522+zhujinle@users.noreply.github.com> Date: Tue, 13 Aug 2024 17:35:12 +0800 Subject: [PATCH] Add ECharts feature ( #6385 ) (#6961) --- web/app/components/base/markdown.tsx | 42 +++++++++++++++++++--------- 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/web/app/components/base/markdown.tsx b/web/app/components/base/markdown.tsx index 3adb4d75e1..02d00334b6 100644 --- a/web/app/components/base/markdown.tsx +++ b/web/app/components/base/markdown.tsx @@ -1,4 +1,5 @@ import ReactMarkdown from 'react-markdown' +import ReactEcharts from 'echarts-for-react' import 'katex/dist/katex.min.css' import RemarkMath from 'remark-math' import RemarkBreaks from 'remark-breaks' @@ -30,6 +31,7 @@ const capitalizationLanguageNameMap: Record = { mermaid: 'Mermaid', markdown: 'MarkDown', makefile: 'MakeFile', + echarts: 'ECharts', } const getCorrectCapitalizationLanguageName = (language: string) => { if (!language) @@ -107,6 +109,14 @@ const CodeBlock: CodeComponent = memo(({ inline, className, children, ...props } const match = /language-(\w+)/.exec(className || '') const language = match?.[1] const languageShowName = getCorrectCapitalizationLanguageName(language || '') + let chartData = JSON.parse(String('{"title":{"text":"Something went wrong."}}').replace(/\n$/, '')) + if (language === 'echarts') { + try { + chartData = JSON.parse(String(children).replace(/\n$/, '')) + } + catch (error) { + } + } // Use `useMemo` to ensure that `SyntaxHighlighter` only re-renders when necessary return useMemo(() => { @@ -136,19 +146,25 @@ const CodeBlock: CodeComponent = memo(({ inline, className, children, ...props } {(language === 'mermaid' && isSVG) ? () - : ( - {String(children).replace(/\n$/, '')} - )} + : ( + (language === 'echarts') + ? (
+
) + : ( + {String(children).replace(/\n$/, '')} + ))} ) : (