"use client" import { useState } from 'react' import { useQuery, useMutation } from '@apollo/client' import { Card } from '@/components/ui/card' import { Button } from '@/components/ui/button' import { Badge } from '@/components/ui/badge' import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' import { Users, Clock, Send, CheckCircle, XCircle, ArrowUpCircle, ArrowDownCircle } from 'lucide-react' import { OrganizationCard } from './organization-card' import { GET_MY_COUNTERPARTIES, GET_INCOMING_REQUESTS, GET_OUTGOING_REQUESTS } from '@/graphql/queries' import { RESPOND_TO_COUNTERPARTY_REQUEST, CANCEL_COUNTERPARTY_REQUEST, REMOVE_COUNTERPARTY } from '@/graphql/mutations' interface Organization { id: string inn: string name?: string fullName?: string type: 'FULFILLMENT' | 'SELLER' | 'LOGIST' | 'WHOLESALE' address?: string phones?: Array<{ value: string }> emails?: Array<{ value: string }> createdAt: string users?: Array<{ id: string, avatar?: string }> } interface CounterpartyRequest { id: string message?: string status: 'PENDING' | 'ACCEPTED' | 'REJECTED' | 'CANCELLED' createdAt: string sender: Organization receiver: Organization } export function MarketCounterparties() { const { data: counterpartiesData, loading: counterpartiesLoading, refetch: refetchCounterparties } = useQuery(GET_MY_COUNTERPARTIES) const { data: incomingData, loading: incomingLoading, refetch: refetchIncoming } = useQuery(GET_INCOMING_REQUESTS) const { data: outgoingData, loading: outgoingLoading, refetch: refetchOutgoing } = useQuery(GET_OUTGOING_REQUESTS) const [respondToRequest] = useMutation(RESPOND_TO_COUNTERPARTY_REQUEST, { onCompleted: () => { refetchIncoming() refetchCounterparties() } }) const [cancelRequest] = useMutation(CANCEL_COUNTERPARTY_REQUEST, { onCompleted: () => { refetchOutgoing() } }) const [removeCounterparty] = useMutation(REMOVE_COUNTERPARTY, { onCompleted: () => { refetchCounterparties() } }) const handleAcceptRequest = async (requestId: string) => { try { await respondToRequest({ variables: { requestId, response: 'ACCEPTED' } }) } catch (error) { console.error('Ошибка при принятии заявки:', error) } } const handleRejectRequest = async (requestId: string) => { try { await respondToRequest({ variables: { requestId, response: 'REJECTED' } }) } catch (error) { console.error('Ошибка при отклонении заявки:', error) } } const handleCancelRequest = async (requestId: string) => { try { await cancelRequest({ variables: { requestId } }) } catch (error) { console.error('Ошибка при отмене заявки:', error) } } const handleRemoveCounterparty = async (organizationId: string) => { try { await removeCounterparty({ variables: { organizationId } }) } catch (error) { console.error('Ошибка при удалении контрагента:', error) } } const formatDate = (dateString: string) => { if (!dateString) return '' try { let date: Date // Проверяем, является ли строка числом (Unix timestamp) if (/^\d+$/.test(dateString)) { // Если это Unix timestamp в миллисекундах const timestamp = parseInt(dateString, 10) date = new Date(timestamp) } else { // Обычная строка даты date = new Date(dateString) } if (isNaN(date.getTime())) { return 'Неверная дата' } return date.toLocaleDateString('ru-RU', { year: 'numeric', month: 'long', day: 'numeric' }) } catch (error) { return 'Ошибка даты' } } const counterparties = counterpartiesData?.myCounterparties || [] const incomingRequests = incomingData?.incomingRequests || [] const outgoingRequests = outgoingData?.outgoingRequests || [] return (

Мои контрагенты

Управление контрагентами и заявками

Контрагенты ({counterparties.length}) Входящие ({incomingRequests.length}) Исходящие ({outgoingRequests.length}) {counterpartiesLoading ? (
Загрузка...
) : counterparties.length === 0 ? (

У вас пока нет контрагентов

Перейдите на другие вкладки, чтобы найти партнеров

) : (
{counterparties.map((organization: Organization) => ( ))}
)}
{incomingLoading ? (
Загрузка...
) : incomingRequests.length === 0 ? (

Нет входящих заявок

) : (
{incomingRequests.map((request: CounterpartyRequest) => (
{(request.sender.name || request.sender.fullName || 'O').charAt(0).toUpperCase()}

{request.sender.name || request.sender.fullName}

ИНН: {request.sender.inn}

{request.message && (

"{request.message}"

)}
{formatDate(request.createdAt)}
))}
)}
{outgoingLoading ? (
Загрузка...
) : outgoingRequests.length === 0 ? (

Нет исходящих заявок

) : (
{outgoingRequests.map((request: CounterpartyRequest) => (
{(request.receiver.name || request.receiver.fullName || 'O').charAt(0).toUpperCase()}

{request.receiver.name || request.receiver.fullName}

ИНН: {request.receiver.inn}

{request.message && (

"{request.message}"

)}
{formatDate(request.createdAt)}
{request.status === 'PENDING' ? 'Ожидает' : request.status === 'REJECTED' ? 'Отклонено' : request.status}
{request.status === 'PENDING' && ( )}
))}
)}
) }