diff --git a/packages/twenty-front/src/modules/ai/components/LazyMarkdownRenderer.tsx b/packages/twenty-front/src/modules/ai/components/LazyMarkdownRenderer.tsx index 168b6ae77c..20c0a4373f 100644 --- a/packages/twenty-front/src/modules/ai/components/LazyMarkdownRenderer.tsx +++ b/packages/twenty-front/src/modules/ai/components/LazyMarkdownRenderer.tsx @@ -11,12 +11,15 @@ import { StyledTableScrollContainer, } from '@/ai/components/LazyMarkdownRendererStyledComponents'; import { MarkdownCodeBlock } from '@/ai/components/MarkdownCodeBlock'; +import { marked } from 'marked'; import { cloneElement, isValidElement, lazy, + memo, Suspense, useContext, + useMemo, } from 'react'; import Skeleton, { SkeletonTheme } from 'react-loading-skeleton'; import { getSafeUrl, isDefined } from 'twenty-shared/utils'; @@ -203,19 +206,33 @@ const LoadingSkeleton = () => { ); }; +const MemoizedMarkdownBlock = memo( + ({ blockText }: { blockText: string }) => ( + + {blockText} + + ), + (previousProps, nextProps) => previousProps.blockText === nextProps.blockText, +); + export const LazyMarkdownRenderer = ({ text }: { text: string }) => { + const markdownBlocks = useMemo( + () => marked.lexer(text).map((token) => token.raw), + [text], + ); + return ( }> - - {text} - + {markdownBlocks.map((blockText, blockIndex) => ( + + ))} );