add memo to heavy components (#183)

This commit is contained in:
Anastasiia Solop
2025-07-15 12:17:38 +02:00
committed by GitHub
parent a27207b75e
commit f98088dd5c
6 changed files with 80 additions and 79 deletions

View File

@@ -1,6 +1,6 @@
import { useContext, useMemo, useState } from 'react'; import { useContext, useMemo, useState } from 'react';
import { DiffCard } from './DiffCard'; import { DiffCard } from './DiffCard';
import { MarkdownRenderer } from '@/components/ui/markdown-renderer.tsx'; import MarkdownRenderer from '@/components/ui/markdown-renderer.tsx';
import { import {
AlertCircle, AlertCircle,
Bot, Bot,

View File

@@ -2,7 +2,7 @@ import { useCallback, useContext, useEffect, useMemo, useState } from 'react';
import { Bot, Hammer, ToggleLeft, ToggleRight } from 'lucide-react'; import { Bot, Hammer, ToggleLeft, ToggleRight } from 'lucide-react';
import { Loader } from '@/components/ui/loader.tsx'; import { Loader } from '@/components/ui/loader.tsx';
import { executionProcessesApi } from '@/lib/api.ts'; import { executionProcessesApi } from '@/lib/api.ts';
import { MarkdownRenderer } from '@/components/ui/markdown-renderer.tsx'; import MarkdownRenderer from '@/components/ui/markdown-renderer.tsx';
import type { import type {
ExecutionProcess, ExecutionProcess,
NormalizedConversation, NormalizedConversation,

View File

@@ -1,4 +1,4 @@
import { useMemo } from 'react'; import { memo, useMemo } from 'react';
import { import {
type DragEndEvent, type DragEndEvent,
KanbanBoard, KanbanBoard,
@@ -44,7 +44,7 @@ const statusBoardColors: Record<TaskStatus, string> = {
cancelled: 'hsl(var(--destructive))', cancelled: 'hsl(var(--destructive))',
}; };
export function TaskKanbanBoard({ function TaskKanbanBoard({
tasks, tasks,
searchQuery = '', searchQuery = '',
onDragEnd, onDragEnd,
@@ -108,3 +108,5 @@ export function TaskKanbanBoard({
</KanbanProvider> </KanbanProvider>
); );
} }
export default memo(TaskKanbanBoard);

View File

@@ -1,3 +1,2 @@
export { TaskFormDialog } from './TaskFormDialog'; export { TaskFormDialog } from './TaskFormDialog';
export { TaskCard } from './TaskCard'; export { TaskCard } from './TaskCard';
export { TaskKanbanBoard } from './TaskKanbanBoard';

View File

@@ -1,18 +1,14 @@
import ReactMarkdown from 'react-markdown'; import ReactMarkdown, { Components } from 'react-markdown';
import { memo, useMemo } from 'react';
interface MarkdownRendererProps { interface MarkdownRendererProps {
content: string; content: string;
className?: string; className?: string;
} }
export function MarkdownRenderer({ function MarkdownRenderer({ content, className = '' }: MarkdownRendererProps) {
content, const components: Components = useMemo(
className = '', () => ({
}: MarkdownRendererProps) {
return (
<div className={className}>
<ReactMarkdown
components={{
code: ({ children, ...props }) => ( code: ({ children, ...props }) => (
<code <code
{...props} {...props}
@@ -75,10 +71,14 @@ export function MarkdownRenderer({
{children} {children}
</li> </li>
), ),
}} }),
> []
{content} );
</ReactMarkdown> return (
<div className={className}>
<ReactMarkdown components={components}>{content}</ReactMarkdown>
</div> </div>
); );
} }
export default memo(MarkdownRenderer);

View File

@@ -14,7 +14,7 @@ import {
getMainContainerClasses, getMainContainerClasses,
} from '@/lib/responsive-config'; } from '@/lib/responsive-config';
import { TaskKanbanBoard } from '@/components/tasks/TaskKanbanBoard'; import TaskKanbanBoard from '@/components/tasks/TaskKanbanBoard';
import { TaskDetailsPanel } from '@/components/tasks/TaskDetailsPanel'; import { TaskDetailsPanel } from '@/components/tasks/TaskDetailsPanel';
import type { import type {
CreateTaskAndStart, CreateTaskAndStart,