Оптимизирована производительность 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:
@ -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,
|
||||
}
|
||||
);
|
||||
},
|
||||
)
|
||||
|
Reference in New Issue
Block a user