
🎨 Унификация UI: - Полная унификация визуала вкладок Рефералы и Мои контрагенты - Исправлены React Hooks ошибки в sidebar.tsx - Убрана лишняя обертка glass-card в partners-dashboard.tsx - Исправлена цветовая схема (purple → yellow) - Табличный формат вместо карточного grid-layout - Компактные блоки статистики (4 метрики в ряд) - Правильная прозрачность glass-morphism эффектов 📚 Документация: - Переименован referral-system-rules.md → partners-rules.md - Детальные UI/UX правила в partners-rules.md - Правила унификации в visual-design-rules.md - Обновлен current-session.md - Создан development-diary.md 🚀 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
97 lines
3.6 KiB
TypeScript
97 lines
3.6 KiB
TypeScript
import { resolvers as oldResolvers } from '../resolvers'
|
||
import { JSONScalar, DateTimeScalar } from '../scalars'
|
||
|
||
import { authResolvers } from './auth'
|
||
import { employeeResolvers } from './employees'
|
||
import { logisticsResolvers } from './logistics'
|
||
import { referralResolvers } from './referrals'
|
||
import { suppliesResolvers } from './supplies'
|
||
|
||
// Типы для резолверов
|
||
interface ResolverObject {
|
||
Query?: Record<string, unknown>
|
||
Mutation?: Record<string, unknown>
|
||
[key: string]: unknown
|
||
}
|
||
|
||
// Функция для объединения резолверов
|
||
const mergeResolvers = (...resolvers: ResolverObject[]): ResolverObject => {
|
||
const result: ResolverObject = {
|
||
Query: {},
|
||
Mutation: {},
|
||
}
|
||
|
||
for (const resolver of resolvers) {
|
||
if (resolver?.Query) {
|
||
Object.assign(result.Query, resolver.Query)
|
||
}
|
||
if (resolver?.Mutation) {
|
||
Object.assign(result.Mutation, resolver.Mutation)
|
||
}
|
||
// Объединяем другие типы резолверов (например, Employee, Organization и т.д.)
|
||
for (const [key, value] of Object.entries(resolver)) {
|
||
if (key !== 'Query' && key !== 'Mutation') {
|
||
if (!result[key]) {
|
||
result[key] = {}
|
||
}
|
||
if (typeof value === 'object' && value !== null) {
|
||
Object.assign(result[key], value)
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
return result
|
||
}
|
||
|
||
// Временно импортируем старые резолверы для частей, которые еще не вынесены
|
||
// TODO: Постепенно убрать это после полного рефакторинга
|
||
|
||
// Объединяем новые модульные резолверы с остальными старыми
|
||
const mergedResolvers = mergeResolvers(
|
||
// Скалярные типы
|
||
{
|
||
JSON: JSONScalar,
|
||
DateTime: DateTimeScalar,
|
||
},
|
||
|
||
// Временно добавляем старые резолверы ПЕРВЫМИ, чтобы новые их перезаписали
|
||
{
|
||
Query: (() => {
|
||
const { myEmployees: _myEmployees, logisticsPartners: _logisticsPartners, pendingSuppliesCount: _pendingSuppliesCount, myReferralLink: _myReferralLink, myPartnerLink: _myPartnerLink, myReferralStats: _myReferralStats, myReferrals: _myReferrals, ...filteredQuery } = oldResolvers.Query || {}
|
||
return filteredQuery
|
||
})(),
|
||
Mutation: {
|
||
...oldResolvers.Mutation,
|
||
// Исключаем уже вынесенные Mutation
|
||
sendSmsCode: undefined,
|
||
// verifySmsCode: undefined, // НЕ исключаем - пока в старых резолверах
|
||
verifyInn: undefined,
|
||
// registerFulfillmentOrganization: undefined, // НЕ исключаем - резолвер нужен!
|
||
createEmployee: undefined,
|
||
updateEmployee: undefined,
|
||
deleteEmployee: undefined,
|
||
assignLogisticsToSupply: undefined,
|
||
logisticsConfirmOrder: undefined,
|
||
logisticsRejectOrder: undefined,
|
||
},
|
||
// Остальные типы пока оставляем из старых резолверов
|
||
User: oldResolvers.User,
|
||
Organization: oldResolvers.Organization,
|
||
Product: oldResolvers.Product,
|
||
// SupplyOrder: oldResolvers.SupplyOrder, // Удалено: отсутствует в старых резолверах
|
||
// Employee берем из нового модуля
|
||
Employee: undefined,
|
||
},
|
||
|
||
// НОВЫЕ модульные резолверы ПОСЛЕ старых - чтобы они перезаписали старые
|
||
authResolvers,
|
||
employeeResolvers,
|
||
logisticsResolvers,
|
||
suppliesResolvers,
|
||
referralResolvers,
|
||
)
|
||
|
||
|
||
export const resolvers = mergedResolvers
|