Добавлены модели товаров и корзины для оптовиков, реализованы соответствующие мутации и запросы в GraphQL. Обновлен API для загрузки файлов с учетом новых типов данных. Улучшена обработка ошибок и добавлены новые функции для работы с категориями товаров.
This commit is contained in:
@ -1,5 +1,6 @@
|
||||
"use client"
|
||||
|
||||
import { useState } from 'react'
|
||||
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'
|
||||
import { Card } from '@/components/ui/card'
|
||||
import { Sidebar } from '@/components/dashboard/sidebar'
|
||||
@ -8,8 +9,29 @@ import { MarketFulfillment } from './market-fulfillment'
|
||||
import { MarketSellers } from './market-sellers'
|
||||
import { MarketLogistics } from './market-logistics'
|
||||
import { MarketWholesale } from './market-wholesale'
|
||||
import { MarketProducts } from './market-products'
|
||||
import { MarketCategories } from './market-categories'
|
||||
import { MarketRequests } from './market-requests'
|
||||
|
||||
export function MarketDashboard() {
|
||||
const [productsView, setProductsView] = useState<'categories' | 'products' | 'cart'>('categories')
|
||||
const [selectedCategory, setSelectedCategory] = useState<{ id: string; name: string } | null>(null)
|
||||
|
||||
const handleSelectCategory = (categoryId: string, categoryName: string) => {
|
||||
setSelectedCategory({ id: categoryId, name: categoryName })
|
||||
setProductsView('products')
|
||||
}
|
||||
|
||||
const handleBackToCategories = () => {
|
||||
setProductsView('categories')
|
||||
setSelectedCategory(null)
|
||||
}
|
||||
|
||||
const handleShowCart = () => {
|
||||
setProductsView('cart')
|
||||
setSelectedCategory(null)
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="h-screen bg-gradient-smooth flex overflow-hidden">
|
||||
<Sidebar />
|
||||
@ -17,8 +39,18 @@ export function MarketDashboard() {
|
||||
<div className="h-full w-full flex flex-col">
|
||||
{/* Основной контент с табами */}
|
||||
<div className="flex-1 overflow-hidden">
|
||||
<Tabs defaultValue="counterparties" className="h-full flex flex-col">
|
||||
<TabsList className="grid w-full grid-cols-5 bg-white/5 backdrop-blur border-white/10 flex-shrink-0">
|
||||
<Tabs
|
||||
defaultValue="counterparties"
|
||||
className="h-full flex flex-col"
|
||||
onValueChange={(value) => {
|
||||
if (value === 'products') {
|
||||
// Сбрасываем состояние когда переходим на вкладку товаров
|
||||
setProductsView('categories')
|
||||
setSelectedCategory(null)
|
||||
}
|
||||
}}
|
||||
>
|
||||
<TabsList className="grid w-full grid-cols-6 bg-white/5 backdrop-blur border-white/10 flex-shrink-0">
|
||||
<TabsTrigger
|
||||
value="counterparties"
|
||||
className="data-[state=active]:bg-white/20 data-[state=active]:text-white text-white/70"
|
||||
@ -49,6 +81,12 @@ export function MarketDashboard() {
|
||||
>
|
||||
Оптовик
|
||||
</TabsTrigger>
|
||||
<TabsTrigger
|
||||
value="products"
|
||||
className="data-[state=active]:bg-white/20 data-[state=active]:text-white text-white/70"
|
||||
>
|
||||
Товары
|
||||
</TabsTrigger>
|
||||
</TabsList>
|
||||
|
||||
<TabsContent value="counterparties" className="flex-1 overflow-hidden mt-6">
|
||||
@ -80,6 +118,22 @@ export function MarketDashboard() {
|
||||
<MarketWholesale />
|
||||
</Card>
|
||||
</TabsContent>
|
||||
|
||||
<TabsContent value="products" className="flex-1 overflow-hidden mt-6">
|
||||
<Card className="glass-card h-full overflow-hidden p-0">
|
||||
{productsView === 'categories' ? (
|
||||
<MarketCategories onSelectCategory={handleSelectCategory} onShowCart={handleShowCart} />
|
||||
) : productsView === 'products' ? (
|
||||
<MarketProducts
|
||||
selectedCategoryId={selectedCategory?.id}
|
||||
selectedCategoryName={selectedCategory?.name}
|
||||
onBackToCategories={handleBackToCategories}
|
||||
/>
|
||||
) : (
|
||||
<MarketRequests />
|
||||
)}
|
||||
</Card>
|
||||
</TabsContent>
|
||||
</Tabs>
|
||||
</div>
|
||||
</div>
|
||||
|
Reference in New Issue
Block a user