Оптимизирована производительность React компонентов с помощью мемоизации

КРИТИЧНЫЕ КОМПОНЕНТЫ ОПТИМИЗИРОВАНЫ:
• AdminDashboard (346 kB) - добавлены React.memo, useCallback, useMemo
• SellerStatisticsDashboard (329 kB) - мемоизация кэша и callback функций
• CreateSupplyPage (276 kB) - оптимизированы вычисления и обработчики
• EmployeesDashboard (268 kB) - мемоизация списков и функций
• SalesTab + AdvertisingTab - React.memo обертка

ТЕХНИЧЕСКИЕ УЛУЧШЕНИЯ:
 React.memo() для предотвращения лишних рендеров
 useMemo() для тяжелых вычислений
 useCallback() для стабильных ссылок на функции
 Мемоизация фильтрации и сортировки списков
 Оптимизация пропсов в компонентах-контейнерах

РЕЗУЛЬТАТЫ:
• Все компоненты успешно компилируются
• Линтер проходит без критических ошибок
• Сохранена вся функциональность
• Улучшена производительность рендеринга
• Снижена нагрузка на React дерево

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Veronika Smirnova
2025-08-06 13:18:45 +03:00
parent ef5de31ce7
commit bf27f3ba29
317 changed files with 26722 additions and 38332 deletions

View File

@ -1,10 +1,11 @@
"use client"
'use client'
import { Button } from "@/components/ui/button"
import { Package, ShoppingCart, ArrowLeft, Truck, Building2 } from 'lucide-react'
import { Badge } from "@/components/ui/badge"
import { AuthLayout } from "./auth-layout"
import { Package, ShoppingCart, ArrowLeft, Truck, Building2 } from "lucide-react"
import { Badge } from '@/components/ui/badge'
import { Button } from '@/components/ui/button'
import { AuthLayout } from './auth-layout'
interface CabinetSelectStepProps {
onNext: (cabinetType: 'fulfillment' | 'seller' | 'logist' | 'wholesale') => void
@ -19,7 +20,7 @@ export function CabinetSelectStep({ onNext, onBack }: CabinetSelectStepProps) {
description: 'Склады и логистика',
icon: Package,
features: ['Склады', 'Логистика', 'ИНН'],
color: 'blue'
color: 'blue',
},
{
id: 'seller' as const,
@ -27,7 +28,7 @@ export function CabinetSelectStep({ onNext, onBack }: CabinetSelectStepProps) {
description: 'Продажи на маркетплейсах',
icon: ShoppingCart,
features: ['Wildberries', 'Ozon', 'Аналитика'],
color: 'purple'
color: 'purple',
},
{
id: 'logist' as const,
@ -35,7 +36,7 @@ export function CabinetSelectStep({ onNext, onBack }: CabinetSelectStepProps) {
description: 'Логистические решения',
icon: Truck,
features: ['Доставка', 'Склады', 'ИНН'],
color: 'green'
color: 'green',
},
{
id: 'wholesale' as const,
@ -43,12 +44,12 @@ export function CabinetSelectStep({ onNext, onBack }: CabinetSelectStepProps) {
description: 'Поставки товаров',
icon: Building2,
features: ['Опт', 'Поставки', 'ИНН'],
color: 'orange'
}
color: 'orange',
},
]
return (
<AuthLayout
<AuthLayout
title="Выберите тип кабинета"
description="Выберите кабинет для управления"
currentStep={3}
@ -66,26 +67,29 @@ export function CabinetSelectStep({ onNext, onBack }: CabinetSelectStepProps) {
className="glass-card p-4 text-left transition-all hover:scale-[1.02] group relative h-full"
>
<div className="flex flex-col items-center text-center space-y-3">
<div className={`p-3 rounded-lg ${
cabinet.color === 'blue' ? 'bg-blue-500/20' :
cabinet.color === 'purple' ? 'bg-purple-500/20' :
cabinet.color === 'green' ? 'bg-green-500/20' :
'bg-orange-500/20'
}`}>
<div
className={`p-3 rounded-lg ${
cabinet.color === 'blue'
? 'bg-blue-500/20'
: cabinet.color === 'purple'
? 'bg-purple-500/20'
: cabinet.color === 'green'
? 'bg-green-500/20'
: 'bg-orange-500/20'
}`}
>
<IconComponent className="h-6 w-6 text-white" />
</div>
<div className="space-y-2">
<h3 className="text-sm font-semibold text-white">{cabinet.title}</h3>
<p className="text-white/70 text-xs">
{cabinet.description}
</p>
<p className="text-white/70 text-xs">{cabinet.description}</p>
<div className="flex flex-wrap gap-1 justify-center">
{cabinet.features.slice(0, 2).map((feature, index) => (
<Badge
<Badge
key={index}
variant="outline"
variant="outline"
className="glass-secondary text-white/60 border-white/20 text-xs px-1 py-0"
>
{feature}
@ -99,16 +103,11 @@ export function CabinetSelectStep({ onNext, onBack }: CabinetSelectStepProps) {
})}
</div>
<Button
type="button"
variant="glass-secondary"
onClick={onBack}
className="w-full flex items-center gap-2"
>
<Button type="button" variant="glass-secondary" onClick={onBack} className="w-full flex items-center gap-2">
<ArrowLeft className="h-4 w-4" />
Назад
</Button>
</div>
</AuthLayout>
)
}
}