"use client"; import React, { useState, useEffect } from "react"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { Button } from "@/components/ui/button"; import { Alert, AlertDescription } from "@/components/ui/alert"; import { Sidebar } from "@/components/dashboard/sidebar"; import { useSidebar } from "@/hooks/useSidebar"; import { useSearchParams } from "next/navigation"; import { useQuery } from "@apollo/client"; import { Plus, Package, Wrench, ChevronDown, AlertTriangle, } from "lucide-react"; import { GET_PENDING_SUPPLIES_COUNT } from "@/graphql/queries"; import { FulfillmentGoodsTab } from "./fulfillment-supplies/fulfillment-goods-tab"; import { RealSupplyOrdersTab } from "./fulfillment-supplies/real-supply-orders-tab"; import { SellerSupplyOrdersTab } from "./fulfillment-supplies/seller-supply-orders-tab"; import { AllSuppliesTab } from "./fulfillment-supplies/all-supplies-tab"; import { useAuth } from "@/hooks/useAuth"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; export function SuppliesDashboard() { const { getSidebarMargin } = useSidebar(); const searchParams = useSearchParams(); const [activeTab, setActiveTab] = useState("all"); const { user } = useAuth(); // Загружаем счетчик поставок, требующих одобрения const { data: pendingData } = useQuery(GET_PENDING_SUPPLIES_COUNT, { pollInterval: 30000, // Обновляем каждые 30 секунд fetchPolicy: "cache-first", errorPolicy: "ignore", }); const pendingCount = pendingData?.pendingSuppliesCount; const hasPendingItems = pendingCount && pendingCount.total > 0; // Автоматически открываем нужную вкладку при загрузке useEffect(() => { const tab = searchParams.get("tab"); if (tab === "consumables") { setActiveTab("supplies"); } else if (tab === "goods") { setActiveTab("goods"); } }, [searchParams]); // Определяем тип организации для выбора правильного компонента const isWholesale = user?.organization?.type === "WHOLESALE"; return (
{/* Уведомляющий баннер */} {hasPendingItems && ( У вас есть {pendingCount.total} элемент {pendingCount.total > 1 ? pendingCount.total < 5 ? "а" : "ов" : ""} , требующ{pendingCount.total > 1 ? "их" : "ий"} одобрения: {pendingCount.supplyOrders > 0 && ` ${pendingCount.supplyOrders} заказ${ pendingCount.supplyOrders > 1 ? pendingCount.supplyOrders < 5 ? "а" : "ов" : "" } поставок`} {pendingCount.incomingRequests > 0 && pendingCount.supplyOrders > 0 && ", "} {pendingCount.incomingRequests > 0 && ` ${pendingCount.incomingRequests} заявк${ pendingCount.incomingRequests > 1 ? pendingCount.incomingRequests < 5 ? "и" : "" : "а" } на партнерство`} )} {/* Основные вкладки с кнопкой создания */}
Все Товар 0 ? "animate-pulse" : "" }`} > Расходники {pendingCount?.supplyOrders > 0 && (
{pendingCount.supplyOrders}
)}
{ window.location.href = "/supplies/create"; }} className="text-white hover:bg-white/10 cursor-pointer" > Поставка товаров { window.location.href = "/supplies/create-consumables"; }} className="text-white hover:bg-white/10 cursor-pointer" > Поставка расходников
{isWholesale ? ( ) : ( )}
); }