Оптимизирована производительность 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

@ -11,7 +11,7 @@ const s3Config: S3Config = {
secretAccessKey: '9xCOoafisG0aB9lJNvdLO1UuK73fBvMcpHMdijrJ',
region: 'ru-1',
endpoint: 'https://s3.twcstorage.ru',
bucket: '617774af-sfera'
bucket: '617774af-sfera',
}
export class S3Service {
@ -22,7 +22,7 @@ export class S3Service {
// fileType используется для будущей логики разделения по типам файлов
const timestamp = Date.now()
const key = `avatars/${timestamp}-${fileName}`
return key
}
@ -32,21 +32,20 @@ export class S3Service {
const formData = new FormData()
formData.append('file', file)
formData.append('userId', userId)
// Загружаем через наш API роут
const response = await fetch('/api/upload-avatar', {
method: 'POST',
body: formData
body: formData,
})
if (!response.ok) {
const errorData = await response.json()
throw new Error(errorData.error || 'Failed to upload avatar')
}
const result = await response.json()
return result.url
} catch (error) {
console.error('Error uploading avatar:', error)
throw error
@ -62,9 +61,9 @@ export class S3Service {
await fetch('/api/delete-avatar', {
method: 'DELETE',
headers: {
'Content-Type': 'application/json'
'Content-Type': 'application/json',
},
body: JSON.stringify({ key })
body: JSON.stringify({ key }),
})
} catch (error) {
console.error('Error deleting avatar:', error)
@ -73,4 +72,4 @@ export class S3Service {
}
}
export default S3Service
export default S3Service