Обновление компонентов интерфейса и оптимизация логики

- Добавлен компонент AppShell в RootLayout для улучшения структуры
- Обновлен компонент Sidebar для предотвращения дублирования при рендеринге
- Оптимизированы импорты в компонентах AdvertisingTab и SalesTab
- Реализована логика кэширования статистики селлера в GraphQL резолверах
This commit is contained in:
Bivekich
2025-08-08 09:24:15 +03:00
parent b43269073f
commit 547e6e7d95
13 changed files with 610 additions and 275 deletions

View File

@ -1,8 +1,8 @@
'use client'
/* eslint-disable @typescript-eslint/no-explicit-any */
import { useQuery, useMutation } from '@apollo/client'
import React, { useState, useEffect } from 'react'
import { useMutation, useQuery } from '@apollo/client'
import { useEffect, useState } from 'react'
import { toast } from 'sonner'
import { Sidebar } from '@/components/dashboard/sidebar'
@ -112,17 +112,17 @@ export function WBWarehouseDashboard() {
// Получаем аналитические данные для данного nmId
const analytics = analyticsMap.get(card.nmID)
if (analytics && Array.isArray(analytics)) {
analytics.forEach((item: any) => {
if (item.stocks && Array.isArray(item.stocks)) {
item.stocks.forEach((stockItem: any) => {
if (analytics && analytics.data && analytics.data.regions && Array.isArray(analytics.data.regions)) {
analytics.data.regions.forEach((region: any) => {
if (region.offices && Array.isArray(region.offices)) {
region.offices.forEach((office: any) => {
stock.stocks.push({
warehouseId: stockItem.warehouseId || 0,
warehouseName: String(stockItem.warehouseName || 'Неизвестный склад'),
quantity: Number(stockItem.quantity) || 0,
quantityFull: Number(stockItem.quantityFull) || 0,
inWayToClient: Number(stockItem.inWayToClient) || 0,
inWayFromClient: Number(stockItem.inWayFromClient) || 0,
warehouseId: office.officeID || 0,
warehouseName: String(office.officeName || 'Неизвестный склад'),
quantity: Number(office.metrics?.stockCount) || 0,
quantityFull: Number(office.metrics?.stockCount) || 0,
inWayToClient: Number(office.metrics?.toClientCount) || 0,
inWayFromClient: Number(office.metrics?.fromClientCount) || 0,
})
})
}
@ -363,12 +363,12 @@ export function WBWarehouseDashboard() {
}, [cacheLoading, user?.organization, initialized])
return (
<div className="h-screen flex overflow-hidden">
<div className="h-screen flex overflow-hidden min-h-0">
<Sidebar />
<main className={`flex-1 ${getSidebarMargin()} px-6 py-4 overflow-hidden transition-all duration-300`}>
<div className="h-full w-full flex flex-col">
<main className={`flex-1 ${getSidebarMargin()} px-6 py-4 overflow-hidden transition-all duration-300 min-h-0 flex flex-col`}>
<div className="h-full w-full flex flex-col min-h-0">
{/* Табы */}
<Tabs value={activeTab} onValueChange={setActiveTab} className="flex-1 flex flex-col">
<Tabs value={activeTab} onValueChange={setActiveTab} className="flex-1 flex flex-col min-h-0">
<TabsList className="grid grid-cols-3 w-full max-w-md mb-6 bg-white/5 border border-white/10">
<TabsTrigger
value="fulfillment"
@ -390,12 +390,12 @@ export function WBWarehouseDashboard() {
</TabsTrigger>
</TabsList>
<div className="flex-1 overflow-hidden">
<TabsContent value="fulfillment" className="h-full mt-0">
<div className="flex-1 overflow-hidden min-h-0">
<TabsContent value="fulfillment" className="h-full mt-0 min-h-0">
<FulfillmentWarehouseTab />
</TabsContent>
<TabsContent value="wildberries" className="h-full mt-0">
<TabsContent value="wildberries" className="h-full mt-0 min-h-0">
<WildberriesWarehouseTab
stocks={stocks}
warehouses={warehouses}
@ -412,7 +412,7 @@ export function WBWarehouseDashboard() {
/>
</TabsContent>
<TabsContent value="my-warehouse" className="h-full mt-0">
<TabsContent value="my-warehouse" className="h-full mt-0 min-h-0">
<MyWarehouseTab />
</TabsContent>
</div>