Оптимизирована производительность 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,40 +1,48 @@
import { JSONScalar, DateTimeScalar } from "../scalars";
import { authResolvers } from "./auth";
import { employeeResolvers } from "./employees";
import { logisticsResolvers } from "./logistics";
import { suppliesResolvers } from "./supplies";
import { resolvers as oldResolvers } from '../resolvers'
import { JSONScalar, DateTimeScalar } from '../scalars'
import { authResolvers } from './auth'
import { employeeResolvers } from './employees'
import { logisticsResolvers } from './logistics'
import { suppliesResolvers } from './supplies'
// Типы для резолверов
interface ResolverObject {
Query?: Record<string, unknown>
Mutation?: Record<string, unknown>
[key: string]: unknown
}
// Функция для объединения резолверов
const mergeResolvers = (...resolvers: any[]) => {
const result: any = {
const mergeResolvers = (...resolvers: ResolverObject[]): ResolverObject => {
const result: ResolverObject = {
Query: {},
Mutation: {},
};
}
for (const resolver of resolvers) {
if (resolver.Query) {
Object.assign(result.Query, resolver.Query);
Object.assign(result.Query, resolver.Query)
}
if (resolver.Mutation) {
Object.assign(result.Mutation, resolver.Mutation);
Object.assign(result.Mutation, resolver.Mutation)
}
// Объединяем другие типы резолверов (например, Employee, Organization и т.д.)
for (const [key, value] of Object.entries(resolver)) {
if (key !== "Query" && key !== "Mutation") {
if (key !== 'Query' && key !== 'Mutation') {
if (!result[key]) {
result[key] = {};
result[key] = {}
}
Object.assign(result[key], value);
Object.assign(result[key], value)
}
}
}
return result;
};
return result
}
// Временно импортируем старые резолверы для частей, которые еще не вынесены
// TODO: Постепенно убрать это после полного рефакторинга
import { resolvers as oldResolvers } from "../resolvers";
// Объединяем новые модульные резолверы с остальными старыми
export const resolvers = mergeResolvers(
@ -80,5 +88,5 @@ export const resolvers = mergeResolvers(
// SupplyOrder: oldResolvers.SupplyOrder, // Удалено: отсутствует в старых резолверах
// Employee берем из нового модуля
Employee: undefined,
}
);
},
)